From a05d200ac8961ec29c8eebab46ca1fa249061a2f Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Tue, 27 Jun 2023 12:43:02 +0300 Subject: [PATCH 1/9] Add SwapStats to NodeStats, PodStats and ContainerStats Signed-off-by: Itamar Holder --- .../kubelet/pkg/apis/stats/v1alpha1/types.go | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/staging/src/k8s.io/kubelet/pkg/apis/stats/v1alpha1/types.go b/staging/src/k8s.io/kubelet/pkg/apis/stats/v1alpha1/types.go index 5e75fefe53f..f201ce361d4 100644 --- a/staging/src/k8s.io/kubelet/pkg/apis/stats/v1alpha1/types.go +++ b/staging/src/k8s.io/kubelet/pkg/apis/stats/v1alpha1/types.go @@ -59,6 +59,9 @@ type NodeStats struct { // Stats about the rlimit of system. // +optional Rlimit *RlimitStats `json:"rlimit,omitempty"` + // Stats pertaining to swap resources. This is reported to non-windows systems only. + // +optional + Swap *SwapStats `json:"swap,omitempty"` } // RlimitStats are stats rlimit of OS. @@ -131,6 +134,9 @@ type PodStats struct { // ProcessStats pertaining to processes. // +optional ProcessStats *ProcessStats `json:"process_stats,omitempty"` + // Stats pertaining to swap resources. This is reported to non-windows systems only. + // +optional + Swap *SwapStats `json:"swap,omitempty"` } // ContainerStats holds container-level unprocessed sample stats. @@ -159,6 +165,9 @@ type ContainerStats struct { // +patchMergeKey=name // +patchStrategy=merge UserDefinedMetrics []UserDefinedMetric `json:"userDefinedMetrics,omitempty" patchStrategy:"merge" patchMergeKey:"name"` + // Stats pertaining to swap resources. This is reported to non-windows systems only. + // +optional + Swap *SwapStats `json:"swap,omitempty"` } // PodReference contains enough information to locate the referenced pod. @@ -237,6 +246,19 @@ type MemoryStats struct { MajorPageFaults *uint64 `json:"majorPageFaults,omitempty"` } +// SwapStats contains data about memory usage +type SwapStats struct { + // The time at which these stats were updated. + Time metav1.Time `json:"time"` + // Available swap memory for use. This is defined as the - . + // If swap limit is undefined, this value is omitted. + // +optional + SwapAvailableBytes *uint64 `json:"swapAvailableBytes,omitempty"` + // Total swap memory in use. + // +optional + SwapUsageBytes *uint64 `json:"swapUsageBytes,omitempty"` +} + // AcceleratorStats contains stats for accelerators attached to the container. type AcceleratorStats struct { // Make of the accelerator (nvidia, amd, google etc.) From c74ee8045dea7dc097cb3a9cfc110d7bda87ed6a Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Tue, 27 Jun 2023 13:10:14 +0300 Subject: [PATCH 2/9] Add SwapStats to summary API through cadvisor Signed-off-by: Itamar Holder --- pkg/kubelet/stats/cadvisor_stats_provider.go | 2 ++ pkg/kubelet/stats/helper.go | 24 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/pkg/kubelet/stats/cadvisor_stats_provider.go b/pkg/kubelet/stats/cadvisor_stats_provider.go index be428561d1e..cf900550532 100644 --- a/pkg/kubelet/stats/cadvisor_stats_provider.go +++ b/pkg/kubelet/stats/cadvisor_stats_provider.go @@ -152,6 +152,7 @@ func (p *cadvisorStatsProvider) ListPodStats(_ context.Context) ([]statsapi.PodS cpu, memory := cadvisorInfoToCPUandMemoryStats(podInfo) podStats.CPU = cpu podStats.Memory = memory + podStats.Swap = cadvisorInfoToSwapStats(podInfo) podStats.ProcessStats = cadvisorInfoToProcessStats(podInfo) } @@ -227,6 +228,7 @@ func (p *cadvisorStatsProvider) ListPodCPUAndMemoryStats(_ context.Context) ([]s cpu, memory := cadvisorInfoToCPUandMemoryStats(podInfo) podStats.CPU = cpu podStats.Memory = memory + podStats.Swap = cadvisorInfoToSwapStats(podInfo) } result = append(result, *podStats) } diff --git a/pkg/kubelet/stats/helper.go b/pkg/kubelet/stats/helper.go index dd968b06eea..c6ca3a064e0 100644 --- a/pkg/kubelet/stats/helper.go +++ b/pkg/kubelet/stats/helper.go @@ -95,6 +95,7 @@ func cadvisorInfoToContainerStats(name string, info *cadvisorapiv2.ContainerInfo cpu, memory := cadvisorInfoToCPUandMemoryStats(info) result.CPU = cpu result.Memory = memory + result.Swap = cadvisorInfoToSwapStats(info) // NOTE: if they can be found, log stats will be overwritten // by the caller, as it knows more information about the pod, @@ -257,6 +258,29 @@ func cadvisorInfoToUserDefinedMetrics(info *cadvisorapiv2.ContainerInfo) []stats return udm } +func cadvisorInfoToSwapStats(info *cadvisorapiv2.ContainerInfo) *statsapi.SwapStats { + cstat, found := latestContainerStats(info) + if !found { + return nil + } + + var swapStats *statsapi.SwapStats + + if info.Spec.HasMemory && cstat.Memory != nil { + swapStats = &statsapi.SwapStats{ + Time: metav1.NewTime(cstat.Timestamp), + SwapUsageBytes: &cstat.Memory.Swap, + } + + if !isMemoryUnlimited(info.Spec.Memory.SwapLimit) { + swapAvailableBytes := info.Spec.Memory.SwapLimit - cstat.Memory.Swap + swapStats.SwapAvailableBytes = &swapAvailableBytes + } + } + + return swapStats +} + // latestContainerStats returns the latest container stats from cadvisor, or nil if none exist func latestContainerStats(info *cadvisorapiv2.ContainerInfo) (*cadvisorapiv2.ContainerStats, bool) { stats := info.Stats From 053d7ac61f5ce9d61e69d524a5d762252851578f Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Tue, 27 Jun 2023 13:49:32 +0300 Subject: [PATCH 3/9] Unit tests: cadvisor swap stats Signed-off-by: Itamar Holder --- .../stats/cadvisor_stats_provider_test.go | 8 ++++++++ pkg/kubelet/stats/provider_test.go | 20 ++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/stats/cadvisor_stats_provider_test.go b/pkg/kubelet/stats/cadvisor_stats_provider_test.go index 8eab29909cc..b6dddd2b8b0 100644 --- a/pkg/kubelet/stats/cadvisor_stats_provider_test.go +++ b/pkg/kubelet/stats/cadvisor_stats_provider_test.go @@ -294,11 +294,13 @@ func TestCadvisorListPodStats(t *testing.T) { assert.EqualValues(t, testTime(creationTime, seedPod0Container0).Unix(), con.StartTime.Time.Unix()) checkCPUStats(t, "Pod0Container0", seedPod0Container0, con.CPU) checkMemoryStats(t, "Pod0Conainer0", seedPod0Container0, infos["/pod0-c0"], con.Memory) + checkSwapStats(t, "Pod0Conainer0", seedPod0Container0, infos["/pod0-c0"], con.Swap) con = indexCon[cName01] assert.EqualValues(t, testTime(creationTime, seedPod0Container1).Unix(), con.StartTime.Time.Unix()) checkCPUStats(t, "Pod0Container1", seedPod0Container1, con.CPU) checkMemoryStats(t, "Pod0Container1", seedPod0Container1, infos["/pod0-c1"], con.Memory) + checkSwapStats(t, "Pod0Container1", seedPod0Container1, infos["/pod0-c1"], con.Swap) assert.EqualValues(t, p0Time.Unix(), ps.StartTime.Time.Unix()) checkNetworkStats(t, "Pod0", seedPod0Infra, ps.Network) @@ -309,6 +311,9 @@ func TestCadvisorListPodStats(t *testing.T) { if ps.Memory != nil { checkMemoryStats(t, "Pod0", seedPod0Infra, infos["/pod0-i"], ps.Memory) } + if ps.Swap != nil { + checkSwapStats(t, "Pod0", seedPod0Infra, infos["/pod0-i"], ps.Swap) + } // Validate Pod1 Results ps, found = indexPods[prf1] @@ -318,6 +323,7 @@ func TestCadvisorListPodStats(t *testing.T) { assert.Equal(t, cName10, con.Name) checkCPUStats(t, "Pod1Container0", seedPod1Container, con.CPU) checkMemoryStats(t, "Pod1Container0", seedPod1Container, infos["/pod1-c0"], con.Memory) + checkSwapStats(t, "Pod1Container0", seedPod1Container, infos["/pod1-c0"], con.Swap) checkNetworkStats(t, "Pod1", seedPod1Infra, ps.Network) // Validate Pod2 Results @@ -328,6 +334,7 @@ func TestCadvisorListPodStats(t *testing.T) { assert.Equal(t, cName20, con.Name) checkCPUStats(t, "Pod2Container0", seedPod2Container, con.CPU) checkMemoryStats(t, "Pod2Container0", seedPod2Container, infos["/pod2-c0"], con.Memory) + checkSwapStats(t, "Pod2Container0", seedPod2Container, infos["/pod2-c0"], con.Swap) checkNetworkStats(t, "Pod2", seedPod2Infra, ps.Network) // Validate Pod3 Results @@ -344,6 +351,7 @@ func TestCadvisorListPodStats(t *testing.T) { assert.Equal(t, cName31, con.Name) checkCPUStats(t, "Pod3Container1", seedPod3Container1, con.CPU) checkMemoryStats(t, "Pod3Container1", seedPod3Container1, infos["/pod3-c1"], con.Memory) + checkSwapStats(t, "Pod3Container1", seedPod3Container1, infos["/pod3-c1"], con.Swap) } func TestCadvisorListPodCPUAndMemoryStats(t *testing.T) { diff --git a/pkg/kubelet/stats/provider_test.go b/pkg/kubelet/stats/provider_test.go index 4c56a3ec48d..4923f53de9a 100644 --- a/pkg/kubelet/stats/provider_test.go +++ b/pkg/kubelet/stats/provider_test.go @@ -63,6 +63,7 @@ const ( offsetFsBaseUsageBytes offsetFsInodeUsage offsetAcceleratorDutyCycle + offsetMemSwapUsageBytes ) var ( @@ -101,6 +102,7 @@ func TestGetCgroupStats(t *testing.T) { checkCPUStats(t, "", containerInfoSeed, cs.CPU) checkMemoryStats(t, "", containerInfoSeed, containerInfo, cs.Memory) checkNetworkStats(t, "", containerInfoSeed, ns) + checkSwapStats(t, "", containerInfoSeed, containerInfo, cs.Swap) assert.Equal(cgroupName, cs.Name) assert.Equal(metav1.NewTime(containerInfo.Spec.CreationTime), cs.StartTime) @@ -497,7 +499,8 @@ func getTestContainerInfo(seed int, podName string, podNamespace string, contain HasNetwork: true, Labels: labels, Memory: cadvisorapiv2.MemorySpec{ - Limit: unlimitedMemory, + Limit: unlimitedMemory, + SwapLimit: unlimitedMemory, }, CustomMetrics: generateCustomMetricSpec(), } @@ -518,6 +521,7 @@ func getTestContainerInfo(seed int, podName string, podNamespace string, contain Pgfault: uint64(seed + offsetMemPageFaults), Pgmajfault: uint64(seed + offsetMemMajorPageFaults), }, + Swap: uint64(seed + offsetMemSwapUsageBytes), }, Network: &cadvisorapiv2.NetworkStats{ Interfaces: []cadvisorapiv1.InterfaceStats{{ @@ -696,6 +700,20 @@ func checkMemoryStats(t *testing.T, label string, seed int, info cadvisorapiv2.C } } +func checkSwapStats(t *testing.T, label string, seed int, info cadvisorapiv2.ContainerInfo, stats *statsapi.SwapStats) { + label += ".Swap" + + assert.EqualValues(t, testTime(timestamp, seed).Unix(), stats.Time.Time.Unix(), label+".Time") + assert.EqualValues(t, seed+offsetMemSwapUsageBytes, *stats.SwapUsageBytes, label+".SwapUsageBytes") + + if !info.Spec.HasMemory || isMemoryUnlimited(info.Spec.Memory.SwapLimit) { + assert.Nil(t, stats.SwapAvailableBytes, label+".SwapAvailableBytes") + } else { + expected := info.Spec.Memory.Limit - *stats.SwapUsageBytes + assert.EqualValues(t, expected, *stats.SwapAvailableBytes, label+".AvailableBytes") + } +} + func checkFsStats(t *testing.T, label string, seed int, stats *statsapi.FsStats) { assert.EqualValues(t, seed+offsetFsCapacity, *stats.CapacityBytes, label+".CapacityBytes") assert.EqualValues(t, seed+offsetFsAvailable, *stats.AvailableBytes, label+".AvailableBytes") From 87ff9c4525670c64e4d1120d1b70c301528b31e3 Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Wed, 12 Jul 2023 16:55:26 +0300 Subject: [PATCH 4/9] Add swap statistics to CRI-API Signed-off-by: Itamar Holder --- pkg/kubelet/stats/cri_stats_provider.go | 14 + .../cri-api/pkg/apis/runtime/v1/api.pb.go | 1240 +++++++++++------ .../cri-api/pkg/apis/runtime/v1/api.proto | 11 + 3 files changed, 823 insertions(+), 442 deletions(-) diff --git a/pkg/kubelet/stats/cri_stats_provider.go b/pkg/kubelet/stats/cri_stats_provider.go index d1e1d90b275..06ba812972d 100644 --- a/pkg/kubelet/stats/cri_stats_provider.go +++ b/pkg/kubelet/stats/cri_stats_provider.go @@ -577,6 +577,7 @@ func (p *criStatsProvider) makeContainerStats( CPU: &statsapi.CPUStats{}, Memory: &statsapi.MemoryStats{}, Rootfs: &statsapi.FsStats{}, + Swap: &statsapi.SwapStats{}, // UserDefinedMetrics is not supported by CRI. } if stats.Cpu != nil { @@ -607,6 +608,19 @@ func (p *criStatsProvider) makeContainerStats( result.Memory.Time = metav1.NewTime(time.Unix(0, time.Now().UnixNano())) result.Memory.WorkingSetBytes = uint64Ptr(0) } + if stats.Swap != nil { + result.Swap.Time = metav1.NewTime(time.Unix(0, stats.Swap.Timestamp)) + if stats.Swap.SwapUsageBytes != nil { + result.Swap.SwapUsageBytes = &stats.Swap.SwapUsageBytes.Value + } + if stats.Swap.SwapAvailableBytes != nil { + result.Swap.SwapAvailableBytes = &stats.Swap.SwapAvailableBytes.Value + } + } else { + result.Swap.Time = metav1.NewTime(time.Unix(0, time.Now().UnixNano())) + result.Swap.SwapUsageBytes = uint64Ptr(0) + result.Swap.SwapAvailableBytes = uint64Ptr(0) + } if stats.WritableLayer != nil { result.Rootfs.Time = metav1.NewTime(time.Unix(0, stats.WritableLayer.Timestamp)) if stats.WritableLayer.UsedBytes != nil { diff --git a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go index a727e771c66..cbe00d687e9 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go +++ b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go @@ -8405,9 +8405,11 @@ type ContainerStats struct { // Memory usage gathered from the container. Memory *MemoryUsage `protobuf:"bytes,3,opt,name=memory,proto3" json:"memory,omitempty"` // Usage of the writable layer. - WritableLayer *FilesystemUsage `protobuf:"bytes,4,opt,name=writable_layer,json=writableLayer,proto3" json:"writable_layer,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + WritableLayer *FilesystemUsage `protobuf:"bytes,4,opt,name=writable_layer,json=writableLayer,proto3" json:"writable_layer,omitempty"` + // Swap usage gathered from the container. + Swap *SwapUsage `protobuf:"bytes,5,opt,name=swap,proto3" json:"swap,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ContainerStats) Reset() { *m = ContainerStats{} } @@ -8470,6 +8472,13 @@ func (m *ContainerStats) GetWritableLayer() *FilesystemUsage { return nil } +func (m *ContainerStats) GetSwap() *SwapUsage { + if m != nil { + return m.Swap + } + return nil +} + // WindowsContainerStats provides the resource usage statistics for a container specific for Windows type WindowsContainerStats struct { // Information of the container. @@ -8777,6 +8786,70 @@ func (m *MemoryUsage) GetMajorPageFaults() *UInt64Value { return nil } +type SwapUsage struct { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Available swap for use. This is defined as the swap limit - swapUsageBytes. + SwapAvailableBytes *UInt64Value `protobuf:"bytes,2,opt,name=swap_available_bytes,json=swapAvailableBytes,proto3" json:"swap_available_bytes,omitempty"` + // Total memory in use. This includes all memory regardless of when it was accessed. + SwapUsageBytes *UInt64Value `protobuf:"bytes,3,opt,name=swap_usage_bytes,json=swapUsageBytes,proto3" json:"swap_usage_bytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SwapUsage) Reset() { *m = SwapUsage{} } +func (*SwapUsage) ProtoMessage() {} +func (*SwapUsage) Descriptor() ([]byte, []int) { + return fileDescriptor_00212fb1f9d3bf1c, []int{128} +} +func (m *SwapUsage) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SwapUsage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SwapUsage.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SwapUsage) XXX_Merge(src proto.Message) { + xxx_messageInfo_SwapUsage.Merge(m, src) +} +func (m *SwapUsage) XXX_Size() int { + return m.Size() +} +func (m *SwapUsage) XXX_DiscardUnknown() { + xxx_messageInfo_SwapUsage.DiscardUnknown(m) +} + +var xxx_messageInfo_SwapUsage proto.InternalMessageInfo + +func (m *SwapUsage) GetTimestamp() int64 { + if m != nil { + return m.Timestamp + } + return 0 +} + +func (m *SwapUsage) GetSwapAvailableBytes() *UInt64Value { + if m != nil { + return m.SwapAvailableBytes + } + return nil +} + +func (m *SwapUsage) GetSwapUsageBytes() *UInt64Value { + if m != nil { + return m.SwapUsageBytes + } + return nil +} + // WindowsMemoryUsage provides the memory usage information specific to Windows type WindowsMemoryUsage struct { // Timestamp in nanoseconds at which the information were collected. Must be > 0. @@ -8794,7 +8867,7 @@ type WindowsMemoryUsage struct { func (m *WindowsMemoryUsage) Reset() { *m = WindowsMemoryUsage{} } func (*WindowsMemoryUsage) ProtoMessage() {} func (*WindowsMemoryUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{128} + return fileDescriptor_00212fb1f9d3bf1c, []int{129} } func (m *WindowsMemoryUsage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8861,7 +8934,7 @@ type ReopenContainerLogRequest struct { func (m *ReopenContainerLogRequest) Reset() { *m = ReopenContainerLogRequest{} } func (*ReopenContainerLogRequest) ProtoMessage() {} func (*ReopenContainerLogRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{129} + return fileDescriptor_00212fb1f9d3bf1c, []int{130} } func (m *ReopenContainerLogRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8905,7 +8978,7 @@ type ReopenContainerLogResponse struct { func (m *ReopenContainerLogResponse) Reset() { *m = ReopenContainerLogResponse{} } func (*ReopenContainerLogResponse) ProtoMessage() {} func (*ReopenContainerLogResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{130} + return fileDescriptor_00212fb1f9d3bf1c, []int{131} } func (m *ReopenContainerLogResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8950,7 +9023,7 @@ type CheckpointContainerRequest struct { func (m *CheckpointContainerRequest) Reset() { *m = CheckpointContainerRequest{} } func (*CheckpointContainerRequest) ProtoMessage() {} func (*CheckpointContainerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{131} + return fileDescriptor_00212fb1f9d3bf1c, []int{132} } func (m *CheckpointContainerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9008,7 +9081,7 @@ type CheckpointContainerResponse struct { func (m *CheckpointContainerResponse) Reset() { *m = CheckpointContainerResponse{} } func (*CheckpointContainerResponse) ProtoMessage() {} func (*CheckpointContainerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{132} + return fileDescriptor_00212fb1f9d3bf1c, []int{133} } func (m *CheckpointContainerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9045,7 +9118,7 @@ type GetEventsRequest struct { func (m *GetEventsRequest) Reset() { *m = GetEventsRequest{} } func (*GetEventsRequest) ProtoMessage() {} func (*GetEventsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{133} + return fileDescriptor_00212fb1f9d3bf1c, []int{134} } func (m *GetEventsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9092,7 +9165,7 @@ type ContainerEventResponse struct { func (m *ContainerEventResponse) Reset() { *m = ContainerEventResponse{} } func (*ContainerEventResponse) ProtoMessage() {} func (*ContainerEventResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{134} + return fileDescriptor_00212fb1f9d3bf1c, []int{135} } func (m *ContainerEventResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9164,7 +9237,7 @@ type ListMetricDescriptorsRequest struct { func (m *ListMetricDescriptorsRequest) Reset() { *m = ListMetricDescriptorsRequest{} } func (*ListMetricDescriptorsRequest) ProtoMessage() {} func (*ListMetricDescriptorsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{135} + return fileDescriptor_00212fb1f9d3bf1c, []int{136} } func (m *ListMetricDescriptorsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9202,7 +9275,7 @@ type ListMetricDescriptorsResponse struct { func (m *ListMetricDescriptorsResponse) Reset() { *m = ListMetricDescriptorsResponse{} } func (*ListMetricDescriptorsResponse) ProtoMessage() {} func (*ListMetricDescriptorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{136} + return fileDescriptor_00212fb1f9d3bf1c, []int{137} } func (m *ListMetricDescriptorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9255,7 +9328,7 @@ type MetricDescriptor struct { func (m *MetricDescriptor) Reset() { *m = MetricDescriptor{} } func (*MetricDescriptor) ProtoMessage() {} func (*MetricDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{137} + return fileDescriptor_00212fb1f9d3bf1c, []int{138} } func (m *MetricDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9313,7 +9386,7 @@ type ListPodSandboxMetricsRequest struct { func (m *ListPodSandboxMetricsRequest) Reset() { *m = ListPodSandboxMetricsRequest{} } func (*ListPodSandboxMetricsRequest) ProtoMessage() {} func (*ListPodSandboxMetricsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{138} + return fileDescriptor_00212fb1f9d3bf1c, []int{139} } func (m *ListPodSandboxMetricsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9351,7 +9424,7 @@ type ListPodSandboxMetricsResponse struct { func (m *ListPodSandboxMetricsResponse) Reset() { *m = ListPodSandboxMetricsResponse{} } func (*ListPodSandboxMetricsResponse) ProtoMessage() {} func (*ListPodSandboxMetricsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{139} + return fileDescriptor_00212fb1f9d3bf1c, []int{140} } func (m *ListPodSandboxMetricsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9398,7 +9471,7 @@ type PodSandboxMetrics struct { func (m *PodSandboxMetrics) Reset() { *m = PodSandboxMetrics{} } func (*PodSandboxMetrics) ProtoMessage() {} func (*PodSandboxMetrics) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{140} + return fileDescriptor_00212fb1f9d3bf1c, []int{141} } func (m *PodSandboxMetrics) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9458,7 +9531,7 @@ type ContainerMetrics struct { func (m *ContainerMetrics) Reset() { *m = ContainerMetrics{} } func (*ContainerMetrics) ProtoMessage() {} func (*ContainerMetrics) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{141} + return fileDescriptor_00212fb1f9d3bf1c, []int{142} } func (m *ContainerMetrics) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9521,7 +9594,7 @@ type Metric struct { func (m *Metric) Reset() { *m = Metric{} } func (*Metric) ProtoMessage() {} func (*Metric) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{142} + return fileDescriptor_00212fb1f9d3bf1c, []int{143} } func (m *Metric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9593,7 +9666,7 @@ type RuntimeConfigRequest struct { func (m *RuntimeConfigRequest) Reset() { *m = RuntimeConfigRequest{} } func (*RuntimeConfigRequest) ProtoMessage() {} func (*RuntimeConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{143} + return fileDescriptor_00212fb1f9d3bf1c, []int{144} } func (m *RuntimeConfigRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9634,7 +9707,7 @@ type RuntimeConfigResponse struct { func (m *RuntimeConfigResponse) Reset() { *m = RuntimeConfigResponse{} } func (*RuntimeConfigResponse) ProtoMessage() {} func (*RuntimeConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{144} + return fileDescriptor_00212fb1f9d3bf1c, []int{145} } func (m *RuntimeConfigResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9686,7 +9759,7 @@ type LinuxRuntimeConfiguration struct { func (m *LinuxRuntimeConfiguration) Reset() { *m = LinuxRuntimeConfiguration{} } func (*LinuxRuntimeConfiguration) ProtoMessage() {} func (*LinuxRuntimeConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{145} + return fileDescriptor_00212fb1f9d3bf1c, []int{146} } func (m *LinuxRuntimeConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9888,6 +9961,7 @@ func init() { proto.RegisterType((*CpuUsage)(nil), "runtime.v1.CpuUsage") proto.RegisterType((*WindowsCpuUsage)(nil), "runtime.v1.WindowsCpuUsage") proto.RegisterType((*MemoryUsage)(nil), "runtime.v1.MemoryUsage") + proto.RegisterType((*SwapUsage)(nil), "runtime.v1.SwapUsage") proto.RegisterType((*WindowsMemoryUsage)(nil), "runtime.v1.WindowsMemoryUsage") proto.RegisterType((*ReopenContainerLogRequest)(nil), "runtime.v1.ReopenContainerLogRequest") proto.RegisterType((*ReopenContainerLogResponse)(nil), "runtime.v1.ReopenContainerLogResponse") @@ -9911,427 +9985,431 @@ func init() { func init() { proto.RegisterFile("api.proto", fileDescriptor_00212fb1f9d3bf1c) } var fileDescriptor_00212fb1f9d3bf1c = []byte{ - // 6720 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7d, 0x5b, 0x6c, 0x1c, 0xc9, - 0x75, 0x28, 0x7b, 0x66, 0x48, 0xce, 0x9c, 0xe1, 0x0c, 0x87, 0x25, 0x8a, 0xa4, 0x46, 0xef, 0xde, - 0x97, 0xa4, 0x5d, 0x3d, 0x56, 0xfb, 0x92, 0xe4, 0x7d, 0x68, 0x44, 0x72, 0xb5, 0xb3, 0x96, 0xc8, - 0x71, 0x0f, 0x29, 0x7b, 0xd7, 0x17, 0xee, 0xdb, 0x9a, 0x2e, 0x0e, 0x7b, 0x35, 0xd3, 0xdd, 0xee, - 0xee, 0x91, 0x44, 0x7f, 0xdd, 0xcf, 0x7b, 0xfd, 0x65, 0xe0, 0xc6, 0x31, 0x60, 0x04, 0x09, 0xf2, - 0x11, 0x24, 0x7f, 0x09, 0x02, 0x24, 0x70, 0x10, 0x24, 0x01, 0x8c, 0xc4, 0x70, 0x02, 0x04, 0xc8, - 0x47, 0x02, 0xf8, 0x23, 0x41, 0xec, 0x4d, 0x80, 0x00, 0xf9, 0xc8, 0x4f, 0xfc, 0x91, 0xaf, 0x38, - 0xa8, 0x57, 0x77, 0x57, 0x3f, 0x66, 0x86, 0xdc, 0xf5, 0xee, 0xfa, 0x8b, 0xd3, 0xa7, 0xce, 0x39, - 0x75, 0xea, 0xd4, 0xa9, 0x53, 0xa7, 0xaa, 0x4e, 0x15, 0xa1, 0x62, 0xb8, 0xd6, 0x15, 0xd7, 0x73, - 0x02, 0x07, 0x81, 0x37, 0xb2, 0x03, 0x6b, 0x88, 0xaf, 0x3c, 0x7e, 0xb9, 0x79, 0xb9, 0x6f, 0x05, - 0xfb, 0xa3, 0x87, 0x57, 0x7a, 0xce, 0xf0, 0x6a, 0xdf, 0xe9, 0x3b, 0x57, 0x29, 0xca, 0xc3, 0xd1, - 0x1e, 0xfd, 0xa2, 0x1f, 0xf4, 0x17, 0x23, 0x55, 0x2f, 0x41, 0xfd, 0x01, 0xf6, 0x7c, 0xcb, 0xb1, - 0x35, 0xfc, 0xcd, 0x11, 0xf6, 0x03, 0xb4, 0x06, 0xf3, 0x8f, 0x19, 0x64, 0x4d, 0x39, 0xa7, 0x5c, - 0xa8, 0x68, 0xe2, 0x53, 0xfd, 0x5d, 0x05, 0x16, 0x43, 0x64, 0xdf, 0x75, 0x6c, 0x1f, 0xe7, 0x63, - 0xa3, 0xf3, 0xb0, 0xc0, 0xc5, 0xd2, 0x6d, 0x63, 0x88, 0xd7, 0x0a, 0xb4, 0xb8, 0xca, 0x61, 0x5b, - 0xc6, 0x10, 0xa3, 0x17, 0x60, 0x51, 0xa0, 0x08, 0x26, 0x45, 0x8a, 0x55, 0xe7, 0x60, 0x5e, 0x1b, - 0xba, 0x02, 0xc7, 0x04, 0xa2, 0xe1, 0x5a, 0x21, 0x72, 0x89, 0x22, 0x2f, 0xf1, 0xa2, 0x96, 0x6b, - 0x71, 0x7c, 0xf5, 0xeb, 0x50, 0xd9, 0xd8, 0xea, 0xae, 0x3b, 0xf6, 0x9e, 0xd5, 0x27, 0x22, 0xfa, - 0xd8, 0x23, 0x34, 0x6b, 0xca, 0xb9, 0x22, 0x11, 0x91, 0x7f, 0xa2, 0x26, 0x94, 0x7d, 0x6c, 0x78, - 0xbd, 0x7d, 0xec, 0xaf, 0x15, 0x68, 0x51, 0xf8, 0x4d, 0xa8, 0x1c, 0x37, 0xb0, 0x1c, 0xdb, 0x5f, - 0x2b, 0x32, 0x2a, 0xfe, 0xa9, 0xfe, 0x86, 0x02, 0xd5, 0x8e, 0xe3, 0x05, 0xf7, 0x0d, 0xd7, 0xb5, - 0xec, 0x3e, 0xba, 0x06, 0x65, 0xaa, 0xcb, 0x9e, 0x33, 0xa0, 0x3a, 0xa8, 0x5f, 0x5f, 0xbe, 0x12, - 0x75, 0xc8, 0x95, 0x0e, 0x2f, 0xd3, 0x42, 0x2c, 0xf4, 0x1c, 0xd4, 0x7b, 0x8e, 0x1d, 0x18, 0x96, - 0x8d, 0x3d, 0xdd, 0x75, 0xbc, 0x80, 0x2a, 0x67, 0x56, 0xab, 0x85, 0x50, 0xc2, 0x1f, 0x9d, 0x84, - 0xca, 0xbe, 0xe3, 0x07, 0x0c, 0xa3, 0x48, 0x31, 0xca, 0x04, 0x40, 0x0b, 0x57, 0x61, 0x9e, 0x16, - 0x5a, 0x2e, 0x57, 0xc3, 0x1c, 0xf9, 0x6c, 0xbb, 0xea, 0x0f, 0x0b, 0x30, 0x7b, 0xdf, 0x19, 0xd9, - 0x41, 0xa2, 0x1a, 0x23, 0xd8, 0xe7, 0x5d, 0x14, 0xab, 0xc6, 0x08, 0xf6, 0xa3, 0x6a, 0x08, 0x06, - 0xeb, 0x25, 0x56, 0x0d, 0x29, 0x6c, 0x42, 0xd9, 0xc3, 0x86, 0xe9, 0xd8, 0x83, 0x03, 0x2a, 0x42, - 0x59, 0x0b, 0xbf, 0x49, 0xf7, 0xf9, 0x78, 0x60, 0xd9, 0xa3, 0xa7, 0xba, 0x87, 0x07, 0xc6, 0x43, - 0x3c, 0xa0, 0xa2, 0x94, 0xb5, 0x3a, 0x07, 0x6b, 0x0c, 0x8a, 0xde, 0x86, 0xaa, 0xeb, 0x39, 0xae, - 0xd1, 0x37, 0x88, 0x06, 0xd7, 0x66, 0xa9, 0x92, 0x4e, 0xc5, 0x95, 0x44, 0x05, 0xee, 0x44, 0x38, - 0x5a, 0x9c, 0x00, 0xbd, 0x01, 0xd5, 0x91, 0x65, 0x72, 0x7d, 0xfb, 0x6b, 0x73, 0xe7, 0x8a, 0x17, - 0xaa, 0xd7, 0x8f, 0xc7, 0xe9, 0xdb, 0x1b, 0xbc, 0x54, 0x8b, 0x63, 0x12, 0xc2, 0x7e, 0x8c, 0x70, - 0x7e, 0x2c, 0x61, 0x0c, 0x53, 0xd5, 0xa1, 0x12, 0x96, 0x44, 0xaa, 0x36, 0xa9, 0x02, 0x6b, 0x5c, - 0xd5, 0x26, 0x31, 0xf1, 0x48, 0xc1, 0x96, 0x49, 0x95, 0x57, 0xd3, 0xaa, 0x21, 0xac, 0x6d, 0xa2, - 0x15, 0x98, 0x1b, 0x60, 0xbb, 0x1f, 0xec, 0x53, 0xed, 0xd5, 0x34, 0xfe, 0xa5, 0xfe, 0x9a, 0x02, - 0xb5, 0x5d, 0x1f, 0x7b, 0x64, 0x1c, 0xf8, 0xae, 0xd1, 0xc3, 0xe8, 0x32, 0x94, 0x86, 0x8e, 0x89, - 0xb9, 0x09, 0x9d, 0x88, 0x0b, 0x19, 0x22, 0xdd, 0x77, 0x4c, 0xac, 0x51, 0x34, 0x74, 0x11, 0x4a, - 0x23, 0xcb, 0x64, 0x76, 0x9b, 0xdb, 0x26, 0x8a, 0x42, 0x50, 0xfb, 0x04, 0xb5, 0x38, 0x16, 0x95, - 0xa0, 0xa8, 0xbf, 0x50, 0x60, 0x31, 0xac, 0x6d, 0x9b, 0x1a, 0x3c, 0x7a, 0x05, 0xe6, 0x6d, 0x1c, - 0x3c, 0x71, 0xbc, 0x47, 0x93, 0x65, 0x13, 0x98, 0xe8, 0x45, 0x28, 0xba, 0x5c, 0x23, 0x63, 0x09, - 0x08, 0x16, 0x41, 0xb6, 0xdc, 0x1e, 0xd5, 0xd0, 0x78, 0x64, 0xcb, 0xed, 0x11, 0x73, 0x0d, 0x0c, - 0xaf, 0x8f, 0x69, 0x7f, 0x30, 0xd3, 0x2f, 0x33, 0x40, 0xdb, 0x44, 0xb7, 0xa1, 0x3e, 0xf2, 0xb1, - 0x67, 0xfb, 0xba, 0x18, 0xbc, 0xc4, 0xd8, 0xaa, 0x32, 0x53, 0x49, 0xef, 0x5a, 0x8d, 0x11, 0x6c, - 0xf3, 0xd1, 0xad, 0x02, 0xb4, 0xed, 0xe0, 0xf5, 0x57, 0x1f, 0x18, 0x83, 0x11, 0x46, 0xcb, 0x30, - 0xfb, 0x98, 0xfc, 0xa0, 0x2d, 0x2f, 0x6a, 0xec, 0x43, 0xfd, 0xb3, 0x12, 0x9c, 0xbc, 0x47, 0x0c, - 0xbc, 0x6b, 0xd8, 0xe6, 0x43, 0xe7, 0x69, 0x17, 0xf7, 0x46, 0x9e, 0x15, 0x1c, 0xac, 0x3b, 0x76, - 0x80, 0x9f, 0x06, 0xe8, 0x3d, 0x58, 0xb2, 0x05, 0xff, 0x50, 0x10, 0x85, 0x0a, 0x72, 0x32, 0xb3, - 0x75, 0xac, 0x72, 0xad, 0x61, 0xcb, 0x00, 0x1f, 0xdd, 0x89, 0x86, 0x98, 0xe0, 0x53, 0x48, 0x37, - 0xa8, 0xbb, 0x49, 0xa5, 0xe1, 0x5c, 0xc4, 0xe8, 0x13, 0x3c, 0x5e, 0x07, 0xe2, 0x74, 0x75, 0xc3, - 0xd7, 0x49, 0x4b, 0xa9, 0x96, 0xab, 0xd7, 0x57, 0x24, 0x2b, 0x08, 0x1b, 0xac, 0x55, 0xbc, 0x91, - 0xdd, 0xf2, 0x89, 0x86, 0xd0, 0x0d, 0xea, 0xc0, 0x09, 0x5d, 0xdf, 0x73, 0x46, 0xee, 0x5a, 0x79, - 0x2c, 0x21, 0x50, 0xc2, 0xbb, 0x04, 0x93, 0xfa, 0x75, 0xee, 0x24, 0x74, 0xcf, 0x71, 0x82, 0x3d, - 0x5f, 0x38, 0x06, 0x01, 0xd6, 0x28, 0x14, 0x5d, 0x85, 0x63, 0xfe, 0xc8, 0x75, 0x07, 0x78, 0x88, - 0xed, 0xc0, 0x18, 0xb0, 0x8a, 0x48, 0x9f, 0x15, 0x2f, 0x14, 0x35, 0x14, 0x2f, 0xa2, 0x8c, 0x7d, - 0x74, 0x06, 0xc0, 0xf5, 0xac, 0xc7, 0xd6, 0x00, 0xf7, 0xb1, 0xb9, 0x36, 0x47, 0x99, 0xc6, 0x20, - 0xe8, 0x35, 0xe2, 0xeb, 0x7b, 0x3d, 0x67, 0xe8, 0xae, 0x55, 0xd2, 0xfa, 0x16, 0xfd, 0xd4, 0xf1, - 0x9c, 0x3d, 0x6b, 0x80, 0x35, 0x81, 0x8b, 0xde, 0x80, 0xb2, 0xe1, 0xba, 0x86, 0x37, 0x74, 0xbc, - 0x35, 0x98, 0x4c, 0x17, 0x22, 0xa3, 0x57, 0x61, 0x99, 0xf3, 0xd0, 0x5d, 0x56, 0xc8, 0xdc, 0xe8, - 0x3c, 0xb1, 0xcb, 0x3b, 0x85, 0x35, 0x45, 0x43, 0xbc, 0x9c, 0xd3, 0x12, 0xa7, 0xaa, 0xfe, 0xa5, - 0x02, 0x8b, 0x09, 0x9e, 0xe8, 0x7d, 0x58, 0x10, 0x1c, 0x82, 0x03, 0x57, 0xb8, 0x81, 0x17, 0xc6, - 0x88, 0x71, 0x85, 0xff, 0xdd, 0x39, 0x70, 0x31, 0xf5, 0x97, 0xe2, 0x03, 0x3d, 0x03, 0xb5, 0x81, - 0xd3, 0x33, 0x06, 0xd4, 0x6b, 0x79, 0x78, 0x8f, 0x7b, 0xf5, 0x85, 0x10, 0xa8, 0xe1, 0x3d, 0xf5, - 0x36, 0x54, 0x63, 0x0c, 0x10, 0x82, 0xba, 0xc6, 0xaa, 0xda, 0xc0, 0x7b, 0xc6, 0x68, 0x10, 0x34, - 0x66, 0x50, 0x1d, 0x60, 0xd7, 0xee, 0x91, 0x59, 0xd4, 0xc6, 0x66, 0x43, 0x41, 0x35, 0xa8, 0xdc, - 0x13, 0x2c, 0x1a, 0x05, 0xf5, 0xfb, 0x45, 0x38, 0x4e, 0x0d, 0xaf, 0xe3, 0x98, 0x7c, 0x24, 0xf0, - 0x29, 0xf7, 0x19, 0xa8, 0xf5, 0x68, 0x5f, 0xea, 0xae, 0xe1, 0x61, 0x3b, 0xe0, 0x13, 0xcf, 0x02, - 0x03, 0x76, 0x28, 0x0c, 0x69, 0xd0, 0xf0, 0x79, 0x8b, 0xf4, 0x1e, 0x1b, 0x39, 0xdc, 0xb8, 0xa5, - 0x56, 0x8f, 0x19, 0x68, 0xda, 0xa2, 0x9f, 0x1a, 0x79, 0xf3, 0xfe, 0x81, 0xdf, 0x0b, 0x06, 0xc2, - 0xdb, 0x5d, 0x49, 0xb1, 0x4a, 0x0a, 0x7b, 0xa5, 0xcb, 0x08, 0x36, 0xed, 0xc0, 0x3b, 0xd0, 0x04, - 0x39, 0x7a, 0x07, 0xca, 0xce, 0x63, 0xec, 0xed, 0x63, 0x83, 0x79, 0x99, 0xea, 0xf5, 0x67, 0x52, - 0xac, 0xd6, 0x85, 0xa3, 0xd7, 0xb0, 0xef, 0x8c, 0xbc, 0x1e, 0xf6, 0xb5, 0x90, 0x08, 0xb5, 0xa0, - 0xe2, 0x09, 0x30, 0xf7, 0x42, 0x53, 0x71, 0x88, 0xa8, 0x9a, 0xb7, 0x60, 0x21, 0x2e, 0x1c, 0x6a, - 0x40, 0xf1, 0x11, 0x3e, 0xe0, 0xca, 0x24, 0x3f, 0x23, 0xff, 0xc4, 0x7a, 0x98, 0x7d, 0xdc, 0x2a, - 0xdc, 0x50, 0x54, 0x0f, 0x50, 0xd4, 0xd2, 0xfb, 0x38, 0x30, 0x4c, 0x23, 0x30, 0x10, 0x82, 0x12, - 0x0d, 0xc6, 0x18, 0x0b, 0xfa, 0x9b, 0x70, 0x1d, 0x71, 0x57, 0x5d, 0xd1, 0xc8, 0x4f, 0x74, 0x0a, - 0x2a, 0xa1, 0x27, 0xe2, 0x11, 0x59, 0x04, 0x20, 0x91, 0x91, 0x11, 0x04, 0x78, 0xe8, 0x06, 0x54, - 0x31, 0x35, 0x4d, 0x7c, 0xaa, 0xff, 0x6f, 0x16, 0x1a, 0x29, 0x5b, 0xb8, 0x05, 0xe5, 0x21, 0xaf, - 0x9e, 0xfb, 0xc0, 0x33, 0x52, 0x78, 0x94, 0x12, 0x52, 0x0b, 0xf1, 0x49, 0xf4, 0x41, 0x6c, 0x2d, - 0x16, 0x3f, 0x86, 0xdf, 0xcc, 0xc8, 0xfb, 0xba, 0x69, 0x79, 0xb8, 0x17, 0x38, 0xde, 0x01, 0x17, - 0x74, 0x61, 0xe0, 0xf4, 0x37, 0x04, 0x0c, 0xbd, 0x0a, 0x60, 0xda, 0xbe, 0x4e, 0x6d, 0xb8, 0xcf, - 0xfb, 0x51, 0x9a, 0x00, 0xc3, 0x30, 0x51, 0xab, 0x98, 0xb6, 0xcf, 0x45, 0x7e, 0x13, 0x6a, 0x24, - 0xe6, 0xd2, 0x87, 0x22, 0x70, 0x98, 0xa5, 0xb6, 0xb4, 0x2a, 0xcb, 0x1d, 0x46, 0x80, 0xda, 0x82, - 0x1b, 0x7d, 0xf8, 0xe8, 0x36, 0xcc, 0xd1, 0xb0, 0x47, 0x04, 0x2a, 0x17, 0xb2, 0x9b, 0xcb, 0xad, - 0xef, 0x1e, 0x45, 0x65, 0xc6, 0xc7, 0xe9, 0xd0, 0x36, 0x54, 0x0d, 0xdb, 0x76, 0x02, 0x83, 0x79, - 0x7c, 0x16, 0xb6, 0x5c, 0x1e, 0xcb, 0xa6, 0x15, 0xe1, 0x33, 0x5e, 0x71, 0x0e, 0xe8, 0x0d, 0x98, - 0xa5, 0x53, 0x02, 0xf7, 0xe1, 0xe7, 0x27, 0x0e, 0x0a, 0x8d, 0xe1, 0xa3, 0xb7, 0x60, 0xfe, 0x89, - 0x65, 0x9b, 0xce, 0x13, 0x9f, 0xfb, 0x53, 0xc9, 0x84, 0xbf, 0xca, 0x8a, 0x52, 0xc4, 0x82, 0xa6, - 0x79, 0x13, 0xaa, 0xb1, 0xf6, 0x1d, 0xc6, 0x7e, 0x9b, 0x6f, 0x43, 0x23, 0xd9, 0xa6, 0x43, 0xd9, - 0xff, 0x08, 0x96, 0xb5, 0x91, 0x1d, 0x89, 0x26, 0x96, 0x37, 0xaf, 0xc2, 0x1c, 0xb7, 0x06, 0x66, - 0x8c, 0xa7, 0xc6, 0xa9, 0x55, 0xe3, 0xb8, 0xf1, 0x95, 0xca, 0xbe, 0x61, 0x9b, 0x03, 0xec, 0xf1, - 0x1a, 0xc5, 0x4a, 0xe5, 0x3d, 0x06, 0x55, 0xdf, 0x82, 0xe3, 0x89, 0x6a, 0xf9, 0x42, 0xe9, 0x59, - 0xa8, 0xbb, 0x8e, 0xa9, 0xfb, 0x0c, 0x2c, 0x62, 0xc9, 0x0a, 0xb1, 0x1d, 0x81, 0xdb, 0x36, 0x09, - 0x79, 0x37, 0x70, 0xdc, 0xb4, 0xd8, 0xd3, 0x91, 0xaf, 0xc1, 0x4a, 0x92, 0x9c, 0x55, 0xaf, 0xbe, - 0x03, 0xab, 0x1a, 0x1e, 0x3a, 0x8f, 0xf1, 0x51, 0x59, 0x37, 0x61, 0x2d, 0xcd, 0x80, 0x33, 0xff, - 0x00, 0x56, 0x23, 0x68, 0x37, 0x30, 0x82, 0x91, 0x7f, 0x28, 0xe6, 0x7c, 0x15, 0xf9, 0xd0, 0xf1, - 0x59, 0x47, 0x96, 0x35, 0xf1, 0xa9, 0xae, 0xc2, 0x6c, 0xc7, 0x31, 0xdb, 0x1d, 0x54, 0x87, 0x82, - 0xe5, 0x72, 0xe2, 0x82, 0xe5, 0xaa, 0xbd, 0x78, 0x9d, 0x5b, 0x2c, 0xea, 0x64, 0x55, 0x27, 0x51, - 0xd1, 0x0d, 0xa8, 0x1b, 0xa6, 0x69, 0x11, 0x43, 0x32, 0x06, 0xba, 0xe5, 0x8a, 0xa0, 0x79, 0x29, - 0xd1, 0xf5, 0xed, 0x8e, 0x56, 0x8b, 0x10, 0xdb, 0xae, 0xaf, 0xde, 0x81, 0x4a, 0x14, 0xa0, 0xbf, - 0x16, 0xad, 0x08, 0x0b, 0x93, 0x63, 0xb9, 0x70, 0xb9, 0xb8, 0x95, 0x9a, 0x24, 0xb9, 0x98, 0xaf, - 0x01, 0x84, 0x4e, 0x55, 0x84, 0x87, 0xc7, 0x33, 0x59, 0x6a, 0x31, 0x44, 0xf5, 0x9f, 0x4b, 0x71, - 0x27, 0x1b, 0x6b, 0xb2, 0x19, 0x36, 0xd9, 0x94, 0x9c, 0x6e, 0xe1, 0x90, 0x4e, 0xf7, 0x65, 0x98, - 0xf5, 0x03, 0x23, 0xc0, 0x3c, 0x1e, 0x3f, 0x99, 0x4d, 0x48, 0x2a, 0xc6, 0x1a, 0xc3, 0x44, 0xa7, - 0x01, 0x7a, 0x1e, 0x36, 0x02, 0x6c, 0xea, 0x06, 0x9b, 0x15, 0x8a, 0x5a, 0x85, 0x43, 0x5a, 0x01, - 0xf1, 0x22, 0x62, 0x05, 0x91, 0x31, 0x11, 0xe6, 0x74, 0x63, 0xb4, 0x96, 0x08, 0xbd, 0xd7, 0xdc, - 0x44, 0xef, 0xc5, 0x49, 0xb9, 0xf7, 0x8a, 0x3c, 0xf1, 0xfc, 0x38, 0x4f, 0xcc, 0x88, 0xa6, 0xf1, - 0xc4, 0xe5, 0x71, 0x9e, 0x98, 0xb3, 0x19, 0xef, 0x89, 0x33, 0x1c, 0x49, 0x25, 0xcb, 0x91, 0x7c, - 0x9e, 0xae, 0xf3, 0x4f, 0x0a, 0xb0, 0x96, 0x1e, 0xcf, 0xdc, 0x8f, 0xbd, 0x0a, 0x73, 0x3e, 0x85, - 0x8c, 0xf7, 0x9f, 0x9c, 0x8a, 0xe3, 0xa2, 0x3b, 0x50, 0xb2, 0xec, 0x3d, 0x87, 0x0f, 0xbc, 0x2b, - 0x63, 0x69, 0x78, 0x4d, 0x57, 0xda, 0xf6, 0x9e, 0xc3, 0x34, 0x48, 0x69, 0xd1, 0x3d, 0x38, 0x16, - 0xae, 0xac, 0x7d, 0x9d, 0x31, 0xc6, 0x22, 0xce, 0x93, 0xac, 0x34, 0x8c, 0xaa, 0x38, 0x47, 0x14, - 0xd1, 0x75, 0x39, 0x19, 0x89, 0x71, 0x08, 0xba, 0x1f, 0x18, 0x43, 0x57, 0x58, 0x6c, 0x08, 0x68, - 0xbe, 0x01, 0x95, 0xb0, 0xfa, 0x43, 0xe9, 0xae, 0x0d, 0xcb, 0x89, 0x31, 0xc2, 0x16, 0x92, 0xe1, - 0xa0, 0x52, 0xa6, 0x1d, 0x54, 0xea, 0xcf, 0x95, 0xf8, 0x40, 0x7f, 0xd7, 0x1a, 0x04, 0xd8, 0x4b, - 0x0d, 0xf4, 0xd7, 0x05, 0x5f, 0x36, 0xca, 0xcf, 0x8d, 0xe1, 0xcb, 0xd6, 0x69, 0x7c, 0xc4, 0x3e, - 0x80, 0x3a, 0x35, 0x71, 0xdd, 0xc7, 0x03, 0x1a, 0x2b, 0x71, 0x3d, 0x5e, 0xcd, 0x66, 0xc0, 0x6a, - 0x67, 0x43, 0xa4, 0xcb, 0x29, 0x58, 0xdf, 0xd4, 0x06, 0x71, 0x58, 0xf3, 0x36, 0xa0, 0x34, 0xd2, - 0xa1, 0x34, 0x78, 0x9f, 0xf8, 0x4b, 0x3f, 0xc8, 0x9c, 0xb9, 0xf7, 0xa8, 0x18, 0xe3, 0x2d, 0x8f, - 0x89, 0xaa, 0x71, 0x5c, 0xf5, 0x1f, 0x8a, 0x00, 0x51, 0xe1, 0x17, 0xdc, 0x51, 0xde, 0x0a, 0x1d, - 0x16, 0x8b, 0x38, 0xd5, 0x6c, 0x96, 0x99, 0xae, 0xaa, 0x2d, 0xbb, 0x2a, 0x16, 0x7b, 0xbe, 0x90, - 0xc3, 0xe0, 0xd0, 0x4e, 0x6a, 0xfe, 0x8b, 0xe6, 0xa4, 0xde, 0x85, 0x95, 0xa4, 0x99, 0x70, 0x0f, - 0xf5, 0x12, 0xcc, 0x5a, 0x01, 0x1e, 0xb2, 0xdd, 0xde, 0xc4, 0x86, 0x45, 0x0c, 0x9d, 0x21, 0xa9, - 0x6f, 0xc3, 0x8a, 0xdc, 0x57, 0x87, 0x0b, 0x5d, 0xd4, 0x7b, 0xc9, 0xd8, 0x27, 0x72, 0x95, 0xdc, - 0x3e, 0x32, 0xb7, 0x7e, 0x92, 0x34, 0x0c, 0x53, 0xfd, 0x91, 0x02, 0xc7, 0x13, 0x45, 0x39, 0x03, - 0xff, 0xeb, 0xa9, 0x01, 0xcc, 0x7c, 0xeb, 0xab, 0x63, 0x6a, 0xf9, 0x0c, 0x47, 0xf1, 0x57, 0xa1, - 0x29, 0x77, 0x8f, 0xa4, 0xda, 0x9b, 0x89, 0xa1, 0x7c, 0x7e, 0xa2, 0xd0, 0xe1, 0x78, 0xee, 0xc0, - 0xc9, 0x4c, 0xc6, 0x69, 0x9d, 0x17, 0xa7, 0xd4, 0xf9, 0x7f, 0x15, 0xe2, 0x3e, 0xbb, 0x15, 0x04, - 0x9e, 0xf5, 0x70, 0x14, 0xe0, 0x4f, 0x37, 0xa8, 0xda, 0x08, 0x47, 0x36, 0xf3, 0xb3, 0x2f, 0x65, - 0x53, 0x46, 0xb5, 0x67, 0x8e, 0xf1, 0xae, 0x3c, 0xc6, 0x4b, 0x94, 0xd5, 0xcb, 0x13, 0x59, 0x8d, - 0x1d, 0xed, 0x9f, 0xe7, 0x20, 0xfe, 0x6b, 0x05, 0x16, 0x13, 0xbd, 0x82, 0x6e, 0x03, 0x18, 0xa1, - 0xe8, 0xdc, 0x3e, 0xce, 0x4d, 0x6a, 0xa2, 0x16, 0xa3, 0x21, 0x73, 0x22, 0x8b, 0x17, 0x33, 0xe6, - 0xc4, 0x8c, 0x78, 0x31, 0x0c, 0x17, 0xdf, 0x8c, 0x16, 0xbb, 0x6c, 0x93, 0x54, 0x1d, 0xbb, 0xd8, - 0x65, 0xb4, 0x82, 0x44, 0xfd, 0xff, 0x05, 0x58, 0xce, 0xe2, 0x8e, 0x9e, 0x87, 0x62, 0xcf, 0x1d, - 0xf1, 0x96, 0x48, 0x47, 0x43, 0xeb, 0xee, 0x68, 0xd7, 0x37, 0xfa, 0x58, 0x23, 0x08, 0xe8, 0x2a, - 0xcc, 0x0d, 0xf1, 0xd0, 0xf1, 0x0e, 0xb8, 0xdc, 0xd2, 0x76, 0xc3, 0x7d, 0x5a, 0xc2, 0xb0, 0x39, - 0x1a, 0xba, 0x1e, 0x85, 0xd5, 0x4c, 0xde, 0x35, 0x69, 0xf5, 0xc0, 0x8a, 0x18, 0x49, 0x18, 0x4b, - 0x5f, 0x87, 0x79, 0xd7, 0x73, 0x7a, 0xd8, 0xf7, 0xf9, 0x6e, 0xc8, 0x5a, 0xe2, 0xac, 0x8a, 0x14, - 0x71, 0x1a, 0x8e, 0x88, 0x6e, 0x01, 0x44, 0x01, 0x14, 0x9f, 0x99, 0x9a, 0xb9, 0xf1, 0x96, 0xaf, - 0xc5, 0xb0, 0xd5, 0x1f, 0x14, 0x60, 0x25, 0x5b, 0x73, 0xe8, 0x72, 0x5c, 0x2f, 0x27, 0x33, 0x54, - 0x2d, 0xab, 0xe7, 0xf5, 0x84, 0x7a, 0xce, 0x64, 0x50, 0x64, 0x69, 0xe9, 0x66, 0x52, 0x4b, 0x67, - 0x33, 0x08, 0xb3, 0x95, 0x75, 0x33, 0xa9, 0xac, 0x2c, 0xd2, 0x6c, 0x9d, 0xb5, 0x32, 0x74, 0x76, - 0x3e, 0xab, 0x8d, 0xf9, 0xaa, 0xfb, 0x0b, 0x05, 0x16, 0xe2, 0x72, 0xc9, 0x21, 0xab, 0x92, 0x08, - 0x59, 0xd1, 0x16, 0x2c, 0x99, 0x6c, 0xe7, 0x56, 0xb7, 0xec, 0x00, 0x7b, 0x7b, 0x46, 0x4f, 0x44, - 0x85, 0xe7, 0x33, 0xec, 0xa2, 0x2d, 0x70, 0x98, 0xe0, 0x0d, 0x4e, 0x1b, 0x82, 0x49, 0x0b, 0x42, - 0x3e, 0xc2, 0x6b, 0x4d, 0xc1, 0x28, 0x46, 0xa4, 0xfe, 0xbd, 0x02, 0xc7, 0x32, 0x14, 0x3c, 0xa1, - 0x21, 0xbb, 0xf9, 0x0d, 0xb9, 0x90, 0xdf, 0x75, 0x13, 0xdb, 0xf3, 0x5e, 0x46, 0x7b, 0xa6, 0xe7, - 0x17, 0x6f, 0xd6, 0x2f, 0x14, 0x38, 0x9e, 0x89, 0x95, 0xb9, 0xbd, 0x7a, 0x1d, 0xca, 0xde, 0x53, - 0xfd, 0xe1, 0x41, 0x80, 0xfd, 0xac, 0x81, 0xbd, 0x1b, 0x3b, 0x43, 0x99, 0xf7, 0x9e, 0xde, 0x21, - 0x78, 0xe8, 0x55, 0xa8, 0x78, 0x4f, 0x75, 0xec, 0x79, 0x8e, 0x27, 0x7c, 0x51, 0x2e, 0x51, 0xd9, - 0x7b, 0xba, 0x49, 0x11, 0x49, 0x4d, 0x81, 0xa8, 0xa9, 0x34, 0xa1, 0xa6, 0x20, 0xaa, 0x29, 0x08, - 0x6b, 0x9a, 0x9d, 0x50, 0x53, 0xc0, 0x6b, 0x52, 0x7f, 0xaf, 0x00, 0xa7, 0xc6, 0xa9, 0xeb, 0x53, - 0x53, 0xc4, 0x26, 0x20, 0xef, 0xa9, 0xee, 0x1a, 0xbd, 0x47, 0x38, 0xf0, 0x75, 0xd3, 0x73, 0x5c, - 0x17, 0x9b, 0x93, 0x34, 0xd2, 0xf0, 0x9e, 0x76, 0x18, 0xc5, 0x06, 0x23, 0x38, 0x92, 0x66, 0x36, - 0x01, 0x05, 0xe9, 0xaa, 0x27, 0xa8, 0xa8, 0x11, 0x24, 0xaa, 0x56, 0x3f, 0x82, 0x85, 0xb8, 0x87, - 0x98, 0x60, 0xfb, 0x6f, 0x42, 0x8d, 0x7b, 0x10, 0xbd, 0xe7, 0x8c, 0xec, 0x60, 0x92, 0xa2, 0x16, - 0x38, 0xf6, 0x3a, 0x41, 0x56, 0xbf, 0x19, 0x0e, 0xb7, 0xcf, 0xac, 0xca, 0x7f, 0x52, 0xa0, 0xd2, - 0x1e, 0x1a, 0x7d, 0xdc, 0x75, 0x71, 0x8f, 0xcc, 0xf4, 0x16, 0xf9, 0xe0, 0xfd, 0xce, 0x3e, 0xd0, - 0x7b, 0x72, 0xd4, 0xc2, 0xe2, 0xd4, 0xe7, 0xa5, 0x73, 0x44, 0xc1, 0x61, 0xc2, 0xc2, 0xe4, 0x1a, - 0x2c, 0x8f, 0x7c, 0xec, 0xe9, 0xbe, 0x8b, 0x7b, 0xd6, 0x9e, 0x85, 0x4d, 0x9d, 0x55, 0x87, 0x68, - 0x75, 0x88, 0x94, 0x75, 0x45, 0x11, 0xe5, 0xf9, 0x89, 0x23, 0x94, 0xeb, 0x50, 0xfe, 0x32, 0x3e, - 0x60, 0x6b, 0xf8, 0x29, 0xe9, 0xd4, 0xef, 0x96, 0x60, 0x35, 0xe7, 0x74, 0x87, 0x2e, 0x00, 0xdd, - 0x91, 0xee, 0x62, 0xcf, 0x72, 0x4c, 0xd1, 0x19, 0x3d, 0x77, 0xd4, 0xa1, 0x00, 0x74, 0x12, 0xc8, - 0x87, 0xfe, 0xcd, 0x91, 0xc3, 0x63, 0xcc, 0xa2, 0x56, 0xee, 0xb9, 0xa3, 0xaf, 0x90, 0x6f, 0x41, - 0xeb, 0xef, 0x1b, 0x1e, 0x66, 0x6e, 0x81, 0xd1, 0x76, 0x29, 0x00, 0xbd, 0x0c, 0xc7, 0xd9, 0x94, - 0xa7, 0x0f, 0xac, 0xa1, 0x45, 0x9c, 0x67, 0xcc, 0xe2, 0x8b, 0x1a, 0x62, 0x85, 0xf7, 0x48, 0x59, - 0xdb, 0x66, 0x36, 0xae, 0x42, 0xcd, 0x71, 0x86, 0xba, 0xdf, 0x73, 0x3c, 0xac, 0x1b, 0xe6, 0x47, - 0xd4, 0xbc, 0x8b, 0x5a, 0xd5, 0x71, 0x86, 0x5d, 0x02, 0x6b, 0x99, 0x1f, 0xa1, 0xb3, 0x50, 0xed, - 0xb9, 0x23, 0x1f, 0x07, 0x3a, 0xf9, 0x43, 0xf7, 0xe0, 0x2a, 0x1a, 0x30, 0xd0, 0xba, 0x3b, 0xf2, - 0x63, 0x08, 0x43, 0xb2, 0xea, 0x9a, 0x8f, 0x23, 0xdc, 0xc7, 0x43, 0x7a, 0x88, 0xbd, 0x3f, 0xea, - 0x63, 0xd7, 0xe8, 0x63, 0x26, 0x9a, 0xd8, 0x48, 0x93, 0x0e, 0xb1, 0xdf, 0xe3, 0x28, 0x54, 0x40, - 0xad, 0xbe, 0x1f, 0xff, 0xf4, 0xd1, 0xfb, 0x30, 0x3f, 0xb2, 0x69, 0xbf, 0xae, 0x55, 0x28, 0xed, - 0xb5, 0x29, 0xce, 0xd2, 0xae, 0xec, 0x32, 0x12, 0x7e, 0xb4, 0xc7, 0x19, 0xa0, 0x5b, 0xd0, 0xe4, - 0x8a, 0xf2, 0x9f, 0x18, 0x6e, 0x52, 0x5b, 0x40, 0x55, 0xb0, 0xc2, 0x30, 0xba, 0x4f, 0x0c, 0x37, - 0xae, 0xb1, 0xe6, 0x2d, 0x58, 0x88, 0x33, 0x3d, 0x94, 0x2d, 0xdd, 0x81, 0x9a, 0xd4, 0x48, 0xd2, - 0xdb, 0x54, 0x29, 0xbe, 0xf5, 0x2d, 0x31, 0x64, 0xca, 0x04, 0xd0, 0xb5, 0xbe, 0x45, 0x53, 0x0f, - 0xa8, 0x64, 0x94, 0x4f, 0x49, 0x63, 0x1f, 0xaa, 0x01, 0x35, 0xe9, 0xb4, 0x9f, 0x78, 0x5a, 0x7a, - 0xac, 0xcf, 0x3d, 0x2d, 0xf9, 0x4d, 0x60, 0x9e, 0x33, 0x10, 0x12, 0xd0, 0xdf, 0x04, 0x46, 0xcf, - 0x95, 0xd9, 0x29, 0x19, 0xfd, 0x4d, 0xab, 0xc0, 0x8f, 0x79, 0xda, 0x4e, 0x45, 0x63, 0x1f, 0xea, - 0x6f, 0x2a, 0x00, 0xeb, 0x86, 0x6b, 0x3c, 0xb4, 0x06, 0x56, 0x70, 0x80, 0x2e, 0x42, 0xc3, 0x30, - 0x4d, 0xbd, 0x27, 0x20, 0x16, 0x16, 0x79, 0x54, 0x8b, 0x86, 0x69, 0xae, 0xc7, 0xc0, 0xe8, 0x45, - 0x58, 0x22, 0x7e, 0x52, 0xc6, 0x65, 0x89, 0x55, 0x0d, 0x52, 0x20, 0x21, 0xdf, 0x80, 0x35, 0xc2, - 0xd7, 0x18, 0x3e, 0xb4, 0xb0, 0x1d, 0xc8, 0x34, 0x2c, 0xe3, 0x6a, 0xc5, 0x30, 0xcd, 0x16, 0x2b, - 0x8e, 0x53, 0xaa, 0x7f, 0x3e, 0x07, 0xa7, 0xe5, 0x1e, 0x4f, 0x26, 0x60, 0xdc, 0x82, 0x85, 0x84, - 0xbc, 0xa9, 0xd4, 0x85, 0xa8, 0x85, 0x9a, 0x84, 0x9b, 0x48, 0x31, 0x28, 0xa4, 0x52, 0x0c, 0x32, - 0x93, 0x3b, 0x8a, 0x9f, 0x52, 0x72, 0x47, 0xe9, 0x13, 0x26, 0x77, 0xcc, 0x1e, 0x35, 0xb9, 0x63, - 0x61, 0xea, 0xe4, 0x8e, 0xe7, 0xe9, 0xe6, 0x90, 0xa8, 0x91, 0xce, 0xf2, 0xcc, 0x27, 0xd4, 0x42, - 0xee, 0xb6, 0x48, 0xee, 0x4b, 0x24, 0x81, 0xcc, 0x1f, 0x26, 0x09, 0xa4, 0x9c, 0x9b, 0x04, 0x72, - 0x0e, 0x16, 0x6c, 0x47, 0xb7, 0xf1, 0x13, 0x9d, 0x74, 0x8b, 0xbf, 0x56, 0x65, 0x7d, 0x64, 0x3b, - 0x5b, 0xf8, 0x49, 0x87, 0x40, 0xd0, 0x79, 0x58, 0x18, 0x1a, 0xfe, 0x23, 0x6c, 0xd2, 0x6c, 0x0c, - 0x7f, 0xad, 0x46, 0xed, 0xa9, 0xca, 0x60, 0x1d, 0x02, 0x42, 0xcf, 0x41, 0x28, 0x07, 0x47, 0xaa, - 0x53, 0xa4, 0x9a, 0x80, 0x32, 0xb4, 0x58, 0x42, 0xc9, 0xe2, 0x11, 0x13, 0x4a, 0x1a, 0x87, 0x49, - 0x28, 0xb9, 0x0c, 0x0d, 0xf1, 0x5b, 0x64, 0x94, 0xb0, 0x03, 0x02, 0x9a, 0x4c, 0xb2, 0x28, 0xca, - 0x44, 0xd6, 0x48, 0x5e, 0xfe, 0x09, 0x8c, 0xcd, 0x3f, 0xf9, 0x7d, 0x85, 0x2f, 0x55, 0xc3, 0x01, - 0xc4, 0x0f, 0xbe, 0xa5, 0x9c, 0x05, 0xe5, 0x28, 0x39, 0x0b, 0x68, 0x27, 0x37, 0xab, 0xe3, 0x62, - 0x3e, 0xa7, 0x49, 0x79, 0x1d, 0xea, 0xfd, 0x70, 0x15, 0xf9, 0x69, 0x64, 0xa7, 0xa9, 0xff, 0xaa, - 0xc0, 0x69, 0xce, 0x2f, 0x27, 0x85, 0x2b, 0xc3, 0xca, 0x95, 0x1c, 0x2b, 0xef, 0x79, 0xd8, 0xc4, - 0x76, 0x60, 0x19, 0x03, 0x1a, 0x97, 0x88, 0x83, 0xe1, 0x08, 0x4c, 0x43, 0xa3, 0xf3, 0xb0, 0xc0, - 0xb2, 0x2c, 0xf9, 0x82, 0x92, 0x25, 0x53, 0x56, 0x69, 0xa2, 0x25, 0x5f, 0x33, 0x6e, 0x67, 0x79, - 0x96, 0x52, 0xee, 0x4e, 0xc4, 0x44, 0x07, 0xa3, 0x3a, 0xb0, 0x9a, 0x73, 0x44, 0x9f, 0xd9, 0x4d, - 0x4a, 0xba, 0x9b, 0xc6, 0x2a, 0x29, 0xdd, 0x4d, 0xdf, 0x55, 0xe0, 0x6c, 0x6a, 0x61, 0xfb, 0xf9, - 0x6b, 0x56, 0xfd, 0x23, 0x25, 0xb4, 0x9f, 0xa4, 0xc9, 0xaf, 0xa7, 0x4d, 0xfe, 0xb9, 0x71, 0xeb, - 0xf4, 0x4c, 0xa3, 0x7f, 0x90, 0x6b, 0xf4, 0x2f, 0x8e, 0x5d, 0xf3, 0x4f, 0xd2, 0xe7, 0x3f, 0x2a, - 0x70, 0x22, 0x57, 0x80, 0x44, 0x3c, 0xa8, 0x24, 0xe3, 0x41, 0x1e, 0x4b, 0x46, 0x41, 0x3d, 0x8b, - 0x25, 0x69, 0xdc, 0xce, 0x83, 0x36, 0x7d, 0x68, 0x3c, 0xb5, 0x86, 0xa3, 0x21, 0x0f, 0x26, 0x09, - 0xbb, 0xfb, 0x0c, 0x72, 0x94, 0x68, 0xf2, 0x2a, 0x2c, 0x33, 0x47, 0x4f, 0x03, 0x9a, 0x88, 0x82, - 0x05, 0x95, 0x4b, 0xac, 0x8c, 0xc4, 0x36, 0x9c, 0x40, 0x6d, 0xc1, 0x52, 0xd8, 0xac, 0xb1, 0x29, - 0x4a, 0xb1, 0x94, 0xa3, 0x82, 0x9c, 0x72, 0x64, 0xc3, 0xdc, 0x06, 0x7e, 0x6c, 0xf5, 0xf0, 0xa7, - 0x92, 0xed, 0x7c, 0x0e, 0xaa, 0x2e, 0xf6, 0x86, 0x96, 0xef, 0x87, 0xb3, 0x7a, 0x45, 0x8b, 0x83, - 0xd4, 0xb3, 0x50, 0x59, 0xdf, 0x68, 0xf3, 0x2a, 0x33, 0x44, 0x55, 0xff, 0x6d, 0x0e, 0x16, 0x93, - 0x36, 0x76, 0x33, 0x95, 0x02, 0x75, 0x3a, 0x73, 0xfb, 0x2c, 0x63, 0xdf, 0xf8, 0x45, 0xb1, 0xa2, - 0x2a, 0xa4, 0xf3, 0x03, 0xc2, 0x55, 0x93, 0x58, 0x68, 0xad, 0xc1, 0x7c, 0xcf, 0x19, 0x0e, 0x0d, - 0xdb, 0x14, 0x39, 0xeb, 0xfc, 0x93, 0x48, 0x6a, 0x78, 0x7d, 0xb6, 0x63, 0x5c, 0xd1, 0xe8, 0x6f, - 0x62, 0x02, 0xc4, 0x19, 0x5a, 0x36, 0x4d, 0xa2, 0xa2, 0xbd, 0x54, 0xd1, 0x80, 0x83, 0x36, 0x2c, - 0x0f, 0x5d, 0x80, 0x12, 0xb6, 0x1f, 0x8b, 0xa3, 0x24, 0x69, 0xe7, 0x52, 0xac, 0x89, 0x34, 0x8a, - 0x81, 0x2e, 0xc2, 0xdc, 0x90, 0x98, 0x95, 0x38, 0x68, 0x5f, 0x4a, 0xe5, 0x76, 0x6b, 0x1c, 0x01, - 0xbd, 0x04, 0xf3, 0x26, 0xd5, 0x9e, 0x58, 0x04, 0x20, 0x29, 0x1d, 0x8b, 0x16, 0x69, 0x02, 0x05, - 0xbd, 0x13, 0x6e, 0x9b, 0x57, 0xd2, 0xe7, 0x59, 0x09, 0x35, 0x67, 0xee, 0x98, 0x6f, 0xc9, 0x6b, - 0x4f, 0x48, 0x6f, 0xbe, 0x27, 0xb9, 0x8c, 0x5f, 0x81, 0x9e, 0x80, 0xf2, 0xc0, 0xe9, 0x33, 0xeb, - 0xa9, 0xb2, 0x0b, 0x0f, 0x03, 0xa7, 0x4f, 0x8d, 0x67, 0x19, 0x66, 0xfd, 0xc0, 0xb4, 0x6c, 0x1a, - 0x4b, 0x95, 0x35, 0xf6, 0x41, 0x06, 0x29, 0xfd, 0xa1, 0x3b, 0x76, 0x0f, 0xaf, 0xd5, 0x68, 0x51, - 0x85, 0x42, 0xb6, 0xed, 0x1e, 0x5d, 0x53, 0x06, 0xc1, 0xc1, 0x5a, 0x9d, 0xc2, 0xc9, 0xcf, 0x68, - 0xf7, 0x7a, 0x31, 0x67, 0xf7, 0x3a, 0x21, 0x70, 0xc6, 0xee, 0x75, 0x23, 0x77, 0xce, 0x48, 0xd2, - 0x0a, 0x12, 0x12, 0x47, 0xae, 0x6f, 0xb4, 0x75, 0xd1, 0x35, 0x4b, 0xe9, 0x54, 0xf1, 0xd0, 0xec, - 0x35, 0x08, 0x7f, 0x7e, 0xae, 0x87, 0x07, 0x3f, 0x50, 0x60, 0x65, 0x9d, 0x1e, 0x9d, 0xc6, 0x7c, - 0xe3, 0x61, 0xb2, 0x8e, 0x5e, 0x09, 0x53, 0xc1, 0x32, 0xf2, 0x79, 0x92, 0x9a, 0x12, 0x99, 0x60, - 0xeb, 0x50, 0x17, 0x6c, 0x39, 0x71, 0x71, 0x8a, 0x3c, 0xb2, 0x9a, 0x1f, 0xff, 0x54, 0xdf, 0x84, - 0xd5, 0x94, 0xe4, 0xfc, 0x00, 0x2b, 0x79, 0xa7, 0x80, 0x09, 0x1e, 0xbf, 0x53, 0xa0, 0xde, 0x82, - 0xe3, 0xdd, 0xc0, 0xf0, 0x82, 0x54, 0xb3, 0xa7, 0xa0, 0xa5, 0x19, 0x62, 0x32, 0x2d, 0x4f, 0xe2, - 0xea, 0xc2, 0x72, 0x37, 0x70, 0xdc, 0x23, 0x30, 0x25, 0x7e, 0x87, 0xb4, 0xdc, 0x19, 0x89, 0x79, - 0x46, 0x7c, 0xaa, 0xab, 0x2c, 0x9f, 0x2d, 0x5d, 0xdb, 0x97, 0x60, 0x85, 0xa5, 0x93, 0x1d, 0xa5, - 0x11, 0x27, 0x44, 0x32, 0x5b, 0x9a, 0xef, 0x5d, 0x38, 0x26, 0x6d, 0xa9, 0xf3, 0xf4, 0x8b, 0x6b, - 0x72, 0xfa, 0x45, 0xfe, 0xe9, 0x45, 0x98, 0x7d, 0xf1, 0xbd, 0x42, 0xcc, 0x8f, 0xe7, 0x9c, 0xc1, - 0xbe, 0x26, 0x27, 0x5f, 0x9c, 0xcd, 0xe7, 0x2a, 0xe5, 0x5e, 0xa4, 0xad, 0xb3, 0x98, 0x61, 0x9d, - 0xbb, 0xa9, 0x03, 0xde, 0x52, 0x3a, 0x79, 0x26, 0x21, 0xe1, 0x67, 0x72, 0xb4, 0x7b, 0x8f, 0x25, - 0x68, 0x84, 0x55, 0x87, 0xa7, 0xba, 0xaf, 0x24, 0x4e, 0x75, 0x4f, 0x8e, 0x91, 0x34, 0x3c, 0xcf, - 0xfd, 0x5e, 0x09, 0x2a, 0x61, 0x59, 0x4a, 0xc3, 0x69, 0x55, 0x15, 0x32, 0x54, 0x15, 0x9f, 0x5f, - 0x8b, 0x47, 0x9c, 0x5f, 0x4b, 0x53, 0xcc, 0xaf, 0x27, 0xa1, 0x42, 0x7f, 0xd0, 0x9c, 0x7a, 0x36, - 0x5f, 0x96, 0x29, 0x40, 0xc3, 0x7b, 0x91, 0x89, 0xcd, 0x4d, 0x69, 0x62, 0x89, 0x64, 0x90, 0xf9, - 0x64, 0x32, 0xc8, 0xcd, 0x70, 0xee, 0x2b, 0xa7, 0x0f, 0x5f, 0x42, 0x8e, 0x99, 0xb3, 0x5e, 0x62, - 0xc7, 0xb5, 0x92, 0xde, 0x71, 0x8d, 0xe8, 0xbf, 0xb0, 0x87, 0xc3, 0xdb, 0x2c, 0xc3, 0x23, 0x6e, - 0x67, 0xdc, 0x47, 0xbe, 0x26, 0x1d, 0xae, 0x29, 0x19, 0x73, 0x55, 0xe8, 0x17, 0xe2, 0x07, 0x6a, - 0xbb, 0xb0, 0x92, 0xcc, 0x0c, 0x3b, 0x94, 0x8f, 0xcb, 0x49, 0x51, 0xfd, 0xf5, 0x78, 0xc4, 0x97, - 0x93, 0x8f, 0x79, 0x33, 0x95, 0x3a, 0x30, 0xb5, 0x85, 0x5e, 0x93, 0xb3, 0x8c, 0x0e, 0x6d, 0x57, - 0xa9, 0x24, 0x23, 0x1a, 0x91, 0x18, 0x1e, 0x2f, 0x66, 0xc1, 0x79, 0x85, 0x43, 0x5a, 0x74, 0x65, - 0xb0, 0x67, 0xd9, 0x96, 0xbf, 0xcf, 0xca, 0xe7, 0xd8, 0xca, 0x40, 0x80, 0x5a, 0x74, 0xd7, 0x12, - 0x3f, 0xb5, 0x02, 0xbd, 0xe7, 0x98, 0x98, 0x5a, 0xed, 0xac, 0x56, 0x26, 0x80, 0x75, 0xc7, 0xc4, - 0xd1, 0x78, 0x2a, 0x1f, 0x76, 0x3c, 0x55, 0x12, 0xe3, 0x69, 0x05, 0xe6, 0x3c, 0x6c, 0xf8, 0x8e, - 0xcd, 0x36, 0x33, 0x34, 0xfe, 0x45, 0x3a, 0x62, 0x88, 0x7d, 0x9f, 0xd4, 0xc1, 0x03, 0x30, 0xfe, - 0x19, 0x0b, 0x16, 0x17, 0xc6, 0x04, 0x8b, 0x63, 0xb2, 0x3d, 0x13, 0xc1, 0x62, 0x6d, 0x4c, 0xb0, - 0x38, 0x55, 0xb2, 0x67, 0x14, 0x16, 0xd7, 0x27, 0x85, 0xc5, 0xf1, 0xb8, 0x72, 0x51, 0x8e, 0x2b, - 0xdf, 0x8c, 0xaf, 0x50, 0x1b, 0xe9, 0xb3, 0xef, 0xf1, 0x77, 0x48, 0x3e, 0xc7, 0x01, 0xfc, 0x37, - 0x0a, 0xac, 0xa6, 0x06, 0x1c, 0x1f, 0xc2, 0xaf, 0x24, 0xd2, 0x48, 0xc7, 0xe6, 0x6f, 0x8a, 0x2c, - 0xd2, 0x96, 0x94, 0x45, 0x7a, 0x79, 0x1c, 0x49, 0x4e, 0x12, 0xe9, 0xd1, 0x13, 0x3b, 0xbf, 0xa3, - 0x00, 0xca, 0x58, 0x83, 0xdf, 0x14, 0xd1, 0xfa, 0x21, 0x76, 0xcb, 0x78, 0xc0, 0xfe, 0x4e, 0x14, - 0xb0, 0x17, 0x0e, 0xb3, 0xef, 0x10, 0x66, 0x9c, 0xfc, 0xb4, 0x00, 0x67, 0x77, 0x5d, 0x33, 0x11, - 0x46, 0x72, 0xac, 0xe9, 0x3d, 0xdb, 0x4d, 0x39, 0x5d, 0xe6, 0x88, 0x4d, 0x28, 0x1e, 0xa5, 0x09, - 0xe8, 0x1b, 0x59, 0x09, 0x4d, 0x6f, 0x4a, 0x47, 0x8f, 0xe3, 0x1b, 0x38, 0x61, 0xfa, 0xfa, 0xa4, - 0x26, 0xac, 0xc2, 0xb9, 0x7c, 0x01, 0x78, 0xc8, 0xf9, 0xbf, 0x61, 0x71, 0xf3, 0x29, 0xee, 0x75, - 0x0f, 0xec, 0xde, 0x21, 0xb4, 0xde, 0x80, 0x62, 0x6f, 0x68, 0xf2, 0xd3, 0x11, 0xf2, 0x33, 0x1e, - 0x45, 0x17, 0xe5, 0x28, 0x5a, 0x87, 0x46, 0x54, 0x03, 0x1f, 0x40, 0x2b, 0x64, 0x00, 0x99, 0x04, - 0x99, 0x30, 0x5f, 0xd0, 0xf8, 0x17, 0x87, 0x63, 0x8f, 0x5d, 0x50, 0x61, 0x70, 0xec, 0x79, 0xb2, - 0xd7, 0x2e, 0xca, 0x5e, 0x5b, 0xfd, 0xbe, 0x02, 0x55, 0x52, 0xc3, 0x27, 0x92, 0x9f, 0x2f, 0x65, - 0x8b, 0xd1, 0x52, 0x36, 0x5c, 0x11, 0x97, 0xe2, 0x2b, 0xe2, 0x48, 0xf2, 0x59, 0x0a, 0x4e, 0x4b, - 0x3e, 0x17, 0xc2, 0xb1, 0xe7, 0xa9, 0xe7, 0x60, 0x81, 0xc9, 0xc6, 0x5b, 0xde, 0x80, 0xe2, 0xc8, - 0x1b, 0x88, 0xfe, 0x1b, 0x79, 0x03, 0xf5, 0xdb, 0x0a, 0xd4, 0x5a, 0x41, 0x60, 0xf4, 0xf6, 0x0f, - 0xd1, 0x80, 0x50, 0xb8, 0x42, 0x5c, 0xb8, 0x74, 0x23, 0x22, 0x71, 0x4b, 0x39, 0xe2, 0xce, 0x4a, - 0xe2, 0xaa, 0x50, 0x17, 0xb2, 0xe4, 0x0a, 0xbc, 0x05, 0xa8, 0xe3, 0x78, 0xc1, 0xbb, 0x8e, 0xf7, - 0xc4, 0xf0, 0xcc, 0xc3, 0xad, 0x5a, 0x11, 0x94, 0xf8, 0x93, 0x01, 0xc5, 0x0b, 0xb3, 0x1a, 0xfd, - 0xad, 0xbe, 0x00, 0xc7, 0x24, 0x7e, 0xb9, 0x15, 0xdf, 0x82, 0x2a, 0x9d, 0x85, 0xf9, 0x82, 0xe6, - 0xc5, 0xf8, 0x79, 0xfd, 0x84, 0xd9, 0x5a, 0xdd, 0x80, 0x25, 0x12, 0x8f, 0x51, 0x78, 0xe8, 0x5f, - 0xae, 0x26, 0x62, 0xfe, 0xd5, 0x14, 0x8b, 0x44, 0xbc, 0xff, 0x73, 0x05, 0x66, 0x29, 0x3c, 0x15, - 0x23, 0x9d, 0x24, 0xf3, 0x9c, 0xeb, 0xe8, 0x81, 0xd1, 0x0f, 0x9f, 0x63, 0x20, 0x80, 0x1d, 0xa3, - 0x4f, 0x4f, 0x74, 0x68, 0xa1, 0x69, 0xf5, 0xb1, 0x1f, 0x88, 0x13, 0xc2, 0x2a, 0x81, 0x6d, 0x30, - 0x10, 0x51, 0x0c, 0x3d, 0x48, 0x2d, 0xd1, 0xf3, 0x52, 0xfa, 0x1b, 0x5d, 0x60, 0x77, 0x1b, 0xc7, - 0x1f, 0x8b, 0xd1, 0x3b, 0x8f, 0x4d, 0x28, 0x27, 0xce, 0xb3, 0xc2, 0x6f, 0x74, 0x11, 0x4a, 0x74, - 0xff, 0x79, 0x7e, 0x9c, 0x96, 0x28, 0x0a, 0xb1, 0x0a, 0xd7, 0xb2, 0x6d, 0x6c, 0xd2, 0x00, 0xa8, - 0xac, 0xf1, 0x2f, 0xf5, 0x1d, 0x40, 0x71, 0xe5, 0xf1, 0x0e, 0xba, 0x08, 0x73, 0x54, 0xb7, 0x22, - 0x88, 0x5d, 0x4a, 0xb1, 0xd6, 0x38, 0x82, 0xfa, 0x75, 0x40, 0xac, 0x2e, 0x29, 0x70, 0x3d, 0x4c, - 0x07, 0x8e, 0x09, 0x61, 0xff, 0x58, 0x81, 0x63, 0x12, 0x77, 0x2e, 0xdf, 0x0b, 0x32, 0xfb, 0x0c, - 0xf1, 0x38, 0xeb, 0xb7, 0xa4, 0x99, 0xf9, 0x62, 0x5a, 0x8c, 0x5f, 0xd2, 0xac, 0xfc, 0xb7, 0x0a, - 0x40, 0x6b, 0x14, 0xec, 0xf3, 0x8d, 0xd6, 0x78, 0x27, 0x2a, 0x89, 0x4e, 0x6c, 0x42, 0xd9, 0x35, - 0x7c, 0xff, 0x89, 0xe3, 0x89, 0x45, 0x64, 0xf8, 0x4d, 0xb7, 0x47, 0x47, 0xfc, 0x8d, 0x86, 0x8a, - 0x46, 0x7f, 0xa3, 0xe7, 0xa0, 0xce, 0xde, 0x09, 0xd1, 0x0d, 0xd3, 0xf4, 0x44, 0x0e, 0x60, 0x45, - 0xab, 0x31, 0x68, 0x8b, 0x01, 0x09, 0x9a, 0x45, 0x4f, 0x23, 0x82, 0x03, 0x3d, 0x70, 0x1e, 0x61, - 0x9b, 0x2f, 0x0c, 0x6b, 0x02, 0xba, 0x43, 0x80, 0xec, 0xb8, 0xb1, 0x6f, 0xf9, 0x81, 0x27, 0xd0, - 0xc4, 0xa1, 0x29, 0x87, 0x52, 0x34, 0xf5, 0x0f, 0x14, 0x68, 0x74, 0x46, 0x83, 0x01, 0x53, 0xee, - 0x51, 0x3a, 0xf9, 0x12, 0x6f, 0x4a, 0x21, 0x6d, 0xf2, 0x91, 0xa2, 0x78, 0x13, 0x3f, 0x95, 0xbd, - 0xac, 0x6b, 0xb0, 0x14, 0x93, 0x98, 0x1b, 0x8e, 0x14, 0xd9, 0x2b, 0x72, 0x64, 0xaf, 0xb6, 0x00, - 0xb1, 0xed, 0x9b, 0x23, 0xb7, 0x52, 0x3d, 0x0e, 0xc7, 0x24, 0x16, 0x7c, 0x2a, 0xbe, 0x04, 0x35, - 0x9e, 0x8f, 0xc6, 0x0d, 0xe2, 0x04, 0x94, 0x89, 0x4b, 0xed, 0x59, 0xa6, 0xc8, 0x90, 0x98, 0x77, - 0x1d, 0x73, 0xdd, 0x32, 0x3d, 0xf5, 0x2b, 0x50, 0xe3, 0x17, 0xde, 0x39, 0xee, 0x6d, 0xa8, 0xf3, - 0xf3, 0x41, 0x5d, 0xba, 0x21, 0x7a, 0x22, 0x23, 0xe9, 0x51, 0xa8, 0xc2, 0x8e, 0x7f, 0xaa, 0xdf, - 0x80, 0x26, 0x8b, 0x16, 0x24, 0xc6, 0xa2, 0x81, 0xb7, 0x41, 0x5c, 0x9f, 0x18, 0xc3, 0x5f, 0xa6, - 0xac, 0x79, 0xf1, 0x4f, 0xf5, 0x34, 0x9c, 0xcc, 0xe4, 0xcf, 0x5b, 0xef, 0x42, 0x23, 0x2a, 0x60, - 0xd7, 0x18, 0xc3, 0xb4, 0x0f, 0x25, 0x96, 0xf6, 0xb1, 0x12, 0xc6, 0xde, 0x05, 0x31, 0x73, 0xd1, - 0xf0, 0x3a, 0x5a, 0x71, 0x15, 0xf3, 0x56, 0x5c, 0x25, 0x69, 0xc5, 0xa5, 0xde, 0x0f, 0x75, 0xc8, - 0xd7, 0xbd, 0x6f, 0xd2, 0x95, 0x39, 0xab, 0x5b, 0x38, 0xb5, 0x53, 0xd9, 0xed, 0x63, 0x48, 0x5a, - 0x0c, 0x5f, 0xbd, 0x08, 0x35, 0xd9, 0xbd, 0xc5, 0x3c, 0x96, 0x92, 0xf2, 0x58, 0xf5, 0x84, 0xb3, - 0x7a, 0x39, 0xb1, 0xa4, 0xc8, 0xd2, 0x6b, 0x62, 0x41, 0x71, 0x43, 0x72, 0x5b, 0xcf, 0x4a, 0x47, - 0xf4, 0xbf, 0x24, 0x8f, 0xb5, 0xcc, 0xfd, 0xf8, 0xbb, 0x3e, 0xa1, 0xe7, 0x0d, 0x55, 0x9f, 0x81, - 0xea, 0x6e, 0xde, 0xb3, 0x23, 0x25, 0x91, 0x57, 0xf6, 0x3a, 0x2c, 0xbf, 0x6b, 0x0d, 0xb0, 0x7f, - 0xe0, 0x07, 0x78, 0xd8, 0xa6, 0xee, 0x65, 0xcf, 0xc2, 0x1e, 0x3a, 0x03, 0x40, 0x57, 0x91, 0xae, - 0x63, 0x85, 0x4f, 0x2d, 0xc4, 0x20, 0xea, 0x4f, 0x14, 0x58, 0x8c, 0x08, 0xa7, 0xc9, 0x09, 0x7c, - 0x0d, 0x66, 0xf7, 0x7c, 0xb1, 0xdb, 0x96, 0x38, 0x83, 0xc8, 0x12, 0x41, 0x2b, 0xed, 0xf9, 0x6d, - 0x13, 0xbd, 0x0e, 0x30, 0xf2, 0xb1, 0xc9, 0x8f, 0xfd, 0x26, 0x64, 0x69, 0x56, 0x08, 0x2a, 0x3b, - 0x38, 0xbc, 0x01, 0x55, 0xcb, 0x76, 0x4c, 0x4c, 0x8f, 0x84, 0xcd, 0x49, 0x19, 0x9a, 0xc0, 0x70, - 0x77, 0x7d, 0x6c, 0xaa, 0xbf, 0x13, 0x1d, 0xec, 0x7e, 0x91, 0x5b, 0xa8, 0xea, 0x7c, 0x7e, 0x15, - 0xbd, 0xce, 0x4d, 0xf6, 0x3d, 0x58, 0x62, 0x6e, 0x72, 0x2f, 0xac, 0x32, 0xf3, 0xe6, 0x4a, 0xa2, - 0x6d, 0x5a, 0xc3, 0xe2, 0x91, 0x95, 0x20, 0x52, 0x6f, 0xc1, 0xf1, 0x44, 0x2a, 0xf9, 0xf4, 0xdb, - 0xe9, 0xef, 0x27, 0xf6, 0xc5, 0xa2, 0x21, 0x75, 0x4d, 0xbe, 0xc1, 0x34, 0x2e, 0xe9, 0x9f, 0x5f, - 0xa6, 0xd9, 0x85, 0x13, 0xd2, 0xa6, 0x9d, 0x24, 0xcb, 0x8d, 0x44, 0xb0, 0x78, 0x2e, 0x9f, 0x5f, - 0x22, 0x6a, 0xfc, 0x77, 0x05, 0x96, 0xb3, 0x10, 0x8e, 0xb8, 0x61, 0xfc, 0x61, 0xce, 0xed, 0xc7, - 0x57, 0x26, 0x09, 0xf4, 0x99, 0x6c, 0xb0, 0x6f, 0xb1, 0xbb, 0x53, 0x93, 0xfb, 0xa4, 0x38, 0x5d, - 0x9f, 0xfc, 0xbc, 0x10, 0x3b, 0x14, 0x19, 0x73, 0xbf, 0xe9, 0x13, 0x6c, 0x52, 0xae, 0x27, 0xae, - 0x37, 0xbd, 0x98, 0x49, 0x38, 0xe1, 0x76, 0x93, 0x96, 0xb5, 0x19, 0x70, 0x6d, 0x12, 0xa7, 0x2f, - 0xec, 0xfe, 0xf5, 0x7f, 0x28, 0x50, 0x97, 0x3b, 0x04, 0xbd, 0x93, 0x71, 0xb7, 0xe9, 0xec, 0x84, - 0x06, 0x4a, 0x57, 0x9b, 0xf8, 0x5d, 0xa2, 0xc2, 0xf4, 0x77, 0x89, 0x8a, 0xd3, 0xdd, 0x25, 0xba, - 0x03, 0xf5, 0x27, 0x9e, 0x15, 0x18, 0x0f, 0x07, 0x58, 0x1f, 0x18, 0x07, 0xd8, 0xe3, 0x5e, 0x78, - 0xac, 0x1b, 0xaa, 0x09, 0x92, 0x7b, 0x84, 0x42, 0xfd, 0x76, 0x01, 0x8e, 0x67, 0x5e, 0x6b, 0xf9, - 0xe4, 0xed, 0xbe, 0x1c, 0x6f, 0xf7, 0x61, 0xee, 0x0a, 0x15, 0x0f, 0x75, 0x57, 0xa8, 0x9d, 0xa3, - 0x85, 0xac, 0xa3, 0xf4, 0x09, 0xca, 0xf8, 0x53, 0x05, 0xca, 0x42, 0xa8, 0x89, 0x37, 0x77, 0x56, - 0x47, 0x04, 0x4d, 0xa7, 0x69, 0xd8, 0xb6, 0x61, 0x3b, 0xba, 0x8f, 0x49, 0x58, 0x34, 0xf1, 0x9e, - 0xc4, 0x32, 0xa5, 0x5b, 0x77, 0x3c, 0xbc, 0x65, 0xd8, 0x4e, 0x97, 0x11, 0xa1, 0x16, 0x34, 0x18, - 0x3f, 0xca, 0x8a, 0x30, 0x9d, 0x38, 0x55, 0xd5, 0x29, 0x01, 0x61, 0x42, 0x98, 0xf9, 0xea, 0x0f, - 0x15, 0x58, 0x4c, 0x68, 0xf6, 0x57, 0xaf, 0x11, 0xbf, 0x5d, 0x84, 0x6a, 0xac, 0x97, 0x27, 0x34, - 0x60, 0x1d, 0x96, 0x44, 0x3a, 0x8c, 0x8f, 0x83, 0xe9, 0xee, 0xa9, 0x2c, 0x72, 0x8a, 0x2e, 0x0e, - 0x58, 0x24, 0x73, 0x1b, 0x16, 0x8d, 0xc7, 0x86, 0x35, 0xa0, 0x16, 0x34, 0x55, 0x90, 0x50, 0x0f, - 0xf1, 0xc3, 0x58, 0x88, 0xb5, 0x7b, 0xaa, 0xdb, 0x2a, 0x40, 0x71, 0xa3, 0x4b, 0x43, 0xbe, 0x1f, - 0xcb, 0xb9, 0x1a, 0x7b, 0x69, 0xc8, 0xf7, 0xc3, 0xfa, 0x68, 0x0e, 0x3a, 0xbd, 0x2d, 0xe5, 0xf3, - 0x27, 0x36, 0xf2, 0xeb, 0x23, 0xb8, 0xef, 0x52, 0x54, 0xa2, 0xb0, 0xa1, 0xf1, 0x91, 0xe3, 0xe9, - 0x71, 0xfa, 0xf9, 0x09, 0x0a, 0xa3, 0x14, 0x9d, 0x90, 0x89, 0xfa, 0x9f, 0x0a, 0xa0, 0xf4, 0x80, - 0xfc, 0x95, 0xe9, 0xaa, 0x78, 0xd3, 0x4b, 0x53, 0xab, 0x4e, 0x7d, 0x1b, 0x4e, 0x68, 0xd8, 0x71, - 0xb1, 0x1d, 0xfa, 0xbd, 0x7b, 0x4e, 0xff, 0x10, 0x11, 0xdb, 0x29, 0x68, 0x66, 0xd1, 0xf3, 0x75, - 0xe0, 0x08, 0x9a, 0xeb, 0xfb, 0xb8, 0xf7, 0x88, 0x46, 0xff, 0x47, 0xc9, 0xe7, 0x68, 0x42, 0x79, - 0xe0, 0xf4, 0xd8, 0x63, 0x9d, 0x7c, 0xab, 0x44, 0x7c, 0x8f, 0xd9, 0xa5, 0x3e, 0x0d, 0x27, 0x33, - 0xab, 0xe5, 0x52, 0x21, 0x68, 0xdc, 0xc5, 0xc1, 0xe6, 0x63, 0x6c, 0x87, 0x01, 0xa1, 0xfa, 0xa3, - 0x42, 0x2c, 0xf4, 0xa4, 0x45, 0x87, 0xc8, 0x83, 0x41, 0x1d, 0x58, 0x8e, 0x50, 0x30, 0xa1, 0x66, - 0x4f, 0xe7, 0xb1, 0x47, 0x27, 0xb3, 0xcf, 0xc8, 0x68, 0x25, 0xf4, 0xc5, 0xbc, 0xe8, 0x51, 0x90, - 0x10, 0x96, 0x38, 0x39, 0x2d, 0x26, 0x4f, 0x4e, 0xdf, 0x07, 0x14, 0x0f, 0x2e, 0xf9, 0x6a, 0xb3, - 0x34, 0xc5, 0x3b, 0x28, 0x0d, 0x37, 0xf9, 0x62, 0x4f, 0xce, 0x6b, 0x26, 0xb3, 0x47, 0x7a, 0xcd, - 0x44, 0x3d, 0x03, 0xa7, 0x48, 0xc8, 0x78, 0x1f, 0x07, 0x9e, 0xd5, 0xdb, 0xc0, 0x7e, 0xcf, 0xb3, - 0xdc, 0xc0, 0x09, 0x53, 0x33, 0x54, 0x1d, 0x4e, 0xe7, 0x94, 0x73, 0x75, 0xbf, 0x0d, 0x55, 0x33, - 0x02, 0x67, 0xad, 0xdc, 0x93, 0xb4, 0x5a, 0x9c, 0x40, 0xfd, 0x00, 0x1a, 0x49, 0x84, 0xcc, 0x4c, - 0x4e, 0x04, 0xa5, 0x7d, 0x3c, 0x70, 0xc5, 0xd5, 0x14, 0xf2, 0x9b, 0x68, 0x9d, 0x45, 0xe3, 0x8f, - 0xf0, 0x81, 0xd8, 0xd9, 0xad, 0x50, 0xc8, 0x97, 0xf1, 0x41, 0xd8, 0x36, 0xe9, 0x7a, 0xbd, 0x67, - 0xf5, 0x92, 0x6d, 0xcb, 0x28, 0x8f, 0xda, 0x46, 0xba, 0x6d, 0xc8, 0xc0, 0xbc, 0x6d, 0xa7, 0x73, - 0xaf, 0xee, 0x53, 0x5a, 0x70, 0x1d, 0x93, 0xff, 0x56, 0xff, 0x50, 0x81, 0xa5, 0x14, 0xc6, 0x94, - 0xbb, 0xf5, 0x2f, 0xc1, 0xbc, 0xa8, 0xb7, 0x90, 0x4e, 0x77, 0x64, 0xbc, 0x34, 0x81, 0x82, 0xda, - 0xb0, 0x14, 0x59, 0xb4, 0xa0, 0x2b, 0xa6, 0xfb, 0x22, 0x1e, 0x8a, 0x53, 0x71, 0x1b, 0xbd, 0x04, - 0x44, 0xed, 0x41, 0x23, 0x89, 0x35, 0xcd, 0x98, 0x3a, 0x94, 0xbc, 0xea, 0x5f, 0x29, 0x30, 0xc7, - 0x60, 0x99, 0x9d, 0x2d, 0x79, 0xf1, 0x42, 0xd2, 0x8b, 0xbf, 0x01, 0x55, 0xc6, 0x47, 0x0f, 0x2f, - 0x26, 0xd5, 0xe5, 0x0d, 0x4b, 0xc6, 0x9a, 0x8e, 0x56, 0x18, 0x86, 0xbf, 0x49, 0x33, 0x98, 0xbd, - 0xd0, 0x58, 0x5b, 0x24, 0xb5, 0x56, 0x29, 0x8c, 0xfa, 0x5a, 0x12, 0x2f, 0xf2, 0xa8, 0x7c, 0xc2, - 0x3c, 0xc8, 0x77, 0x56, 0x56, 0xe8, 0x63, 0x71, 0xa9, 0x2d, 0x3b, 0x75, 0x87, 0xbe, 0xe6, 0x96, - 0xde, 0x6a, 0x43, 0x5f, 0x92, 0x8f, 0x7d, 0x9f, 0x4b, 0x9d, 0x99, 0x4a, 0x64, 0x23, 0x8f, 0x3d, - 0x6a, 0xcc, 0x68, 0xd4, 0x0f, 0xc9, 0x1a, 0x39, 0x07, 0x07, 0xbd, 0x15, 0x3e, 0x9d, 0x69, 0x7a, - 0xd6, 0x63, 0xbe, 0x54, 0xae, 0xcb, 0xd7, 0xf4, 0xd7, 0x29, 0xc2, 0x06, 0x2d, 0x17, 0x8f, 0x6a, - 0xb2, 0xaf, 0x4b, 0xcf, 0x43, 0x59, 0x3c, 0x38, 0x8d, 0xe6, 0xa1, 0xb8, 0xb3, 0xde, 0x69, 0xcc, - 0x90, 0x1f, 0xbb, 0x1b, 0x9d, 0x86, 0x82, 0xca, 0x50, 0xea, 0xae, 0xef, 0x74, 0x1a, 0x85, 0x4b, - 0x43, 0x68, 0x24, 0xdf, 0x5c, 0x46, 0xab, 0x70, 0xac, 0xa3, 0x6d, 0x77, 0x5a, 0x77, 0x5b, 0x3b, - 0xed, 0xed, 0x2d, 0xbd, 0xa3, 0xb5, 0x1f, 0xb4, 0x76, 0x36, 0x1b, 0x33, 0xe8, 0x3c, 0x9c, 0x8e, - 0x17, 0xbc, 0xb7, 0xdd, 0xdd, 0xd1, 0x77, 0xb6, 0xf5, 0xf5, 0xed, 0xad, 0x9d, 0x56, 0x7b, 0x6b, - 0x53, 0x6b, 0x28, 0xe8, 0x34, 0x9c, 0x88, 0xa3, 0xdc, 0x69, 0x6f, 0xb4, 0xb5, 0xcd, 0x75, 0xf2, - 0xbb, 0x75, 0xaf, 0x51, 0xb8, 0xf4, 0x16, 0xd4, 0xa4, 0xab, 0x18, 0x44, 0xa4, 0xce, 0xf6, 0x46, - 0x63, 0x06, 0xd5, 0xa0, 0x12, 0xe7, 0x53, 0x86, 0xd2, 0xd6, 0xf6, 0xc6, 0x66, 0xa3, 0x80, 0x00, - 0xe6, 0x76, 0x5a, 0xda, 0xdd, 0xcd, 0x9d, 0x46, 0xf1, 0xd2, 0xad, 0xe4, 0x33, 0x11, 0x18, 0x2d, - 0x41, 0xad, 0xdb, 0xda, 0xda, 0xb8, 0xb3, 0xfd, 0x35, 0x5d, 0xdb, 0x6c, 0x6d, 0x7c, 0xd0, 0x98, - 0x41, 0xcb, 0xd0, 0x10, 0xa0, 0xad, 0xed, 0x1d, 0x06, 0x55, 0x2e, 0x3d, 0x4a, 0xac, 0xc2, 0x30, - 0x3a, 0x0e, 0x4b, 0x61, 0x95, 0xfa, 0xba, 0xb6, 0xd9, 0xda, 0xd9, 0x24, 0x92, 0x48, 0x60, 0x6d, - 0x77, 0x6b, 0xab, 0xbd, 0x75, 0xb7, 0xa1, 0x10, 0xae, 0x11, 0x78, 0xf3, 0x6b, 0x6d, 0x82, 0x5c, - 0x90, 0x91, 0x77, 0xb7, 0xbe, 0xbc, 0xb5, 0xfd, 0xd5, 0xad, 0x46, 0xf1, 0xd2, 0xff, 0x8d, 0x67, - 0x09, 0x44, 0xf3, 0xca, 0x49, 0x58, 0x4d, 0xd5, 0xa8, 0x6f, 0x3e, 0xd8, 0xdc, 0xda, 0x69, 0xcc, - 0xc8, 0x85, 0xdd, 0x9d, 0x96, 0x16, 0x15, 0x2a, 0xc9, 0xc2, 0xed, 0x4e, 0x27, 0x2c, 0x2c, 0xc8, - 0x85, 0x1b, 0x9b, 0xf7, 0x36, 0x23, 0xca, 0xe2, 0xa5, 0x67, 0x01, 0xa2, 0xf1, 0x83, 0xaa, 0x30, - 0xbf, 0xbe, 0xbd, 0xbb, 0xb5, 0xb3, 0xa9, 0x35, 0x66, 0x50, 0x05, 0x66, 0xef, 0xb6, 0x76, 0xef, - 0x6e, 0x36, 0x94, 0x4b, 0x17, 0x61, 0x21, 0x6e, 0x4d, 0x04, 0xaf, 0xfb, 0x41, 0x77, 0x67, 0xf3, - 0x3e, 0xd1, 0xc8, 0x02, 0x94, 0xd7, 0xef, 0x6a, 0xdb, 0xbb, 0x9d, 0x77, 0xbb, 0x0d, 0xe5, 0xfa, - 0x7f, 0x2f, 0x87, 0x4f, 0xc4, 0x76, 0xb1, 0x47, 0x13, 0xe0, 0x37, 0x60, 0x5e, 0x3c, 0xd1, 0x2e, - 0xed, 0x43, 0xc8, 0x4f, 0xca, 0x37, 0x4f, 0x66, 0x96, 0xf1, 0xb8, 0x60, 0x06, 0x3d, 0xa0, 0xbb, - 0xc8, 0xb1, 0x47, 0x9a, 0xce, 0x25, 0x76, 0x6e, 0x53, 0x6f, 0x41, 0x35, 0xcf, 0x8f, 0xc1, 0x08, - 0xf9, 0x7e, 0x00, 0x75, 0xf9, 0x35, 0x44, 0x74, 0x5e, 0xde, 0xe1, 0xcd, 0x78, 0x68, 0xb1, 0xa9, - 0x8e, 0x43, 0x09, 0x59, 0xeb, 0xd0, 0x48, 0xbe, 0x86, 0x88, 0xa4, 0xc4, 0x89, 0x9c, 0xc7, 0x16, - 0x9b, 0xcf, 0x8e, 0x47, 0x8a, 0x57, 0x90, 0x7a, 0xe4, 0xef, 0x99, 0xf1, 0xcf, 0xa6, 0x65, 0x54, - 0x90, 0xf7, 0xb6, 0x1a, 0x53, 0x8e, 0x3c, 0x6b, 0xa2, 0xc4, 0xbb, 0x7a, 0x19, 0x4f, 0x70, 0xc9, - 0xca, 0xc9, 0x7e, 0x7e, 0x49, 0x9d, 0x41, 0xff, 0x0b, 0x16, 0x13, 0xd9, 0xcd, 0x48, 0x22, 0xcc, - 0x4e, 0xda, 0x6e, 0x3e, 0x33, 0x16, 0x47, 0xee, 0xd5, 0x78, 0x06, 0x73, 0xb2, 0x57, 0x33, 0x32, - 0xa3, 0x93, 0xbd, 0x9a, 0x99, 0x00, 0x4d, 0x0d, 0x51, 0xca, 0x56, 0x96, 0x0d, 0x31, 0x2b, 0x3b, - 0xba, 0x79, 0x7e, 0x0c, 0x46, 0x5c, 0x21, 0x89, 0x7c, 0x65, 0x59, 0x21, 0xd9, 0x99, 0xd0, 0xcd, - 0x67, 0xc6, 0xe2, 0x24, 0x7b, 0x32, 0xca, 0x93, 0x4c, 0xf7, 0x64, 0x2a, 0x57, 0x37, 0xdd, 0x93, - 0xe9, 0x34, 0x4b, 0xde, 0x93, 0x89, 0xcc, 0x46, 0x75, 0x6c, 0xd6, 0x55, 0x56, 0x4f, 0x66, 0x67, - 0x66, 0xa9, 0x33, 0xe8, 0x09, 0xac, 0xe5, 0x25, 0xd7, 0xa0, 0x17, 0x0f, 0x91, 0x03, 0xd4, 0x7c, - 0x69, 0x3a, 0xe4, 0xb0, 0x62, 0x0c, 0x28, 0xbd, 0x7c, 0x42, 0xcf, 0xc9, 0xea, 0xce, 0x59, 0x9e, - 0x35, 0x9f, 0x9f, 0x84, 0x16, 0x56, 0x73, 0x17, 0xca, 0x22, 0x6d, 0x07, 0x49, 0x2e, 0x30, 0x91, - 0x2e, 0xd4, 0x3c, 0x95, 0x5d, 0x18, 0x32, 0xfa, 0x12, 0x94, 0x08, 0x14, 0xad, 0x26, 0xf1, 0x04, - 0x83, 0xb5, 0x74, 0x41, 0x48, 0xdc, 0x82, 0x39, 0x96, 0x8f, 0x82, 0xa4, 0x03, 0x31, 0x29, 0x5f, - 0xa6, 0xd9, 0xcc, 0x2a, 0x0a, 0x59, 0x74, 0xd8, 0x3f, 0xbc, 0xe0, 0xe9, 0x25, 0xe8, 0x4c, 0xf2, - 0x1d, 0x64, 0x39, 0x8f, 0xa5, 0x79, 0x36, 0xb7, 0x3c, 0x6e, 0xb3, 0x89, 0x2d, 0xc2, 0xf3, 0x63, - 0xf6, 0xb1, 0xb3, 0x6c, 0x36, 0x7b, 0x77, 0x9c, 0x75, 0x6e, 0x7a, 0xf7, 0x1c, 0x3d, 0x97, 0x6b, - 0xef, 0x52, 0x15, 0xcf, 0x4f, 0x42, 0x8b, 0x0f, 0x8d, 0xe4, 0x83, 0x46, 0xea, 0xb8, 0xc7, 0xc6, - 0xb2, 0x86, 0x46, 0xce, 0x23, 0x66, 0xea, 0x0c, 0xda, 0x87, 0x63, 0x19, 0xaf, 0x9c, 0xa1, 0xe7, - 0xf3, 0xfd, 0xaf, 0x54, 0xcb, 0x0b, 0x13, 0xf1, 0xe2, 0x35, 0x65, 0x9c, 0x29, 0xcb, 0x35, 0xe5, - 0x1f, 0x6a, 0xcb, 0x35, 0x8d, 0x3b, 0x9c, 0xa6, 0x86, 0xc8, 0x7d, 0xc8, 0x89, 0xac, 0x83, 0xd6, - 0x0c, 0x43, 0x4c, 0x79, 0x8c, 0x7d, 0x38, 0x96, 0xb1, 0xc5, 0x20, 0x0b, 0x9b, 0xbf, 0xf5, 0x21, - 0x0b, 0x3b, 0x6e, 0xaf, 0x62, 0x06, 0x7d, 0x08, 0xe8, 0x2e, 0x0e, 0xe4, 0x50, 0xce, 0x47, 0xd2, - 0x40, 0x4d, 0xee, 0x66, 0xe4, 0xd8, 0xa7, 0xb4, 0xad, 0xa1, 0xce, 0x5c, 0x53, 0x90, 0xcd, 0x2e, - 0x50, 0xa4, 0x16, 0xe3, 0xe8, 0x42, 0xb2, 0xdb, 0xf2, 0xd6, 0xf3, 0xcd, 0x8b, 0x53, 0x60, 0x86, - 0x6d, 0xb1, 0x93, 0x2f, 0x6a, 0x8a, 0xf5, 0xe0, 0x85, 0x7c, 0x33, 0x91, 0xd7, 0xd8, 0xe9, 0xfa, - 0x72, 0x57, 0xdb, 0x61, 0x3c, 0x17, 0x33, 0xa6, 0x73, 0xf9, 0x19, 0x0e, 0x39, 0xf1, 0x5c, 0x96, - 0x01, 0x5d, 0xff, 0xad, 0x22, 0x2c, 0xb0, 0x4c, 0x10, 0x1e, 0x7e, 0xde, 0x07, 0x88, 0x92, 0xaa, - 0xd0, 0xe9, 0xa4, 0x8c, 0x52, 0xa6, 0x5a, 0xf3, 0x4c, 0x5e, 0x71, 0xdc, 0xcd, 0xc5, 0x92, 0x95, - 0x64, 0x37, 0x97, 0xce, 0xbd, 0x92, 0xdd, 0x5c, 0x46, 0x96, 0x93, 0x3a, 0x83, 0xde, 0x87, 0x4a, - 0x98, 0x1b, 0x23, 0x1b, 0x4f, 0x32, 0xc9, 0xa7, 0x79, 0x3a, 0xa7, 0x34, 0x2e, 0x5d, 0x2c, 0xe5, - 0x45, 0x96, 0x2e, 0x9d, 0x4e, 0x23, 0x4b, 0x97, 0x95, 0x2b, 0x13, 0xb5, 0x97, 0x1d, 0x4a, 0x67, - 0xb4, 0x57, 0xca, 0x51, 0xc8, 0x68, 0xaf, 0x7c, 0x9a, 0xad, 0xce, 0xdc, 0xb9, 0xfd, 0xe3, 0x9f, - 0x9d, 0x51, 0x7e, 0xf2, 0xb3, 0x33, 0x33, 0xff, 0xe7, 0xe3, 0x33, 0xca, 0x8f, 0x3f, 0x3e, 0xa3, - 0xfc, 0xdd, 0xc7, 0x67, 0x94, 0x9f, 0x7e, 0x7c, 0x46, 0xf9, 0xce, 0xbf, 0x9c, 0x99, 0xf9, 0x50, - 0x7d, 0x74, 0xc3, 0xbf, 0x62, 0x39, 0x57, 0x7b, 0x9e, 0x75, 0xd9, 0x70, 0xad, 0xab, 0xee, 0xa3, - 0xfe, 0x55, 0xc3, 0xb5, 0xfc, 0xab, 0x9c, 0xef, 0xd5, 0xc7, 0x2f, 0x3f, 0x9c, 0xa3, 0xff, 0x24, - 0xe9, 0x95, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x10, 0xa2, 0xce, 0xde, 0x6a, 0x00, 0x00, + // 6771 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3d, 0x4b, 0x6c, 0x1c, 0xc9, + 0x75, 0xec, 0x99, 0x21, 0x39, 0xf3, 0x86, 0x43, 0x0e, 0x4b, 0x14, 0x49, 0x8d, 0xfe, 0xbd, 0x3f, + 0x49, 0xbb, 0xfa, 0xac, 0xf6, 0x27, 0xc9, 0xfb, 0xd1, 0x88, 0xe4, 0x6a, 0x67, 0x2d, 0x91, 0xe3, + 0x1e, 0x72, 0xed, 0x5d, 0x07, 0xee, 0xb4, 0xa6, 0x8b, 0x64, 0xaf, 0x66, 0xba, 0xdb, 0xdd, 0x3d, + 0x92, 0xe8, 0x53, 0x8e, 0x89, 0x4f, 0x06, 0x12, 0xc7, 0x88, 0x11, 0x24, 0xc8, 0x21, 0x48, 0x6e, + 0x09, 0x02, 0x24, 0x71, 0x10, 0x24, 0x01, 0x8c, 0xc4, 0x70, 0x02, 0x04, 0xc8, 0x21, 0x01, 0x7c, + 0x48, 0x10, 0x7b, 0x13, 0x20, 0x40, 0xae, 0xf1, 0x21, 0xa7, 0x38, 0xa8, 0x5f, 0x77, 0x57, 0xff, + 0x66, 0xc8, 0x5d, 0xef, 0xae, 0x4f, 0x9c, 0x7e, 0xf5, 0xde, 0xab, 0x57, 0xaf, 0x5e, 0xbd, 0x7a, + 0x55, 0xf5, 0xaa, 0x08, 0x35, 0xc3, 0xb5, 0xae, 0xb8, 0x9e, 0x13, 0x38, 0x08, 0xbc, 0x91, 0x1d, + 0x58, 0x43, 0x7c, 0xe5, 0xd1, 0x8b, 0xad, 0xcb, 0x7b, 0x56, 0xb0, 0x3f, 0x7a, 0x70, 0xa5, 0xef, + 0x0c, 0xaf, 0xee, 0x39, 0x7b, 0xce, 0x55, 0x8a, 0xf2, 0x60, 0xb4, 0x4b, 0xbf, 0xe8, 0x07, 0xfd, + 0xc5, 0x48, 0xd5, 0x4b, 0x30, 0xff, 0x1e, 0xf6, 0x7c, 0xcb, 0xb1, 0x35, 0xfc, 0xf5, 0x11, 0xf6, + 0x03, 0xb4, 0x0a, 0xb3, 0x8f, 0x18, 0x64, 0x55, 0x39, 0xa7, 0x5c, 0xa8, 0x69, 0xe2, 0x53, 0xfd, + 0x03, 0x05, 0x16, 0x42, 0x64, 0xdf, 0x75, 0x6c, 0x1f, 0xe7, 0x63, 0xa3, 0xf3, 0x30, 0xc7, 0xc5, + 0xd2, 0x6d, 0x63, 0x88, 0x57, 0x4b, 0xb4, 0xb8, 0xce, 0x61, 0x9b, 0xc6, 0x10, 0xa3, 0xe7, 0x60, + 0x41, 0xa0, 0x08, 0x26, 0x65, 0x8a, 0x35, 0xcf, 0xc1, 0xbc, 0x36, 0x74, 0x05, 0x8e, 0x09, 0x44, + 0xc3, 0xb5, 0x42, 0xe4, 0x0a, 0x45, 0x5e, 0xe4, 0x45, 0x6d, 0xd7, 0xe2, 0xf8, 0xea, 0x57, 0xa1, + 0xb6, 0xbe, 0xd9, 0x5b, 0x73, 0xec, 0x5d, 0x6b, 0x8f, 0x88, 0xe8, 0x63, 0x8f, 0xd0, 0xac, 0x2a, + 0xe7, 0xca, 0x44, 0x44, 0xfe, 0x89, 0x5a, 0x50, 0xf5, 0xb1, 0xe1, 0xf5, 0xf7, 0xb1, 0xbf, 0x5a, + 0xa2, 0x45, 0xe1, 0x37, 0xa1, 0x72, 0xdc, 0xc0, 0x72, 0x6c, 0x7f, 0xb5, 0xcc, 0xa8, 0xf8, 0xa7, + 0xfa, 0xdb, 0x0a, 0xd4, 0xbb, 0x8e, 0x17, 0xdc, 0x37, 0x5c, 0xd7, 0xb2, 0xf7, 0xd0, 0x35, 0xa8, + 0x52, 0x5d, 0xf6, 0x9d, 0x01, 0xd5, 0xc1, 0xfc, 0xf5, 0xa5, 0x2b, 0x51, 0x87, 0x5c, 0xe9, 0xf2, + 0x32, 0x2d, 0xc4, 0x42, 0xcf, 0xc0, 0x7c, 0xdf, 0xb1, 0x03, 0xc3, 0xb2, 0xb1, 0xa7, 0xbb, 0x8e, + 0x17, 0x50, 0xe5, 0x4c, 0x6b, 0x8d, 0x10, 0x4a, 0xf8, 0xa3, 0x93, 0x50, 0xdb, 0x77, 0xfc, 0x80, + 0x61, 0x94, 0x29, 0x46, 0x95, 0x00, 0x68, 0xe1, 0x0a, 0xcc, 0xd2, 0x42, 0xcb, 0xe5, 0x6a, 0x98, + 0x21, 0x9f, 0x1d, 0x57, 0xfd, 0x7e, 0x09, 0xa6, 0xef, 0x3b, 0x23, 0x3b, 0x48, 0x54, 0x63, 0x04, + 0xfb, 0xbc, 0x8b, 0x62, 0xd5, 0x18, 0xc1, 0x7e, 0x54, 0x0d, 0xc1, 0x60, 0xbd, 0xc4, 0xaa, 0x21, + 0x85, 0x2d, 0xa8, 0x7a, 0xd8, 0x30, 0x1d, 0x7b, 0x70, 0x40, 0x45, 0xa8, 0x6a, 0xe1, 0x37, 0xe9, + 0x3e, 0x1f, 0x0f, 0x2c, 0x7b, 0xf4, 0x44, 0xf7, 0xf0, 0xc0, 0x78, 0x80, 0x07, 0x54, 0x94, 0xaa, + 0x36, 0xcf, 0xc1, 0x1a, 0x83, 0xa2, 0x37, 0xa1, 0xee, 0x7a, 0x8e, 0x6b, 0xec, 0x19, 0x44, 0x83, + 0xab, 0xd3, 0x54, 0x49, 0xa7, 0xe2, 0x4a, 0xa2, 0x02, 0x77, 0x23, 0x1c, 0x2d, 0x4e, 0x80, 0x5e, + 0x83, 0xfa, 0xc8, 0x32, 0xb9, 0xbe, 0xfd, 0xd5, 0x99, 0x73, 0xe5, 0x0b, 0xf5, 0xeb, 0xc7, 0xe3, + 0xf4, 0x9d, 0x75, 0x5e, 0xaa, 0xc5, 0x31, 0x09, 0xe1, 0x5e, 0x8c, 0x70, 0xb6, 0x90, 0x30, 0x86, + 0xa9, 0xea, 0x50, 0x0b, 0x4b, 0x22, 0x55, 0x9b, 0x54, 0x81, 0x0d, 0xae, 0x6a, 0x93, 0x98, 0x78, + 0xa4, 0x60, 0xcb, 0xa4, 0xca, 0x6b, 0x68, 0xf5, 0x10, 0xd6, 0x31, 0xd1, 0x32, 0xcc, 0x0c, 0xb0, + 0xbd, 0x17, 0xec, 0x53, 0xed, 0x35, 0x34, 0xfe, 0xa5, 0xfe, 0x86, 0x02, 0x8d, 0x1d, 0x1f, 0x7b, + 0x64, 0x1c, 0xf8, 0xae, 0xd1, 0xc7, 0xe8, 0x32, 0x54, 0x86, 0x8e, 0x89, 0xb9, 0x09, 0x9d, 0x88, + 0x0b, 0x19, 0x22, 0xdd, 0x77, 0x4c, 0xac, 0x51, 0x34, 0x74, 0x11, 0x2a, 0x23, 0xcb, 0x64, 0x76, + 0x9b, 0xdb, 0x26, 0x8a, 0x42, 0x50, 0xf7, 0x08, 0x6a, 0xb9, 0x10, 0x95, 0xa0, 0xa8, 0x3f, 0x53, + 0x60, 0x21, 0xac, 0x6d, 0x8b, 0x1a, 0x3c, 0x7a, 0x09, 0x66, 0x6d, 0x1c, 0x3c, 0x76, 0xbc, 0x87, + 0xe3, 0x65, 0x13, 0x98, 0xe8, 0x79, 0x28, 0xbb, 0x5c, 0x23, 0x85, 0x04, 0x04, 0x8b, 0x20, 0x5b, + 0x6e, 0x9f, 0x6a, 0xa8, 0x18, 0xd9, 0x72, 0xfb, 0xc4, 0x5c, 0x03, 0xc3, 0xdb, 0xc3, 0xb4, 0x3f, + 0x98, 0xe9, 0x57, 0x19, 0xa0, 0x63, 0xa2, 0xdb, 0x30, 0x3f, 0xf2, 0xb1, 0x67, 0xfb, 0xba, 0x18, + 0xbc, 0xc4, 0xd8, 0xea, 0x32, 0x53, 0x49, 0xef, 0x5a, 0x83, 0x11, 0x6c, 0xf1, 0xd1, 0xad, 0x02, + 0x74, 0xec, 0xe0, 0xd5, 0x97, 0xdf, 0x33, 0x06, 0x23, 0x8c, 0x96, 0x60, 0xfa, 0x11, 0xf9, 0x41, + 0x5b, 0x5e, 0xd6, 0xd8, 0x87, 0xfa, 0x57, 0x15, 0x38, 0x79, 0x8f, 0x18, 0x78, 0xcf, 0xb0, 0xcd, + 0x07, 0xce, 0x93, 0x1e, 0xee, 0x8f, 0x3c, 0x2b, 0x38, 0x58, 0x73, 0xec, 0x00, 0x3f, 0x09, 0xd0, + 0x3b, 0xb0, 0x68, 0x0b, 0xfe, 0xa1, 0x20, 0x0a, 0x15, 0xe4, 0x64, 0x66, 0xeb, 0x58, 0xe5, 0x5a, + 0xd3, 0x96, 0x01, 0x3e, 0xba, 0x13, 0x0d, 0x31, 0xc1, 0xa7, 0x94, 0x6e, 0x50, 0x6f, 0x83, 0x4a, + 0xc3, 0xb9, 0x88, 0xd1, 0x27, 0x78, 0xbc, 0x0a, 0xc4, 0xe9, 0xea, 0x86, 0xaf, 0x93, 0x96, 0x52, + 0x2d, 0xd7, 0xaf, 0x2f, 0x4b, 0x56, 0x10, 0x36, 0x58, 0xab, 0x79, 0x23, 0xbb, 0xed, 0x13, 0x0d, + 0xa1, 0x1b, 0xd4, 0x81, 0x13, 0xba, 0x3d, 0xcf, 0x19, 0xb9, 0xab, 0xd5, 0x42, 0x42, 0xa0, 0x84, + 0x77, 0x09, 0x26, 0xf5, 0xeb, 0xdc, 0x49, 0xe8, 0x9e, 0xe3, 0x04, 0xbb, 0xbe, 0x70, 0x0c, 0x02, + 0xac, 0x51, 0x28, 0xba, 0x0a, 0xc7, 0xfc, 0x91, 0xeb, 0x0e, 0xf0, 0x10, 0xdb, 0x81, 0x31, 0x60, + 0x15, 0x91, 0x3e, 0x2b, 0x5f, 0x28, 0x6b, 0x28, 0x5e, 0x44, 0x19, 0xfb, 0xe8, 0x0c, 0x80, 0xeb, + 0x59, 0x8f, 0xac, 0x01, 0xde, 0xc3, 0xe6, 0xea, 0x0c, 0x65, 0x1a, 0x83, 0xa0, 0x57, 0x88, 0xaf, + 0xef, 0xf7, 0x9d, 0xa1, 0xbb, 0x5a, 0x4b, 0xeb, 0x5b, 0xf4, 0x53, 0xd7, 0x73, 0x76, 0xad, 0x01, + 0xd6, 0x04, 0x2e, 0x7a, 0x0d, 0xaa, 0x86, 0xeb, 0x1a, 0xde, 0xd0, 0xf1, 0x56, 0x61, 0x3c, 0x5d, + 0x88, 0x8c, 0x5e, 0x86, 0x25, 0xce, 0x43, 0x77, 0x59, 0x21, 0x73, 0xa3, 0xb3, 0xc4, 0x2e, 0xef, + 0x94, 0x56, 0x15, 0x0d, 0xf1, 0x72, 0x4e, 0x4b, 0x9c, 0xaa, 0xfa, 0xb7, 0x0a, 0x2c, 0x24, 0x78, + 0xa2, 0x77, 0x61, 0x4e, 0x70, 0x08, 0x0e, 0x5c, 0xe1, 0x06, 0x9e, 0x2b, 0x10, 0xe3, 0x0a, 0xff, + 0xbb, 0x7d, 0xe0, 0x62, 0xea, 0x2f, 0xc5, 0x07, 0x7a, 0x0a, 0x1a, 0x03, 0xa7, 0x6f, 0x0c, 0xa8, + 0xd7, 0xf2, 0xf0, 0x2e, 0xf7, 0xea, 0x73, 0x21, 0x50, 0xc3, 0xbb, 0xea, 0x6d, 0xa8, 0xc7, 0x18, + 0x20, 0x04, 0xf3, 0x1a, 0xab, 0x6a, 0x1d, 0xef, 0x1a, 0xa3, 0x41, 0xd0, 0x9c, 0x42, 0xf3, 0x00, + 0x3b, 0x76, 0x9f, 0xcc, 0xa2, 0x36, 0x36, 0x9b, 0x0a, 0x6a, 0x40, 0xed, 0x9e, 0x60, 0xd1, 0x2c, + 0xa9, 0xdf, 0x2d, 0xc3, 0x71, 0x6a, 0x78, 0x5d, 0xc7, 0xe4, 0x23, 0x81, 0x4f, 0xb9, 0x4f, 0x41, + 0xa3, 0x4f, 0xfb, 0x52, 0x77, 0x0d, 0x0f, 0xdb, 0x01, 0x9f, 0x78, 0xe6, 0x18, 0xb0, 0x4b, 0x61, + 0x48, 0x83, 0xa6, 0xcf, 0x5b, 0xa4, 0xf7, 0xd9, 0xc8, 0xe1, 0xc6, 0x2d, 0xb5, 0xba, 0x60, 0xa0, + 0x69, 0x0b, 0x7e, 0x6a, 0xe4, 0xcd, 0xfa, 0x07, 0x7e, 0x3f, 0x18, 0x08, 0x6f, 0x77, 0x25, 0xc5, + 0x2a, 0x29, 0xec, 0x95, 0x1e, 0x23, 0xd8, 0xb0, 0x03, 0xef, 0x40, 0x13, 0xe4, 0xe8, 0x2d, 0xa8, + 0x3a, 0x8f, 0xb0, 0xb7, 0x8f, 0x0d, 0xe6, 0x65, 0xea, 0xd7, 0x9f, 0x4a, 0xb1, 0x5a, 0x13, 0x8e, + 0x5e, 0xc3, 0xbe, 0x33, 0xf2, 0xfa, 0xd8, 0xd7, 0x42, 0x22, 0xd4, 0x86, 0x9a, 0x27, 0xc0, 0xdc, + 0x0b, 0x4d, 0xc4, 0x21, 0xa2, 0x6a, 0xdd, 0x82, 0xb9, 0xb8, 0x70, 0xa8, 0x09, 0xe5, 0x87, 0xf8, + 0x80, 0x2b, 0x93, 0xfc, 0x8c, 0xfc, 0x13, 0xeb, 0x61, 0xf6, 0x71, 0xab, 0x74, 0x43, 0x51, 0x3d, + 0x40, 0x51, 0x4b, 0xef, 0xe3, 0xc0, 0x30, 0x8d, 0xc0, 0x40, 0x08, 0x2a, 0x34, 0x18, 0x63, 0x2c, + 0xe8, 0x6f, 0xc2, 0x75, 0xc4, 0x5d, 0x75, 0x4d, 0x23, 0x3f, 0xd1, 0x29, 0xa8, 0x85, 0x9e, 0x88, + 0x47, 0x64, 0x11, 0x80, 0x44, 0x46, 0x46, 0x10, 0xe0, 0xa1, 0x1b, 0x50, 0xc5, 0x34, 0x34, 0xf1, + 0xa9, 0xfe, 0xda, 0x34, 0x34, 0x53, 0xb6, 0x70, 0x0b, 0xaa, 0x43, 0x5e, 0x3d, 0xf7, 0x81, 0x67, + 0xa4, 0xf0, 0x28, 0x25, 0xa4, 0x16, 0xe2, 0x93, 0xe8, 0x83, 0xd8, 0x5a, 0x2c, 0x7e, 0x0c, 0xbf, + 0x99, 0x91, 0xef, 0xe9, 0xa6, 0xe5, 0xe1, 0x7e, 0xe0, 0x78, 0x07, 0x5c, 0xd0, 0xb9, 0x81, 0xb3, + 0xb7, 0x2e, 0x60, 0xe8, 0x65, 0x00, 0xd3, 0xf6, 0x75, 0x6a, 0xc3, 0x7b, 0xbc, 0x1f, 0xa5, 0x09, + 0x30, 0x0c, 0x13, 0xb5, 0x9a, 0x69, 0xfb, 0x5c, 0xe4, 0xd7, 0xa1, 0x41, 0x62, 0x2e, 0x7d, 0x28, + 0x02, 0x87, 0x69, 0x6a, 0x4b, 0x2b, 0xb2, 0xdc, 0x61, 0x04, 0xa8, 0xcd, 0xb9, 0xd1, 0x87, 0x8f, + 0x6e, 0xc3, 0x0c, 0x0d, 0x7b, 0x44, 0xa0, 0x72, 0x21, 0xbb, 0xb9, 0xdc, 0xfa, 0xee, 0x51, 0x54, + 0x66, 0x7c, 0x9c, 0x0e, 0x6d, 0x41, 0xdd, 0xb0, 0x6d, 0x27, 0x30, 0x98, 0xc7, 0x67, 0x61, 0xcb, + 0xe5, 0x42, 0x36, 0xed, 0x08, 0x9f, 0xf1, 0x8a, 0x73, 0x40, 0xaf, 0xc1, 0x34, 0x9d, 0x12, 0xb8, + 0x0f, 0x3f, 0x3f, 0x76, 0x50, 0x68, 0x0c, 0x1f, 0xbd, 0x01, 0xb3, 0x8f, 0x2d, 0xdb, 0x74, 0x1e, + 0xfb, 0xdc, 0x9f, 0x4a, 0x26, 0xfc, 0x65, 0x56, 0x94, 0x22, 0x16, 0x34, 0xad, 0x9b, 0x50, 0x8f, + 0xb5, 0xef, 0x30, 0xf6, 0xdb, 0x7a, 0x13, 0x9a, 0xc9, 0x36, 0x1d, 0xca, 0xfe, 0x47, 0xb0, 0xa4, + 0x8d, 0xec, 0x48, 0x34, 0xb1, 0xbc, 0x79, 0x19, 0x66, 0xb8, 0x35, 0x30, 0x63, 0x3c, 0x55, 0xa4, + 0x56, 0x8d, 0xe3, 0xc6, 0x57, 0x2a, 0xfb, 0x86, 0x6d, 0x0e, 0xb0, 0xc7, 0x6b, 0x14, 0x2b, 0x95, + 0x77, 0x18, 0x54, 0x7d, 0x03, 0x8e, 0x27, 0xaa, 0xe5, 0x0b, 0xa5, 0xa7, 0x61, 0xde, 0x75, 0x4c, + 0xdd, 0x67, 0x60, 0x11, 0x4b, 0xd6, 0x88, 0xed, 0x08, 0xdc, 0x8e, 0x49, 0xc8, 0x7b, 0x81, 0xe3, + 0xa6, 0xc5, 0x9e, 0x8c, 0x7c, 0x15, 0x96, 0x93, 0xe4, 0xac, 0x7a, 0xf5, 0x2d, 0x58, 0xd1, 0xf0, + 0xd0, 0x79, 0x84, 0x8f, 0xca, 0xba, 0x05, 0xab, 0x69, 0x06, 0x9c, 0xf9, 0xfb, 0xb0, 0x12, 0x41, + 0x7b, 0x81, 0x11, 0x8c, 0xfc, 0x43, 0x31, 0xe7, 0xab, 0xc8, 0x07, 0x8e, 0xcf, 0x3a, 0xb2, 0xaa, + 0x89, 0x4f, 0x75, 0x05, 0xa6, 0xbb, 0x8e, 0xd9, 0xe9, 0xa2, 0x79, 0x28, 0x59, 0x2e, 0x27, 0x2e, + 0x59, 0xae, 0xda, 0x8f, 0xd7, 0xb9, 0xc9, 0xa2, 0x4e, 0x56, 0x75, 0x12, 0x15, 0xdd, 0x80, 0x79, + 0xc3, 0x34, 0x2d, 0x62, 0x48, 0xc6, 0x40, 0xb7, 0x5c, 0x11, 0x34, 0x2f, 0x26, 0xba, 0xbe, 0xd3, + 0xd5, 0x1a, 0x11, 0x62, 0xc7, 0xf5, 0xd5, 0x3b, 0x50, 0x8b, 0x02, 0xf4, 0x57, 0xa2, 0x15, 0x61, + 0x69, 0x7c, 0x2c, 0x17, 0x2e, 0x17, 0x37, 0x53, 0x93, 0x24, 0x17, 0xf3, 0x15, 0x80, 0xd0, 0xa9, + 0x8a, 0xf0, 0xf0, 0x78, 0x26, 0x4b, 0x2d, 0x86, 0xa8, 0xfe, 0x7b, 0x25, 0xee, 0x64, 0x63, 0x4d, + 0x36, 0xc3, 0x26, 0x9b, 0x92, 0xd3, 0x2d, 0x1d, 0xd2, 0xe9, 0xbe, 0x08, 0xd3, 0x7e, 0x60, 0x04, + 0x98, 0xc7, 0xe3, 0x27, 0xb3, 0x09, 0x49, 0xc5, 0x58, 0x63, 0x98, 0xe8, 0x34, 0x40, 0xdf, 0xc3, + 0x46, 0x80, 0x4d, 0xdd, 0x60, 0xb3, 0x42, 0x59, 0xab, 0x71, 0x48, 0x3b, 0x20, 0x5e, 0x44, 0xac, + 0x20, 0x32, 0x26, 0xc2, 0x9c, 0x6e, 0x8c, 0xd6, 0x12, 0xa1, 0xf7, 0x9a, 0x19, 0xeb, 0xbd, 0x38, + 0x29, 0xf7, 0x5e, 0x91, 0x27, 0x9e, 0x2d, 0xf2, 0xc4, 0x8c, 0x68, 0x12, 0x4f, 0x5c, 0x2d, 0xf2, + 0xc4, 0x9c, 0x4d, 0xb1, 0x27, 0xce, 0x70, 0x24, 0xb5, 0x2c, 0x47, 0xf2, 0x59, 0xba, 0xce, 0xbf, + 0x28, 0xc1, 0x6a, 0x7a, 0x3c, 0x73, 0x3f, 0xf6, 0x32, 0xcc, 0xf8, 0x14, 0x52, 0xec, 0x3f, 0x39, + 0x15, 0xc7, 0x45, 0x77, 0xa0, 0x62, 0xd9, 0xbb, 0x0e, 0x1f, 0x78, 0x57, 0x0a, 0x69, 0x78, 0x4d, + 0x57, 0x3a, 0xf6, 0xae, 0xc3, 0x34, 0x48, 0x69, 0xd1, 0x3d, 0x38, 0x16, 0xae, 0xac, 0x7d, 0x9d, + 0x31, 0xc6, 0x22, 0xce, 0x93, 0xac, 0x34, 0x8c, 0xaa, 0x38, 0x47, 0x14, 0xd1, 0xf5, 0x38, 0x19, + 0x89, 0x71, 0x08, 0xba, 0x1f, 0x18, 0x43, 0x57, 0x58, 0x6c, 0x08, 0x68, 0xbd, 0x06, 0xb5, 0xb0, + 0xfa, 0x43, 0xe9, 0xae, 0x03, 0x4b, 0x89, 0x31, 0xc2, 0x16, 0x92, 0xe1, 0xa0, 0x52, 0x26, 0x1d, + 0x54, 0xea, 0x4f, 0x95, 0xf8, 0x40, 0x7f, 0xdb, 0x1a, 0x04, 0xd8, 0x4b, 0x0d, 0xf4, 0x57, 0x05, + 0x5f, 0x36, 0xca, 0xcf, 0x15, 0xf0, 0x65, 0xeb, 0x34, 0x3e, 0x62, 0xdf, 0x83, 0x79, 0x6a, 0xe2, + 0xba, 0x8f, 0x07, 0x34, 0x56, 0xe2, 0x7a, 0xbc, 0x9a, 0xcd, 0x80, 0xd5, 0xce, 0x86, 0x48, 0x8f, + 0x53, 0xb0, 0xbe, 0x69, 0x0c, 0xe2, 0xb0, 0xd6, 0x6d, 0x40, 0x69, 0xa4, 0x43, 0x69, 0xf0, 0x3e, + 0xf1, 0x97, 0x7e, 0x90, 0x39, 0x73, 0xef, 0x52, 0x31, 0x8a, 0x2d, 0x8f, 0x89, 0xaa, 0x71, 0x5c, + 0xf5, 0x5f, 0xca, 0x00, 0x51, 0xe1, 0xe7, 0xdc, 0x51, 0xde, 0x0a, 0x1d, 0x16, 0x8b, 0x38, 0xd5, + 0x6c, 0x96, 0x99, 0xae, 0xaa, 0x23, 0xbb, 0x2a, 0x16, 0x7b, 0x3e, 0x97, 0xc3, 0xe0, 0xd0, 0x4e, + 0x6a, 0xf6, 0xf3, 0xe6, 0xa4, 0xde, 0x86, 0xe5, 0xa4, 0x99, 0x70, 0x0f, 0xf5, 0x02, 0x4c, 0x5b, + 0x01, 0x1e, 0xb2, 0xdd, 0xde, 0xc4, 0x86, 0x45, 0x0c, 0x9d, 0x21, 0xa9, 0x6f, 0xc2, 0xb2, 0xdc, + 0x57, 0x87, 0x0b, 0x5d, 0xd4, 0x7b, 0xc9, 0xd8, 0x27, 0x72, 0x95, 0xdc, 0x3e, 0x32, 0xb7, 0x7e, + 0x92, 0x34, 0x0c, 0x53, 0xfd, 0x81, 0x02, 0xc7, 0x13, 0x45, 0x39, 0x03, 0xff, 0xab, 0xa9, 0x01, + 0xcc, 0x7c, 0xeb, 0xcb, 0x05, 0xb5, 0x7c, 0x8a, 0xa3, 0xf8, 0xcb, 0xd0, 0x92, 0xbb, 0x47, 0x52, + 0xed, 0xcd, 0xc4, 0x50, 0x3e, 0x3f, 0x56, 0xe8, 0x70, 0x3c, 0x77, 0xe1, 0x64, 0x26, 0xe3, 0xb4, + 0xce, 0xcb, 0x13, 0xea, 0xfc, 0x7f, 0x4b, 0x71, 0x9f, 0xdd, 0x0e, 0x02, 0xcf, 0x7a, 0x30, 0x0a, + 0xf0, 0x27, 0x1b, 0x54, 0xad, 0x87, 0x23, 0x9b, 0xf9, 0xd9, 0x17, 0xb2, 0x29, 0xa3, 0xda, 0x33, + 0xc7, 0x78, 0x4f, 0x1e, 0xe3, 0x15, 0xca, 0xea, 0xc5, 0xb1, 0xac, 0x0a, 0x47, 0xfb, 0x67, 0x39, + 0x88, 0xff, 0x5e, 0x81, 0x85, 0x44, 0xaf, 0xa0, 0xdb, 0x00, 0x46, 0x28, 0x3a, 0xb7, 0x8f, 0x73, + 0xe3, 0x9a, 0xa8, 0xc5, 0x68, 0xc8, 0x9c, 0xc8, 0xe2, 0xc5, 0x8c, 0x39, 0x31, 0x23, 0x5e, 0x0c, + 0xc3, 0xc5, 0xd7, 0xa3, 0xc5, 0x2e, 0xdb, 0x24, 0x55, 0x0b, 0x17, 0xbb, 0x8c, 0x56, 0x90, 0xa8, + 0xbf, 0x5e, 0x82, 0xa5, 0x2c, 0xee, 0xe8, 0x59, 0x28, 0xf7, 0xdd, 0x11, 0x6f, 0x89, 0x74, 0x34, + 0xb4, 0xe6, 0x8e, 0x76, 0x7c, 0x63, 0x0f, 0x6b, 0x04, 0x01, 0x5d, 0x85, 0x99, 0x21, 0x1e, 0x3a, + 0xde, 0x01, 0x97, 0x5b, 0xda, 0x6e, 0xb8, 0x4f, 0x4b, 0x18, 0x36, 0x47, 0x43, 0xd7, 0xa3, 0xb0, + 0x9a, 0xc9, 0xbb, 0x2a, 0xad, 0x1e, 0x58, 0x11, 0x23, 0x09, 0x63, 0xe9, 0xeb, 0x30, 0xeb, 0x7a, + 0x4e, 0x1f, 0xfb, 0x3e, 0xdf, 0x0d, 0x59, 0x4d, 0x9c, 0x55, 0x91, 0x22, 0x4e, 0xc3, 0x11, 0xd1, + 0x2d, 0x80, 0x28, 0x80, 0xe2, 0x33, 0x53, 0x2b, 0x37, 0xde, 0xf2, 0xb5, 0x18, 0xb6, 0xfa, 0xbd, + 0x12, 0x2c, 0x67, 0x6b, 0x0e, 0x5d, 0x8e, 0xeb, 0xe5, 0x64, 0x86, 0xaa, 0x65, 0xf5, 0xbc, 0x9a, + 0x50, 0xcf, 0x99, 0x0c, 0x8a, 0x2c, 0x2d, 0xdd, 0x4c, 0x6a, 0xe9, 0x6c, 0x06, 0x61, 0xb6, 0xb2, + 0x6e, 0x26, 0x95, 0x95, 0x45, 0x9a, 0xad, 0xb3, 0x76, 0x86, 0xce, 0xce, 0x67, 0xb5, 0x31, 0x5f, + 0x75, 0x7f, 0xa3, 0xc0, 0x5c, 0x5c, 0x2e, 0x39, 0x64, 0x55, 0x12, 0x21, 0x2b, 0xda, 0x84, 0x45, + 0x93, 0xed, 0xdc, 0xea, 0x96, 0x1d, 0x60, 0x6f, 0xd7, 0xe8, 0x8b, 0xa8, 0xf0, 0x7c, 0x86, 0x5d, + 0x74, 0x04, 0x0e, 0x13, 0xbc, 0xc9, 0x69, 0x43, 0x30, 0x69, 0x41, 0xc8, 0x47, 0x78, 0xad, 0x09, + 0x18, 0xc5, 0x88, 0xd4, 0x7f, 0x56, 0xe0, 0x58, 0x86, 0x82, 0xc7, 0x34, 0x64, 0x27, 0xbf, 0x21, + 0x17, 0xf2, 0xbb, 0x6e, 0x6c, 0x7b, 0xde, 0xc9, 0x68, 0xcf, 0xe4, 0xfc, 0xe2, 0xcd, 0xfa, 0x99, + 0x02, 0xc7, 0x33, 0xb1, 0x32, 0xb7, 0x57, 0xaf, 0x43, 0xd5, 0x7b, 0xa2, 0x3f, 0x38, 0x08, 0xb0, + 0x9f, 0x35, 0xb0, 0x77, 0x62, 0x67, 0x28, 0xb3, 0xde, 0x93, 0x3b, 0x04, 0x0f, 0xbd, 0x0c, 0x35, + 0xef, 0x89, 0x8e, 0x3d, 0xcf, 0xf1, 0x84, 0x2f, 0xca, 0x25, 0xaa, 0x7a, 0x4f, 0x36, 0x28, 0x22, + 0xa9, 0x29, 0x10, 0x35, 0x55, 0xc6, 0xd4, 0x14, 0x44, 0x35, 0x05, 0x61, 0x4d, 0xd3, 0x63, 0x6a, + 0x0a, 0x78, 0x4d, 0xea, 0x1f, 0x96, 0xe0, 0x54, 0x91, 0xba, 0x3e, 0x31, 0x45, 0x6c, 0x00, 0xf2, + 0x9e, 0xe8, 0xae, 0xd1, 0x7f, 0x88, 0x03, 0x5f, 0x37, 0x3d, 0xc7, 0x75, 0xb1, 0x39, 0x4e, 0x23, + 0x4d, 0xef, 0x49, 0x97, 0x51, 0xac, 0x33, 0x82, 0x23, 0x69, 0x66, 0x03, 0x50, 0x90, 0xae, 0x7a, + 0x8c, 0x8a, 0x9a, 0x41, 0xa2, 0x6a, 0xf5, 0x43, 0x98, 0x8b, 0x7b, 0x88, 0x31, 0xb6, 0xff, 0x3a, + 0x34, 0xb8, 0x07, 0xd1, 0xfb, 0xce, 0xc8, 0x0e, 0xc6, 0x29, 0x6a, 0x8e, 0x63, 0xaf, 0x11, 0x64, + 0xf5, 0xeb, 0xe1, 0x70, 0xfb, 0xd4, 0xaa, 0xfc, 0x37, 0x05, 0x6a, 0x9d, 0xa1, 0xb1, 0x87, 0x7b, + 0x2e, 0xee, 0x93, 0x99, 0xde, 0x22, 0x1f, 0xbc, 0xdf, 0xd9, 0x07, 0x7a, 0x47, 0x8e, 0x5a, 0x58, + 0x9c, 0xfa, 0xac, 0x74, 0x8e, 0x28, 0x38, 0x8c, 0x59, 0x98, 0x5c, 0x83, 0xa5, 0x91, 0x8f, 0x3d, + 0xdd, 0x77, 0x71, 0xdf, 0xda, 0xb5, 0xb0, 0xa9, 0xb3, 0xea, 0x10, 0xad, 0x0e, 0x91, 0xb2, 0x9e, + 0x28, 0xa2, 0x3c, 0x3f, 0x76, 0x84, 0x72, 0x1d, 0xaa, 0x5f, 0xc4, 0x07, 0x6c, 0x0d, 0x3f, 0x21, + 0x9d, 0xfa, 0xed, 0x0a, 0xac, 0xe4, 0x9c, 0xee, 0xd0, 0x05, 0xa0, 0x3b, 0xd2, 0x5d, 0xec, 0x59, + 0x8e, 0x29, 0x3a, 0xa3, 0xef, 0x8e, 0xba, 0x14, 0x80, 0x4e, 0x02, 0xf9, 0xd0, 0xbf, 0x3e, 0x72, + 0x78, 0x8c, 0x59, 0xd6, 0xaa, 0x7d, 0x77, 0xf4, 0x25, 0xf2, 0x2d, 0x68, 0xfd, 0x7d, 0xc3, 0xc3, + 0xcc, 0x2d, 0x30, 0xda, 0x1e, 0x05, 0xa0, 0x17, 0xe1, 0x38, 0x9b, 0xf2, 0xf4, 0x81, 0x35, 0xb4, + 0x88, 0xf3, 0x8c, 0x59, 0x7c, 0x59, 0x43, 0xac, 0xf0, 0x1e, 0x29, 0xeb, 0xd8, 0xcc, 0xc6, 0x55, + 0x68, 0x38, 0xce, 0x50, 0xf7, 0xfb, 0x8e, 0x87, 0x75, 0xc3, 0xfc, 0x90, 0x9a, 0x77, 0x59, 0xab, + 0x3b, 0xce, 0xb0, 0x47, 0x60, 0x6d, 0xf3, 0x43, 0x74, 0x16, 0xea, 0x7d, 0x77, 0xe4, 0xe3, 0x40, + 0x27, 0x7f, 0xe8, 0x1e, 0x5c, 0x4d, 0x03, 0x06, 0x5a, 0x73, 0x47, 0x7e, 0x0c, 0x61, 0x48, 0x56, + 0x5d, 0xb3, 0x71, 0x84, 0xfb, 0x78, 0x48, 0x0f, 0xb1, 0xf7, 0x47, 0x7b, 0xd8, 0x35, 0xf6, 0x30, + 0x13, 0x4d, 0x6c, 0xa4, 0x49, 0x87, 0xd8, 0xef, 0x70, 0x14, 0x2a, 0xa0, 0x36, 0xbf, 0x1f, 0xff, + 0xf4, 0xd1, 0xbb, 0x30, 0x3b, 0xb2, 0x69, 0xbf, 0xae, 0xd6, 0x28, 0xed, 0xb5, 0x09, 0xce, 0xd2, + 0xae, 0xec, 0x30, 0x12, 0x7e, 0xb4, 0xc7, 0x19, 0xa0, 0x5b, 0xd0, 0xe2, 0x8a, 0xf2, 0x1f, 0x1b, + 0x6e, 0x52, 0x5b, 0x40, 0x55, 0xb0, 0xcc, 0x30, 0x7a, 0x8f, 0x0d, 0x37, 0xae, 0xb1, 0xd6, 0x2d, + 0x98, 0x8b, 0x33, 0x3d, 0x94, 0x2d, 0xdd, 0x81, 0x86, 0xd4, 0x48, 0xd2, 0xdb, 0x54, 0x29, 0xbe, + 0xf5, 0x0d, 0x31, 0x64, 0xaa, 0x04, 0xd0, 0xb3, 0xbe, 0x41, 0x53, 0x0f, 0xa8, 0x64, 0x94, 0x4f, + 0x45, 0x63, 0x1f, 0xaa, 0x01, 0x0d, 0xe9, 0xb4, 0x9f, 0x78, 0x5a, 0x7a, 0xac, 0xcf, 0x3d, 0x2d, + 0xf9, 0x4d, 0x60, 0x9e, 0x33, 0x10, 0x12, 0xd0, 0xdf, 0x04, 0x46, 0xcf, 0x95, 0xd9, 0x29, 0x19, + 0xfd, 0x4d, 0xab, 0xc0, 0x8f, 0x78, 0xda, 0x4e, 0x4d, 0x63, 0x1f, 0xea, 0xef, 0x28, 0x00, 0x6b, + 0x86, 0x6b, 0x3c, 0xb0, 0x06, 0x56, 0x70, 0x80, 0x2e, 0x42, 0xd3, 0x30, 0x4d, 0xbd, 0x2f, 0x20, + 0x16, 0x16, 0x79, 0x54, 0x0b, 0x86, 0x69, 0xae, 0xc5, 0xc0, 0xe8, 0x79, 0x58, 0x24, 0x7e, 0x52, + 0xc6, 0x65, 0x89, 0x55, 0x4d, 0x52, 0x20, 0x21, 0xdf, 0x80, 0x55, 0xc2, 0xd7, 0x18, 0x3e, 0xb0, + 0xb0, 0x1d, 0xc8, 0x34, 0x2c, 0xe3, 0x6a, 0xd9, 0x30, 0xcd, 0x36, 0x2b, 0x8e, 0x53, 0xaa, 0x7f, + 0x3d, 0x03, 0xa7, 0xe5, 0x1e, 0x4f, 0x26, 0x60, 0xdc, 0x82, 0xb9, 0x84, 0xbc, 0xa9, 0xd4, 0x85, + 0xa8, 0x85, 0x9a, 0x84, 0x9b, 0x48, 0x31, 0x28, 0xa5, 0x52, 0x0c, 0x32, 0x93, 0x3b, 0xca, 0x9f, + 0x50, 0x72, 0x47, 0xe5, 0x63, 0x26, 0x77, 0x4c, 0x1f, 0x35, 0xb9, 0x63, 0x6e, 0xe2, 0xe4, 0x8e, + 0x67, 0xe9, 0xe6, 0x90, 0xa8, 0x91, 0xce, 0xf2, 0xcc, 0x27, 0x34, 0x42, 0xee, 0xb6, 0x48, 0xee, + 0x4b, 0x24, 0x81, 0xcc, 0x1e, 0x26, 0x09, 0xa4, 0x9a, 0x9b, 0x04, 0x72, 0x0e, 0xe6, 0x6c, 0x47, + 0xb7, 0xf1, 0x63, 0x9d, 0x74, 0x8b, 0xbf, 0x5a, 0x67, 0x7d, 0x64, 0x3b, 0x9b, 0xf8, 0x71, 0x97, + 0x40, 0xd0, 0x79, 0x98, 0x1b, 0x1a, 0xfe, 0x43, 0x6c, 0xd2, 0x6c, 0x0c, 0x7f, 0xb5, 0x41, 0xed, + 0xa9, 0xce, 0x60, 0x5d, 0x02, 0x42, 0xcf, 0x40, 0x28, 0x07, 0x47, 0x9a, 0xa7, 0x48, 0x0d, 0x01, + 0x65, 0x68, 0xb1, 0x84, 0x92, 0x85, 0x23, 0x26, 0x94, 0x34, 0x0f, 0x93, 0x50, 0x72, 0x19, 0x9a, + 0xe2, 0xb7, 0xc8, 0x28, 0x61, 0x07, 0x04, 0x34, 0x99, 0x64, 0x41, 0x94, 0x89, 0xac, 0x91, 0xbc, + 0xfc, 0x13, 0x28, 0xcc, 0x3f, 0xf9, 0x23, 0x85, 0x2f, 0x55, 0xc3, 0x01, 0xc4, 0x0f, 0xbe, 0xa5, + 0x9c, 0x05, 0xe5, 0x28, 0x39, 0x0b, 0x68, 0x3b, 0x37, 0xab, 0xe3, 0x62, 0x3e, 0xa7, 0x71, 0x79, + 0x1d, 0xea, 0xfd, 0x70, 0x15, 0xf9, 0x49, 0x64, 0xa7, 0xa9, 0xff, 0xa9, 0xc0, 0x69, 0xce, 0x2f, + 0x27, 0x85, 0x2b, 0xc3, 0xca, 0x95, 0x1c, 0x2b, 0xef, 0x7b, 0xd8, 0xc4, 0x76, 0x60, 0x19, 0x03, + 0x1a, 0x97, 0x88, 0x83, 0xe1, 0x08, 0x4c, 0x43, 0xa3, 0xf3, 0x30, 0xc7, 0xb2, 0x2c, 0xf9, 0x82, + 0x92, 0x25, 0x53, 0xd6, 0x69, 0xa2, 0x25, 0x5f, 0x33, 0x6e, 0x65, 0x79, 0x96, 0x4a, 0xee, 0x4e, + 0xc4, 0x58, 0x07, 0xa3, 0x3a, 0xb0, 0x92, 0x73, 0x44, 0x9f, 0xd9, 0x4d, 0x4a, 0xba, 0x9b, 0x0a, + 0x95, 0x94, 0xee, 0xa6, 0x6f, 0x2b, 0x70, 0x36, 0xb5, 0xb0, 0xfd, 0xec, 0x35, 0xab, 0xfe, 0xa9, + 0x12, 0xda, 0x4f, 0xd2, 0xe4, 0xd7, 0xd2, 0x26, 0xff, 0x4c, 0xd1, 0x3a, 0x3d, 0xd3, 0xe8, 0xdf, + 0xcb, 0x35, 0xfa, 0xe7, 0x0b, 0xd7, 0xfc, 0xe3, 0xf4, 0xf9, 0xaf, 0x0a, 0x9c, 0xc8, 0x15, 0x20, + 0x11, 0x0f, 0x2a, 0xc9, 0x78, 0x90, 0xc7, 0x92, 0x51, 0x50, 0xcf, 0x62, 0x49, 0x1a, 0xb7, 0xf3, + 0xa0, 0x4d, 0x1f, 0x1a, 0x4f, 0xac, 0xe1, 0x68, 0xc8, 0x83, 0x49, 0xc2, 0xee, 0x3e, 0x83, 0x1c, + 0x25, 0x9a, 0xbc, 0x0a, 0x4b, 0xcc, 0xd1, 0xd3, 0x80, 0x26, 0xa2, 0x60, 0x41, 0xe5, 0x22, 0x2b, + 0x23, 0xb1, 0x0d, 0x27, 0x50, 0xdb, 0xb0, 0x18, 0x36, 0xab, 0x30, 0x45, 0x29, 0x96, 0x72, 0x54, + 0x92, 0x53, 0x8e, 0x6c, 0x98, 0x59, 0xc7, 0x8f, 0xac, 0x3e, 0xfe, 0x44, 0xb2, 0x9d, 0xcf, 0x41, + 0xdd, 0xc5, 0xde, 0xd0, 0xf2, 0xfd, 0x70, 0x56, 0xaf, 0x69, 0x71, 0x90, 0x7a, 0x16, 0x6a, 0x6b, + 0xeb, 0x1d, 0x5e, 0x65, 0x86, 0xa8, 0xea, 0x7f, 0xcd, 0xc0, 0x42, 0xd2, 0xc6, 0x6e, 0xa6, 0x52, + 0xa0, 0x4e, 0x67, 0x6e, 0x9f, 0x65, 0xec, 0x1b, 0x3f, 0x2f, 0x56, 0x54, 0xa5, 0x74, 0x7e, 0x40, + 0xb8, 0x6a, 0x12, 0x0b, 0xad, 0x55, 0x98, 0xed, 0x3b, 0xc3, 0xa1, 0x61, 0x9b, 0x22, 0x67, 0x9d, + 0x7f, 0x12, 0x49, 0x0d, 0x6f, 0x8f, 0xed, 0x18, 0xd7, 0x34, 0xfa, 0x9b, 0x98, 0x00, 0x71, 0x86, + 0x96, 0x4d, 0x93, 0xa8, 0x68, 0x2f, 0xd5, 0x34, 0xe0, 0xa0, 0x75, 0xcb, 0x43, 0x17, 0xa0, 0x82, + 0xed, 0x47, 0xe2, 0x28, 0x49, 0xda, 0xb9, 0x14, 0x6b, 0x22, 0x8d, 0x62, 0xa0, 0x8b, 0x30, 0x33, + 0x24, 0x66, 0x25, 0x0e, 0xda, 0x17, 0x53, 0xb9, 0xdd, 0x1a, 0x47, 0x40, 0x2f, 0xc0, 0xac, 0x49, + 0xb5, 0x27, 0x16, 0x01, 0x48, 0x4a, 0xc7, 0xa2, 0x45, 0x9a, 0x40, 0x41, 0x6f, 0x85, 0xdb, 0xe6, + 0xb5, 0xf4, 0x79, 0x56, 0x42, 0xcd, 0x99, 0x3b, 0xe6, 0x9b, 0xf2, 0xda, 0x13, 0xd2, 0x9b, 0xef, + 0x49, 0x2e, 0xc5, 0x2b, 0xd0, 0x13, 0x50, 0x1d, 0x38, 0x7b, 0xcc, 0x7a, 0xea, 0xec, 0xc2, 0xc3, + 0xc0, 0xd9, 0xa3, 0xc6, 0xb3, 0x04, 0xd3, 0x7e, 0x60, 0x5a, 0x36, 0x8d, 0xa5, 0xaa, 0x1a, 0xfb, + 0x20, 0x83, 0x94, 0xfe, 0xd0, 0x1d, 0xbb, 0x8f, 0x57, 0x1b, 0xb4, 0xa8, 0x46, 0x21, 0x5b, 0x76, + 0x9f, 0xae, 0x29, 0x83, 0xe0, 0x60, 0x75, 0x9e, 0xc2, 0xc9, 0xcf, 0x68, 0xf7, 0x7a, 0x21, 0x67, + 0xf7, 0x3a, 0x21, 0x70, 0xc6, 0xee, 0x75, 0x33, 0x77, 0xce, 0x48, 0xd2, 0x0a, 0x12, 0x12, 0x47, + 0xae, 0xad, 0x77, 0x74, 0xd1, 0x35, 0x8b, 0xe9, 0x54, 0xf1, 0xd0, 0xec, 0x35, 0x08, 0x7f, 0x7e, + 0xa6, 0x87, 0x07, 0xdf, 0x53, 0x60, 0x79, 0x8d, 0x1e, 0x9d, 0xc6, 0x7c, 0xe3, 0x61, 0xb2, 0x8e, + 0x5e, 0x0a, 0x53, 0xc1, 0x32, 0xf2, 0x79, 0x92, 0x9a, 0x12, 0x99, 0x60, 0x6b, 0x30, 0x2f, 0xd8, + 0x72, 0xe2, 0xf2, 0x04, 0x79, 0x64, 0x0d, 0x3f, 0xfe, 0xa9, 0xbe, 0x0e, 0x2b, 0x29, 0xc9, 0xf9, + 0x01, 0x56, 0xf2, 0x4e, 0x01, 0x13, 0x3c, 0x7e, 0xa7, 0x40, 0xbd, 0x05, 0xc7, 0x7b, 0x81, 0xe1, + 0x05, 0xa9, 0x66, 0x4f, 0x40, 0x4b, 0x33, 0xc4, 0x64, 0x5a, 0x9e, 0xc4, 0xd5, 0x83, 0xa5, 0x5e, + 0xe0, 0xb8, 0x47, 0x60, 0x4a, 0xfc, 0x0e, 0x69, 0xb9, 0x33, 0x12, 0xf3, 0x8c, 0xf8, 0x54, 0x57, + 0x58, 0x3e, 0x5b, 0xba, 0xb6, 0x2f, 0xc0, 0x32, 0x4b, 0x27, 0x3b, 0x4a, 0x23, 0x4e, 0x88, 0x64, + 0xb6, 0x34, 0xdf, 0xbb, 0x70, 0x4c, 0xda, 0x52, 0xe7, 0xe9, 0x17, 0xd7, 0xe4, 0xf4, 0x8b, 0xfc, + 0xd3, 0x8b, 0x30, 0xfb, 0xe2, 0x3b, 0xa5, 0x98, 0x1f, 0xcf, 0x39, 0x83, 0x7d, 0x45, 0x4e, 0xbe, + 0x38, 0x9b, 0xcf, 0x55, 0xca, 0xbd, 0x48, 0x5b, 0x67, 0x39, 0xc3, 0x3a, 0x77, 0x52, 0x07, 0xbc, + 0x95, 0x74, 0xf2, 0x4c, 0x42, 0xc2, 0x4f, 0xe5, 0x68, 0xf7, 0x1e, 0x4b, 0xd0, 0x08, 0xab, 0x0e, + 0x4f, 0x75, 0x5f, 0x4a, 0x9c, 0xea, 0x9e, 0x2c, 0x90, 0x34, 0x3c, 0xcf, 0xfd, 0x4e, 0x05, 0x6a, + 0x61, 0x59, 0x4a, 0xc3, 0x69, 0x55, 0x95, 0x32, 0x54, 0x15, 0x9f, 0x5f, 0xcb, 0x47, 0x9c, 0x5f, + 0x2b, 0x13, 0xcc, 0xaf, 0x27, 0xa1, 0x46, 0x7f, 0xd0, 0x9c, 0x7a, 0x36, 0x5f, 0x56, 0x29, 0x40, + 0xc3, 0xbb, 0x91, 0x89, 0xcd, 0x4c, 0x68, 0x62, 0x89, 0x64, 0x90, 0xd9, 0x64, 0x32, 0xc8, 0xcd, + 0x70, 0xee, 0xab, 0xa6, 0x0f, 0x5f, 0x42, 0x8e, 0x99, 0xb3, 0x5e, 0x62, 0xc7, 0xb5, 0x96, 0xde, + 0x71, 0x8d, 0xe8, 0x3f, 0xb7, 0x87, 0xc3, 0x5b, 0x2c, 0xc3, 0x23, 0x6e, 0x67, 0xdc, 0x47, 0xbe, + 0x22, 0x1d, 0xae, 0x29, 0x19, 0x73, 0x55, 0xe8, 0x17, 0xe2, 0x07, 0x6a, 0x3b, 0xb0, 0x9c, 0xcc, + 0x0c, 0x3b, 0x94, 0x8f, 0xcb, 0x49, 0x51, 0xfd, 0xcd, 0x78, 0xc4, 0x97, 0x93, 0x8f, 0x79, 0x33, + 0x95, 0x3a, 0x30, 0xb1, 0x85, 0x5e, 0x93, 0xb3, 0x8c, 0x0e, 0x6d, 0x57, 0xa9, 0x24, 0x23, 0x1a, + 0x91, 0x18, 0x1e, 0x2f, 0x66, 0xc1, 0x79, 0x8d, 0x43, 0xda, 0x74, 0x65, 0xb0, 0x6b, 0xd9, 0x96, + 0xbf, 0xcf, 0xca, 0x67, 0xd8, 0xca, 0x40, 0x80, 0xda, 0x74, 0xd7, 0x12, 0x3f, 0xb1, 0x02, 0xbd, + 0xef, 0x98, 0x98, 0x5a, 0xed, 0xb4, 0x56, 0x25, 0x80, 0x35, 0xc7, 0xc4, 0xd1, 0x78, 0xaa, 0x1e, + 0x76, 0x3c, 0xd5, 0x12, 0xe3, 0x69, 0x19, 0x66, 0x3c, 0x6c, 0xf8, 0x8e, 0xcd, 0x36, 0x33, 0x34, + 0xfe, 0x45, 0x3a, 0x62, 0x88, 0x7d, 0x9f, 0xd4, 0xc1, 0x03, 0x30, 0xfe, 0x19, 0x0b, 0x16, 0xe7, + 0x0a, 0x82, 0xc5, 0x82, 0x6c, 0xcf, 0x44, 0xb0, 0xd8, 0x28, 0x08, 0x16, 0x27, 0x4a, 0xf6, 0x8c, + 0xc2, 0xe2, 0xf9, 0x71, 0x61, 0x71, 0x3c, 0xae, 0x5c, 0x90, 0xe3, 0xca, 0xd7, 0xe3, 0x2b, 0xd4, + 0x66, 0xfa, 0xec, 0xbb, 0xf8, 0x0e, 0xc9, 0x67, 0x38, 0x80, 0xff, 0x41, 0x81, 0x95, 0xd4, 0x80, + 0xe3, 0x43, 0xf8, 0xa5, 0x44, 0x1a, 0x69, 0x61, 0xfe, 0xa6, 0xc8, 0x22, 0x6d, 0x4b, 0x59, 0xa4, + 0x97, 0x8b, 0x48, 0x72, 0x92, 0x48, 0x8f, 0x9e, 0xd8, 0xf9, 0x2d, 0x05, 0x50, 0xc6, 0x1a, 0xfc, + 0xa6, 0x88, 0xd6, 0x0f, 0xb1, 0x5b, 0xc6, 0x03, 0xf6, 0xb7, 0xa2, 0x80, 0xbd, 0x74, 0x98, 0x7d, + 0x87, 0x30, 0xe3, 0xe4, 0xc7, 0x25, 0x38, 0xbb, 0xe3, 0x9a, 0x89, 0x30, 0x92, 0x63, 0x4d, 0xee, + 0xd9, 0x6e, 0xca, 0xe9, 0x32, 0x47, 0x6c, 0x42, 0xf9, 0x28, 0x4d, 0x40, 0x5f, 0xcb, 0x4a, 0x68, + 0x7a, 0x5d, 0x3a, 0x7a, 0x2c, 0x6e, 0xe0, 0x98, 0xe9, 0xeb, 0xe3, 0x9a, 0xb0, 0x0a, 0xe7, 0xf2, + 0x05, 0xe0, 0x21, 0xe7, 0x2f, 0xc3, 0xc2, 0xc6, 0x13, 0xdc, 0xef, 0x1d, 0xd8, 0xfd, 0x43, 0x68, + 0xbd, 0x09, 0xe5, 0xfe, 0xd0, 0xe4, 0xa7, 0x23, 0xe4, 0x67, 0x3c, 0x8a, 0x2e, 0xcb, 0x51, 0xb4, + 0x0e, 0xcd, 0xa8, 0x06, 0x3e, 0x80, 0x96, 0xc9, 0x00, 0x32, 0x09, 0x32, 0x61, 0x3e, 0xa7, 0xf1, + 0x2f, 0x0e, 0xc7, 0x1e, 0xbb, 0xa0, 0xc2, 0xe0, 0xd8, 0xf3, 0x64, 0xaf, 0x5d, 0x96, 0xbd, 0xb6, + 0xfa, 0x5d, 0x05, 0xea, 0xa4, 0x86, 0x8f, 0x25, 0x3f, 0x5f, 0xca, 0x96, 0xa3, 0xa5, 0x6c, 0xb8, + 0x22, 0xae, 0xc4, 0x57, 0xc4, 0x91, 0xe4, 0xd3, 0x14, 0x9c, 0x96, 0x7c, 0x26, 0x84, 0x63, 0xcf, + 0x53, 0xcf, 0xc1, 0x1c, 0x93, 0x8d, 0xb7, 0xbc, 0x09, 0xe5, 0x91, 0x37, 0x10, 0xfd, 0x37, 0xf2, + 0x06, 0xea, 0x37, 0x15, 0x68, 0xb4, 0x83, 0xc0, 0xe8, 0xef, 0x1f, 0xa2, 0x01, 0xa1, 0x70, 0xa5, + 0xb8, 0x70, 0xe9, 0x46, 0x44, 0xe2, 0x56, 0x72, 0xc4, 0x9d, 0x96, 0xc4, 0x55, 0x61, 0x5e, 0xc8, + 0x92, 0x2b, 0xf0, 0x26, 0xa0, 0xae, 0xe3, 0x05, 0x6f, 0x3b, 0xde, 0x63, 0xc3, 0x33, 0x0f, 0xb7, + 0x6a, 0x45, 0x50, 0xe1, 0x4f, 0x06, 0x94, 0x2f, 0x4c, 0x6b, 0xf4, 0xb7, 0xfa, 0x1c, 0x1c, 0x93, + 0xf8, 0xe5, 0x56, 0x7c, 0x0b, 0xea, 0x74, 0x16, 0xe6, 0x0b, 0x9a, 0xe7, 0xe3, 0xe7, 0xf5, 0x63, + 0x66, 0x6b, 0x75, 0x1d, 0x16, 0x49, 0x3c, 0x46, 0xe1, 0xa1, 0x7f, 0xb9, 0x9a, 0x88, 0xf9, 0x57, + 0x52, 0x2c, 0x12, 0xf1, 0xfe, 0x4f, 0x15, 0x98, 0xa6, 0xf0, 0x54, 0x8c, 0x74, 0x92, 0xcc, 0x73, + 0xae, 0xa3, 0x07, 0xc6, 0x5e, 0xf8, 0x1c, 0x03, 0x01, 0x6c, 0x1b, 0x7b, 0xf4, 0x44, 0x87, 0x16, + 0x9a, 0xd6, 0x1e, 0xf6, 0x03, 0x71, 0x42, 0x58, 0x27, 0xb0, 0x75, 0x06, 0x22, 0x8a, 0xa1, 0x07, + 0xa9, 0x15, 0x7a, 0x5e, 0x4a, 0x7f, 0xa3, 0x0b, 0xec, 0x6e, 0x63, 0xf1, 0xb1, 0x18, 0xbd, 0xf3, + 0xd8, 0x82, 0x6a, 0xe2, 0x3c, 0x2b, 0xfc, 0x46, 0x17, 0xa1, 0x42, 0xf7, 0x9f, 0x67, 0x8b, 0xb4, + 0x44, 0x51, 0x88, 0x55, 0xb8, 0x96, 0x6d, 0x63, 0x93, 0x06, 0x40, 0x55, 0x8d, 0x7f, 0xa9, 0x6f, + 0x01, 0x8a, 0x2b, 0x8f, 0x77, 0xd0, 0x45, 0x98, 0xa1, 0xba, 0x15, 0x41, 0xec, 0x62, 0x8a, 0xb5, + 0xc6, 0x11, 0xd4, 0xaf, 0x02, 0x62, 0x75, 0x49, 0x81, 0xeb, 0x61, 0x3a, 0xb0, 0x20, 0x84, 0xfd, + 0x33, 0x05, 0x8e, 0x49, 0xdc, 0xb9, 0x7c, 0xcf, 0xc9, 0xec, 0x33, 0xc4, 0xe3, 0xac, 0xdf, 0x90, + 0x66, 0xe6, 0x8b, 0x69, 0x31, 0x7e, 0x4e, 0xb3, 0xf2, 0x3f, 0x2a, 0x00, 0xed, 0x51, 0xb0, 0xcf, + 0x37, 0x5a, 0xe3, 0x9d, 0xa8, 0x24, 0x3a, 0xb1, 0x05, 0x55, 0xd7, 0xf0, 0xfd, 0xc7, 0x8e, 0x27, + 0x16, 0x91, 0xe1, 0x37, 0xdd, 0x1e, 0x1d, 0xf1, 0x37, 0x1a, 0x6a, 0x1a, 0xfd, 0x8d, 0x9e, 0x81, + 0x79, 0xf6, 0x4e, 0x88, 0x6e, 0x98, 0xa6, 0x27, 0x72, 0x00, 0x6b, 0x5a, 0x83, 0x41, 0xdb, 0x0c, + 0x48, 0xd0, 0x2c, 0x7a, 0x1a, 0x11, 0x1c, 0xe8, 0x81, 0xf3, 0x10, 0xdb, 0x7c, 0x61, 0xd8, 0x10, + 0xd0, 0x6d, 0x02, 0x64, 0xc7, 0x8d, 0x7b, 0x96, 0x1f, 0x78, 0x02, 0x4d, 0x1c, 0x9a, 0x72, 0x28, + 0x45, 0x53, 0xff, 0x58, 0x81, 0x66, 0x77, 0x34, 0x18, 0x30, 0xe5, 0x1e, 0xa5, 0x93, 0x2f, 0xf1, + 0xa6, 0x94, 0xd2, 0x26, 0x1f, 0x29, 0x8a, 0x37, 0xf1, 0x13, 0xd9, 0xcb, 0xba, 0x06, 0x8b, 0x31, + 0x89, 0xb9, 0xe1, 0x48, 0x91, 0xbd, 0x22, 0x47, 0xf6, 0x6a, 0x1b, 0x10, 0xdb, 0xbe, 0x39, 0x72, + 0x2b, 0xd5, 0xe3, 0x70, 0x4c, 0x62, 0xc1, 0xa7, 0xe2, 0x4b, 0xd0, 0xe0, 0xf9, 0x68, 0xdc, 0x20, + 0x4e, 0x40, 0x95, 0xb8, 0xd4, 0xbe, 0x65, 0x8a, 0x0c, 0x89, 0x59, 0xd7, 0x31, 0xd7, 0x2c, 0xd3, + 0x53, 0xbf, 0x04, 0x0d, 0x7e, 0xe1, 0x9d, 0xe3, 0xde, 0x86, 0x79, 0x7e, 0x3e, 0xa8, 0x4b, 0x37, + 0x44, 0x4f, 0x64, 0x24, 0x3d, 0x0a, 0x55, 0xd8, 0xf1, 0x4f, 0xf5, 0x6b, 0xd0, 0x62, 0xd1, 0x82, + 0xc4, 0x58, 0x34, 0xf0, 0x36, 0x88, 0xeb, 0x13, 0x05, 0xfc, 0x65, 0xca, 0x86, 0x17, 0xff, 0x54, + 0x4f, 0xc3, 0xc9, 0x4c, 0xfe, 0xbc, 0xf5, 0x2e, 0x34, 0xa3, 0x02, 0x76, 0x8d, 0x31, 0x4c, 0xfb, + 0x50, 0x62, 0x69, 0x1f, 0xcb, 0x61, 0xec, 0x5d, 0x12, 0x33, 0x17, 0x0d, 0xaf, 0xa3, 0x15, 0x57, + 0x39, 0x6f, 0xc5, 0x55, 0x91, 0x56, 0x5c, 0xea, 0xfd, 0x50, 0x87, 0x7c, 0xdd, 0xfb, 0x3a, 0x5d, + 0x99, 0xb3, 0xba, 0x85, 0x53, 0x3b, 0x95, 0xdd, 0x3e, 0x86, 0xa4, 0xc5, 0xf0, 0xd5, 0x8b, 0xd0, + 0x90, 0xdd, 0x5b, 0xcc, 0x63, 0x29, 0x29, 0x8f, 0x35, 0x9f, 0x70, 0x56, 0x2f, 0x26, 0x96, 0x14, + 0x59, 0x7a, 0x4d, 0x2c, 0x28, 0x6e, 0x48, 0x6e, 0xeb, 0x69, 0xe9, 0x88, 0xfe, 0xe7, 0xe4, 0xb1, + 0x96, 0xb8, 0x1f, 0x7f, 0xdb, 0x27, 0xf4, 0xbc, 0xa1, 0xea, 0x53, 0x50, 0xdf, 0xc9, 0x7b, 0x76, + 0xa4, 0x22, 0xf2, 0xca, 0x5e, 0x85, 0xa5, 0xb7, 0xad, 0x01, 0xf6, 0x0f, 0xfc, 0x00, 0x0f, 0x3b, + 0xd4, 0xbd, 0xec, 0x5a, 0xd8, 0x43, 0x67, 0x00, 0xe8, 0x2a, 0xd2, 0x75, 0xac, 0xf0, 0xa9, 0x85, + 0x18, 0x44, 0xfd, 0x91, 0x02, 0x0b, 0x11, 0xe1, 0x24, 0x39, 0x81, 0xaf, 0xc0, 0xf4, 0xae, 0x2f, + 0x76, 0xdb, 0x12, 0x67, 0x10, 0x59, 0x22, 0x68, 0x95, 0x5d, 0xbf, 0x63, 0xa2, 0x57, 0x01, 0x46, + 0x3e, 0x36, 0xf9, 0xb1, 0xdf, 0x98, 0x2c, 0xcd, 0x1a, 0x41, 0x65, 0x07, 0x87, 0x37, 0xa0, 0x6e, + 0xd9, 0x8e, 0x89, 0xe9, 0x91, 0xb0, 0x39, 0x2e, 0x43, 0x13, 0x18, 0xee, 0x8e, 0x8f, 0x4d, 0xf5, + 0xf7, 0xa3, 0x83, 0xdd, 0xcf, 0x73, 0x0b, 0x55, 0x9d, 0xcf, 0xaf, 0xa2, 0xd7, 0xb9, 0xc9, 0xbe, + 0x03, 0x8b, 0xcc, 0x4d, 0xee, 0x86, 0x55, 0x66, 0xde, 0x5c, 0x49, 0xb4, 0x4d, 0x6b, 0x5a, 0x3c, + 0xb2, 0x12, 0x44, 0xea, 0x2d, 0x38, 0x9e, 0x48, 0x25, 0x9f, 0x7c, 0x3b, 0xfd, 0xdd, 0xc4, 0xbe, + 0x58, 0x34, 0xa4, 0xae, 0xc9, 0x37, 0x98, 0x8a, 0x92, 0xfe, 0xf9, 0x65, 0x9a, 0x1d, 0x38, 0x21, + 0x6d, 0xda, 0x49, 0xb2, 0xdc, 0x48, 0x04, 0x8b, 0xe7, 0xf2, 0xf9, 0x25, 0xa2, 0xc6, 0xff, 0x56, + 0x60, 0x29, 0x0b, 0xe1, 0x88, 0x1b, 0xc6, 0x1f, 0xe4, 0xdc, 0x7e, 0x7c, 0x69, 0x9c, 0x40, 0x9f, + 0xca, 0x06, 0xfb, 0x26, 0xbb, 0x3b, 0x35, 0xbe, 0x4f, 0xca, 0x93, 0xf5, 0xc9, 0x4f, 0x4b, 0xb1, + 0x43, 0x91, 0x82, 0xfb, 0x4d, 0x1f, 0x63, 0x93, 0x72, 0x2d, 0x71, 0xbd, 0xe9, 0xf9, 0x4c, 0xc2, + 0x31, 0xb7, 0x9b, 0xb4, 0xac, 0xcd, 0x80, 0x6b, 0xe3, 0x38, 0x7d, 0x6e, 0xf7, 0xaf, 0x7f, 0xab, + 0x04, 0xf3, 0x72, 0x87, 0xa0, 0xb7, 0x32, 0xee, 0x36, 0x9d, 0x1d, 0xd3, 0x40, 0xe9, 0x6a, 0x13, + 0xbf, 0x4b, 0x54, 0x9a, 0xfc, 0x2e, 0x51, 0x79, 0xb2, 0xbb, 0x44, 0x77, 0x60, 0xfe, 0xb1, 0x67, + 0x05, 0xc6, 0x83, 0x01, 0xd6, 0x07, 0xc6, 0x01, 0xf6, 0xb8, 0x17, 0x2e, 0x74, 0x43, 0x0d, 0x41, + 0x72, 0x8f, 0x50, 0xd0, 0x65, 0xd2, 0x63, 0xc3, 0xe5, 0xab, 0x2d, 0x29, 0x80, 0xeb, 0x3d, 0x36, + 0x5c, 0x46, 0x43, 0x51, 0xd4, 0x6f, 0x96, 0xe0, 0x78, 0xe6, 0x0d, 0x98, 0x8f, 0xaf, 0xa2, 0xcb, + 0x71, 0x15, 0x1d, 0xe6, 0x5a, 0x51, 0xf9, 0x50, 0xd7, 0x8a, 0x3a, 0x39, 0x0a, 0xcb, 0x3a, 0x75, + 0x2f, 0xd6, 0x9b, 0xfa, 0x97, 0x0a, 0x54, 0x85, 0x50, 0x63, 0x2f, 0xf9, 0xac, 0x8c, 0x08, 0x9a, + 0x4e, 0x33, 0xb6, 0x6d, 0xc3, 0x76, 0x74, 0x1f, 0x93, 0x08, 0x6a, 0xec, 0x95, 0x8a, 0x25, 0x4a, + 0xb7, 0xe6, 0x78, 0x78, 0xd3, 0xb0, 0x9d, 0x1e, 0x23, 0x42, 0x6d, 0x68, 0x32, 0x7e, 0x94, 0x15, + 0x61, 0x3a, 0x76, 0x56, 0x9b, 0xa7, 0x04, 0x84, 0x09, 0x61, 0xe6, 0xab, 0xdf, 0x57, 0x60, 0x21, + 0xa1, 0xd9, 0x5f, 0xbc, 0x46, 0xfc, 0x5e, 0x19, 0xea, 0xb1, 0x5e, 0x1e, 0xd3, 0x80, 0x35, 0x58, + 0x14, 0x99, 0x33, 0x3e, 0x0e, 0x26, 0xbb, 0xd2, 0xb2, 0xc0, 0x29, 0x7a, 0x38, 0x60, 0x41, 0xcf, + 0x6d, 0x58, 0x30, 0x1e, 0x19, 0xd6, 0x80, 0x5a, 0xd0, 0x44, 0xf1, 0xc4, 0x7c, 0x88, 0x1f, 0x86, + 0x4d, 0xac, 0xdd, 0x13, 0x5d, 0x6c, 0x01, 0x8a, 0x1b, 0xdd, 0x2f, 0xf2, 0xfd, 0x58, 0x7a, 0x56, + 0xe1, 0xfd, 0x22, 0xdf, 0x0f, 0xeb, 0xa3, 0xe9, 0xea, 0xf4, 0x62, 0x95, 0xcf, 0x5f, 0xe3, 0xc8, + 0xaf, 0x8f, 0xe0, 0xbe, 0x4d, 0x51, 0x89, 0xc2, 0x86, 0xc6, 0x87, 0x8e, 0xa7, 0xc7, 0xe9, 0x67, + 0xc7, 0x28, 0x8c, 0x52, 0x74, 0x43, 0x26, 0xea, 0x9f, 0x2b, 0x50, 0x0b, 0xfd, 0xc8, 0x98, 0x1e, + 0xea, 0xc0, 0x12, 0xcd, 0xed, 0x4f, 0x6a, 0x78, 0x4c, 0x27, 0x21, 0x42, 0xd4, 0x96, 0xb5, 0xdc, + 0x86, 0x26, 0x65, 0x15, 0x57, 0xf5, 0xb8, 0x8e, 0xf2, 0x85, 0x98, 0x2c, 0xfa, 0xfb, 0x1f, 0x05, + 0x50, 0xda, 0x95, 0xfc, 0xc2, 0x18, 0x59, 0xbc, 0xd3, 0x2a, 0x13, 0x77, 0xba, 0xfa, 0x26, 0x9c, + 0xd0, 0xb0, 0xe3, 0x62, 0x3b, 0xf4, 0xd8, 0xf7, 0x9c, 0xbd, 0x43, 0x84, 0xa5, 0xa7, 0xa0, 0x95, + 0x45, 0xcf, 0x17, 0xbb, 0x23, 0x68, 0xad, 0xed, 0xe3, 0xfe, 0x43, 0xba, 0xc4, 0x39, 0x4a, 0xd2, + 0x4a, 0x0b, 0xaa, 0x03, 0xa7, 0xcf, 0x5e, 0x24, 0xe5, 0xfb, 0x41, 0xe2, 0xbb, 0x60, 0x2b, 0xfe, + 0x34, 0x9c, 0xcc, 0xac, 0x96, 0x4b, 0x85, 0xa0, 0x79, 0x17, 0x07, 0x1b, 0x8f, 0xb0, 0x1d, 0x46, + 0xbd, 0xea, 0x0f, 0x4a, 0xb1, 0xf8, 0x9a, 0x16, 0x1d, 0x22, 0xd9, 0x07, 0x75, 0x61, 0x29, 0x42, + 0xc1, 0x84, 0x9a, 0xbd, 0x0f, 0xc8, 0x5e, 0xd6, 0xcc, 0x3e, 0x08, 0xa4, 0x95, 0xd0, 0x67, 0x01, + 0xa3, 0x97, 0x4f, 0x42, 0x58, 0xe2, 0x78, 0xb8, 0x9c, 0x3c, 0x1e, 0x7e, 0x17, 0x50, 0x3c, 0x82, + 0xe6, 0x4b, 0xea, 0xca, 0x04, 0x8f, 0xbd, 0x34, 0xdd, 0xe4, 0xb3, 0x44, 0x39, 0x4f, 0xb6, 0x4c, + 0x1f, 0xe9, 0xc9, 0x16, 0xf5, 0x0c, 0x9c, 0x22, 0x71, 0xf1, 0x7d, 0x1c, 0x78, 0x56, 0x7f, 0x1d, + 0xfb, 0x7d, 0xcf, 0x72, 0x03, 0x27, 0xcc, 0x3f, 0x51, 0x75, 0x38, 0x9d, 0x53, 0xce, 0xd5, 0xfd, + 0x26, 0xd4, 0xcd, 0x08, 0x9c, 0xb5, 0x3d, 0x91, 0xa4, 0xd5, 0xe2, 0x04, 0xea, 0xfb, 0xd0, 0x4c, + 0x22, 0x64, 0xa6, 0xab, 0x22, 0xa8, 0xec, 0xe3, 0x81, 0x2b, 0xee, 0xdf, 0x90, 0xdf, 0x44, 0xeb, + 0x6c, 0xc9, 0xf1, 0x10, 0x1f, 0x88, 0xed, 0xeb, 0x1a, 0x85, 0x7c, 0x11, 0x1f, 0x84, 0x6d, 0x93, + 0xde, 0x10, 0xf0, 0xac, 0x7e, 0xb2, 0x6d, 0x19, 0xe5, 0x51, 0xdb, 0x48, 0xb7, 0x0d, 0x19, 0x98, + 0xb7, 0xed, 0x74, 0xee, 0xfb, 0x04, 0x94, 0x16, 0x5c, 0xc7, 0xe4, 0xbf, 0xd5, 0x3f, 0x51, 0x60, + 0x31, 0x85, 0x31, 0xe1, 0x91, 0xc4, 0x0b, 0x30, 0x2b, 0xea, 0x2d, 0xa5, 0x73, 0x3a, 0x19, 0x2f, + 0x4d, 0xa0, 0xa0, 0x0e, 0x2c, 0x46, 0x16, 0x2d, 0xe8, 0xca, 0xe9, 0xbe, 0x88, 0xaf, 0x37, 0xa8, + 0xb8, 0xcd, 0x7e, 0x02, 0xa2, 0xf6, 0xa1, 0x99, 0xc4, 0x9a, 0x64, 0x4c, 0x1d, 0x4a, 0x5e, 0xf5, + 0xef, 0x14, 0x98, 0x61, 0xb0, 0xcc, 0xce, 0x96, 0xbc, 0x78, 0x29, 0xe9, 0xc5, 0x5f, 0x83, 0x3a, + 0xe3, 0xa3, 0x87, 0xb7, 0xaf, 0xe6, 0xe5, 0x5d, 0x59, 0xc6, 0x9a, 0x8e, 0x56, 0x18, 0x86, 0xbf, + 0x49, 0x33, 0x98, 0xbd, 0xd0, 0x05, 0x85, 0xc8, 0xdc, 0xad, 0x53, 0x18, 0xf5, 0xb5, 0x24, 0xd2, + 0xe5, 0x4b, 0x8f, 0x31, 0x33, 0x38, 0xdf, 0x3e, 0x5a, 0xa6, 0x2f, 0xe2, 0xa5, 0xf6, 0x25, 0xd5, + 0x6d, 0xfa, 0x64, 0x5d, 0x7a, 0x3f, 0x11, 0x7d, 0x41, 0x3e, 0xdb, 0x7e, 0x26, 0x75, 0x30, 0x2c, + 0x91, 0x8d, 0x3c, 0xf6, 0x72, 0x33, 0xa3, 0x51, 0x3f, 0x80, 0x13, 0xb9, 0x38, 0xe8, 0x8d, 0xf0, + 0x7d, 0x50, 0xd3, 0xb3, 0x1e, 0xf1, 0xfd, 0x80, 0x79, 0xf9, 0x2d, 0x82, 0x35, 0x8a, 0xb0, 0x4e, + 0xcb, 0xc5, 0xcb, 0xa1, 0xec, 0xeb, 0xd2, 0xb3, 0x50, 0x15, 0xaf, 0x6a, 0xa3, 0x59, 0x28, 0x6f, + 0xaf, 0x75, 0x9b, 0x53, 0xe4, 0xc7, 0xce, 0x7a, 0xb7, 0xa9, 0xa0, 0x2a, 0x54, 0x7a, 0x6b, 0xdb, + 0xdd, 0x66, 0xe9, 0xd2, 0x10, 0x9a, 0xc9, 0x87, 0xa5, 0xd1, 0x0a, 0x1c, 0xeb, 0x6a, 0x5b, 0xdd, + 0xf6, 0xdd, 0xf6, 0x76, 0x67, 0x6b, 0x53, 0xef, 0x6a, 0x9d, 0xf7, 0xda, 0xdb, 0x1b, 0xcd, 0x29, + 0x74, 0x1e, 0x4e, 0xc7, 0x0b, 0xde, 0xd9, 0xea, 0x6d, 0xeb, 0xdb, 0x5b, 0xfa, 0xda, 0xd6, 0xe6, + 0x76, 0xbb, 0xb3, 0xb9, 0xa1, 0x35, 0x15, 0x74, 0x1a, 0x4e, 0xc4, 0x51, 0xee, 0x74, 0xd6, 0x3b, + 0xda, 0xc6, 0x1a, 0xf9, 0xdd, 0xbe, 0xd7, 0x2c, 0x5d, 0x7a, 0x03, 0x1a, 0xd2, 0x7d, 0x13, 0x22, + 0x52, 0x77, 0x6b, 0xbd, 0x39, 0x85, 0x1a, 0x50, 0x8b, 0xf3, 0xa9, 0x42, 0x65, 0x73, 0x6b, 0x7d, + 0xa3, 0x59, 0x42, 0x00, 0x33, 0xdb, 0x6d, 0xed, 0xee, 0xc6, 0x76, 0xb3, 0x7c, 0xe9, 0x56, 0xf2, + 0x2d, 0x0c, 0x8c, 0x16, 0xa1, 0xd1, 0x6b, 0x6f, 0xae, 0xdf, 0xd9, 0xfa, 0x8a, 0xae, 0x6d, 0xb4, + 0xd7, 0xdf, 0x6f, 0x4e, 0xa1, 0x25, 0x68, 0x0a, 0xd0, 0xe6, 0xd6, 0x36, 0x83, 0x2a, 0x97, 0x1e, + 0x26, 0x96, 0x9a, 0x18, 0x1d, 0x87, 0xc5, 0xb0, 0x4a, 0x7d, 0x4d, 0xdb, 0x68, 0x6f, 0x6f, 0x10, + 0x49, 0x24, 0xb0, 0xb6, 0xb3, 0xb9, 0xd9, 0xd9, 0xbc, 0xdb, 0x54, 0x08, 0xd7, 0x08, 0xbc, 0xf1, + 0x95, 0x0e, 0x41, 0x2e, 0xc9, 0xc8, 0x3b, 0x9b, 0x5f, 0xdc, 0xdc, 0xfa, 0xf2, 0x66, 0xb3, 0x7c, + 0xe9, 0x57, 0xe3, 0xa9, 0x10, 0xd1, 0xbc, 0x72, 0x12, 0x56, 0x52, 0x35, 0xea, 0x1b, 0xef, 0x6d, + 0x6c, 0x6e, 0x37, 0xa7, 0xe4, 0xc2, 0xde, 0x76, 0x5b, 0x8b, 0x0a, 0x95, 0x64, 0xe1, 0x56, 0xb7, + 0x1b, 0x16, 0x96, 0xe4, 0xc2, 0xf5, 0x8d, 0x7b, 0x1b, 0x11, 0x65, 0xf9, 0xd2, 0xd3, 0x00, 0xd1, + 0xf8, 0x41, 0x75, 0x98, 0x5d, 0xdb, 0xda, 0xd9, 0xdc, 0xde, 0xd0, 0x9a, 0x53, 0xa8, 0x06, 0xd3, + 0x77, 0xdb, 0x3b, 0x77, 0x37, 0x9a, 0xca, 0xa5, 0x8b, 0x30, 0x17, 0xb7, 0x26, 0x82, 0xd7, 0x7b, + 0xbf, 0xb7, 0xbd, 0x71, 0x9f, 0x68, 0x64, 0x0e, 0xaa, 0x6b, 0x77, 0xb5, 0xad, 0x9d, 0xee, 0xdb, + 0xbd, 0xa6, 0x72, 0xfd, 0xff, 0x96, 0xc2, 0x77, 0x70, 0x7b, 0xd8, 0xa3, 0x59, 0xfe, 0xeb, 0x30, + 0x2b, 0xde, 0xa1, 0x97, 0x36, 0x5b, 0xe4, 0x77, 0xf3, 0x5b, 0x27, 0x33, 0xcb, 0x78, 0x5c, 0x30, + 0x85, 0xde, 0xa3, 0x5b, 0xe5, 0xb1, 0x97, 0xa8, 0xce, 0x25, 0xb6, 0xa7, 0x53, 0x0f, 0x5e, 0xb5, + 0xce, 0x17, 0x60, 0x84, 0x7c, 0xdf, 0x87, 0x79, 0xf9, 0xc9, 0x47, 0x74, 0x5e, 0xde, 0xc6, 0xce, + 0x78, 0x4d, 0xb2, 0xa5, 0x16, 0xa1, 0x84, 0xac, 0x75, 0x68, 0x26, 0x9f, 0x7c, 0x44, 0x52, 0x76, + 0x48, 0xce, 0x8b, 0x92, 0xad, 0xa7, 0x8b, 0x91, 0xe2, 0x15, 0xa4, 0x5e, 0x32, 0x7c, 0xaa, 0xf8, + 0x6d, 0xb8, 0x8c, 0x0a, 0xf2, 0x1e, 0x90, 0x63, 0xca, 0x91, 0x67, 0x4d, 0x94, 0x78, 0x3c, 0x30, + 0xe3, 0x9d, 0x31, 0x59, 0x39, 0xd9, 0x6f, 0x4c, 0xa9, 0x53, 0xe8, 0x97, 0x60, 0x21, 0x91, 0xc2, + 0x8d, 0x24, 0xc2, 0xec, 0xcc, 0xf4, 0xd6, 0x53, 0x85, 0x38, 0x72, 0xaf, 0xc6, 0xd3, 0xb4, 0x93, + 0xbd, 0x9a, 0x91, 0xfe, 0x9d, 0xec, 0xd5, 0xcc, 0x2c, 0x6f, 0x6a, 0x88, 0x52, 0x4a, 0xb6, 0x6c, + 0x88, 0x59, 0x29, 0xe0, 0xad, 0xf3, 0x05, 0x18, 0x71, 0x85, 0x24, 0x92, 0xb2, 0x65, 0x85, 0x64, + 0xa7, 0x7b, 0xb7, 0x9e, 0x2a, 0xc4, 0x49, 0xf6, 0x64, 0x94, 0x0c, 0x9a, 0xee, 0xc9, 0x54, 0x42, + 0x72, 0xba, 0x27, 0xd3, 0xb9, 0xa4, 0xbc, 0x27, 0x13, 0xe9, 0x9b, 0x6a, 0x61, 0x6a, 0x59, 0x56, + 0x4f, 0x66, 0xa7, 0x9f, 0xa9, 0x53, 0xe8, 0x31, 0xac, 0xe6, 0x65, 0x10, 0xa1, 0xe7, 0x0f, 0x91, + 0xe8, 0xd4, 0x7a, 0x61, 0x32, 0xe4, 0xb0, 0x62, 0x0c, 0x28, 0xbd, 0x7c, 0x42, 0xcf, 0xc8, 0xea, + 0xce, 0x59, 0x9e, 0xb5, 0x9e, 0x1d, 0x87, 0x16, 0x56, 0x73, 0x17, 0xaa, 0x22, 0x37, 0x09, 0x49, + 0x2e, 0x30, 0x91, 0x13, 0xd5, 0x3a, 0x95, 0x5d, 0x18, 0x32, 0xfa, 0x02, 0x54, 0x08, 0x14, 0xad, + 0x24, 0xf1, 0x04, 0x83, 0xd5, 0x74, 0x41, 0x48, 0xdc, 0x86, 0x19, 0x96, 0x74, 0x83, 0xa4, 0x53, + 0x3f, 0x29, 0x29, 0xa8, 0xd5, 0xca, 0x2a, 0x0a, 0x59, 0x74, 0xd9, 0x7f, 0xf5, 0xe0, 0x39, 0x34, + 0xe8, 0x4c, 0xf2, 0xb1, 0x67, 0x39, 0x59, 0xa7, 0x75, 0x36, 0xb7, 0x3c, 0x6e, 0xb3, 0x89, 0xcd, + 0xcd, 0xf3, 0x05, 0x9b, 0xf5, 0x59, 0x36, 0x9b, 0x7d, 0x04, 0xc0, 0x3a, 0x37, 0x7d, 0x44, 0x80, + 0x9e, 0xc9, 0xb5, 0x77, 0xa9, 0x8a, 0x67, 0xc7, 0xa1, 0xc5, 0x87, 0x46, 0xf2, 0xd5, 0x26, 0xb5, + 0xe8, 0x45, 0xb5, 0xac, 0xa1, 0x91, 0xf3, 0x52, 0x9b, 0x3a, 0x85, 0xf6, 0xe1, 0x58, 0xc6, 0x53, + 0x6e, 0xe8, 0xd9, 0x7c, 0xff, 0x2b, 0xd5, 0xf2, 0xdc, 0x58, 0xbc, 0x78, 0x4d, 0x19, 0x07, 0xe7, + 0x72, 0x4d, 0xf9, 0x27, 0xf7, 0x72, 0x4d, 0x45, 0x27, 0xf0, 0xd4, 0x10, 0xb9, 0x0f, 0x39, 0x91, + 0x75, 0x9a, 0x9c, 0x61, 0x88, 0x29, 0x8f, 0xb1, 0x0f, 0xc7, 0x32, 0xb6, 0x18, 0x64, 0x61, 0xf3, + 0xb7, 0x3e, 0x64, 0x61, 0x8b, 0xf6, 0x2a, 0xa6, 0xd0, 0x07, 0x80, 0xee, 0xe2, 0x40, 0x0e, 0xe5, + 0x7c, 0x24, 0x0d, 0xd4, 0xe4, 0x6e, 0x46, 0x8e, 0x7d, 0x4a, 0xdb, 0x1a, 0xea, 0xd4, 0x35, 0x05, + 0xd9, 0xec, 0x96, 0x48, 0x6a, 0x31, 0x8e, 0x2e, 0x24, 0xbb, 0x2d, 0x6f, 0x3d, 0xdf, 0xba, 0x38, + 0x01, 0x66, 0xd8, 0x16, 0x3b, 0xf9, 0x6c, 0xa8, 0x58, 0x0f, 0x5e, 0xc8, 0x37, 0x13, 0x79, 0x8d, + 0x9d, 0xae, 0x2f, 0x77, 0xb5, 0x1d, 0xc6, 0x73, 0x31, 0x63, 0x3a, 0x97, 0x9f, 0xc6, 0x91, 0x13, + 0xcf, 0x65, 0x19, 0xd0, 0xf5, 0xdf, 0x2d, 0xc3, 0x1c, 0x4b, 0x77, 0xe1, 0xe1, 0xe7, 0x7d, 0x80, + 0x28, 0x73, 0x0c, 0x9d, 0x4e, 0xca, 0x28, 0xa5, 0xe3, 0xb5, 0xce, 0xe4, 0x15, 0xc7, 0xdd, 0x5c, + 0x2c, 0x23, 0x4b, 0x76, 0x73, 0xe9, 0x04, 0x33, 0xd9, 0xcd, 0x65, 0xa4, 0x72, 0xa9, 0x53, 0xe8, + 0x5d, 0xa8, 0x85, 0x09, 0x40, 0xb2, 0xf1, 0x24, 0x33, 0x99, 0x5a, 0xa7, 0x73, 0x4a, 0xe3, 0xd2, + 0xc5, 0xf2, 0x7a, 0x64, 0xe9, 0xd2, 0x39, 0x43, 0xb2, 0x74, 0x59, 0x09, 0x41, 0x51, 0x7b, 0xd9, + 0xc9, 0x7b, 0x46, 0x7b, 0xa5, 0x44, 0x8c, 0x8c, 0xf6, 0xca, 0x47, 0xf6, 0xea, 0xd4, 0x9d, 0xdb, + 0x3f, 0xfc, 0xc9, 0x19, 0xe5, 0x47, 0x3f, 0x39, 0x33, 0xf5, 0x2b, 0x1f, 0x9d, 0x51, 0x7e, 0xf8, + 0xd1, 0x19, 0xe5, 0x9f, 0x3e, 0x3a, 0xa3, 0xfc, 0xf8, 0xa3, 0x33, 0xca, 0xb7, 0xfe, 0xe3, 0xcc, + 0xd4, 0x07, 0xea, 0xc3, 0x1b, 0xfe, 0x15, 0xcb, 0xb9, 0xda, 0xf7, 0xac, 0xcb, 0x86, 0x6b, 0x5d, + 0x75, 0x1f, 0xee, 0x5d, 0x35, 0x5c, 0xcb, 0xbf, 0xca, 0xf9, 0x5e, 0x7d, 0xf4, 0xe2, 0x83, 0x19, + 0xfa, 0x9f, 0xa0, 0x5e, 0xfa, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x6d, 0x02, 0x73, 0xc3, + 0x6b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -18198,6 +18276,18 @@ func (m *ContainerStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Swap != nil { + { + size, err := m.Swap.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } if m.WritableLayer != nil { { size, err := m.WritableLayer.MarshalToSizedBuffer(dAtA[:i]) @@ -18524,6 +18614,58 @@ func (m *MemoryUsage) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *SwapUsage) 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 *SwapUsage) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SwapUsage) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SwapUsageBytes != nil { + { + size, err := m.SwapUsageBytes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.SwapAvailableBytes != nil { + { + size, err := m.SwapAvailableBytes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Timestamp != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.Timestamp)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *WindowsMemoryUsage) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -21880,6 +22022,10 @@ func (m *ContainerStats) Size() (n int) { l = m.WritableLayer.Size() n += 1 + l + sovApi(uint64(l)) } + if m.Swap != nil { + l = m.Swap.Size() + n += 1 + l + sovApi(uint64(l)) + } return n } @@ -21984,6 +22130,26 @@ func (m *MemoryUsage) Size() (n int) { return n } +func (m *SwapUsage) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Timestamp != 0 { + n += 1 + sovApi(uint64(m.Timestamp)) + } + if m.SwapAvailableBytes != nil { + l = m.SwapAvailableBytes.Size() + n += 1 + l + sovApi(uint64(l)) + } + if m.SwapUsageBytes != nil { + l = m.SwapUsageBytes.Size() + n += 1 + l + sovApi(uint64(l)) + } + return n +} + func (m *WindowsMemoryUsage) Size() (n int) { if m == nil { return 0 @@ -24150,6 +24316,7 @@ func (this *ContainerStats) String() string { `Cpu:` + strings.Replace(this.Cpu.String(), "CpuUsage", "CpuUsage", 1) + `,`, `Memory:` + strings.Replace(this.Memory.String(), "MemoryUsage", "MemoryUsage", 1) + `,`, `WritableLayer:` + strings.Replace(this.WritableLayer.String(), "FilesystemUsage", "FilesystemUsage", 1) + `,`, + `Swap:` + strings.Replace(this.Swap.String(), "SwapUsage", "SwapUsage", 1) + `,`, `}`, }, "") return s @@ -24207,6 +24374,18 @@ func (this *MemoryUsage) String() string { }, "") return s } +func (this *SwapUsage) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SwapUsage{`, + `Timestamp:` + fmt.Sprintf("%v", this.Timestamp) + `,`, + `SwapAvailableBytes:` + strings.Replace(this.SwapAvailableBytes.String(), "UInt64Value", "UInt64Value", 1) + `,`, + `SwapUsageBytes:` + strings.Replace(this.SwapUsageBytes.String(), "UInt64Value", "UInt64Value", 1) + `,`, + `}`, + }, "") + return s +} func (this *WindowsMemoryUsage) String() string { if this == nil { return "nil" @@ -44307,6 +44486,42 @@ func (m *ContainerStats) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Swap", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Swap == nil { + m.Swap = &SwapUsage{} + } + if err := m.Swap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -45089,6 +45304,147 @@ func (m *MemoryUsage) Unmarshal(dAtA []byte) error { } return nil } +func (m *SwapUsage) 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 ErrIntOverflowApi + } + 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: SwapUsage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SwapUsage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + m.Timestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timestamp |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SwapAvailableBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SwapAvailableBytes == nil { + m.SwapAvailableBytes = &UInt64Value{} + } + if err := m.SwapAvailableBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SwapUsageBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SwapUsageBytes == nil { + m.SwapUsageBytes = &UInt64Value{} + } + if err := m.SwapUsageBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *WindowsMemoryUsage) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto index b9cea03f7d9..042812865cb 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto +++ b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto @@ -1639,6 +1639,8 @@ message ContainerStats { MemoryUsage memory = 3; // Usage of the writable layer. FilesystemUsage writable_layer = 4; + // Swap usage gathered from the container. + SwapUsage swap = 5; } // WindowsContainerStats provides the resource usage statistics for a container specific for Windows @@ -1693,6 +1695,15 @@ message MemoryUsage { UInt64Value major_page_faults = 7; } +message SwapUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // Available swap for use. This is defined as the swap limit - swapUsageBytes. + UInt64Value swap_available_bytes = 2; + // Total memory in use. This includes all memory regardless of when it was accessed. + UInt64Value swap_usage_bytes = 3; +} + // WindowsMemoryUsage provides the memory usage information specific to Windows message WindowsMemoryUsage { // Timestamp in nanoseconds at which the information were collected. Must be > 0. From 59e3e3897e3fc435fb569f9bf22969eb84bf5ff8 Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Tue, 27 Jun 2023 14:20:20 +0300 Subject: [PATCH 5/9] Add SwapStats to summary API through CRI Signed-off-by: Itamar Holder --- pkg/kubelet/stats/cri_stats_provider.go | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pkg/kubelet/stats/cri_stats_provider.go b/pkg/kubelet/stats/cri_stats_provider.go index 06ba812972d..f49e332aece 100644 --- a/pkg/kubelet/stats/cri_stats_provider.go +++ b/pkg/kubelet/stats/cri_stats_provider.go @@ -206,6 +206,7 @@ func (p *criStatsProvider) listPodStatsPartiallyFromCRI(ctx context.Context, upd cs := p.makeContainerStats(stats, container, rootFsInfo, fsIDtoInfo, podSandbox.GetMetadata(), updateCPUNanoCoreUsage) p.addPodNetworkStats(ps, podSandboxID, caInfos, cs, containerNetworkStats[podSandboxID]) p.addPodCPUMemoryStats(ps, types.UID(podSandbox.Metadata.Uid), allInfos, cs) + p.addSwapStats(ps, types.UID(podSandbox.Metadata.Uid), allInfos, cs) p.addProcessStats(ps, types.UID(podSandbox.Metadata.Uid), allInfos, cs) // If cadvisor stats is available for the container, use it to populate @@ -548,6 +549,31 @@ func (p *criStatsProvider) addPodCPUMemoryStats( } } +func (p *criStatsProvider) addSwapStats( + ps *statsapi.PodStats, + podUID types.UID, + allInfos map[string]cadvisorapiv2.ContainerInfo, + cs *statsapi.ContainerStats, +) { + // try get cpu and memory stats from cadvisor first. + podCgroupInfo := getCadvisorPodInfoFromPodUID(podUID, allInfos) + if podCgroupInfo != nil { + ps.Swap = cadvisorInfoToSwapStats(podCgroupInfo) + return + } + + // Sum Pod cpu and memory stats from containers stats. + if cs.Swap != nil { + if ps.Swap == nil { + ps.Swap = &statsapi.SwapStats{Time: cs.Swap.Time} + } + swapAvailableBytes := getUint64Value(cs.Swap.SwapAvailableBytes) + getUint64Value(ps.Swap.SwapAvailableBytes) + swapUsageBytes := getUint64Value(cs.Swap.SwapUsageBytes) + getUint64Value(ps.Swap.SwapUsageBytes) + ps.Swap.SwapAvailableBytes = &swapAvailableBytes + ps.Swap.SwapUsageBytes = &swapUsageBytes + } +} + func (p *criStatsProvider) addProcessStats( ps *statsapi.PodStats, podUID types.UID, From 7d187f967bab5296263d974e107bef0da4c69818 Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Tue, 27 Jun 2023 14:51:21 +0300 Subject: [PATCH 6/9] Unit tests: CRI swap stats Signed-off-by: Itamar Holder --- pkg/kubelet/stats/cri_stats_provider_test.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkg/kubelet/stats/cri_stats_provider_test.go b/pkg/kubelet/stats/cri_stats_provider_test.go index 52a2842da3b..07fca7d2db2 100644 --- a/pkg/kubelet/stats/cri_stats_provider_test.go +++ b/pkg/kubelet/stats/cri_stats_provider_test.go @@ -282,6 +282,7 @@ func TestCRIListPodStats(t *testing.T) { checkCRILogsStats(assert, c1, &rootFsInfo, containerLogStats1) checkCRINetworkStats(assert, p0.Network, infos[sandbox0.PodSandboxStatus.Id].Stats[0].Network) checkCRIPodCPUAndMemoryStats(assert, p0, infos[sandbox0Cgroup].Stats[0]) + checkCRIPodSwapStats(assert, p0, infos[sandbox0Cgroup].Stats[0]) p1 := podStatsMap[statsapi.PodReference{Name: "sandbox1-name", UID: "sandbox1-uid", Namespace: "sandbox1-ns"}] assert.Equal(sandbox1.CreatedAt, p1.StartTime.UnixNano()) @@ -298,6 +299,7 @@ func TestCRIListPodStats(t *testing.T) { checkCRILogsStats(assert, c2, &rootFsInfo, containerLogStats2) checkCRINetworkStats(assert, p1.Network, infos[sandbox1.PodSandboxStatus.Id].Stats[0].Network) checkCRIPodCPUAndMemoryStats(assert, p1, infos[sandbox1Cgroup].Stats[0]) + checkCRIPodSwapStats(assert, p1, infos[sandbox1Cgroup].Stats[0]) p2 := podStatsMap[statsapi.PodReference{Name: "sandbox2-name", UID: "sandbox2-uid", Namespace: "sandbox2-ns"}] assert.Equal(sandbox2.CreatedAt, p2.StartTime.UnixNano()) @@ -316,6 +318,7 @@ func TestCRIListPodStats(t *testing.T) { checkCRILogsStats(assert, c3, &rootFsInfo, containerLogStats4) checkCRINetworkStats(assert, p2.Network, infos[sandbox2.PodSandboxStatus.Id].Stats[0].Network) checkCRIPodCPUAndMemoryStats(assert, p2, infos[sandbox2Cgroup].Stats[0]) + checkCRIPodSwapStats(assert, p2, infos[sandbox2Cgroup].Stats[0]) p3 := podStatsMap[statsapi.PodReference{Name: "sandbox3-name", UID: "sandbox3-uid", Namespace: "sandbox3-ns"}] assert.Equal(sandbox3.CreatedAt, p3.StartTime.UnixNano()) @@ -327,6 +330,7 @@ func TestCRIListPodStats(t *testing.T) { assert.NotNil(c8.CPU.Time) assert.NotNil(c8.Memory.Time) checkCRIPodCPUAndMemoryStats(assert, p3, infos[sandbox3Cgroup].Stats[0]) + checkCRIPodSwapStats(assert, p3, infos[sandbox3Cgroup].Stats[0]) } func TestListPodStatsStrictlyFromCRI(t *testing.T) { @@ -1074,6 +1078,15 @@ func checkCRIPodCPUAndMemoryStats(assert *assert.Assertions, actual statsapi.Pod assert.Equal(cs.Memory.ContainerData.Pgmajfault, *actual.Memory.MajorPageFaults) } +func checkCRIPodSwapStats(assert *assert.Assertions, actual statsapi.PodStats, cs *cadvisorapiv2.ContainerStats) { + if runtime.GOOS != "linux" { + return + } + + assert.Equal(cs.Timestamp.UnixNano(), actual.Swap.Time.UnixNano()) + assert.Equal(cs.Memory.Swap, *actual.Swap.SwapUsageBytes) +} + func checkCRIPodCPUAndMemoryStatsStrictlyFromCRI(assert *assert.Assertions, actual statsapi.PodStats, excepted statsapi.PodStats) { if runtime.GOOS != "linux" { return From 1d368420b28e86d5a3f1034424e700a1205a244c Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Sun, 9 Jul 2023 12:45:27 +0300 Subject: [PATCH 7/9] Add a node swap usage resource metric (/metrics/resource) Signed-off-by: Itamar Holder --- .../metrics/collectors/resource_metrics.go | 56 +++++++++++++++++++ pkg/kubelet/server/stats/summary.go | 2 + 2 files changed, 58 insertions(+) diff --git a/pkg/kubelet/metrics/collectors/resource_metrics.go b/pkg/kubelet/metrics/collectors/resource_metrics.go index ab6ae934073..1b80b29c96a 100644 --- a/pkg/kubelet/metrics/collectors/resource_metrics.go +++ b/pkg/kubelet/metrics/collectors/resource_metrics.go @@ -41,6 +41,13 @@ var ( metrics.ALPHA, "") + nodeSwapUsageDesc = metrics.NewDesc("node_swap_usage_bytes", + "Current swap usage of the node in bytes. Reported only on non-windows systems", + nil, + nil, + metrics.ALPHA, + "") + containerCPUUsageDesc = metrics.NewDesc("container_cpu_usage_seconds_total", "Cumulative cpu time consumed by the container in core-seconds", []string{"container", "pod", "namespace"}, @@ -55,6 +62,13 @@ var ( metrics.ALPHA, "") + containerSwapUsageDesc = metrics.NewDesc("container_swap_usage_bytes", + "Current amount of the container swap usage in bytes. Reported only on non-windows systems", + []string{"container", "pod", "namespace"}, + nil, + metrics.ALPHA, + "") + podCPUUsageDesc = metrics.NewDesc("pod_cpu_usage_seconds_total", "Cumulative cpu time consumed by the pod in core-seconds", []string{"pod", "namespace"}, @@ -69,6 +83,13 @@ var ( metrics.ALPHA, "") + podSwapUsageDesc = metrics.NewDesc("pod_swap_usage_bytes", + "Current amount of the pod swap usage in bytes. Reported only on non-windows systems", + []string{"pod", "namespace"}, + nil, + metrics.ALPHA, + "") + resourceScrapeResultDesc = metrics.NewDesc("scrape_error", "1 if there was an error while getting container metrics, 0 otherwise", nil, @@ -104,11 +125,14 @@ var _ metrics.StableCollector = &resourceMetricsCollector{} func (rc *resourceMetricsCollector) DescribeWithStability(ch chan<- *metrics.Desc) { ch <- nodeCPUUsageDesc ch <- nodeMemoryUsageDesc + ch <- nodeSwapUsageDesc ch <- containerStartTimeDesc ch <- containerCPUUsageDesc ch <- containerMemoryUsageDesc + ch <- containerSwapUsageDesc ch <- podCPUUsageDesc ch <- podMemoryUsageDesc + ch <- podSwapUsageDesc ch <- resourceScrapeResultDesc } @@ -131,15 +155,18 @@ func (rc *resourceMetricsCollector) CollectWithStability(ch chan<- metrics.Metri rc.collectNodeCPUMetrics(ch, statsSummary.Node) rc.collectNodeMemoryMetrics(ch, statsSummary.Node) + rc.collectNodeSwapMetrics(ch, statsSummary.Node) for _, pod := range statsSummary.Pods { for _, container := range pod.Containers { rc.collectContainerStartTime(ch, pod, container) rc.collectContainerCPUMetrics(ch, pod, container) rc.collectContainerMemoryMetrics(ch, pod, container) + rc.collectContainerSwapMetrics(ch, pod, container) } rc.collectPodCPUMetrics(ch, pod) rc.collectPodMemoryMetrics(ch, pod) + rc.collectPodSwapMetrics(ch, pod) } } @@ -161,6 +188,15 @@ func (rc *resourceMetricsCollector) collectNodeMemoryMetrics(ch chan<- metrics.M metrics.NewLazyConstMetric(nodeMemoryUsageDesc, metrics.GaugeValue, float64(*s.Memory.WorkingSetBytes))) } +func (rc *resourceMetricsCollector) collectNodeSwapMetrics(ch chan<- metrics.Metric, s summary.NodeStats) { + if s.Swap == nil || s.Swap.SwapUsageBytes == nil { + return + } + + ch <- metrics.NewLazyMetricWithTimestamp(s.Memory.Time.Time, + metrics.NewLazyConstMetric(nodeSwapUsageDesc, metrics.GaugeValue, float64(*s.Swap.SwapUsageBytes))) +} + func (rc *resourceMetricsCollector) collectContainerStartTime(ch chan<- metrics.Metric, pod summary.PodStats, s summary.ContainerStats) { if s.StartTime.Unix() <= 0 { return @@ -190,6 +226,16 @@ func (rc *resourceMetricsCollector) collectContainerMemoryMetrics(ch chan<- metr float64(*s.Memory.WorkingSetBytes), s.Name, pod.PodRef.Name, pod.PodRef.Namespace)) } +func (rc *resourceMetricsCollector) collectContainerSwapMetrics(ch chan<- metrics.Metric, pod summary.PodStats, s summary.ContainerStats) { + if s.Swap == nil || s.Swap.SwapUsageBytes == nil { + return + } + + ch <- metrics.NewLazyMetricWithTimestamp(s.Swap.Time.Time, + metrics.NewLazyConstMetric(containerSwapUsageDesc, metrics.GaugeValue, + float64(*s.Swap.SwapUsageBytes), s.Name, pod.PodRef.Name, pod.PodRef.Namespace)) +} + func (rc *resourceMetricsCollector) collectPodCPUMetrics(ch chan<- metrics.Metric, pod summary.PodStats) { if pod.CPU == nil || pod.CPU.UsageCoreNanoSeconds == nil { return @@ -209,3 +255,13 @@ func (rc *resourceMetricsCollector) collectPodMemoryMetrics(ch chan<- metrics.Me metrics.NewLazyConstMetric(podMemoryUsageDesc, metrics.GaugeValue, float64(*pod.Memory.WorkingSetBytes), pod.PodRef.Name, pod.PodRef.Namespace)) } + +func (rc *resourceMetricsCollector) collectPodSwapMetrics(ch chan<- metrics.Metric, pod summary.PodStats) { + if pod.Swap == nil || pod.Swap.SwapUsageBytes == nil { + return + } + + ch <- metrics.NewLazyMetricWithTimestamp(pod.Swap.Time.Time, + metrics.NewLazyConstMetric(podSwapUsageDesc, metrics.GaugeValue, + float64(*pod.Swap.SwapUsageBytes), pod.PodRef.Name, pod.PodRef.Namespace)) +} diff --git a/pkg/kubelet/server/stats/summary.go b/pkg/kubelet/server/stats/summary.go index fb0719b8ab0..cb130e6007c 100644 --- a/pkg/kubelet/server/stats/summary.go +++ b/pkg/kubelet/server/stats/summary.go @@ -105,6 +105,7 @@ func (sp *summaryProviderImpl) Get(ctx context.Context, updateStats bool) (*stat NodeName: node.Name, CPU: rootStats.CPU, Memory: rootStats.Memory, + Swap: rootStats.Swap, Network: networkStats, StartTime: sp.systemBootTime, Fs: rootFsStats, @@ -141,6 +142,7 @@ func (sp *summaryProviderImpl) GetCPUAndMemoryStats(ctx context.Context) (*stats NodeName: node.Name, CPU: rootStats.CPU, Memory: rootStats.Memory, + Swap: rootStats.Swap, StartTime: rootStats.StartTime, SystemContainers: sp.GetSystemContainersCPUAndMemoryStats(nodeConfig, podStats, false), } From e429793db1ee2730b30efcba68769fb53718017c Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Sun, 9 Jul 2023 18:09:11 +0300 Subject: [PATCH 8/9] Unit tests: node swap usage resource metric Signed-off-by: Itamar Holder --- .../collectors/resource_metrics_test.go | 24 +++++++++++++++++++ pkg/kubelet/server/stats/summary_test.go | 5 ++++ 2 files changed, 29 insertions(+) diff --git a/pkg/kubelet/metrics/collectors/resource_metrics_test.go b/pkg/kubelet/metrics/collectors/resource_metrics_test.go index 0f2c0a26b4f..b4e36339d7d 100644 --- a/pkg/kubelet/metrics/collectors/resource_metrics_test.go +++ b/pkg/kubelet/metrics/collectors/resource_metrics_test.go @@ -38,11 +38,14 @@ func TestCollectResourceMetrics(t *testing.T) { "scrape_error", "node_cpu_usage_seconds_total", "node_memory_working_set_bytes", + "node_swap_usage_bytes", "container_cpu_usage_seconds_total", "container_memory_working_set_bytes", + "container_swap_usage_bytes", "container_start_time_seconds", "pod_cpu_usage_seconds_total", "pod_memory_working_set_bytes", + "pod_swap_usage_bytes", } mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() @@ -75,6 +78,10 @@ func TestCollectResourceMetrics(t *testing.T) { Time: testTime, WorkingSetBytes: uint64Ptr(1000), }, + Swap: &statsapi.SwapStats{ + Time: testTime, + SwapUsageBytes: uint64Ptr(500), + }, }, }, summaryErr: nil, @@ -85,6 +92,9 @@ func TestCollectResourceMetrics(t *testing.T) { # HELP node_memory_working_set_bytes [ALPHA] Current working set of the node in bytes # TYPE node_memory_working_set_bytes gauge node_memory_working_set_bytes 1000 1624396278302 + # HELP node_swap_usage_bytes [ALPHA] Current swap usage of the node in bytes. Reported only on non-windows systems + # TYPE node_swap_usage_bytes gauge + node_swap_usage_bytes 500 1624396278302 # HELP scrape_error [ALPHA] 1 if there was an error while getting container metrics, 0 otherwise # TYPE scrape_error gauge scrape_error 0 @@ -132,6 +142,10 @@ func TestCollectResourceMetrics(t *testing.T) { Time: testTime, WorkingSetBytes: uint64Ptr(1000), }, + Swap: &statsapi.SwapStats{ + Time: testTime, + SwapUsageBytes: uint64Ptr(1000), + }, }, { Name: "container_b", @@ -189,6 +203,9 @@ func TestCollectResourceMetrics(t *testing.T) { container_start_time_seconds{container="container_a",namespace="namespace_a",pod="pod_a"} 1.6243962483020916e+09 1624396248302 container_start_time_seconds{container="container_a",namespace="namespace_b",pod="pod_b"} 1.6243956783020916e+09 1624395678302 container_start_time_seconds{container="container_b",namespace="namespace_a",pod="pod_a"} 1.6243961583020916e+09 1624396158302 + # HELP container_swap_usage_bytes [ALPHA] Current amount of the container swap usage in bytes. Reported only on non-windows systems + # TYPE container_swap_usage_bytes gauge + container_swap_usage_bytes{container="container_a",namespace="namespace_a",pod="pod_a"} 1000 1624396278302 `, }, { @@ -310,6 +327,10 @@ func TestCollectResourceMetrics(t *testing.T) { Time: testTime, WorkingSetBytes: uint64Ptr(1000), }, + Swap: &statsapi.SwapStats{ + Time: testTime, + SwapUsageBytes: uint64Ptr(5000), + }, }, }, }, @@ -324,6 +345,9 @@ func TestCollectResourceMetrics(t *testing.T) { # HELP pod_memory_working_set_bytes [ALPHA] Current working set of the pod in bytes # TYPE pod_memory_working_set_bytes gauge pod_memory_working_set_bytes{namespace="namespace_a",pod="pod_a"} 1000 1624396278302 + # HELP pod_swap_usage_bytes [ALPHA] Current amount of the pod swap usage in bytes. Reported only on non-windows systems + # TYPE pod_swap_usage_bytes gauge + pod_swap_usage_bytes{namespace="namespace_a",pod="pod_a"} 5000 1624396278302 `, }, { diff --git a/pkg/kubelet/server/stats/summary_test.go b/pkg/kubelet/server/stats/summary_test.go index af5525d2e4a..e8d0e98beff 100644 --- a/pkg/kubelet/server/stats/summary_test.go +++ b/pkg/kubelet/server/stats/summary_test.go @@ -100,6 +100,7 @@ func TestSummaryProviderGetStats(t *testing.T) { assert.Equal(summary.Node.StartTime, systemBootTime) assert.Equal(summary.Node.CPU, cgroupStatsMap["/"].cs.CPU) assert.Equal(summary.Node.Memory, cgroupStatsMap["/"].cs.Memory) + assert.Equal(summary.Node.Swap, cgroupStatsMap["/"].cs.Swap) assert.Equal(summary.Node.Network, cgroupStatsMap["/"].ns) assert.Equal(summary.Node.Fs, rootFsStats) assert.Equal(summary.Node.Runtime, &statsapi.RuntimeStats{ImageFs: imageFsStats}) @@ -112,6 +113,7 @@ func TestSummaryProviderGetStats(t *testing.T) { Memory: cgroupStatsMap["/kubelet"].cs.Memory, Accelerators: cgroupStatsMap["/kubelet"].cs.Accelerators, UserDefinedMetrics: cgroupStatsMap["/kubelet"].cs.UserDefinedMetrics, + Swap: cgroupStatsMap["/kubelet"].cs.Swap, }) assert.Contains(summary.Node.SystemContainers, statsapi.ContainerStats{ Name: "misc", @@ -120,6 +122,7 @@ func TestSummaryProviderGetStats(t *testing.T) { Memory: cgroupStatsMap["/misc"].cs.Memory, Accelerators: cgroupStatsMap["/misc"].cs.Accelerators, UserDefinedMetrics: cgroupStatsMap["/misc"].cs.UserDefinedMetrics, + Swap: cgroupStatsMap["/misc"].cs.Swap, }) assert.Contains(summary.Node.SystemContainers, statsapi.ContainerStats{ Name: "runtime", @@ -128,6 +131,7 @@ func TestSummaryProviderGetStats(t *testing.T) { Memory: cgroupStatsMap["/runtime"].cs.Memory, Accelerators: cgroupStatsMap["/runtime"].cs.Accelerators, UserDefinedMetrics: cgroupStatsMap["/runtime"].cs.UserDefinedMetrics, + Swap: cgroupStatsMap["/runtime"].cs.Swap, }) assert.Contains(summary.Node.SystemContainers, statsapi.ContainerStats{ Name: "pods", @@ -136,6 +140,7 @@ func TestSummaryProviderGetStats(t *testing.T) { Memory: cgroupStatsMap["/pods"].cs.Memory, Accelerators: cgroupStatsMap["/pods"].cs.Accelerators, UserDefinedMetrics: cgroupStatsMap["/pods"].cs.UserDefinedMetrics, + Swap: cgroupStatsMap["/pods"].cs.Swap, }) assert.Equal(summary.Pods, podStats) } From 4cb5547f93423aaa86a39077988782e7a0ceeade Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Thu, 29 Jun 2023 19:58:12 +0300 Subject: [PATCH 9/9] Adjust summary API e2e test Signed-off-by: Itamar Holder --- test/e2e_node/summary_test.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/e2e_node/summary_test.go b/test/e2e_node/summary_test.go index 0ad04a2369d..8748942f113 100644 --- a/test/e2e_node/summary_test.go +++ b/test/e2e_node/summary_test.go @@ -112,6 +112,7 @@ var _ = SIGDescribe("Summary API [NodeConformance]", func() { "PageFaults": bounded(1000, 1e9), "MajorPageFaults": bounded(0, 100000), }), + "Swap": swapExpectation(memoryLimit), "Accelerators": gomega.BeEmpty(), "Rootfs": gomega.BeNil(), "Logs": gomega.BeNil(), @@ -183,6 +184,7 @@ var _ = SIGDescribe("Summary API [NodeConformance]", func() { "PageFaults": bounded(100, expectedPageFaultsUpperBound), "MajorPageFaults": bounded(0, expectedMajorPageFaultsUpperBound), }), + "Swap": swapExpectation(memoryLimit), "Accelerators": gomega.BeEmpty(), "Rootfs": ptrMatchAllFields(gstruct.Fields{ "Time": recent(maxStatsAge), @@ -230,6 +232,7 @@ var _ = SIGDescribe("Summary API [NodeConformance]", func() { "PageFaults": bounded(0, expectedPageFaultsUpperBound), "MajorPageFaults": bounded(0, expectedMajorPageFaultsUpperBound), }), + "Swap": swapExpectation(memoryLimit), "VolumeStats": gstruct.MatchAllElements(summaryObjectID, gstruct.Elements{ "test-empty-dir": gstruct.MatchAllFields(gstruct.Fields{ "Name": gomega.Equal("test-empty-dir"), @@ -280,6 +283,7 @@ var _ = SIGDescribe("Summary API [NodeConformance]", func() { "PageFaults": bounded(1000, 1e9), "MajorPageFaults": bounded(0, 100000), }), + "Swap": swapExpectation(memoryLimit), // TODO(#28407): Handle non-eth0 network interface names. "Network": ptrMatchAllFields(gstruct.Fields{ "Time": recent(maxStatsAge), @@ -410,6 +414,27 @@ func bounded(lower, upper interface{}) types.GomegaMatcher { gomega.BeNumerically("<=", upper))) } +func swapExpectation(upper interface{}) types.GomegaMatcher { + // Size after which we consider memory to be "unlimited". This is not + // MaxInt64 due to rounding by the kernel. + const maxMemorySize = uint64(1 << 62) + + swapBytesMatcher := gomega.Or( + gomega.BeNil(), + bounded(0, upper), + gstruct.PointTo(gomega.BeNumerically(">=", maxMemorySize)), + ) + + return gomega.Or( + gomega.BeNil(), + ptrMatchAllFields(gstruct.Fields{ + "Time": recent(maxStatsAge), + "SwapUsageBytes": swapBytesMatcher, + "SwapAvailableBytes": swapBytesMatcher, + }), + ) +} + func recent(d time.Duration) types.GomegaMatcher { return gomega.WithTransform(func(t metav1.Time) time.Time { return t.Time