diff --git a/.gbt.mk b/.gbt.mk new file mode 100644 index 00000000..e15c9a01 --- /dev/null +++ b/.gbt.mk @@ -0,0 +1,7 @@ +# This file is used by the makefile in order to obtain the version of the +# Grafana Build Tools image to use. This is *also* used by scripts/docker-run +# to obtain the same information. That means this file must be both a Makefile +# and a shell script. This is achieved by using the `VAR=value` syntax, which +# is valid in both Makefile and shell. + +GBT_IMAGE=ghcr.io/grafana/grafana-build-tools:v0.10.0 diff --git a/Makefile b/Makefile index 9da6bb64..531c1855 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,9 @@ all: deps build include $(ROOTDIR)/scripts/make/vars.mk -include config.mk +include $(ROOTDIR)/config.mk + +include $(ROOTDIR)/.gbt.mk -include $(ROOTDIR)/scripts/make/local.mk diff --git a/config.mk b/config.mk index 994e70bf..9c8e0fbb 100644 --- a/config.mk +++ b/config.mk @@ -3,6 +3,4 @@ DOCKER_TAG = grafana/synthetic-monitoring-agent -GO_TOOLS_IMAGE := ghcr.io/grafana/grafana-build-tools:v0.10.0 - PLATFORMS := $(sort $(HOST_OS)/$(HOST_ARCH) linux/amd64 linux/arm64) diff --git a/pkg/pb/synthetic_monitoring/buf.gen.yaml b/pkg/pb/synthetic_monitoring/buf.gen.yaml new file mode 100644 index 00000000..3b79ee49 --- /dev/null +++ b/pkg/pb/synthetic_monitoring/buf.gen.yaml @@ -0,0 +1,7 @@ +version: v1 +plugins: + - name: gogofast + out: . + opt: + - plugins=grpc + - paths=source_relative diff --git a/pkg/pb/synthetic_monitoring/buf.lock b/pkg/pb/synthetic_monitoring/buf.lock new file mode 100644 index 00000000..768ad21c --- /dev/null +++ b/pkg/pb/synthetic_monitoring/buf.lock @@ -0,0 +1,8 @@ +# Generated by buf. DO NOT EDIT. +version: v1 +deps: + - remote: buf.build + owner: gogo + repository: protobuf + commit: 5461a3dfa9d941da82028ab185dc2a0e + digest: shake256:37c7c75224982038cb1abf45b481ef06716c1f806ffaa162018d0df092bd11a2a9b62c2d0dc0a2ae43beff86b6014fc0eb8c594ffd84d52ade4b08fca901eadc diff --git a/pkg/pb/synthetic_monitoring/buf.yaml b/pkg/pb/synthetic_monitoring/buf.yaml new file mode 100644 index 00000000..22996e27 --- /dev/null +++ b/pkg/pb/synthetic_monitoring/buf.yaml @@ -0,0 +1,11 @@ +version: v1 +name: buf.build/grafana/synthetic-monitoring-agent +breaking: + use: + - FILE +lint: + use: + - DEFAULT +deps: + - buf.build/gogo/protobuf + diff --git a/pkg/pb/synthetic_monitoring/checks.binpb b/pkg/pb/synthetic_monitoring/checks.binpb new file mode 100644 index 00000000..a394a0bc Binary files /dev/null and b/pkg/pb/synthetic_monitoring/checks.binpb differ diff --git a/pkg/pb/synthetic_monitoring/checks.pb.go b/pkg/pb/synthetic_monitoring/checks.pb.go index ddd1485c..88d22d8d 100644 --- a/pkg/pb/synthetic_monitoring/checks.pb.go +++ b/pkg/pb/synthetic_monitoring/checks.pb.go @@ -2460,298 +2460,301 @@ func init() { func init() { proto.RegisterFile("checks.proto", fileDescriptor_a921b63774164c1f) } var fileDescriptor_a921b63774164c1f = []byte{ - // 4655 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7b, 0x4d, 0x6c, 0x23, 0x47, - 0x76, 0xbf, 0x9a, 0xa4, 0x28, 0xf1, 0x91, 0xd2, 0xf4, 0xd4, 0x8c, 0x6d, 0x5a, 0x1e, 0x8b, 0x72, - 0xdb, 0xe3, 0x95, 0x65, 0xff, 0xc7, 0xbb, 0xfa, 0xdb, 0xde, 0x85, 0x37, 0x1b, 0x2c, 0xbf, 0x66, - 0x24, 0x8f, 0x44, 0x72, 0x8a, 0x2d, 0x65, 0xc6, 0xd8, 0x5d, 0xa5, 0xd5, 0x2c, 0x49, 0xed, 0x21, - 0xbb, 0xe9, 0xee, 0xe2, 0x58, 0xf2, 0x6d, 0x81, 0xc5, 0x22, 0xd8, 0x20, 0x80, 0x81, 0x00, 0x01, - 0x72, 0xca, 0x06, 0x48, 0x80, 0x6c, 0x72, 0x4c, 0x10, 0xec, 0x5e, 0x93, 0xcb, 0x24, 0xd9, 0x24, - 0x3e, 0xe4, 0x90, 0x13, 0x91, 0x8c, 0x0f, 0x01, 0x78, 0xca, 0x25, 0x87, 0xdc, 0x82, 0xfa, 0xe8, - 0xee, 0x6a, 0x7e, 0x59, 0xb3, 0x9e, 0x20, 0x7b, 0x61, 0x57, 0xfd, 0xea, 0xbd, 0x57, 0xd5, 0x55, - 0xaf, 0xde, 0x7b, 0xf5, 0xba, 0x08, 0x05, 0xfb, 0x8c, 0xd8, 0x0f, 0x83, 0x5b, 0x7d, 0xdf, 0xa3, - 0x1e, 0xba, 0x1e, 0x5c, 0xb8, 0xf4, 0x8c, 0x50, 0xc7, 0x3e, 0xea, 0x79, 0xae, 0x43, 0x3d, 0xdf, - 0x71, 0x4f, 0xd7, 0xae, 0x9f, 0x7a, 0xa7, 0x1e, 0x27, 0x78, 0x9b, 0x95, 0x04, 0xad, 0x91, 0x85, - 0xcc, 0xa1, 0xe7, 0x74, 0x8c, 0x3f, 0xd6, 0x00, 0x5a, 0xbe, 0x77, 0x4c, 0xda, 0xd4, 0xa2, 0x04, - 0xdd, 0x81, 0xac, 0x10, 0x59, 0xd4, 0x36, 0xd2, 0x9b, 0xf9, 0xed, 0xd2, 0xad, 0x69, 0x32, 0x6f, - 0xd5, 0x5d, 0xea, 0xd0, 0x0b, 0x4c, 0x4e, 0x2a, 0xab, 0x8f, 0x87, 0xa5, 0x85, 0xd1, 0xb0, 0x24, - 0xd9, 0xb0, 0x7c, 0xa2, 0x0f, 0x60, 0x89, 0x12, 0xd7, 0x72, 0x69, 0x50, 0x4c, 0x5d, 0x4e, 0xd2, - 0x15, 0x29, 0x29, 0xe4, 0xc3, 0x61, 0xc1, 0x78, 0x00, 0xb9, 0x88, 0x0c, 0x3d, 0x0f, 0x29, 0xa7, - 0x53, 0xd4, 0x36, 0xb4, 0xcd, 0x74, 0x25, 0x3b, 0x1a, 0x96, 0x52, 0x4e, 0x07, 0xa7, 0x9c, 0x0e, - 0x7a, 0x07, 0x0a, 0x5d, 0x2b, 0xa0, 0xfb, 0x5e, 0xc7, 0x39, 0x71, 0x48, 0xa7, 0x98, 0xda, 0xd0, - 0x36, 0xb5, 0x8a, 0x3e, 0x1a, 0x96, 0x12, 0x38, 0x4e, 0xd4, 0x8c, 0x1f, 0x6b, 0x90, 0xe3, 0xaf, - 0xbf, 0xeb, 0x9e, 0x78, 0xe8, 0x26, 0x2c, 0x1d, 0x12, 0x3f, 0x70, 0x3c, 0x97, 0x77, 0x90, 0xab, - 0xe4, 0xd9, 0x78, 0x1e, 0x09, 0x08, 0x87, 0x6d, 0xc8, 0x80, 0x6c, 0xd5, 0xeb, 0xf5, 0x1c, 0xca, - 0x3b, 0xc9, 0x55, 0x80, 0xbf, 0x3f, 0x47, 0xb0, 0x6c, 0x41, 0xb7, 0x00, 0x2a, 0x03, 0xa7, 0xdb, - 0x09, 0xa8, 0xd5, 0xeb, 0x17, 0xd3, 0x9c, 0x6e, 0x75, 0x34, 0x2c, 0xc1, 0x71, 0x84, 0x62, 0x85, - 0xc2, 0xf8, 0x26, 0xe4, 0x5b, 0x8e, 0x7b, 0x8a, 0xc9, 0xc7, 0x03, 0x12, 0x50, 0xb4, 0x09, 0xcb, - 0x6d, 0x56, 0x74, 0x6d, 0x22, 0xdf, 0xb5, 0x30, 0x1a, 0x96, 0x96, 0x03, 0x89, 0xe1, 0xa8, 0xd5, - 0xf8, 0x16, 0x14, 0x5a, 0x1e, 0x63, 0x0c, 0xfa, 0x9e, 0x1b, 0x90, 0xa7, 0xe0, 0xbc, 0x0f, 0x59, - 0xb6, 0xe8, 0x83, 0x00, 0xbd, 0x03, 0x19, 0xdb, 0xeb, 0x08, 0xfa, 0xd5, 0xed, 0x8d, 0xe9, 0x2b, - 0x25, 0x68, 0xab, 0x5e, 0x87, 0x60, 0x4e, 0x8d, 0x8a, 0xb0, 0xd4, 0x23, 0x41, 0x60, 0x9d, 0x12, - 0x31, 0x0f, 0x38, 0xac, 0x1a, 0x3f, 0xd1, 0xe0, 0x1a, 0x26, 0xa7, 0x4e, 0x40, 0x89, 0xcf, 0x67, - 0x17, 0x93, 0x60, 0xd0, 0xa5, 0xe8, 0x9b, 0xb0, 0xd8, 0x67, 0x55, 0xde, 0x51, 0x7e, 0xfb, 0xa5, - 0xe9, 0x1d, 0x71, 0x8e, 0x4a, 0x86, 0xa9, 0x03, 0x16, 0xf4, 0xe8, 0x7d, 0xc8, 0x06, 0xbc, 0x7b, - 0xde, 0x53, 0x7e, 0xfb, 0xc6, 0xbc, 0x21, 0x4a, 0x56, 0xc9, 0x61, 0x3c, 0xc9, 0xc2, 0x22, 0x17, - 0x39, 0x53, 0x75, 0x36, 0x61, 0x59, 0xa8, 0xda, 0xae, 0x50, 0x1b, 0x39, 0x65, 0x21, 0x86, 0xa3, - 0x12, 0xba, 0x01, 0x19, 0xd7, 0xea, 0x11, 0xb9, 0x9e, 0xcb, 0xa3, 0x61, 0x89, 0xd7, 0x31, 0xff, - 0x65, 0x72, 0xba, 0x16, 0x75, 0xe8, 0xa0, 0x43, 0x8a, 0x99, 0x0d, 0x6d, 0x33, 0x25, 0xe4, 0x84, - 0x18, 0x8e, 0x4a, 0xe8, 0x4d, 0xc8, 0x75, 0x3d, 0xf7, 0x54, 0x90, 0x2e, 0x72, 0xd2, 0x95, 0xd1, - 0xb0, 0x14, 0x83, 0x38, 0x2e, 0xa2, 0x2a, 0x64, 0xbb, 0xd6, 0x31, 0xe9, 0x06, 0xc5, 0x2c, 0xdf, - 0x49, 0x33, 0xa6, 0x6d, 0x8f, 0xd1, 0xc4, 0xfb, 0x51, 0xb0, 0x60, 0xf9, 0x64, 0x3a, 0xeb, 0x93, - 0x53, 0xa6, 0xd9, 0x4b, 0xb1, 0xce, 0x0a, 0x04, 0xcb, 0x27, 0xa3, 0xe9, 0x0f, 0x8e, 0xbb, 0x8e, - 0x5d, 0x5c, 0xde, 0xd0, 0x36, 0x97, 0x05, 0x8d, 0x40, 0xb0, 0x7c, 0x32, 0x1a, 0xcf, 0xed, 0x3a, - 0x2e, 0x29, 0xe6, 0x62, 0x1a, 0x81, 0x60, 0xf9, 0x64, 0x5b, 0x51, 0x94, 0xaa, 0x67, 0x96, 0x7b, - 0x4a, 0x8a, 0x10, 0x6f, 0x45, 0x15, 0xc7, 0x89, 0x1a, 0xdb, 0x7c, 0x72, 0xa7, 0x15, 0xf3, 0x53, - 0x36, 0xdf, 0xa3, 0x78, 0xf3, 0x89, 0xad, 0x56, 0x2c, 0x4c, 0x6e, 0x3e, 0x3b, 0xda, 0x7c, 0xf1, - 0x36, 0x2b, 0xae, 0x4c, 0xdf, 0x7c, 0x71, 0x99, 0xd1, 0x77, 0x48, 0xdf, 0x27, 0xb6, 0x45, 0x49, - 0xa7, 0xb8, 0xca, 0x5f, 0x8c, 0xd3, 0xc7, 0x28, 0x56, 0xca, 0x6c, 0xa8, 0xb6, 0x4f, 0x38, 0x71, - 0x87, 0xbf, 0x1b, 0x1f, 0xaa, 0x84, 0x70, 0x58, 0x60, 0xfa, 0xd0, 0x0b, 0xcd, 0x11, 0xe1, 0x74, - 0x5c, 0x1f, 0x42, 0x0c, 0x47, 0x25, 0xf4, 0x03, 0x28, 0xd8, 0x56, 0xdf, 0x3a, 0x76, 0xba, 0x0e, - 0x75, 0x48, 0x50, 0x3c, 0xe1, 0x5a, 0xbe, 0x39, 0x67, 0x7f, 0xdc, 0xaa, 0x2a, 0xf4, 0x62, 0x6e, - 0x55, 0x09, 0x38, 0x51, 0x5b, 0x3b, 0x82, 0x82, 0x4a, 0x8f, 0x9a, 0xf0, 0x5c, 0xc7, 0x09, 0xac, - 0xe3, 0x2e, 0x69, 0xdb, 0xbe, 0xd3, 0xa7, 0xa4, 0x53, 0x0d, 0xad, 0x3e, 0x7b, 0xf7, 0x17, 0x47, - 0xc3, 0xd2, 0x74, 0x02, 0x3c, 0x1d, 0x36, 0x6e, 0x00, 0x98, 0x62, 0x93, 0x30, 0x3b, 0xba, 0x1a, - 0x6f, 0x34, 0xb6, 0xc1, 0x8c, 0xff, 0xd2, 0xa0, 0x20, 0x9a, 0xf7, 0x9c, 0x9e, 0x43, 0x03, 0xa6, - 0xff, 0x3d, 0xeb, 0x5c, 0xe9, 0x33, 0x2d, 0xf4, 0x3f, 0x02, 0x71, 0x5c, 0x44, 0x55, 0xb8, 0xda, - 0xb3, 0xce, 0xc7, 0x06, 0x2a, 0xf6, 0xe9, 0x73, 0xa3, 0x61, 0x69, 0xb2, 0x11, 0x4f, 0x42, 0xe8, - 0x3b, 0x70, 0xa5, 0x67, 0x9d, 0xef, 0x13, 0xea, 0x3b, 0xf6, 0x9e, 0xd8, 0x4d, 0x69, 0x2e, 0xe2, - 0xda, 0x68, 0x58, 0x1a, 0x6f, 0xc2, 0xe3, 0x00, 0x53, 0xe9, 0x9e, 0x75, 0xbe, 0xe7, 0x9d, 0x4a, - 0xde, 0x0c, 0xe7, 0xe5, 0xd3, 0xae, 0xe2, 0x38, 0x51, 0x33, 0x7e, 0x9a, 0x81, 0xac, 0x78, 0xef, - 0x99, 0xb6, 0xa7, 0x04, 0x8b, 0x9e, 0x7f, 0x1a, 0x19, 0x9e, 0xdc, 0x68, 0x58, 0x12, 0x00, 0x16, - 0x0f, 0xf4, 0x00, 0x56, 0x7a, 0x7c, 0x24, 0x01, 0x26, 0x3d, 0x8f, 0x0a, 0xdb, 0x93, 0x9f, 0x65, - 0xa4, 0x05, 0x0d, 0x5b, 0x84, 0xca, 0xd5, 0xd1, 0xb0, 0x94, 0x64, 0xc5, 0xc9, 0x2a, 0x3a, 0x84, - 0x02, 0x79, 0x44, 0x98, 0xab, 0x15, 0x92, 0x33, 0x97, 0x94, 0xcc, 0x5f, 0x5b, 0xe5, 0xc4, 0x89, - 0x1a, 0xdb, 0x1e, 0x01, 0xb5, 0xec, 0x87, 0xbb, 0x1d, 0x6e, 0xdb, 0xd2, 0x62, 0x7b, 0x48, 0x08, - 0x87, 0x05, 0x74, 0x3b, 0x32, 0xea, 0x59, 0xee, 0x77, 0x8c, 0xe9, 0x1d, 0x8b, 0x09, 0x94, 0xa6, - 0x9d, 0xef, 0x76, 0xc1, 0x15, 0x1a, 0x78, 0x61, 0xda, 0xac, 0x60, 0xdc, 0xb4, 0x31, 0x04, 0xcb, - 0x27, 0xeb, 0xab, 0xcb, 0x55, 0x8f, 0x9b, 0xb6, 0xfc, 0xfc, 0xbe, 0x84, 0x92, 0x0a, 0x39, 0x82, - 0x0b, 0xcb, 0xe7, 0x33, 0xdf, 0xf9, 0xc6, 0x1f, 0x6a, 0x00, 0xf1, 0xd4, 0x46, 0x0e, 0x46, 0x9b, - 0xea, 0x60, 0x5e, 0x84, 0xf4, 0xc0, 0xef, 0xca, 0xa8, 0x63, 0x69, 0x34, 0x2c, 0xb1, 0x2a, 0x66, - 0x3f, 0xac, 0xc7, 0x41, 0x40, 0x7c, 0xc5, 0x3b, 0xf1, 0x1e, 0x43, 0x0c, 0x47, 0x25, 0x46, 0xd9, - 0xb7, 0x82, 0xe0, 0x13, 0xcf, 0xef, 0xf0, 0x15, 0x97, 0x94, 0x21, 0x86, 0xa3, 0x12, 0x73, 0xe3, - 0x79, 0xbe, 0x7d, 0xa4, 0x85, 0xae, 0x40, 0xce, 0xeb, 0x13, 0xdf, 0xa2, 0x61, 0x80, 0xb4, 0xba, - 0xfd, 0xda, 0xf4, 0x79, 0xe4, 0x5c, 0xcd, 0x90, 0x16, 0xc7, 0x6c, 0x2c, 0x04, 0xe0, 0x11, 0xa2, - 0x74, 0xe4, 0x2f, 0xcd, 0xe1, 0x0f, 0x43, 0x00, 0x4e, 0x6f, 0x3c, 0xd1, 0x60, 0x49, 0x8c, 0x23, - 0x40, 0xbb, 0x63, 0x51, 0xea, 0x2b, 0x73, 0xa4, 0x08, 0x9e, 0x99, 0x71, 0xea, 0x9d, 0xf1, 0x38, - 0xf5, 0xc6, 0x3c, 0xcd, 0x98, 0x1d, 0xa4, 0x32, 0x2b, 0xe5, 0x04, 0x35, 0xd2, 0xa5, 0xd6, 0x6d, - 0xc7, 0x0f, 0x68, 0xc5, 0xa2, 0xf6, 0x19, 0x5f, 0x89, 0x65, 0x61, 0xa5, 0x26, 0x1a, 0xf1, 0x24, - 0x64, 0xfc, 0xb9, 0x06, 0x85, 0x72, 0x67, 0xc7, 0xb3, 0xc3, 0x38, 0xd0, 0x04, 0xb0, 0x58, 0x9d, - 0xbf, 0x8a, 0x0c, 0x9b, 0x66, 0x6c, 0xd0, 0x72, 0x44, 0x57, 0x41, 0x72, 0x94, 0x0a, 0x2f, 0x56, - 0xca, 0xa8, 0x06, 0x59, 0x31, 0xec, 0xf9, 0xe1, 0x94, 0x7c, 0x67, 0x36, 0x75, 0x1a, 0x9b, 0x3a, - 0xc1, 0x83, 0xe5, 0xd3, 0xb8, 0x0d, 0x8b, 0xdc, 0xce, 0x7d, 0x89, 0xd2, 0x96, 0x60, 0xf1, 0x91, - 0xd5, 0x1d, 0xc8, 0x20, 0x51, 0x58, 0x38, 0x0e, 0x60, 0xf1, 0x30, 0x7e, 0xbe, 0x08, 0x8b, 0x62, - 0x5c, 0x5f, 0x3d, 0x40, 0x7b, 0x13, 0x72, 0x27, 0xbe, 0x08, 0x70, 0x2f, 0xa4, 0x81, 0xe7, 0x8e, - 0x25, 0x02, 0x71, 0x5c, 0xe4, 0xb1, 0xcc, 0xc9, 0x49, 0x40, 0xa8, 0x34, 0xe7, 0x22, 0x96, 0xe1, - 0x08, 0x96, 0x4f, 0xb6, 0xe1, 0xa9, 0xd3, 0x23, 0xde, 0x80, 0xaa, 0xb6, 0x4c, 0x42, 0x38, 0x2c, - 0x30, 0x32, 0xe2, 0x32, 0xbf, 0xd8, 0xe1, 0xc6, 0x6c, 0x59, 0x90, 0x49, 0x08, 0x87, 0x05, 0x25, - 0x94, 0x5b, 0xfa, 0xd5, 0x43, 0xb9, 0x7b, 0xb0, 0x1c, 0x10, 0x4a, 0x1d, 0xf7, 0x34, 0xb4, 0x66, - 0xaf, 0xce, 0xd1, 0xff, 0xb6, 0x24, 0xad, 0xe8, 0x52, 0x5c, 0xc4, 0x8c, 0xa3, 0x12, 0x8f, 0xfc, - 0x58, 0x54, 0x11, 0x14, 0x73, 0x1b, 0xe9, 0x70, 0x26, 0x04, 0x82, 0xe5, 0x93, 0xd1, 0x50, 0xcb, - 0x3f, 0x25, 0x94, 0xc7, 0x73, 0xd2, 0xcc, 0x0a, 0x04, 0xcb, 0x27, 0x33, 0x50, 0x1f, 0x79, 0xc7, - 0x32, 0x7e, 0xe3, 0x06, 0xea, 0x23, 0xef, 0x18, 0xb3, 0x1f, 0xf4, 0x5d, 0xd0, 0x8f, 0xad, 0xc0, - 0xb1, 0x85, 0x5b, 0x0d, 0x9a, 0x6e, 0xf7, 0x82, 0x47, 0x70, 0xcb, 0x95, 0xeb, 0xa3, 0x61, 0x69, - 0xa2, 0x0d, 0x4f, 0x20, 0x4c, 0x82, 0xd5, 0x25, 0x3e, 0x6d, 0x13, 0x37, 0x70, 0xa8, 0xf3, 0xc8, - 0xa1, 0x17, 0x32, 0xb6, 0xe3, 0x12, 0xc6, 0xdb, 0xf0, 0x04, 0xf2, 0xec, 0xad, 0xf7, 0x67, 0x29, - 0x80, 0x78, 0xdf, 0x29, 0xfa, 0x9b, 0xfb, 0x15, 0xf5, 0x57, 0x51, 0xb7, 0xf4, 0x1c, 0x75, 0x53, - 0x55, 0x20, 0xf3, 0xac, 0x55, 0x60, 0xf1, 0x12, 0x2a, 0x90, 0x9d, 0xa5, 0x02, 0xc6, 0xcf, 0x16, - 0x61, 0x25, 0xd1, 0x2b, 0xfa, 0x00, 0x32, 0x7d, 0xc7, 0x3d, 0x95, 0xd6, 0x6b, 0x86, 0xe7, 0x65, - 0x87, 0xdf, 0x68, 0x9c, 0x68, 0x34, 0x2c, 0xad, 0x32, 0x9e, 0xb7, 0xbc, 0x9e, 0x43, 0x49, 0xaf, - 0x4f, 0x2f, 0x30, 0x97, 0xc1, 0x64, 0x9d, 0x51, 0xda, 0x97, 0x76, 0x6b, 0x86, 0xac, 0x1d, 0x4a, - 0xfb, 0x49, 0x59, 0x8c, 0x47, 0x95, 0xc5, 0xea, 0xe8, 0x36, 0xa4, 0x3b, 0x6e, 0x20, 0xe3, 0xa9, - 0x19, 0x2e, 0xa4, 0xe6, 0x06, 0x91, 0x24, 0x1e, 0x50, 0x75, 0xdc, 0x40, 0x11, 0xc4, 0x04, 0x30, - 0x39, 0xd4, 0xee, 0xcb, 0x75, 0x98, 0x21, 0xc7, 0xb4, 0xfb, 0x49, 0x39, 0xd4, 0x56, 0x07, 0xc4, - 0x04, 0xa0, 0x63, 0x00, 0xea, 0x5b, 0x36, 0xf1, 0xbd, 0x01, 0x15, 0xa7, 0xc2, 0x99, 0x47, 0x00, - 0x33, 0xa2, 0x8b, 0xa4, 0x16, 0x47, 0xc3, 0xd2, 0xf5, 0x98, 0x5f, 0x11, 0xae, 0x48, 0x45, 0x1f, - 0xc2, 0x72, 0x20, 0x03, 0x63, 0xbe, 0x86, 0xf9, 0xed, 0xd7, 0x67, 0x1c, 0xa5, 0x25, 0x55, 0x24, - 0xff, 0xf9, 0xd1, 0xb0, 0x84, 0x42, 0x5e, 0x45, 0x7a, 0x24, 0x0f, 0xfd, 0x00, 0x72, 0xbd, 0x41, - 0x97, 0x3a, 0x7c, 0x81, 0x96, 0xb8, 0xf0, 0xaf, 0x4d, 0x17, 0xbe, 0xcf, 0xc8, 0x12, 0xab, 0xf4, - 0xc2, 0x68, 0x58, 0xba, 0x16, 0x71, 0x2b, 0xe2, 0x63, 0x91, 0x6c, 0xed, 0x4f, 0xfd, 0xbe, 0x3d, - 0x3f, 0x82, 0xbb, 0xe3, 0xf7, 0xed, 0xe4, 0xda, 0x33, 0x1e, 0x75, 0xed, 0x59, 0xfd, 0xfd, 0xcc, - 0xe3, 0x9f, 0x96, 0x34, 0xe3, 0x97, 0x29, 0x28, 0xa8, 0x8a, 0x87, 0xf6, 0x20, 0xe7, 0xf4, 0xd5, - 0x14, 0xd0, 0xea, 0xac, 0xbc, 0xd5, 0x6e, 0x48, 0x26, 0xfc, 0x4b, 0xc4, 0x85, 0xe3, 0x22, 0xba, - 0x03, 0x57, 0x02, 0x6f, 0xe0, 0xdb, 0x64, 0xb7, 0x5f, 0xee, 0x74, 0x7c, 0x12, 0x04, 0xd2, 0x07, - 0xbe, 0x3c, 0x1a, 0x96, 0x5e, 0x1c, 0x6b, 0x52, 0x86, 0x38, 0xce, 0x85, 0xbe, 0x0d, 0xf9, 0xbe, - 0x75, 0xd1, 0xf5, 0xac, 0x4e, 0xdb, 0xf9, 0x94, 0x48, 0xcb, 0xc0, 0x0f, 0x69, 0x0a, 0xac, 0x08, - 0x50, 0xa9, 0xd9, 0xd1, 0xa5, 0xe3, 0xb9, 0xf4, 0xb6, 0x6f, 0x9d, 0xf6, 0x88, 0x2b, 0x7c, 0xdd, - 0xb2, 0x88, 0xe1, 0x55, 0x1c, 0x27, 0x6a, 0x68, 0x9b, 0x75, 0x69, 0x3f, 0x24, 0xb4, 0xea, 0x0d, - 0x5c, 0x5a, 0xfc, 0xd1, 0x12, 0xef, 0xf3, 0xca, 0x68, 0x58, 0x52, 0x71, 0xac, 0x56, 0x8c, 0xff, - 0x58, 0x81, 0x82, 0xba, 0xaa, 0xcf, 0x78, 0x3a, 0x6b, 0x90, 0xed, 0x11, 0x7a, 0xe6, 0x09, 0x1b, - 0x3a, 0x33, 0x4f, 0xc5, 0x46, 0xb0, 0xcf, 0xe9, 0x84, 0x7d, 0x12, 0x3c, 0x58, 0x3e, 0xd1, 0xdb, - 0xb0, 0x74, 0x46, 0xac, 0x0e, 0xf1, 0xd9, 0xce, 0x4f, 0x6f, 0xe6, 0x44, 0x74, 0x26, 0x21, 0x65, - 0x0e, 0x43, 0x2a, 0xf4, 0x3a, 0x64, 0x8e, 0xbd, 0xce, 0x85, 0x8c, 0x95, 0xb9, 0x4a, 0xb1, 0xba, - 0xaa, 0x52, 0xac, 0xce, 0x02, 0x40, 0xd7, 0xbb, 0xed, 0x75, 0xbb, 0xde, 0x27, 0x98, 0x74, 0x1c, - 0x9f, 0xd8, 0x34, 0xe0, 0xbb, 0x58, 0x06, 0x80, 0x13, 0x8d, 0x78, 0x12, 0x42, 0x87, 0x90, 0xa3, - 0xdd, 0xa0, 0xea, 0xb9, 0x27, 0xce, 0x29, 0xf7, 0x51, 0x33, 0x13, 0xa7, 0xe6, 0x5e, 0x5b, 0x90, - 0x89, 0xbd, 0x13, 0x71, 0xa9, 0x7b, 0x27, 0x02, 0x99, 0x5c, 0xee, 0x4f, 0xcb, 0x03, 0x7a, 0xc6, - 0x7d, 0xda, 0x4c, 0xb9, 0x95, 0x90, 0x4c, 0xc8, 0x8d, 0xb8, 0x54, 0xb9, 0x11, 0xc8, 0x34, 0xf3, - 0x98, 0x58, 0x3e, 0xf1, 0x4d, 0xef, 0x21, 0x71, 0x79, 0xde, 0x22, 0x27, 0x34, 0x53, 0x81, 0x55, - 0xcd, 0x54, 0x60, 0xb4, 0x0d, 0xcb, 0x7d, 0xdf, 0x3b, 0xbf, 0x38, 0xc0, 0x7b, 0xc5, 0x53, 0xce, - 0xc9, 0x8d, 0x4c, 0x88, 0xa9, 0x46, 0x26, 0xc4, 0xd0, 0x31, 0x14, 0x3c, 0x6b, 0x40, 0xcf, 0xb6, - 0xe5, 0x1c, 0x9d, 0xcd, 0x33, 0x06, 0xcd, 0x72, 0x4c, 0x59, 0x59, 0x1b, 0x0d, 0x4b, 0xcf, 0xab, - 0xbc, 0x8a, 0xfc, 0x84, 0x4c, 0xd4, 0x86, 0x6b, 0xbc, 0xbf, 0xaa, 0xe7, 0xba, 0xc4, 0xa6, 0x3b, - 0x52, 0x5d, 0x1c, 0xae, 0x2e, 0xaf, 0x8c, 0x86, 0xa5, 0x97, 0xa7, 0x34, 0x2b, 0xd2, 0xa6, 0x71, - 0xa3, 0xb7, 0x20, 0x77, 0x62, 0x39, 0xdd, 0xdd, 0x93, 0x76, 0x7b, 0xaf, 0xf8, 0x58, 0xe4, 0x59, - 0x44, 0x68, 0x1a, 0xa2, 0x38, 0x2e, 0xa2, 0x77, 0xa1, 0x20, 0x2a, 0x0d, 0x8f, 0x32, 0x86, 0xbf, - 0xd3, 0xe2, 0x5d, 0xab, 0x36, 0xe0, 0x44, 0x0d, 0xdd, 0x05, 0xfd, 0x91, 0xd5, 0x75, 0x3a, 0x71, - 0xae, 0x36, 0x28, 0xfe, 0x3d, 0x3b, 0x23, 0x2d, 0x56, 0xd6, 0x47, 0xc3, 0xd2, 0xda, 0x78, 0xa3, - 0x32, 0xe8, 0x09, 0x46, 0xd4, 0x80, 0xab, 0x1c, 0xdb, 0x31, 0xcd, 0x96, 0xdc, 0x83, 0x41, 0xf1, - 0x1f, 0x34, 0x3e, 0x0b, 0xa5, 0xd1, 0xb0, 0xf4, 0xd2, 0x44, 0xab, 0x22, 0x6e, 0x92, 0x15, 0xfd, - 0x36, 0xbc, 0x20, 0x06, 0x5b, 0xf1, 0x3a, 0x17, 0xfb, 0xec, 0xbc, 0x43, 0x02, 0x4c, 0x4e, 0xc9, - 0x79, 0xbf, 0xf8, 0x4b, 0x21, 0xf5, 0xe6, 0x68, 0x58, 0x7a, 0x65, 0x06, 0x8d, 0x22, 0x7b, 0x96, - 0x18, 0xe4, 0xc0, 0x5a, 0xdc, 0xd4, 0xf0, 0x68, 0xb2, 0x93, 0x7f, 0x14, 0x9d, 0x6c, 0x8e, 0x86, - 0xa5, 0xd7, 0x66, 0x93, 0x29, 0xfd, 0xcc, 0x11, 0x86, 0x7e, 0x4f, 0x83, 0x17, 0x45, 0xb3, 0x58, - 0xe0, 0x64, 0x57, 0xff, 0x34, 0xf7, 0x5c, 0xaa, 0x70, 0x54, 0xde, 0x94, 0x21, 0xd9, 0xab, 0x33, - 0x85, 0x29, 0x03, 0x9a, 0xdd, 0x23, 0xfa, 0x03, 0x0d, 0x6e, 0xa8, 0xad, 0x13, 0x6f, 0xff, 0xcf, - 0x97, 0x1e, 0xd2, 0x2d, 0x39, 0xa4, 0xd7, 0xe7, 0xc9, 0x53, 0x46, 0x35, 0xb7, 0x5f, 0x74, 0x06, - 0x79, 0xdb, 0xeb, 0xf5, 0x99, 0x1f, 0x63, 0x5e, 0xe0, 0x73, 0xe1, 0x06, 0xb6, 0x66, 0x84, 0xab, - 0x31, 0x65, 0xb9, 0x7b, 0xea, 0xf9, 0x0e, 0x3d, 0xeb, 0x09, 0x73, 0xa2, 0xc8, 0x50, 0xcd, 0x89, - 0x02, 0xb3, 0xd5, 0xb7, 0x2d, 0xfb, 0x8c, 0x54, 0x06, 0x01, 0x73, 0x3f, 0xf7, 0x06, 0xc4, 0xbf, - 0x68, 0x59, 0xbe, 0xd5, 0x6b, 0xb0, 0xc3, 0xe9, 0x8f, 0x44, 0x72, 0x88, 0xaf, 0xfe, 0x6c, 0x32, - 0x75, 0xf5, 0x67, 0x53, 0x19, 0xbf, 0x48, 0x43, 0x41, 0x35, 0x2e, 0x2c, 0xc2, 0xb7, 0xbb, 0x0e, - 0xe1, 0x11, 0xbe, 0x16, 0x27, 0x55, 0x42, 0x0c, 0x47, 0x25, 0xe6, 0x8e, 0x45, 0xb9, 0x4d, 0x6c, - 0x9f, 0x84, 0x9f, 0x90, 0x44, 0x02, 0x57, 0xc1, 0x71, 0xa2, 0xc6, 0x4f, 0x10, 0xcc, 0x66, 0x32, - 0x53, 0xa9, 0xa4, 0x77, 0x42, 0x0c, 0x47, 0x25, 0xf4, 0x16, 0x64, 0x03, 0xdb, 0xeb, 0x13, 0x76, - 0x30, 0x48, 0x87, 0x67, 0x23, 0x81, 0x28, 0x2f, 0x27, 0x69, 0x10, 0x81, 0x55, 0xe2, 0x76, 0xfa, - 0x9e, 0xe3, 0x52, 0xfe, 0x76, 0x22, 0xfa, 0xff, 0x92, 0x83, 0xe9, 0x86, 0x54, 0x90, 0x62, 0x92, - 0x55, 0x11, 0x3f, 0x26, 0x34, 0xe9, 0xd6, 0xb2, 0xcf, 0xce, 0xad, 0xa9, 0x1e, 0x64, 0xe9, 0x72, - 0x1e, 0xc4, 0xf8, 0x99, 0x06, 0x79, 0x45, 0xdd, 0xd9, 0x84, 0x09, 0x57, 0x2f, 0x17, 0x8e, 0x4f, - 0x98, 0x40, 0xd4, 0x09, 0x13, 0x08, 0xa3, 0xf6, 0xc5, 0x86, 0x4a, 0xc5, 0xd4, 0xfe, 0xf8, 0x96, - 0x90, 0x34, 0xe8, 0x37, 0xa1, 0x60, 0x31, 0x07, 0xbf, 0xef, 0x04, 0x01, 0x3b, 0x02, 0x89, 0x7c, - 0x10, 0xf7, 0x44, 0x2a, 0xae, 0x7a, 0x22, 0x15, 0x37, 0xfe, 0x56, 0x83, 0xd5, 0x5a, 0xa3, 0x8d, - 0xf1, 0x21, 0xb3, 0xa6, 0x16, 0xf5, 0x7c, 0xe6, 0x9c, 0xc4, 0x7e, 0x4b, 0x6e, 0x6f, 0x2d, 0x76, - 0x4e, 0x53, 0x9a, 0x55, 0xe7, 0x34, 0xa5, 0x19, 0x7d, 0x0f, 0x9e, 0x8f, 0xfc, 0x48, 0x52, 0x6e, - 0x8a, 0xcb, 0x7d, 0x6d, 0x34, 0x2c, 0x6d, 0x4c, 0xa7, 0x50, 0x44, 0xcf, 0x90, 0x61, 0xfc, 0x45, - 0x16, 0xf2, 0xca, 0x41, 0xea, 0xd7, 0x35, 0xca, 0x36, 0x20, 0x1b, 0x10, 0xff, 0x11, 0xf1, 0xe5, - 0x0e, 0x13, 0xb9, 0x66, 0x8e, 0x60, 0xf9, 0x44, 0x37, 0x20, 0xd3, 0xf7, 0x7c, 0x11, 0x44, 0x2f, - 0x8a, 0x54, 0x17, 0xab, 0x63, 0xfe, 0x8b, 0xda, 0x00, 0x3e, 0xb1, 0x3d, 0xbf, 0x63, 0x5e, 0xf4, - 0xc5, 0x09, 0x6e, 0x75, 0xd6, 0xc1, 0xbc, 0xe6, 0x06, 0x38, 0x22, 0x15, 0x1f, 0x9b, 0x62, 0x56, - 0xac, 0x94, 0xd1, 0x5d, 0xae, 0xe3, 0xd4, 0xb3, 0xbd, 0xae, 0x4c, 0x94, 0xcf, 0x3e, 0xab, 0xb6, - 0x24, 0xa1, 0x4c, 0xe9, 0xca, 0x1a, 0x8e, 0x4a, 0xe8, 0x37, 0x20, 0xcf, 0x1d, 0x33, 0x16, 0xb1, - 0xc1, 0x63, 0xa1, 0x36, 0xdc, 0xc2, 0x2a, 0xb8, 0x6a, 0x61, 0x15, 0x18, 0xb9, 0xb0, 0xfa, 0x48, - 0x28, 0x22, 0x29, 0xbb, 0xc1, 0x27, 0xc4, 0x17, 0x71, 0x49, 0x7e, 0x56, 0x1a, 0x38, 0xa9, 0xba, - 0x4a, 0xd0, 0x10, 0x09, 0xc0, 0xb8, 0xad, 0x9a, 0x8d, 0x64, 0x23, 0xfa, 0x44, 0x46, 0x20, 0x0c, - 0x19, 0xd0, 0x33, 0xe6, 0x0f, 0x2e, 0x58, 0x3c, 0x73, 0xf9, 0x2e, 0x8d, 0xd1, 0xb0, 0xb4, 0x3e, - 0x21, 0x23, 0xd9, 0xeb, 0x64, 0x1f, 0xe8, 0x53, 0x40, 0x11, 0xd8, 0xe9, 0x38, 0xd4, 0xf1, 0x5c, - 0xab, 0xcb, 0x62, 0x9f, 0xcb, 0xf7, 0xfc, 0xea, 0x68, 0x58, 0x2a, 0x4d, 0x0a, 0x49, 0x76, 0x3d, - 0xa5, 0x17, 0xe3, 0xb3, 0x34, 0xe4, 0x95, 0x74, 0xc1, 0xaf, 0xeb, 0x6e, 0x79, 0x15, 0xd2, 0x54, - 0x7e, 0x44, 0x5b, 0x96, 0x29, 0x8d, 0x6e, 0x22, 0x35, 0x42, 0xbb, 0x63, 0x76, 0x3f, 0xf3, 0xec, - 0xec, 0x7e, 0x0f, 0x56, 0x3e, 0x66, 0x1e, 0x39, 0xbc, 0xf5, 0x20, 0xbd, 0xd6, 0x8c, 0x5c, 0x86, - 0x59, 0x6d, 0xdd, 0x53, 0xa9, 0x2b, 0x25, 0xe9, 0xc0, 0x5e, 0x48, 0x08, 0x51, 0xba, 0x4a, 0x4a, - 0x37, 0x7e, 0x47, 0x03, 0x7d, 0x5c, 0x08, 0x33, 0x05, 0x01, 0x71, 0x85, 0xbb, 0x2f, 0x08, 0x53, - 0xc0, 0xea, 0x98, 0xff, 0x32, 0x63, 0x42, 0xce, 0xfb, 0xc4, 0x16, 0x0e, 0xbe, 0x20, 0x8c, 0x89, - 0x40, 0xb0, 0x7c, 0x32, 0xef, 0x15, 0x50, 0xcb, 0xa7, 0xe6, 0x5e, 0x5b, 0xce, 0xa3, 0x48, 0xb2, - 0x48, 0x2c, 0x91, 0x64, 0x91, 0x98, 0xf1, 0xd7, 0x29, 0xc8, 0x45, 0x73, 0x85, 0x5a, 0x80, 0x1c, - 0x37, 0x20, 0xf6, 0xc0, 0x27, 0xed, 0x87, 0x7c, 0x91, 0x9d, 0x93, 0x0b, 0xf9, 0x11, 0x77, 0x63, - 0x34, 0x2c, 0xdd, 0x98, 0x6c, 0x55, 0xb5, 0x6f, 0xb2, 0x95, 0xf9, 0xb7, 0x6a, 0xb9, 0x4a, 0xfc, - 0x70, 0xdc, 0xdc, 0xbf, 0xd9, 0x16, 0x43, 0x54, 0xff, 0x26, 0x68, 0xd0, 0xb7, 0x00, 0x44, 0x98, - 0xc2, 0x39, 0xd2, 0x9c, 0x83, 0x27, 0xa2, 0x62, 0x54, 0x4d, 0x44, 0xc5, 0x28, 0x7a, 0x17, 0x72, - 0xa2, 0x76, 0x97, 0x88, 0xa3, 0x75, 0x41, 0x2c, 0x7c, 0x04, 0xaa, 0x0b, 0x1f, 0x81, 0xac, 0x43, - 0x61, 0x89, 0x79, 0x4c, 0xb7, 0xc8, 0x35, 0x97, 0x77, 0x18, 0xa3, 0x6a, 0x87, 0x31, 0x6a, 0x04, - 0x90, 0x8b, 0x8e, 0xb6, 0x6c, 0xe6, 0xa3, 0xaf, 0x65, 0x5a, 0x1c, 0x37, 0x84, 0x98, 0x3a, 0xf3, - 0xd1, 0x77, 0xb3, 0x6d, 0xe5, 0xbb, 0x59, 0x4a, 0x89, 0x35, 0x24, 0x96, 0x88, 0x35, 0xc2, 0x2f, - 0x68, 0xff, 0xa2, 0x01, 0x9a, 0xcc, 0xd5, 0xa1, 0x9b, 0xb0, 0xd4, 0xb3, 0xce, 0x77, 0xbc, 0x7e, - 0xf8, 0xf1, 0x9b, 0x67, 0x79, 0x25, 0x84, 0xc3, 0x02, 0x7a, 0x1f, 0x56, 0x7b, 0xd6, 0xf9, 0x81, - 0xfb, 0xd0, 0xf5, 0x3e, 0x71, 0x39, 0xb5, 0x48, 0x1e, 0xf3, 0x1c, 0x44, 0xb2, 0x05, 0x8f, 0xd5, - 0xd1, 0x9b, 0x90, 0xeb, 0x53, 0x7f, 0xcf, 0xf3, 0x1e, 0x0e, 0xfa, 0x52, 0xb9, 0xb8, 0x51, 0x88, - 0x40, 0x1c, 0x17, 0xd1, 0x2d, 0x80, 0x33, 0xaf, 0x6f, 0xca, 0xc4, 0xb3, 0xf8, 0x18, 0xc2, 0x5d, - 0x52, 0x8c, 0x62, 0xa5, 0x6c, 0xbc, 0x07, 0xfa, 0x78, 0x7e, 0x90, 0x7b, 0x4f, 0x8e, 0xc9, 0x0d, - 0x21, 0xbc, 0x27, 0x47, 0xb0, 0x7c, 0x1a, 0x7f, 0xaa, 0xc1, 0xd5, 0x89, 0xdc, 0x1f, 0xba, 0x0b, - 0x4b, 0xc4, 0xa5, 0xbe, 0x43, 0xc2, 0xcf, 0x79, 0xaf, 0x7d, 0x49, 0xd6, 0xb0, 0xee, 0x52, 0xff, - 0x22, 0xfc, 0xc2, 0xc2, 0x19, 0x71, 0x58, 0x40, 0x55, 0x28, 0x74, 0xbd, 0xe8, 0x36, 0x94, 0x98, - 0xb1, 0x65, 0xe1, 0x79, 0x14, 0xbc, 0xe2, 0x75, 0x9c, 0x84, 0x9b, 0x4b, 0x30, 0x19, 0x3f, 0x4f, - 0xc1, 0x6a, 0xb2, 0x37, 0xf4, 0x3d, 0x58, 0xf2, 0xc5, 0x37, 0x39, 0x99, 0xc7, 0x7e, 0xf3, 0x32, - 0x83, 0x94, 0x9f, 0xf1, 0x44, 0x02, 0x48, 0xf2, 0xab, 0x39, 0x26, 0x09, 0x21, 0x1b, 0xc0, 0x0a, - 0x02, 0xe2, 0x53, 0x7e, 0xc6, 0x16, 0x1f, 0x22, 0xff, 0xdf, 0x65, 0x3a, 0x28, 0x87, 0x5c, 0x72, - 0xa3, 0xf2, 0x8f, 0x9a, 0xea, 0x0e, 0x88, 0xc5, 0x22, 0x1b, 0x72, 0x8f, 0x2c, 0xdf, 0xb1, 0x8e, - 0xbb, 0x44, 0xe4, 0xbe, 0xf2, 0xdb, 0x6f, 0x5d, 0xa6, 0x8f, 0x43, 0xc9, 0x24, 0x36, 0x68, 0x24, - 0x42, 0xdd, 0xa0, 0x11, 0x68, 0xdc, 0x05, 0x60, 0x8c, 0x22, 0xc0, 0xfe, 0xaa, 0x5f, 0x06, 0xef, - 0x02, 0x70, 0x9b, 0x7b, 0xdb, 0x21, 0xdd, 0xce, 0x57, 0x15, 0xf6, 0xdf, 0x29, 0x78, 0x6e, 0xea, - 0xea, 0x28, 0x89, 0x45, 0xed, 0x2b, 0x24, 0x16, 0xe7, 0x7c, 0x9c, 0xbf, 0x97, 0xcc, 0x39, 0xe6, - 0xe7, 0xf5, 0x20, 0x66, 0xee, 0x4b, 0xb3, 0x92, 0xdf, 0x87, 0xfc, 0xc7, 0xd1, 0xd4, 0x88, 0xb3, - 0xde, 0x4c, 0xb1, 0xf1, 0x1c, 0x8a, 0x48, 0x4f, 0x61, 0x54, 0x23, 0x3d, 0x05, 0x46, 0xfb, 0x32, - 0xe9, 0x29, 0xbe, 0x42, 0xdc, 0x9c, 0x3d, 0xdc, 0x50, 0xc3, 0xbd, 0xce, 0xc5, 0xec, 0xdc, 0xa8, - 0xf1, 0x57, 0x1a, 0x5c, 0x19, 0xa3, 0x46, 0xdf, 0x80, 0xbc, 0xed, 0xb9, 0x94, 0xb8, 0x94, 0x47, - 0xcb, 0x62, 0x55, 0x79, 0x82, 0x59, 0x81, 0xb1, 0x5a, 0x61, 0xc1, 0x8b, 0xac, 0xd6, 0x5d, 0xdb, - 0xeb, 0xb0, 0x13, 0x95, 0x12, 0xbc, 0x8c, 0x35, 0xa9, 0xc1, 0xcb, 0x58, 0x13, 0x33, 0xc0, 0x32, - 0x45, 0x2e, 0x9d, 0x16, 0x37, 0x26, 0x12, 0xc2, 0x61, 0xc1, 0xf8, 0xcb, 0x34, 0xbc, 0x30, 0x63, - 0xbf, 0xa1, 0x26, 0x64, 0x68, 0x38, 0xee, 0xd5, 0xed, 0x6f, 0x3c, 0xd5, 0x66, 0xe5, 0x31, 0x3f, - 0x57, 0x60, 0x26, 0x02, 0xf3, 0x5f, 0xd4, 0x85, 0xa5, 0x60, 0x70, 0xfc, 0x51, 0x18, 0x32, 0xac, - 0x6e, 0x7f, 0xfb, 0xa9, 0x64, 0xb6, 0x05, 0x2f, 0xdf, 0xac, 0xae, 0xb4, 0x38, 0x52, 0x9e, 0xaa, - 0x3f, 0x12, 0x42, 0x14, 0x72, 0xb6, 0xe7, 0x8a, 0xa0, 0x93, 0xcf, 0xc1, 0xea, 0xf6, 0x77, 0x9e, - 0xaa, 0xbf, 0x6a, 0xc8, 0x1d, 0xf6, 0x28, 0xdc, 0x77, 0x88, 0x26, 0xdc, 0x77, 0x08, 0x32, 0xf7, - 0x4d, 0xce, 0xa3, 0x5c, 0x50, 0x26, 0x76, 0xdf, 0x31, 0xaa, 0x1a, 0xaf, 0x18, 0x45, 0x6f, 0x84, - 0xdb, 0x5b, 0xf8, 0x7c, 0x7e, 0x6b, 0x8b, 0x03, 0x0a, 0xbd, 0xdc, 0xe8, 0x3f, 0x4c, 0xc1, 0xf3, - 0xd3, 0x2d, 0x18, 0x6a, 0x24, 0x16, 0xed, 0xeb, 0x4f, 0x63, 0xfd, 0xa6, 0xae, 0xd9, 0xeb, 0xd2, - 0x24, 0xa5, 0xe2, 0x6f, 0x03, 0x63, 0xf1, 0x83, 0x30, 0x4e, 0xc9, 0xf7, 0x4e, 0x3f, 0xc5, 0x7b, - 0xbf, 0x0b, 0x39, 0x8b, 0x52, 0xdf, 0x39, 0x1e, 0xc8, 0x0b, 0x5a, 0x39, 0x31, 0xd1, 0x11, 0xa8, - 0x4e, 0x74, 0x04, 0x1a, 0x3f, 0x49, 0x41, 0x41, 0xfd, 0x14, 0xf6, 0x8c, 0x4f, 0x11, 0x6f, 0xc3, - 0x12, 0x0b, 0xad, 0x1c, 0x3b, 0x7c, 0x75, 0xa1, 0x6e, 0x02, 0x4a, 0xa8, 0x9b, 0x80, 0xfe, 0x4f, - 0x4f, 0x0b, 0xc6, 0x2f, 0x34, 0xb8, 0x82, 0xf9, 0x15, 0x57, 0x93, 0x74, 0x49, 0x8f, 0x30, 0x7f, - 0xbe, 0x09, 0xcb, 0x8e, 0x1b, 0x50, 0x2b, 0xbc, 0x26, 0x2d, 0x13, 0x6a, 0x21, 0x86, 0xa3, 0x12, - 0xa3, 0x14, 0xf7, 0x63, 0xe5, 0xc7, 0xfb, 0x45, 0x41, 0x19, 0x62, 0x38, 0x2a, 0x21, 0x0c, 0x39, - 0x1a, 0x76, 0x20, 0x0d, 0xfd, 0xcd, 0x79, 0x37, 0x6b, 0xa2, 0xd1, 0x88, 0x99, 0x8e, 0x78, 0x71, - 0x5c, 0x34, 0x7e, 0x5f, 0x83, 0x2b, 0x63, 0xd4, 0x89, 0xeb, 0x04, 0xda, 0xdc, 0xeb, 0x04, 0x87, - 0xea, 0x88, 0x44, 0x58, 0xf1, 0xc6, 0xbc, 0xbb, 0x52, 0x5d, 0x2b, 0x08, 0x2e, 0x33, 0xaa, 0x1f, - 0xa7, 0xe0, 0xda, 0x14, 0x0e, 0xd4, 0x02, 0xb0, 0x23, 0x78, 0xbe, 0x37, 0x8d, 0xd9, 0x45, 0xa8, - 0x19, 0xf3, 0x61, 0xa5, 0xcc, 0x42, 0x53, 0x72, 0x4e, 0xec, 0x41, 0x18, 0x19, 0xb1, 0xf9, 0xe7, - 0xf4, 0x31, 0x8a, 0x95, 0x32, 0x9b, 0x9b, 0xce, 0x40, 0x5e, 0x51, 0x4b, 0xc7, 0x77, 0xb0, 0x43, - 0x0c, 0x47, 0x25, 0x54, 0x85, 0xab, 0x81, 0xd5, 0xeb, 0x77, 0x49, 0xa7, 0x1e, 0x77, 0x20, 0xf2, - 0x3a, 0x42, 0x9b, 0xc7, 0x1b, 0xf1, 0x24, 0x64, 0x3c, 0x80, 0xe7, 0x5a, 0x83, 0xe0, 0x2c, 0x9a, - 0x81, 0xe8, 0x74, 0xf8, 0xdd, 0xe8, 0x72, 0xa3, 0x76, 0x89, 0x1b, 0xeb, 0x53, 0xae, 0x35, 0x6e, - 0x0d, 0x00, 0xe2, 0xaf, 0x31, 0x28, 0x0b, 0xa9, 0xe6, 0x5d, 0x7d, 0x01, 0xad, 0x40, 0xae, 0xd1, - 0x34, 0x8f, 0x6e, 0x37, 0x0f, 0x1a, 0x35, 0x5d, 0x43, 0xd7, 0x41, 0xdf, 0x6d, 0x1c, 0x96, 0xf7, - 0x76, 0x6b, 0x47, 0x65, 0x7c, 0xe7, 0x60, 0xbf, 0xde, 0x30, 0xf5, 0x14, 0x42, 0xb0, 0x5a, 0xde, - 0xc3, 0xf5, 0x72, 0xed, 0xc1, 0x51, 0xfd, 0xfe, 0x6e, 0xdb, 0x6c, 0xeb, 0x69, 0x86, 0xed, 0x36, - 0xcc, 0x3a, 0x6e, 0x94, 0xf7, 0x8e, 0xea, 0x18, 0x37, 0xb1, 0x9e, 0x61, 0x18, 0x13, 0x56, 0x3e, - 0x30, 0x77, 0x9a, 0x78, 0xf7, 0xc3, 0x7a, 0x4d, 0x5f, 0xdc, 0xda, 0x0c, 0xaf, 0xea, 0xca, 0xff, - 0x06, 0x00, 0x64, 0xcb, 0x55, 0x73, 0xf7, 0xb0, 0xae, 0x2f, 0xa0, 0x02, 0x2c, 0xd7, 0x76, 0xdb, - 0xe5, 0xca, 0x5e, 0xbd, 0xa6, 0x6b, 0x5b, 0x55, 0x58, 0x4d, 0xde, 0xf3, 0x63, 0x83, 0xab, 0xee, - 0xd4, 0xab, 0x77, 0x8f, 0xca, 0xb5, 0x9a, 0xbe, 0x80, 0x74, 0x28, 0x88, 0xea, 0x41, 0xab, 0x56, - 0x36, 0xeb, 0xba, 0x16, 0x23, 0xb5, 0xfa, 0x5e, 0xdd, 0xac, 0xeb, 0xa9, 0x2d, 0x5b, 0xc4, 0x8b, - 0x22, 0xae, 0x42, 0x4b, 0x90, 0xbe, 0x53, 0x37, 0xf5, 0x05, 0x94, 0x87, 0xa5, 0x6a, 0xb3, 0xd1, - 0xa8, 0x57, 0x4d, 0x5d, 0x63, 0x43, 0x08, 0xe9, 0xd1, 0x32, 0x64, 0x76, 0xea, 0xe5, 0x9a, 0x9e, - 0x66, 0x24, 0xcd, 0x96, 0xb9, 0xdb, 0x6c, 0xb4, 0xf5, 0x0c, 0x83, 0x5b, 0xcd, 0xb6, 0xa9, 0x2f, - 0x32, 0x11, 0xad, 0x03, 0x53, 0xcf, 0xa2, 0x1c, 0x2c, 0x9a, 0xb8, 0x5c, 0xad, 0xeb, 0x4b, 0x5b, - 0x67, 0xb0, 0x92, 0xc8, 0xb7, 0x31, 0xa2, 0x72, 0xe3, 0x81, 0xbe, 0x80, 0x16, 0x41, 0x2b, 0xeb, - 0x1a, 0x63, 0x2f, 0x97, 0xcb, 0x65, 0x3d, 0xc5, 0xb8, 0xaa, 0x8d, 0xf2, 0x7e, 0x5d, 0x4f, 0xb3, - 0x29, 0xdf, 0xbf, 0xaf, 0x67, 0xd8, 0xb3, 0xd1, 0x96, 0x92, 0x4d, 0xac, 0x67, 0x59, 0xa1, 0xdd, - 0x2c, 0xeb, 0x4b, 0xbc, 0x80, 0x0f, 0xf5, 0x65, 0x56, 0x30, 0xef, 0x9b, 0x7a, 0x6e, 0xab, 0xc4, - 0x33, 0x9d, 0x61, 0x1a, 0x8e, 0xe3, 0xd5, 0x96, 0xbe, 0xc0, 0x0a, 0x07, 0xb5, 0x96, 0xae, 0x6d, - 0xbd, 0x06, 0xb9, 0xc8, 0xc0, 0xf2, 0x61, 0xb8, 0x17, 0xfa, 0x02, 0xeb, 0xe2, 0xf0, 0x1d, 0x5d, - 0xe3, 0xcf, 0xf7, 0xf4, 0xd4, 0xd6, 0x3e, 0x5c, 0x9f, 0xf6, 0x29, 0x84, 0x8d, 0xd3, 0xf5, 0x5c, - 0x22, 0x96, 0xc2, 0xe9, 0x10, 0xfe, 0xaf, 0x18, 0x31, 0xfe, 0xd3, 0x4f, 0x9d, 0xbe, 0x9e, 0x62, - 0x12, 0x8e, 0x7d, 0x31, 0x3b, 0x1d, 0x72, 0xd2, 0xb5, 0x28, 0xd1, 0x33, 0x5b, 0x7d, 0x78, 0x69, - 0x4e, 0x24, 0xc2, 0xb8, 0xcd, 0xfa, 0x7d, 0x36, 0xed, 0xd7, 0xe0, 0xca, 0x07, 0xed, 0x66, 0xe3, - 0xa8, 0x55, 0x36, 0x77, 0x8e, 0x0e, 0xcb, 0x7b, 0x07, 0x6c, 0xd1, 0x5e, 0x80, 0x6b, 0x31, 0x58, - 0x6e, 0xb7, 0xeb, 0x98, 0xcd, 0xba, 0x9e, 0x62, 0xd4, 0xb8, 0x7e, 0xa7, 0x7e, 0x5f, 0x01, 0xd3, - 0x6b, 0x99, 0x3f, 0xfb, 0x93, 0xf5, 0x85, 0xad, 0x1f, 0x6a, 0x70, 0xf3, 0x52, 0x81, 0x0a, 0x13, - 0x52, 0xab, 0xdf, 0x2e, 0x1f, 0xec, 0x99, 0x47, 0xed, 0x83, 0xca, 0x07, 0x6c, 0xc5, 0x17, 0x98, - 0x5a, 0xe3, 0x7a, 0xbb, 0xd5, 0x6c, 0xb4, 0xeb, 0x47, 0x6c, 0xb9, 0xeb, 0xb8, 0x2d, 0x94, 0x7d, - 0xc7, 0x34, 0x5b, 0x47, 0x6d, 0xb3, 0x6c, 0x1e, 0xb4, 0x8f, 0xaa, 0xcd, 0x1a, 0xd3, 0x88, 0xab, - 0xb0, 0x12, 0xd1, 0x56, 0x9a, 0xb5, 0x07, 0xd1, 0x18, 0xfe, 0x48, 0x83, 0xaf, 0x5d, 0x32, 0x78, - 0x41, 0xcf, 0xc1, 0xd5, 0x70, 0x14, 0xd5, 0x66, 0xa3, 0xb6, 0xcb, 0x5f, 0x86, 0x6b, 0x30, 0xdb, - 0x20, 0xd5, 0x66, 0xc3, 0x2c, 0xef, 0x36, 0xda, 0x42, 0x17, 0xeb, 0xf7, 0x0e, 0xca, 0x7b, 0x6d, - 0x3d, 0x85, 0xae, 0x40, 0xbe, 0x6d, 0x96, 0xb1, 0xd9, 0x3e, 0xfa, 0xad, 0x5d, 0x73, 0x47, 0x4f, - 0x33, 0xfd, 0xaf, 0x37, 0x6a, 0xb2, 0x9a, 0x61, 0x6b, 0x60, 0x3e, 0x68, 0xd5, 0x8f, 0x9a, 0xb7, - 0xf5, 0x45, 0xb6, 0x60, 0x91, 0x98, 0xac, 0x1c, 0x61, 0x03, 0xd6, 0x66, 0x07, 0x1b, 0x4c, 0x5a, - 0x34, 0xef, 0xfa, 0x02, 0xd3, 0x4c, 0x3e, 0xdb, 0x72, 0x1b, 0xb5, 0xdb, 0x47, 0xed, 0xfa, 0x5e, - 0xbd, 0x6a, 0x36, 0xb1, 0x9e, 0x92, 0xf2, 0x36, 0x01, 0x62, 0xb3, 0xca, 0x7a, 0x6c, 0xe1, 0xa6, - 0xd9, 0xac, 0x36, 0xf7, 0x84, 0xc2, 0xb4, 0xab, 0x78, 0xb7, 0x65, 0xb2, 0xbd, 0xbb, 0xfd, 0xbb, - 0x29, 0xc8, 0xca, 0x9b, 0xf1, 0xdf, 0x87, 0x95, 0xc4, 0x7f, 0x75, 0x50, 0x69, 0xce, 0xdf, 0x0e, - 0x76, 0xdd, 0x13, 0x6f, 0xed, 0x8d, 0x59, 0x37, 0xc4, 0x27, 0xfe, 0xf1, 0x63, 0x2c, 0xa0, 0x7b, - 0x00, 0x77, 0x08, 0x0d, 0x6f, 0xee, 0x6e, 0xcc, 0x91, 0xcd, 0xff, 0x81, 0xb6, 0xf6, 0xf2, 0x2c, - 0x77, 0xc1, 0x05, 0x18, 0x0b, 0x5f, 0xd7, 0x58, 0xe8, 0xdd, 0x62, 0x51, 0xfc, 0x2b, 0xb3, 0xaf, - 0x92, 0xc9, 0x83, 0xc6, 0xda, 0xac, 0xdb, 0x66, 0xca, 0x3f, 0xa6, 0x8c, 0x85, 0xed, 0xbf, 0xd1, - 0x20, 0x1f, 0x5f, 0xe3, 0xfb, 0x5f, 0x9f, 0x12, 0x13, 0x56, 0xef, 0x10, 0xaa, 0x76, 0xb8, 0x36, - 0x9d, 0xfd, 0xd0, 0x73, 0x3a, 0xb3, 0x5e, 0x41, 0xbd, 0x26, 0xcc, 0x66, 0x65, 0xfb, 0x3e, 0x2c, - 0x99, 0xf2, 0x2e, 0xf2, 0x3e, 0xe4, 0xee, 0x10, 0x2a, 0xff, 0x79, 0xb0, 0x31, 0x2f, 0x04, 0xe1, - 0x83, 0x9f, 0x7b, 0xfd, 0xd7, 0x58, 0xd8, 0xf6, 0x21, 0x17, 0xbb, 0x78, 0x02, 0x2b, 0x09, 0x8f, - 0x87, 0x6e, 0xce, 0x7e, 0x75, 0x25, 0xe0, 0x5a, 0x9b, 0x91, 0x2f, 0x99, 0xea, 0x3d, 0x8d, 0x85, - 0xca, 0x7b, 0x8f, 0xff, 0x7d, 0x7d, 0xe1, 0xf1, 0x93, 0x75, 0xed, 0xf3, 0x27, 0xeb, 0xda, 0xbf, - 0x3d, 0x59, 0xd7, 0xfe, 0xf3, 0xc9, 0xfa, 0xc2, 0x67, 0x5f, 0xac, 0x2f, 0x7c, 0xfe, 0xc5, 0xfa, - 0xc2, 0xbf, 0x7e, 0xb1, 0xbe, 0xf0, 0xe1, 0xd4, 0x7f, 0x3b, 0x1e, 0x67, 0xf9, 0xa7, 0x8e, 0xff, - 0xff, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb8, 0xe9, 0x8a, 0x50, 0x1a, 0x39, 0x00, 0x00, + // 4689 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5b, 0x4d, 0x8c, 0x23, 0xc7, + 0x75, 0x9e, 0x26, 0x39, 0x9c, 0xe1, 0x23, 0x77, 0xb6, 0xb7, 0x76, 0x25, 0x51, 0xa3, 0xf5, 0x72, + 0xd4, 0xd2, 0xca, 0xe3, 0x91, 0xbc, 0x6b, 0x4f, 0x24, 0xdb, 0x90, 0xe3, 0xc0, 0xfc, 0xdb, 0x9d, + 0xd1, 0xce, 0x90, 0xdc, 0x62, 0xcf, 0x64, 0x57, 0xb0, 0x3d, 0xe9, 0x69, 0xd6, 0x70, 0x5a, 0x4b, + 0x76, 0x53, 0xdd, 0xc5, 0xd5, 0x8c, 0x6e, 0x06, 0x0c, 0x23, 0x70, 0x10, 0x40, 0x40, 0x80, 0x00, + 0x39, 0xc5, 0x01, 0x12, 0x20, 0x4e, 0x8e, 0x09, 0x02, 0xfb, 0x9a, 0x5c, 0x36, 0x89, 0x93, 0xe8, + 0x90, 0x43, 0x4e, 0x44, 0xb2, 0x3a, 0x04, 0xe0, 0x29, 0x97, 0x1c, 0x72, 0x0b, 0xea, 0xa7, 0xbb, + 0xab, 0xf9, 0xa7, 0x59, 0x6b, 0x83, 0xf8, 0xc2, 0xae, 0xfa, 0xea, 0xbd, 0x57, 0xd5, 0x55, 0xaf, + 0xde, 0x7b, 0xf5, 0xba, 0x08, 0x05, 0xfb, 0x94, 0xd8, 0x8f, 0x82, 0x5b, 0x03, 0xdf, 0xa3, 0x1e, + 0xba, 0x16, 0x9c, 0xbb, 0xf4, 0x94, 0x50, 0xc7, 0x3e, 0xea, 0x7b, 0xae, 0x43, 0x3d, 0xdf, 0x71, + 0xbb, 0xeb, 0xd7, 0xba, 0x5e, 0xd7, 0xe3, 0x04, 0xb7, 0x59, 0x49, 0xd0, 0x1a, 0x59, 0xc8, 0x1c, + 0x7a, 0x4e, 0xc7, 0xf8, 0x13, 0x0d, 0xa0, 0xe5, 0x7b, 0xc7, 0xa4, 0x4d, 0x2d, 0x4a, 0xd0, 0x5d, + 0xc8, 0x0a, 0x91, 0x45, 0x6d, 0x23, 0xbd, 0x99, 0xdf, 0x2e, 0xdd, 0x9a, 0x25, 0xf3, 0x56, 0xdd, + 0xa5, 0x0e, 0x3d, 0xc7, 0xe4, 0xa4, 0xb2, 0xf6, 0x64, 0x54, 0x5a, 0x1a, 0x8f, 0x4a, 0x92, 0x0d, + 0xcb, 0x27, 0x7a, 0x0f, 0x56, 0x28, 0x71, 0x2d, 0x97, 0x06, 0xc5, 0xd4, 0xc5, 0x24, 0x5d, 0x96, + 0x92, 0x42, 0x3e, 0x1c, 0x16, 0x8c, 0x87, 0x90, 0x8b, 0xc8, 0xd0, 0x8b, 0x90, 0x72, 0x3a, 0x45, + 0x6d, 0x43, 0xdb, 0x4c, 0x57, 0xb2, 0xe3, 0x51, 0x29, 0xe5, 0x74, 0x70, 0xca, 0xe9, 0xa0, 0xb7, + 0xa1, 0xd0, 0xb3, 0x02, 0xba, 0xef, 0x75, 0x9c, 0x13, 0x87, 0x74, 0x8a, 0xa9, 0x0d, 0x6d, 0x53, + 0xab, 0xe8, 0xe3, 0x51, 0x29, 0x81, 0xe3, 0x44, 0xcd, 0xf8, 0xb1, 0x06, 0x39, 0xfe, 0xfa, 0xbb, + 0xee, 0x89, 0x87, 0x6e, 0xc2, 0xca, 0x21, 0xf1, 0x03, 0xc7, 0x73, 0x79, 0x07, 0xb9, 0x4a, 0x9e, + 0x8d, 0xe7, 0xb1, 0x80, 0x70, 0xd8, 0x86, 0x0c, 0xc8, 0x56, 0xbd, 0x7e, 0xdf, 0xa1, 0xbc, 0x93, + 0x5c, 0x05, 0xf8, 0xfb, 0x73, 0x04, 0xcb, 0x16, 0x74, 0x0b, 0xa0, 0x32, 0x74, 0x7a, 0x9d, 0x80, + 0x5a, 0xfd, 0x41, 0x31, 0xcd, 0xe9, 0xd6, 0xc6, 0xa3, 0x12, 0x1c, 0x47, 0x28, 0x56, 0x28, 0x8c, + 0x6f, 0x42, 0xbe, 0xe5, 0xb8, 0x5d, 0x4c, 0x3e, 0x1c, 0x92, 0x80, 0xa2, 0x4d, 0x58, 0x6d, 0xb3, + 0xa2, 0x6b, 0x13, 0xf9, 0xae, 0x85, 0xf1, 0xa8, 0xb4, 0x1a, 0x48, 0x0c, 0x47, 0xad, 0xc6, 0xb7, + 0xa0, 0xd0, 0xf2, 0x18, 0x63, 0x30, 0xf0, 0xdc, 0x80, 0x3c, 0x03, 0xe7, 0x03, 0xc8, 0xb2, 0x45, + 0x1f, 0x06, 0xe8, 0x6d, 0xc8, 0xd8, 0x5e, 0x47, 0xd0, 0xaf, 0x6d, 0x6f, 0xcc, 0x5e, 0x29, 0x41, + 0x5b, 0xf5, 0x3a, 0x04, 0x73, 0x6a, 0x54, 0x84, 0x95, 0x3e, 0x09, 0x02, 0xab, 0x4b, 0xc4, 0x3c, + 0xe0, 0xb0, 0x6a, 0xfc, 0x44, 0x83, 0xab, 0x98, 0x74, 0x9d, 0x80, 0x12, 0x9f, 0xcf, 0x2e, 0x26, + 0xc1, 0xb0, 0x47, 0xd1, 0x37, 0x61, 0x79, 0xc0, 0xaa, 0xbc, 0xa3, 0xfc, 0xf6, 0x2b, 0xb3, 0x3b, + 0xe2, 0x1c, 0x95, 0x0c, 0x53, 0x07, 0x2c, 0xe8, 0xd1, 0xbb, 0x90, 0x0d, 0x78, 0xf7, 0xbc, 0xa7, + 0xfc, 0xf6, 0xf5, 0x45, 0x43, 0x94, 0xac, 0x92, 0xc3, 0x78, 0x9a, 0x85, 0x65, 0x2e, 0x72, 0xae, + 0xea, 0x6c, 0xc2, 0xaa, 0x50, 0xb5, 0x5d, 0xa1, 0x36, 0x72, 0xca, 0x42, 0x0c, 0x47, 0x25, 0x74, + 0x1d, 0x32, 0xae, 0xd5, 0x27, 0x72, 0x3d, 0x57, 0xc7, 0xa3, 0x12, 0xaf, 0x63, 0xfe, 0xcb, 0xe4, + 0xf4, 0x2c, 0xea, 0xd0, 0x61, 0x87, 0x14, 0x33, 0x1b, 0xda, 0x66, 0x4a, 0xc8, 0x09, 0x31, 0x1c, + 0x95, 0xd0, 0x9b, 0x90, 0xeb, 0x79, 0x6e, 0x57, 0x90, 0x2e, 0x73, 0xd2, 0x4b, 0xe3, 0x51, 0x29, + 0x06, 0x71, 0x5c, 0x44, 0x55, 0xc8, 0xf6, 0xac, 0x63, 0xd2, 0x0b, 0x8a, 0x59, 0xbe, 0x93, 0xe6, + 0x4c, 0xdb, 0x1e, 0xa3, 0x89, 0xf7, 0xa3, 0x60, 0xc1, 0xf2, 0xc9, 0x74, 0xd6, 0x27, 0x5d, 0xa6, + 0xd9, 0x2b, 0xb1, 0xce, 0x0a, 0x04, 0xcb, 0x27, 0xa3, 0x19, 0x0c, 0x8f, 0x7b, 0x8e, 0x5d, 0x5c, + 0xdd, 0xd0, 0x36, 0x57, 0x05, 0x8d, 0x40, 0xb0, 0x7c, 0x32, 0x1a, 0xcf, 0xed, 0x39, 0x2e, 0x29, + 0xe6, 0x62, 0x1a, 0x81, 0x60, 0xf9, 0x64, 0x5b, 0x51, 0x94, 0xaa, 0xa7, 0x96, 0xdb, 0x25, 0x45, + 0x88, 0xb7, 0xa2, 0x8a, 0xe3, 0x44, 0x8d, 0x6d, 0x3e, 0xb9, 0xd3, 0x8a, 0xf9, 0x19, 0x9b, 0xef, + 0x71, 0xbc, 0xf9, 0xc4, 0x56, 0x2b, 0x16, 0xa6, 0x37, 0x9f, 0x1d, 0x6d, 0xbe, 0x78, 0x9b, 0x15, + 0x2f, 0xcd, 0xde, 0x7c, 0x71, 0x99, 0xd1, 0x77, 0xc8, 0xc0, 0x27, 0xb6, 0x45, 0x49, 0xa7, 0xb8, + 0xc6, 0x5f, 0x8c, 0xd3, 0xc7, 0x28, 0x56, 0xca, 0x6c, 0xa8, 0xb6, 0x4f, 0x38, 0x71, 0x87, 0xbf, + 0x1b, 0x1f, 0xaa, 0x84, 0x70, 0x58, 0x60, 0xfa, 0xd0, 0x0f, 0xcd, 0x11, 0xe1, 0x74, 0x5c, 0x1f, + 0x42, 0x0c, 0x47, 0x25, 0xf4, 0x03, 0x28, 0xd8, 0xd6, 0xc0, 0x3a, 0x76, 0x7a, 0x0e, 0x75, 0x48, + 0x50, 0x3c, 0xe1, 0x5a, 0xbe, 0xb9, 0x60, 0x7f, 0xdc, 0xaa, 0x2a, 0xf4, 0x62, 0x6e, 0x55, 0x09, + 0x38, 0x51, 0x5b, 0x3f, 0x82, 0x82, 0x4a, 0x8f, 0x9a, 0xf0, 0x42, 0xc7, 0x09, 0xac, 0xe3, 0x1e, + 0x69, 0xdb, 0xbe, 0x33, 0xa0, 0xa4, 0x53, 0x0d, 0xad, 0x3e, 0x7b, 0xf7, 0x97, 0xc7, 0xa3, 0xd2, + 0x6c, 0x02, 0x3c, 0x1b, 0x36, 0xae, 0x03, 0x98, 0x62, 0x93, 0x30, 0x3b, 0xba, 0x16, 0x6f, 0x34, + 0xb6, 0xc1, 0x8c, 0xff, 0xd6, 0xa0, 0x20, 0x9a, 0xf7, 0x9c, 0xbe, 0x43, 0x03, 0xa6, 0xff, 0x7d, + 0xeb, 0x4c, 0xe9, 0x33, 0x2d, 0xf4, 0x3f, 0x02, 0x71, 0x5c, 0x44, 0x55, 0xb8, 0xd2, 0xb7, 0xce, + 0x26, 0x06, 0x2a, 0xf6, 0xe9, 0x0b, 0xe3, 0x51, 0x69, 0xba, 0x11, 0x4f, 0x43, 0xe8, 0x3b, 0x70, + 0xb9, 0x6f, 0x9d, 0xed, 0x13, 0xea, 0x3b, 0xf6, 0x9e, 0xd8, 0x4d, 0x69, 0x2e, 0xe2, 0xea, 0x78, + 0x54, 0x9a, 0x6c, 0xc2, 0x93, 0x00, 0x53, 0xe9, 0xbe, 0x75, 0xb6, 0xe7, 0x75, 0x25, 0x6f, 0x86, + 0xf3, 0xf2, 0x69, 0x57, 0x71, 0x9c, 0xa8, 0x19, 0x3f, 0xcd, 0x40, 0x56, 0xbc, 0xf7, 0x5c, 0xdb, + 0x53, 0x82, 0x65, 0xcf, 0xef, 0x46, 0x86, 0x27, 0x37, 0x1e, 0x95, 0x04, 0x80, 0xc5, 0x03, 0x3d, + 0x84, 0x4b, 0x7d, 0x3e, 0x92, 0x00, 0x93, 0xbe, 0x47, 0x85, 0xed, 0xc9, 0xcf, 0x33, 0xd2, 0x82, + 0x86, 0x2d, 0x42, 0xe5, 0xca, 0x78, 0x54, 0x4a, 0xb2, 0xe2, 0x64, 0x15, 0x1d, 0x42, 0x81, 0x3c, + 0x26, 0xcc, 0xd5, 0x0a, 0xc9, 0x99, 0x0b, 0x4a, 0xe6, 0xaf, 0xad, 0x72, 0xe2, 0x44, 0x8d, 0x6d, + 0x8f, 0x80, 0x5a, 0xf6, 0xa3, 0xdd, 0x0e, 0xb7, 0x6d, 0x69, 0xb1, 0x3d, 0x24, 0x84, 0xc3, 0x02, + 0xba, 0x13, 0x19, 0xf5, 0x2c, 0xf7, 0x3b, 0xc6, 0xec, 0x8e, 0xc5, 0x04, 0x4a, 0xd3, 0xce, 0x77, + 0xbb, 0xe0, 0x0a, 0x0d, 0xbc, 0x30, 0x6d, 0x56, 0x30, 0x69, 0xda, 0x18, 0x82, 0xe5, 0x93, 0xf5, + 0xd5, 0xe3, 0xaa, 0xc7, 0x4d, 0x5b, 0x7e, 0x71, 0x5f, 0x42, 0x49, 0x85, 0x1c, 0xc1, 0x85, 0xe5, + 0xf3, 0xb9, 0xef, 0x7c, 0xe3, 0x8f, 0x34, 0x80, 0x78, 0x6a, 0x23, 0x07, 0xa3, 0xcd, 0x74, 0x30, + 0x2f, 0x43, 0x7a, 0xe8, 0xf7, 0x64, 0xd4, 0xb1, 0x32, 0x1e, 0x95, 0x58, 0x15, 0xb3, 0x1f, 0xd6, + 0xe3, 0x30, 0x20, 0xbe, 0xe2, 0x9d, 0x78, 0x8f, 0x21, 0x86, 0xa3, 0x12, 0xa3, 0x1c, 0x58, 0x41, + 0xf0, 0x91, 0xe7, 0x77, 0xf8, 0x8a, 0x4b, 0xca, 0x10, 0xc3, 0x51, 0x89, 0xb9, 0xf1, 0x3c, 0xdf, + 0x3e, 0xd2, 0x42, 0x57, 0x20, 0xe7, 0x0d, 0x88, 0x6f, 0xd1, 0x30, 0x40, 0x5a, 0xdb, 0x7e, 0x7d, + 0xf6, 0x3c, 0x72, 0xae, 0x66, 0x48, 0x8b, 0x63, 0x36, 0x16, 0x02, 0xf0, 0x08, 0x51, 0x3a, 0xf2, + 0x57, 0x16, 0xf0, 0x87, 0x21, 0x00, 0xa7, 0x37, 0x9e, 0x6a, 0xb0, 0x22, 0xc6, 0x11, 0xa0, 0xdd, + 0x89, 0x28, 0xf5, 0xd5, 0x05, 0x52, 0x04, 0xcf, 0xdc, 0x38, 0xf5, 0xee, 0x64, 0x9c, 0x7a, 0x7d, + 0x91, 0x66, 0xcc, 0x0f, 0x52, 0x99, 0x95, 0x72, 0x82, 0x1a, 0xe9, 0x51, 0xeb, 0x8e, 0xe3, 0x07, + 0xb4, 0x62, 0x51, 0xfb, 0x94, 0xaf, 0xc4, 0xaa, 0xb0, 0x52, 0x53, 0x8d, 0x78, 0x1a, 0x32, 0xfe, + 0x42, 0x83, 0x42, 0xb9, 0xb3, 0xe3, 0xd9, 0x61, 0x1c, 0x68, 0x02, 0x58, 0xac, 0xce, 0x5f, 0x45, + 0x86, 0x4d, 0x73, 0x36, 0x68, 0x39, 0xa2, 0xab, 0x20, 0x39, 0x4a, 0x85, 0x17, 0x2b, 0x65, 0x54, + 0x83, 0xac, 0x18, 0xf6, 0xe2, 0x70, 0x4a, 0xbe, 0x33, 0x9b, 0x3a, 0x8d, 0x4d, 0x9d, 0xe0, 0xc1, + 0xf2, 0x69, 0xdc, 0x81, 0x65, 0x6e, 0xe7, 0x3e, 0x47, 0x69, 0x4b, 0xb0, 0xfc, 0xd8, 0xea, 0x0d, + 0x65, 0x90, 0x28, 0x2c, 0x1c, 0x07, 0xb0, 0x78, 0x18, 0x3f, 0x5f, 0x86, 0x65, 0x31, 0xae, 0x2f, + 0x1e, 0xa0, 0xbd, 0x09, 0xb9, 0x13, 0x5f, 0x04, 0xb8, 0xe7, 0xd2, 0xc0, 0x73, 0xc7, 0x12, 0x81, + 0x38, 0x2e, 0xf2, 0x58, 0xe6, 0xe4, 0x24, 0x20, 0x54, 0x9a, 0x73, 0x11, 0xcb, 0x70, 0x04, 0xcb, + 0x27, 0xdb, 0xf0, 0xd4, 0xe9, 0x13, 0x6f, 0x48, 0x55, 0x5b, 0x26, 0x21, 0x1c, 0x16, 0x18, 0x19, + 0x71, 0x99, 0x5f, 0xec, 0x70, 0x63, 0xb6, 0x2a, 0xc8, 0x24, 0x84, 0xc3, 0x82, 0x12, 0xca, 0xad, + 0xfc, 0xea, 0xa1, 0xdc, 0x7d, 0x58, 0x0d, 0x08, 0xa5, 0x8e, 0xdb, 0x0d, 0xad, 0xd9, 0x6b, 0x0b, + 0xf4, 0xbf, 0x2d, 0x49, 0x2b, 0xba, 0x14, 0x17, 0x31, 0xe3, 0xa8, 0xc4, 0x23, 0x3f, 0x16, 0x55, + 0x04, 0xc5, 0xdc, 0x46, 0x3a, 0x9c, 0x09, 0x81, 0x60, 0xf9, 0x64, 0x34, 0xd4, 0xf2, 0xbb, 0x84, + 0xf2, 0x78, 0x4e, 0x9a, 0x59, 0x81, 0x60, 0xf9, 0x64, 0x06, 0xea, 0x03, 0xef, 0x58, 0xc6, 0x6f, + 0xdc, 0x40, 0x7d, 0xe0, 0x1d, 0x63, 0xf6, 0x83, 0xbe, 0x0b, 0xfa, 0xb1, 0x15, 0x38, 0xb6, 0x70, + 0xab, 0x41, 0xd3, 0xed, 0x9d, 0xf3, 0x08, 0x6e, 0xb5, 0x72, 0x6d, 0x3c, 0x2a, 0x4d, 0xb5, 0xe1, + 0x29, 0x84, 0x49, 0xb0, 0x7a, 0xc4, 0xa7, 0x6d, 0xe2, 0x06, 0x0e, 0x75, 0x1e, 0x3b, 0xf4, 0x5c, + 0xc6, 0x76, 0x5c, 0xc2, 0x64, 0x1b, 0x9e, 0x42, 0x9e, 0xbf, 0xf5, 0xfe, 0x24, 0x05, 0x10, 0xef, + 0x3b, 0x45, 0x7f, 0x73, 0xbf, 0xa2, 0xfe, 0x2a, 0xea, 0x96, 0x5e, 0xa0, 0x6e, 0xaa, 0x0a, 0x64, + 0x9e, 0xb7, 0x0a, 0x2c, 0x5f, 0x40, 0x05, 0xb2, 0xf3, 0x54, 0xc0, 0xf8, 0xd9, 0x32, 0x5c, 0x4a, + 0xf4, 0x8a, 0xde, 0x83, 0xcc, 0xc0, 0x71, 0xbb, 0xd2, 0x7a, 0xcd, 0xf1, 0xbc, 0xec, 0xf0, 0x1b, + 0x8d, 0x13, 0x8d, 0x47, 0xa5, 0x35, 0xc6, 0xf3, 0x96, 0xd7, 0x77, 0x28, 0xe9, 0x0f, 0xe8, 0x39, + 0xe6, 0x32, 0x98, 0xac, 0x53, 0x4a, 0x07, 0xd2, 0x6e, 0xcd, 0x91, 0xb5, 0x43, 0xe9, 0x20, 0x29, + 0x8b, 0xf1, 0xa8, 0xb2, 0x58, 0x1d, 0xdd, 0x81, 0x74, 0xc7, 0x0d, 0x64, 0x3c, 0x35, 0xc7, 0x85, + 0xd4, 0xdc, 0x20, 0x92, 0xc4, 0x03, 0xaa, 0x8e, 0x1b, 0x28, 0x82, 0x98, 0x00, 0x26, 0x87, 0xda, + 0x03, 0xb9, 0x0e, 0x73, 0xe4, 0x98, 0xf6, 0x20, 0x29, 0x87, 0xda, 0xea, 0x80, 0x98, 0x00, 0x74, + 0x0c, 0x40, 0x7d, 0xcb, 0x26, 0xbe, 0x37, 0xa4, 0xe2, 0x54, 0x38, 0xf7, 0x08, 0x60, 0x46, 0x74, + 0x91, 0xd4, 0xe2, 0x78, 0x54, 0xba, 0x16, 0xf3, 0x2b, 0xc2, 0x15, 0xa9, 0xe8, 0x7d, 0x58, 0x0d, + 0x64, 0x60, 0xcc, 0xd7, 0x30, 0xbf, 0xfd, 0xc6, 0x9c, 0xa3, 0xb4, 0xa4, 0x8a, 0xe4, 0xbf, 0x38, + 0x1e, 0x95, 0x50, 0xc8, 0xab, 0x48, 0x8f, 0xe4, 0xa1, 0x1f, 0x40, 0xae, 0x3f, 0xec, 0x51, 0x87, + 0x2f, 0xd0, 0x0a, 0x17, 0xfe, 0xe5, 0xd9, 0xc2, 0xf7, 0x19, 0x59, 0x62, 0x95, 0x5e, 0x1a, 0x8f, + 0x4a, 0x57, 0x23, 0x6e, 0x45, 0x7c, 0x2c, 0x92, 0xad, 0x7d, 0xd7, 0x1f, 0xd8, 0x8b, 0x23, 0xb8, + 0xbb, 0xfe, 0xc0, 0x4e, 0xae, 0x3d, 0xe3, 0x51, 0xd7, 0x9e, 0xd5, 0xdf, 0xcd, 0x3c, 0xf9, 0x69, + 0x49, 0x33, 0x7e, 0x99, 0x82, 0x82, 0xaa, 0x78, 0x68, 0x0f, 0x72, 0xce, 0x40, 0x4d, 0x01, 0xad, + 0xcd, 0xcb, 0x5b, 0xed, 0x86, 0x64, 0xc2, 0xbf, 0x44, 0x5c, 0x38, 0x2e, 0xa2, 0xbb, 0x70, 0x39, + 0xf0, 0x86, 0xbe, 0x4d, 0x76, 0x07, 0xe5, 0x4e, 0xc7, 0x27, 0x41, 0x20, 0x7d, 0xe0, 0x97, 0xc6, + 0xa3, 0xd2, 0xcb, 0x13, 0x4d, 0xca, 0x10, 0x27, 0xb9, 0xd0, 0xb7, 0x21, 0x3f, 0xb0, 0xce, 0x7b, + 0x9e, 0xd5, 0x69, 0x3b, 0x1f, 0x13, 0x69, 0x19, 0xf8, 0x21, 0x4d, 0x81, 0x15, 0x01, 0x2a, 0x35, + 0x3b, 0xba, 0x74, 0x3c, 0x97, 0xde, 0xf1, 0xad, 0x6e, 0x9f, 0xb8, 0xc2, 0xd7, 0xad, 0x8a, 0x18, + 0x5e, 0xc5, 0x71, 0xa2, 0x86, 0xb6, 0x59, 0x97, 0xf6, 0x23, 0x42, 0xab, 0xde, 0xd0, 0xa5, 0xc5, + 0x1f, 0xad, 0xf0, 0x3e, 0x2f, 0x8f, 0x47, 0x25, 0x15, 0xc7, 0x6a, 0xc5, 0xf8, 0xcf, 0x4b, 0x50, + 0x50, 0x57, 0xf5, 0x39, 0x4f, 0x67, 0x0d, 0xb2, 0x7d, 0x42, 0x4f, 0x3d, 0x61, 0x43, 0xe7, 0xe6, + 0xa9, 0xd8, 0x08, 0xf6, 0x39, 0x9d, 0xb0, 0x4f, 0x82, 0x07, 0xcb, 0x27, 0xba, 0x0d, 0x2b, 0xa7, + 0xc4, 0xea, 0x10, 0x9f, 0xed, 0xfc, 0xf4, 0x66, 0x4e, 0x44, 0x67, 0x12, 0x52, 0xe6, 0x30, 0xa4, + 0x42, 0x6f, 0x40, 0xe6, 0xd8, 0xeb, 0x9c, 0xcb, 0x58, 0x99, 0xab, 0x14, 0xab, 0xab, 0x2a, 0xc5, + 0xea, 0x2c, 0x00, 0x74, 0xbd, 0x3b, 0x5e, 0xaf, 0xe7, 0x7d, 0x84, 0x49, 0xc7, 0xf1, 0x89, 0x4d, + 0x03, 0xbe, 0x8b, 0x65, 0x00, 0x38, 0xd5, 0x88, 0xa7, 0x21, 0x74, 0x08, 0x39, 0xda, 0x0b, 0xaa, + 0x9e, 0x7b, 0xe2, 0x74, 0xb9, 0x8f, 0x9a, 0x9b, 0x38, 0x35, 0xf7, 0xda, 0x82, 0x4c, 0xec, 0x9d, + 0x88, 0x4b, 0xdd, 0x3b, 0x11, 0xc8, 0xe4, 0x72, 0x7f, 0x5a, 0x1e, 0xd2, 0x53, 0xee, 0xd3, 0xe6, + 0xca, 0xad, 0x84, 0x64, 0x42, 0x6e, 0xc4, 0xa5, 0xca, 0x8d, 0x40, 0xa6, 0x99, 0xc7, 0xc4, 0xf2, + 0x89, 0x6f, 0x7a, 0x8f, 0x88, 0xcb, 0xf3, 0x16, 0x39, 0xa1, 0x99, 0x0a, 0xac, 0x6a, 0xa6, 0x02, + 0xa3, 0x6d, 0x58, 0x1d, 0xf8, 0xde, 0xd9, 0xf9, 0x01, 0xde, 0x2b, 0x76, 0x39, 0x27, 0x37, 0x32, + 0x21, 0xa6, 0x1a, 0x99, 0x10, 0x43, 0xc7, 0x50, 0xf0, 0xac, 0x21, 0x3d, 0xdd, 0x96, 0x73, 0x74, + 0xba, 0xc8, 0x18, 0x34, 0xcb, 0x31, 0x65, 0x65, 0x7d, 0x3c, 0x2a, 0xbd, 0xa8, 0xf2, 0x2a, 0xf2, + 0x13, 0x32, 0x51, 0x1b, 0xae, 0xf2, 0xfe, 0xaa, 0x9e, 0xeb, 0x12, 0x9b, 0xee, 0x48, 0x75, 0x71, + 0xb8, 0xba, 0xbc, 0x3a, 0x1e, 0x95, 0xbe, 0x34, 0xa3, 0x59, 0x91, 0x36, 0x8b, 0x1b, 0xbd, 0x05, + 0xb9, 0x13, 0xcb, 0xe9, 0xed, 0x9e, 0xb4, 0xdb, 0x7b, 0xc5, 0x27, 0x22, 0xcf, 0x22, 0x42, 0xd3, + 0x10, 0xc5, 0x71, 0x11, 0xbd, 0x03, 0x05, 0x51, 0x69, 0x78, 0x94, 0x31, 0xfc, 0xbd, 0x16, 0xef, + 0x5a, 0xb5, 0x01, 0x27, 0x6a, 0xe8, 0x1e, 0xe8, 0x8f, 0xad, 0x9e, 0xd3, 0x89, 0x73, 0xb5, 0x41, + 0xf1, 0x1f, 0xd8, 0x19, 0x69, 0xb9, 0x72, 0x63, 0x3c, 0x2a, 0xad, 0x4f, 0x36, 0x2a, 0x83, 0x9e, + 0x62, 0x44, 0x0d, 0xb8, 0xc2, 0xb1, 0x1d, 0xd3, 0x6c, 0xc9, 0x3d, 0x18, 0x14, 0xff, 0x51, 0xe3, + 0xb3, 0x50, 0x1a, 0x8f, 0x4a, 0xaf, 0x4c, 0xb5, 0x2a, 0xe2, 0xa6, 0x59, 0xd1, 0xef, 0xc0, 0x4b, + 0x62, 0xb0, 0x15, 0xaf, 0x73, 0xbe, 0xcf, 0xce, 0x3b, 0x24, 0xc0, 0xa4, 0x4b, 0xce, 0x06, 0xc5, + 0x5f, 0x0a, 0xa9, 0x37, 0xc7, 0xa3, 0xd2, 0xab, 0x73, 0x68, 0x14, 0xd9, 0xf3, 0xc4, 0x20, 0x07, + 0xd6, 0xe3, 0xa6, 0x86, 0x47, 0x93, 0x9d, 0xfc, 0x93, 0xe8, 0x64, 0x73, 0x3c, 0x2a, 0xbd, 0x3e, + 0x9f, 0x4c, 0xe9, 0x67, 0x81, 0x30, 0xf4, 0xfb, 0x1a, 0xbc, 0x2c, 0x9a, 0xc5, 0x02, 0x27, 0xbb, + 0xfa, 0xe7, 0x85, 0xe7, 0x52, 0x85, 0xa3, 0xf2, 0xa6, 0x0c, 0xc9, 0x5e, 0x9b, 0x2b, 0x4c, 0x19, + 0xd0, 0xfc, 0x1e, 0xd1, 0x1f, 0x6a, 0x70, 0x5d, 0x6d, 0x9d, 0x7a, 0xfb, 0x7f, 0xb9, 0xf0, 0x90, + 0x6e, 0xc9, 0x21, 0xbd, 0xb1, 0x48, 0x9e, 0x32, 0xaa, 0x85, 0xfd, 0xa2, 0x53, 0xc8, 0xdb, 0x5e, + 0x7f, 0xc0, 0xfc, 0x18, 0xf3, 0x02, 0x9f, 0x0a, 0x37, 0xb0, 0x35, 0x27, 0x5c, 0x8d, 0x29, 0xcb, + 0xbd, 0xae, 0xe7, 0x3b, 0xf4, 0xb4, 0x2f, 0xcc, 0x89, 0x22, 0x43, 0x35, 0x27, 0x0a, 0xcc, 0x56, + 0xdf, 0xb6, 0xec, 0x53, 0x52, 0x19, 0x06, 0xcc, 0xfd, 0xdc, 0x1f, 0x12, 0xff, 0xbc, 0x65, 0xf9, + 0x56, 0xbf, 0xc1, 0x0e, 0xa7, 0x3f, 0x12, 0xc9, 0x21, 0xbe, 0xfa, 0xf3, 0xc9, 0xd4, 0xd5, 0x9f, + 0x4f, 0x65, 0xfc, 0x22, 0x0d, 0x05, 0xd5, 0xb8, 0xb0, 0x08, 0xdf, 0xee, 0x39, 0x84, 0x47, 0xf8, + 0x5a, 0x9c, 0x54, 0x09, 0x31, 0x1c, 0x95, 0x98, 0x3b, 0x16, 0xe5, 0x36, 0xb1, 0x7d, 0x12, 0x7e, + 0x42, 0x12, 0x09, 0x5c, 0x05, 0xc7, 0x89, 0x1a, 0x3f, 0x41, 0x30, 0x9b, 0xc9, 0x4c, 0xa5, 0x92, + 0xde, 0x09, 0x31, 0x1c, 0x95, 0xd0, 0x5b, 0x90, 0x0d, 0x6c, 0x6f, 0x40, 0xd8, 0xc1, 0x20, 0x1d, + 0x9e, 0x8d, 0x04, 0xa2, 0xbc, 0x9c, 0xa4, 0x41, 0x04, 0xd6, 0x88, 0xdb, 0x19, 0x78, 0x8e, 0x4b, + 0xf9, 0xdb, 0x89, 0xe8, 0xff, 0x73, 0x0e, 0xa6, 0x1b, 0x52, 0x41, 0x8a, 0x49, 0x56, 0x45, 0xfc, + 0x84, 0xd0, 0xa4, 0x5b, 0xcb, 0x3e, 0x3f, 0xb7, 0xa6, 0x7a, 0x90, 0x95, 0x8b, 0x79, 0x10, 0xe3, + 0x67, 0x1a, 0xe4, 0x15, 0x75, 0x67, 0x13, 0x26, 0x5c, 0xbd, 0x5c, 0x38, 0x3e, 0x61, 0x02, 0x51, + 0x27, 0x4c, 0x20, 0x8c, 0xda, 0x17, 0x1b, 0x2a, 0x15, 0x53, 0xfb, 0x93, 0x5b, 0x42, 0xd2, 0xa0, + 0xdf, 0x82, 0x82, 0xc5, 0x1c, 0xfc, 0xbe, 0x13, 0x04, 0xec, 0x08, 0x24, 0xf2, 0x41, 0xdc, 0x13, + 0xa9, 0xb8, 0xea, 0x89, 0x54, 0xdc, 0xf8, 0x3b, 0x0d, 0xd6, 0x6a, 0x8d, 0x36, 0xc6, 0x87, 0xcc, + 0x9a, 0x5a, 0xd4, 0xf3, 0x99, 0x73, 0x12, 0xfb, 0x2d, 0xb9, 0xbd, 0xb5, 0xd8, 0x39, 0xcd, 0x68, + 0x56, 0x9d, 0xd3, 0x8c, 0x66, 0xf4, 0x3d, 0x78, 0x31, 0xf2, 0x23, 0x49, 0xb9, 0x29, 0x2e, 0xf7, + 0xf5, 0xf1, 0xa8, 0xb4, 0x31, 0x9b, 0x42, 0x11, 0x3d, 0x47, 0x86, 0xf1, 0x97, 0x59, 0xc8, 0x2b, + 0x07, 0xa9, 0x5f, 0xd7, 0x28, 0xdb, 0x80, 0x6c, 0x40, 0xfc, 0xc7, 0xc4, 0x97, 0x3b, 0x4c, 0xe4, + 0x9a, 0x39, 0x82, 0xe5, 0x13, 0x5d, 0x87, 0xcc, 0xc0, 0xf3, 0x45, 0x10, 0xbd, 0x2c, 0x52, 0x5d, + 0xac, 0x8e, 0xf9, 0x2f, 0x6a, 0x03, 0xf8, 0xc4, 0xf6, 0xfc, 0x8e, 0x79, 0x3e, 0x10, 0x27, 0xb8, + 0xb5, 0x79, 0x07, 0xf3, 0x9a, 0x1b, 0xe0, 0x88, 0x54, 0x7c, 0x6c, 0x8a, 0x59, 0xb1, 0x52, 0x46, + 0xf7, 0xb8, 0x8e, 0x53, 0xcf, 0xf6, 0x7a, 0x32, 0x51, 0x3e, 0xff, 0xac, 0xda, 0x92, 0x84, 0x32, + 0xa5, 0x2b, 0x6b, 0x38, 0x2a, 0xa1, 0xdf, 0x84, 0x3c, 0x77, 0xcc, 0x58, 0xc4, 0x06, 0x4f, 0x84, + 0xda, 0x70, 0x0b, 0xab, 0xe0, 0xaa, 0x85, 0x55, 0x60, 0xe4, 0xc2, 0xda, 0x63, 0xa1, 0x88, 0xa4, + 0xec, 0x06, 0x1f, 0x11, 0x5f, 0xc4, 0x25, 0xf9, 0x79, 0x69, 0xe0, 0xa4, 0xea, 0x2a, 0x41, 0x43, + 0x24, 0x00, 0xe3, 0xb6, 0x6a, 0x36, 0x92, 0x8d, 0xe8, 0x23, 0x19, 0x81, 0x30, 0x64, 0x48, 0x4f, + 0x99, 0x3f, 0x38, 0x67, 0xf1, 0xcc, 0xc5, 0xbb, 0x34, 0xc6, 0xa3, 0xd2, 0x8d, 0x29, 0x19, 0xc9, + 0x5e, 0xa7, 0xfb, 0x40, 0x1f, 0x03, 0x8a, 0xc0, 0x4e, 0xc7, 0xa1, 0x8e, 0xe7, 0x5a, 0x3d, 0x16, + 0xfb, 0x5c, 0xbc, 0xe7, 0xd7, 0xc6, 0xa3, 0x52, 0x69, 0x5a, 0x48, 0xb2, 0xeb, 0x19, 0xbd, 0x18, + 0x9f, 0xa4, 0x21, 0xaf, 0xa4, 0x0b, 0x7e, 0x5d, 0x77, 0xcb, 0x6b, 0x90, 0xa6, 0xf2, 0x23, 0xda, + 0xaa, 0x4c, 0x69, 0xf4, 0x12, 0xa9, 0x11, 0xda, 0x9b, 0xb0, 0xfb, 0x99, 0xe7, 0x67, 0xf7, 0xfb, + 0x70, 0xe9, 0x43, 0xe6, 0x91, 0xc3, 0x5b, 0x0f, 0xd2, 0x6b, 0xcd, 0xc9, 0x65, 0x98, 0xd5, 0xd6, + 0x7d, 0x95, 0xba, 0x52, 0x92, 0x0e, 0xec, 0xa5, 0x84, 0x10, 0xa5, 0xab, 0xa4, 0x74, 0xe3, 0x77, + 0x35, 0xd0, 0x27, 0x85, 0x30, 0x53, 0x10, 0x10, 0x57, 0xb8, 0xfb, 0x82, 0x30, 0x05, 0xac, 0x8e, + 0xf9, 0x2f, 0x33, 0x26, 0xe4, 0x6c, 0x40, 0x6c, 0xe1, 0xe0, 0x0b, 0xc2, 0x98, 0x08, 0x04, 0xcb, + 0x27, 0xf3, 0x5e, 0x01, 0xb5, 0x7c, 0x6a, 0xee, 0xb5, 0xe5, 0x3c, 0x8a, 0x24, 0x8b, 0xc4, 0x12, + 0x49, 0x16, 0x89, 0x19, 0x7f, 0x93, 0x82, 0x5c, 0x34, 0x57, 0xa8, 0x05, 0xc8, 0x71, 0x03, 0x62, + 0x0f, 0x7d, 0xd2, 0x7e, 0xc4, 0x17, 0xd9, 0x39, 0x39, 0x97, 0x1f, 0x71, 0x37, 0xc6, 0xa3, 0xd2, + 0xf5, 0xe9, 0x56, 0x55, 0xfb, 0xa6, 0x5b, 0x99, 0x7f, 0xab, 0x96, 0xab, 0xc4, 0x0f, 0xc7, 0xcd, + 0xfd, 0x9b, 0x6d, 0x31, 0x44, 0xf5, 0x6f, 0x82, 0x06, 0x7d, 0x0b, 0x40, 0x84, 0x29, 0x9c, 0x23, + 0xcd, 0x39, 0x78, 0x22, 0x2a, 0x46, 0xd5, 0x44, 0x54, 0x8c, 0xa2, 0x77, 0x20, 0x27, 0x6a, 0xf7, + 0x88, 0x38, 0x5a, 0x17, 0xc4, 0xc2, 0x47, 0xa0, 0xba, 0xf0, 0x11, 0xc8, 0x3a, 0x14, 0x96, 0x98, + 0xc7, 0x74, 0xcb, 0x5c, 0x73, 0x79, 0x87, 0x31, 0xaa, 0x76, 0x18, 0xa3, 0x46, 0x00, 0xb9, 0xe8, + 0x68, 0xcb, 0x66, 0x3e, 0xfa, 0x5a, 0xa6, 0xc5, 0x71, 0x43, 0x88, 0xa9, 0x33, 0x1f, 0x7d, 0x37, + 0xdb, 0x56, 0xbe, 0x9b, 0xa5, 0x94, 0x58, 0x43, 0x62, 0x89, 0x58, 0x23, 0xfc, 0x82, 0xf6, 0xaf, + 0x1a, 0xa0, 0xe9, 0x5c, 0x1d, 0xba, 0x09, 0x2b, 0x7d, 0xeb, 0x6c, 0xc7, 0x1b, 0x84, 0x1f, 0xbf, + 0x79, 0x96, 0x57, 0x42, 0x38, 0x2c, 0xa0, 0x77, 0x61, 0xad, 0x6f, 0x9d, 0x1d, 0xb8, 0x8f, 0x5c, + 0xef, 0x23, 0x97, 0x53, 0x8b, 0xe4, 0x31, 0xcf, 0x41, 0x24, 0x5b, 0xf0, 0x44, 0x1d, 0xbd, 0x09, + 0xb9, 0x01, 0xf5, 0xf7, 0x3c, 0xef, 0xd1, 0x70, 0x20, 0x95, 0x8b, 0x1b, 0x85, 0x08, 0xc4, 0x71, + 0x11, 0xdd, 0x02, 0x38, 0xf5, 0x06, 0xa6, 0x4c, 0x3c, 0x8b, 0x8f, 0x21, 0xdc, 0x25, 0xc5, 0x28, + 0x56, 0xca, 0xc6, 0x37, 0x40, 0x9f, 0xcc, 0x0f, 0x72, 0xef, 0xc9, 0x31, 0xb9, 0x21, 0x84, 0xf7, + 0xe4, 0x08, 0x96, 0x4f, 0xe3, 0xcf, 0x34, 0xb8, 0x32, 0x95, 0xfb, 0x43, 0xf7, 0x60, 0x85, 0xb8, + 0xd4, 0x77, 0x48, 0xf8, 0x39, 0xef, 0xf5, 0xcf, 0xc9, 0x1a, 0xd6, 0x5d, 0xea, 0x9f, 0x87, 0x5f, + 0x58, 0x38, 0x23, 0x0e, 0x0b, 0xa8, 0x0a, 0x85, 0x9e, 0x17, 0xdd, 0x86, 0x12, 0x33, 0xb6, 0x2a, + 0x3c, 0x8f, 0x82, 0x57, 0xbc, 0x8e, 0x93, 0x70, 0x73, 0x09, 0x26, 0xe3, 0xe7, 0x29, 0x58, 0x4b, + 0xf6, 0x86, 0xbe, 0x07, 0x2b, 0xbe, 0xf8, 0x26, 0x27, 0xf3, 0xd8, 0x6f, 0x5e, 0x64, 0x90, 0xf2, + 0x33, 0x9e, 0x48, 0x00, 0x49, 0x7e, 0x35, 0xc7, 0x24, 0x21, 0x64, 0x03, 0x58, 0x41, 0x40, 0x7c, + 0xca, 0xcf, 0xd8, 0xe2, 0x43, 0xe4, 0x57, 0x2f, 0xd2, 0x41, 0x39, 0xe4, 0x92, 0x1b, 0x95, 0x7f, + 0xd4, 0x54, 0x77, 0x40, 0x2c, 0x16, 0xd9, 0x90, 0x7b, 0x6c, 0xf9, 0x8e, 0x75, 0xdc, 0x23, 0x22, + 0xf7, 0x95, 0xdf, 0x7e, 0xeb, 0x22, 0x7d, 0x1c, 0x4a, 0x26, 0xb1, 0x41, 0x23, 0x11, 0xea, 0x06, + 0x8d, 0x40, 0xe3, 0x1e, 0x00, 0x63, 0x14, 0x01, 0xf6, 0x17, 0xfd, 0x32, 0x78, 0x0f, 0x80, 0xdb, + 0xdc, 0x3b, 0x0e, 0xe9, 0x75, 0xbe, 0xa8, 0xb0, 0xff, 0x49, 0xc1, 0x0b, 0x33, 0x57, 0x47, 0x49, + 0x2c, 0x6a, 0x5f, 0x20, 0xb1, 0xb8, 0xe0, 0xe3, 0xfc, 0xfd, 0x64, 0xce, 0x31, 0xbf, 0xa8, 0x07, + 0x31, 0x73, 0x9f, 0x9b, 0x95, 0xfc, 0x3e, 0xe4, 0x3f, 0x8c, 0xa6, 0x46, 0x9c, 0xf5, 0xe6, 0x8a, + 0x8d, 0xe7, 0x50, 0x44, 0x7a, 0x0a, 0xa3, 0x1a, 0xe9, 0x29, 0x30, 0xda, 0x97, 0x49, 0x4f, 0xf1, + 0x15, 0xe2, 0xe6, 0xfc, 0xe1, 0x86, 0x1a, 0xee, 0x75, 0xce, 0xe7, 0xe7, 0x46, 0x8d, 0xbf, 0xd6, + 0xe0, 0xf2, 0x04, 0x35, 0xfa, 0x3a, 0xe4, 0x6d, 0xcf, 0xa5, 0xc4, 0xa5, 0x3c, 0x5a, 0x16, 0xab, + 0xca, 0x13, 0xcc, 0x0a, 0x8c, 0xd5, 0x0a, 0x0b, 0x5e, 0x64, 0xb5, 0xee, 0xda, 0x5e, 0x87, 0x9d, + 0xa8, 0x94, 0xe0, 0x65, 0xa2, 0x49, 0x0d, 0x5e, 0x26, 0x9a, 0x98, 0x01, 0x96, 0x29, 0x72, 0xe9, + 0xb4, 0xb8, 0x31, 0x91, 0x10, 0x0e, 0x0b, 0xc6, 0x5f, 0xa5, 0xe1, 0xa5, 0x39, 0xfb, 0x0d, 0x35, + 0x21, 0x43, 0xc3, 0x71, 0xaf, 0x6d, 0x7f, 0xfd, 0x99, 0x36, 0x2b, 0x8f, 0xf9, 0xb9, 0x02, 0x33, + 0x11, 0x98, 0xff, 0xa2, 0x1e, 0xac, 0x04, 0xc3, 0xe3, 0x0f, 0xc2, 0x90, 0x61, 0x6d, 0xfb, 0xdb, + 0xcf, 0x24, 0xb3, 0x2d, 0x78, 0xf9, 0x66, 0x75, 0xa5, 0xc5, 0x91, 0xf2, 0x54, 0xfd, 0x91, 0x10, + 0xa2, 0x90, 0xb3, 0x3d, 0x57, 0x04, 0x9d, 0x7c, 0x0e, 0xd6, 0xb6, 0xbf, 0xf3, 0x4c, 0xfd, 0x55, + 0x43, 0xee, 0xb0, 0x47, 0xe1, 0xbe, 0x43, 0x34, 0xe1, 0xbe, 0x43, 0x90, 0xb9, 0x6f, 0x72, 0x16, + 0xe5, 0x82, 0x32, 0xb1, 0xfb, 0x8e, 0x51, 0xd5, 0x78, 0xc5, 0x28, 0xfa, 0x4a, 0xb8, 0xbd, 0x85, + 0xcf, 0xe7, 0xb7, 0xb6, 0x38, 0xa0, 0xd0, 0xcb, 0x8d, 0xfe, 0xc3, 0x14, 0xbc, 0x38, 0xdb, 0x82, + 0xa1, 0x46, 0x62, 0xd1, 0xbe, 0xf6, 0x2c, 0xd6, 0x6f, 0xe6, 0x9a, 0xbd, 0x21, 0x4d, 0x52, 0x2a, + 0xfe, 0x36, 0x30, 0x11, 0x3f, 0x08, 0xe3, 0x94, 0x7c, 0xef, 0xf4, 0x33, 0xbc, 0xf7, 0x3b, 0x90, + 0xb3, 0x28, 0xf5, 0x9d, 0xe3, 0xa1, 0xbc, 0xa0, 0x95, 0x13, 0x13, 0x1d, 0x81, 0xea, 0x44, 0x47, + 0xa0, 0xf1, 0x93, 0x14, 0x14, 0xd4, 0x4f, 0x61, 0xcf, 0xf9, 0x14, 0x71, 0x1b, 0x56, 0x58, 0x68, + 0xe5, 0xd8, 0xe1, 0xab, 0x0b, 0x75, 0x13, 0x50, 0x42, 0xdd, 0x04, 0xf4, 0xff, 0x7a, 0x5a, 0x30, + 0x7e, 0xa1, 0xc1, 0x65, 0xcc, 0xaf, 0xb8, 0x9a, 0xa4, 0x47, 0xfa, 0x84, 0xf9, 0xf3, 0x4d, 0x58, + 0x75, 0xdc, 0x80, 0x5a, 0xe1, 0x35, 0x69, 0x99, 0x50, 0x0b, 0x31, 0x1c, 0x95, 0x18, 0xa5, 0xb8, + 0x1f, 0x2b, 0x3f, 0xde, 0x2f, 0x0b, 0xca, 0x10, 0xc3, 0x51, 0x09, 0x61, 0xc8, 0xd1, 0xb0, 0x03, + 0x69, 0xe8, 0x6f, 0x2e, 0xba, 0x59, 0x13, 0x8d, 0x46, 0xcc, 0x74, 0xc4, 0x8b, 0xe3, 0xa2, 0xf1, + 0x07, 0x1a, 0x5c, 0x9e, 0xa0, 0x4e, 0x5c, 0x27, 0xd0, 0x16, 0x5e, 0x27, 0x38, 0x54, 0x47, 0x24, + 0xc2, 0x8a, 0xaf, 0x2c, 0xba, 0x2b, 0xd5, 0xb3, 0x82, 0xe0, 0x22, 0xa3, 0xfa, 0x71, 0x0a, 0xae, + 0xce, 0xe0, 0x40, 0x2d, 0x00, 0x3b, 0x82, 0x17, 0x7b, 0xd3, 0x98, 0x5d, 0x84, 0x9a, 0x31, 0x1f, + 0x56, 0xca, 0x2c, 0x34, 0x25, 0x67, 0xc4, 0x1e, 0x86, 0x91, 0x11, 0x9b, 0x7f, 0x4e, 0x1f, 0xa3, + 0x58, 0x29, 0xb3, 0xb9, 0xe9, 0x0c, 0xe5, 0x15, 0xb5, 0x74, 0x7c, 0x07, 0x3b, 0xc4, 0x70, 0x54, + 0x42, 0x55, 0xb8, 0x12, 0x58, 0xfd, 0x41, 0x8f, 0x74, 0xea, 0x71, 0x07, 0x22, 0xaf, 0x23, 0xb4, + 0x79, 0xb2, 0x11, 0x4f, 0x43, 0xc6, 0x43, 0x78, 0xa1, 0x35, 0x0c, 0x4e, 0xa3, 0x19, 0x88, 0x4e, + 0x87, 0xdf, 0x8d, 0x2e, 0x37, 0x6a, 0x17, 0xb8, 0xb1, 0x3e, 0xe3, 0x5a, 0xe3, 0xd6, 0x10, 0x20, + 0xfe, 0x1a, 0x83, 0xb2, 0x90, 0x6a, 0xde, 0xd3, 0x97, 0xd0, 0x25, 0xc8, 0x35, 0x9a, 0xe6, 0xd1, + 0x9d, 0xe6, 0x41, 0xa3, 0xa6, 0x6b, 0xe8, 0x1a, 0xe8, 0xbb, 0x8d, 0xc3, 0xf2, 0xde, 0x6e, 0xed, + 0xa8, 0x8c, 0xef, 0x1e, 0xec, 0xd7, 0x1b, 0xa6, 0x9e, 0x42, 0x08, 0xd6, 0xca, 0x7b, 0xb8, 0x5e, + 0xae, 0x3d, 0x3c, 0xaa, 0x3f, 0xd8, 0x6d, 0x9b, 0x6d, 0x3d, 0xcd, 0xb0, 0xdd, 0x86, 0x59, 0xc7, + 0x8d, 0xf2, 0xde, 0x51, 0x1d, 0xe3, 0x26, 0xd6, 0x33, 0x0c, 0x63, 0xc2, 0xca, 0x07, 0xe6, 0x4e, + 0x13, 0xef, 0xbe, 0x5f, 0xaf, 0xe9, 0xcb, 0x5b, 0x9b, 0xe1, 0x55, 0x5d, 0xf9, 0xdf, 0x00, 0x80, + 0x6c, 0xb9, 0x6a, 0xee, 0x1e, 0xd6, 0xf5, 0x25, 0x54, 0x80, 0xd5, 0xda, 0x6e, 0xbb, 0x5c, 0xd9, + 0xab, 0xd7, 0x74, 0x6d, 0xab, 0x0a, 0x6b, 0xc9, 0x7b, 0x7e, 0x6c, 0x70, 0xd5, 0x9d, 0x7a, 0xf5, + 0xde, 0x51, 0xb9, 0x56, 0xd3, 0x97, 0x90, 0x0e, 0x05, 0x51, 0x3d, 0x68, 0xd5, 0xca, 0x66, 0x5d, + 0xd7, 0x62, 0xa4, 0x56, 0xdf, 0xab, 0x9b, 0x75, 0x3d, 0xb5, 0x65, 0x8b, 0x78, 0x51, 0xc4, 0x55, + 0x68, 0x05, 0xd2, 0x77, 0xeb, 0xa6, 0xbe, 0x84, 0xf2, 0xb0, 0x52, 0x6d, 0x36, 0x1a, 0xf5, 0xaa, + 0xa9, 0x6b, 0x6c, 0x08, 0x21, 0x3d, 0x5a, 0x85, 0xcc, 0x4e, 0xbd, 0x5c, 0xd3, 0xd3, 0x8c, 0xa4, + 0xd9, 0x32, 0x77, 0x9b, 0x8d, 0xb6, 0x9e, 0x61, 0x70, 0xab, 0xd9, 0x36, 0xf5, 0x65, 0x26, 0xa2, + 0x75, 0x60, 0xea, 0x59, 0x94, 0x83, 0x65, 0x13, 0x97, 0xab, 0x75, 0x7d, 0x65, 0xeb, 0x14, 0x2e, + 0x25, 0xf2, 0x6d, 0x8c, 0xa8, 0xdc, 0x78, 0xa8, 0x2f, 0xa1, 0x65, 0xd0, 0xca, 0xba, 0xc6, 0xd8, + 0xcb, 0xe5, 0x72, 0x59, 0x4f, 0x31, 0xae, 0x6a, 0xa3, 0xbc, 0x5f, 0xd7, 0xd3, 0x6c, 0xca, 0xf7, + 0x1f, 0xe8, 0x19, 0xf6, 0x6c, 0xb4, 0xa5, 0x64, 0x13, 0xeb, 0x59, 0x56, 0x68, 0x37, 0xcb, 0xfa, + 0x0a, 0x2f, 0xe0, 0x43, 0x7d, 0x95, 0x15, 0xcc, 0x07, 0xa6, 0x9e, 0xdb, 0x2a, 0xf1, 0x4c, 0x67, + 0x98, 0x86, 0xe3, 0x78, 0xb5, 0xa5, 0x2f, 0xb1, 0xc2, 0x41, 0xad, 0xa5, 0x6b, 0x5b, 0xaf, 0x43, + 0x2e, 0x32, 0xb0, 0x7c, 0x18, 0xee, 0xb9, 0xbe, 0xc4, 0xba, 0x38, 0x7c, 0x5b, 0xd7, 0xf8, 0xf3, + 0x1b, 0x7a, 0x6a, 0x6b, 0x1f, 0xae, 0xcd, 0xfa, 0x14, 0xc2, 0xc6, 0xe9, 0x7a, 0x2e, 0x11, 0x4b, + 0xe1, 0x74, 0x08, 0xff, 0x57, 0x8c, 0x18, 0x7f, 0xf7, 0x63, 0x67, 0xa0, 0xa7, 0x98, 0x84, 0x63, + 0x5f, 0xcc, 0x4e, 0x87, 0x9c, 0xf4, 0x2c, 0x4a, 0xf4, 0xcc, 0xd6, 0x00, 0x5e, 0x59, 0x10, 0x89, + 0x30, 0x6e, 0xb3, 0xfe, 0x80, 0x4d, 0xfb, 0x55, 0xb8, 0xfc, 0x5e, 0xbb, 0xd9, 0x38, 0x6a, 0x95, + 0xcd, 0x9d, 0xa3, 0xc3, 0xf2, 0xde, 0x01, 0x5b, 0xb4, 0x97, 0xe0, 0x6a, 0x0c, 0x96, 0xdb, 0xed, + 0x3a, 0x66, 0xb3, 0xae, 0xa7, 0x18, 0x35, 0xae, 0xdf, 0xad, 0x3f, 0x50, 0xc0, 0xf4, 0x7a, 0xe6, + 0xcf, 0xff, 0xf4, 0xc6, 0xd2, 0xd6, 0x0f, 0x35, 0xb8, 0x79, 0xa1, 0x40, 0x85, 0x09, 0xa9, 0xd5, + 0xef, 0x94, 0x0f, 0xf6, 0xcc, 0xa3, 0xf6, 0x41, 0xe5, 0x3d, 0xb6, 0xe2, 0x4b, 0x4c, 0xad, 0x71, + 0xbd, 0xdd, 0x6a, 0x36, 0xda, 0xf5, 0x23, 0xb6, 0xdc, 0x75, 0xdc, 0x16, 0xca, 0xbe, 0x63, 0x9a, + 0xad, 0xa3, 0xb6, 0x59, 0x36, 0x0f, 0xda, 0x47, 0xd5, 0x66, 0x8d, 0x69, 0xc4, 0x15, 0xb8, 0x14, + 0xd1, 0x56, 0x9a, 0xb5, 0x87, 0xd1, 0x18, 0xfe, 0x58, 0x83, 0x2f, 0x5f, 0x30, 0x78, 0x41, 0x2f, + 0xc0, 0x95, 0x70, 0x14, 0xd5, 0x66, 0xa3, 0xb6, 0xcb, 0x5f, 0x86, 0x6b, 0x30, 0xdb, 0x20, 0xd5, + 0x66, 0xc3, 0x2c, 0xef, 0x36, 0xda, 0x42, 0x17, 0xeb, 0xf7, 0x0f, 0xca, 0x7b, 0x6d, 0x3d, 0x85, + 0x2e, 0x43, 0xbe, 0x6d, 0x96, 0xb1, 0xd9, 0x3e, 0xfa, 0xed, 0x5d, 0x73, 0x47, 0x4f, 0x33, 0xfd, + 0xaf, 0x37, 0x6a, 0xb2, 0x9a, 0x61, 0x6b, 0x60, 0x3e, 0x6c, 0xd5, 0x8f, 0x9a, 0x77, 0xf4, 0x65, + 0xb6, 0x60, 0x91, 0x98, 0xac, 0x1c, 0x61, 0x03, 0xd6, 0xe7, 0x07, 0x1b, 0x4c, 0x5a, 0x34, 0xef, + 0xfa, 0x12, 0xd3, 0x4c, 0x3e, 0xdb, 0x72, 0x1b, 0xb5, 0xdb, 0x47, 0xed, 0xfa, 0x5e, 0xbd, 0x6a, + 0x36, 0xb1, 0x9e, 0x92, 0xf2, 0x36, 0x01, 0x62, 0xb3, 0xca, 0x7a, 0x6c, 0xe1, 0xa6, 0xd9, 0xac, + 0x36, 0xf7, 0x84, 0xc2, 0xb4, 0xab, 0x78, 0xb7, 0x65, 0xb2, 0xbd, 0xbb, 0xfd, 0x7b, 0x29, 0xc8, + 0xca, 0x9b, 0xf1, 0xdf, 0x87, 0x4b, 0x89, 0xff, 0xea, 0xa0, 0xd2, 0x82, 0xbf, 0x1d, 0xec, 0xba, + 0x27, 0xde, 0xfa, 0x57, 0xe6, 0xdd, 0x10, 0x9f, 0xfa, 0xc7, 0x8f, 0xb1, 0x84, 0xee, 0x03, 0xdc, + 0x25, 0x34, 0xbc, 0xb9, 0xbb, 0xb1, 0x40, 0x36, 0xff, 0x07, 0xda, 0xfa, 0x97, 0xe6, 0xb9, 0x0b, + 0x2e, 0xc0, 0x58, 0xfa, 0x9a, 0xc6, 0x42, 0xef, 0x16, 0x8b, 0xe2, 0x5f, 0x9d, 0x7f, 0x95, 0x4c, + 0x1e, 0x34, 0xd6, 0xe7, 0xdd, 0x36, 0x53, 0xfe, 0x31, 0x65, 0x2c, 0x6d, 0xff, 0xad, 0x06, 0xf9, + 0xf8, 0x1a, 0xdf, 0xff, 0xf9, 0x94, 0x98, 0xb0, 0x76, 0x97, 0x50, 0xb5, 0xc3, 0xf5, 0xd9, 0xec, + 0x87, 0x9e, 0xd3, 0x99, 0xf7, 0x0a, 0xea, 0x35, 0x61, 0x36, 0x2b, 0xdb, 0x0f, 0x60, 0xc5, 0x94, + 0x77, 0x91, 0xf7, 0x21, 0x77, 0x97, 0x50, 0xf9, 0xcf, 0x83, 0x8d, 0x45, 0x21, 0x08, 0x1f, 0xfc, + 0xc2, 0xeb, 0xbf, 0xc6, 0xd2, 0xb6, 0x0f, 0xb9, 0xd8, 0xc5, 0x13, 0xb8, 0x94, 0xf0, 0x78, 0xe8, + 0xe6, 0xfc, 0x57, 0x57, 0x02, 0xae, 0xf5, 0x39, 0xf9, 0x92, 0x99, 0xde, 0xd3, 0x58, 0xaa, 0x3c, + 0x7a, 0xf2, 0x1f, 0x37, 0x96, 0x9e, 0x3c, 0xbd, 0xa1, 0x7d, 0xfa, 0xf4, 0x86, 0xf6, 0xef, 0x4f, + 0x6f, 0x68, 0xff, 0xf5, 0xf4, 0xc6, 0xd2, 0x27, 0x9f, 0xdd, 0x58, 0xfa, 0xf4, 0xb3, 0x1b, 0x4b, + 0xff, 0xf6, 0xd9, 0x8d, 0xa5, 0xf7, 0x77, 0xbb, 0x0e, 0x3d, 0x1d, 0x1e, 0xdf, 0xb2, 0xbd, 0xfe, + 0xed, 0xae, 0x6f, 0x9d, 0x58, 0xae, 0x75, 0x3b, 0xea, 0xe2, 0xab, 0x71, 0x17, 0x5f, 0xb5, 0xba, + 0xc4, 0xa5, 0xb7, 0x07, 0x8f, 0xba, 0xb7, 0x07, 0xc7, 0xb7, 0x67, 0x0d, 0xe2, 0x38, 0xcb, 0xbf, + 0x8f, 0xfc, 0xc6, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xbe, 0x51, 0xda, 0x4f, 0x39, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/pkg/pb/synthetic_monitoring/checks.proto b/pkg/pb/synthetic_monitoring/checks.proto index 4fbbd50e..46521ca2 100644 --- a/pkg/pb/synthetic_monitoring/checks.proto +++ b/pkg/pb/synthetic_monitoring/checks.proto @@ -14,18 +14,17 @@ syntax = "proto3"; package synthetic_monitoring; -option go_package = "synthetic_monitoring"; - import "gogoproto/gogo.proto"; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.goproto_sizecache_all) = false; -option (gogoproto.goproto_unkeyed_all) = false; +option go_package = "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring"; +option (gogoproto.enum_stringer_all) = false; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_sizecache_all) = false; +option (gogoproto.goproto_unkeyed_all) = false; option (gogoproto.goproto_unrecognized_all) = false; -option (gogoproto.marshaler_all) = true; -option (gogoproto.sizer_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.enum_stringer_all) = false; +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; service Checks { // RegisterProbe causes this probe to be reported as online with @@ -33,15 +32,15 @@ service Checks { // // The probe is identified via an authentication token provided // through a different channel by synthetic-monitoring-api. - rpc RegisterProbe(ProbeInfo) returns (RegisterProbeResult) {}; + rpc RegisterProbe(ProbeInfo) returns (RegisterProbeResult) {} // GetChanges returns a list of check operations, specifying // whether to add, update or delete checks. - rpc GetChanges(ProbeState) returns (stream Changes) {}; + rpc GetChanges(ProbeState) returns (stream Changes) {} // Ping sends a ping to the server and receives an // acknowledgement back. - rpc Ping(PingRequest) returns (PongResponse) {}; + rpc Ping(PingRequest) returns (PongResponse) {} } service AdHocChecks { @@ -50,10 +49,10 @@ service AdHocChecks { // // The probe is identified via an authentication token provided // through a different channel by synthetic-monitoring-api. - rpc RegisterProbe(ProbeInfo) returns (RegisterProbeResult) {}; + rpc RegisterProbe(ProbeInfo) returns (RegisterProbeResult) {} // GetAdHocChecks returns a list of checks to be run immediately. - rpc GetAdHocChecks(Void) returns (stream AdHocRequest) {}; + rpc GetAdHocChecks(Void) returns (stream AdHocRequest) {} } // Void is an empty message used by RPC methods that don't take @@ -63,55 +62,61 @@ message Void {} // ProbeState message is sent by probes as the argument to GetChanges. It contains a list // of the checks and tenants already known to the probe. message ProbeState { - repeated EntityRef checks = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "checks"]; - repeated EntityRef tenants = 2 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "tenants"]; + repeated EntityRef checks = 1 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "checks" + ]; + repeated EntityRef tenants = 2 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "tenants" + ]; } // EntityRef represents a reference to an entity (check, tenant) by it's ID and last modification time. message EntityRef { - int64 id = 1 [(gogoproto.jsontag) = "id"]; + int64 id = 1 [(gogoproto.jsontag) = "id"]; double lastModified = 2 [(gogoproto.jsontag) = "lastModified"]; } message ProbeInfo { - string Version = 1 [(gogoproto.jsontag) = "version"]; // version of the probe - string Commit = 2 [(gogoproto.jsontag) = "commit"]; // commit hash used to build the probe - string Buildstamp = 3 [(gogoproto.jsontag) = "buildstamp"]; // timestamp when the probe was built + string Version = 1 [(gogoproto.jsontag) = "version"]; // version of the probe + string Commit = 2 [(gogoproto.jsontag) = "commit"]; // commit hash used to build the probe + string Buildstamp = 3 [(gogoproto.jsontag) = "buildstamp"]; // timestamp when the probe was built } // PingRequest is the message sent as argument of the Ping method. message PingRequest { - int64 Sequence = 1 [(gogoproto.jsontag) = "sequence"]; // sequence number + int64 Sequence = 1 [(gogoproto.jsontag) = "sequence"]; // sequence number } // PongResponse is the message received as response from the Ping method. message PongResponse { - int64 Sequence = 1 [(gogoproto.jsontag) = "sequence"]; // sequence number + int64 Sequence = 1 [(gogoproto.jsontag) = "sequence"]; // sequence number } // StatusCode represents the result of registering a probe with the API. enum StatusCode { - OK = 0; - NOT_FOUND = 1; + OK = 0; + NOT_FOUND = 1; INVALID_ARGUMENT = 2; - ALREADY_EXISTS = 3; - INTERNAL_ERROR = 4; - NOT_AUTHORIZED = 5; + ALREADY_EXISTS = 3; + INTERNAL_ERROR = 4; + NOT_AUTHORIZED = 5; } // Status represents the result of registering a probe with the API, // including both a code as well as textual message that can be // presented to the user. message Status { - StatusCode code = 1; - string message = 2; + StatusCode code = 1; + string message = 2; } // RegisterProbeResult is the message returned by the RegisterProbe // method of the Checks service. It provides both the status of the // operation and the probe's details after successful registration. message RegisterProbeResult { - Probe probe = 1 [(gogoproto.nullable) = false]; + Probe probe = 1 [(gogoproto.nullable) = false]; Status status = 2 [(gogoproto.nullable) = false]; } @@ -121,28 +126,31 @@ message Probe { bool disableScriptedChecks = 1 [(gogoproto.jsontag) = "disableScriptedChecks"]; // probe should not run scripted checks } - int64 id = 1 [(gogoproto.jsontag) = "id"]; // ID of the probe, assigned by the API - int64 tenantId = 2 [(gogoproto.jsontag) = "tenantId"]; // ID of the synthetic-monitoring tenant this probe belongs to - string name = 3 [(gogoproto.jsontag) = "name"]; // name of the probe - float latitude = 4 [(gogoproto.jsontag) = "latitude"]; // latitude of the probe - float longitude = 5 [(gogoproto.jsontag) = "longitude"]; // longitude of the probe - repeated Label labels = 6 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "labels"]; // probe-specific labels applied to all metrics and events - string region = 7 [(gogoproto.jsontag) = "region"]; // region of the probe, such as AMER, EMEA, APAC - bool public = 8 [(gogoproto.jsontag) = "public"]; // whether the probe is private or shared with all users - bool online = 9 [(gogoproto.jsontag) = "online"]; // whether the probe is currently online - double onlineChange = 10 [(gogoproto.jsontag) = "onlineChange"]; // time probe started or stopped being online - string version = 11 [(gogoproto.jsontag) = "version"]; // version of the probe - string commit = 12 [(gogoproto.jsontag) = "commit"]; // commit hash used to build the probe - string buildstamp = 13 [(gogoproto.jsontag) = "buildstamp"]; // timestamp when the probe was built - bool deprecated = 14 [(gogoproto.jsontag) = "deprecated"]; // whether the probe has been deprecated - double created = 100 [(gogoproto.jsontag) = "created"]; // time the probe was created - double modified = 101 [(gogoproto.jsontag) = "modified"]; // last time modified - Capabilities capabilities = 102 [(gogoproto.jsontag) = "capabilities"]; // probe feature enablements + int64 id = 1 [(gogoproto.jsontag) = "id"]; // ID of the probe, assigned by the API + int64 tenantId = 2 [(gogoproto.jsontag) = "tenantId"]; // ID of the synthetic-monitoring tenant this probe belongs to + string name = 3 [(gogoproto.jsontag) = "name"]; // name of the probe + float latitude = 4 [(gogoproto.jsontag) = "latitude"]; // latitude of the probe + float longitude = 5 [(gogoproto.jsontag) = "longitude"]; // longitude of the probe + repeated Label labels = 6 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "labels" + ]; // probe-specific labels applied to all metrics and events + string region = 7 [(gogoproto.jsontag) = "region"]; // region of the probe, such as AMER, EMEA, APAC + bool public = 8 [(gogoproto.jsontag) = "public"]; // whether the probe is private or shared with all users + bool online = 9 [(gogoproto.jsontag) = "online"]; // whether the probe is currently online + double onlineChange = 10 [(gogoproto.jsontag) = "onlineChange"]; // time probe started or stopped being online + string version = 11 [(gogoproto.jsontag) = "version"]; // version of the probe + string commit = 12 [(gogoproto.jsontag) = "commit"]; // commit hash used to build the probe + string buildstamp = 13 [(gogoproto.jsontag) = "buildstamp"]; // timestamp when the probe was built + bool deprecated = 14 [(gogoproto.jsontag) = "deprecated"]; // whether the probe has been deprecated + double created = 100 [(gogoproto.jsontag) = "created"]; // time the probe was created + double modified = 101 [(gogoproto.jsontag) = "modified"]; // last time modified + Capabilities capabilities = 102 [(gogoproto.jsontag) = "capabilities"]; // probe feature enablements } service Tenants { // GetTenant returns the details of the specified tenant - rpc GetTenant(TenantInfo) returns (Tenant) {}; + rpc GetTenant(TenantInfo) returns (Tenant) {} } // TenantInfo identifies the tenant for which information is being @@ -153,46 +161,46 @@ message TenantInfo { // TenantStatus represents the status associated to particular tenant. enum TenantStatus { - ACTIVE = 0; + ACTIVE = 0; DISABLED = 1; } // TenantLimits specifies the limits for a tenant. message TenantLimits { - int64 maxChecks = 1 [(gogoproto.jsontag) = "maxChecks"]; + int64 maxChecks = 1 [(gogoproto.jsontag) = "maxChecks"]; int64 maxScriptedChecks = 2 [(gogoproto.jsontag) = "maxScriptedChecks"]; - int64 maxMetricLabels = 3 [(gogoproto.jsontag) = "maxMetricLabels"]; - int64 maxLogLabels = 4 [(gogoproto.jsontag) = "maxLogLabels"]; + int64 maxMetricLabels = 3 [(gogoproto.jsontag) = "maxMetricLabels"]; + int64 maxLogLabels = 4 [(gogoproto.jsontag) = "maxLogLabels"]; } // Tenant represents a user of synthetic-monitoring. message Tenant { - int64 id = 1 [(gogoproto.jsontag) = "id"]; // unique ID - int64 orgId = 2 [(gogoproto.jsontag) = "orgId"]; // grafana.com orgId - RemoteInfo metricsRemote = 3 [(gogoproto.jsontag) = "metricsRemote"]; // target to send metrics to - RemoteInfo eventsRemote = 4 [(gogoproto.jsontag) = "eventsRemote"]; // target to send events to - int64 stackId = 5 [(gogoproto.jsontag) = "stackId"]; // grafana.com stackId - TenantStatus status = 6 [(gogoproto.jsontag) = "status"]; // tenant status - string reason = 7 [(gogoproto.jsontag) = "reason"]; // reason provided for the status - TenantLimits limits = 8 [(gogoproto.jsontag) = "limits"]; // check and label limits + int64 id = 1 [(gogoproto.jsontag) = "id"]; // unique ID + int64 orgId = 2 [(gogoproto.jsontag) = "orgId"]; // grafana.com orgId + RemoteInfo metricsRemote = 3 [(gogoproto.jsontag) = "metricsRemote"]; // target to send metrics to + RemoteInfo eventsRemote = 4 [(gogoproto.jsontag) = "eventsRemote"]; // target to send events to + int64 stackId = 5 [(gogoproto.jsontag) = "stackId"]; // grafana.com stackId + TenantStatus status = 6 [(gogoproto.jsontag) = "status"]; // tenant status + string reason = 7 [(gogoproto.jsontag) = "reason"]; // reason provided for the status + TenantLimits limits = 8 [(gogoproto.jsontag) = "limits"]; // check and label limits - double created = 100 [(gogoproto.jsontag) = "created"]; // time the check was created - double modified = 101 [(gogoproto.jsontag) = "modified"]; // last time modified + double created = 100 [(gogoproto.jsontag) = "created"]; // time the check was created + double modified = 101 [(gogoproto.jsontag) = "modified"]; // last time modified } // RemoteInfo represents an instance of the Prometheus remote write // service to send metrics or events to. message RemoteInfo { - string name = 1 [(gogoproto.jsontag) = "name"]; // instance name - string url = 2 [(gogoproto.jsontag) = "url"]; // instance URL - string username = 3 [(gogoproto.jsontag) = "username"]; // username (instanceId) - string password = 4 [(gogoproto.jsontag) = "password"]; // password (publisher API key) + string name = 1 [(gogoproto.jsontag) = "name"]; // instance name + string url = 2 [(gogoproto.jsontag) = "url"]; // instance URL + string username = 3 [(gogoproto.jsontag) = "username"]; // username (instanceId) + string password = 4 [(gogoproto.jsontag) = "password"]; // password (publisher API key) } // CheckOperation represents an operation to be performed on a // particular check. enum CheckOperation { - CHECK_ADD = 0; + CHECK_ADD = 0; CHECK_UPDATE = 1; CHECK_DELETE = 2; } @@ -200,7 +208,7 @@ enum CheckOperation { // CheckChange represents one change operation for a given check. message CheckChange { CheckOperation operation = 1; - Check check = 2 [(gogoproto.nullable) = false]; + Check check = 2 [(gogoproto.nullable) = false]; } // Changes represents a series of changes to be applied to the workloads @@ -213,8 +221,14 @@ message CheckChange { // When a tenant's credentials change, this message will contain the new // information for that tenant. message Changes { - repeated CheckChange checks = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "checks"]; - repeated Tenant tenants = 2 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "tenants"]; + repeated CheckChange checks = 1 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "checks" + ]; + repeated Tenant tenants = 2 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "tenants" + ]; // This field is used to signal that the list of changes should be interpreted as a diff // against the existing changes in the probe. For backwards compatibility, this will be @@ -223,14 +237,20 @@ message Changes { } message AdHocRequest { - AdHocCheck adHocCheck = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "adHocCheck"]; - Tenant tenant = 2 [(gogoproto.nullable) = true, (gogoproto.jsontag) = "tenant"]; + AdHocCheck adHocCheck = 1 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "adHocCheck" + ]; + Tenant tenant = 2 [ + (gogoproto.nullable) = true, + (gogoproto.jsontag) = "tenant" + ]; } // Label represents a single label in synthetic monitoring. These are // applied to the resulting metrics and logs. message Label { - string name = 1 [(gogoproto.jsontag) = "name"]; + string name = 1 [(gogoproto.jsontag) = "name"]; string value = 2 [(gogoproto.jsontag) = "value"]; } @@ -238,98 +258,113 @@ message Label { // // The "settings" field defines the type of check. message Check { - int64 id = 1 [(gogoproto.jsontag) = "id"]; // unique ID - int64 tenantId = 2 [(gogoproto.jsontag) = "tenantId"]; // synthetic-monitoring tenant - int64 frequency = 3 [(gogoproto.jsontag) = "frequency"]; // every X milliseconds - int64 offset = 4 [(gogoproto.jsontag) = "offset"]; // ??? REMOVE???? ??? why user configured? - int64 timeout = 5 [(gogoproto.jsontag) = "timeout"]; // maximum time before aborting - bool enabled = 6 [(gogoproto.jsontag) = "enabled"]; // user enable/disable - repeated Label labels = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "labels"]; // custom labels applied to all metrics and events (ie: production) - CheckSettings settings = 8 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "settings"]; // check-specific settings - repeated int64 probes = 9 [(gogoproto.jsontag) = "probes"]; // list of probes where this check should run - string target = 10 [(gogoproto.jsontag) = "target"]; // endpoint that this check is targeting - string job = 11 [(gogoproto.jsontag) = "job"]; // name of job this check belongs to - bool basicMetricsOnly = 12 [(gogoproto.jsontag) = "basicMetricsOnly"]; // include only basic metrics - string alertSensitivity = 13 [(gogoproto.jsontag) = "alertSensitivity"]; - - double created = 100 [(gogoproto.jsontag) = "created"]; // time the check was created - double modified = 101 [(gogoproto.jsontag) = "modified"]; // last time modified + int64 id = 1 [(gogoproto.jsontag) = "id"]; // unique ID + int64 tenantId = 2 [(gogoproto.jsontag) = "tenantId"]; // synthetic-monitoring tenant + int64 frequency = 3 [(gogoproto.jsontag) = "frequency"]; // every X milliseconds + int64 offset = 4 [(gogoproto.jsontag) = "offset"]; // ??? REMOVE???? ??? why user configured? + int64 timeout = 5 [(gogoproto.jsontag) = "timeout"]; // maximum time before aborting + bool enabled = 6 [(gogoproto.jsontag) = "enabled"]; // user enable/disable + repeated Label labels = 7 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "labels" + ]; // custom labels applied to all metrics and events (ie: production) + CheckSettings settings = 8 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "settings" + ]; // check-specific settings + repeated int64 probes = 9 [(gogoproto.jsontag) = "probes"]; // list of probes where this check should run + string target = 10 [(gogoproto.jsontag) = "target"]; // endpoint that this check is targeting + string job = 11 [(gogoproto.jsontag) = "job"]; // name of job this check belongs to + bool basicMetricsOnly = 12 [(gogoproto.jsontag) = "basicMetricsOnly"]; // include only basic metrics + string alertSensitivity = 13 [(gogoproto.jsontag) = "alertSensitivity"]; + + double created = 100 [(gogoproto.jsontag) = "created"]; // time the check was created + double modified = 101 [(gogoproto.jsontag) = "modified"]; // last time modified } message AdHocCheck { - string id = 1 [(gogoproto.jsontag) = "id"]; // unique ID - int64 tenantId = 2 [(gogoproto.jsontag) = "tenantId"]; // synthetic-monitoring tenant - int64 timeout = 3 [(gogoproto.jsontag) = "timeout"]; // maximum time before aborting - CheckSettings settings = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "settings"]; // check-specific settings - repeated int64 probes = 5 [(gogoproto.jsontag) = "probes"]; // list of probes where this check should run - string target = 6 [(gogoproto.jsontag) = "target"]; // endpoint that this check is targeting + string id = 1 [(gogoproto.jsontag) = "id"]; // unique ID + int64 tenantId = 2 [(gogoproto.jsontag) = "tenantId"]; // synthetic-monitoring tenant + int64 timeout = 3 [(gogoproto.jsontag) = "timeout"]; // maximum time before aborting + CheckSettings settings = 4 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "settings" + ]; // check-specific settings + repeated int64 probes = 5 [(gogoproto.jsontag) = "probes"]; // list of probes where this check should run + string target = 6 [(gogoproto.jsontag) = "target"]; // endpoint that this check is targeting } // CheckSettings provides the settings for exactly one type of check. message CheckSettings { - option (gogoproto.onlyone) = true; - PingSettings ping = 1 [(gogoproto.jsontag) = "ping,omitempty"]; - HttpSettings http = 2 [(gogoproto.jsontag) = "http,omitempty"]; - DnsSettings dns = 3 [(gogoproto.jsontag) = "dns,omitempty"]; - TcpSettings tcp = 4 [(gogoproto.jsontag) = "tcp,omitempty"]; + option (gogoproto.onlyone) = true; + PingSettings ping = 1 [(gogoproto.jsontag) = "ping,omitempty"]; + HttpSettings http = 2 [(gogoproto.jsontag) = "http,omitempty"]; + DnsSettings dns = 3 [(gogoproto.jsontag) = "dns,omitempty"]; + TcpSettings tcp = 4 [(gogoproto.jsontag) = "tcp,omitempty"]; TracerouteSettings traceroute = 5 [(gogoproto.jsontag) = "traceroute,omitempty"]; - ScriptedSettings scripted = 6 [(gogoproto.jsontag) = "scripted,omitempty"]; // experimental - MultiHttpSettings multihttp = 7 [(gogoproto.jsontag) = "multihttp,omitempty"]; // experimental - GrpcSettings grpc = 8 [(gogoproto.jsontag) = "grpc,omitempty"]; // experimental + ScriptedSettings scripted = 6 [(gogoproto.jsontag) = "scripted,omitempty"]; // experimental + MultiHttpSettings multihttp = 7 [(gogoproto.jsontag) = "multihttp,omitempty"]; // experimental + GrpcSettings grpc = 8 [(gogoproto.jsontag) = "grpc,omitempty"]; // experimental } // PingSettings provides the settings for a ping check. message PingSettings { - IpVersion ipVersion = 1 [(gogoproto.jsontag) = "ipVersion"]; // IP version used in the IP layer - string sourceIpAddress = 2 [(gogoproto.jsontag) = "sourceIpAddress,omitempty"]; // source IP address for the packets - int64 payloadSize = 3 [(gogoproto.jsontag) = "payloadSize,omitempty"]; // size of the ICMP packet's data portion - bool dontFragment = 4 [(gogoproto.jsontag) = "dontFragment"]; // set the IP don't fragment option + IpVersion ipVersion = 1 [(gogoproto.jsontag) = "ipVersion"]; // IP version used in the IP layer + string sourceIpAddress = 2 [(gogoproto.jsontag) = "sourceIpAddress,omitempty"]; // source IP address for the packets + int64 payloadSize = 3 [(gogoproto.jsontag) = "payloadSize,omitempty"]; // size of the ICMP packet's data portion + bool dontFragment = 4 [(gogoproto.jsontag) = "dontFragment"]; // set the IP don't fragment option // custom settings not present in blackbox-exporter - int64 packetCount = 900 [(gogoproto.jsontag) = "packetCount"]; // number of ping packets to send + int64 packetCount = 900 [(gogoproto.jsontag) = "packetCount"]; // number of ping packets to send } // HttpMethod represents the HTTP method used when making HTTP requests. enum HttpMethod { - GET = 0; + GET = 0; CONNECT = 1; - DELETE = 2; - HEAD = 3; + DELETE = 2; + HEAD = 3; OPTIONS = 4; - POST = 5; - PUT = 6; - TRACE = 7; + POST = 5; + PUT = 6; + TRACE = 7; } // HttpSettings provides the settings for a HTTP check. message HttpSettings { - IpVersion ipVersion = 1 [(gogoproto.jsontag) = "ipVersion"]; - HttpMethod method = 2 [(gogoproto.jsontag) = "method"]; - repeated string headers = 3 [(gogoproto.jsontag) = "headers,omitempty"]; - string body = 4 [(gogoproto.jsontag) = "body,omitempty"]; - bool noFollowRedirects = 5 [(gogoproto.jsontag) = "noFollowRedirects"]; + IpVersion ipVersion = 1 [(gogoproto.jsontag) = "ipVersion"]; + HttpMethod method = 2 [(gogoproto.jsontag) = "method"]; + repeated string headers = 3 [(gogoproto.jsontag) = "headers,omitempty"]; + string body = 4 [(gogoproto.jsontag) = "body,omitempty"]; + bool noFollowRedirects = 5 [(gogoproto.jsontag) = "noFollowRedirects"]; // client config - TLSConfig tlsConfig = 100 [(gogoproto.jsontag) = "tlsConfig,omitempty"]; - BasicAuth basicAuth = 101 [(gogoproto.jsontag) = "basicAuth,omitempty"]; - string bearerToken = 102 [(gogoproto.jsontag) = "bearerToken,omitempty"]; - string proxyURL = 103 [(gogoproto.jsontag) = "proxyURL,omitempty"]; - OAuth2Config oauth2Config = 104 [(gogoproto.jsontag) = "oauth2Config,omitempty"]; + TLSConfig tlsConfig = 100 [(gogoproto.jsontag) = "tlsConfig,omitempty"]; + BasicAuth basicAuth = 101 [(gogoproto.jsontag) = "basicAuth,omitempty"]; + string bearerToken = 102 [(gogoproto.jsontag) = "bearerToken,omitempty"]; + string proxyURL = 103 [(gogoproto.jsontag) = "proxyURL,omitempty"]; + OAuth2Config oauth2Config = 104 [(gogoproto.jsontag) = "oauth2Config,omitempty"]; repeated string proxyConnectHeaders = 105 [(gogoproto.jsontag) = "proxyConnectHeaders,omitempty"]; // validations - bool failIfSSL = 200 [(gogoproto.jsontag) = "failIfSSL"]; - bool failIfNotSSL = 201 [(gogoproto.jsontag) = "failIfNotSSL"]; - repeated int32 validStatusCodes = 202 [(gogoproto.jsontag) = "validStatusCodes,omitempty"]; - repeated string validHTTPVersions = 203 [(gogoproto.jsontag) = "validHTTPVersions,omitempty"]; - repeated string failIfBodyMatchesRegexp = 204 [(gogoproto.jsontag) = "failIfBodyMatchesRegexp,omitempty"]; - repeated string failIfBodyNotMatchesRegexp = 205 [(gogoproto.jsontag) = "failIfBodyNotMatchesRegexp,omitempty"]; - repeated HeaderMatch failIfHeaderMatchesRegexp = 206 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "failIfHeaderMatchesRegexp,omitempty"]; - repeated HeaderMatch failIfHeaderNotMatchesRegexp = 207 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "failIfHeaderNotMatchesRegexp,omitempty"]; - CompressionAlgorithm compression = 208 [(gogoproto.jsontag) = "compression,omitempty"]; + bool failIfSSL = 200 [(gogoproto.jsontag) = "failIfSSL"]; + bool failIfNotSSL = 201 [(gogoproto.jsontag) = "failIfNotSSL"]; + repeated int32 validStatusCodes = 202 [(gogoproto.jsontag) = "validStatusCodes,omitempty"]; + repeated string validHTTPVersions = 203 [(gogoproto.jsontag) = "validHTTPVersions,omitempty"]; + repeated string failIfBodyMatchesRegexp = 204 [(gogoproto.jsontag) = "failIfBodyMatchesRegexp,omitempty"]; + repeated string failIfBodyNotMatchesRegexp = 205 [(gogoproto.jsontag) = "failIfBodyNotMatchesRegexp,omitempty"]; + repeated HeaderMatch failIfHeaderMatchesRegexp = 206 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "failIfHeaderMatchesRegexp,omitempty" + ]; + repeated HeaderMatch failIfHeaderNotMatchesRegexp = 207 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "failIfHeaderNotMatchesRegexp,omitempty" + ]; + CompressionAlgorithm compression = 208 [(gogoproto.jsontag) = "compression,omitempty"]; // custom settings not present in blackbox-exporter @@ -338,36 +373,39 @@ message HttpSettings { // Configuration for two-legged OAuth2 (client_credentials grant type). message OAuth2Config { - string clientId = 1 [(gogoproto.jsontag) = "clientId"]; // (Required) client identifier - string clientSecret = 2 [(gogoproto.jsontag) = "clientSecret"]; // (Required) client secret - string tokenURL = 3 [(gogoproto.jsontag) = "tokenURL"]; // (Required) URL for the token endpoint - repeated string scopes = 4 [(gogoproto.jsontag) = "scopes,omitempty"]; // Service-specific list of scopes - repeated Label endpointParams = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "endpointParams,omitempty"]; // Extra request parameters to use with token endpoint - TLSConfig tlsConfig = 6 [(gogoproto.jsontag) = "tlsConfig,omitempty"]; - string proxyURL = 7 [(gogoproto.jsontag) = "proxyURL,omitempty"]; + string clientId = 1 [(gogoproto.jsontag) = "clientId"]; // (Required) client identifier + string clientSecret = 2 [(gogoproto.jsontag) = "clientSecret"]; // (Required) client secret + string tokenURL = 3 [(gogoproto.jsontag) = "tokenURL"]; // (Required) URL for the token endpoint + repeated string scopes = 4 [(gogoproto.jsontag) = "scopes,omitempty"]; // Service-specific list of scopes + repeated Label endpointParams = 5 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "endpointParams,omitempty" + ]; // Extra request parameters to use with token endpoint + TLSConfig tlsConfig = 6 [(gogoproto.jsontag) = "tlsConfig,omitempty"]; + string proxyURL = 7 [(gogoproto.jsontag) = "proxyURL,omitempty"]; } // HeaderMatch represents a single header that must match in order for // the check to be considered successful. message HeaderMatch { - string header = 1 [(gogoproto.jsontag) = "header,omitempty"]; // the header to match - string regexp = 2 [(gogoproto.jsontag) = "regexp,omitempty"]; // a regular expression to match against the header's value - bool allowMissing = 3 [(gogoproto.jsontag) = "allowMissing,omitempty"]; // consider the match successful if the header is absent + string header = 1 [(gogoproto.jsontag) = "header,omitempty"]; // the header to match + string regexp = 2 [(gogoproto.jsontag) = "regexp,omitempty"]; // a regular expression to match against the header's value + bool allowMissing = 3 [(gogoproto.jsontag) = "allowMissing,omitempty"]; // consider the match successful if the header is absent } // DnsRecordType represents the DNS record types to be queried in DNS // checks. enum DnsRecordType { - ANY = 0; - A = 1; - AAAA = 2; + ANY = 0; + A = 1; + AAAA = 2; CNAME = 3; - MX = 4; - NS = 5; - PTR = 6; - SOA = 7; - SRV = 8; - TXT = 9; + MX = 4; + NS = 5; + PTR = 6; + SOA = 7; + SRV = 8; + TXT = 9; } // DnsProtocol represents the IP protocol to use for DNS queries. @@ -378,7 +416,7 @@ enum DnsProtocol { // DNSRRValidator represents the DNS resource record validations. message DNSRRValidator { - repeated string failIfMatchesRegexp = 1 [(gogoproto.jsontag) = "failIfMatchesRegexp,omitempty"]; + repeated string failIfMatchesRegexp = 1 [(gogoproto.jsontag) = "failIfMatchesRegexp,omitempty"]; repeated string failIfNotMatchesRegexp = 2 [(gogoproto.jsontag) = "failIfNotMatchesRegexp,omitempty"]; } @@ -390,66 +428,69 @@ message DNSRRValidator { // // "ipVersion" is the IP version to use in the IP layer. message DnsSettings { - IpVersion ipVersion = 1 [(gogoproto.jsontag) = "ipVersion"]; - string sourceIpAddress = 2 [(gogoproto.jsontag) = "sourceIpAddress,omitempty"]; - string server = 3 [(gogoproto.jsontag) = "server"]; - int32 port = 4 [(gogoproto.jsontag) = "port"]; - DnsRecordType recordType = 5 [(gogoproto.jsontag) = "recordType"]; - DnsProtocol protocol = 6 [(gogoproto.jsontag) = "protocol"]; + IpVersion ipVersion = 1 [(gogoproto.jsontag) = "ipVersion"]; + string sourceIpAddress = 2 [(gogoproto.jsontag) = "sourceIpAddress,omitempty"]; + string server = 3 [(gogoproto.jsontag) = "server"]; + int32 port = 4 [(gogoproto.jsontag) = "port"]; + DnsRecordType recordType = 5 [(gogoproto.jsontag) = "recordType"]; + DnsProtocol protocol = 6 [(gogoproto.jsontag) = "protocol"]; // validations - repeated string validRCodes = 200 [(gogoproto.jsontag) = "validRCodes,omitempty"]; - DNSRRValidator validateAnswer = 201 [(gogoproto.jsontag) = "validateAnswerRRS,omitempty"]; - DNSRRValidator validateAuthority = 202 [(gogoproto.jsontag) = "validateAuthorityRRS,omitempty"]; - DNSRRValidator validateAdditional = 203 [(gogoproto.jsontag) = "validateAdditionalRRS,omitempty"]; + repeated string validRCodes = 200 [(gogoproto.jsontag) = "validRCodes,omitempty"]; + DNSRRValidator validateAnswer = 201 [(gogoproto.jsontag) = "validateAnswerRRS,omitempty"]; + DNSRRValidator validateAuthority = 202 [(gogoproto.jsontag) = "validateAuthorityRRS,omitempty"]; + DNSRRValidator validateAdditional = 203 [(gogoproto.jsontag) = "validateAdditionalRRS,omitempty"]; } // TcpSettings provides the settings for a TCP check. // // "ipVersion" is the IP version to use in the IP layer. message TcpSettings { - IpVersion ipVersion = 1 [(gogoproto.jsontag) = "ipVersion"]; - string sourceIpAddress = 2 [(gogoproto.jsontag) = "sourceIpAddress,omitempty"]; - bool tls = 3 [(gogoproto.jsontag) = "tls,omitempty"]; - TLSConfig tlsConfig = 4 [(gogoproto.jsontag) = "tlsConfig,omitempty"]; - repeated TCPQueryResponse queryResponse = 5 [(gogoproto.jsontag) = "queryResponse,omitempty", (gogoproto.nullable) = false]; + IpVersion ipVersion = 1 [(gogoproto.jsontag) = "ipVersion"]; + string sourceIpAddress = 2 [(gogoproto.jsontag) = "sourceIpAddress,omitempty"]; + bool tls = 3 [(gogoproto.jsontag) = "tls,omitempty"]; + TLSConfig tlsConfig = 4 [(gogoproto.jsontag) = "tlsConfig,omitempty"]; + repeated TCPQueryResponse queryResponse = 5 [ + (gogoproto.jsontag) = "queryResponse,omitempty", + (gogoproto.nullable) = false + ]; } // TCPQueryResponse represents a single step in a sequence of // send/expect pairs to be used when connecting to a generic TCP // service. message TCPQueryResponse { - bytes send = 1 [(gogoproto.jsontag) = "send"]; - bytes expect = 2 [(gogoproto.jsontag) = "expect"]; - bool startTLS = 3 [(gogoproto.jsontag) = "startTLS,omitempty"]; + bytes send = 1 [(gogoproto.jsontag) = "send"]; + bytes expect = 2 [(gogoproto.jsontag) = "expect"]; + bool startTLS = 3 [(gogoproto.jsontag) = "startTLS,omitempty"]; } // IpVersion represents the version of the IP protocol to be used in // checks. enum IpVersion { - Any = 0; // use IPv6 if supported and fall back to IPv4 otherwise - V4 = 1; // use IPv4 only - V6 = 2; // use IPv6 only + Any = 0; // use IPv6 if supported and fall back to IPv4 otherwise + V4 = 1; // use IPv4 only + V6 = 2; // use IPv6 only } // CompressionAlgorithm represents the compression algorithm to use. enum CompressionAlgorithm { - none = 0; // no compression algorithm - identity = 1; // no compression, passthru - gzip = 2; // gzip - br = 3; // br, brotli - deflate = 4; // deflate + none = 0; // no compression algorithm + identity = 1; // no compression, passthru + gzip = 2; // gzip + br = 3; // br, brotli + deflate = 4; // deflate } // TLSConfig represents the TLS data to be used when establishing a // secure connection in the protocols that support it. message TLSConfig { - bool insecureSkipVerify = 1 [(gogoproto.jsontag) = "insecureSkipVerify,omitempty"]; - bytes CACert = 2 [(gogoproto.jsontag) = "caCert,omitempty"]; - bytes clientCert = 3 [(gogoproto.jsontag) = "clientCert,omitempty"]; - bytes clientKey = 4 [(gogoproto.jsontag) = "clientKey,omitempty"]; - string serverName = 5 [(gogoproto.jsontag) = "serverName,omitempty"]; + bool insecureSkipVerify = 1 [(gogoproto.jsontag) = "insecureSkipVerify,omitempty"]; + bytes CACert = 2 [(gogoproto.jsontag) = "caCert,omitempty"]; + bytes clientCert = 3 [(gogoproto.jsontag) = "clientCert,omitempty"]; + bytes clientKey = 4 [(gogoproto.jsontag) = "clientKey,omitempty"]; + string serverName = 5 [(gogoproto.jsontag) = "serverName,omitempty"]; } // BasicAuth represents the basic authentication credentials to be used @@ -460,10 +501,10 @@ message BasicAuth { } message TracerouteSettings { - int64 maxHops = 1 [(gogoproto.jsontag) = "maxHops"]; // Maximimum hops to make in a traceroute before exiting - int64 maxUnknownHops = 2 [(gogoproto.jsontag) = "maxUnknownHops"]; // Maximum hops probe that give no response before giving up - bool ptrLookup = 3 [(gogoproto.jsontag) = "ptrLookup"]; // Include reverse DNS lookup - int64 hopTimeout = 4 [(gogoproto.jsontag) = "hopTimeout"]; // Timeout for individual hop pings + int64 maxHops = 1 [(gogoproto.jsontag) = "maxHops"]; // Maximimum hops to make in a traceroute before exiting + int64 maxUnknownHops = 2 [(gogoproto.jsontag) = "maxUnknownHops"]; // Maximum hops probe that give no response before giving up + bool ptrLookup = 3 [(gogoproto.jsontag) = "ptrLookup"]; // Include reverse DNS lookup + int64 hopTimeout = 4 [(gogoproto.jsontag) = "hopTimeout"]; // Timeout for individual hop pings } message ScriptedSettings { @@ -472,36 +513,36 @@ message ScriptedSettings { // MultiHttpSettings represents the settings for the MultiHttp check type. message MultiHttpSettings { - repeated MultiHttpEntry entries = 1 [(gogoproto.jsontag) = "entries"]; // One or more entries in the MultiHttp check - bool logResponses = 2 [(gogoproto.jsontag) = "logResponseBodies,omitempty"]; // Whether to log the response bodies in the output. + repeated MultiHttpEntry entries = 1 [(gogoproto.jsontag) = "entries"]; // One or more entries in the MultiHttp check + bool logResponses = 2 [(gogoproto.jsontag) = "logResponseBodies,omitempty"]; // Whether to log the response bodies in the output. } // MultiHttpEntry represents a single entry in a MultiHttp check. message MultiHttpEntry { - MultiHttpEntryRequest request = 1 [(gogoproto.jsontag) = "request,omitempty"]; // The request parameters. - repeated MultiHttpEntryAssertion assertions = 2 [(gogoproto.jsontag) = "checks,omitempty"]; // Zero or more assertions to be made on the response. - repeated MultiHttpEntryVariable variables = 3 [(gogoproto.jsontag) = "variables,omitempty"]; // Zero or more variables to be used in the request. + MultiHttpEntryRequest request = 1 [(gogoproto.jsontag) = "request,omitempty"]; // The request parameters. + repeated MultiHttpEntryAssertion assertions = 2 [(gogoproto.jsontag) = "checks,omitempty"]; // Zero or more assertions to be made on the response. + repeated MultiHttpEntryVariable variables = 3 [(gogoproto.jsontag) = "variables,omitempty"]; // Zero or more variables to be used in the request. } // HttpHeader represents a single HTTP header key-value pair. message HttpHeader { - string name = 1 [(gogoproto.jsontag) = "name"]; // The name. - string value = 2 [(gogoproto.jsontag) = "value"]; // The value. + string name = 1 [(gogoproto.jsontag) = "name"]; // The name. + string value = 2 [(gogoproto.jsontag) = "value"]; // The value. } // QueryField represents a single query field key-value pair. message QueryField { - string name = 1 [(gogoproto.jsontag) = "name"]; // The name. - string value = 2 [(gogoproto.jsontag) = "value"]; // The value. + string name = 1 [(gogoproto.jsontag) = "name"]; // The name. + string value = 2 [(gogoproto.jsontag) = "value"]; // The value. } // MultiHttpEntryRequest contains the settings for a single request in a MultiHttp check. message MultiHttpEntryRequest { - HttpMethod method = 1 [(gogoproto.jsontag) = "method"]; // The HTTP method to use. - string url = 2 [(gogoproto.jsontag) = "url"]; // The URL for the request. - repeated HttpHeader headers = 3 [(gogoproto.jsontag) = "headers,omitempty"]; // Zero or more headers to be sent with the request. - repeated QueryField queryFields = 4 [(gogoproto.jsontag) = "queryFields,omitempty"]; // Zero or more query fields to be sent with the request. - HttpRequestBody body = 5 [(gogoproto.jsontag) = "body,omitempty"]; // The request body. + HttpMethod method = 1 [(gogoproto.jsontag) = "method"]; // The HTTP method to use. + string url = 2 [(gogoproto.jsontag) = "url"]; // The URL for the request. + repeated HttpHeader headers = 3 [(gogoproto.jsontag) = "headers,omitempty"]; // Zero or more headers to be sent with the request. + repeated QueryField queryFields = 4 [(gogoproto.jsontag) = "queryFields,omitempty"]; // Zero or more query fields to be sent with the request. + HttpRequestBody body = 5 [(gogoproto.jsontag) = "body,omitempty"]; // The request body. // TODO(mem): we could add the HTTP version here, but that's an assertion, // there doesn't seem to be a way in k6 to specify which protocol to use // (even if the underlying Go library supports it). @@ -509,38 +550,38 @@ message MultiHttpEntryRequest { // HttpRequestBody represents the body of an HTTP request. message HttpRequestBody { - string contentType = 1 [(gogoproto.jsontag) = "contentType"]; // The content-type of the body. - string contentEncoding = 2 [(gogoproto.jsontag) = "contentEncoding,omitempty"]; // The content-encoding of the body. - bytes payload = 3 [(gogoproto.jsontag) = "payload"]; // The payload of the body. + string contentType = 1 [(gogoproto.jsontag) = "contentType"]; // The content-type of the body. + string contentEncoding = 2 [(gogoproto.jsontag) = "contentEncoding,omitempty"]; // The content-encoding of the body. + bytes payload = 3 [(gogoproto.jsontag) = "payload"]; // The payload of the body. } // MultiHttpEntryAssertionType represents the type of assertion to be made. enum MultiHttpEntryAssertionType { - TEXT = 0; - JSON_PATH_VALUE = 1; + TEXT = 0; + JSON_PATH_VALUE = 1; JSON_PATH_ASSERTION = 2; - REGEX_ASSERTION = 3; + REGEX_ASSERTION = 3; option (gogoproto.goproto_enum_stringer) = false; } // MultiHttpEntryAssertionSubjectVariant represents the subject of the assertion. enum MultiHttpEntryAssertionSubjectVariant { - DEFAULT_SUBJECT = 0; + DEFAULT_SUBJECT = 0; RESPONSE_HEADERS = 1; HTTP_STATUS_CODE = 2; - RESPONSE_BODY = 3; + RESPONSE_BODY = 3; option (gogoproto.goproto_enum_stringer) = false; } // MultiHttpEntryAssertionConditionVariant represents the condition between the assertion's expression and value. enum MultiHttpEntryAssertionConditionVariant { DEFAULT_CONDITION = 0; - NOT_CONTAINS = 1; - EQUALS = 2; - STARTS_WITH = 3; - ENDS_WITH = 4; - TYPE_OF = 5; - CONTAINS = 6; + NOT_CONTAINS = 1; + EQUALS = 2; + STARTS_WITH = 3; + ENDS_WITH = 4; + TYPE_OF = 5; + CONTAINS = 6; option (gogoproto.goproto_enum_stringer) = false; } @@ -559,41 +600,41 @@ enum MultiHttpEntryAssertionConditionVariant { // operation. Headers are case-insensitive (RFC 7230, section 3.2, // https://datatracker.ietf.org/doc/html/rfc7230#section-3.2). message MultiHttpEntryAssertion { - MultiHttpEntryAssertionType type = 1 [(gogoproto.jsontag) = "type"]; - MultiHttpEntryAssertionSubjectVariant subject = 2 [(gogoproto.jsontag) = "subject,omitempty"]; - MultiHttpEntryAssertionConditionVariant condition = 3 [(gogoproto.jsontag) = "condition,omitempty"]; - string expression = 4 [(gogoproto.jsontag) = "expression,omitempty"]; - string value = 5 [(gogoproto.jsontag) = "value,omitempty"]; + MultiHttpEntryAssertionType type = 1 [(gogoproto.jsontag) = "type"]; + MultiHttpEntryAssertionSubjectVariant subject = 2 [(gogoproto.jsontag) = "subject,omitempty"]; + MultiHttpEntryAssertionConditionVariant condition = 3 [(gogoproto.jsontag) = "condition,omitempty"]; + string expression = 4 [(gogoproto.jsontag) = "expression,omitempty"]; + string value = 5 [(gogoproto.jsontag) = "value,omitempty"]; } // MultiHttpEntryVariableType represents the type of expression used to populate the variable. enum MultiHttpEntryVariableType { - JSON_PATH = 0; - REGEX = 1; + JSON_PATH = 0; + REGEX = 1; CSS_SELECTOR = 2; option (gogoproto.goproto_enum_stringer) = false; } // MultiHttpEntryVariable represents a single variable to be used in the request. message MultiHttpEntryVariable { - MultiHttpEntryVariableType type = 1 [(gogoproto.jsontag) = "type"]; - string name = 2 [(gogoproto.jsontag) = "name,omitempty"]; - string expression = 3 [(gogoproto.jsontag) = "expression,omitempty"]; - string attribute = 4 [(gogoproto.jsontag) = "attribute,omitempty"]; + MultiHttpEntryVariableType type = 1 [(gogoproto.jsontag) = "type"]; + string name = 2 [(gogoproto.jsontag) = "name,omitempty"]; + string expression = 3 [(gogoproto.jsontag) = "expression,omitempty"]; + string attribute = 4 [(gogoproto.jsontag) = "attribute,omitempty"]; } // GrpcSettings provides the settings for a gRPC check. message GrpcSettings { IpVersion ipVersion = 1 [(gogoproto.jsontag) = "ipVersion"]; - string service = 2 [(gogoproto.jsontag) = "service,omitempty"]; - bool tls = 3 [(gogoproto.jsontag) = "tls,omitempty"]; + string service = 2 [(gogoproto.jsontag) = "service,omitempty"]; + bool tls = 3 [(gogoproto.jsontag) = "tls,omitempty"]; TLSConfig tlsConfig = 4 [(gogoproto.jsontag) = "tlsConfig,omitempty"]; } service Telemetry { // PushTelemetry pushes telemetry data for all the tenants that are running // checks in the agent which belong to the same region. - rpc PushTelemetry(RegionTelemetry) returns (PushTelemetryResponse) {}; + rpc PushTelemetry(RegionTelemetry) returns (PushTelemetryResponse) {} } // CheckClass represents the supported check classes. @@ -606,26 +647,26 @@ enum CheckClass { // Groups the telemetry data for all the tenants that have checks being // executed in the agent and belong to the same region. message RegionTelemetry { - string instance = 1 [(gogoproto.jsontag) = "instance"]; // Identifies the agent instance - int32 regionId = 2 [(gogoproto.jsontag) = "regionId"]; + string instance = 1 [(gogoproto.jsontag) = "instance"]; // Identifies the agent instance + int32 regionId = 2 [(gogoproto.jsontag) = "regionId"]; repeated TenantTelemetry telemetry = 3 [(gogoproto.jsontag) = "telemetry"]; } // TenantTelemetry represents the telemetry data for a specific tenant. message TenantTelemetry { - int64 tenantId = 1 [(gogoproto.jsontag) = "tenantId"]; // Local tenant ID + int64 tenantId = 1 [(gogoproto.jsontag) = "tenantId"]; // Local tenant ID repeated CheckClassTelemetry telemetry = 2 [(gogoproto.jsontag) = "telemetry"]; } // CheckClassTelemetry represents the telemetry data for a specific check class. message CheckClassTelemetry { - CheckClass checkClass = 1 [(gogoproto.jsontag) = "checkClass"]; - int32 executions = 2 [(gogoproto.jsontag) = "executions"]; - float duration = 3 [(gogoproto.jsontag) = "duration"]; + CheckClass checkClass = 1 [(gogoproto.jsontag) = "checkClass"]; + int32 executions = 2 [(gogoproto.jsontag) = "executions"]; + float duration = 3 [(gogoproto.jsontag) = "duration"]; int32 sampledExecutions = 4 [(gogoproto.jsontag) = "sampledExecutions"]; } // PushTelemetryResponse represents a response for a push telemetry rpc call. message PushTelemetryResponse { - Status status = 1 [(gogoproto.jsontag) = "status"]; + Status status = 1 [(gogoproto.jsontag) = "status"]; } diff --git a/pkg/pb/synthetic_monitoring/checks_extra.go b/pkg/pb/synthetic_monitoring/checks_extra.go index d326a8ef..faaa734f 100644 --- a/pkg/pb/synthetic_monitoring/checks_extra.go +++ b/pkg/pb/synthetic_monitoring/checks_extra.go @@ -16,8 +16,8 @@ // messages used to communicate with synthetic-monitoring-api. package synthetic_monitoring -//go:generate go run github.com/dmarkham/enumer -type=CheckType,CheckClass -trimprefix=CheckType,CheckClass -transform=lower -output=string.go -//go:generate go run github.com/dmarkham/enumer -type=MultiHttpEntryAssertionType,MultiHttpEntryAssertionSubjectVariant,MultiHttpEntryAssertionConditionVariant,MultiHttpEntryVariableType -trimprefix=MultiHttpEntryAssertionType_,MultiHttpEntryAssertionSubjectVariant_,MultiHttpEntryAssertionConditionVariant_,MultiHttpEntryVariableType_ -transform=upper -output=multihttp_string.go +//go:generate ../../../scripts/enumer -type=CheckType -trimprefix=CheckType -transform=lower -output=string.go +//go:generate ../../../scripts/enumer -type=MultiHttpEntryAssertionType,MultiHttpEntryAssertionSubjectVariant,MultiHttpEntryAssertionConditionVariant,MultiHttpEntryVariableType -trimprefix=MultiHttpEntryAssertionType_,MultiHttpEntryAssertionSubjectVariant_,MultiHttpEntryAssertionConditionVariant_,MultiHttpEntryVariableType_ -transform=upper -output=multihttp_string.go import ( "errors" diff --git a/pkg/pb/synthetic_monitoring/string.go b/pkg/pb/synthetic_monitoring/string.go index 666ae297..d6881feb 100644 --- a/pkg/pb/synthetic_monitoring/string.go +++ b/pkg/pb/synthetic_monitoring/string.go @@ -1,4 +1,4 @@ -// Code generated by "enumer -type=CheckType -trimprefix=CheckType,CheckClass -transform=lower -output=string.go"; DO NOT EDIT. +// Code generated by "enumer -type=CheckType -trimprefix=CheckType -transform=lower -output=string.go"; DO NOT EDIT. package synthetic_monitoring diff --git a/scripts/docker-run b/scripts/docker-run new file mode 100755 index 00000000..41595cc5 --- /dev/null +++ b/scripts/docker-run @@ -0,0 +1,51 @@ +#!/usr/bin/env sh + +set -e + +# This is a fallback value; the actual value should be passed in the environment. +CGO_ENABLED=${CGO_ENABLED:-0} + +if test -z "${ROOTDIR}" ; then + ROOTDIR=$(dirname "$(go env GOMOD)") + if test -z "${ROOTDIR}" ; then + ROOTDIR=$(git rev-parse --show-toplevel) + fi + ROOTDIR=$(realpath -m "${ROOTDIR}") +fi + +. "${ROOTDIR}/.gbt.mk" + +if test -z "${GOPATH}" ; then + GOPATH=$(go env GOPATH) +fi + +if test -z "${GOMODCACHE}" ; then + GOMODCACHE=$(go env GOMODCACHE) +fi + +if test -z "${CI}" ; then + CI=false +fi + +if test -z "${GOOS}" ; then + GOOS=$(go env GOOS) +fi + +if test -z "${GOARCH}" ; then + GOARCH=$(go env GOARCH) +fi + +exec docker run \ + --rm \ + --user "$(id -u):$(id -g)" \ + --volume "${ROOTDIR}:${ROOTDIR}" \ + --volume "${HOME}/.cache:/.cache" \ + --volume "${GOPATH}:/go" \ + --volume "${GOMODCACHE}:/go/pkg/mod" \ + --workdir "${PWD}" \ + --env CI="${CI}" \ + --env CGO_ENABLED="${CGO_ENABLED}" \ + --env GOOS="${GOOS}" \ + --env GOARCH="${GOARCH}" \ + "${GBT_IMAGE}" \ + "$@" diff --git a/scripts/enumer b/scripts/enumer new file mode 100755 index 00000000..b1769a06 --- /dev/null +++ b/scripts/enumer @@ -0,0 +1,18 @@ +#!/bin/sh + +set -e + +if command -v enumer > /dev/null 2>&1 ; then + exec enumer "$@" +fi + +if test -z "${ROOTDIR}" ; then + ROOTDIR=$(dirname "$(go env GOMOD)") + if test -z "${ROOTDIR}" ; then + ROOTDIR=$(git rev-parse --show-toplevel) + fi + ROOTDIR=$(realpath -m "${ROOTDIR}") +fi + +"${ROOTDIR}/scripts/docker-run" enumer "$@" + diff --git a/scripts/genproto.sh b/scripts/genproto.sh index bbcc5e15..d47ad3ca 100755 --- a/scripts/genproto.sh +++ b/scripts/genproto.sh @@ -11,45 +11,20 @@ if test ! -e "scripts/genproto.sh" ; then exit 255 fi -if ! command -v protoc > /dev/null 2>&1 ; then - echo "could not find protoc 3.5.1, is it installed + in PATH?" - exit 255 -fi - -echo "Installing Protocol Buffers plugins" -GO111MODULE=on go mod download - -### INSTALL_PKGS="github.com/gogo/protobuf/protoc-gen-gogofast github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" -INSTALL_PKGS="github.com/gogo/protobuf/protoc-gen-gogofast" -for pkg in ${INSTALL_PKGS}; do - GO111MODULE=on go install "$pkg" -done - -PB_ROOT="$(GO111MODULE=on go list -f '{{.Dir}}' ./pkg/pb)" -PB_PATH="${PB_ROOT}" -GOGO_PROTOBUF_ROOT="$(GO111MODULE=on go list -f '{{ .Dir }}' -m github.com/gogo/protobuf)" -GOGO_PROTOBUF_PATH="${GOGO_PROTOBUF_ROOT}:${GOGO_PROTOBUF_ROOT}/protobuf" -GOGO_GOOGLEAPIS_ROOT="$(GO111MODULE=on go list -f '{{ .Dir }}' -m github.com/gogo/googleapis)" -GOGO_GOOGLEAPIS_PATH="${GOGO_GOOGLEAPIS_ROOT}" - DIRS="pkg/pb/synthetic_monitoring" for dir in ${DIRS}; do echo "Generating Protocol Buffers code in ${dir}" pushd "${dir}" > /dev/null - protoc --gogofast_out=plugins=grpc:. \ - -I=. \ - -I="${PB_PATH}" \ - -I="${GOGO_PROTOBUF_PATH}" \ - -I="${GOGO_GOOGLEAPIS_PATH}" \ - ./*.proto - sed -i.bak -E 's,import _ "github.com/gogo/protobuf/gogoproto",,g' -- *.pb.go - sed -i.bak -E 's,(import |\t)_ "google/protobuf",,g' -- *.pb.go - sed -i.bak -E 's,(import |\t)_ "google/api",,g' -- *.pb.go - sed -i.bak -E 's,golang/protobuf,gogo/protobuf,g' -- *.pb.go - sed -i.bak -E 's,(import |\t)protobuf "google/protobuf",protobuf "github.com/gogo/protobuf/types", g' -- *.pb.go - rm -f -- *.bak - goimports -w ./*.pb.go + # Check that are no breaking changes + buf breaking . --against ./checks.binpb + + # Generate new code + buf generate + goimports -w . + + # Capture the new data to validate future changes against + buf build --output checks.binpb popd > /dev/null done diff --git a/scripts/make/go.mk b/scripts/make/go.mk index b2d57e8f..90998c5f 100644 --- a/scripts/make/go.mk +++ b/scripts/make/go.mk @@ -31,7 +31,7 @@ ENUMER ?= docker run \ -v '$(HOME)/.cache/go-build:/root/.cache/go-build' \ --env GOFLAGS=-buildvcs=false \ --workdir /mnt \ - '$(GO_TOOLS_IMAGE)' \ + '$(GBT_IMAGE)' \ enumer endif endif diff --git a/scripts/make/helpers.mk b/scripts/make/helpers.mk index 3d63688d..640bedbc 100644 --- a/scripts/make/helpers.mk +++ b/scripts/make/helpers.mk @@ -119,7 +119,7 @@ else endif $(S) false endif - $(V) ./scripts/generate-drone-yaml "$(GO_TOOLS_IMAGE)" "$(GH_REPO_NAME)" "$(ROOTDIR)/.drone.yml" "$(ROOTDIR)/scripts/configs/drone/main.jsonnet" + $(V) ./scripts/generate-drone-yaml "$(GBT_IMAGE)" "$(GH_REPO_NAME)" "$(ROOTDIR)/.drone.yml" "$(ROOTDIR)/scripts/configs/drone/main.jsonnet" .PHONY: dronefmt dronefmt: ## Format drone jsonnet files diff --git a/scripts/make/linters.mk b/scripts/make/linters.mk index d5f22f19..e2678014 100644 --- a/scripts/make/linters.mk +++ b/scripts/make/linters.mk @@ -4,15 +4,7 @@ SH_FILES ?= $(shell $(ROOTDIR)/scripts/list-sh-scripts) ifeq ($(origin GOLANGCI_LINT),undefined) ifneq ($(LOCAL_GOLANGCI_LINT),yes) -GOLANGCI_LINT ?= docker run \ - --rm \ - -v '$(ROOTDIR):/mnt' \ - -v '$(HOME)/.cache/go-build:/root/.cache/go-build' \ - -v '$(HOME)/.cache/golangci-lint:/root/.cache/golangci-lint' \ - --env GOFLAGS=-buildvcs=false \ - --workdir /mnt \ - '$(GO_TOOLS_IMAGE)' \ - golangci-lint +GOLANGCI_LINT ?= $(ROOTDIR)/scripts/docker-run env GOFLAGS=-buildvcs=false golangci-lint endif endif @@ -25,12 +17,7 @@ $(GOLANGCI_LINT): scripts/go/go.mod scripts/go/go.sum endif ifeq ($(origin SHELLCHECK),undefined) -SHELLCHECK ?= docker run \ - --rm \ - -v '$(ROOTDIR):/mnt' \ - --workdir /mnt \ - '$(GO_TOOLS_IMAGE)' \ - shellcheck +SHELLCHECK ?= $(ROOTDIR)/scripts/docker-run shellcheck endif .PHONY: golangci-lint diff --git a/scripts/make/testing.mk b/scripts/make/testing.mk index 78e33d79..55268f62 100644 --- a/scripts/make/testing.mk +++ b/scripts/make/testing.mk @@ -5,11 +5,13 @@ GO_TEST_ARGS ?= $(GO_PKGS) TEST_OUTPUT := $(DISTDIR)/test ifeq ($(origin GOTESTSUM),undefined) -GOTESTSUM ?= $(ROOTDIR)/scripts/go/bin/gotestsum -LOCAL_GOTESTSUM = yes +ifneq ($(LOCAL_GOTESTSUM),yes) +GOTESTSUM ?= $(ROOTDIR)/scripts/docker-run gotestsum +endif endif ifeq ($(LOCAL_GOTESTSUM),yes) +GOTESTSUM ?= $(ROOTDIR)/scripts/go/bin/gotestsum $(GOTESTSUM): scripts/go/go.mod $(S) cd scripts/go && \ $(GO) mod download && \ @@ -17,9 +19,11 @@ $(GOTESTSUM): scripts/go/go.mod endif .PHONY: test-go -test-go: $(GOTESTSUM) ## Run Go tests. +test-go: ## Run Go tests. +test-go: $(if $(filter $(LOCAL_GOTESTSUM),yes),$(GOTESTSUM)) +test-go: $(S) echo "test backend" - $(GOTESTSUM) \ + env CGO_ENABLED=1 $(GOTESTSUM) \ --format standard-verbose \ --jsonfile $(TEST_OUTPUT).json \ --junitfile $(TEST_OUTPUT).xml \ diff --git a/scripts/make/vars.mk b/scripts/make/vars.mk index fc73c7d0..9dfc5f58 100644 --- a/scripts/make/vars.mk +++ b/scripts/make/vars.mk @@ -23,6 +23,7 @@ endif # to building the tools that we need if they are missing. ifeq ($(USE_LOCAL_TOOLS),true) GOLANGCI_LINT := golangci-lint +GOTESTSUM := gotestsum SHELLCHECK := shellcheck XK6 := xk6 endif diff --git a/scripts/make/xk6.mk b/scripts/make/xk6.mk index 4f056006..48cd3e98 100644 --- a/scripts/make/xk6.mk +++ b/scripts/make/xk6.mk @@ -6,19 +6,7 @@ K6_VERSION := v0.50.0 LOCAL_GOPATH ?= $(shell go env GOPATH) ifeq ($(origin XK6),undefined) -XK6 ?= docker run \ - --rm \ - -i \ - -u "$(shell id -u):$(shell id -g)" \ - -e GOOS=$(GOOS) \ - -e GOARCH=$(GOARCH) \ - -v "${HOME}/.cache:/.cache" \ - -v "${LOCAL_GOPATH}:/go" \ - -v "$(XK6_PKG_DIR):$(XK6_PKG_DIR)" \ - -v "$(dir $(DIST_FILENAME)):$(dir $(DIST_FILENAME))" \ - --workdir /mnt \ - '$(GO_TOOLS_IMAGE)' \ - xk6 +XK6 ?= $(ROOTDIR)/scripts/docker-run xk6 endif define build_xk6_template