Repository: argoproj-labs/old-argo-dataflow (language: python)

Issue:
 ❌ FAIL: TestKafkaFMEA_PodDeletedDisruption 
```
2021/08/04 21:16:31 tailing logs for "kafka-main-0"/"sidecar"
2021/08/04 21:16:31 time="2021-08-04T21:14:48Z" level=info msg=cpu numCPU=2
2021/08/04 21:16:31 time="2021-08-04T21:14:48Z" level=info msg=process pid=1
2021/08/04 21:16:31 time="2021-08-04T21:14:48Z" level=info msg=version version=v0.0.0-latest-0
2021/08/04 21:16:31 time="2021-08-04T21:14:48Z" level=info msg=step clusterName=ci step="{\"kind\":\"Step\",\"apiVersion\":\"dataflow.argoproj.io/v1alpha1\",\"metadata\":{\"name\":\"kafka-main\",\"namespace\":\"argo-dataflow-system\",\"uid\":\"e675615f-491b-4770-814d-6c302026fb6c\",\"resourceVersion\":\"1907\",\"generation\":1,\"creationTimestamp\":\"2021-08-04T21:14:28Z\",\"labels\":{\"dataflow.argoproj.io/pipeline-name\":\"kafka\",\"dataflow.argoproj.io/step-name\":\"main\"},\"ownerReferences\":[{\"apiVersion\":\"dataflow.argoproj.io/v1alpha1\",\"kind\":\"Pipeline\",\"name\":\"kafka\",\"uid\":\"73f804c4-a872-464c-9a49-3cdbaef0a489\",\"controller\":true,\"blockOwnerDeletion\":true}]},\"spec\":{\"name\":\"main\",\"cat\":{},\"replicas\":1,\"sources\":[{\"name\":\"default\",\"kafka\":{\"name\":\"default\",\"topic\":\"test-topic-2125171354\",\"startOffset\":\"Last\"},\"retry\":{\"duration\":\"0s\",\"factorPercentage\":200,\"steps\":20,\"cap\":\"0s\",\"jitterPercentage\":10}}],\"sinks\":[{\"name\":\"default\",\"kafka\":{\"name\":\"default\",\"topic\":\"test-topic-1919373718\"}}],\"restartPolicy\":\"OnFailure\",\"serviceAccountName\":\"pipeline\"},\"status\":{\"phase\":\"\",\"replicas\":1,\"selector\":\"dataflow.argoproj.io/pipeline-name=kafka,dataflow.argoproj.io/step-name=main\",\"lastScaledAt\":\"2021-08-04T21:14:28Z\",\"sourceStatuses\":{\"default\":{\"pending\":7500,\"metrics\":{\"0\":{\"rate\":\"0\"}}}}}}"
2021/08/04 21:16:31 time="2021-08-04T21:14:48Z" level=info msg="generating self-signed certificate"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="sidecar config" pipelineName=kafka replica=0 stepName=main updateInterval=5s
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="connecting sink" sink="{\"name\":\"default\",\"kafka\":{\"name\":\"default\",\"brokers\":[\"kafka-broker:9092\"],\"topic\":\"test-topic-1919373718\"}}"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="Initializing new client"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="client/metadata fetching metadata for all topics from broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="Connected to broker at kafka-broker:9092 (unregistered)\n"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="client/brokers registered new broker #0 at kafka-broker:9092"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="Successfully initialized new client"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="adding stop hook" sink=default
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="FIFO out interface configured"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="HTTP out interface configured"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="HTTP in interface configured"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="waiting for HTTP in interface to be ready"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="starting HTTP server"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="starting HTTPS server"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="HTTP in interface ready"
2021/08/04 21:16:31 time="2021-08-04T21:14:50Z" level=info msg="connecting source" source="{\"name\":\"default\",\"kafka\":{\"name\":\"default\",\"brokers\":[\"kafka-broker:9092\"],\"topic\":\"test-topic-2125171354\",\"startOffset\":\"Last\"},\"retry\":{\"duration\":\"0s\",\"factorPercentage\":200,\"steps\":20,\"cap\":\"0s\",\"jitterPercentage\":10}}"
2021/08/04 21:16:31 time="2021-08-04T21:16:19Z" level=info msg="Closed connection to broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:19Z" level=info msg="Closed connection to broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:19Z" level=info msg="Closed connection to broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:19Z" level=info msg="Closed connection to broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="executing pre-patch hook" func=connectSources.func3
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="getting pending" source=default
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Initializing new client"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="client/metadata fetching metadata for all topics from broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Connected to broker at kafka-broker:9092 (unregistered)\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="client/brokers registered new broker #0 at kafka-broker:9092"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Successfully initialized new client"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Initializing new client"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="client/metadata fetching metadata for all topics from broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Connected to broker at kafka-broker:9092 (unregistered)\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Connected to broker at kafka-broker:9092 (registered as #0)\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="client/brokers registered new broker #0 at kafka-broker:9092"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Successfully initialized new client"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="client/coordinator requesting coordinator for consumergroup vvJjR9Rzj9XA+JEomsvI7vo9Wqatt2KU511YdHY+LYE= from kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="client/coordinator coordinator for consumergroup vvJjR9Rzj9XA+JEomsvI7vo9Wqatt2KU511YdHY+LYE= is #0 (kafka-broker:9092)\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Connected to broker at kafka-broker:9092 (registered as #0)\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Closing Client"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Closing Client"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Closed connection to broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Closed connection to broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Closed connection to broker kafka-broker:9092\n"
2021/08/04 21:16:31 time="2021-08-04T21:16:26Z" level=info msg="Closed connection to broker kafka-broker:9092\n"
    fixtures.go:57: ❌ FAIL: TestKafkaFMEA_PodDeletedDisruption failed to wait for step TotalSunkMessagesFunc.func1: context deadline exceeded
goroutine 251 [running]:
runtime/debug.Stack(0xc0007e1160, 0x51fa0a, 0xc0002f0000)
	/opt/hostedtoolcache/go/1.16.2/x64/src/runtime/debug/stack.go:24 +0x9f
runtime/debug.PrintStack()
	/opt/hostedtoolcache/go/1.16.2/x64/src/runtime/debug/stack.go:16 +0x25
github.com/argoproj-labs/argo-dataflow/test.Setup.func1()
	/home/runner/work/argo-dataflow/argo-dataflow/test/fixtures.go:58 +0x20a
panic(0x1599180, 0xc00048a700)
	/opt/hostedtoolcache/go/1.16.2/x64/src/runtime/panic.go:965 +0x1b9
github.com/argoproj-labs/argo-dataflow/test.WaitForStep(0xc0007e1dc8, 0x2, 0x2)
	/home/runner/work/argo-dataflow/argo-dataflow/test/step.go:83 +0xa3e
github.com/argoproj-labs/argo-dataflow/test/fmea.TestKafkaFMEA_PodDeletedDisruption(0xc0002f0000)
	/home/runner/work/argo-dataflow/argo-dataflow/test/fmea/kafka_fmea_test.go:42 +0x43c
testing.tRunner(0xc0002f0000, 0x17d5ca0)
	/opt/hostedtoolcache/go/1.16.2/x64/src/testing/testing.go:1194 +0xef
created by testing.(*T).Run
	/opt/hostedtoolcache/go/1.16.2/x64/src/testing/testing.go:1239 +0x2b3
--- FAIL: TestKafkaFMEA_PodDeletedDisruption (131.40s)
```


Discussion / hints:

Fix patch:
diff --git a/api/v1alpha1/generated.pb.go b/api/v1alpha1/generated.pb.go
index 95e5cef2..f3a31bf9 100644
--- a/api/v1alpha1/generated.pb.go
+++ b/api/v1alpha1/generated.pb.go
@@ -718,10 +718,38 @@ func (m *Kafka) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_Kafka proto.InternalMessageInfo
 
+func (m *KafkaConfig) Reset()      { *m = KafkaConfig{} }
+func (*KafkaConfig) ProtoMessage() {}
+func (*KafkaConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7a4218a80d7ff35f, []int{24}
+}
+func (m *KafkaConfig) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *KafkaConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	b = b[:cap(b)]
+	n, err := m.MarshalToSizedBuffer(b)
+	if err != nil {
+		return nil, err
+	}
+	return b[:n], nil
+}
+func (m *KafkaConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KafkaConfig.Merge(m, src)
+}
+func (m *KafkaConfig) XXX_Size() int {
+	return m.Size()
+}
+func (m *KafkaConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_KafkaConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KafkaConfig proto.InternalMessageInfo
+
 func (m *KafkaNET) Reset()      { *m = KafkaNET{} }
 func (*KafkaNET) ProtoMessage() {}
 func (*KafkaNET) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{24}
+	return fileDescriptor_7a4218a80d7ff35f, []int{25}
 }
 func (m *KafkaNET) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -749,7 +777,7 @@ var xxx_messageInfo_KafkaNET proto.InternalMessageInfo
 func (m *KafkaSource) Reset()      { *m = KafkaSource{} }
 func (*KafkaSource) ProtoMessage() {}
 func (*KafkaSource) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{25}
+	return fileDescriptor_7a4218a80d7ff35f, []int{26}
 }
 func (m *KafkaSource) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -777,7 +805,7 @@ var xxx_messageInfo_KafkaSource proto.InternalMessageInfo
 func (m *Log) Reset()      { *m = Log{} }
 func (*Log) ProtoMessage() {}
 func (*Log) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{26}
+	return fileDescriptor_7a4218a80d7ff35f, []int{27}
 }
 func (m *Log) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -805,7 +833,7 @@ var xxx_messageInfo_Log proto.InternalMessageInfo
 func (m *Metadata) Reset()      { *m = Metadata{} }
 func (*Metadata) ProtoMessage() {}
 func (*Metadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{27}
+	return fileDescriptor_7a4218a80d7ff35f, []int{28}
 }
 func (m *Metadata) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -833,7 +861,7 @@ var xxx_messageInfo_Metadata proto.InternalMessageInfo
 func (m *Metrics) Reset()      { *m = Metrics{} }
 func (*Metrics) ProtoMessage() {}
 func (*Metrics) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{28}
+	return fileDescriptor_7a4218a80d7ff35f, []int{29}
 }
 func (m *Metrics) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -861,7 +889,7 @@ var xxx_messageInfo_Metrics proto.InternalMessageInfo
 func (m *Pipeline) Reset()      { *m = Pipeline{} }
 func (*Pipeline) ProtoMessage() {}
 func (*Pipeline) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{29}
+	return fileDescriptor_7a4218a80d7ff35f, []int{30}
 }
 func (m *Pipeline) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -889,7 +917,7 @@ var xxx_messageInfo_Pipeline proto.InternalMessageInfo
 func (m *PipelineList) Reset()      { *m = PipelineList{} }
 func (*PipelineList) ProtoMessage() {}
 func (*PipelineList) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{30}
+	return fileDescriptor_7a4218a80d7ff35f, []int{31}
 }
 func (m *PipelineList) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -917,7 +945,7 @@ var xxx_messageInfo_PipelineList proto.InternalMessageInfo
 func (m *PipelineSpec) Reset()      { *m = PipelineSpec{} }
 func (*PipelineSpec) ProtoMessage() {}
 func (*PipelineSpec) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{31}
+	return fileDescriptor_7a4218a80d7ff35f, []int{32}
 }
 func (m *PipelineSpec) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -945,7 +973,7 @@ var xxx_messageInfo_PipelineSpec proto.InternalMessageInfo
 func (m *PipelineStatus) Reset()      { *m = PipelineStatus{} }
 func (*PipelineStatus) ProtoMessage() {}
 func (*PipelineStatus) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{32}
+	return fileDescriptor_7a4218a80d7ff35f, []int{33}
 }
 func (m *PipelineStatus) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -973,7 +1001,7 @@ var xxx_messageInfo_PipelineStatus proto.InternalMessageInfo
 func (m *S3) Reset()      { *m = S3{} }
 func (*S3) ProtoMessage() {}
 func (*S3) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{33}
+	return fileDescriptor_7a4218a80d7ff35f, []int{34}
 }
 func (m *S3) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1001,7 +1029,7 @@ var xxx_messageInfo_S3 proto.InternalMessageInfo
 func (m *S3Sink) Reset()      { *m = S3Sink{} }
 func (*S3Sink) ProtoMessage() {}
 func (*S3Sink) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{34}
+	return fileDescriptor_7a4218a80d7ff35f, []int{35}
 }
 func (m *S3Sink) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1029,7 +1057,7 @@ var xxx_messageInfo_S3Sink proto.InternalMessageInfo
 func (m *S3Source) Reset()      { *m = S3Source{} }
 func (*S3Source) ProtoMessage() {}
 func (*S3Source) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{35}
+	return fileDescriptor_7a4218a80d7ff35f, []int{36}
 }
 func (m *S3Source) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1057,7 +1085,7 @@ var xxx_messageInfo_S3Source proto.InternalMessageInfo
 func (m *SASL) Reset()      { *m = SASL{} }
 func (*SASL) ProtoMessage() {}
 func (*SASL) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{36}
+	return fileDescriptor_7a4218a80d7ff35f, []int{37}
 }
 func (m *SASL) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1085,7 +1113,7 @@ var xxx_messageInfo_SASL proto.InternalMessageInfo
 func (m *SQLAction) Reset()      { *m = SQLAction{} }
 func (*SQLAction) ProtoMessage() {}
 func (*SQLAction) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{37}
+	return fileDescriptor_7a4218a80d7ff35f, []int{38}
 }
 func (m *SQLAction) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1113,7 +1141,7 @@ var xxx_messageInfo_SQLAction proto.InternalMessageInfo
 func (m *SQLStatement) Reset()      { *m = SQLStatement{} }
 func (*SQLStatement) ProtoMessage() {}
 func (*SQLStatement) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{38}
+	return fileDescriptor_7a4218a80d7ff35f, []int{39}
 }
 func (m *SQLStatement) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1141,7 +1169,7 @@ var xxx_messageInfo_SQLStatement proto.InternalMessageInfo
 func (m *STAN) Reset()      { *m = STAN{} }
 func (*STAN) ProtoMessage() {}
 func (*STAN) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{39}
+	return fileDescriptor_7a4218a80d7ff35f, []int{40}
 }
 func (m *STAN) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1169,7 +1197,7 @@ var xxx_messageInfo_STAN proto.InternalMessageInfo
 func (m *STANAuth) Reset()      { *m = STANAuth{} }
 func (*STANAuth) ProtoMessage() {}
 func (*STANAuth) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{40}
+	return fileDescriptor_7a4218a80d7ff35f, []int{41}
 }
 func (m *STANAuth) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1197,7 +1225,7 @@ var xxx_messageInfo_STANAuth proto.InternalMessageInfo
 func (m *Scale) Reset()      { *m = Scale{} }
 func (*Scale) ProtoMessage() {}
 func (*Scale) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{41}
+	return fileDescriptor_7a4218a80d7ff35f, []int{42}
 }
 func (m *Scale) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1225,7 +1253,7 @@ var xxx_messageInfo_Scale proto.InternalMessageInfo
 func (m *Sink) Reset()      { *m = Sink{} }
 func (*Sink) ProtoMessage() {}
 func (*Sink) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{42}
+	return fileDescriptor_7a4218a80d7ff35f, []int{43}
 }
 func (m *Sink) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1253,7 +1281,7 @@ var xxx_messageInfo_Sink proto.InternalMessageInfo
 func (m *Source) Reset()      { *m = Source{} }
 func (*Source) ProtoMessage() {}
 func (*Source) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{43}
+	return fileDescriptor_7a4218a80d7ff35f, []int{44}
 }
 func (m *Source) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1281,7 +1309,7 @@ var xxx_messageInfo_Source proto.InternalMessageInfo
 func (m *SourceStatus) Reset()      { *m = SourceStatus{} }
 func (*SourceStatus) ProtoMessage() {}
 func (*SourceStatus) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{44}
+	return fileDescriptor_7a4218a80d7ff35f, []int{45}
 }
 func (m *SourceStatus) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1309,7 +1337,7 @@ var xxx_messageInfo_SourceStatus proto.InternalMessageInfo
 func (m *Step) Reset()      { *m = Step{} }
 func (*Step) ProtoMessage() {}
 func (*Step) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{45}
+	return fileDescriptor_7a4218a80d7ff35f, []int{46}
 }
 func (m *Step) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1337,7 +1365,7 @@ var xxx_messageInfo_Step proto.InternalMessageInfo
 func (m *StepList) Reset()      { *m = StepList{} }
 func (*StepList) ProtoMessage() {}
 func (*StepList) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{46}
+	return fileDescriptor_7a4218a80d7ff35f, []int{47}
 }
 func (m *StepList) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1365,7 +1393,7 @@ var xxx_messageInfo_StepList proto.InternalMessageInfo
 func (m *StepSpec) Reset()      { *m = StepSpec{} }
 func (*StepSpec) ProtoMessage() {}
 func (*StepSpec) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{47}
+	return fileDescriptor_7a4218a80d7ff35f, []int{48}
 }
 func (m *StepSpec) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1393,7 +1421,7 @@ var xxx_messageInfo_StepSpec proto.InternalMessageInfo
 func (m *StepStatus) Reset()      { *m = StepStatus{} }
 func (*StepStatus) ProtoMessage() {}
 func (*StepStatus) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{48}
+	return fileDescriptor_7a4218a80d7ff35f, []int{49}
 }
 func (m *StepStatus) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1421,7 +1449,7 @@ var xxx_messageInfo_StepStatus proto.InternalMessageInfo
 func (m *Storage) Reset()      { *m = Storage{} }
 func (*Storage) ProtoMessage() {}
 func (*Storage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{49}
+	return fileDescriptor_7a4218a80d7ff35f, []int{50}
 }
 func (m *Storage) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1449,7 +1477,7 @@ var xxx_messageInfo_Storage proto.InternalMessageInfo
 func (m *TLS) Reset()      { *m = TLS{} }
 func (*TLS) ProtoMessage() {}
 func (*TLS) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7a4218a80d7ff35f, []int{50}
+	return fileDescriptor_7a4218a80d7ff35f, []int{51}
 }
 func (m *TLS) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1499,6 +1527,7 @@ func init() {
 	proto.RegisterType((*HTTPSource)(nil), "github.com.argoproj_labs.argo_dataflow.api.v1alpha1.HTTPSource")
 	proto.RegisterType((*Interface)(nil), "github.com.argoproj_labs.argo_dataflow.api.v1alpha1.Interface")
 	proto.RegisterType((*Kafka)(nil), "github.com.argoproj_labs.argo_dataflow.api.v1alpha1.Kafka")
+	proto.RegisterType((*KafkaConfig)(nil), "github.com.argoproj_labs.argo_dataflow.api.v1alpha1.KafkaConfig")
 	proto.RegisterType((*KafkaNET)(nil), "github.com.argoproj_labs.argo_dataflow.api.v1alpha1.KafkaNET")
 	proto.RegisterType((*KafkaSource)(nil), "github.com.argoproj_labs.argo_dataflow.api.v1alpha1.KafkaSource")
 	proto.RegisterType((*Log)(nil), "github.com.argoproj_labs.argo_dataflow.api.v1alpha1.Log")
@@ -1539,251 +1568,252 @@ func init() {
 }
 
 var fileDescriptor_7a4218a80d7ff35f = []byte{
-	// 3892 bytes of a gzipped FileDescriptorProto
+	// 3920 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5a, 0x4d, 0x70, 0x23, 0xc7,
-	0x75, 0xde, 0x01, 0x40, 0x02, 0x78, 0x20, 0x77, 0xb9, 0xbd, 0xae, 0x32, 0xcc, 0x58, 0xe4, 0xd6,
-	0x24, 0xeb, 0xac, 0x53, 0x12, 0x28, 0x2d, 0xa5, 0xca, 0xae, 0x15, 0x5b, 0x06, 0xf8, 0xb3, 0xa2,
-	0x45, 0x72, 0xa9, 0x37, 0xd8, 0x55, 0x14, 0xc9, 0xd9, 0x34, 0x67, 0x1a, 0xc0, 0x2c, 0x80, 0x19,
-	0xec, 0x4c, 0x83, 0x5e, 0xe6, 0xe4, 0x72, 0x7e, 0xaa, 0x72, 0x48, 0x55, 0x2e, 0xb9, 0xe5, 0xea,
-	0xa4, 0x2a, 0xa9, 0x5c, 0x52, 0x39, 0x24, 0x39, 0xf8, 0x92, 0x43, 0xf6, 0xa8, 0x2a, 0x5f, 0x54,
-	0x3e, 0xb0, 0x2c, 0xa6, 0x72, 0xc9, 0x31, 0x87, 0x1c, 0x78, 0x72, 0xf5, 0xdf, 0xcc, 0x00, 0xc4,
-	0xda, 0x04, 0xa0, 0xd2, 0x09, 0x98, 0xf7, 0xba, 0xbf, 0xd7, 0x3f, 0xaf, 0xdf, 0x5f, 0x37, 0x6c,
-	0xb5, 0x7d, 0xde, 0x19, 0x1e, 0xd7, 0xdc, 0xb0, 0xbf, 0x41, 0xa3, 0x76, 0x38, 0x88, 0xc2, 0x67,
-	0x6f, 0xf4, 0xe8, 0x71, 0x2c, 0xbf, 0xde, 0xf0, 0x28, 0xa7, 0xad, 0x5e, 0xf8, 0xa3, 0x0d, 0x3a,
-	0xf0, 0x37, 0x4e, 0xde, 0xa2, 0xbd, 0x41, 0x87, 0xbe, 0xb5, 0xd1, 0x66, 0x01, 0x8b, 0x28, 0x67,
-	0x5e, 0x6d, 0x10, 0x85, 0x3c, 0x24, 0x9b, 0x29, 0x48, 0xcd, 0x80, 0x3c, 0x15, 0x20, 0xf2, 0xeb,
-	0xa9, 0x01, 0xa9, 0xd1, 0x81, 0x5f, 0x33, 0x20, 0xab, 0x6f, 0x64, 0x24, 0xb7, 0xc3, 0x76, 0xb8,
-	0x21, 0xb1, 0x8e, 0x87, 0x2d, 0xf9, 0x25, 0x3f, 0xe4, 0x3f, 0x25, 0x63, 0xd5, 0xee, 0xde, 0x8f,
-	0x6b, 0x7e, 0x28, 0x07, 0xe2, 0x86, 0x11, 0xdb, 0x38, 0xb9, 0x34, 0x8e, 0xd5, 0xb7, 0xd3, 0x36,
-	0x7d, 0xea, 0x76, 0xfc, 0x80, 0x45, 0xa7, 0x1b, 0x83, 0x6e, 0x5b, 0x76, 0x8a, 0x58, 0x1c, 0x0e,
-	0x23, 0x97, 0x4d, 0xd5, 0x2b, 0xde, 0xe8, 0x33, 0x4e, 0x27, 0xc8, 0xb2, 0x3f, 0xb7, 0xe0, 0x7a,
-	0xfd, 0x23, 0x67, 0x2b, 0x62, 0x1e, 0x0b, 0xb8, 0x4f, 0x7b, 0x31, 0xf9, 0x14, 0x2a, 0xd4, 0x75,
-	0x59, 0x1c, 0x7f, 0xc0, 0x4e, 0xf7, 0xbc, 0xaa, 0x75, 0xdb, 0xba, 0x5b, 0xb9, 0x77, 0xa7, 0xa6,
-	0xe0, 0xe5, 0xe4, 0xc5, 0xc0, 0x6b, 0x27, 0x6f, 0xd5, 0x1c, 0xe6, 0x46, 0x8c, 0x7f, 0xc0, 0x4e,
-	0x1d, 0xd6, 0x63, 0x2e, 0x0f, 0xa3, 0xc6, 0xad, 0x97, 0x67, 0xeb, 0xd7, 0xce, 0xcf, 0xd6, 0x2b,
-	0xf5, 0x04, 0x61, 0x1b, 0xb3, 0x70, 0xa4, 0x03, 0x37, 0x62, 0xd9, 0x2d, 0x69, 0x51, 0xcd, 0x4d,
-	0x23, 0xe1, 0xeb, 0x5a, 0xc2, 0x0d, 0x67, 0x14, 0x05, 0xc7, 0x61, 0xed, 0xd7, 0xa1, 0x52, 0xff,
-	0xc8, 0xd9, 0x09, 0xbc, 0x41, 0xe8, 0x07, 0x9c, 0xbc, 0x06, 0xf9, 0x61, 0xd4, 0x93, 0xd3, 0x29,
-	0x37, 0x2a, 0x1a, 0x25, 0xff, 0x18, 0xf7, 0x51, 0xd0, 0xed, 0x9f, 0xe7, 0xa0, 0xd8, 0xa0, 0x6e,
-	0x37, 0x6c, 0xb5, 0xc8, 0xa7, 0x50, 0xf2, 0x86, 0x11, 0xe5, 0x7e, 0x18, 0x54, 0x0b, 0x72, 0x70,
-	0xb5, 0xcc, 0xe0, 0x92, 0xd5, 0xad, 0x0d, 0xba, 0x6d, 0x41, 0x88, 0x6b, 0x62, 0x75, 0xc5, 0x70,
-	0xb7, 0x75, 0xaf, 0xc6, 0x8a, 0xc6, 0x2f, 0x19, 0x0a, 0x26, 0x88, 0xe4, 0x4d, 0x58, 0xd9, 0xa5,
-	0x62, 0x2e, 0x47, 0x2c, 0x72, 0x59, 0xc0, 0x69, 0x9b, 0x55, 0x17, 0x6e, 0x5b, 0x77, 0x97, 0x1b,
-	0x05, 0xd1, 0x0b, 0x2f, 0x71, 0xc9, 0x6f, 0xc3, 0x42, 0xcc, 0xd9, 0x20, 0x96, 0x83, 0x2f, 0x34,
-	0x96, 0x35, 0xf8, 0x82, 0x23, 0x88, 0xa8, 0x78, 0xe4, 0x00, 0xf2, 0x2e, 0x1d, 0xe8, 0xc5, 0x9c,
-	0x76, 0xbc, 0xc9, 0x7a, 0x6c, 0xd1, 0x01, 0x0a, 0x1c, 0xb2, 0x0d, 0x2b, 0xcf, 0x7c, 0xce, 0x59,
-	0x76, 0x94, 0x79, 0x39, 0xca, 0xaa, 0x6e, 0xbb, 0xf2, 0x83, 0x31, 0x3e, 0x5e, 0xea, 0x61, 0x2f,
-	0x40, 0x7e, 0x8b, 0x72, 0xdb, 0x83, 0xc2, 0x56, 0xe8, 0x31, 0xf2, 0x36, 0x14, 0xa3, 0x61, 0xc0,
-	0xfd, 0x3e, 0x93, 0xeb, 0x5a, 0x6e, 0xac, 0x6a, 0xac, 0x22, 0x2a, 0xf2, 0x45, 0xfa, 0x17, 0x4d,
-	0x53, 0xf2, 0x2d, 0x58, 0x54, 0x3a, 0x2f, 0x07, 0x50, 0x6e, 0x5c, 0xd7, 0x9d, 0x16, 0x1d, 0x49,
-	0x45, 0xcd, 0xb5, 0x7f, 0x96, 0x87, 0xf2, 0x56, 0x18, 0x70, 0x2a, 0x66, 0x2b, 0x16, 0xcd, 0xef,
-	0x8b, 0x51, 0xab, 0x1d, 0x4f, 0x16, 0x6d, 0x4f, 0x10, 0x51, 0xf1, 0xc8, 0xc7, 0xb0, 0x74, 0x12,
-	0xf6, 0x86, 0x7d, 0x76, 0x10, 0x0e, 0x03, 0x1e, 0x57, 0x17, 0x6e, 0xe7, 0xef, 0x56, 0xee, 0xad,
-	0x4f, 0x52, 0xc5, 0x27, 0x69, 0xbb, 0xc6, 0xd7, 0x34, 0xd8, 0x52, 0x86, 0x18, 0xe3, 0x08, 0x14,
-	0x79, 0x02, 0x39, 0x3f, 0x90, 0x23, 0xae, 0xdc, 0xfb, 0x5e, 0x6d, 0x06, 0xd3, 0x52, 0xdb, 0x0b,
-	0x38, 0x8b, 0x5a, 0xd4, 0x65, 0x8d, 0xc5, 0xf3, 0xb3, 0xf5, 0xdc, 0x5e, 0x80, 0x39, 0x3f, 0x20,
-	0x77, 0xa0, 0xe8, 0x86, 0xfd, 0x3e, 0x0d, 0xbc, 0xea, 0xe2, 0xed, 0xbc, 0xd0, 0x65, 0xb1, 0x7e,
-	0x5b, 0x8a, 0x84, 0x86, 0x47, 0xbe, 0x09, 0x05, 0x1a, 0xb5, 0xe3, 0x6a, 0x51, 0xb6, 0x29, 0x9d,
-	0x9f, 0xad, 0x17, 0xea, 0x51, 0x3b, 0x46, 0x49, 0x25, 0x0f, 0x20, 0xcf, 0x82, 0x93, 0x6a, 0x49,
-	0x4e, 0x77, 0x75, 0xd2, 0x74, 0x77, 0x82, 0x93, 0x27, 0x34, 0x4a, 0x15, 0x63, 0x27, 0x38, 0x41,
-	0xd1, 0x87, 0x7c, 0x0c, 0x65, 0x63, 0x83, 0xe2, 0x6a, 0x59, 0x4e, 0xef, 0xee, 0x24, 0x00, 0xd4,
-	0x8d, 0x90, 0x3d, 0x1f, 0xfa, 0x11, 0xeb, 0xb3, 0x80, 0xc7, 0x8d, 0x9b, 0x1a, 0xae, 0x6c, 0xb8,
-	0x31, 0xa6, 0x68, 0xf6, 0xa7, 0x50, 0xd8, 0x8a, 0xc2, 0x80, 0xbc, 0x0e, 0xa5, 0xd8, 0xed, 0x30,
-	0x6f, 0xd8, 0x33, 0xbb, 0x97, 0x9c, 0x27, 0x47, 0xd3, 0x31, 0x69, 0x21, 0xd4, 0xa3, 0x47, 0x4f,
-	0xc3, 0x21, 0x97, 0xba, 0x9f, 0x51, 0x8f, 0x7d, 0x49, 0x45, 0xcd, 0xb5, 0xff, 0xc1, 0x82, 0xa5,
-	0xed, 0xc6, 0x36, 0xe5, 0x54, 0xe9, 0x8d, 0xd0, 0x90, 0x13, 0xda, 0x1b, 0x5e, 0xd2, 0x90, 0x27,
-	0x82, 0x88, 0x8a, 0x47, 0x22, 0x28, 0xcb, 0x3f, 0xbb, 0x51, 0xd8, 0xd7, 0x87, 0x6b, 0x67, 0xa6,
-	0xdd, 0xcc, 0x8a, 0x16, 0x60, 0x8d, 0x65, 0xb1, 0x0e, 0x4f, 0x0c, 0x36, 0xa6, 0x62, 0xec, 0x10,
-	0x56, 0xc6, 0x5b, 0x93, 0x4f, 0x60, 0x29, 0x36, 0xc6, 0x10, 0x59, 0x6b, 0x3a, 0xb3, 0xbc, 0x22,
-	0x74, 0xd5, 0xc9, 0x74, 0xc7, 0x11, 0x30, 0xfb, 0x97, 0x16, 0x2c, 0x6e, 0x37, 0x1c, 0x3f, 0xe8,
-	0x92, 0x2e, 0x94, 0xc4, 0xf8, 0x8f, 0x69, 0xcc, 0xb4, 0x8c, 0xef, 0xce, 0x36, 0x5d, 0x0d, 0x92,
-	0x31, 0x85, 0x9a, 0x82, 0x89, 0x00, 0xe2, 0x43, 0x91, 0xba, 0xc2, 0x00, 0xc5, 0xd5, 0x9c, 0x54,
-	0xc5, 0xd9, 0x0e, 0x8a, 0xf3, 0xe1, 0x7e, 0x5d, 0xc2, 0x34, 0x6e, 0x18, 0x7b, 0xa2, 0xbe, 0x63,
-	0x34, 0xf8, 0xf6, 0x4f, 0x2d, 0x48, 0x46, 0x20, 0x54, 0xc6, 0x8b, 0xfc, 0x13, 0x16, 0xe9, 0xad,
-	0x4f, 0x54, 0x66, 0x5b, 0x52, 0x51, 0x73, 0xc9, 0x73, 0x00, 0x2f, 0xd9, 0x06, 0xbd, 0xfb, 0xf5,
-	0xb9, 0x77, 0xbf, 0x71, 0xfd, 0xfc, 0x6c, 0x1d, 0xd2, 0x6f, 0xcc, 0x08, 0xb1, 0x7f, 0x22, 0xb6,
-	0x82, 0x79, 0xc3, 0x01, 0x93, 0x1e, 0xcb, 0xf7, 0x2e, 0x79, 0xac, 0xbd, 0x6d, 0x14, 0x74, 0xf2,
-	0x31, 0x14, 0xfb, 0xf4, 0x85, 0xe3, 0xff, 0x29, 0xbb, 0x8a, 0xd1, 0xaf, 0x99, 0x63, 0x56, 0xfb,
-	0x70, 0x48, 0x03, 0xee, 0xf3, 0xd3, 0x74, 0xb1, 0x0e, 0x14, 0x0c, 0x1a, 0x3c, 0xbb, 0x04, 0x8b,
-	0x3b, 0x2f, 0x06, 0x34, 0xf0, 0xec, 0x32, 0x14, 0x77, 0x7b, 0x94, 0x73, 0x16, 0xd8, 0xff, 0x53,
-	0x80, 0xe5, 0x87, 0x8c, 0x1f, 0x85, 0x9e, 0x33, 0x60, 0x2e, 0xb2, 0xe7, 0xe4, 0x1d, 0xa8, 0xb8,
-	0xbd, 0x61, 0xcc, 0x59, 0x74, 0x48, 0xfb, 0x4c, 0x1a, 0x83, 0x72, 0x1a, 0x02, 0x6c, 0xa5, 0x2c,
-	0xcc, 0xb6, 0x23, 0xf7, 0x61, 0x69, 0xe0, 0x0f, 0x58, 0xcf, 0x0f, 0x98, 0xec, 0xa7, 0x26, 0x98,
-	0xd8, 0xd4, 0xa3, 0x0c, 0x0f, 0x47, 0x5a, 0x92, 0x0d, 0x28, 0x07, 0xb4, 0xcf, 0xe2, 0x01, 0xd5,
-	0xdb, 0x51, 0x4e, 0x2d, 0xca, 0xa1, 0x61, 0x60, 0xda, 0x86, 0x7c, 0x1b, 0x8a, 0x11, 0x1b, 0xf4,
-	0x7c, 0x97, 0x4a, 0x4b, 0xbc, 0x90, 0xce, 0x19, 0x15, 0x19, 0x0d, 0x5f, 0x4c, 0x46, 0xfa, 0x84,
-	0xdd, 0x30, 0xea, 0x53, 0xae, 0xfd, 0x53, 0x32, 0x99, 0xbd, 0x94, 0x85, 0xd9, 0x76, 0xa2, 0x5b,
-	0x34, 0x0c, 0x02, 0x16, 0xc9, 0x16, 0xd2, 0x91, 0x67, 0xba, 0x61, 0xca, 0xc2, 0x6c, 0x3b, 0xe2,
-	0x00, 0x0c, 0x86, 0xbd, 0xde, 0x51, 0xd8, 0xf3, 0xdd, 0xd3, 0xea, 0xa2, 0xec, 0xb5, 0xa9, 0x7b,
-	0xc1, 0x51, 0xc2, 0xb9, 0x38, 0x5b, 0x7f, 0xed, 0x72, 0xc4, 0x58, 0x4b, 0x1b, 0x60, 0x06, 0x86,
-	0x3c, 0x82, 0xeb, 0xc3, 0x81, 0x47, 0x39, 0x93, 0x9e, 0xe3, 0x84, 0xf6, 0xaa, 0xc5, 0xdb, 0xd6,
-	0xdd, 0x7c, 0xe3, 0x77, 0x35, 0xf0, 0xf5, 0xc7, 0x23, 0xdc, 0x8b, 0xb3, 0xf5, 0x65, 0xe1, 0x60,
-	0x93, 0x30, 0x00, 0xc7, 0xba, 0x93, 0x18, 0x40, 0x04, 0x17, 0x0e, 0xa7, 0x7c, 0x18, 0x57, 0x4b,
-	0x52, 0xcb, 0xde, 0x9b, 0xed, 0x88, 0x26, 0x30, 0x0d, 0x62, 0xa6, 0x99, 0xd2, 0x30, 0x23, 0xc6,
-	0xfe, 0xe7, 0x02, 0xe4, 0x1f, 0xfa, 0xfc, 0x6a, 0x0e, 0xfc, 0x8a, 0xde, 0x50, 0x07, 0x7f, 0xb9,
-	0xc9, 0xc1, 0x1f, 0xa1, 0x70, 0x7d, 0x18, 0xb3, 0x48, 0xe8, 0x8d, 0xb2, 0x92, 0x72, 0xe1, 0xae,
-	0x6c, 0x5e, 0x89, 0x5c, 0xdb, 0x11, 0x00, 0x1c, 0x03, 0x14, 0x22, 0x06, 0x34, 0x8e, 0x7f, 0x14,
-	0x46, 0x9e, 0x16, 0x51, 0x9a, 0x5a, 0xc4, 0xd1, 0x08, 0x00, 0x8e, 0x01, 0x92, 0x01, 0xdc, 0x8a,
-	0xe3, 0xce, 0x51, 0xe4, 0x9f, 0x50, 0xce, 0x64, 0x67, 0x29, 0xa7, 0x3c, 0x55, 0x78, 0x7d, 0x7e,
-	0xb6, 0x7e, 0xcb, 0x71, 0xde, 0x1f, 0x47, 0xc1, 0x49, 0xd0, 0xe4, 0x36, 0x14, 0x06, 0x94, 0x77,
-	0x74, 0x5c, 0xb6, 0xa4, 0xd7, 0xb5, 0x70, 0x44, 0x79, 0x07, 0x25, 0x47, 0x58, 0xda, 0xe3, 0x88,
-	0x06, 0x6e, 0x47, 0x1f, 0xa8, 0xc4, 0xd2, 0x36, 0x24, 0x15, 0x35, 0xd7, 0x04, 0x24, 0x0b, 0xd3,
-	0x07, 0x24, 0xf6, 0xff, 0x5b, 0xb0, 0xf0, 0x30, 0x0a, 0x87, 0x03, 0xb1, 0xcb, 0x5d, 0x76, 0x3a,
-	0x6e, 0x30, 0x85, 0x8f, 0x13, 0x74, 0x72, 0x0f, 0x80, 0x05, 0xde, 0xa3, 0x96, 0x6c, 0xac, 0x75,
-	0x21, 0x51, 0xc6, 0x9d, 0x84, 0x83, 0x99, 0x56, 0xe4, 0x1d, 0x58, 0x6c, 0x29, 0x83, 0xa0, 0xe6,
-	0xf8, 0x9a, 0x19, 0xbf, 0x3a, 0xfe, 0x17, 0x67, 0xeb, 0x15, 0xd9, 0x50, 0x9b, 0x06, 0xdd, 0x98,
-	0xb8, 0x50, 0x8c, 0x79, 0x18, 0x09, 0xed, 0x55, 0x09, 0xc4, 0x1f, 0xcc, 0x78, 0x6a, 0x24, 0x86,
-	0x52, 0x6a, 0xfd, 0x81, 0x06, 0xd9, 0x5e, 0x84, 0xc2, 0xfb, 0xcd, 0xe6, 0x91, 0xfd, 0x5f, 0x16,
-	0x80, 0xf8, 0xf3, 0x3e, 0xa3, 0x1e, 0x8b, 0xc4, 0xa6, 0x04, 0xa9, 0x59, 0x4d, 0x36, 0x45, 0x9a,
-	0x53, 0xc9, 0x49, 0x03, 0x9f, 0xdc, 0x55, 0x03, 0x9f, 0xfc, 0x1c, 0x81, 0x4f, 0x3a, 0x34, 0xed,
-	0xfe, 0x5e, 0x1d, 0xf8, 0xc4, 0xb0, 0x32, 0xde, 0x9a, 0x3c, 0x9d, 0x27, 0xf0, 0x49, 0x9c, 0xca,
-	0xaf, 0x09, 0x7e, 0xfe, 0xd6, 0x82, 0x92, 0x90, 0x2a, 0xc3, 0x9f, 0x5f, 0x9f, 0x25, 0x92, 0x67,
-	0x50, 0xec, 0xc8, 0xc1, 0x99, 0x80, 0xe5, 0xbd, 0x39, 0x97, 0x24, 0x75, 0x48, 0xea, 0x3b, 0x46,
-	0x23, 0xc0, 0xde, 0x52, 0xbb, 0xaa, 0x97, 0xe1, 0x1d, 0xa8, 0xc4, 0x2c, 0x3a, 0xf1, 0xdd, 0xac,
-	0xcf, 0x4c, 0xfc, 0x8c, 0x93, 0xb2, 0x30, 0xdb, 0xce, 0xfe, 0x4b, 0x0b, 0xca, 0x49, 0x1e, 0x21,
-	0x54, 0xa3, 0xe5, 0xb7, 0x42, 0xd9, 0xbb, 0x94, 0xaa, 0xc6, 0xee, 0xde, 0xee, 0x23, 0x94, 0x1c,
-	0xf2, 0x11, 0x14, 0x3a, 0x9c, 0x9b, 0x34, 0xf2, 0xc1, 0xcc, 0xb3, 0x53, 0x19, 0x87, 0xf8, 0x87,
-	0x12, 0xd0, 0xbe, 0xb0, 0x60, 0xe1, 0x03, 0xda, 0xea, 0xd2, 0x2b, 0xe8, 0xe7, 0x1d, 0x28, 0x1e,
-	0x47, 0x61, 0xd7, 0xac, 0xb2, 0x36, 0xea, 0x0d, 0x45, 0x42, 0xc3, 0x13, 0x6a, 0xcc, 0xc3, 0x81,
-	0xef, 0xea, 0xa3, 0x99, 0xa8, 0x71, 0x53, 0x10, 0x51, 0xf1, 0x44, 0x04, 0x70, 0xc2, 0xa2, 0xd8,
-	0xa4, 0xf2, 0xe5, 0x74, 0xc1, 0x9f, 0x28, 0x32, 0x1a, 0x3e, 0xf9, 0x43, 0xc8, 0x07, 0x8c, 0x4b,
-	0x17, 0x3e, 0x6b, 0xd4, 0x2b, 0x67, 0x78, 0xb8, 0xd3, 0x6c, 0x14, 0x85, 0xda, 0x1c, 0xee, 0x34,
-	0x51, 0x40, 0xda, 0xff, 0x66, 0x41, 0xc9, 0xb0, 0x88, 0x03, 0x79, 0xde, 0x8b, 0xb5, 0x1e, 0xdf,
-	0x9f, 0x49, 0x4c, 0x73, 0xdf, 0x51, 0x12, 0x9a, 0xfb, 0x0e, 0x0a, 0x34, 0xb1, 0x6f, 0x31, 0x8d,
-	0x7b, 0x73, 0xed, 0x9b, 0x53, 0x77, 0xf6, 0xd5, 0xbe, 0x89, 0x7f, 0x28, 0x01, 0xed, 0x7f, 0xb5,
-	0xa0, 0x22, 0x87, 0x9e, 0x1c, 0xc7, 0x85, 0xae, 0xf8, 0xd4, 0xe3, 0xff, 0xce, 0xec, 0xcb, 0x94,
-	0x6e, 0x98, 0xfc, 0x44, 0x85, 0x4b, 0xb6, 0xa1, 0x12, 0x73, 0x1a, 0xf1, 0x47, 0xad, 0x56, 0xcc,
-	0x4c, 0x4e, 0x67, 0x27, 0x8a, 0x9e, 0xb2, 0x84, 0xed, 0x95, 0x3d, 0xd5, 0x27, 0x66, 0xbb, 0xd9,
-	0x0b, 0x90, 0xdf, 0x0f, 0xdb, 0xf6, 0x8f, 0xf3, 0x50, 0x3a, 0x60, 0x9c, 0x8a, 0x61, 0x90, 0xbf,
-	0xb0, 0xa0, 0x42, 0x83, 0x20, 0xe4, 0x54, 0xa5, 0x1c, 0x96, 0x3c, 0xc1, 0x87, 0x33, 0xcd, 0xc0,
-	0x80, 0xd6, 0xea, 0x29, 0xe0, 0x4e, 0xc0, 0xa3, 0xd3, 0x4c, 0x09, 0x2c, 0xe5, 0x60, 0x56, 0x2e,
-	0x79, 0x2e, 0x12, 0xd6, 0x63, 0xd6, 0x33, 0x36, 0x64, 0x6f, 0xbe, 0x11, 0xec, 0x4b, 0x2c, 0x25,
-	0x3c, 0x93, 0xfb, 0x0a, 0x22, 0x6a, 0x41, 0xab, 0xdf, 0x83, 0x95, 0xf1, 0x81, 0x92, 0x95, 0x8c,
-	0xb7, 0x54, 0x0e, 0xf2, 0x6b, 0x23, 0x7e, 0x41, 0x3b, 0x82, 0xef, 0xe4, 0xee, 0x5b, 0xab, 0x0f,
-	0xa0, 0x92, 0x11, 0x33, 0x4d, 0x57, 0xfb, 0xe7, 0x16, 0x14, 0x0f, 0x18, 0x8f, 0x7c, 0x57, 0x9f,
-	0x58, 0x4e, 0x7b, 0xe3, 0x85, 0xac, 0xa6, 0x20, 0xa2, 0xe2, 0x89, 0x90, 0x81, 0x45, 0x51, 0x28,
-	0x0f, 0xbf, 0x68, 0x95, 0xcc, 0x69, 0x47, 0x52, 0x51, 0x73, 0xc9, 0x11, 0x14, 0x22, 0xca, 0x99,
-	0xf6, 0x4d, 0xd3, 0x26, 0x3f, 0x89, 0xdd, 0x41, 0xca, 0x19, 0x4a, 0x24, 0x95, 0x2d, 0xf0, 0xc8,
-	0x67, 0xb1, 0xb4, 0x15, 0x85, 0x6c, 0xb6, 0x20, 0xc9, 0x68, 0xf8, 0xf6, 0xcf, 0x72, 0x50, 0x32,
-	0x89, 0x0a, 0xf9, 0x13, 0x28, 0xf5, 0xf5, 0x6e, 0xe8, 0x63, 0xf1, 0xe6, 0xd5, 0xea, 0x6f, 0x8f,
-	0x8e, 0x9f, 0x31, 0x97, 0x8b, 0x9d, 0x4c, 0x03, 0x91, 0x94, 0x86, 0x09, 0x2a, 0x71, 0xa1, 0x10,
-	0x0f, 0x98, 0x3b, 0x57, 0x0a, 0x6a, 0x86, 0x2b, 0xb2, 0xb7, 0x74, 0xfa, 0x32, 0x97, 0x93, 0xe0,
-	0xa4, 0x0b, 0x8b, 0xb1, 0x8a, 0xf4, 0xd5, 0x92, 0x6e, 0xcd, 0x27, 0x46, 0x45, 0xfb, 0x69, 0xb1,
-	0x4e, 0x45, 0xfa, 0x5a, 0x84, 0xfd, 0x99, 0x05, 0x49, 0xa6, 0xb7, 0xef, 0xc7, 0x9c, 0x7c, 0x7a,
-	0x69, 0x11, 0xaf, 0x58, 0xc4, 0x14, 0xbd, 0xe5, 0x12, 0x26, 0x95, 0x06, 0x43, 0xc9, 0x2c, 0xe0,
-	0x31, 0x2c, 0xf8, 0x9c, 0xf5, 0xcd, 0x91, 0xfb, 0xee, 0x5c, 0x53, 0xcb, 0xe4, 0x22, 0x02, 0x13,
-	0x15, 0xb4, 0x1d, 0xa5, 0x33, 0x12, 0xab, 0x2a, 0x64, 0x9a, 0xb2, 0xed, 0xec, 0x32, 0x65, 0x92,
-	0x24, 0x76, 0x6c, 0x62, 0xd5, 0xd7, 0xfe, 0xf7, 0x1c, 0x5c, 0x1f, 0x5d, 0x71, 0xf2, 0x36, 0x2c,
-	0x0c, 0x3a, 0xa6, 0x7c, 0x53, 0x6e, 0xac, 0x99, 0x7e, 0x47, 0x82, 0x28, 0x72, 0x3e, 0xd3, 0x5e,
-	0x12, 0x50, 0x35, 0x16, 0xba, 0xdf, 0x67, 0x71, 0x2c, 0x22, 0xd6, 0xdc, 0xa8, 0x9f, 0x3c, 0x50,
-	0x64, 0x34, 0x7c, 0xe2, 0x02, 0xb8, 0x61, 0xe0, 0xf9, 0xca, 0x8a, 0xe6, 0xe5, 0xe4, 0x36, 0xae,
-	0xb6, 0x57, 0x5b, 0xa6, 0x5f, 0xaa, 0xef, 0x09, 0x29, 0xc6, 0x0c, 0x2c, 0xa1, 0x50, 0xe9, 0xd1,
-	0x98, 0xab, 0x8c, 0xd5, 0xd3, 0x51, 0xf4, 0xef, 0x5d, 0x4d, 0x4a, 0xd3, 0xef, 0xb3, 0xd4, 0x0e,
-	0xef, 0xa7, 0x30, 0x98, 0xc5, 0xb4, 0x7f, 0x91, 0x83, 0x9c, 0xb3, 0x79, 0x85, 0x78, 0x44, 0x24,
-	0x31, 0x43, 0xb7, 0xcb, 0x2e, 0x55, 0x18, 0x1b, 0x92, 0x8a, 0x9a, 0x2b, 0xda, 0x45, 0xac, 0x2d,
-	0x42, 0x8d, 0xb1, 0x42, 0x35, 0x4a, 0x2a, 0x6a, 0x2e, 0x39, 0x81, 0x8a, 0x9b, 0x5e, 0xb8, 0xe8,
-	0xb9, 0xcd, 0x76, 0xda, 0x46, 0xef, 0x6e, 0x1a, 0x37, 0x64, 0xe1, 0x25, 0x25, 0x60, 0x56, 0x10,
-	0x79, 0x06, 0x25, 0xa6, 0xaf, 0x43, 0x74, 0x94, 0xf3, 0xfd, 0x59, 0x85, 0x9a, 0x6b, 0x95, 0xc6,
-	0x92, 0x38, 0x70, 0xe6, 0x0b, 0x13, 0x7c, 0xfb, 0x87, 0xb0, 0xe8, 0x6c, 0xca, 0x90, 0xda, 0x81,
-	0x5c, 0xbc, 0xa9, 0x27, 0xf9, 0xfb, 0xb3, 0x9d, 0x81, 0xcd, 0x06, 0xe8, 0xa5, 0xcc, 0x39, 0x9b,
-	0x98, 0x8b, 0x37, 0xed, 0xff, 0xb4, 0xa0, 0xe4, 0x6c, 0xea, 0x98, 0x44, 0x49, 0x28, 0x7e, 0xa9,
-	0x12, 0xc8, 0x31, 0xc0, 0x20, 0xec, 0xf5, 0x8e, 0x58, 0xe4, 0x87, 0x9e, 0xac, 0xd0, 0x4c, 0x7f,
-	0xad, 0x92, 0x28, 0xf9, 0x51, 0x82, 0x84, 0x19, 0x54, 0xfb, 0x7f, 0x2d, 0x90, 0xb1, 0x16, 0xf9,
-	0x3e, 0x94, 0xfb, 0xcc, 0xed, 0xd0, 0xc0, 0x8f, 0xfb, 0x5a, 0x11, 0x4d, 0xc8, 0x53, 0x3e, 0x30,
-	0x0c, 0x71, 0x76, 0x45, 0xeb, 0x84, 0x80, 0x69, 0x27, 0xb2, 0x07, 0x85, 0x61, 0xcc, 0xa2, 0xe9,
-	0x2e, 0xd3, 0x64, 0x21, 0xf2, 0x71, 0xcc, 0x22, 0x9d, 0xe4, 0x4b, 0x08, 0xf2, 0x18, 0x4a, 0xa6,
-	0xb2, 0xa0, 0x3d, 0xc1, 0x1c, 0x45, 0x8a, 0x04, 0xca, 0xfe, 0xbf, 0x1c, 0x94, 0x93, 0x4a, 0x2d,
-	0x19, 0x42, 0x59, 0x78, 0x02, 0x79, 0x2f, 0xa0, 0xed, 0x7d, 0x7d, 0xd6, 0xe2, 0xaf, 0x63, 0x80,
-	0x32, 0xf9, 0x5e, 0x86, 0x8a, 0xa9, 0x24, 0xf2, 0x67, 0x16, 0xac, 0x84, 0x01, 0x32, 0x37, 0x8c,
-	0xbc, 0xc3, 0x90, 0xef, 0x86, 0xc3, 0xc0, 0x9b, 0xcb, 0xab, 0x8e, 0x8a, 0x3f, 0x3f, 0x5b, 0x5f,
-	0x79, 0x34, 0x06, 0x8f, 0x97, 0x04, 0x92, 0x0e, 0x14, 0xc3, 0x40, 0x86, 0x33, 0x7a, 0x81, 0xbf,
-	0x04, 0xd9, 0x32, 0x47, 0x7a, 0xa4, 0x50, 0xd1, 0xc0, 0xdb, 0x1f, 0xc0, 0xc8, 0x52, 0x88, 0xfc,
-	0x36, 0x7e, 0x7e, 0x29, 0xbf, 0x75, 0x3e, 0xdc, 0x47, 0x41, 0x4f, 0x6e, 0x8d, 0x72, 0x93, 0x6e,
-	0x8d, 0xec, 0x5f, 0xe4, 0xa1, 0xe0, 0x34, 0xeb, 0x87, 0x57, 0x30, 0x99, 0xdf, 0x86, 0x62, 0x40,
-	0x79, 0xfc, 0x38, 0xea, 0x8d, 0xa7, 0x5d, 0x87, 0xf5, 0xa6, 0x23, 0xf2, 0x69, 0xc3, 0x27, 0x0f,
-	0xe1, 0xa6, 0xf8, 0x7b, 0x10, 0x06, 0x3e, 0x0f, 0x23, 0x3f, 0x68, 0x8b, 0x4e, 0x25, 0xd9, 0xe9,
-	0x1b, 0xba, 0xd3, 0x4d, 0xd1, 0x29, 0xd3, 0x00, 0xf7, 0xf1, 0x72, 0x1f, 0xb2, 0x01, 0x65, 0x5d,
-	0x66, 0xde, 0xf3, 0x74, 0x21, 0x36, 0xa9, 0x0e, 0xeb, 0x62, 0xf4, 0xde, 0x36, 0xa6, 0x6d, 0xc4,
-	0x20, 0xe3, 0xa1, 0x0c, 0xb7, 0xb4, 0xc1, 0x4e, 0x06, 0xe9, 0x28, 0x32, 0x1a, 0x3e, 0xd9, 0x87,
-	0x65, 0xfd, 0xf7, 0x28, 0x62, 0x2d, 0xff, 0x85, 0x2e, 0xd9, 0x7e, 0x4b, 0x77, 0x58, 0x76, 0xb2,
-	0xcc, 0x8b, 0x71, 0x02, 0x8e, 0x76, 0x26, 0x9f, 0x40, 0x81, 0x0e, 0x79, 0x47, 0x9b, 0xac, 0x19,
-	0x03, 0x83, 0x66, 0xfd, 0xb0, 0x3e, 0xe4, 0x1d, 0xbd, 0x4b, 0x43, 0xde, 0x41, 0x09, 0x4a, 0xde,
-	0x81, 0x4a, 0x9f, 0xbe, 0xd8, 0x0b, 0x5a, 0x3d, 0xbf, 0xdd, 0x51, 0xe5, 0xbf, 0xe5, 0xd4, 0x1b,
-	0x1e, 0xa4, 0x2c, 0xcc, 0xb6, 0xb3, 0x11, 0x4a, 0x06, 0x92, 0xec, 0x8a, 0x38, 0xbd, 0xcb, 0x82,
-	0xe9, 0x8a, 0x2d, 0x65, 0x15, 0xca, 0x77, 0x59, 0x80, 0xaa, 0xbb, 0xfd, 0x4f, 0x16, 0x2c, 0x38,
-	0x2e, 0xed, 0xc9, 0xf2, 0x45, 0xdf, 0x0f, 0x74, 0xd1, 0x5d, 0x25, 0xbf, 0x0b, 0x99, 0x41, 0xa5,
-	0x2c, 0xcc, 0xb6, 0x23, 0x6f, 0xc9, 0xb9, 0x24, 0xdd, 0x72, 0x72, 0x2e, 0x37, 0xf4, 0x3c, 0x32,
-	0x5d, 0xd2, 0x0f, 0x72, 0x1f, 0x96, 0x74, 0x49, 0x1f, 0x85, 0x11, 0xd6, 0x97, 0xd6, 0x89, 0x61,
-	0xc0, 0x0c, 0x0f, 0x47, 0x5a, 0xda, 0xff, 0x51, 0x80, 0x82, 0xf4, 0x58, 0xbf, 0x59, 0xbd, 0x45,
-	0xba, 0xcd, 0x69, 0x30, 0x5f, 0xba, 0xdd, 0xac, 0x1f, 0xea, 0x74, 0xbb, 0x59, 0x3f, 0x44, 0x09,
-	0x48, 0x3e, 0x31, 0xe9, 0x75, 0x7e, 0xee, 0xf4, 0xba, 0x7c, 0x29, 0xb5, 0x76, 0x20, 0xdf, 0x0b,
-	0xdb, 0xda, 0x15, 0xcf, 0x56, 0x79, 0xd8, 0x0f, 0xdb, 0xaa, 0xf2, 0xb0, 0x1f, 0xb6, 0x51, 0xa0,
-	0x09, 0x5d, 0x96, 0x15, 0xa3, 0x79, 0xca, 0x26, 0xa6, 0xfc, 0x36, 0x5e, 0x35, 0xd2, 0x9e, 0x5d,
-	0x39, 0xdf, 0x77, 0x67, 0xf4, 0xec, 0x12, 0x78, 0x31, 0xe3, 0xd9, 0x1d, 0xc8, 0x79, 0xc7, 0xfa,
-	0xec, 0xbd, 0x3b, 0xe3, 0x6d, 0x5e, 0x0a, 0xba, 0xdd, 0xc0, 0x9c, 0x77, 0x6c, 0x7f, 0x5e, 0x00,
-	0xfd, 0x1e, 0xe1, 0x6a, 0xea, 0xe3, 0x46, 0xe1, 0x7c, 0xea, 0xb3, 0x15, 0x85, 0x81, 0x5a, 0x2f,
-	0xf1, 0x0f, 0x25, 0x60, 0xa2, 0x97, 0xf9, 0x2f, 0x5b, 0x2f, 0xa9, 0xd1, 0xcb, 0xc2, 0x1c, 0x71,
-	0x63, 0xa6, 0x8e, 0x34, 0x41, 0x3b, 0x7f, 0x38, 0xa2, 0x48, 0xb3, 0x17, 0x56, 0xb5, 0x80, 0x71,
-	0x55, 0x7a, 0x2c, 0x55, 0xa9, 0x34, 0x8f, 0xc5, 0xd5, 0xf1, 0xe6, 0x88, 0x32, 0x51, 0x58, 0x88,
-	0x18, 0x8f, 0x4e, 0xb5, 0x3e, 0xcd, 0x56, 0xe7, 0xd7, 0x0f, 0x8f, 0xd2, 0x1c, 0x0f, 0x05, 0x24,
-	0x2a, 0x64, 0xfb, 0x1f, 0x73, 0xb0, 0xa4, 0x24, 0xeb, 0x0c, 0xef, 0x0e, 0x14, 0x07, 0x2c, 0xf0,
-	0xfc, 0xa0, 0x2d, 0x37, 0xba, 0xa0, 0x7c, 0xff, 0x91, 0x22, 0xa1, 0xe1, 0x91, 0x53, 0x91, 0xd2,
-	0xc9, 0xc2, 0x4b, 0xb5, 0x30, 0x47, 0xa9, 0x2b, 0x2b, 0xba, 0xa6, 0x2b, 0x39, 0xaa, 0xda, 0x94,
-	0x49, 0x11, 0x25, 0x15, 0x8d, 0xbc, 0xd5, 0x17, 0xb0, 0x94, 0x6d, 0x39, 0xa1, 0x60, 0x84, 0xd9,
-	0x82, 0xd1, 0xac, 0xeb, 0x66, 0xe4, 0x66, 0xca, 0x4d, 0xff, 0x92, 0x83, 0x82, 0xc8, 0x90, 0xbf,
-	0x82, 0xa2, 0xcc, 0xd3, 0x91, 0xa2, 0xcc, 0x9c, 0xe9, 0xfd, 0xa4, 0x82, 0x4c, 0x7b, 0xac, 0x20,
-	0x33, 0xf7, 0xd5, 0xeb, 0xab, 0x8a, 0x31, 0x2f, 0x45, 0x36, 0xc5, 0xd9, 0xe0, 0x2b, 0x28, 0xc4,
-	0xfc, 0xf1, 0x68, 0x21, 0xe6, 0xc1, 0xcc, 0x53, 0x7a, 0x45, 0x11, 0xe6, 0xe5, 0x0d, 0x35, 0x15,
-	0x59, 0x81, 0x31, 0x96, 0x78, 0xf1, 0x95, 0x96, 0xd8, 0x81, 0xbc, 0x4b, 0x79, 0xf5, 0xc6, 0x1c,
-	0x2e, 0x71, 0x8b, 0x72, 0xe5, 0x12, 0xb7, 0x28, 0x47, 0x81, 0x46, 0xba, 0x50, 0x76, 0xcd, 0x3b,
-	0x34, 0xbd, 0x84, 0xb3, 0x3d, 0x6c, 0x49, 0x5e, 0xb3, 0xa9, 0x3b, 0xb3, 0xe4, 0x13, 0x53, 0x7c,
-	0xf2, 0x14, 0x16, 0x3d, 0xf9, 0x5e, 0xa4, 0xfa, 0x5b, 0xf3, 0x78, 0x34, 0x09, 0xd1, 0x00, 0xf9,
-	0x08, 0x46, 0xfe, 0x47, 0x0d, 0x2b, 0x04, 0x30, 0xf9, 0x18, 0xa4, 0xba, 0x3a, 0x87, 0x00, 0xf5,
-	0x9e, 0x44, 0x09, 0x50, 0xff, 0x51, 0xc3, 0x92, 0x37, 0x61, 0xb1, 0xe5, 0xf7, 0x38, 0x8b, 0x74,
-	0xd4, 0x5f, 0x4d, 0xee, 0x58, 0x25, 0xf5, 0x22, 0xf9, 0x87, 0xba, 0x1d, 0x71, 0xa1, 0xd8, 0x52,
-	0xaf, 0x52, 0xaa, 0xdf, 0x98, 0xc3, 0x7c, 0xe8, 0x97, 0x2d, 0xca, 0x7c, 0xea, 0x0f, 0x34, 0xc8,
-	0x42, 0x35, 0xda, 0x3e, 0xaf, 0x2e, 0xcd, 0xa1, 0x1a, 0x0f, 0x7d, 0xad, 0x1a, 0x0f, 0x7d, 0x8e,
-	0x02, 0x4d, 0xc4, 0x77, 0x6d, 0x79, 0xfd, 0x5c, 0x99, 0x23, 0xbe, 0x93, 0x37, 0xce, 0xca, 0x83,
-	0xaa, 0x1b, 0x6b, 0x85, 0x29, 0xc3, 0x8a, 0xd0, 0x63, 0xda, 0x15, 0xcd, 0x18, 0x56, 0x84, 0x9e,
-	0xf6, 0x9d, 0xe2, 0x1f, 0x4a, 0x40, 0xf2, 0x3b, 0x90, 0xef, 0xd3, 0x81, 0x7e, 0xe0, 0x63, 0x8c,
-	0x62, 0xfe, 0x80, 0x0e, 0x2e, 0xd4, 0x0f, 0x0a, 0x36, 0x79, 0x1d, 0x4a, 0x91, 0x89, 0xd4, 0xbf,
-	0x2e, 0xa3, 0xee, 0xc4, 0x10, 0x24, 0xa1, 0x7a, 0xd2, 0x42, 0xac, 0x44, 0x2c, 0x52, 0x83, 0x6a,
-	0x75, 0x8e, 0x95, 0x90, 0xc9, 0x85, 0x5a, 0x09, 0xf9, 0x17, 0x15, 0x26, 0x69, 0x41, 0xd1, 0x3c,
-	0x51, 0x54, 0xf5, 0xc9, 0x77, 0xe7, 0x70, 0x7d, 0x99, 0xb4, 0x50, 0xbf, 0x59, 0x34, 0xe0, 0xc2,
-	0x9a, 0xc5, 0x7e, 0xd0, 0x35, 0x0e, 0x76, 0x46, 0x6b, 0x26, 0x62, 0xc9, 0xb4, 0xbc, 0x2b, 0xf0,
-	0x50, 0xc1, 0x92, 0xa7, 0xb0, 0x1c, 0x31, 0x79, 0xaf, 0xa5, 0x5f, 0x0a, 0xa9, 0xb4, 0xf6, 0x81,
-	0x49, 0x3b, 0x31, 0xcb, 0xbc, 0x38, 0x5b, 0xbf, 0x3d, 0xe1, 0xb1, 0xd0, 0x48, 0x1b, 0x1c, 0xc5,
-	0x23, 0xf7, 0x00, 0x38, 0x8b, 0xfa, 0x7e, 0x40, 0x79, 0x18, 0x55, 0x41, 0xde, 0x0b, 0x27, 0x5e,
-	0xaf, 0x99, 0x70, 0x30, 0xd3, 0x8a, 0xec, 0x40, 0x51, 0xbd, 0x74, 0x8d, 0xab, 0xcb, 0xaf, 0x7e,
-	0xaf, 0xa1, 0x9e, 0xc6, 0x66, 0xae, 0x5b, 0x55, 0x17, 0x34, 0x7d, 0xc9, 0x0f, 0x80, 0xe8, 0x9b,
-	0xea, 0xba, 0xeb, 0x86, 0xc3, 0x80, 0xcb, 0x8b, 0xed, 0xeb, 0x23, 0xef, 0x82, 0x89, 0x73, 0xa9,
-	0x05, 0x4e, 0xe8, 0x45, 0xda, 0x19, 0x9f, 0xb5, 0x32, 0x87, 0x3b, 0x36, 0x97, 0x6a, 0xaa, 0xac,
-	0x69, 0xbe, 0x32, 0xee, 0xeb, 0xaf, 0x2c, 0x58, 0x0a, 0x42, 0x8f, 0x99, 0xa4, 0xb7, 0x7a, 0x53,
-	0xae, 0xc0, 0xa3, 0xb9, 0x9c, 0x7f, 0xed, 0x30, 0x83, 0xa8, 0x42, 0xab, 0x24, 0x5f, 0xcd, 0xb2,
-	0x70, 0x44, 0x34, 0xd9, 0x85, 0x12, 0x6d, 0xb5, 0xfc, 0xc0, 0xe7, 0xa7, 0x55, 0x22, 0x27, 0xfd,
-	0xcd, 0x49, 0x1b, 0x51, 0xd7, 0x6d, 0xd4, 0x9c, 0xcc, 0x17, 0x26, 0x7d, 0xc9, 0x63, 0xa8, 0xf0,
-	0xb0, 0xc7, 0x22, 0x7d, 0x2d, 0x7a, 0x4b, 0xce, 0x68, 0x6d, 0x12, 0x54, 0x33, 0x69, 0x96, 0xe6,
-	0xee, 0x29, 0x2d, 0xc6, 0x2c, 0xce, 0xea, 0x7b, 0x70, 0xf3, 0xd2, 0xbc, 0xa6, 0xba, 0x39, 0xfc,
-	0xfb, 0x22, 0x64, 0xde, 0x88, 0x91, 0x37, 0x47, 0xef, 0x35, 0x56, 0xc7, 0xef, 0x35, 0xca, 0xa2,
-	0xed, 0xc8, 0x9d, 0x86, 0xac, 0xc7, 0xd3, 0x38, 0x0c, 0xb4, 0x63, 0xc9, 0xd4, 0xe3, 0x05, 0x15,
-	0x35, 0x77, 0x9a, 0xbb, 0x8f, 0xac, 0x8d, 0x5b, 0xf8, 0x8d, 0x36, 0xee, 0x75, 0x28, 0xc5, 0x46,
-	0x51, 0x8a, 0x63, 0x0f, 0x99, 0xcd, 0x9e, 0x26, 0x2d, 0x88, 0x07, 0x4b, 0x3d, 0x1a, 0x73, 0x69,
-	0xc8, 0xbc, 0x3a, 0xd7, 0x69, 0xef, 0x34, 0x77, 0x1e, 0x89, 0xd6, 0xec, 0x67, 0x70, 0x70, 0x04,
-	0x95, 0xfc, 0xd4, 0x82, 0xeb, 0x71, 0x26, 0xa4, 0x4f, 0x4c, 0xa4, 0x33, 0x67, 0x74, 0x39, 0x92,
-	0x28, 0x30, 0x9d, 0x22, 0xdc, 0x35, 0x4f, 0x0f, 0x47, 0x99, 0x17, 0x97, 0x28, 0x38, 0x36, 0x28,
-	0xf2, 0x77, 0x16, 0x2c, 0x09, 0x23, 0x98, 0x8c, 0x52, 0x99, 0xd8, 0x0f, 0xe7, 0x1e, 0x65, 0x06,
-	0x53, 0x8d, 0xf1, 0x4e, 0xf2, 0xb8, 0xc0, 0xb0, 0x26, 0x0e, 0x70, 0x64, 0x34, 0xab, 0x7f, 0x6e,
-	0xc1, 0xad, 0x09, 0x13, 0x9e, 0xa0, 0xe0, 0x1f, 0x8d, 0x66, 0x3a, 0xf5, 0xb9, 0x93, 0xb0, 0xec,
-	0xc5, 0xfc, 0x4f, 0x2c, 0xb8, 0x79, 0x69, 0x46, 0x5f, 0xf1, 0x20, 0xec, 0x27, 0x60, 0x1e, 0xa7,
-	0x5d, 0xad, 0x32, 0x1c, 0x0f, 0x8f, 0x8f, 0x28, 0xef, 0x8c, 0x1f, 0x36, 0x47, 0x91, 0xd1, 0xf0,
-	0xed, 0xbf, 0xce, 0x41, 0xbe, 0xb9, 0xef, 0x90, 0x4f, 0x60, 0xc9, 0xa5, 0x5b, 0x2c, 0xe2, 0xfa,
-	0x45, 0xe3, 0xf4, 0x6f, 0xdf, 0xb7, 0xea, 0x69, 0x77, 0x1c, 0x01, 0x23, 0x8f, 0x01, 0xdc, 0x14,
-	0x7a, 0xfa, 0xeb, 0x93, 0x0c, 0x70, 0x06, 0x88, 0x20, 0x94, 0xbb, 0xc9, 0x13, 0xcc, 0xa9, 0x6e,
-	0x51, 0x64, 0xa8, 0x9f, 0x3e, 0xbc, 0x4c, 0x61, 0x1a, 0xb5, 0x97, 0x5f, 0xac, 0x5d, 0xfb, 0xec,
-	0x8b, 0xb5, 0x6b, 0x9f, 0x7f, 0xb1, 0x76, 0xed, 0xc7, 0xe7, 0x6b, 0xd6, 0xcb, 0xf3, 0x35, 0xeb,
-	0xb3, 0xf3, 0x35, 0xeb, 0xf3, 0xf3, 0x35, 0xeb, 0x97, 0xe7, 0x6b, 0xd6, 0xdf, 0xfc, 0xf7, 0xda,
-	0xb5, 0x3f, 0x2a, 0x99, 0xfd, 0xfa, 0x55, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe, 0x87, 0xcb, 0x04,
-	0x16, 0x37, 0x00, 0x00,
+	0x75, 0x5e, 0xfc, 0x11, 0xc0, 0x03, 0xc9, 0xe5, 0xf6, 0xba, 0xca, 0x30, 0x63, 0x91, 0x5b, 0x93,
+	0xc8, 0x59, 0xa7, 0x24, 0x50, 0x5a, 0x4a, 0x95, 0x5d, 0x2b, 0xb2, 0x0c, 0x80, 0xe4, 0x8a, 0x5e,
+	0x92, 0x4b, 0xbd, 0xe1, 0xae, 0xa2, 0x48, 0xce, 0xa6, 0x39, 0x68, 0x00, 0xb3, 0x04, 0x66, 0xb0,
+	0x33, 0x0d, 0x6a, 0x99, 0x93, 0xcb, 0xf9, 0xa9, 0xca, 0x21, 0x55, 0xb9, 0xe4, 0x96, 0xab, 0x93,
+	0xaa, 0xa4, 0x72, 0x49, 0xe5, 0x10, 0xe7, 0xe0, 0x4b, 0x0e, 0xd9, 0xa3, 0xaa, 0x7c, 0xd9, 0xf2,
+	0x81, 0x65, 0x31, 0x95, 0x4b, 0x8e, 0x39, 0xe4, 0xc0, 0x53, 0xaa, 0xff, 0x66, 0x1a, 0x20, 0xd7,
+	0x26, 0x00, 0x95, 0x4e, 0xc0, 0xbc, 0xd7, 0xfd, 0xbd, 0xfe, 0x79, 0xfd, 0xfe, 0xba, 0xa1, 0xd9,
+	0xf1, 0x79, 0x77, 0x78, 0x58, 0xf3, 0xc2, 0xfe, 0x1a, 0x8d, 0x3a, 0xe1, 0x20, 0x0a, 0x9f, 0xbe,
+	0xd9, 0xa3, 0x87, 0xb1, 0xfc, 0x7a, 0xb3, 0x45, 0x39, 0x6d, 0xf7, 0xc2, 0xcf, 0xd7, 0xe8, 0xc0,
+	0x5f, 0x3b, 0x7e, 0x9b, 0xf6, 0x06, 0x5d, 0xfa, 0xf6, 0x5a, 0x87, 0x05, 0x2c, 0xa2, 0x9c, 0xb5,
+	0x6a, 0x83, 0x28, 0xe4, 0x21, 0x59, 0x4f, 0x41, 0x6a, 0x06, 0xe4, 0x89, 0x00, 0x91, 0x5f, 0x4f,
+	0x0c, 0x48, 0x8d, 0x0e, 0xfc, 0x9a, 0x01, 0x59, 0x7e, 0xd3, 0x92, 0xdc, 0x09, 0x3b, 0xe1, 0x9a,
+	0xc4, 0x3a, 0x1c, 0xb6, 0xe5, 0x97, 0xfc, 0x90, 0xff, 0x94, 0x8c, 0x65, 0xe7, 0xe8, 0x6e, 0x5c,
+	0xf3, 0x43, 0x39, 0x10, 0x2f, 0x8c, 0xd8, 0xda, 0xf1, 0x85, 0x71, 0x2c, 0xbf, 0x93, 0xb6, 0xe9,
+	0x53, 0xaf, 0xeb, 0x07, 0x2c, 0x3a, 0x59, 0x1b, 0x1c, 0x75, 0x64, 0xa7, 0x88, 0xc5, 0xe1, 0x30,
+	0xf2, 0xd8, 0x44, 0xbd, 0xe2, 0xb5, 0x3e, 0xe3, 0xf4, 0x12, 0x59, 0xce, 0xcb, 0x0c, 0x2c, 0xd6,
+	0x3f, 0x76, 0x9b, 0x11, 0x6b, 0xb1, 0x80, 0xfb, 0xb4, 0x17, 0x93, 0xcf, 0xa0, 0x42, 0x3d, 0x8f,
+	0xc5, 0xf1, 0x03, 0x76, 0xb2, 0xdd, 0xaa, 0x66, 0x6e, 0x65, 0x6e, 0x57, 0xee, 0xbc, 0x5e, 0x53,
+	0xf0, 0x72, 0xf2, 0x62, 0xe0, 0xb5, 0xe3, 0xb7, 0x6b, 0x2e, 0xf3, 0x22, 0xc6, 0x1f, 0xb0, 0x13,
+	0x97, 0xf5, 0x98, 0xc7, 0xc3, 0xa8, 0x71, 0xf3, 0xc5, 0xe9, 0xea, 0xb5, 0xb3, 0xd3, 0xd5, 0x4a,
+	0x3d, 0x41, 0xd8, 0x40, 0x1b, 0x8e, 0x74, 0xe1, 0x7a, 0x2c, 0xbb, 0x25, 0x2d, 0xaa, 0xd9, 0x49,
+	0x24, 0x7c, 0x53, 0x4b, 0xb8, 0xee, 0x8e, 0xa2, 0xe0, 0x38, 0xac, 0xf3, 0x06, 0x54, 0xea, 0x1f,
+	0xbb, 0x9b, 0x41, 0x6b, 0x10, 0xfa, 0x01, 0x27, 0xaf, 0x41, 0x6e, 0x18, 0xf5, 0xe4, 0x74, 0xca,
+	0x8d, 0x8a, 0x46, 0xc9, 0x3d, 0xc2, 0x1d, 0x14, 0x74, 0xe7, 0x17, 0x59, 0x28, 0x36, 0xa8, 0x77,
+	0x14, 0xb6, 0xdb, 0xe4, 0x33, 0x28, 0xb5, 0x86, 0x11, 0xe5, 0x7e, 0x18, 0x54, 0xf3, 0x72, 0x70,
+	0x35, 0x6b, 0x70, 0xc9, 0xea, 0xd6, 0x06, 0x47, 0x1d, 0x41, 0x88, 0x6b, 0x62, 0x75, 0xc5, 0x70,
+	0x37, 0x74, 0xaf, 0xc6, 0x92, 0xc6, 0x2f, 0x19, 0x0a, 0x26, 0x88, 0xe4, 0x2d, 0x58, 0xda, 0xa2,
+	0x62, 0x2e, 0xfb, 0x2c, 0xf2, 0x58, 0xc0, 0x69, 0x87, 0x55, 0x0b, 0xb7, 0x32, 0xb7, 0x17, 0x1a,
+	0x79, 0xd1, 0x0b, 0x2f, 0x70, 0xc9, 0x6f, 0x43, 0x21, 0xe6, 0x6c, 0x10, 0xcb, 0xc1, 0xe7, 0x1b,
+	0x0b, 0x1a, 0xbc, 0xe0, 0x0a, 0x22, 0x2a, 0x1e, 0xd9, 0x85, 0x9c, 0x47, 0x07, 0x7a, 0x31, 0x27,
+	0x1d, 0x6f, 0xb2, 0x1e, 0x4d, 0x3a, 0x40, 0x81, 0x43, 0x36, 0x60, 0xe9, 0xa9, 0xcf, 0x39, 0xb3,
+	0x47, 0x99, 0x93, 0xa3, 0xac, 0xea, 0xb6, 0x4b, 0x3f, 0x1c, 0xe3, 0xe3, 0x85, 0x1e, 0x4e, 0x01,
+	0x72, 0x4d, 0xca, 0x9d, 0x16, 0xe4, 0x9b, 0x61, 0x8b, 0x91, 0x77, 0xa0, 0x18, 0x0d, 0x03, 0xee,
+	0xf7, 0x99, 0x5c, 0xd7, 0x72, 0x63, 0x59, 0x63, 0x15, 0x51, 0x91, 0xcf, 0xd3, 0xbf, 0x68, 0x9a,
+	0x92, 0xef, 0xc0, 0x9c, 0xd2, 0x79, 0x39, 0x80, 0x72, 0x63, 0x51, 0x77, 0x9a, 0x73, 0x25, 0x15,
+	0x35, 0xd7, 0xf9, 0x79, 0x0e, 0xca, 0xcd, 0x30, 0xe0, 0x54, 0xcc, 0x56, 0x2c, 0x9a, 0xdf, 0x17,
+	0xa3, 0x56, 0x3b, 0x9e, 0x2c, 0xda, 0xb6, 0x20, 0xa2, 0xe2, 0x91, 0x4f, 0x60, 0xfe, 0x38, 0xec,
+	0x0d, 0xfb, 0x6c, 0x37, 0x1c, 0x06, 0x3c, 0xae, 0x16, 0x6e, 0xe5, 0x6e, 0x57, 0xee, 0xac, 0x5e,
+	0xa6, 0x8a, 0x8f, 0xd3, 0x76, 0x8d, 0x6f, 0x68, 0xb0, 0x79, 0x8b, 0x18, 0xe3, 0x08, 0x14, 0x79,
+	0x0c, 0x59, 0x3f, 0x90, 0x23, 0xae, 0xdc, 0xf9, 0x7e, 0x6d, 0x0a, 0xd3, 0x52, 0xdb, 0x0e, 0x38,
+	0x8b, 0xda, 0xd4, 0x63, 0x8d, 0xb9, 0xb3, 0xd3, 0xd5, 0xec, 0x76, 0x80, 0x59, 0x3f, 0x20, 0xaf,
+	0x43, 0xd1, 0x0b, 0xfb, 0x7d, 0x1a, 0xb4, 0xaa, 0x73, 0xb7, 0x72, 0x42, 0x97, 0xc5, 0xfa, 0x35,
+	0x15, 0x09, 0x0d, 0x8f, 0x7c, 0x1b, 0xf2, 0x34, 0xea, 0xc4, 0xd5, 0xa2, 0x6c, 0x53, 0x3a, 0x3b,
+	0x5d, 0xcd, 0xd7, 0xa3, 0x4e, 0x8c, 0x92, 0x4a, 0xee, 0x41, 0x8e, 0x05, 0xc7, 0xd5, 0x92, 0x9c,
+	0xee, 0xf2, 0x65, 0xd3, 0xdd, 0x0c, 0x8e, 0x1f, 0xd3, 0x28, 0x55, 0x8c, 0xcd, 0xe0, 0x18, 0x45,
+	0x1f, 0xf2, 0x09, 0x94, 0x8d, 0x0d, 0x8a, 0xab, 0x65, 0x39, 0xbd, 0xdb, 0x97, 0x01, 0xa0, 0x6e,
+	0x84, 0xec, 0xd9, 0xd0, 0x8f, 0x58, 0x9f, 0x05, 0x3c, 0x6e, 0xdc, 0xd0, 0x70, 0x65, 0xc3, 0x8d,
+	0x31, 0x45, 0x73, 0x3e, 0x83, 0x7c, 0x33, 0x0a, 0x03, 0xf2, 0x06, 0x94, 0x62, 0xaf, 0xcb, 0x5a,
+	0xc3, 0x9e, 0xd9, 0xbd, 0xe4, 0x3c, 0xb9, 0x9a, 0x8e, 0x49, 0x0b, 0xa1, 0x1e, 0x3d, 0x7a, 0x12,
+	0x0e, 0xb9, 0xd4, 0x7d, 0x4b, 0x3d, 0x76, 0x24, 0x15, 0x35, 0xd7, 0xf9, 0x87, 0x0c, 0xcc, 0x6f,
+	0x34, 0x36, 0x28, 0xa7, 0x4a, 0x6f, 0x84, 0x86, 0x1c, 0xd3, 0xde, 0xf0, 0x82, 0x86, 0x3c, 0x16,
+	0x44, 0x54, 0x3c, 0x12, 0x41, 0x59, 0xfe, 0xd9, 0x8a, 0xc2, 0xbe, 0x3e, 0x5c, 0x9b, 0x53, 0xed,
+	0xa6, 0x2d, 0x5a, 0x80, 0x35, 0x16, 0xc4, 0x3a, 0x3c, 0x36, 0xd8, 0x98, 0x8a, 0x71, 0x42, 0x58,
+	0x1a, 0x6f, 0x4d, 0x3e, 0x85, 0xf9, 0xd8, 0x18, 0x43, 0x64, 0xed, 0xc9, 0xcc, 0xf2, 0x92, 0xd0,
+	0x55, 0xd7, 0xea, 0x8e, 0x23, 0x60, 0xce, 0xaf, 0x32, 0x30, 0xb7, 0xd1, 0x70, 0xfd, 0xe0, 0x88,
+	0x1c, 0x41, 0x49, 0x8c, 0xff, 0x90, 0xc6, 0x4c, 0xcb, 0x78, 0x7f, 0xba, 0xe9, 0x6a, 0x10, 0xcb,
+	0x14, 0x6a, 0x0a, 0x26, 0x02, 0x88, 0x0f, 0x45, 0xea, 0x09, 0x03, 0x14, 0x57, 0xb3, 0x52, 0x15,
+	0xa7, 0x3b, 0x28, 0xee, 0x47, 0x3b, 0x75, 0x09, 0xd3, 0xb8, 0x6e, 0xec, 0x89, 0xfa, 0x8e, 0xd1,
+	0xe0, 0x3b, 0x3f, 0xcd, 0x40, 0x32, 0x02, 0xa1, 0x32, 0xad, 0xc8, 0x3f, 0x66, 0x91, 0xde, 0xfa,
+	0x44, 0x65, 0x36, 0x24, 0x15, 0x35, 0x97, 0x3c, 0x03, 0x68, 0x25, 0xdb, 0xa0, 0x77, 0xbf, 0x3e,
+	0xf3, 0xee, 0x37, 0x16, 0xcf, 0x4e, 0x57, 0x21, 0xfd, 0x46, 0x4b, 0x88, 0xf3, 0x13, 0xb1, 0x15,
+	0xac, 0x35, 0x1c, 0x30, 0xe9, 0xb1, 0xfc, 0xd6, 0x05, 0x8f, 0xb5, 0xbd, 0x81, 0x82, 0x4e, 0x3e,
+	0x81, 0x62, 0x9f, 0x3e, 0x77, 0xfd, 0x3f, 0x65, 0x57, 0x31, 0xfa, 0x35, 0x73, 0xcc, 0x6a, 0x1f,
+	0x0d, 0x69, 0xc0, 0x7d, 0x7e, 0x92, 0x2e, 0xd6, 0xae, 0x82, 0x41, 0x83, 0xe7, 0x94, 0x60, 0x6e,
+	0xf3, 0xf9, 0x80, 0x06, 0x2d, 0xa7, 0x0c, 0xc5, 0xad, 0x1e, 0xe5, 0x9c, 0x05, 0xce, 0x7f, 0xe7,
+	0x61, 0xe1, 0x3e, 0xe3, 0xfb, 0x61, 0xcb, 0x1d, 0x30, 0x0f, 0xd9, 0x33, 0xf2, 0x2e, 0x54, 0xbc,
+	0xde, 0x30, 0xe6, 0x2c, 0xda, 0xa3, 0x7d, 0x26, 0x8d, 0x41, 0x39, 0x0d, 0x01, 0x9a, 0x29, 0x0b,
+	0xed, 0x76, 0xe4, 0x2e, 0xcc, 0x0f, 0xfc, 0x01, 0xeb, 0xf9, 0x01, 0x93, 0xfd, 0xd4, 0x04, 0x13,
+	0x9b, 0xba, 0x6f, 0xf1, 0x70, 0xa4, 0x25, 0x59, 0x83, 0x72, 0x40, 0xfb, 0x2c, 0x1e, 0x50, 0xbd,
+	0x1d, 0xe5, 0xd4, 0xa2, 0xec, 0x19, 0x06, 0xa6, 0x6d, 0xc8, 0x77, 0xa1, 0x18, 0xb1, 0x41, 0xcf,
+	0xf7, 0xa8, 0xb4, 0xc4, 0x85, 0x74, 0xce, 0xa8, 0xc8, 0x68, 0xf8, 0x62, 0x32, 0xd2, 0x27, 0x6c,
+	0x85, 0x51, 0x9f, 0x72, 0xed, 0x9f, 0x92, 0xc9, 0x6c, 0xa7, 0x2c, 0xb4, 0xdb, 0x89, 0x6e, 0xd1,
+	0x30, 0x08, 0x58, 0x24, 0x5b, 0x48, 0x47, 0x6e, 0x75, 0xc3, 0x94, 0x85, 0x76, 0x3b, 0xe2, 0x02,
+	0x0c, 0x86, 0xbd, 0xde, 0x7e, 0xd8, 0xf3, 0xbd, 0x93, 0xea, 0x9c, 0xec, 0xb5, 0xae, 0x7b, 0xc1,
+	0x7e, 0xc2, 0x39, 0x3f, 0x5d, 0x7d, 0xed, 0x62, 0xc4, 0x58, 0x4b, 0x1b, 0xa0, 0x05, 0x43, 0x1e,
+	0xc2, 0xe2, 0x70, 0xd0, 0xa2, 0x9c, 0x49, 0xcf, 0x71, 0x4c, 0x7b, 0xd5, 0xe2, 0xad, 0xcc, 0xed,
+	0x5c, 0xe3, 0x77, 0x35, 0xf0, 0xe2, 0xa3, 0x11, 0xee, 0xf9, 0xe9, 0xea, 0x82, 0x70, 0xb0, 0x49,
+	0x18, 0x80, 0x63, 0xdd, 0x49, 0x0c, 0x20, 0x82, 0x0b, 0x97, 0x53, 0x3e, 0x8c, 0xab, 0x25, 0xa9,
+	0x65, 0x1f, 0x4c, 0x77, 0x44, 0x13, 0x98, 0x06, 0x31, 0xd3, 0x4c, 0x69, 0x68, 0x89, 0x71, 0xfe,
+	0x39, 0x0f, 0xb9, 0xfb, 0x3e, 0xbf, 0x9a, 0x03, 0xbf, 0xa2, 0x37, 0xd4, 0xc1, 0x5f, 0xf6, 0xf2,
+	0xe0, 0x8f, 0x50, 0x58, 0x1c, 0xc6, 0x2c, 0x12, 0x7a, 0xa3, 0xac, 0xa4, 0x5c, 0xb8, 0x2b, 0x9b,
+	0x57, 0x22, 0xd7, 0x76, 0x04, 0x00, 0xc7, 0x00, 0x85, 0x88, 0x01, 0x8d, 0xe3, 0xcf, 0xc3, 0xa8,
+	0xa5, 0x45, 0x94, 0x26, 0x16, 0xb1, 0x3f, 0x02, 0x80, 0x63, 0x80, 0x64, 0x00, 0x37, 0xe3, 0xb8,
+	0xbb, 0x1f, 0xf9, 0xc7, 0x94, 0x33, 0xd9, 0x59, 0xca, 0x29, 0x4f, 0x14, 0x5e, 0x9f, 0x9d, 0xae,
+	0xde, 0x74, 0xdd, 0x0f, 0xc7, 0x51, 0xf0, 0x32, 0x68, 0x72, 0x0b, 0xf2, 0x03, 0xca, 0xbb, 0x3a,
+	0x2e, 0x9b, 0xd7, 0xeb, 0x9a, 0xdf, 0xa7, 0xbc, 0x8b, 0x92, 0x23, 0x2c, 0xed, 0x61, 0x44, 0x03,
+	0xaf, 0xab, 0x0f, 0x54, 0x62, 0x69, 0x1b, 0x92, 0x8a, 0x9a, 0x6b, 0x02, 0x92, 0xc2, 0xe4, 0x01,
+	0x89, 0xf3, 0x7f, 0x19, 0x28, 0xdc, 0x8f, 0xc2, 0xe1, 0x40, 0xec, 0xf2, 0x11, 0x3b, 0x19, 0x37,
+	0x98, 0xc2, 0xc7, 0x09, 0x3a, 0xb9, 0x03, 0xc0, 0x82, 0xd6, 0xc3, 0xb6, 0x6c, 0xac, 0x75, 0x21,
+	0x51, 0xc6, 0xcd, 0x84, 0x83, 0x56, 0x2b, 0xf2, 0x2e, 0xcc, 0xb5, 0x95, 0x41, 0x50, 0x73, 0x7c,
+	0xcd, 0x8c, 0x5f, 0x1d, 0xff, 0xf3, 0xd3, 0xd5, 0x8a, 0x6c, 0xa8, 0x4d, 0x83, 0x6e, 0x4c, 0x3c,
+	0x28, 0xc6, 0x3c, 0x8c, 0x84, 0xf6, 0xaa, 0x04, 0xe2, 0x0f, 0xa6, 0x3c, 0x35, 0x12, 0x43, 0x29,
+	0xb5, 0xfe, 0x40, 0x83, 0xec, 0xcc, 0x41, 0xfe, 0xc3, 0x83, 0x83, 0x7d, 0xe7, 0x3f, 0x33, 0x00,
+	0xe2, 0xcf, 0x87, 0x8c, 0xb6, 0x58, 0x24, 0x36, 0x25, 0x48, 0xcd, 0x6a, 0xb2, 0x29, 0xd2, 0x9c,
+	0x4a, 0x4e, 0x1a, 0xf8, 0x64, 0xaf, 0x1a, 0xf8, 0xe4, 0x66, 0x08, 0x7c, 0xd2, 0xa1, 0x69, 0xf7,
+	0xf7, 0xea, 0xc0, 0x27, 0x86, 0xa5, 0xf1, 0xd6, 0xe4, 0xc9, 0x2c, 0x81, 0x4f, 0xe2, 0x54, 0x7e,
+	0x4d, 0xf0, 0xf3, 0xb7, 0x19, 0x28, 0x09, 0xa9, 0x32, 0xfc, 0xf9, 0xf5, 0x59, 0x22, 0x79, 0x0a,
+	0xc5, 0xae, 0x1c, 0x9c, 0x09, 0x58, 0x3e, 0x98, 0x71, 0x49, 0x52, 0x87, 0xa4, 0xbe, 0x63, 0x34,
+	0x02, 0x9c, 0xa6, 0xda, 0x55, 0xbd, 0x0c, 0xef, 0x42, 0x25, 0x66, 0xd1, 0xb1, 0xef, 0xd9, 0x3e,
+	0x33, 0xf1, 0x33, 0x6e, 0xca, 0x42, 0xbb, 0x9d, 0xf3, 0x97, 0x19, 0x28, 0x27, 0x79, 0x84, 0x50,
+	0x8d, 0xb6, 0xdf, 0x0e, 0x65, 0xef, 0x52, 0xaa, 0x1a, 0x5b, 0xdb, 0x5b, 0x0f, 0x51, 0x72, 0xc8,
+	0xc7, 0x90, 0xef, 0x72, 0x6e, 0xd2, 0xc8, 0x7b, 0x53, 0xcf, 0x4e, 0x65, 0x1c, 0xe2, 0x1f, 0x4a,
+	0x40, 0xa1, 0xa4, 0x85, 0x07, 0xb4, 0x7d, 0x44, 0xaf, 0xa0, 0x9f, 0x9f, 0x43, 0xe5, 0x48, 0x34,
+	0x6d, 0x86, 0x41, 0xdb, 0xef, 0xe8, 0x13, 0xf4, 0x83, 0xa9, 0xc6, 0xf2, 0x20, 0xc5, 0x49, 0x57,
+	0xcb, 0x22, 0xa2, 0x2d, 0x49, 0x1c, 0x0c, 0x1e, 0x0e, 0x7c, 0x4f, 0x1f, 0xf6, 0xe4, 0x60, 0x1c,
+	0x08, 0x22, 0x2a, 0x9e, 0xf3, 0xb3, 0x0c, 0xd8, 0x08, 0xc2, 0x05, 0x1d, 0x46, 0xe1, 0x91, 0xd0,
+	0x89, 0x4c, 0xea, 0x82, 0x1a, 0x8a, 0x84, 0x86, 0x27, 0x42, 0x91, 0x63, 0x16, 0xc5, 0x7e, 0x18,
+	0xe8, 0x63, 0x97, 0xec, 0xfc, 0x63, 0x45, 0x46, 0xc3, 0x27, 0x7f, 0x08, 0xb9, 0x80, 0x71, 0x7d,
+	0xe8, 0xde, 0x9f, 0x7e, 0xde, 0x7b, 0x9b, 0x07, 0x8d, 0xa2, 0xd0, 0xdf, 0xbd, 0xcd, 0x03, 0x14,
+	0x90, 0xce, 0xbf, 0x65, 0xa0, 0x64, 0x58, 0xc4, 0x85, 0x1c, 0xef, 0xc5, 0xfa, 0x40, 0xdd, 0x9d,
+	0x4a, 0xcc, 0xc1, 0x8e, 0xab, 0x24, 0x1c, 0xec, 0xb8, 0x28, 0xd0, 0x84, 0x02, 0xc5, 0x34, 0xee,
+	0xcd, 0xa4, 0x40, 0x6e, 0xdd, 0xdd, 0x51, 0x0a, 0x24, 0xfe, 0xa1, 0x04, 0x74, 0xfe, 0xd5, 0x2c,
+	0x7b, 0x62, 0x17, 0x0a, 0x72, 0xeb, 0xf4, 0xf8, 0xbf, 0x37, 0xfd, 0x32, 0xa5, 0xfb, 0x2c, 0x3f,
+	0x51, 0xe1, 0x92, 0x0d, 0xa8, 0xc4, 0x9c, 0x46, 0xfc, 0x61, 0xbb, 0x1d, 0x33, 0x93, 0x5c, 0x3a,
+	0xc9, 0x89, 0x4b, 0x59, 0xe7, 0x46, 0xa5, 0xd4, 0x27, 0xda, 0xdd, 0x9c, 0x02, 0xe4, 0x76, 0xc2,
+	0x8e, 0xf3, 0xe3, 0x1c, 0x94, 0x76, 0x19, 0xa7, 0x62, 0x18, 0xe4, 0x2f, 0x32, 0x50, 0xa1, 0x41,
+	0x10, 0x72, 0xaa, 0x72, 0x9f, 0x8c, 0x34, 0x25, 0x7b, 0x53, 0xcd, 0xc0, 0x80, 0xd6, 0xea, 0x29,
+	0xe0, 0x66, 0xc0, 0xa3, 0x13, 0xab, 0x16, 0x97, 0x72, 0xd0, 0x96, 0x4b, 0x9e, 0x89, 0xcc, 0xf9,
+	0x90, 0xf5, 0x8c, 0x31, 0xdb, 0x9e, 0x6d, 0x04, 0x3b, 0x12, 0x4b, 0x09, 0xb7, 0x92, 0x70, 0x41,
+	0x44, 0x2d, 0x68, 0xf9, 0xfb, 0xb0, 0x34, 0x3e, 0x50, 0xb2, 0x64, 0xb9, 0x6d, 0xe5, 0xa9, 0xbf,
+	0x31, 0xe2, 0xa0, 0xb4, 0x47, 0xfa, 0x5e, 0xf6, 0x6e, 0x66, 0xf9, 0x1e, 0x54, 0x2c, 0x31, 0x93,
+	0x74, 0x75, 0x7e, 0x91, 0x81, 0xe2, 0x2e, 0xe3, 0x91, 0xef, 0xc5, 0xea, 0xa0, 0x73, 0xda, 0x1b,
+	0xaf, 0xa8, 0x1d, 0x08, 0x22, 0x2a, 0x9e, 0x88, 0x5d, 0x58, 0x14, 0x85, 0xd2, 0xd6, 0x8b, 0x56,
+	0xc9, 0x9c, 0x36, 0x25, 0x15, 0x35, 0x97, 0xec, 0x43, 0x3e, 0xa2, 0x9c, 0xe9, 0xf3, 0x3a, 0x69,
+	0x16, 0x96, 0x18, 0x40, 0xa4, 0x9c, 0xa1, 0x44, 0x52, 0x69, 0x0b, 0x8f, 0x7c, 0x16, 0x4b, 0xe3,
+	0x97, 0xb7, 0xd3, 0x16, 0x49, 0x46, 0xc3, 0x77, 0x7e, 0x9e, 0x85, 0x92, 0xc9, 0x98, 0xc8, 0x9f,
+	0x40, 0xa9, 0xaf, 0x77, 0x43, 0x1f, 0x8b, 0xb7, 0xae, 0x56, 0x08, 0x7c, 0x78, 0xf8, 0x94, 0x79,
+	0x5c, 0xec, 0x64, 0x1a, 0x11, 0xa5, 0x34, 0x4c, 0x50, 0x89, 0x07, 0xf9, 0x78, 0xc0, 0xbc, 0x99,
+	0x72, 0x61, 0x33, 0x5c, 0x91, 0x46, 0xa6, 0xd3, 0x97, 0x49, 0xa5, 0x04, 0x27, 0x47, 0x30, 0x17,
+	0xab, 0x94, 0x43, 0x2d, 0x69, 0x73, 0x36, 0x31, 0x2a, 0xed, 0x48, 0xab, 0x86, 0x2a, 0xe5, 0xd0,
+	0x22, 0x9c, 0x2f, 0x32, 0x90, 0xa4, 0x9c, 0x3b, 0x7e, 0xcc, 0xc9, 0x67, 0x17, 0x16, 0xf1, 0x8a,
+	0xd5, 0x54, 0xd1, 0x5b, 0x2e, 0x61, 0x52, 0xf2, 0x30, 0x14, 0x6b, 0x01, 0x0f, 0xa1, 0xe0, 0x73,
+	0xd6, 0x37, 0x47, 0xee, 0xfd, 0x99, 0xa6, 0x66, 0x25, 0x45, 0x02, 0x13, 0x15, 0xb4, 0x13, 0xa5,
+	0x33, 0x12, 0xab, 0x2a, 0x64, 0x9a, 0xfa, 0xf1, 0xf4, 0x32, 0x65, 0xb6, 0x26, 0x76, 0xec, 0xd2,
+	0xf2, 0xb3, 0xf3, 0xb3, 0x2c, 0x2c, 0x8e, 0xae, 0x38, 0x79, 0x07, 0x0a, 0x83, 0xae, 0xa9, 0x23,
+	0x95, 0x1b, 0x2b, 0xa6, 0xdf, 0xbe, 0x20, 0x8a, 0xe4, 0xd3, 0xb4, 0x97, 0x04, 0x54, 0x8d, 0x85,
+	0xee, 0xf7, 0x59, 0x1c, 0x8b, 0xd0, 0x79, 0xcc, 0x4f, 0xee, 0x2a, 0x32, 0x1a, 0x3e, 0xf1, 0x00,
+	0xbc, 0x30, 0x68, 0xf9, 0xca, 0x8a, 0xe6, 0xe4, 0xe4, 0xd6, 0xae, 0xb6, 0x57, 0x4d, 0xd3, 0x2f,
+	0xd5, 0xf7, 0x84, 0x14, 0xa3, 0x05, 0x4b, 0x28, 0x54, 0x7a, 0x34, 0xe6, 0x2a, 0x75, 0x6e, 0xe9,
+	0x60, 0xe4, 0xf7, 0xae, 0x26, 0xe5, 0xc0, 0xef, 0xb3, 0xd4, 0x0e, 0xef, 0xa4, 0x30, 0x68, 0x63,
+	0x3a, 0xbf, 0xcc, 0x42, 0xd6, 0x5d, 0xbf, 0x42, 0x60, 0x24, 0xb2, 0xa9, 0xa1, 0x77, 0xc4, 0x2e,
+	0x94, 0x3a, 0x1b, 0x92, 0x8a, 0x9a, 0x2b, 0xda, 0x45, 0xac, 0x23, 0x42, 0x8d, 0xb1, 0x8a, 0x39,
+	0x4a, 0x2a, 0x6a, 0x2e, 0x39, 0x86, 0x8a, 0x97, 0xde, 0xfc, 0xe8, 0xb9, 0x4d, 0x77, 0xda, 0x46,
+	0x2f, 0x91, 0x1a, 0xd7, 0x65, 0x05, 0x28, 0x25, 0xa0, 0x2d, 0x88, 0x3c, 0x85, 0x12, 0xd3, 0xf7,
+	0x32, 0xb2, 0x62, 0x32, 0x6d, 0x74, 0x67, 0xdd, 0xef, 0x34, 0xe6, 0xc5, 0x81, 0x33, 0x5f, 0x98,
+	0xe0, 0x3b, 0x3f, 0x82, 0x39, 0x77, 0x5d, 0xc6, 0xf6, 0x2e, 0x64, 0xe3, 0x75, 0x3d, 0xc9, 0xdf,
+	0x9f, 0xee, 0x0c, 0xac, 0x37, 0x40, 0x2f, 0x65, 0xd6, 0x5d, 0xc7, 0x6c, 0xbc, 0xee, 0xfc, 0x47,
+	0x06, 0x4a, 0xee, 0xba, 0x8e, 0x49, 0x94, 0x84, 0xe2, 0x57, 0x2a, 0x81, 0x1c, 0x02, 0x0c, 0xc2,
+	0x5e, 0x6f, 0x9f, 0x45, 0x7e, 0xd8, 0x92, 0xa5, 0xa2, 0xc9, 0xef, 0x77, 0x12, 0x25, 0xdf, 0x4f,
+	0x90, 0xd0, 0x42, 0x75, 0xfe, 0x27, 0x03, 0x32, 0xd6, 0x22, 0x3f, 0x80, 0x72, 0x9f, 0x79, 0x5d,
+	0x1a, 0xf8, 0x71, 0x5f, 0x2b, 0xa2, 0x09, 0x79, 0xca, 0xbb, 0x86, 0x21, 0xce, 0xae, 0x68, 0x9d,
+	0x10, 0x30, 0xed, 0x44, 0xb6, 0x21, 0x3f, 0x8c, 0x59, 0x34, 0xd9, 0xad, 0x9e, 0xac, 0x88, 0x3e,
+	0x8a, 0x59, 0xa4, 0xab, 0x0d, 0x12, 0x82, 0x3c, 0x82, 0x92, 0x29, 0x71, 0x68, 0x4f, 0x30, 0x43,
+	0xb5, 0x24, 0x81, 0x72, 0xfe, 0x37, 0x0b, 0xe5, 0xa4, 0x64, 0x4c, 0x86, 0x50, 0x16, 0x9e, 0x40,
+	0x5e, 0x50, 0x68, 0x7b, 0x5f, 0x9f, 0xb6, 0x0a, 0xed, 0x1a, 0x20, 0x2b, 0xf1, 0xb4, 0xa8, 0x98,
+	0x4a, 0x22, 0x7f, 0x96, 0x81, 0xa5, 0x30, 0x40, 0xe6, 0x85, 0x51, 0x6b, 0x2f, 0xe4, 0x5b, 0xe1,
+	0x30, 0x68, 0xcd, 0xe4, 0x55, 0x47, 0xc5, 0x9f, 0x9d, 0xae, 0x2e, 0x3d, 0x1c, 0x83, 0xc7, 0x0b,
+	0x02, 0x49, 0x17, 0x8a, 0x61, 0x20, 0xc3, 0x19, 0xbd, 0xc0, 0x5f, 0x81, 0x6c, 0x99, 0xfe, 0x3c,
+	0x54, 0xa8, 0x68, 0xe0, 0x9d, 0x07, 0x30, 0xb2, 0x14, 0x22, 0xd1, 0x8e, 0x9f, 0x5d, 0x48, 0xb4,
+	0xdd, 0x8f, 0x76, 0x50, 0xd0, 0x93, 0xeb, 0xab, 0xec, 0x65, 0xd7, 0x57, 0xce, 0x2f, 0x73, 0x90,
+	0x77, 0x0f, 0xea, 0x7b, 0x57, 0x30, 0x99, 0xdf, 0x85, 0x62, 0x40, 0x79, 0xfc, 0x28, 0xea, 0xe9,
+	0x0a, 0x54, 0xe2, 0x4e, 0xf6, 0xea, 0x07, 0xae, 0x48, 0xec, 0x0d, 0x9f, 0xdc, 0x87, 0x1b, 0xe2,
+	0xef, 0x6e, 0x18, 0xf8, 0x3c, 0x8c, 0xfc, 0xa0, 0x23, 0x3a, 0x95, 0x64, 0xa7, 0x6f, 0xe9, 0x4e,
+	0x37, 0x44, 0x27, 0xab, 0x01, 0xee, 0xe0, 0xc5, 0x3e, 0x64, 0x0d, 0xca, 0xba, 0xde, 0xbd, 0xdd,
+	0xd2, 0x15, 0xe1, 0xa4, 0x4c, 0xad, 0xab, 0xe2, 0xdb, 0x1b, 0x98, 0xb6, 0x11, 0x83, 0x8c, 0x87,
+	0x32, 0xdc, 0xd2, 0x06, 0x3b, 0x19, 0xa4, 0xab, 0xc8, 0x68, 0xf8, 0x64, 0x07, 0x16, 0xf4, 0xdf,
+	0xfd, 0x88, 0xb5, 0xfd, 0xe7, 0xba, 0x76, 0xfc, 0x1d, 0xdd, 0x61, 0xc1, 0xb5, 0x99, 0xe7, 0xe3,
+	0x04, 0x1c, 0xed, 0x4c, 0x3e, 0x85, 0x3c, 0x1d, 0xf2, 0xae, 0x36, 0x59, 0x53, 0x06, 0x06, 0x07,
+	0xf5, 0xbd, 0xfa, 0x90, 0x77, 0xf5, 0x2e, 0x0d, 0x79, 0x17, 0x25, 0x28, 0x79, 0x17, 0x2a, 0x7d,
+	0xfa, 0x7c, 0x3b, 0x68, 0xf7, 0xfc, 0x4e, 0x57, 0xd5, 0x21, 0x17, 0x52, 0x6f, 0xb8, 0x9b, 0xb2,
+	0xd0, 0x6e, 0xe7, 0x20, 0x94, 0x0c, 0x24, 0xd9, 0x12, 0x71, 0xfa, 0x11, 0x0b, 0x26, 0xab, 0xfa,
+	0x94, 0x55, 0x28, 0x7f, 0xc4, 0x02, 0x54, 0xdd, 0x9d, 0x7f, 0xca, 0x40, 0xc1, 0xf5, 0x68, 0x4f,
+	0xd6, 0x51, 0xfa, 0x7e, 0xa0, 0xab, 0xff, 0x2a, 0xf9, 0x2d, 0x58, 0x83, 0x4a, 0x59, 0x68, 0xb7,
+	0x23, 0x6f, 0xcb, 0xb9, 0x24, 0xdd, 0xb2, 0x72, 0x2e, 0xd7, 0xf5, 0x3c, 0xac, 0x2e, 0xe9, 0x07,
+	0xb9, 0x0b, 0xf3, 0xfa, 0x6e, 0x01, 0x85, 0x11, 0xd6, 0xb7, 0xe7, 0x89, 0x61, 0x40, 0x8b, 0x87,
+	0x23, 0x2d, 0x9d, 0x7f, 0xcf, 0x43, 0x5e, 0x7a, 0xac, 0xdf, 0xac, 0xde, 0x22, 0xdd, 0xe6, 0x34,
+	0x98, 0x2d, 0xdd, 0x3e, 0xa8, 0xef, 0xe9, 0x74, 0xfb, 0xa0, 0xbe, 0x87, 0x12, 0x90, 0x7c, 0x6a,
+	0xd2, 0xeb, 0xdc, 0xcc, 0xe9, 0x75, 0xf9, 0x42, 0x6a, 0xed, 0x42, 0xae, 0x17, 0x9a, 0xc2, 0xce,
+	0x74, 0x95, 0x87, 0x9d, 0xb0, 0xa3, 0x2a, 0x0f, 0x3b, 0x61, 0x07, 0x05, 0x9a, 0xd0, 0x65, 0x59,
+	0xba, 0x2a, 0xcc, 0xa0, 0xcb, 0xa6, 0x0e, 0x38, 0x5e, 0xbe, 0xd2, 0x9e, 0x5d, 0x39, 0xdf, 0xf7,
+	0xa6, 0xf4, 0xec, 0x12, 0x78, 0xce, 0xf2, 0xec, 0x2e, 0x64, 0x5b, 0x87, 0xfa, 0xec, 0xbd, 0x37,
+	0xe5, 0xb5, 0x62, 0x0a, 0xba, 0xd1, 0xc0, 0x6c, 0xeb, 0xd0, 0x79, 0x99, 0x07, 0xfd, 0x30, 0xe2,
+	0x6a, 0xea, 0xe3, 0x45, 0xe1, 0x6c, 0xea, 0xd3, 0x8c, 0xc2, 0x40, 0xad, 0x97, 0xf8, 0x87, 0x12,
+	0x30, 0xd1, 0xcb, 0xdc, 0x57, 0xad, 0x97, 0xd4, 0xe8, 0xe5, 0xcc, 0x55, 0x41, 0x5d, 0x8d, 0xbe,
+	0xa8, 0x9d, 0x3f, 0x1a, 0x51, 0xa4, 0xe9, 0x2b, 0xbc, 0x5a, 0xc0, 0xb8, 0x2a, 0x3d, 0x92, 0xaa,
+	0x54, 0x9a, 0xc5, 0xe2, 0xea, 0x78, 0x73, 0x44, 0x99, 0x28, 0x14, 0x22, 0xc6, 0xa3, 0x13, 0xad,
+	0x4f, 0xd3, 0x5d, 0x38, 0xe8, 0x17, 0x50, 0x69, 0x8e, 0x87, 0x02, 0x12, 0x15, 0xb2, 0xf3, 0x8f,
+	0x59, 0x98, 0x57, 0x92, 0x75, 0x86, 0xf7, 0x3a, 0x14, 0x07, 0x2c, 0x68, 0xf9, 0x41, 0x47, 0x6e,
+	0x74, 0x5e, 0xf9, 0xfe, 0x7d, 0x45, 0x42, 0xc3, 0x23, 0x27, 0x22, 0xa5, 0x93, 0x85, 0x97, 0x6a,
+	0x7e, 0x86, 0x52, 0x97, 0x2d, 0xba, 0xa6, 0x2b, 0x39, 0xaa, 0xda, 0x64, 0xa5, 0x88, 0x92, 0x8a,
+	0x46, 0xde, 0xf2, 0x73, 0x98, 0xb7, 0x5b, 0x5e, 0x52, 0x30, 0x42, 0xbb, 0x60, 0x34, 0xed, 0xba,
+	0x19, 0xb9, 0x56, 0xb9, 0xe9, 0x5f, 0xb2, 0x90, 0x17, 0x19, 0xf2, 0xd7, 0x50, 0x94, 0x79, 0x32,
+	0x52, 0x94, 0x99, 0x31, 0xbd, 0xbf, 0xac, 0x20, 0xd3, 0x19, 0x2b, 0xc8, 0xcc, 0x7c, 0x07, 0xfc,
+	0xaa, 0x62, 0xcc, 0x0b, 0x91, 0x4d, 0x71, 0x36, 0xf8, 0x1a, 0x0a, 0x31, 0x7f, 0x3c, 0x5a, 0x88,
+	0xb9, 0x37, 0xf5, 0x94, 0x5e, 0x51, 0x84, 0x79, 0x71, 0x5d, 0x4d, 0x45, 0x56, 0x60, 0x8c, 0x25,
+	0x9e, 0x7b, 0xa5, 0x25, 0x76, 0x21, 0xe7, 0x51, 0x5e, 0xbd, 0x3e, 0x83, 0x4b, 0x6c, 0x52, 0xae,
+	0x5c, 0x62, 0x93, 0x72, 0x14, 0x68, 0xe4, 0x08, 0xca, 0x9e, 0x79, 0x10, 0xa7, 0x97, 0x70, 0xba,
+	0x17, 0x36, 0xc9, 0xb3, 0x3a, 0x75, 0x79, 0x97, 0x7c, 0x62, 0x8a, 0x4f, 0x9e, 0xc0, 0x5c, 0x4b,
+	0x3e, 0x5c, 0xa9, 0xfe, 0xd6, 0x2c, 0x1e, 0x4d, 0x42, 0x34, 0x40, 0xbe, 0xc6, 0x91, 0xff, 0x51,
+	0xc3, 0x0a, 0x01, 0x4c, 0xbe, 0x4a, 0xa9, 0x2e, 0xcf, 0x20, 0x40, 0x3d, 0x6c, 0x51, 0x02, 0xd4,
+	0x7f, 0xd4, 0xb0, 0xe4, 0x2d, 0x98, 0x6b, 0xfb, 0x3d, 0xce, 0x22, 0x1d, 0xf5, 0x57, 0x93, 0xcb,
+	0x5e, 0x49, 0x3d, 0x4f, 0xfe, 0xa1, 0x6e, 0x47, 0x3c, 0x28, 0xb6, 0xd5, 0xf3, 0x98, 0xea, 0xb7,
+	0x66, 0x30, 0x1f, 0xfa, 0x89, 0x8d, 0x32, 0x9f, 0xfa, 0x03, 0x0d, 0xb2, 0x50, 0x8d, 0x8e, 0xcf,
+	0xab, 0xf3, 0x33, 0xa8, 0xc6, 0x7d, 0x5f, 0xab, 0xc6, 0x7d, 0x9f, 0xa3, 0x40, 0x13, 0xf1, 0x5d,
+	0x47, 0xde, 0x83, 0x57, 0x66, 0x88, 0xef, 0xe4, 0xd5, 0xb7, 0xf2, 0xa0, 0xea, 0xea, 0x5c, 0x61,
+	0xca, 0xb0, 0x22, 0x6c, 0x31, 0xed, 0x8a, 0xa6, 0x0c, 0x2b, 0xc2, 0x96, 0xf6, 0x9d, 0xe2, 0x1f,
+	0x4a, 0x40, 0xf2, 0x3b, 0x90, 0xeb, 0xd3, 0x81, 0x7e, 0x69, 0x64, 0x8c, 0x62, 0x6e, 0x97, 0x0e,
+	0xce, 0xd5, 0x0f, 0x0a, 0x36, 0x79, 0x03, 0x4a, 0x91, 0x89, 0xd4, 0xbf, 0x29, 0xa3, 0xee, 0xc4,
+	0x10, 0x24, 0xa1, 0x7a, 0xd2, 0x42, 0xac, 0x44, 0x2c, 0x52, 0x83, 0x6a, 0x75, 0x86, 0x95, 0x90,
+	0xc9, 0x85, 0x5a, 0x09, 0xf9, 0x17, 0x15, 0x26, 0x69, 0x43, 0xd1, 0xbc, 0x95, 0x54, 0xf5, 0xc9,
+	0xf7, 0x66, 0x70, 0x7d, 0x56, 0x5a, 0xa8, 0x1f, 0x4f, 0x1a, 0x70, 0x61, 0xcd, 0x62, 0x3f, 0x38,
+	0x32, 0x0e, 0x76, 0x4a, 0x6b, 0x26, 0x62, 0xc9, 0xb4, 0xbc, 0x2b, 0xf0, 0x50, 0xc1, 0x92, 0x27,
+	0xb0, 0x10, 0x31, 0x79, 0xaf, 0xa5, 0x9f, 0x2c, 0xa9, 0xb4, 0xf6, 0x9e, 0x49, 0x3b, 0xd1, 0x66,
+	0x9e, 0x9f, 0xae, 0xde, 0xba, 0xe4, 0xd5, 0xd2, 0x48, 0x1b, 0x1c, 0xc5, 0x23, 0x77, 0x00, 0x38,
+	0x8b, 0xfa, 0x7e, 0x40, 0x79, 0x18, 0x55, 0x41, 0x5e, 0x50, 0x27, 0x5e, 0xef, 0x20, 0xe1, 0xa0,
+	0xd5, 0x8a, 0x6c, 0x42, 0x51, 0x3d, 0xb9, 0x8d, 0xab, 0x0b, 0xaf, 0x7e, 0x38, 0xa2, 0xde, 0xe8,
+	0x5a, 0xd7, 0xad, 0xaa, 0x0b, 0x9a, 0xbe, 0xe4, 0x87, 0x40, 0xf4, 0x95, 0x79, 0xdd, 0xf3, 0xc2,
+	0x61, 0xc0, 0xe5, 0x0d, 0xfb, 0xe2, 0xc8, 0x03, 0x65, 0xe2, 0x5e, 0x68, 0x81, 0x97, 0xf4, 0x22,
+	0x1d, 0xcb, 0x67, 0x2d, 0xcd, 0xe0, 0x8e, 0xcd, 0xa5, 0x9a, 0x2a, 0x6b, 0x9a, 0x2f, 0xcb, 0x7d,
+	0xfd, 0x55, 0x06, 0xe6, 0x83, 0xb0, 0xc5, 0x4c, 0xd2, 0x5b, 0xbd, 0x21, 0x57, 0xe0, 0xe1, 0x4c,
+	0xce, 0xbf, 0xb6, 0x67, 0x21, 0xaa, 0xd0, 0x2a, 0xc9, 0x57, 0x6d, 0x16, 0x8e, 0x88, 0x26, 0x5b,
+	0x50, 0xa2, 0xed, 0xb6, 0x1f, 0xf8, 0xfc, 0xa4, 0x4a, 0xe4, 0xa4, 0xbf, 0x7d, 0xd9, 0x46, 0xd4,
+	0x75, 0x1b, 0x35, 0x27, 0xf3, 0x85, 0x49, 0x5f, 0xf2, 0x08, 0x2a, 0x3c, 0xec, 0xb1, 0x48, 0x5f,
+	0x8b, 0xde, 0x94, 0x33, 0x5a, 0xb9, 0x0c, 0xea, 0x20, 0x69, 0x96, 0xe6, 0xee, 0x29, 0x2d, 0x46,
+	0x1b, 0x67, 0xf9, 0x03, 0xb8, 0x71, 0x61, 0x5e, 0x13, 0xdd, 0x1c, 0xfe, 0x7d, 0x11, 0xac, 0xc7,
+	0x6a, 0xe4, 0xad, 0xd1, 0x7b, 0x8d, 0xe5, 0xf1, 0x7b, 0x8d, 0xb2, 0x68, 0x3b, 0x72, 0xa7, 0x21,
+	0xeb, 0xf1, 0x34, 0x0e, 0x03, 0xed, 0x58, 0xac, 0x7a, 0xbc, 0xa0, 0xa2, 0xe6, 0x4e, 0x72, 0xf7,
+	0x61, 0xdb, 0xb8, 0xc2, 0x6f, 0xb4, 0x71, 0x6f, 0x40, 0x29, 0x36, 0x8a, 0x52, 0x1c, 0x7b, 0x51,
+	0x6d, 0xf6, 0x34, 0x69, 0x41, 0x5a, 0x30, 0xdf, 0xa3, 0x31, 0x97, 0x86, 0xac, 0x55, 0xe7, 0x3a,
+	0xed, 0x9d, 0xe4, 0xce, 0x23, 0xd1, 0x9a, 0x1d, 0x0b, 0x07, 0x47, 0x50, 0xc9, 0x4f, 0x33, 0xb0,
+	0x18, 0x5b, 0x21, 0x7d, 0x62, 0x22, 0xdd, 0x19, 0xa3, 0xcb, 0x91, 0x44, 0x81, 0xe9, 0x14, 0xe1,
+	0xb6, 0x79, 0x03, 0x39, 0xca, 0x3c, 0xbf, 0x40, 0xc1, 0xb1, 0x41, 0x91, 0xbf, 0xcb, 0xc0, 0xbc,
+	0x30, 0x82, 0xc9, 0x28, 0x95, 0x89, 0xfd, 0x68, 0xe6, 0x51, 0x5a, 0x98, 0x6a, 0x8c, 0xaf, 0x27,
+	0x8f, 0x0b, 0x0c, 0xeb, 0xd2, 0x01, 0x8e, 0x8c, 0x66, 0xf9, 0xcf, 0x33, 0x70, 0xf3, 0x92, 0x09,
+	0x5f, 0xa2, 0xe0, 0x1f, 0x8f, 0x66, 0x3a, 0xf5, 0x99, 0x93, 0x30, 0xfb, 0x62, 0xfe, 0x27, 0x19,
+	0xb8, 0x71, 0x61, 0x46, 0x5f, 0xf3, 0x20, 0x9c, 0xc7, 0x60, 0x5e, 0xc9, 0x5d, 0xad, 0x32, 0x1c,
+	0x0f, 0x0f, 0xf7, 0x29, 0xef, 0x8e, 0x1f, 0x36, 0x57, 0x91, 0xd1, 0xf0, 0x9d, 0xbf, 0xce, 0x42,
+	0xee, 0x60, 0xc7, 0x25, 0x9f, 0xc2, 0xbc, 0x47, 0x9b, 0x2c, 0xe2, 0xfa, 0x69, 0xe5, 0xe4, 0x8f,
+	0xf0, 0x9b, 0xf5, 0xb4, 0x3b, 0x8e, 0x80, 0x91, 0x47, 0x00, 0x5e, 0x0a, 0x3d, 0xf9, 0xf5, 0x89,
+	0x05, 0x6c, 0x01, 0x11, 0x84, 0xf2, 0x51, 0xf2, 0x16, 0x74, 0xa2, 0x5b, 0x14, 0x19, 0xea, 0xa7,
+	0x2f, 0x40, 0x53, 0x98, 0x46, 0xed, 0xc5, 0x97, 0x2b, 0xd7, 0xbe, 0xf8, 0x72, 0xe5, 0xda, 0xcb,
+	0x2f, 0x57, 0xae, 0xfd, 0xf8, 0x6c, 0x25, 0xf3, 0xe2, 0x6c, 0x25, 0xf3, 0xc5, 0xd9, 0x4a, 0xe6,
+	0xe5, 0xd9, 0x4a, 0xe6, 0x57, 0x67, 0x2b, 0x99, 0xbf, 0xf9, 0xaf, 0x95, 0x6b, 0x7f, 0x54, 0x32,
+	0xfb, 0xf5, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x7a, 0xc5, 0x0b, 0x9f, 0x37, 0x00, 0x00,
 }
 
 func (m *AWSCredentials) Marshal() (dAtA []byte, err error) {
@@ -2791,6 +2821,49 @@ func (m *Kafka) MarshalTo(dAtA []byte) (int, error) {
 }
 
 func (m *Kafka) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	{
+		size, err := m.KafkaConfig.MarshalToSizedBuffer(dAtA[:i])
+		if err != nil {
+			return 0, err
+		}
+		i -= size
+		i = encodeVarintGenerated(dAtA, i, uint64(size))
+	}
+	i--
+	dAtA[i] = 0x22
+	i -= len(m.Topic)
+	copy(dAtA[i:], m.Topic)
+	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Topic)))
+	i--
+	dAtA[i] = 0x1a
+	i -= len(m.Name)
+	copy(dAtA[i:], m.Name)
+	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name)))
+	i--
+	dAtA[i] = 0xa
+	return len(dAtA) - i, nil
+}
+
+func (m *KafkaConfig) Marshal() (dAtA []byte, err error) {
+	size := m.Size()
+	dAtA = make([]byte, size)
+	n, err := m.MarshalToSizedBuffer(dAtA[:size])
+	if err != nil {
+		return nil, err
+	}
+	return dAtA[:n], nil
+}
+
+func (m *KafkaConfig) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *KafkaConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	i := len(dAtA)
 	_ = i
 	var l int
@@ -2805,32 +2878,22 @@ func (m *Kafka) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 			i = encodeVarintGenerated(dAtA, i, uint64(size))
 		}
 		i--
-		dAtA[i] = 0x2a
+		dAtA[i] = 0x1a
 	}
 	i -= len(m.Version)
 	copy(dAtA[i:], m.Version)
 	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version)))
 	i--
-	dAtA[i] = 0x22
-	i -= len(m.Topic)
-	copy(dAtA[i:], m.Topic)
-	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Topic)))
-	i--
-	dAtA[i] = 0x1a
+	dAtA[i] = 0x12
 	if len(m.Brokers) > 0 {
 		for iNdEx := len(m.Brokers) - 1; iNdEx >= 0; iNdEx-- {
 			i -= len(m.Brokers[iNdEx])
 			copy(dAtA[i:], m.Brokers[iNdEx])
 			i = encodeVarintGenerated(dAtA, i, uint64(len(m.Brokers[iNdEx])))
 			i--
-			dAtA[i] = 0x12
+			dAtA[i] = 0xa
 		}
 	}
-	i -= len(m.Name)
-	copy(dAtA[i:], m.Name)
-	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name)))
-	i--
-	dAtA[i] = 0xa
 	return len(dAtA) - i, nil
 }
 
@@ -4910,14 +4973,25 @@ func (m *Kafka) Size() (n int) {
 	_ = l
 	l = len(m.Name)
 	n += 1 + l + sovGenerated(uint64(l))
+	l = len(m.Topic)
+	n += 1 + l + sovGenerated(uint64(l))
+	l = m.KafkaConfig.Size()
+	n += 1 + l + sovGenerated(uint64(l))
+	return n
+}
+
+func (m *KafkaConfig) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
 	if len(m.Brokers) > 0 {
 		for _, s := range m.Brokers {
 			l = len(s)
 			n += 1 + l + sovGenerated(uint64(l))
 		}
 	}
-	l = len(m.Topic)
-	n += 1 + l + sovGenerated(uint64(l))
 	l = len(m.Version)
 	n += 1 + l + sovGenerated(uint64(l))
 	if m.NET != nil {
@@ -5821,8 +5895,18 @@ func (this *Kafka) String() string {
 	}
 	s := strings.Join([]string{`&Kafka{`,
 		`Name:` + fmt.Sprintf("%v", this.Name) + `,`,
-		`Brokers:` + fmt.Sprintf("%v", this.Brokers) + `,`,
 		`Topic:` + fmt.Sprintf("%v", this.Topic) + `,`,
+		`KafkaConfig:` + strings.Replace(strings.Replace(this.KafkaConfig.String(), "KafkaConfig", "KafkaConfig", 1), `&`, ``, 1) + `,`,
+		`}`,
+	}, "")
+	return s
+}
+func (this *KafkaConfig) String() string {
+	if this == nil {
+		return "nil"
+	}
+	s := strings.Join([]string{`&KafkaConfig{`,
+		`Brokers:` + fmt.Sprintf("%v", this.Brokers) + `,`,
 		`Version:` + fmt.Sprintf("%v", this.Version) + `,`,
 		`NET:` + strings.Replace(this.NET.String(), "KafkaNET", "KafkaNET", 1) + `,`,
 		`}`,
@@ -9366,9 +9450,9 @@ func (m *Kafka) Unmarshal(dAtA []byte) error {
 			}
 			m.Name = string(dAtA[iNdEx:postIndex])
 			iNdEx = postIndex
-		case 2:
+		case 3:
 			if wireType != 2 {
-				return fmt.Errorf("proto: wrong wireType = %d for field Brokers", wireType)
+				return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType)
 			}
 			var stringLen uint64
 			for shift := uint(0); ; shift += 7 {
@@ -9396,11 +9480,94 @@ func (m *Kafka) Unmarshal(dAtA []byte) error {
 			if postIndex > l {
 				return io.ErrUnexpectedEOF
 			}
-			m.Brokers = append(m.Brokers, string(dAtA[iNdEx:postIndex]))
+			m.Topic = string(dAtA[iNdEx:postIndex])
 			iNdEx = postIndex
-		case 3:
+		case 4:
 			if wireType != 2 {
-				return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType)
+				return fmt.Errorf("proto: wrong wireType = %d for field KafkaConfig", wireType)
+			}
+			var msglen int
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowGenerated
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				msglen |= int(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			if msglen < 0 {
+				return ErrInvalidLengthGenerated
+			}
+			postIndex := iNdEx + msglen
+			if postIndex < 0 {
+				return ErrInvalidLengthGenerated
+			}
+			if postIndex > l {
+				return io.ErrUnexpectedEOF
+			}
+			if err := m.KafkaConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+				return err
+			}
+			iNdEx = postIndex
+		default:
+			iNdEx = preIndex
+			skippy, err := skipGenerated(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthGenerated
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
+func (m *KafkaConfig) Unmarshal(dAtA []byte) error {
+	l := len(dAtA)
+	iNdEx := 0
+	for iNdEx < l {
+		preIndex := iNdEx
+		var wire uint64
+		for shift := uint(0); ; shift += 7 {
+			if shift >= 64 {
+				return ErrIntOverflowGenerated
+			}
+			if iNdEx >= l {
+				return io.ErrUnexpectedEOF
+			}
+			b := dAtA[iNdEx]
+			iNdEx++
+			wire |= uint64(b&0x7F) << shift
+			if b < 0x80 {
+				break
+			}
+		}
+		fieldNum := int32(wire >> 3)
+		wireType := int(wire & 0x7)
+		if wireType == 4 {
+			return fmt.Errorf("proto: KafkaConfig: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: KafkaConfig: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		case 1:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Brokers", wireType)
 			}
 			var stringLen uint64
 			for shift := uint(0); ; shift += 7 {
@@ -9428,9 +9595,9 @@ func (m *Kafka) Unmarshal(dAtA []byte) error {
 			if postIndex > l {
 				return io.ErrUnexpectedEOF
 			}
-			m.Topic = string(dAtA[iNdEx:postIndex])
+			m.Brokers = append(m.Brokers, string(dAtA[iNdEx:postIndex]))
 			iNdEx = postIndex
-		case 4:
+		case 2:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
 			}
@@ -9462,7 +9629,7 @@ func (m *Kafka) Unmarshal(dAtA []byte) error {
 			}
 			m.Version = string(dAtA[iNdEx:postIndex])
 			iNdEx = postIndex
-		case 5:
+		case 3:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field NET", wireType)
 			}
diff --git a/api/v1alpha1/generated.proto b/api/v1alpha1/generated.proto
index 62af5496..ec5edd30 100644
--- a/api/v1alpha1/generated.proto
+++ b/api/v1alpha1/generated.proto
@@ -216,13 +216,17 @@ message Kafka {
   // +kubebuilder:default=default
   optional string name = 1;
 
-  repeated string brokers = 2;
+  optional KafkaConfig kafkaConfig = 4;
 
   optional string topic = 3;
+}
+
+message KafkaConfig {
+  repeated string brokers = 1;
 
-  optional string version = 4;
+  optional string version = 2;
 
-  optional KafkaNET net = 5;
+  optional KafkaNET net = 3;
 }
 
 message KafkaNET {
diff --git a/api/v1alpha1/kafka.go b/api/v1alpha1/kafka.go
index 0655e11f..6eff4446 100644
--- a/api/v1alpha1/kafka.go
+++ b/api/v1alpha1/kafka.go
@@ -5,11 +5,15 @@ type KafkaNET struct {
 	SASL *SASL `json:"sasl,omitempty" protobuf:"bytes,2,opt,name=sasl"`
 }
 
+type KafkaConfig struct {
+	Brokers []string  `json:"brokers,omitempty" protobuf:"bytes,1,rep,name=brokers"`
+	Version string    `json:"version,omitempty" protobuf:"bytes,2,opt,name=version"`
+	NET     *KafkaNET `json:"net,omitempty" protobuf:"bytes,3,opt,name=net"`
+}
+
 type Kafka struct {
 	// +kubebuilder:default=default
-	Name    string    `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"`
-	Brokers []string  `json:"brokers,omitempty" protobuf:"bytes,2,opt,name=brokers"`
-	Topic   string    `json:"topic" protobuf:"bytes,3,opt,name=topic"`
-	Version string    `json:"version,omitempty" protobuf:"bytes,4,opt,name=version"`
-	NET     *KafkaNET `json:"net,omitempty" protobuf:"bytes,5,opt,name=net"`
+	Name        string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"`
+	KafkaConfig `json:",inline" protobuf:"bytes,4,opt,name=kafkaConfig"`
+	Topic       string `json:"topic" protobuf:"bytes,3,opt,name=topic"`
 }
diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go
index d3c832ee..0e1184df 100644
--- a/api/v1alpha1/zz_generated.deepcopy.go
+++ b/api/v1alpha1/zz_generated.deepcopy.go
@@ -482,6 +482,22 @@ func (in *Interface) DeepCopy() *Interface {
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Kafka) DeepCopyInto(out *Kafka) {
+	*out = *in
+	in.KafkaConfig.DeepCopyInto(&out.KafkaConfig)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Kafka.
+func (in *Kafka) DeepCopy() *Kafka {
+	if in == nil {
+		return nil
+	}
+	out := new(Kafka)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *KafkaConfig) DeepCopyInto(out *KafkaConfig) {
 	*out = *in
 	if in.Brokers != nil {
 		in, out := &in.Brokers, &out.Brokers
@@ -495,12 +511,12 @@ func (in *Kafka) DeepCopyInto(out *Kafka) {
 	}
 }
 
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Kafka.
-func (in *Kafka) DeepCopy() *Kafka {
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KafkaConfig.
+func (in *KafkaConfig) DeepCopy() *KafkaConfig {
 	if in == nil {
 		return nil
 	}
-	out := new(Kafka)
+	out := new(KafkaConfig)
 	in.DeepCopyInto(out)
 	return out
 }
diff --git a/runner/sidecar/shared/kafka/kafka.go b/runner/sidecar/shared/kafka/kafka.go
index 597735f3..08f62bd4 100644
--- a/runner/sidecar/shared/kafka/kafka.go
+++ b/runner/sidecar/shared/kafka/kafka.go
@@ -5,16 +5,48 @@ import (
 	"crypto/tls"
 	"crypto/x509"
 	"fmt"
+	sharedutil "github.com/argoproj-labs/argo-dataflow/shared/util"
 	corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
+	"time"
 
 	"github.com/Shopify/sarama"
 	dfv1 "github.com/argoproj-labs/argo-dataflow/api/v1alpha1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
-func NewConfig(ctx context.Context, secretInterface corev1.SecretInterface, k dfv1.Kafka) (*sarama.Config, error) {
+var (
+	cache = make(map[string]sarama.Client) // hash(config) -> client
+	logger = sharedutil.NewLogger()
+)
+
+func GetClient(ctx context.Context, secretInterface corev1.SecretInterface, k dfv1.KafkaConfig, startOffset string) (*sarama.Config, sarama.Client, error) {
+	config, err := newConfig(ctx, secretInterface, k)
+	if err != nil {
+		return nil, nil, err
+	}
+	if startOffset == "First" {
+		config.Consumer.Offsets.Initial = sarama.OffsetOldest
+	}
+	key := sharedutil.MustHash(k)
+	if client, ok := cache[key]; ok {
+		logger.Info("cache hit: reusing existing Kafka client")
+		return config, client, nil
+	}
+	logger.Info("cache miss: creating new Kafka client")
+	client, err := sarama.NewClient(k.Brokers, config)
+	if err != nil {
+		return nil, nil, err
+	}
+	cache[key] = client
+	return config, client, err
+}
+
+func newConfig(ctx context.Context, secretInterface corev1.SecretInterface, k dfv1.KafkaConfig) (*sarama.Config, error) {
 	x := sarama.NewConfig()
 	x.ClientID = dfv1.CtrSidecar
+	x.Consumer.MaxProcessingTime = 10 * time.Second
+	x.Consumer.Offsets.AutoCommit.Enable = false
+	x.Producer.Return.Successes = true
 	if k.Version != "" {
 		v, err := sarama.ParseKafkaVersion(k.Version)
 		if err != nil {
@@ -61,7 +93,7 @@ func NewConfig(ctx context.Context, secretInterface corev1.SecretInterface, k df
 	return x, nil
 }
 
-func getTLSConfig(ctx context.Context, secretInterface corev1.SecretInterface, k dfv1.Kafka) (*tls.Config, error) {
+func getTLSConfig(ctx context.Context, secretInterface corev1.SecretInterface, k dfv1.KafkaConfig) (*tls.Config, error) {
 	t := k.NET.TLS
 	if t == nil {
 		return nil, fmt.Errorf("tls config not found")
diff --git a/runner/sidecar/sink/kafka/kafka.go b/runner/sidecar/sink/kafka/kafka.go
index 914584b4..a9a53d34 100644
--- a/runner/sidecar/sink/kafka/kafka.go
+++ b/runner/sidecar/sink/kafka/kafka.go
@@ -16,12 +16,11 @@ type kafkaSink struct {
 }
 
 func New(ctx context.Context, secretInterface corev1.SecretInterface, x dfv1.Kafka) (sink.Interface, error) {
-	config, err := kafka.NewConfig(ctx, secretInterface, x)
+	_, client, err := kafka.GetClient(ctx, secretInterface, x.KafkaConfig, "")
 	if err != nil {
 		return nil, err
 	}
-	config.Producer.Return.Successes = true
-	producer, err := sarama.NewSyncProducer(x.Brokers, config)
+	producer, err := sarama.NewSyncProducerFromClient(client)
 	if err != nil {
 		return nil, err
 	}
diff --git a/runner/sidecar/source/kafka/kafka.go b/runner/sidecar/source/kafka/kafka.go
index 78c29449..527f0cd7 100644
--- a/runner/sidecar/source/kafka/kafka.go
+++ b/runner/sidecar/source/kafka/kafka.go
@@ -18,10 +18,11 @@ import (
 var logger = sharedutil.NewLogger()
 
 type kafkaSource struct {
-	config        *sarama.Config
-	source        dfv1.KafkaSource
+	client        sarama.Client
 	consumerGroup sarama.ConsumerGroup
-	groupName     string
+	adminClient   sarama.ClusterAdmin
+	groupID       string
+	topic         string
 }
 
 type handler struct {
@@ -46,19 +47,14 @@ func (h handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.Con
 }
 
 func New(ctx context.Context, secretInterface corev1.SecretInterface, clusterName, namespace, pipelineName, stepName, sourceName string, x dfv1.KafkaSource, f source.Func) (source.Interface, error) {
-	config, err := kafka.NewConfig(ctx, secretInterface, x.Kafka)
+	config, client, err := kafka.GetClient(ctx, secretInterface, x.Kafka.KafkaConfig, string(x.StartOffset))
 	if err != nil {
 		return nil, err
 	}
-	if x.StartOffset == "First" {
-		config.Consumer.Offsets.Initial = sarama.OffsetOldest
-	}
-	config.Consumer.MaxProcessingTime = 10 * time.Second
-	config.Consumer.Offsets.AutoCommit.Enable = false
 	// This ID can be up to 255 characters in length, and can include the following characters: a-z, A-Z, 0-9, . (dot), _ (underscore), and - (dash).
 	groupID := sharedutil.MustHash(fmt.Sprintf("%s.%s.%s.%s.sources.%s", clusterName, namespace, pipelineName, stepName, sourceName))
 	logger.Info("Kafka consumer group ID", "groupID", groupID)
-	consumerGroup, err := sarama.NewConsumerGroup(x.Brokers, groupID, config)
+	consumerGroup, err := sarama.NewConsumerGroupFromClient(groupID, client)
 	if err != nil {
 		return nil, err
 	}
@@ -75,52 +71,46 @@ func New(ctx context.Context, secretInterface corev1.SecretInterface, clusterNam
 			}
 		}
 	}, 3*time.Second, 1.2, true, ctx.Done())
+
+	adminClient, err := sarama.NewClusterAdmin(x.Brokers, config)
+	if err != nil {
+		return nil, err
+	}
 	return kafkaSource{
-		config:        config,
-		consumerGroup: consumerGroup,
-		source:        x,
-		groupName:     groupID,
+		client,
+		consumerGroup,
+		adminClient,
+		groupID,
+		x.Topic,
 	}, nil
 }
 
 func (s kafkaSource) Close() error {
-	return s.consumerGroup.Close()
+	if err := s.adminClient.Close(); err != nil {
+		return err
+	}
+	if err := s.consumerGroup.Close(); err != nil {
+		return err
+	}
+	return s.client.Close()
 }
 
 func (s kafkaSource) GetPending(context.Context) (uint64, error) {
-	adminClient, err := sarama.NewClusterAdmin(s.source.Brokers, s.config)
-	if err != nil {
-		return 0, err
-	}
-	defer func() {
-		if err := adminClient.Close(); err != nil {
-			logger.Error(err, "failed to close Kafka admin client")
-		}
-	}()
-	client, err := sarama.NewClient(s.source.Brokers, s.config) // I am not giving any configuration
-	if err != nil {
-		return 0, err
-	}
-	defer func() {
-		if err := client.Close(); err != nil {
-			logger.Error(err, "failed to close Kafka client")
-		}
-	}()
-	partitions, err := client.Partitions(s.source.Topic)
+	partitions, err := s.client.Partitions(s.topic)
 	if err != nil {
 		return 0, fmt.Errorf("failed to get partitions: %w", err)
 	}
 	totalLags := int64(0)
-	rep, err := adminClient.ListConsumerGroupOffsets(s.groupName, map[string][]int32{s.source.Topic: partitions})
+	rep, err := s.adminClient.ListConsumerGroupOffsets(s.groupID, map[string][]int32{s.topic: partitions})
 	if err != nil {
 		return 0, fmt.Errorf("failed to list consumer group offsets: %w", err)
 	}
 	for _, partition := range partitions {
-		partitionOffset, err := client.GetOffset(s.source.Topic, partition, sarama.OffsetNewest)
+		partitionOffset, err := s.client.GetOffset(s.topic, partition, sarama.OffsetNewest)
 		if err != nil {
 			return 0, fmt.Errorf("failed to get topic/partition offsets partition %q: %w", partition, err)
 		}
-		block := rep.GetBlock(s.source.Topic, partition)
+		block := rep.GetBlock(s.topic, partition)
 		x := partitionOffset - block.Offset - 1
 		if x > 0 {
 			totalLags += x


Test patch:
diff --git a/test/stress/test-results.json b/test/stress/test-results.json
index c1573d1d..f77e2e02 100644
--- a/test/stress/test-results.json
+++ b/test/stress/test-results.json
@@ -7,8 +7,10 @@
   "TestHTTPSourceStress/currentContext=docker-desktop,replicas=2,n=10000.tps": 850,
   "TestHTTPSourceStress/currentContext=gke_jesse-sb_us-west2_cluster-2,replicas=1,n=10000.tps": 1650,
   "TestHTTPSourceStress/currentContext=gke_jesse-sb_us-west2_cluster-2,replicas=2,n=10000.tps": 2300,
+  "TestKafkaSinkStress/currentContext=docker-desktop,replicas=1,n=10000.tps": 50,
   "TestKafkaSinkStress/replicas=1.tps": 100,
   "TestKafkaSinkStress/replicas=2.tps": 250,
+  "TestKafkaSourceStress/currentContext=docker-desktop,replicas=1,n=10000.tps": 550,
   "TestKafkaSourceStress/currentContext=gke_jesse-sb_us-west2_cluster-2,replicas=1,n=10000.tps": 1700,
   "TestKafkaSourceStress/currentContext=gke_jesse-sb_us-west2_cluster-2,replicas=2,n=10000.tps": 1550,
   "TestKafkaSourceStress/replicas=1.tps": 100,