From 140627e35417b559d21a42e9ead9fcf19ac4e996 Mon Sep 17 00:00:00 2001 From: SteveRosam Date: Fri, 19 May 2023 12:04:01 +0100 Subject: [PATCH] Add post hog --- mkdocs.yml | 5 +- overrides/main.html | 8 + .../App.Run(CancellationToken,Action).md | 24 + .../api-reference/csharp/App.md | 16 + .../csharp/CodecSettings.CurrentCodec.md | 13 + ...cSettings.SetGlobalCodecType(CodecType).md | 15 + .../api-reference/csharp/CodecSettings.md | 20 + .../api-reference/csharp/CommitMode.md | 23 + .../csharp/EventData.AddTag(string,string).md | 27 + ...numerable_KeyValuePair_string,string__).md | 22 + .../api-reference/csharp/EventData.Clone().md | 14 + ...tData.EventData(string,DateTime,string).md | 23 + ...tData.EventData(string,TimeSpan,string).md | 23 + ...EventData.EventData(string,long,string).md | 23 + .../api-reference/csharp/EventData.Id.md | 13 + .../csharp/EventData.RemoveTag(string).md | 21 + .../api-reference/csharp/EventData.Tags.md | 13 + .../csharp/EventData.Timestamp.md | 13 + .../csharp/EventData.TimestampAsTimeSpan.md | 13 + .../csharp/EventData.TimestampMilliseconds.md | 13 + .../csharp/EventData.TimestampNanoseconds.md | 13 + .../api-reference/csharp/EventData.Value.md | 13 + .../api-reference/csharp/EventData.md | 35 + .../EventDataBuilder.AddTag(string,string).md | 26 + ...numerable_KeyValuePair_string,string__).md | 20 + ...ventDataBuilder.AddValue(string,string).md | 26 + ...tDataBuilder(StreamEventsProducer,long).md | 23 + .../csharp/EventDataBuilder.Publish().md | 10 + .../api-reference/csharp/EventDataBuilder.md | 23 + .../EventDefinition.CustomProperties.md | 14 + .../csharp/EventDefinition.Description.md | 13 + .../csharp/EventDefinition.Id.md | 13 + .../csharp/EventDefinition.Level.md | 13 + .../csharp/EventDefinition.Location.md | 13 + .../csharp/EventDefinition.Name.md | 13 + .../api-reference/csharp/EventDefinition.md | 21 + ...der.AddDefinition(string,string,string).md | 33 + ...mEventsProducer,string,EventDefinition).md | 29 + ...tionBuilder.SetCustomProperties(string).md | 18 + ...tDefinitionBuilder.SetLevel(EventLevel).md | 20 + .../csharp/EventDefinitionBuilder.md | 22 + .../csharp/IRawTopicConsumer.OnDisposed.md | 13 + .../IRawTopicConsumer.OnErrorOccurred.md | 13 + .../IRawTopicConsumer.OnMessageReceived.md | 13 + .../csharp/IRawTopicConsumer.Subscribe().md | 11 + .../api-reference/csharp/IRawTopicConsumer.md | 26 + .../csharp/IRawTopicProducer.OnDisposed.md | 13 + .../IRawTopicProducer.Publish(RawMessage).md | 15 + .../api-reference/csharp/IRawTopicProducer.md | 24 + .../csharp/IStreamConsumer.Events.md | 13 + .../IStreamConsumer.OnPackageReceived.md | 13 + .../csharp/IStreamConsumer.OnStreamClosed.md | 13 + .../csharp/IStreamConsumer.Properties.md | 13 + .../csharp/IStreamConsumer.StreamId.md | 13 + .../csharp/IStreamConsumer.Timeseries.md | 13 + .../api-reference/csharp/IStreamConsumer.md | 23 + .../IStreamProducer.Close(StreamEndType).md | 17 + .../csharp/IStreamProducer.Epoch.md | 13 + .../csharp/IStreamProducer.Events.md | 13 + .../csharp/IStreamProducer.Flush().md | 10 + .../IStreamProducer.OnWriteException.md | 13 + .../csharp/IStreamProducer.Properties.md | 13 + .../csharp/IStreamProducer.StreamId.md | 13 + .../csharp/IStreamProducer.Timeseries.md | 13 + .../api-reference/csharp/IStreamProducer.md | 31 + .../csharp/ITopicConsumer.Commit().md | 10 + .../csharp/ITopicConsumer.OnCommitted.md | 13 + .../csharp/ITopicConsumer.OnCommitting.md | 13 + .../csharp/ITopicConsumer.OnDisposed.md | 13 + .../csharp/ITopicConsumer.OnRevoking.md | 13 + .../csharp/ITopicConsumer.OnStreamReceived.md | 15 + .../csharp/ITopicConsumer.OnStreamsRevoked.md | 13 + .../csharp/ITopicConsumer.Subscribe().md | 11 + .../api-reference/csharp/ITopicConsumer.md | 30 + .../csharp/ITopicProducer.CreateStream().md | 14 + .../ITopicProducer.CreateStream(string).md | 21 + ...eStream(string,Action_IStreamProducer_).md | 27 + .../ITopicProducer.GetStream(string).md | 21 + .../csharp/ITopicProducer.OnDisposed.md | 13 + .../api-reference/csharp/ITopicProducer.md | 27 + ...onfigurationException(string,Exception).md | 23 + .../csharp/InvalidConfigurationException.md | 16 + ...InvalidTokenException(string,Exception).md | 23 + .../csharp/InvalidTokenException.md | 16 + ...tring,string,Nullable_AutoOffsetReset_).md | 33 + ...amingClient.GetRawTopicProducer(string).md | 21 + ...g,string,CommitOptions,AutoOffsetReset).md | 39 + ...treamingClient.GetTopicProducer(string).md | 21 + ...ptions,IDictionary_string,string_,bool).md | 35 + .../csharp/KafkaStreamingClient.md | 23 + ...ring,string,CommitMode,AutoOffsetReset).md | 45 + .../csharp/KafkaStreamingClientExtensions.md | 16 + .../ObservableDictionary_TKey,TValue_.md | 33 + .../ParameterDefinition.CustomProperties.md | 14 + .../csharp/ParameterDefinition.Description.md | 13 + .../csharp/ParameterDefinition.Format.md | 13 + .../csharp/ParameterDefinition.Id.md | 13 + .../csharp/ParameterDefinition.Location.md | 13 + .../ParameterDefinition.MaximumValue.md | 13 + .../ParameterDefinition.MinimumValue.md | 13 + .../csharp/ParameterDefinition.Name.md | 13 + .../csharp/ParameterDefinition.Unit.md | 13 + .../csharp/ParameterDefinition.md | 24 + ...der.AddDefinition(string,string,string).md | 33 + ...iesProducer,string,ParameterDefinition).md | 29 + ...tionBuilder.SetCustomProperties(string).md | 20 + ...eterDefinitionBuilder.SetFormat(string).md | 20 + ...finitionBuilder.SetRange(double,double).md | 26 + ...ameterDefinitionBuilder.SetUnit(string).md | 20 + .../csharp/ParameterDefinitionBuilder.md | 24 + .../csharp/ParameterValue.BinaryValue.md | 13 + .../csharp/ParameterValue.NumericValue.md | 13 + .../csharp/ParameterValue.ParameterId.md | 13 + .../csharp/ParameterValue.StringValue.md | 13 + .../csharp/ParameterValue.Type.md | 13 + .../csharp/ParameterValue.Value.md | 13 + .../api-reference/csharp/ParameterValue.md | 27 + ...perator!(ParameterValue,ParameterValue).md | 27 + ...operator(ParameterValue,ParameterValue).md | 27 + .../csharp/ParameterValueType.md | 35 + ...on(string,string,string,HttpStatusCode).md | 35 + .../api-reference/csharp/QuixApiException.md | 16 + .../csharp/QuixStreamingClient.ApiUrl.md | 13 + .../csharp/QuixStreamingClient.CachePeriod.md | 13 + ...tring,string,Nullable_AutoOffsetReset_).md | 33 + ...amingClient.GetRawTopicProducer(string).md | 21 + ...g,string,CommitOptions,AutoOffsetReset).md | 39 + ...treamingClient.GetTopicProducer(string).md | 21 + ...tionary_string,string_,bool,HttpClient).md | 41 + ...ixStreamingClient.TokenValidationConfig.md | 13 + ...nt.TokenValidationConfiguration.Enabled.md | 13 + ...ationConfiguration.WarnAboutNonPatToken.md | 13 + ...dationConfiguration.WarningBeforeExpiry.md | 13 + ...mingClient.TokenValidationConfiguration.md | 18 + .../csharp/QuixStreamingClient.md | 33 + ...ring,string,CommitMode,AutoOffsetReset).md | 45 + .../csharp/QuixStreamingClientExtensions.md | 16 + .../QuixStreams.Streaming.Configuration.md | 11 + .../QuixStreams.Streaming.Exceptions.md | 9 + ...Streams.Streaming.Models.StreamConsumer.md | 12 + ...Streams.Streaming.Models.StreamProducer.md | 15 + .../csharp/QuixStreams.Streaming.Models.md | 22 + .../csharp/QuixStreams.Streaming.QuixApi.md | 7 + .../csharp/QuixStreams.Streaming.Raw.md | 14 + .../csharp/QuixStreams.Streaming.Utils.md | 13 + .../csharp/QuixStreams.Streaming.md | 25 + ....TryGetWorkspaceIdPrefix(string,string).md | 27 + .../api-reference/csharp/QuixUtils.md | 16 + .../api-reference/csharp/RawMessage.Key.md | 13 + .../csharp/RawMessage.Metadata.md | 13 + .../csharp/RawMessage.RawMessage(byte[]).md | 17 + .../RawMessage.RawMessage(byte[],byte[]).md | 23 + .../api-reference/csharp/RawMessage.Value.md | 13 + .../api-reference/csharp/RawMessage.md | 26 + .../csharp/RawTopicConsumer.OnDisposed.md | 15 + .../RawTopicConsumer.OnErrorOccurred.md | 15 + .../RawTopicConsumer.OnMessageReceived.md | 15 + ...ring,string_,Nullable_AutoOffsetReset_).md | 41 + .../csharp/RawTopicConsumer.Subscribe().md | 13 + .../api-reference/csharp/RawTopicConsumer.md | 30 + .../csharp/RawTopicProducer.OnDisposed.md | 15 + .../RawTopicProducer.Publish(RawMessage).md | 17 + ...tring,string,Dictionary_string,string_).md | 29 + .../api-reference/csharp/RawTopicProducer.md | 28 + .../api-reference/csharp/SaslMechanism.md | 41 + .../csharp/SecurityOptions.Password.md | 13 + .../csharp/SecurityOptions.SaslMechanism.md | 13 + .../SecurityOptions.SecurityOptions().md | 10 + ...ons(string,string,string,SaslMechanism).md | 35 + .../csharp/SecurityOptions.SslCertificates.md | 13 + .../csharp/SecurityOptions.UseSasl.md | 13 + .../csharp/SecurityOptions.UseSsl.md | 13 + .../csharp/SecurityOptions.Username.md | 13 + .../api-reference/csharp/SecurityOptions.md | 26 + ...Exception.StreamClosedException(string).md | 17 + .../csharp/StreamClosedException.md | 16 + .../StreamEventsConsumer.Definitions.md | 13 + .../StreamEventsConsumer.OnDataReceived.md | 13 + ...reamEventsConsumer.OnDefinitionsChanged.md | 14 + .../csharp/StreamEventsConsumer.md | 24 + ...cer.AddDefinition(string,string,string).md | 33 + ...r.AddDefinitions(List_EventDefinition_).md | 17 + ...treamEventsProducer.AddLocation(string).md | 20 + ...amEventsProducer.AddTimestamp(DateTime).md | 22 + ...amEventsProducer.AddTimestamp(TimeSpan).md | 21 + ...Producer.AddTimestampMilliseconds(long).md | 21 + ...sProducer.AddTimestampNanoseconds(long).md | 21 + .../StreamEventsProducer.DefaultLocation.md | 15 + .../StreamEventsProducer.DefaultTags.md | 13 + .../csharp/StreamEventsProducer.Dispose().md | 12 + .../csharp/StreamEventsProducer.Epoch.md | 13 + .../csharp/StreamEventsProducer.Flush().md | 10 + ...StreamEventsProducer.Publish(EventData).md | 17 + ...roducer.Publish(ICollection_EventData_).md | 17 + .../csharp/StreamEventsProducer.md | 35 + .../StreamPropertiesConsumer.Location.md | 13 + .../StreamPropertiesConsumer.Metadata.md | 13 + .../csharp/StreamPropertiesConsumer.Name.md | 13 + .../StreamPropertiesConsumer.OnChanged.md | 13 + .../StreamPropertiesConsumer.Parents.md | 13 + ...treamPropertiesConsumer.TimeOfRecording.md | 13 + .../csharp/StreamPropertiesConsumer.md | 28 + ...eamPropertiesProducer.AddParent(string).md | 17 + .../StreamPropertiesProducer.Dispose().md | 12 + .../StreamPropertiesProducer.Flush().md | 10 + .../StreamPropertiesProducer.FlushInterval.md | 13 + .../StreamPropertiesProducer.Location.md | 14 + .../StreamPropertiesProducer.Metadata.md | 13 + .../csharp/StreamPropertiesProducer.Name.md | 13 + .../StreamPropertiesProducer.Parents.md | 13 + ...PropertiesProducer.RemoveParent(string).md | 17 + ...treamPropertiesProducer.TimeOfRecording.md | 13 + .../csharp/StreamPropertiesProducer.md | 32 + ...TimeseriesBufferConfiguration,string[]).md | 27 + ...meseriesConsumer.CreateBuffer(string[]).md | 21 + .../StreamTimeseriesConsumer.Definitions.md | 13 + ...StreamTimeseriesConsumer.OnDataReceived.md | 14 + ...TimeseriesConsumer.OnDefinitionsChanged.md | 14 + .../StreamTimeseriesConsumer.OnRawReceived.md | 14 + .../csharp/StreamTimeseriesConsumer.md | 30 + ...cer.AddDefinition(string,string,string).md | 33 + ...dDefinitions(List_ParameterDefinition_).md | 17 + ...mTimeseriesProducer.AddLocation(string).md | 21 + .../csharp/StreamTimeseriesProducer.Buffer.md | 13 + ...treamTimeseriesProducer.DefaultLocation.md | 15 + .../StreamTimeseriesProducer.Dispose().md | 12 + .../StreamTimeseriesProducer.Flush().md | 10 + ...eseriesProducer.Publish(TimeseriesData).md | 17 + ...riesProducer.Publish(TimeseriesDataRaw).md | 17 + .../csharp/StreamTimeseriesProducer.md | 30 + .../csharp/TimeseriesBuffer.BufferTimeout.md | 13 + .../csharp/TimeseriesBuffer.CustomTrigger.md | 14 + ...seriesBuffer.CustomTriggerBeforeEnqueue.md | 14 + .../csharp/TimeseriesBuffer.Dispose().md | 12 + .../csharp/TimeseriesBuffer.Filter.md | 13 + .../csharp/TimeseriesBuffer.OnDataReleased.md | 13 + .../csharp/TimeseriesBuffer.OnRawReleased.md | 13 + .../csharp/TimeseriesBuffer.PacketSize.md | 13 + ...TimeseriesBuffer.TimeSpanInMilliseconds.md | 13 + .../TimeseriesBuffer.TimeSpanInNanoseconds.md | 13 + .../api-reference/csharp/TimeseriesBuffer.md | 38 + ...seriesBufferConfiguration.BufferTimeout.md | 15 + ...seriesBufferConfiguration.CustomTrigger.md | 14 + ...onfiguration.CustomTriggerBeforeEnqueue.md | 14 + .../TimeseriesBufferConfiguration.Filter.md | 14 + ...imeseriesBufferConfiguration.PacketSize.md | 15 + ...ferConfiguration.TimeSpanInMilliseconds.md | 17 + ...fferConfiguration.TimeSpanInNanoseconds.md | 16 + .../csharp/TimeseriesBufferConfiguration.md | 22 + .../TimeseriesBufferConsumer.Dispose().md | 12 + .../csharp/TimeseriesBufferConsumer.md | 16 + ...esBufferProducer.AddTimestamp(DateTime).md | 22 + ...esBufferProducer.AddTimestamp(TimeSpan).md | 21 + ...Producer.AddTimestampMilliseconds(long).md | 21 + ...rProducer.AddTimestampNanoseconds(long).md | 21 + .../TimeseriesBufferProducer.DefaultTags.md | 13 + .../TimeseriesBufferProducer.Dispose().md | 12 + .../csharp/TimeseriesBufferProducer.Epoch.md | 13 + .../TimeseriesBufferProducer.Flush().md | 10 + ...sBufferProducer.Publish(TimeseriesData).md | 17 + .../csharp/TimeseriesBufferProducer.md | 27 + .../TimeseriesData.AddTimestamp(DateTime).md | 21 + .../TimeseriesData.AddTimestamp(TimeSpan).md | 21 + ...riesData.AddTimestampMilliseconds(long).md | 21 + ...eriesData.AddTimestampNanoseconds(long).md | 21 + .../csharp/TimeseriesData.Clone(string[]).md | 21 + ...ist_TimeseriesDataTimestamp_,bool,bool).md | 29 + ...a(TimeseriesDataRaw,string[],bool,bool).md | 35 + .../TimeseriesData.TimeseriesData(int).md | 18 + .../csharp/TimeseriesData.Timestamps.md | 13 + .../api-reference/csharp/TimeseriesData.md | 30 + ...seriesDataBuilder.AddTag(string,string).md | 26 + ...numerable_KeyValuePair_string,string__).md | 20 + ...riesDataBuilder.AddValue(string,byte[]).md | 26 + ...riesDataBuilder.AddValue(string,double).md | 26 + ...riesDataBuilder.AddValue(string,string).md | 26 + .../csharp/TimeseriesDataBuilder.Publish().md | 10 + ...TimeseriesData,TimeseriesDataTimestamp).md | 29 + .../csharp/TimeseriesDataBuilder.md | 25 + .../TimeseriesDataRawReadEventArgs.Stream.md | 13 + .../TimeseriesDataRawReadEventArgs.Topic.md | 13 + .../csharp/TimeseriesDataRawReadEventArgs.md | 15 + .../TimeseriesDataReadEventArgs.Stream.md | 13 + .../TimeseriesDataReadEventArgs.Topic.md | 13 + .../csharp/TimeseriesDataReadEventArgs.md | 15 + ...riesDataTimestamp.AddTag(string,string).md | 27 + ...numerable_KeyValuePair_string,string__).md | 22 + ...mestamp.AddValue(string,ParameterValue).md | 27 + ...esDataTimestamp.AddValue(string,byte[]).md | 27 + ...esDataTimestamp.AddValue(string,double).md | 27 + ...esDataTimestamp.AddValue(string,string).md | 27 + .../TimeseriesDataTimestamp.Parameters.md | 13 + ...meseriesDataTimestamp.RemoveTag(string).md | 21 + ...seriesDataTimestamp.RemoveValue(string).md | 21 + .../csharp/TimeseriesDataTimestamp.Tags.md | 13 + .../TimeseriesDataTimestamp.Timestamp.md | 13 + ...seriesDataTimestamp.TimestampAsTimeSpan.md | 13 + ...riesDataTimestamp.TimestampMilliseconds.md | 13 + ...eriesDataTimestamp.TimestampNanoseconds.md | 13 + .../csharp/TimeseriesDataTimestamp.md | 30 + .../csharp/TimeseriesDataTimestampTags.md | 20 + ...imeseriesDataTimestampTags.this[string].md | 20 + .../csharp/TimeseriesDataTimestampValues.md | 16 + .../csharp/TimeseriesDataTimestamps.Count.md | 15 + .../csharp/TimeseriesDataTimestamps.md | 20 + .../TimeseriesDataTimestamps.this[int].md | 20 + .../csharp/TopicConsumer.Commit().md | 12 + .../csharp/TopicConsumer.OnCommitted.md | 15 + .../csharp/TopicConsumer.OnCommitting.md | 15 + .../csharp/TopicConsumer.OnDisposed.md | 15 + .../csharp/TopicConsumer.OnRevoking.md | 15 + .../csharp/TopicConsumer.OnStreamReceived.md | 17 + .../csharp/TopicConsumer.OnStreamsRevoked.md | 15 + .../csharp/TopicConsumer.Subscribe().md | 13 + ...r.TopicConsumer(TelemetryKafkaConsumer).md | 17 + .../api-reference/csharp/TopicConsumer.md | 34 + .../csharp/TopicProducer.CreateStream().md | 16 + .../TopicProducer.CreateStream(string).md | 23 + ...eStream(string,Action_IStreamProducer_).md | 29 + .../csharp/TopicProducer.GetStream(string).md | 23 + .../csharp/TopicProducer.OnDisposed.md | 15 + .../TopicProducer.RemoveStream(string).md | 15 + ...er(Func_string,TelemetryKafkaProducer_).md | 17 + ...ucer(KafkaProducerConfiguration,string).md | 19 + .../api-reference/csharp/TopicProducer.md | 33 + .../api-reference/csharp/index.md | 15 + .../api-reference/python/quixstreams.md | 30156 ++++++++++++++++ temp_dir/client-library/app-management.md | 255 + temp_dir/client-library/connect.md | 93 + .../features/builtin-buffers.md | 15 + .../client-library/features/checkpointing.md | 39 + .../client-library/features/data-frames.md | 31 + .../features/data-serialization.md | 7 + .../features/horizontal-scaling.md | 104 + .../features/message-splitting.md | 13 + .../features/multiple-data-types.md | 9 + .../features/streaming-context.md | 19 + .../client-library/images/Checkpointing1.png | Bin 0 -> 37695 bytes .../client-library/images/Checkpointing2.png | Bin 0 -> 42132 bytes .../client-library/images/Checkpointing3.png | Bin 0 -> 46122 bytes .../client-library/images/Checkpointing4.png | Bin 0 -> 41030 bytes .../client-library/images/Checkpointing5.png | Bin 0 -> 41325 bytes .../client-library/images/Checkpointing6.png | Bin 0 -> 42842 bytes .../images/InMemoryProcessing1.png | Bin 0 -> 26391 bytes .../images/InMemoryProcessing2.png | Bin 0 -> 39290 bytes .../images/LocationProperties.png | Bin 0 -> 40762 bytes .../client-library/images/NameProperty.png | Bin 0 -> 54366 bytes .../images/PlainBrokerMessaging.png | Bin 0 -> 16614 bytes .../client-library/images/QuixBuffering.png | Bin 0 -> 51440 bytes .../client-library/images/QuixCompression.png | Bin 0 -> 15395 bytes .../images/QuixHorizontalScaling1.png | Bin 0 -> 31123 bytes .../images/QuixHorizontalScaling2.png | Bin 0 -> 36369 bytes .../images/QuixHorizontalScaling3.png | Bin 0 -> 31123 bytes .../images/QuixMultipleTypes.png | Bin 0 -> 209580 bytes .../images/QuixStreamsConsumerGroup.png | Bin 0 -> 46142 bytes .../images/QuixStreamsMetadata.png | Bin 0 -> 47302 bytes .../images/QuixStreamsScaling.png | Bin 0 -> 33214 bytes .../images/QuixStreamsSerialization.png | Bin 0 -> 66445 bytes .../images/QuixStreamsSplitting.png | Bin 0 -> 44612 bytes .../images/visualisationdefinition.png | Bin 0 -> 70509 bytes .../visualisationdefinitionrangeexample.png | Bin 0 -> 82439 bytes temp_dir/client-library/introduction.md | 75 + temp_dir/client-library/kafka.md | 93 + temp_dir/client-library/mkdocs.yml | 43 + temp_dir/client-library/process.md | 129 + temp_dir/client-library/publish.md | 1004 + temp_dir/client-library/quickstart.md | 416 + temp_dir/client-library/state-management.md | 151 + temp_dir/client-library/subscribe.md | 881 + temp_dir/client-library/using.md | 312 + temp_dir/client-library/versionmigration.md | 496 + 371 files changed, 40411 insertions(+), 1 deletion(-) create mode 100644 temp_dir/client-library/api-reference/csharp/App.Run(CancellationToken,Action).md create mode 100644 temp_dir/client-library/api-reference/csharp/App.md create mode 100644 temp_dir/client-library/api-reference/csharp/CodecSettings.CurrentCodec.md create mode 100644 temp_dir/client-library/api-reference/csharp/CodecSettings.SetGlobalCodecType(CodecType).md create mode 100644 temp_dir/client-library/api-reference/csharp/CodecSettings.md create mode 100644 temp_dir/client-library/api-reference/csharp/CommitMode.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.AddTag(string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.AddTags(IEnumerable_KeyValuePair_string,string__).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.Clone().md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.EventData(string,DateTime,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.EventData(string,TimeSpan,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.EventData(string,long,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.Id.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.RemoveTag(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.Tags.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.Timestamp.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.TimestampAsTimeSpan.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.TimestampMilliseconds.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.TimestampNanoseconds.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.Value.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventData.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddTag(string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddValue(string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDataBuilder.EventDataBuilder(StreamEventsProducer,long).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDataBuilder.Publish().md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDataBuilder.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinition.CustomProperties.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinition.Description.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinition.Id.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinition.Level.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinition.Location.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinition.Name.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinition.md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.AddDefinition(string,string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.EventDefinitionBuilder(StreamEventsProducer,string,EventDefinition).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.SetCustomProperties(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.SetLevel(EventLevel).md create mode 100644 temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.md create mode 100644 temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnDisposed.md create mode 100644 temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnErrorOccurred.md create mode 100644 temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnMessageReceived.md create mode 100644 temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.Subscribe().md create mode 100644 temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/IRawTopicProducer.OnDisposed.md create mode 100644 temp_dir/client-library/api-reference/csharp/IRawTopicProducer.Publish(RawMessage).md create mode 100644 temp_dir/client-library/api-reference/csharp/IRawTopicProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamConsumer.Events.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamConsumer.OnPackageReceived.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamConsumer.OnStreamClosed.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamConsumer.Properties.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamConsumer.StreamId.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamConsumer.Timeseries.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamProducer.Close(StreamEndType).md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamProducer.Epoch.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamProducer.Events.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamProducer.Flush().md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamProducer.OnWriteException.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamProducer.Properties.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamProducer.StreamId.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamProducer.Timeseries.md create mode 100644 temp_dir/client-library/api-reference/csharp/IStreamProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicConsumer.Commit().md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnCommitted.md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnCommitting.md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnDisposed.md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnRevoking.md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnStreamReceived.md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnStreamsRevoked.md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicConsumer.Subscribe().md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicProducer.CreateStream().md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicProducer.CreateStream(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicProducer.GetStream(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicProducer.OnDisposed.md create mode 100644 temp_dir/client-library/api-reference/csharp/ITopicProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/InvalidConfigurationException.InvalidConfigurationException(string,Exception).md create mode 100644 temp_dir/client-library/api-reference/csharp/InvalidConfigurationException.md create mode 100644 temp_dir/client-library/api-reference/csharp/InvalidTokenException.InvalidTokenException(string,Exception).md create mode 100644 temp_dir/client-library/api-reference/csharp/InvalidTokenException.md create mode 100644 temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md create mode 100644 temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetRawTopicProducer(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md create mode 100644 temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetTopicProducer(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.KafkaStreamingClient(string,SecurityOptions,IDictionary_string,string_,bool).md create mode 100644 temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.md create mode 100644 temp_dir/client-library/api-reference/csharp/KafkaStreamingClientExtensions.GetTopicConsumer(thisKafkaStreamingClient,string,string,CommitMode,AutoOffsetReset).md create mode 100644 temp_dir/client-library/api-reference/csharp/KafkaStreamingClientExtensions.md create mode 100644 temp_dir/client-library/api-reference/csharp/ObservableDictionary_TKey,TValue_.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.CustomProperties.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.Description.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.Format.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.Id.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.Location.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.MaximumValue.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.MinimumValue.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.Name.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.Unit.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinition.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.AddDefinition(string,string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.ParameterDefinitionBuilder(StreamTimeseriesProducer,string,ParameterDefinition).md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetCustomProperties(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetFormat(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetRange(double,double).md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetUnit(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValue.BinaryValue.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValue.NumericValue.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValue.ParameterId.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValue.StringValue.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValue.Type.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValue.Value.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValue.md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValue.operator!(ParameterValue,ParameterValue).md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValue.operator(ParameterValue,ParameterValue).md create mode 100644 temp_dir/client-library/api-reference/csharp/ParameterValueType.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixApiException.QuixApiException(string,string,string,HttpStatusCode).md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixApiException.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.ApiUrl.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.CachePeriod.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetRawTopicProducer(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetTopicProducer(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.QuixStreamingClient(string,bool,IDictionary_string,string_,bool,HttpClient).md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfig.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.Enabled.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.WarnAboutNonPatToken.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.WarningBeforeExpiry.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClient.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClientExtensions.GetTopicConsumer(thisQuixStreamingClient,string,string,CommitMode,AutoOffsetReset).md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreamingClientExtensions.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Configuration.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Exceptions.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.StreamConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.StreamProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.QuixApi.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Raw.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Utils.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixUtils.TryGetWorkspaceIdPrefix(string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/QuixUtils.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawMessage.Key.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawMessage.Metadata.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawMessage.RawMessage(byte[]).md create mode 100644 temp_dir/client-library/api-reference/csharp/RawMessage.RawMessage(byte[],byte[]).md create mode 100644 temp_dir/client-library/api-reference/csharp/RawMessage.Value.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawMessage.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnDisposed.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnErrorOccurred.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnMessageReceived.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicConsumer.RawTopicConsumer(string,string,string,Dictionary_string,string_,Nullable_AutoOffsetReset_).md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicConsumer.Subscribe().md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicProducer.OnDisposed.md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicProducer.Publish(RawMessage).md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicProducer.RawTopicProducer(string,string,Dictionary_string,string_).md create mode 100644 temp_dir/client-library/api-reference/csharp/RawTopicProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/SaslMechanism.md create mode 100644 temp_dir/client-library/api-reference/csharp/SecurityOptions.Password.md create mode 100644 temp_dir/client-library/api-reference/csharp/SecurityOptions.SaslMechanism.md create mode 100644 temp_dir/client-library/api-reference/csharp/SecurityOptions.SecurityOptions().md create mode 100644 temp_dir/client-library/api-reference/csharp/SecurityOptions.SecurityOptions(string,string,string,SaslMechanism).md create mode 100644 temp_dir/client-library/api-reference/csharp/SecurityOptions.SslCertificates.md create mode 100644 temp_dir/client-library/api-reference/csharp/SecurityOptions.UseSasl.md create mode 100644 temp_dir/client-library/api-reference/csharp/SecurityOptions.UseSsl.md create mode 100644 temp_dir/client-library/api-reference/csharp/SecurityOptions.Username.md create mode 100644 temp_dir/client-library/api-reference/csharp/SecurityOptions.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamClosedException.StreamClosedException(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamClosedException.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.Definitions.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.OnDataReceived.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.OnDefinitionsChanged.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddDefinition(string,string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddDefinitions(List_EventDefinition_).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddLocation(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestamp(DateTime).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestamp(TimeSpan).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestampMilliseconds(long).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestampNanoseconds(long).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.DefaultLocation.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.DefaultTags.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Dispose().md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Epoch.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Flush().md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Publish(EventData).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Publish(ICollection_EventData_).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamEventsProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Location.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Metadata.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Name.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.OnChanged.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Parents.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.TimeOfRecording.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.AddParent(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Dispose().md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Flush().md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.FlushInterval.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Location.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Metadata.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Name.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Parents.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.RemoveParent(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.TimeOfRecording.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.CreateBuffer(TimeseriesBufferConfiguration,string[]).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.CreateBuffer(string[]).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.Definitions.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnDataReceived.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnDefinitionsChanged.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnRawReceived.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddDefinition(string,string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddDefinitions(List_ParameterDefinition_).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddLocation(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Buffer.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.DefaultLocation.md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Dispose().md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Flush().md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Publish(TimeseriesData).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Publish(TimeseriesDataRaw).md create mode 100644 temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.BufferTimeout.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.CustomTrigger.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.CustomTriggerBeforeEnqueue.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.Dispose().md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.Filter.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.OnDataReleased.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.OnRawReleased.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.PacketSize.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.TimeSpanInMilliseconds.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.TimeSpanInNanoseconds.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.BufferTimeout.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.CustomTrigger.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.CustomTriggerBeforeEnqueue.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.Filter.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.PacketSize.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.TimeSpanInMilliseconds.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.TimeSpanInNanoseconds.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConsumer.Dispose().md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestamp(DateTime).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestamp(TimeSpan).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestampMilliseconds(long).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestampNanoseconds(long).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.DefaultTags.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Dispose().md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Epoch.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Flush().md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Publish(TimeseriesData).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestamp(DateTime).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestamp(TimeSpan).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestampMilliseconds(long).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestampNanoseconds(long).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.Clone(string[]).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(List_TimeseriesDataTimestamp_,bool,bool).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(TimeseriesDataRaw,string[],bool,bool).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(int).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.Timestamps.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesData.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddTag(string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,byte[]).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,double).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.Publish().md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.TimeseriesDataBuilder(TimeseriesBufferProducer,TimeseriesData,TimeseriesDataTimestamp).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.Stream.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.Topic.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.Stream.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.Topic.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddTag(string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddTags(IEnumerable_KeyValuePair_string,string__).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,ParameterValue).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,byte[]).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,double).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Parameters.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.RemoveTag(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.RemoveValue(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Tags.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Timestamp.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampAsTimeSpan.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampMilliseconds.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampNanoseconds.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampTags.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampTags.this[string].md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampValues.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.Count.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.md create mode 100644 temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.this[int].md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.Commit().md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.OnCommitted.md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.OnCommitting.md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.OnDisposed.md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.OnRevoking.md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.OnStreamReceived.md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.OnStreamsRevoked.md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.Subscribe().md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.TopicConsumer(TelemetryKafkaConsumer).md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicConsumer.md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicProducer.CreateStream().md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicProducer.CreateStream(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicProducer.GetStream(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicProducer.OnDisposed.md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicProducer.RemoveStream(string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicProducer.TopicProducer(Func_string,TelemetryKafkaProducer_).md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicProducer.TopicProducer(KafkaProducerConfiguration,string).md create mode 100644 temp_dir/client-library/api-reference/csharp/TopicProducer.md create mode 100644 temp_dir/client-library/api-reference/csharp/index.md create mode 100644 temp_dir/client-library/api-reference/python/quixstreams.md create mode 100644 temp_dir/client-library/app-management.md create mode 100644 temp_dir/client-library/connect.md create mode 100644 temp_dir/client-library/features/builtin-buffers.md create mode 100644 temp_dir/client-library/features/checkpointing.md create mode 100644 temp_dir/client-library/features/data-frames.md create mode 100644 temp_dir/client-library/features/data-serialization.md create mode 100644 temp_dir/client-library/features/horizontal-scaling.md create mode 100644 temp_dir/client-library/features/message-splitting.md create mode 100644 temp_dir/client-library/features/multiple-data-types.md create mode 100644 temp_dir/client-library/features/streaming-context.md create mode 100644 temp_dir/client-library/images/Checkpointing1.png create mode 100644 temp_dir/client-library/images/Checkpointing2.png create mode 100644 temp_dir/client-library/images/Checkpointing3.png create mode 100644 temp_dir/client-library/images/Checkpointing4.png create mode 100644 temp_dir/client-library/images/Checkpointing5.png create mode 100644 temp_dir/client-library/images/Checkpointing6.png create mode 100644 temp_dir/client-library/images/InMemoryProcessing1.png create mode 100644 temp_dir/client-library/images/InMemoryProcessing2.png create mode 100644 temp_dir/client-library/images/LocationProperties.png create mode 100644 temp_dir/client-library/images/NameProperty.png create mode 100644 temp_dir/client-library/images/PlainBrokerMessaging.png create mode 100644 temp_dir/client-library/images/QuixBuffering.png create mode 100644 temp_dir/client-library/images/QuixCompression.png create mode 100644 temp_dir/client-library/images/QuixHorizontalScaling1.png create mode 100644 temp_dir/client-library/images/QuixHorizontalScaling2.png create mode 100644 temp_dir/client-library/images/QuixHorizontalScaling3.png create mode 100644 temp_dir/client-library/images/QuixMultipleTypes.png create mode 100644 temp_dir/client-library/images/QuixStreamsConsumerGroup.png create mode 100644 temp_dir/client-library/images/QuixStreamsMetadata.png create mode 100644 temp_dir/client-library/images/QuixStreamsScaling.png create mode 100644 temp_dir/client-library/images/QuixStreamsSerialization.png create mode 100644 temp_dir/client-library/images/QuixStreamsSplitting.png create mode 100644 temp_dir/client-library/images/visualisationdefinition.png create mode 100644 temp_dir/client-library/images/visualisationdefinitionrangeexample.png create mode 100644 temp_dir/client-library/introduction.md create mode 100644 temp_dir/client-library/kafka.md create mode 100644 temp_dir/client-library/mkdocs.yml create mode 100644 temp_dir/client-library/process.md create mode 100644 temp_dir/client-library/publish.md create mode 100644 temp_dir/client-library/quickstart.md create mode 100644 temp_dir/client-library/state-management.md create mode 100644 temp_dir/client-library/subscribe.md create mode 100644 temp_dir/client-library/using.md create mode 100644 temp_dir/client-library/versionmigration.md diff --git a/mkdocs.yml b/mkdocs.yml index 134f2a44..7394315b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -190,7 +190,10 @@ extra: link: 'https://www.youtube.com/channel/UCrijXvbQg67m9-le28c7rPA' analytics: provider: google-tag-manager - property: GTM-55L66N3 #UA-173360929-3 ignored, using GTM instead of universal analytics + property: GTM-55L66N3 + posthog: + host: https://eu.posthog.com + key: phc_UyQcafs2J7OUQEwJrmejeb0vCIdA9i9vYz66suPshix hotjar: id: 2437577 diff --git a/overrides/main.html b/overrides/main.html index 70dab541..dd5ccc41 100644 --- a/overrides/main.html +++ b/overrides/main.html @@ -8,6 +8,14 @@ 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','{{ config.extra.analytics.property }}'); + + + + + {{ super }} {% endblock %} diff --git a/temp_dir/client-library/api-reference/csharp/App.Run(CancellationToken,Action).md b/temp_dir/client-library/api-reference/csharp/App.Run(CancellationToken,Action).md new file mode 100644 index 00000000..94fcbd6f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/App.Run(CancellationToken,Action).md @@ -0,0 +1,24 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[App](App.md 'QuixStreams.Streaming.App') + +## App.Run(CancellationToken, Action) Method + +Helper method to handle default streaming behaviors and handle automatic resource cleanup on shutdown +It also ensures topic consumers defined at the time of invocation are subscribed to receive messages. + +```csharp +public static void Run(System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken), System.Action beforeShutdown=null); +``` +#### Parameters + + + +`cancellationToken` [System.Threading.CancellationToken](https://docs.microsoft.com/en-us/dotnet/api/System.Threading.CancellationToken 'System.Threading.CancellationToken') + +The cancellation token to abort. Use when you wish to manually stop streaming for other reason that shutdown. + + + +`beforeShutdown` [System.Action](https://docs.microsoft.com/en-us/dotnet/api/System.Action 'System.Action') + +The callback to invoke before shutting down \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/App.md b/temp_dir/client-library/api-reference/csharp/App.md new file mode 100644 index 00000000..9af39bde --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/App.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## App Class + +Provides utilities to handle default streaming behaviors and automatic resource cleanup on shutdown. + +```csharp +public static class App +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 App + +| Methods | | +| :--- | :--- | +| [Run(CancellationToken, Action)](App.Run(CancellationToken,Action).md 'QuixStreams.Streaming.App.Run(System.Threading.CancellationToken, System.Action)') | Helper method to handle default streaming behaviors and handle automatic resource cleanup on shutdown
It also ensures topic consumers defined at the time of invocation are subscribed to receive messages. | diff --git a/temp_dir/client-library/api-reference/csharp/CodecSettings.CurrentCodec.md b/temp_dir/client-library/api-reference/csharp/CodecSettings.CurrentCodec.md new file mode 100644 index 00000000..a7db95bc --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/CodecSettings.CurrentCodec.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils').[CodecSettings](CodecSettings.md 'QuixStreams.Streaming.Utils.CodecSettings') + +## CodecSettings.CurrentCodec Field + +The currently configured codec + +```csharp +public static CodecType CurrentCodec; +``` + +#### Field Value +[QuixStreams.Telemetry.Models.CodecType](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.CodecType 'QuixStreams.Telemetry.Models.CodecType') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/CodecSettings.SetGlobalCodecType(CodecType).md b/temp_dir/client-library/api-reference/csharp/CodecSettings.SetGlobalCodecType(CodecType).md new file mode 100644 index 00000000..48e7da17 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/CodecSettings.SetGlobalCodecType(CodecType).md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils').[CodecSettings](CodecSettings.md 'QuixStreams.Streaming.Utils.CodecSettings') + +## CodecSettings.SetGlobalCodecType(CodecType) Method + +Sets the codec type to be used by producers and transfer package value serialization + +```csharp +public static void SetGlobalCodecType(QuixStreams.Telemetry.Models.CodecType codecType); +``` +#### Parameters + + + +`codecType` [QuixStreams.Telemetry.Models.CodecType](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.CodecType 'QuixStreams.Telemetry.Models.CodecType') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/CodecSettings.md b/temp_dir/client-library/api-reference/csharp/CodecSettings.md new file mode 100644 index 00000000..c2443bc5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/CodecSettings.md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils') + +## CodecSettings Class + +Global Codec settings for streams. + +```csharp +public static class CodecSettings +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 CodecSettings + +| Fields | | +| :--- | :--- | +| [CurrentCodec](CodecSettings.CurrentCodec.md 'QuixStreams.Streaming.Utils.CodecSettings.CurrentCodec') | The currently configured codec | + +| Methods | | +| :--- | :--- | +| [SetGlobalCodecType(CodecType)](CodecSettings.SetGlobalCodecType(CodecType).md 'QuixStreams.Streaming.Utils.CodecSettings.SetGlobalCodecType(QuixStreams.Telemetry.Models.CodecType)') | Sets the codec type to be used by producers and transfer package value serialization | diff --git a/temp_dir/client-library/api-reference/csharp/CommitMode.md b/temp_dir/client-library/api-reference/csharp/CommitMode.md new file mode 100644 index 00000000..b7696c14 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/CommitMode.md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## CommitMode Enum + +The mode for committing packages + +```csharp +public enum CommitMode +``` +### Fields + + + +`Automatic` 0 + +The default automatic commit strategy + + + +`Manual` 1 + +Automatic commit is disabled \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.AddTag(string,string).md b/temp_dir/client-library/api-reference/csharp/EventData.AddTag(string,string).md new file mode 100644 index 00000000..32b962cd --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.AddTag(string,string).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.AddTag(string, string) Method + +Add a new Tag to the event + +```csharp +public QuixStreams.Streaming.Models.EventData AddTag(string tagId, string tagValue); +``` +#### Parameters + + + +`tagId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag name + + + +`tagValue` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag value + +#### Returns +[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.AddTags(IEnumerable_KeyValuePair_string,string__).md b/temp_dir/client-library/api-reference/csharp/EventData.AddTags(IEnumerable_KeyValuePair_string,string__).md new file mode 100644 index 00000000..4292675d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.AddTags(IEnumerable_KeyValuePair_string,string__).md @@ -0,0 +1,22 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.AddTags(IEnumerable>) Method + +Copies the tags from the specified dictionary. +Conflicting tags will be overwritten + +```csharp +public QuixStreams.Streaming.Models.EventData AddTags(System.Collections.Generic.IEnumerable> tags); +``` +#### Parameters + + + +`tags` [System.Collections.Generic.IEnumerable<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1') + +The tags to copy + +#### Returns +[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.Clone().md b/temp_dir/client-library/api-reference/csharp/EventData.Clone().md new file mode 100644 index 00000000..dc05e6c1 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.Clone().md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.Clone() Method + +Clones the [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +```csharp +public QuixStreams.Streaming.Models.EventData Clone(); +``` + +#### Returns +[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') +Cloned data \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.EventData(string,DateTime,string).md b/temp_dir/client-library/api-reference/csharp/EventData.EventData(string,DateTime,string).md new file mode 100644 index 00000000..50f3f857 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.EventData(string,DateTime,string).md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData(string, DateTime, string) Constructor + +Create a new empty Event Data instance + +```csharp +public EventData(string eventId, System.DateTime timestamp, string eventValue); +``` +#### Parameters + + + +`eventId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + + + +`timestamp` [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') + + + +`eventValue` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.EventData(string,TimeSpan,string).md b/temp_dir/client-library/api-reference/csharp/EventData.EventData(string,TimeSpan,string).md new file mode 100644 index 00000000..c3c30b7c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.EventData(string,TimeSpan,string).md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData(string, TimeSpan, string) Constructor + +Create a new empty Event Data instance + +```csharp +public EventData(string eventId, System.TimeSpan timestamp, string eventValue); +``` +#### Parameters + + + +`eventId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + + + +`timestamp` [System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') + + + +`eventValue` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.EventData(string,long,string).md b/temp_dir/client-library/api-reference/csharp/EventData.EventData(string,long,string).md new file mode 100644 index 00000000..bd5f1a45 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.EventData(string,long,string).md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData(string, long, string) Constructor + +Create a new empty Event Data instance + +```csharp +public EventData(string eventId, long timestampNanoseconds, string eventValue); +``` +#### Parameters + + + +`eventId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + + + +`timestampNanoseconds` [System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') + + + +`eventValue` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.Id.md b/temp_dir/client-library/api-reference/csharp/EventData.Id.md new file mode 100644 index 00000000..29b00cc0 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.Id.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.Id Property + +The globally unique identifier of the event + +```csharp +public string Id { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.RemoveTag(string).md b/temp_dir/client-library/api-reference/csharp/EventData.RemoveTag(string).md new file mode 100644 index 00000000..3796703e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.RemoveTag(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.RemoveTag(string) Method + +Remove a Tag from the event + +```csharp +public QuixStreams.Streaming.Models.EventData RemoveTag(string tagId); +``` +#### Parameters + + + +`tagId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag name + +#### Returns +[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.Tags.md b/temp_dir/client-library/api-reference/csharp/EventData.Tags.md new file mode 100644 index 00000000..9e9c1839 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.Tags.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.Tags Property + +Tags for the timestamp. If key is not found return null + +```csharp +public System.Collections.Generic.IDictionary Tags { get; set; } +``` + +#### Property Value +[System.Collections.Generic.IDictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.Timestamp.md b/temp_dir/client-library/api-reference/csharp/EventData.Timestamp.md new file mode 100644 index 00000000..17b7ae7c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.Timestamp.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.Timestamp Property + +Gets the timestamp in [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') format + +```csharp +public System.DateTime Timestamp { get; } +``` + +#### Property Value +[System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.TimestampAsTimeSpan.md b/temp_dir/client-library/api-reference/csharp/EventData.TimestampAsTimeSpan.md new file mode 100644 index 00000000..679658bd --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.TimestampAsTimeSpan.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.TimestampAsTimeSpan Property + +Gets the timestamp in [System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') format + +```csharp +public System.TimeSpan TimestampAsTimeSpan { get; } +``` + +#### Property Value +[System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.TimestampMilliseconds.md b/temp_dir/client-library/api-reference/csharp/EventData.TimestampMilliseconds.md new file mode 100644 index 00000000..15657187 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.TimestampMilliseconds.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.TimestampMilliseconds Property + +Gets the timestamp in milliseconds + +```csharp +public long TimestampMilliseconds { get; } +``` + +#### Property Value +[System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.TimestampNanoseconds.md b/temp_dir/client-library/api-reference/csharp/EventData.TimestampNanoseconds.md new file mode 100644 index 00000000..aa0c69df --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.TimestampNanoseconds.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.TimestampNanoseconds Property + +Gets the timestamp in nanoseconds + +```csharp +public long TimestampNanoseconds { get; set; } +``` + +#### Property Value +[System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.Value.md b/temp_dir/client-library/api-reference/csharp/EventData.Value.md new file mode 100644 index 00000000..9906245b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.Value.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +## EventData.Value Property + +The value of the event + +```csharp +public string Value { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventData.md b/temp_dir/client-library/api-reference/csharp/EventData.md new file mode 100644 index 00000000..a80e555b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventData.md @@ -0,0 +1,35 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## EventData Class + +Represents a single point in time with event value and tags attached to it + +```csharp +public class EventData +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 EventData + +| Constructors | | +| :--- | :--- | +| [EventData(string, DateTime, string)](EventData.EventData(string,DateTime,string).md 'QuixStreams.Streaming.Models.EventData.EventData(string, System.DateTime, string)') | Create a new empty Event Data instance | +| [EventData(string, TimeSpan, string)](EventData.EventData(string,TimeSpan,string).md 'QuixStreams.Streaming.Models.EventData.EventData(string, System.TimeSpan, string)') | Create a new empty Event Data instance | +| [EventData(string, long, string)](EventData.EventData(string,long,string).md 'QuixStreams.Streaming.Models.EventData.EventData(string, long, string)') | Create a new empty Event Data instance | + +| Properties | | +| :--- | :--- | +| [Id](EventData.Id.md 'QuixStreams.Streaming.Models.EventData.Id') | The globally unique identifier of the event | +| [Tags](EventData.Tags.md 'QuixStreams.Streaming.Models.EventData.Tags') | Tags for the timestamp. If key is not found return null | +| [Timestamp](EventData.Timestamp.md 'QuixStreams.Streaming.Models.EventData.Timestamp') | Gets the timestamp in [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') format | +| [TimestampAsTimeSpan](EventData.TimestampAsTimeSpan.md 'QuixStreams.Streaming.Models.EventData.TimestampAsTimeSpan') | Gets the timestamp in [System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') format | +| [TimestampMilliseconds](EventData.TimestampMilliseconds.md 'QuixStreams.Streaming.Models.EventData.TimestampMilliseconds') | Gets the timestamp in milliseconds | +| [TimestampNanoseconds](EventData.TimestampNanoseconds.md 'QuixStreams.Streaming.Models.EventData.TimestampNanoseconds') | Gets the timestamp in nanoseconds | +| [Value](EventData.Value.md 'QuixStreams.Streaming.Models.EventData.Value') | The value of the event | + +| Methods | | +| :--- | :--- | +| [AddTag(string, string)](EventData.AddTag(string,string).md 'QuixStreams.Streaming.Models.EventData.AddTag(string, string)') | Add a new Tag to the event | +| [AddTags(IEnumerable<KeyValuePair<string,string>>)](EventData.AddTags(IEnumerable_KeyValuePair_string,string__).md 'QuixStreams.Streaming.Models.EventData.AddTags(System.Collections.Generic.IEnumerable>)') | Copies the tags from the specified dictionary.
Conflicting tags will be overwritten | +| [Clone()](EventData.Clone().md 'QuixStreams.Streaming.Models.EventData.Clone()') | Clones the [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') | +| [RemoveTag(string)](EventData.RemoveTag(string).md 'QuixStreams.Streaming.Models.EventData.RemoveTag(string)') | Remove a Tag from the event | diff --git a/temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddTag(string,string).md b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddTag(string,string).md new file mode 100644 index 00000000..378ed441 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddTag(string,string).md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') + +## EventDataBuilder.AddTag(string, string) Method + +Adds a tag to the event values + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder AddTag(string tagId, string value); +``` +#### Parameters + + + +`tagId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag Id + + + +`value` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag value + +#### Returns +[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md new file mode 100644 index 00000000..acdb34e9 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') + +## EventDataBuilder.AddTags(IEnumerable>) Method + +Adds tags to the event values. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder AddTags(System.Collections.Generic.IEnumerable> tagsValues); +``` +#### Parameters + + + +`tagsValues` [System.Collections.Generic.IEnumerable<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1') + +Tags values. + +#### Returns +[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddValue(string,string).md b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddValue(string,string).md new file mode 100644 index 00000000..8dbbb44f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.AddValue(string,string).md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') + +## EventDataBuilder.AddValue(string, string) Method + +Adds new event value at the time the builder is created for + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder AddValue(string eventId, string value); +``` +#### Parameters + + + +`eventId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Event Id + + + +`value` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Value of the event + +#### Returns +[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDataBuilder.EventDataBuilder(StreamEventsProducer,long).md b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.EventDataBuilder(StreamEventsProducer,long).md new file mode 100644 index 00000000..09ad897b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.EventDataBuilder(StreamEventsProducer,long).md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') + +## EventDataBuilder(StreamEventsProducer, long) Constructor + +Initializes a new instance of [EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') + +```csharp +public EventDataBuilder(QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer streamEventsProducer, long timestampNanoseconds); +``` +#### Parameters + + + +`streamEventsProducer` [StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +Events producer owner + + + +`timestampNanoseconds` [System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') + +Timestamp assigned to the Events created by the builder \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDataBuilder.Publish().md b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.Publish().md new file mode 100644 index 00000000..5ff724b3 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.Publish().md @@ -0,0 +1,10 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') + +## EventDataBuilder.Publish() Method + +Publish the events + +```csharp +public void Publish(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDataBuilder.md b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.md new file mode 100644 index 00000000..fdc5df16 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDataBuilder.md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') + +## EventDataBuilder Class + +Builder for creating [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') packages within the [StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +```csharp +public class EventDataBuilder +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 EventDataBuilder + +| Constructors | | +| :--- | :--- | +| [EventDataBuilder(StreamEventsProducer, long)](EventDataBuilder.EventDataBuilder(StreamEventsProducer,long).md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder.EventDataBuilder(QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer, long)') | Initializes a new instance of [EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') | + +| Methods | | +| :--- | :--- | +| [AddTag(string, string)](EventDataBuilder.AddTag(string,string).md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder.AddTag(string, string)') | Adds a tag to the event values | +| [AddTags(IEnumerable<KeyValuePair<string,string>>)](EventDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder.AddTags(System.Collections.Generic.IEnumerable>)') | Adds tags to the event values. | +| [AddValue(string, string)](EventDataBuilder.AddValue(string,string).md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder.AddValue(string, string)') | Adds new event value at the time the builder is created for | +| [Publish()](EventDataBuilder.Publish().md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder.Publish()') | Publish the events | diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinition.CustomProperties.md b/temp_dir/client-library/api-reference/csharp/EventDefinition.CustomProperties.md new file mode 100644 index 00000000..35f559a9 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinition.CustomProperties.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventDefinition](EventDefinition.md 'QuixStreams.Streaming.Models.EventDefinition') + +## EventDefinition.CustomProperties Property + +Gets the optional field for any custom properties that do not exist on the event. +For example this could be a json string, describing all possible event values + +```csharp +public string CustomProperties { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinition.Description.md b/temp_dir/client-library/api-reference/csharp/EventDefinition.Description.md new file mode 100644 index 00000000..a7db54e4 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinition.Description.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventDefinition](EventDefinition.md 'QuixStreams.Streaming.Models.EventDefinition') + +## EventDefinition.Description Property + +Gets the description of the event + +```csharp +public string Description { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinition.Id.md b/temp_dir/client-library/api-reference/csharp/EventDefinition.Id.md new file mode 100644 index 00000000..a7e46572 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinition.Id.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventDefinition](EventDefinition.md 'QuixStreams.Streaming.Models.EventDefinition') + +## EventDefinition.Id Property + +Gets the globally unique identifier of the event. + +```csharp +public string Id { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinition.Level.md b/temp_dir/client-library/api-reference/csharp/EventDefinition.Level.md new file mode 100644 index 00000000..9eb23b84 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinition.Level.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventDefinition](EventDefinition.md 'QuixStreams.Streaming.Models.EventDefinition') + +## EventDefinition.Level Property + +Gets the level of the event. Defaults to [QuixStreams.Telemetry.Models.EventLevel.Information](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventLevel.Information 'QuixStreams.Telemetry.Models.EventLevel.Information') + +```csharp +public QuixStreams.Telemetry.Models.EventLevel Level { get; set; } +``` + +#### Property Value +[QuixStreams.Telemetry.Models.EventLevel](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventLevel 'QuixStreams.Telemetry.Models.EventLevel') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinition.Location.md b/temp_dir/client-library/api-reference/csharp/EventDefinition.Location.md new file mode 100644 index 00000000..d65171a9 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinition.Location.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventDefinition](EventDefinition.md 'QuixStreams.Streaming.Models.EventDefinition') + +## EventDefinition.Location Property + +Gets the location of the event within the Event hierarchy. Example: "/", "car/chassis/suspension". + +```csharp +public string Location { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinition.Name.md b/temp_dir/client-library/api-reference/csharp/EventDefinition.Name.md new file mode 100644 index 00000000..ede1606c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinition.Name.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[EventDefinition](EventDefinition.md 'QuixStreams.Streaming.Models.EventDefinition') + +## EventDefinition.Name Property + +Gets the display name of the event + +```csharp +public string Name { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinition.md b/temp_dir/client-library/api-reference/csharp/EventDefinition.md new file mode 100644 index 00000000..353e2c76 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinition.md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## EventDefinition Class + +Describes additional context for the event + +```csharp +public class EventDefinition +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 EventDefinition + +| Properties | | +| :--- | :--- | +| [CustomProperties](EventDefinition.CustomProperties.md 'QuixStreams.Streaming.Models.EventDefinition.CustomProperties') | Gets the optional field for any custom properties that do not exist on the event.
For example this could be a json string, describing all possible event values | +| [Description](EventDefinition.Description.md 'QuixStreams.Streaming.Models.EventDefinition.Description') | Gets the description of the event | +| [Id](EventDefinition.Id.md 'QuixStreams.Streaming.Models.EventDefinition.Id') | Gets the globally unique identifier of the event. | +| [Level](EventDefinition.Level.md 'QuixStreams.Streaming.Models.EventDefinition.Level') | Gets the level of the event. Defaults to [QuixStreams.Telemetry.Models.EventLevel.Information](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventLevel.Information 'QuixStreams.Telemetry.Models.EventLevel.Information') | +| [Location](EventDefinition.Location.md 'QuixStreams.Streaming.Models.EventDefinition.Location') | Gets the location of the event within the Event hierarchy. Example: "/", "car/chassis/suspension". | +| [Name](EventDefinition.Name.md 'QuixStreams.Streaming.Models.EventDefinition.Name') | Gets the display name of the event | diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.AddDefinition(string,string,string).md b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.AddDefinition(string,string,string).md new file mode 100644 index 00000000..cab65df1 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.AddDefinition(string,string,string).md @@ -0,0 +1,33 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') + +## EventDefinitionBuilder.AddDefinition(string, string, string) Method + +Add new Event definition, to define properties like Name or Level, among others. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder AddDefinition(string eventId, string name=null, string description=null); +``` +#### Parameters + + + +`eventId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Event id. This must match the event id you use to Event values + + + +`name` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Human friendly display name of the event + + + +`description` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Description of the event + +#### Returns +[EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') +Event definition builder to define the event properties \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.EventDefinitionBuilder(StreamEventsProducer,string,EventDefinition).md b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.EventDefinitionBuilder(StreamEventsProducer,string,EventDefinition).md new file mode 100644 index 00000000..d4128d31 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.EventDefinitionBuilder(StreamEventsProducer,string,EventDefinition).md @@ -0,0 +1,29 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') + +## EventDefinitionBuilder(StreamEventsProducer, string, EventDefinition) Constructor + +Initializes a new instance of [EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') + +```csharp +public EventDefinitionBuilder(QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer streamEventsProducer, string location, QuixStreams.Telemetry.Models.EventDefinition properties=null); +``` +#### Parameters + + + +`streamEventsProducer` [StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +Events producer owner + + + +`location` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Location selected for the Event definition builder + + + +`properties` [QuixStreams.Telemetry.Models.EventDefinition](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventDefinition 'QuixStreams.Telemetry.Models.EventDefinition') + +Events definition instance managed by the builder \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.SetCustomProperties(string).md b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.SetCustomProperties(string).md new file mode 100644 index 00000000..2b6568f3 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.SetCustomProperties(string).md @@ -0,0 +1,18 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') + +## EventDefinitionBuilder.SetCustomProperties(string) Method + +Set custom properties of the Event + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder SetCustomProperties(string customProperties); +``` +#### Parameters + + + +`customProperties` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +#### Returns +[EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.SetLevel(EventLevel).md b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.SetLevel(EventLevel).md new file mode 100644 index 00000000..4896c822 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.SetLevel(EventLevel).md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') + +## EventDefinitionBuilder.SetLevel(EventLevel) Method + +Set severity level of the Event + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder SetLevel(QuixStreams.Telemetry.Models.EventLevel level); +``` +#### Parameters + + + +`level` [QuixStreams.Telemetry.Models.EventLevel](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventLevel 'QuixStreams.Telemetry.Models.EventLevel') + +The severity level of the event + +#### Returns +[EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.md b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.md new file mode 100644 index 00000000..3668efe8 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/EventDefinitionBuilder.md @@ -0,0 +1,22 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') + +## EventDefinitionBuilder Class + +Builder for creating [QuixStreams.Telemetry.Models.EventDefinitions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventDefinitions 'QuixStreams.Telemetry.Models.EventDefinitions') within [StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +```csharp +public class EventDefinitionBuilder +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 EventDefinitionBuilder + +| Constructors | | +| :--- | :--- | +| [EventDefinitionBuilder(StreamEventsProducer, string, EventDefinition)](EventDefinitionBuilder.EventDefinitionBuilder(StreamEventsProducer,string,EventDefinition).md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder.EventDefinitionBuilder(QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer, string, QuixStreams.Telemetry.Models.EventDefinition)') | Initializes a new instance of [EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') | + +| Methods | | +| :--- | :--- | +| [AddDefinition(string, string, string)](EventDefinitionBuilder.AddDefinition(string,string,string).md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder.AddDefinition(string, string, string)') | Add new Event definition, to define properties like Name or Level, among others. | +| [SetCustomProperties(string)](EventDefinitionBuilder.SetCustomProperties(string).md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder.SetCustomProperties(string)') | Set custom properties of the Event | +| [SetLevel(EventLevel)](EventDefinitionBuilder.SetLevel(EventLevel).md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder.SetLevel(QuixStreams.Telemetry.Models.EventLevel)') | Set severity level of the Event | diff --git a/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnDisposed.md b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnDisposed.md new file mode 100644 index 00000000..ad851d3c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnDisposed.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[IRawTopicConsumer](IRawTopicConsumer.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer') + +## IRawTopicConsumer.OnDisposed Event + +Raised when the resource is disposed + +```csharp +event EventHandler OnDisposed; +``` + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnErrorOccurred.md b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnErrorOccurred.md new file mode 100644 index 00000000..cbd7298f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnErrorOccurred.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[IRawTopicConsumer](IRawTopicConsumer.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer') + +## IRawTopicConsumer.OnErrorOccurred Event + +Event raised when a new error occurs + +```csharp +event EventHandler OnErrorOccurred; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[System.Exception](https://docs.microsoft.com/en-us/dotnet/api/System.Exception 'System.Exception')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnMessageReceived.md b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnMessageReceived.md new file mode 100644 index 00000000..068f8681 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.OnMessageReceived.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[IRawTopicConsumer](IRawTopicConsumer.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer') + +## IRawTopicConsumer.OnMessageReceived Event + +Event raised when a message is received from the topic + +```csharp +event EventHandler OnMessageReceived; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.Subscribe().md b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.Subscribe().md new file mode 100644 index 00000000..cbb0aebc --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.Subscribe().md @@ -0,0 +1,11 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[IRawTopicConsumer](IRawTopicConsumer.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer') + +## IRawTopicConsumer.Subscribe() Method + +Start reading streams. +Use 'OnMessageReceived' event to read messages after executing this method + +```csharp +void Subscribe(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.md b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.md new file mode 100644 index 00000000..5b94ab70 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IRawTopicConsumer.md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw') + +## IRawTopicConsumer Interface + +Interface to subscribe to incoming raw messages (capable to read non-quixstreams messages) + +```csharp +public interface IRawTopicConsumer : +System.IDisposable +``` + +Derived +↳ [RawTopicConsumer](RawTopicConsumer.md 'QuixStreams.Streaming.Raw.RawTopicConsumer') + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Methods | | +| :--- | :--- | +| [Subscribe()](IRawTopicConsumer.Subscribe().md 'QuixStreams.Streaming.Raw.IRawTopicConsumer.Subscribe()') | Start reading streams.
Use 'OnMessageReceived' event to read messages after executing this method | + +| Events | | +| :--- | :--- | +| [OnDisposed](IRawTopicConsumer.OnDisposed.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer.OnDisposed') | Raised when the resource is disposed | +| [OnErrorOccurred](IRawTopicConsumer.OnErrorOccurred.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer.OnErrorOccurred') | Event raised when a new error occurs | +| [OnMessageReceived](IRawTopicConsumer.OnMessageReceived.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer.OnMessageReceived') | Event raised when a message is received from the topic | diff --git a/temp_dir/client-library/api-reference/csharp/IRawTopicProducer.OnDisposed.md b/temp_dir/client-library/api-reference/csharp/IRawTopicProducer.OnDisposed.md new file mode 100644 index 00000000..5bfa31c1 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IRawTopicProducer.OnDisposed.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[IRawTopicProducer](IRawTopicProducer.md 'QuixStreams.Streaming.Raw.IRawTopicProducer') + +## IRawTopicProducer.OnDisposed Event + +Raised when the resource is disposed + +```csharp +event EventHandler OnDisposed; +``` + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IRawTopicProducer.Publish(RawMessage).md b/temp_dir/client-library/api-reference/csharp/IRawTopicProducer.Publish(RawMessage).md new file mode 100644 index 00000000..9346aa99 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IRawTopicProducer.Publish(RawMessage).md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[IRawTopicProducer](IRawTopicProducer.md 'QuixStreams.Streaming.Raw.IRawTopicProducer') + +## IRawTopicProducer.Publish(RawMessage) Method + +Publish data to the topic + +```csharp +void Publish(QuixStreams.Streaming.Raw.RawMessage data); +``` +#### Parameters + + + +`data` [RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IRawTopicProducer.md b/temp_dir/client-library/api-reference/csharp/IRawTopicProducer.md new file mode 100644 index 00000000..c34e98a3 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IRawTopicProducer.md @@ -0,0 +1,24 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw') + +## IRawTopicProducer Interface + +Interface to publish raw messages into a topic (capable to producing non-quixstreams messages) + +```csharp +public interface IRawTopicProducer : +System.IDisposable +``` + +Derived +↳ [RawTopicProducer](RawTopicProducer.md 'QuixStreams.Streaming.Raw.RawTopicProducer') + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Methods | | +| :--- | :--- | +| [Publish(RawMessage)](IRawTopicProducer.Publish(RawMessage).md 'QuixStreams.Streaming.Raw.IRawTopicProducer.Publish(QuixStreams.Streaming.Raw.RawMessage)') | Publish data to the topic | + +| Events | | +| :--- | :--- | +| [OnDisposed](IRawTopicProducer.OnDisposed.md 'QuixStreams.Streaming.Raw.IRawTopicProducer.OnDisposed') | Raised when the resource is disposed | diff --git a/temp_dir/client-library/api-reference/csharp/IStreamConsumer.Events.md b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.Events.md new file mode 100644 index 00000000..40a11cdb --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.Events.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') + +## IStreamConsumer.Events Property + +Gets the consumer for accessing event related information of the stream such as event definitions and values. + +```csharp +QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer Events { get; } +``` + +#### Property Value +[StreamEventsConsumer](StreamEventsConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamConsumer.OnPackageReceived.md b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.OnPackageReceived.md new file mode 100644 index 00000000..8f73cda6 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.OnPackageReceived.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') + +## IStreamConsumer.OnPackageReceived Event + +Event raised when a stream package has been received. + +```csharp +event EventHandler OnPackageReceived; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[QuixStreams.Streaming.PackageReceivedEventArgs](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Streaming.PackageReceivedEventArgs 'QuixStreams.Streaming.PackageReceivedEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamConsumer.OnStreamClosed.md b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.OnStreamClosed.md new file mode 100644 index 00000000..0b6c5327 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.OnStreamClosed.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') + +## IStreamConsumer.OnStreamClosed Event + +Event raised when the stream has closed. + +```csharp +event EventHandler OnStreamClosed; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[QuixStreams.Streaming.StreamClosedEventArgs](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Streaming.StreamClosedEventArgs 'QuixStreams.Streaming.StreamClosedEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamConsumer.Properties.md b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.Properties.md new file mode 100644 index 00000000..3d38a4bd --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.Properties.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') + +## IStreamConsumer.Properties Property + +Gets the consumer for accessing the properties and metadata of the stream. + +```csharp +QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer Properties { get; } +``` + +#### Property Value +[StreamPropertiesConsumer](StreamPropertiesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamConsumer.StreamId.md b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.StreamId.md new file mode 100644 index 00000000..6e183373 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.StreamId.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') + +## IStreamConsumer.StreamId Property + +Gets the stream Id of the stream. + +```csharp +string StreamId { get; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamConsumer.Timeseries.md b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.Timeseries.md new file mode 100644 index 00000000..f8510630 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.Timeseries.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') + +## IStreamConsumer.Timeseries Property + +Gets the consumer for accessing timeseries related information of the stream such as parameter definitions and values. + +```csharp +QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer Timeseries { get; } +``` + +#### Property Value +[StreamTimeseriesConsumer](StreamTimeseriesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamConsumer.md b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.md new file mode 100644 index 00000000..3c70d263 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamConsumer.md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## IStreamConsumer Interface + +Stream reader interface. Stands for a new stream read from the platform. +Allows to read the stream data received from a topic. + +```csharp +public interface IStreamConsumer +``` + +| Properties | | +| :--- | :--- | +| [Events](IStreamConsumer.Events.md 'QuixStreams.Streaming.IStreamConsumer.Events') | Gets the consumer for accessing event related information of the stream such as event definitions and values. | +| [Properties](IStreamConsumer.Properties.md 'QuixStreams.Streaming.IStreamConsumer.Properties') | Gets the consumer for accessing the properties and metadata of the stream. | +| [StreamId](IStreamConsumer.StreamId.md 'QuixStreams.Streaming.IStreamConsumer.StreamId') | Gets the stream Id of the stream. | +| [Timeseries](IStreamConsumer.Timeseries.md 'QuixStreams.Streaming.IStreamConsumer.Timeseries') | Gets the consumer for accessing timeseries related information of the stream such as parameter definitions and values. | + +| Events | | +| :--- | :--- | +| [OnPackageReceived](IStreamConsumer.OnPackageReceived.md 'QuixStreams.Streaming.IStreamConsumer.OnPackageReceived') | Event raised when a stream package has been received. | +| [OnStreamClosed](IStreamConsumer.OnStreamClosed.md 'QuixStreams.Streaming.IStreamConsumer.OnStreamClosed') | Event raised when the stream has closed. | diff --git a/temp_dir/client-library/api-reference/csharp/IStreamProducer.Close(StreamEndType).md b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Close(StreamEndType).md new file mode 100644 index 00000000..98aeb536 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Close(StreamEndType).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +## IStreamProducer.Close(StreamEndType) Method + +Close the stream and flush the pending data to stream. + +```csharp +void Close(QuixStreams.Telemetry.Models.StreamEndType streamState=QuixStreams.Telemetry.Models.StreamEndType.Closed); +``` +#### Parameters + + + +`streamState` [QuixStreams.Telemetry.Models.StreamEndType](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.StreamEndType 'QuixStreams.Telemetry.Models.StreamEndType') + +Stream closing state \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamProducer.Epoch.md b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Epoch.md new file mode 100644 index 00000000..86b70beb --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Epoch.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +## IStreamProducer.Epoch Property + +Default Epoch used for Parameters and Events + +```csharp +System.DateTime Epoch { get; set; } +``` + +#### Property Value +[System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamProducer.Events.md b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Events.md new file mode 100644 index 00000000..8aea47e0 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Events.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +## IStreamProducer.Events Property + +Gets the producer for publishing event related information of the stream such as event definitions and values + +```csharp +QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer Events { get; } +``` + +#### Property Value +[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamProducer.Flush().md b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Flush().md new file mode 100644 index 00000000..96566e8a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Flush().md @@ -0,0 +1,10 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +## IStreamProducer.Flush() Method + +Flush the pending data to stream. + +```csharp +void Flush(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamProducer.OnWriteException.md b/temp_dir/client-library/api-reference/csharp/IStreamProducer.OnWriteException.md new file mode 100644 index 00000000..81eb6d75 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamProducer.OnWriteException.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +## IStreamProducer.OnWriteException Event + +Event raised when an exception occurred during the publishing processes + +```csharp +event EventHandler OnWriteException; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[System.Exception](https://docs.microsoft.com/en-us/dotnet/api/System.Exception 'System.Exception')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamProducer.Properties.md b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Properties.md new file mode 100644 index 00000000..37653130 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Properties.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +## IStreamProducer.Properties Property + +Properties of the stream. The changes will automatically be sent after a slight delay + +```csharp +QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer Properties { get; } +``` + +#### Property Value +[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamProducer.StreamId.md b/temp_dir/client-library/api-reference/csharp/IStreamProducer.StreamId.md new file mode 100644 index 00000000..8e035196 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamProducer.StreamId.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +## IStreamProducer.StreamId Property + +Stream Id of the new stream created by the producer + +```csharp +string StreamId { get; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamProducer.Timeseries.md b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Timeseries.md new file mode 100644 index 00000000..95773bfe --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamProducer.Timeseries.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +## IStreamProducer.Timeseries Property + +Gets the producer for publishing timeseries related information of the stream such as parameter definitions and values + +```csharp +QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer Timeseries { get; } +``` + +#### Property Value +[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/IStreamProducer.md b/temp_dir/client-library/api-reference/csharp/IStreamProducer.md new file mode 100644 index 00000000..e67be04c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/IStreamProducer.md @@ -0,0 +1,31 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## IStreamProducer Interface + +Stands for a new stream that we want to send to the platform. +It provides you helper properties to stream data the platform like parameter values, events, definitions and all the information you can persist to the platform. + +```csharp +public interface IStreamProducer : +System.IDisposable +``` + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Properties | | +| :--- | :--- | +| [Epoch](IStreamProducer.Epoch.md 'QuixStreams.Streaming.IStreamProducer.Epoch') | Default Epoch used for Parameters and Events | +| [Events](IStreamProducer.Events.md 'QuixStreams.Streaming.IStreamProducer.Events') | Gets the producer for publishing event related information of the stream such as event definitions and values | +| [Properties](IStreamProducer.Properties.md 'QuixStreams.Streaming.IStreamProducer.Properties') | Properties of the stream. The changes will automatically be sent after a slight delay | +| [StreamId](IStreamProducer.StreamId.md 'QuixStreams.Streaming.IStreamProducer.StreamId') | Stream Id of the new stream created by the producer | +| [Timeseries](IStreamProducer.Timeseries.md 'QuixStreams.Streaming.IStreamProducer.Timeseries') | Gets the producer for publishing timeseries related information of the stream such as parameter definitions and values | + +| Methods | | +| :--- | :--- | +| [Close(StreamEndType)](IStreamProducer.Close(StreamEndType).md 'QuixStreams.Streaming.IStreamProducer.Close(QuixStreams.Telemetry.Models.StreamEndType)') | Close the stream and flush the pending data to stream. | +| [Flush()](IStreamProducer.Flush().md 'QuixStreams.Streaming.IStreamProducer.Flush()') | Flush the pending data to stream. | + +| Events | | +| :--- | :--- | +| [OnWriteException](IStreamProducer.OnWriteException.md 'QuixStreams.Streaming.IStreamProducer.OnWriteException') | Event raised when an exception occurred during the publishing processes | diff --git a/temp_dir/client-library/api-reference/csharp/ITopicConsumer.Commit().md b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.Commit().md new file mode 100644 index 00000000..d9e10ec9 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.Commit().md @@ -0,0 +1,10 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') + +## ITopicConsumer.Commit() Method + +Commit packages read up until now + +```csharp +void Commit(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnCommitted.md b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnCommitted.md new file mode 100644 index 00000000..43984c9f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnCommitted.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') + +## ITopicConsumer.OnCommitted Event + +Raised when underlying source committed data read up to this point + +```csharp +event EventHandler OnCommitted; +``` + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnCommitting.md b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnCommitting.md new file mode 100644 index 00000000..390a35e6 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnCommitting.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') + +## ITopicConsumer.OnCommitting Event + +Raised when underlying source is about to commit data read up to this point + +```csharp +event EventHandler OnCommitting; +``` + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnDisposed.md b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnDisposed.md new file mode 100644 index 00000000..eb9c0da5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnDisposed.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') + +## ITopicConsumer.OnDisposed Event + +Raised when the resource is disposed + +```csharp +event EventHandler OnDisposed; +``` + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnRevoking.md b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnRevoking.md new file mode 100644 index 00000000..318b8831 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnRevoking.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') + +## ITopicConsumer.OnRevoking Event + +Raised when the underlying source of data will became unavailable, but depending on implementation commit might be possible at this point + +```csharp +event EventHandler OnRevoking; +``` + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnStreamReceived.md b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnStreamReceived.md new file mode 100644 index 00000000..2b815918 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnStreamReceived.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') + +## ITopicConsumer.OnStreamReceived Event + +Event raised when a new stream has been received for reading. +Use the Stream Reader interface received to read data from the stream. +You must execute 'Subscribe' method before starting to receive streams from this event + +```csharp +event EventHandler OnStreamReceived; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnStreamsRevoked.md b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnStreamsRevoked.md new file mode 100644 index 00000000..df420372 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.OnStreamsRevoked.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') + +## ITopicConsumer.OnStreamsRevoked Event + +Raised when the underlying source of data became unavailable for the streams affected by it + +```csharp +event EventHandler OnStreamsRevoked; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicConsumer.Subscribe().md b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.Subscribe().md new file mode 100644 index 00000000..0ef83815 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.Subscribe().md @@ -0,0 +1,11 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') + +## ITopicConsumer.Subscribe() Method + +Start subscribing to streams. +Use 'OnStreamReceived' event to read stream after executing this method + +```csharp +void Subscribe(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicConsumer.md b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.md new file mode 100644 index 00000000..77518ca7 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicConsumer.md @@ -0,0 +1,30 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## ITopicConsumer Interface + +Interface to subscribe to incoming streams + +```csharp +public interface ITopicConsumer : +System.IDisposable +``` + +Derived +↳ [TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Methods | | +| :--- | :--- | +| [Commit()](ITopicConsumer.Commit().md 'QuixStreams.Streaming.ITopicConsumer.Commit()') | Commit packages read up until now | +| [Subscribe()](ITopicConsumer.Subscribe().md 'QuixStreams.Streaming.ITopicConsumer.Subscribe()') | Start subscribing to streams.
Use 'OnStreamReceived' event to read stream after executing this method | + +| Events | | +| :--- | :--- | +| [OnCommitted](ITopicConsumer.OnCommitted.md 'QuixStreams.Streaming.ITopicConsumer.OnCommitted') | Raised when underlying source committed data read up to this point | +| [OnCommitting](ITopicConsumer.OnCommitting.md 'QuixStreams.Streaming.ITopicConsumer.OnCommitting') | Raised when underlying source is about to commit data read up to this point | +| [OnDisposed](ITopicConsumer.OnDisposed.md 'QuixStreams.Streaming.ITopicConsumer.OnDisposed') | Raised when the resource is disposed | +| [OnRevoking](ITopicConsumer.OnRevoking.md 'QuixStreams.Streaming.ITopicConsumer.OnRevoking') | Raised when the underlying source of data will became unavailable, but depending on implementation commit might be possible at this point | +| [OnStreamReceived](ITopicConsumer.OnStreamReceived.md 'QuixStreams.Streaming.ITopicConsumer.OnStreamReceived') | Event raised when a new stream has been received for reading.
Use the Stream Reader interface received to read data from the stream.
You must execute 'Subscribe' method before starting to receive streams from this event | +| [OnStreamsRevoked](ITopicConsumer.OnStreamsRevoked.md 'QuixStreams.Streaming.ITopicConsumer.OnStreamsRevoked') | Raised when the underlying source of data became unavailable for the streams affected by it | diff --git a/temp_dir/client-library/api-reference/csharp/ITopicProducer.CreateStream().md b/temp_dir/client-library/api-reference/csharp/ITopicProducer.CreateStream().md new file mode 100644 index 00000000..b200b621 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicProducer.CreateStream().md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') + +## ITopicProducer.CreateStream() Method + +Creates a new stream and returns the related stream producer to operate it. + +```csharp +QuixStreams.Streaming.IStreamProducer CreateStream(); +``` + +#### Returns +[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') +Stream producer to allow the stream to push data to the platform \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicProducer.CreateStream(string).md b/temp_dir/client-library/api-reference/csharp/ITopicProducer.CreateStream(string).md new file mode 100644 index 00000000..cc0f10d2 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicProducer.CreateStream(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') + +## ITopicProducer.CreateStream(string) Method + +Creates a new stream and returns the related stream producer to operate it. + +```csharp +QuixStreams.Streaming.IStreamProducer CreateStream(string streamId); +``` +#### Parameters + + + +`streamId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Stream Id of the created stream + +#### Returns +[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') +Stream producer to allow the stream to push data to the platform \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md b/temp_dir/client-library/api-reference/csharp/ITopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md new file mode 100644 index 00000000..bda2e392 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') + +## ITopicProducer.GetOrCreateStream(string, Action) Method + +Retrieves a stream that was previously created by this instance, if the stream is not closed, otherwise creates a new stream. + +```csharp +QuixStreams.Streaming.IStreamProducer GetOrCreateStream(string streamId, System.Action onStreamCreated=null); +``` +#### Parameters + + + +`streamId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The Id of the stream you want to get or create + + + +`onStreamCreated` [System.Action<](https://docs.microsoft.com/en-us/dotnet/api/System.Action-1 'System.Action`1')[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Action-1 'System.Action`1') + +Callback executed when a new Stream is created in the topic producer because it doesn't exist. + +#### Returns +[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') +Stream producer to allow the stream to push data to the platform. \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicProducer.GetStream(string).md b/temp_dir/client-library/api-reference/csharp/ITopicProducer.GetStream(string).md new file mode 100644 index 00000000..2a90c821 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicProducer.GetStream(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') + +## ITopicProducer.GetStream(string) Method + +Retrieves a stream that was previously created by this instance, if the stream is not closed. + +```csharp +QuixStreams.Streaming.IStreamProducer GetStream(string streamId); +``` +#### Parameters + + + +`streamId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The Id of the stream + +#### Returns +[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') +Stream producer to allow the stream to push data to the platform or null if not found. \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicProducer.OnDisposed.md b/temp_dir/client-library/api-reference/csharp/ITopicProducer.OnDisposed.md new file mode 100644 index 00000000..c690faaf --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicProducer.OnDisposed.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') + +## ITopicProducer.OnDisposed Event + +Raised when the resource finished disposing + +```csharp +event EventHandler OnDisposed; +``` + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ITopicProducer.md b/temp_dir/client-library/api-reference/csharp/ITopicProducer.md new file mode 100644 index 00000000..1eafd6ea --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ITopicProducer.md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## ITopicProducer Interface + +Interface to produce outgoing streams + +```csharp +public interface ITopicProducer : +System.IDisposable +``` + +Derived +↳ [TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Methods | | +| :--- | :--- | +| [CreateStream()](ITopicProducer.CreateStream().md 'QuixStreams.Streaming.ITopicProducer.CreateStream()') | Creates a new stream and returns the related stream producer to operate it. | +| [CreateStream(string)](ITopicProducer.CreateStream(string).md 'QuixStreams.Streaming.ITopicProducer.CreateStream(string)') | Creates a new stream and returns the related stream producer to operate it. | +| [GetOrCreateStream(string, Action<IStreamProducer>)](ITopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md 'QuixStreams.Streaming.ITopicProducer.GetOrCreateStream(string, System.Action)') | Retrieves a stream that was previously created by this instance, if the stream is not closed, otherwise creates a new stream. | +| [GetStream(string)](ITopicProducer.GetStream(string).md 'QuixStreams.Streaming.ITopicProducer.GetStream(string)') | Retrieves a stream that was previously created by this instance, if the stream is not closed. | + +| Events | | +| :--- | :--- | +| [OnDisposed](ITopicProducer.OnDisposed.md 'QuixStreams.Streaming.ITopicProducer.OnDisposed') | Raised when the resource finished disposing | diff --git a/temp_dir/client-library/api-reference/csharp/InvalidConfigurationException.InvalidConfigurationException(string,Exception).md b/temp_dir/client-library/api-reference/csharp/InvalidConfigurationException.InvalidConfigurationException(string,Exception).md new file mode 100644 index 00000000..0812a106 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/InvalidConfigurationException.InvalidConfigurationException(string,Exception).md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Exceptions](QuixStreams.Streaming.Exceptions.md 'QuixStreams.Streaming.Exceptions').[InvalidConfigurationException](InvalidConfigurationException.md 'QuixStreams.Streaming.Exceptions.InvalidConfigurationException') + +## InvalidConfigurationException(string, Exception) Constructor + +Initializes a new instance of [InvalidConfigurationException](InvalidConfigurationException.md 'QuixStreams.Streaming.Exceptions.InvalidConfigurationException') + +```csharp +public InvalidConfigurationException(string message, System.Exception innerException=null); +``` +#### Parameters + + + +`message` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The message + + + +`innerException` [System.Exception](https://docs.microsoft.com/en-us/dotnet/api/System.Exception 'System.Exception') + +Inner exception if it exists \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/InvalidConfigurationException.md b/temp_dir/client-library/api-reference/csharp/InvalidConfigurationException.md new file mode 100644 index 00000000..b6a2630c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/InvalidConfigurationException.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Exceptions](QuixStreams.Streaming.Exceptions.md 'QuixStreams.Streaming.Exceptions') + +## InvalidConfigurationException Class + +Exception due to an invalid configuration during the connection setup of a Quix streaming client + +```csharp +public class InvalidConfigurationException : System.Exception +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 [System.Exception](https://docs.microsoft.com/en-us/dotnet/api/System.Exception 'System.Exception') 🡒 InvalidConfigurationException + +| Constructors | | +| :--- | :--- | +| [InvalidConfigurationException(string, Exception)](InvalidConfigurationException.InvalidConfigurationException(string,Exception).md 'QuixStreams.Streaming.Exceptions.InvalidConfigurationException.InvalidConfigurationException(string, System.Exception)') | Initializes a new instance of [InvalidConfigurationException](InvalidConfigurationException.md 'QuixStreams.Streaming.Exceptions.InvalidConfigurationException') | diff --git a/temp_dir/client-library/api-reference/csharp/InvalidTokenException.InvalidTokenException(string,Exception).md b/temp_dir/client-library/api-reference/csharp/InvalidTokenException.InvalidTokenException(string,Exception).md new file mode 100644 index 00000000..a351ee1d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/InvalidTokenException.InvalidTokenException(string,Exception).md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Exceptions](QuixStreams.Streaming.Exceptions.md 'QuixStreams.Streaming.Exceptions').[InvalidTokenException](InvalidTokenException.md 'QuixStreams.Streaming.Exceptions.InvalidTokenException') + +## InvalidTokenException(string, Exception) Constructor + +Initializes a new instance of [InvalidTokenException](InvalidTokenException.md 'QuixStreams.Streaming.Exceptions.InvalidTokenException') + +```csharp +public InvalidTokenException(string message, System.Exception innerException=null); +``` +#### Parameters + + + +`message` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The message + + + +`innerException` [System.Exception](https://docs.microsoft.com/en-us/dotnet/api/System.Exception 'System.Exception') + +Inner exception if it exists \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/InvalidTokenException.md b/temp_dir/client-library/api-reference/csharp/InvalidTokenException.md new file mode 100644 index 00000000..ecf68ae3 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/InvalidTokenException.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Exceptions](QuixStreams.Streaming.Exceptions.md 'QuixStreams.Streaming.Exceptions') + +## InvalidTokenException Class + +Exception due to an invalid token during the connection setup of a Quix streaming client + +```csharp +public class InvalidTokenException : System.Exception +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 [System.Exception](https://docs.microsoft.com/en-us/dotnet/api/System.Exception 'System.Exception') 🡒 InvalidTokenException + +| Constructors | | +| :--- | :--- | +| [InvalidTokenException(string, Exception)](InvalidTokenException.InvalidTokenException(string,Exception).md 'QuixStreams.Streaming.Exceptions.InvalidTokenException.InvalidTokenException(string, System.Exception)') | Initializes a new instance of [InvalidTokenException](InvalidTokenException.md 'QuixStreams.Streaming.Exceptions.InvalidTokenException') | diff --git a/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md new file mode 100644 index 00000000..6d97ca0d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md @@ -0,0 +1,33 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') + +## KafkaStreamingClient.GetRawTopicConsumer(string, string, Nullable) Method + +Gets a topic consumer capable of subscribing to receive non-quixstreams incoming messages. + +```csharp +public QuixStreams.Streaming.Raw.IRawTopicConsumer GetRawTopicConsumer(string topic, string consumerGroup=null, System.Nullable autoOffset=null); +``` +#### Parameters + + + +`topic` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Name of the topic. + + + +`consumerGroup` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The consumer group id to use for consuming messages. If null, consumer group is not used and only consuming new messages. + + + +`autoOffset` [System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[QuixStreams.Telemetry.Kafka.AutoOffsetReset](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.AutoOffsetReset 'QuixStreams.Telemetry.Kafka.AutoOffsetReset')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') + +The offset to use when there is no saved offset for the consumer group. + +#### Returns +[IRawTopicConsumer](IRawTopicConsumer.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetRawTopicProducer(string).md b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetRawTopicProducer(string).md new file mode 100644 index 00000000..1110fe66 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetRawTopicProducer(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') + +## KafkaStreamingClient.GetRawTopicProducer(string) Method + +Gets a topic producer capable of publishing non-quixstreams messages. + +```csharp +public QuixStreams.Streaming.Raw.IRawTopicProducer GetRawTopicProducer(string topic); +``` +#### Parameters + + + +`topic` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Name of the topic. + +#### Returns +[IRawTopicProducer](IRawTopicProducer.md 'QuixStreams.Streaming.Raw.IRawTopicProducer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md new file mode 100644 index 00000000..bbdc6734 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md @@ -0,0 +1,39 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') + +## KafkaStreamingClient.GetTopicConsumer(string, string, CommitOptions, AutoOffsetReset) Method + +Gets a topic consumer capable of subscribing to receive incoming streams. + +```csharp +public QuixStreams.Streaming.ITopicConsumer GetTopicConsumer(string topic, string consumerGroup=null, QuixStreams.Transport.Fw.CommitOptions options=null, QuixStreams.Telemetry.Kafka.AutoOffsetReset autoOffset=QuixStreams.Telemetry.Kafka.AutoOffsetReset.Latest); +``` +#### Parameters + + + +`topic` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Name of the topic. + + + +`consumerGroup` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The consumer group id to use for consuming messages. If null, consumer group is not used and only consuming new messages. + + + +`options` [QuixStreams.Transport.Fw.CommitOptions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Transport.Fw.CommitOptions 'QuixStreams.Transport.Fw.CommitOptions') + +The settings to use for committing + + + +`autoOffset` [QuixStreams.Telemetry.Kafka.AutoOffsetReset](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.AutoOffsetReset 'QuixStreams.Telemetry.Kafka.AutoOffsetReset') + +The offset to use when there is no saved offset for the consumer group. + +#### Returns +[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetTopicProducer(string).md b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetTopicProducer(string).md new file mode 100644 index 00000000..92ed98a3 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.GetTopicProducer(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') + +## KafkaStreamingClient.GetTopicProducer(string) Method + +Gets a topic producer capable of publishing stream messages. + +```csharp +public QuixStreams.Streaming.ITopicProducer GetTopicProducer(string topic); +``` +#### Parameters + + + +`topic` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Name of the topic. + +#### Returns +[ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.KafkaStreamingClient(string,SecurityOptions,IDictionary_string,string_,bool).md b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.KafkaStreamingClient(string,SecurityOptions,IDictionary_string,string_,bool).md new file mode 100644 index 00000000..9cf2c811 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.KafkaStreamingClient(string,SecurityOptions,IDictionary_string,string_,bool).md @@ -0,0 +1,35 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') + +## KafkaStreamingClient(string, SecurityOptions, IDictionary, bool) Constructor + +Initializes a new instance of [KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') + +```csharp +public KafkaStreamingClient(string brokerAddress, QuixStreams.Streaming.Configuration.SecurityOptions securityOptions=null, System.Collections.Generic.IDictionary properties=null, bool debug=false); +``` +#### Parameters + + + +`brokerAddress` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Address of Kafka cluster. + + + +`securityOptions` [SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') + +Optional security options. + + + +`properties` [System.Collections.Generic.IDictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2') + +Additional broker properties + + + +`debug` [System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') + +Whether debugging should be enabled \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.md b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.md new file mode 100644 index 00000000..f691671e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClient.md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## KafkaStreamingClient Class + +A Kafka streaming client capable of creating topic consumer and producers. + +```csharp +public class KafkaStreamingClient +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 KafkaStreamingClient + +| Constructors | | +| :--- | :--- | +| [KafkaStreamingClient(string, SecurityOptions, IDictionary<string,string>, bool)](KafkaStreamingClient.KafkaStreamingClient(string,SecurityOptions,IDictionary_string,string_,bool).md 'QuixStreams.Streaming.KafkaStreamingClient.KafkaStreamingClient(string, QuixStreams.Streaming.Configuration.SecurityOptions, System.Collections.Generic.IDictionary, bool)') | Initializes a new instance of [KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') | + +| Methods | | +| :--- | :--- | +| [GetRawTopicConsumer(string, string, Nullable<AutoOffsetReset>)](KafkaStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md 'QuixStreams.Streaming.KafkaStreamingClient.GetRawTopicConsumer(string, string, System.Nullable)') | Gets a topic consumer capable of subscribing to receive non-quixstreams incoming messages. | +| [GetRawTopicProducer(string)](KafkaStreamingClient.GetRawTopicProducer(string).md 'QuixStreams.Streaming.KafkaStreamingClient.GetRawTopicProducer(string)') | Gets a topic producer capable of publishing non-quixstreams messages. | +| [GetTopicConsumer(string, string, CommitOptions, AutoOffsetReset)](KafkaStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md 'QuixStreams.Streaming.KafkaStreamingClient.GetTopicConsumer(string, string, QuixStreams.Transport.Fw.CommitOptions, QuixStreams.Telemetry.Kafka.AutoOffsetReset)') | Gets a topic consumer capable of subscribing to receive incoming streams. | +| [GetTopicProducer(string)](KafkaStreamingClient.GetTopicProducer(string).md 'QuixStreams.Streaming.KafkaStreamingClient.GetTopicProducer(string)') | Gets a topic producer capable of publishing stream messages. | diff --git a/temp_dir/client-library/api-reference/csharp/KafkaStreamingClientExtensions.GetTopicConsumer(thisKafkaStreamingClient,string,string,CommitMode,AutoOffsetReset).md b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClientExtensions.GetTopicConsumer(thisKafkaStreamingClient,string,string,CommitMode,AutoOffsetReset).md new file mode 100644 index 00000000..15368001 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClientExtensions.GetTopicConsumer(thisKafkaStreamingClient,string,string,CommitMode,AutoOffsetReset).md @@ -0,0 +1,45 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[KafkaStreamingClientExtensions](KafkaStreamingClientExtensions.md 'QuixStreams.Streaming.KafkaStreamingClientExtensions') + +## KafkaStreamingClientExtensions.GetTopicConsumer(this KafkaStreamingClient, string, string, CommitMode, AutoOffsetReset) Method + +Open an topic consumer capable of subscribing to receive incoming streams + +```csharp +public static QuixStreams.Streaming.ITopicConsumer GetTopicConsumer(this QuixStreams.Streaming.KafkaStreamingClient client, string topic, string consumerGroup=null, QuixStreams.Streaming.Models.CommitMode commitMode=QuixStreams.Streaming.Models.CommitMode.Automatic, QuixStreams.Telemetry.Kafka.AutoOffsetReset autoOffset=QuixStreams.Telemetry.Kafka.AutoOffsetReset.Latest); +``` +#### Parameters + + + +`client` [KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') + +Streaming Client instance + + + +`topic` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Name of the topic. + + + +`consumerGroup` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The consumer group id to use for consuming messages. If null, consumer group is not used and only consuming new messages. + + + +`commitMode` [CommitMode](CommitMode.md 'QuixStreams.Streaming.Models.CommitMode') + +The commit strategy to use for this topic + + + +`autoOffset` [QuixStreams.Telemetry.Kafka.AutoOffsetReset](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.AutoOffsetReset 'QuixStreams.Telemetry.Kafka.AutoOffsetReset') + +The offset to use when there is no saved offset for the consumer group. + +#### Returns +[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/KafkaStreamingClientExtensions.md b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClientExtensions.md new file mode 100644 index 00000000..2acc11e6 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/KafkaStreamingClientExtensions.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## KafkaStreamingClientExtensions Class + +Extensions for Streaming Client class + +```csharp +public static class KafkaStreamingClientExtensions +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 KafkaStreamingClientExtensions + +| Methods | | +| :--- | :--- | +| [GetTopicConsumer(this KafkaStreamingClient, string, string, CommitMode, AutoOffsetReset)](KafkaStreamingClientExtensions.GetTopicConsumer(thisKafkaStreamingClient,string,string,CommitMode,AutoOffsetReset).md 'QuixStreams.Streaming.KafkaStreamingClientExtensions.GetTopicConsumer(this QuixStreams.Streaming.KafkaStreamingClient, string, string, QuixStreams.Streaming.Models.CommitMode, QuixStreams.Telemetry.Kafka.AutoOffsetReset)') | Open an topic consumer capable of subscribing to receive incoming streams | diff --git a/temp_dir/client-library/api-reference/csharp/ObservableDictionary_TKey,TValue_.md b/temp_dir/client-library/api-reference/csharp/ObservableDictionary_TKey,TValue_.md new file mode 100644 index 00000000..d3c0040a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ObservableDictionary_TKey,TValue_.md @@ -0,0 +1,33 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') + +## ObservableDictionary Class + +Observable dictionary based on https://codereview.stackexchange.com/questions/202663/simple-observabledictionary-implementation + +```csharp +public class ObservableDictionary : +System.Collections.IDictionary, +System.Collections.ICollection, +System.Collections.IEnumerable, +System.Collections.Generic.IDictionary, +System.Collections.Generic.ICollection>, +System.Collections.Generic.IEnumerable>, +System.Collections.Generic.IReadOnlyDictionary, +System.Collections.Generic.IReadOnlyCollection>, +System.Collections.Specialized.INotifyCollectionChanged, +System.ComponentModel.INotifyPropertyChanged +``` +#### Type parameters + + + +`TKey` + + + +`TValue` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 ObservableDictionary + +Implements [System.Collections.IDictionary](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.IDictionary 'System.Collections.IDictionary'), [System.Collections.ICollection](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.ICollection 'System.Collections.ICollection'), [System.Collections.IEnumerable](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.IEnumerable 'System.Collections.IEnumerable'), [System.Collections.Generic.IDictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2')[TKey](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TKey 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TKey')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2')[TValue](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TValue 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TValue')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2'), [System.Collections.Generic.ICollection<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.ICollection-1 'System.Collections.Generic.ICollection`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[TKey](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TKey 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TKey')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[TValue](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TValue 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TValue')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.ICollection-1 'System.Collections.Generic.ICollection`1'), [System.Collections.Generic.IEnumerable<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[TKey](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TKey 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TKey')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[TValue](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TValue 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TValue')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1'), [System.Collections.Generic.IReadOnlyDictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyDictionary-2 'System.Collections.Generic.IReadOnlyDictionary`2')[TKey](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TKey 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TKey')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyDictionary-2 'System.Collections.Generic.IReadOnlyDictionary`2')[TValue](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TValue 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TValue')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyDictionary-2 'System.Collections.Generic.IReadOnlyDictionary`2'), [System.Collections.Generic.IReadOnlyCollection<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyCollection-1 'System.Collections.Generic.IReadOnlyCollection`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[TKey](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TKey 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TKey')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[TValue](ObservableDictionary_TKey,TValue_.md#QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary_TKey,TValue_.TValue 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary.TValue')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyCollection-1 'System.Collections.Generic.IReadOnlyCollection`1'), [System.Collections.Specialized.INotifyCollectionChanged](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Specialized.INotifyCollectionChanged 'System.Collections.Specialized.INotifyCollectionChanged'), [System.ComponentModel.INotifyPropertyChanged](https://docs.microsoft.com/en-us/dotnet/api/System.ComponentModel.INotifyPropertyChanged 'System.ComponentModel.INotifyPropertyChanged') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.CustomProperties.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.CustomProperties.md new file mode 100644 index 00000000..8f7a0dd3 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.CustomProperties.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') + +## ParameterDefinition.CustomProperties Property + +Gets the optional field for any custom properties that do not exist on the parameter. +For example this could be a json string, describing the optimal value range of this parameter + +```csharp +public string CustomProperties { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Description.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Description.md new file mode 100644 index 00000000..c81b73ca --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Description.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') + +## ParameterDefinition.Description Property + +Gets the description of the parameter + +```csharp +public string Description { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Format.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Format.md new file mode 100644 index 00000000..21d26846 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Format.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') + +## ParameterDefinition.Format Property + +Gets the formatting to apply on the value for display purposes + +```csharp +public string Format { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Id.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Id.md new file mode 100644 index 00000000..f47e9939 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Id.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') + +## ParameterDefinition.Id Property + +Gets the unique parameter id + +```csharp +public string Id { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Location.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Location.md new file mode 100644 index 00000000..c99e72fe --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Location.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') + +## ParameterDefinition.Location Property + +Gets the location of the parameter within the Parameter hierarchy. Example: "/", "car/chassis/suspension". + +```csharp +public string Location { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.MaximumValue.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.MaximumValue.md new file mode 100644 index 00000000..e426127e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.MaximumValue.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') + +## ParameterDefinition.MaximumValue Property + +Gets the maximum value of the parameter + +```csharp +public System.Nullable MaximumValue { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Double](https://docs.microsoft.com/en-us/dotnet/api/System.Double 'System.Double')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.MinimumValue.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.MinimumValue.md new file mode 100644 index 00000000..96e6682b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.MinimumValue.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') + +## ParameterDefinition.MinimumValue Property + +Gets the minimum value of the parameter + +```csharp +public System.Nullable MinimumValue { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Double](https://docs.microsoft.com/en-us/dotnet/api/System.Double 'System.Double')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Name.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Name.md new file mode 100644 index 00000000..d46e1d5b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Name.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') + +## ParameterDefinition.Name Property + +Gets the human friendly display name of the parameter + +```csharp +public string Name { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Unit.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Unit.md new file mode 100644 index 00000000..2e704bb2 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.Unit.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') + +## ParameterDefinition.Unit Property + +Gets the unit of the parameter + +```csharp +public string Unit { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinition.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.md new file mode 100644 index 00000000..32671d48 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinition.md @@ -0,0 +1,24 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## ParameterDefinition Class + +Describes additional context for the parameter + +```csharp +public class ParameterDefinition +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 ParameterDefinition + +| Properties | | +| :--- | :--- | +| [CustomProperties](ParameterDefinition.CustomProperties.md 'QuixStreams.Streaming.Models.ParameterDefinition.CustomProperties') | Gets the optional field for any custom properties that do not exist on the parameter.
For example this could be a json string, describing the optimal value range of this parameter | +| [Description](ParameterDefinition.Description.md 'QuixStreams.Streaming.Models.ParameterDefinition.Description') | Gets the description of the parameter | +| [Format](ParameterDefinition.Format.md 'QuixStreams.Streaming.Models.ParameterDefinition.Format') | Gets the formatting to apply on the value for display purposes | +| [Id](ParameterDefinition.Id.md 'QuixStreams.Streaming.Models.ParameterDefinition.Id') | Gets the unique parameter id | +| [Location](ParameterDefinition.Location.md 'QuixStreams.Streaming.Models.ParameterDefinition.Location') | Gets the location of the parameter within the Parameter hierarchy. Example: "/", "car/chassis/suspension". | +| [MaximumValue](ParameterDefinition.MaximumValue.md 'QuixStreams.Streaming.Models.ParameterDefinition.MaximumValue') | Gets the maximum value of the parameter | +| [MinimumValue](ParameterDefinition.MinimumValue.md 'QuixStreams.Streaming.Models.ParameterDefinition.MinimumValue') | Gets the minimum value of the parameter | +| [Name](ParameterDefinition.Name.md 'QuixStreams.Streaming.Models.ParameterDefinition.Name') | Gets the human friendly display name of the parameter | +| [Unit](ParameterDefinition.Unit.md 'QuixStreams.Streaming.Models.ParameterDefinition.Unit') | Gets the unit of the parameter | diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.AddDefinition(string,string,string).md b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.AddDefinition(string,string,string).md new file mode 100644 index 00000000..a3baceef --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.AddDefinition(string,string,string).md @@ -0,0 +1,33 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') + +## ParameterDefinitionBuilder.AddDefinition(string, string, string) Method + +Add new parameter definition to the [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer'). Configure it with the builder methods. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder AddDefinition(string parameterId, string name=null, string description=null); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The id of the parameter. Must match the parameter id used to send data. + + + +`name` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The human friendly display name of the parameter + + + +`description` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The description of the parameter + +#### Returns +[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') +Parameter definition builder to define the parameter properties \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.ParameterDefinitionBuilder(StreamTimeseriesProducer,string,ParameterDefinition).md b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.ParameterDefinitionBuilder(StreamTimeseriesProducer,string,ParameterDefinition).md new file mode 100644 index 00000000..925d8fde --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.ParameterDefinitionBuilder(StreamTimeseriesProducer,string,ParameterDefinition).md @@ -0,0 +1,29 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') + +## ParameterDefinitionBuilder(StreamTimeseriesProducer, string, ParameterDefinition) Constructor + +Initializes a new instance of [ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') + +```csharp +public ParameterDefinitionBuilder(QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer streamTimeseriesProducer, string location, QuixStreams.Telemetry.Models.ParameterDefinition definition=null); +``` +#### Parameters + + + +`streamTimeseriesProducer` [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +Parameters producer owner + + + +`location` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Location selected for the Parameter definition builder + + + +`definition` [QuixStreams.Telemetry.Models.ParameterDefinition](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.ParameterDefinition 'QuixStreams.Telemetry.Models.ParameterDefinition') + +Parameter definition instance managed by the builder \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetCustomProperties(string).md b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetCustomProperties(string).md new file mode 100644 index 00000000..84210020 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetCustomProperties(string).md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') + +## ParameterDefinitionBuilder.SetCustomProperties(string) Method + +Set the custom properties of the parameter + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder SetCustomProperties(string customProperties); +``` +#### Parameters + + + +`customProperties` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The custom properties of the parameter + +#### Returns +[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetFormat(string).md b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetFormat(string).md new file mode 100644 index 00000000..fbfe02c5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetFormat(string).md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') + +## ParameterDefinitionBuilder.SetFormat(string) Method + +Set the format of the parameter + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder SetFormat(string format); +``` +#### Parameters + + + +`format` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The formatting to apply on the value for display purposes + +#### Returns +[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetRange(double,double).md b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetRange(double,double).md new file mode 100644 index 00000000..97904425 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetRange(double,double).md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') + +## ParameterDefinitionBuilder.SetRange(double, double) Method + +Set the minimum and maximum range of the parameter + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder SetRange(double minimumValue, double maximumValue); +``` +#### Parameters + + + +`minimumValue` [System.Double](https://docs.microsoft.com/en-us/dotnet/api/System.Double 'System.Double') + +Minimum value + + + +`maximumValue` [System.Double](https://docs.microsoft.com/en-us/dotnet/api/System.Double 'System.Double') + +Maximum value + +#### Returns +[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetUnit(string).md b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetUnit(string).md new file mode 100644 index 00000000..23515873 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.SetUnit(string).md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') + +## ParameterDefinitionBuilder.SetUnit(string) Method + +Set the unit of the parameter + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder SetUnit(string unit); +``` +#### Parameters + + + +`unit` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Unit of the parameter + +#### Returns +[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.md b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.md new file mode 100644 index 00000000..e053a962 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterDefinitionBuilder.md @@ -0,0 +1,24 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') + +## ParameterDefinitionBuilder Class + +Builder for creating [ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') for [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +```csharp +public class ParameterDefinitionBuilder +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 ParameterDefinitionBuilder + +| Constructors | | +| :--- | :--- | +| [ParameterDefinitionBuilder(StreamTimeseriesProducer, string, ParameterDefinition)](ParameterDefinitionBuilder.ParameterDefinitionBuilder(StreamTimeseriesProducer,string,ParameterDefinition).md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder(QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer, string, QuixStreams.Telemetry.Models.ParameterDefinition)') | Initializes a new instance of [ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') | + +| Methods | | +| :--- | :--- | +| [AddDefinition(string, string, string)](ParameterDefinitionBuilder.AddDefinition(string,string,string).md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder.AddDefinition(string, string, string)') | Add new parameter definition to the [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer'). Configure it with the builder methods. | +| [SetCustomProperties(string)](ParameterDefinitionBuilder.SetCustomProperties(string).md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder.SetCustomProperties(string)') | Set the custom properties of the parameter | +| [SetFormat(string)](ParameterDefinitionBuilder.SetFormat(string).md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder.SetFormat(string)') | Set the format of the parameter | +| [SetRange(double, double)](ParameterDefinitionBuilder.SetRange(double,double).md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder.SetRange(double, double)') | Set the minimum and maximum range of the parameter | +| [SetUnit(string)](ParameterDefinitionBuilder.SetUnit(string).md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder.SetUnit(string)') | Set the unit of the parameter | diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValue.BinaryValue.md b/temp_dir/client-library/api-reference/csharp/ParameterValue.BinaryValue.md new file mode 100644 index 00000000..cda45804 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValue.BinaryValue.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +## ParameterValue.BinaryValue Property + +The binary value of the parameter + +```csharp +public byte[] BinaryValue { get; set; } +``` + +#### Property Value +[System.Byte](https://docs.microsoft.com/en-us/dotnet/api/System.Byte 'System.Byte')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValue.NumericValue.md b/temp_dir/client-library/api-reference/csharp/ParameterValue.NumericValue.md new file mode 100644 index 00000000..d55180f9 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValue.NumericValue.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +## ParameterValue.NumericValue Property + +The numeric value of the parameter. + +```csharp +public System.Nullable NumericValue { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Double](https://docs.microsoft.com/en-us/dotnet/api/System.Double 'System.Double')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValue.ParameterId.md b/temp_dir/client-library/api-reference/csharp/ParameterValue.ParameterId.md new file mode 100644 index 00000000..61e5083d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValue.ParameterId.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +## ParameterValue.ParameterId Property + +Gets the Parameter Id of the parameter + +```csharp +public string ParameterId { get; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValue.StringValue.md b/temp_dir/client-library/api-reference/csharp/ParameterValue.StringValue.md new file mode 100644 index 00000000..bc468e00 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValue.StringValue.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +## ParameterValue.StringValue Property + +The string value of the parameter + +```csharp +public string StringValue { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValue.Type.md b/temp_dir/client-library/api-reference/csharp/ParameterValue.Type.md new file mode 100644 index 00000000..718f16a0 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValue.Type.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +## ParameterValue.Type Field + +Gets the type of value, which is numeric, string or binary if set, else empty + +```csharp +public readonly ParameterValueType Type; +``` + +#### Field Value +[ParameterValueType](ParameterValueType.md 'QuixStreams.Streaming.Models.ParameterValueType') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValue.Value.md b/temp_dir/client-library/api-reference/csharp/ParameterValue.Value.md new file mode 100644 index 00000000..9339226c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValue.Value.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +## ParameterValue.Value Property + +Gets the underlying value + +```csharp +public object Value { get; } +``` + +#### Property Value +[System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValue.md b/temp_dir/client-library/api-reference/csharp/ParameterValue.md new file mode 100644 index 00000000..493d0611 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValue.md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## ParameterValue Struct + +Represents a single parameter value of either numeric, string or binary type + +```csharp +public readonly struct ParameterValue +``` + +| Fields | | +| :--- | :--- | +| [Type](ParameterValue.Type.md 'QuixStreams.Streaming.Models.ParameterValue.Type') | Gets the type of value, which is numeric, string or binary if set, else empty | + +| Properties | | +| :--- | :--- | +| [BinaryValue](ParameterValue.BinaryValue.md 'QuixStreams.Streaming.Models.ParameterValue.BinaryValue') | The binary value of the parameter | +| [NumericValue](ParameterValue.NumericValue.md 'QuixStreams.Streaming.Models.ParameterValue.NumericValue') | The numeric value of the parameter. | +| [ParameterId](ParameterValue.ParameterId.md 'QuixStreams.Streaming.Models.ParameterValue.ParameterId') | Gets the Parameter Id of the parameter | +| [StringValue](ParameterValue.StringValue.md 'QuixStreams.Streaming.Models.ParameterValue.StringValue') | The string value of the parameter | +| [Value](ParameterValue.Value.md 'QuixStreams.Streaming.Models.ParameterValue.Value') | Gets the underlying value | + +| Operators | | +| :--- | :--- | +| [operator ==(ParameterValue, ParameterValue)](ParameterValue.operator(ParameterValue,ParameterValue).md 'QuixStreams.Streaming.Models.ParameterValue.op_Equality(QuixStreams.Streaming.Models.ParameterValue, QuixStreams.Streaming.Models.ParameterValue)') | Equality comparison of Parameter values | +| [operator !=(ParameterValue, ParameterValue)](ParameterValue.operator!(ParameterValue,ParameterValue).md 'QuixStreams.Streaming.Models.ParameterValue.op_Inequality(QuixStreams.Streaming.Models.ParameterValue, QuixStreams.Streaming.Models.ParameterValue)') | Negative equality comparison of Parameter values | diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValue.operator!(ParameterValue,ParameterValue).md b/temp_dir/client-library/api-reference/csharp/ParameterValue.operator!(ParameterValue,ParameterValue).md new file mode 100644 index 00000000..1e7c5843 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValue.operator!(ParameterValue,ParameterValue).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +## ParameterValue.operator !=(ParameterValue, ParameterValue) Operator + +Negative equality comparison of Parameter values + +```csharp +public static bool operator !=(QuixStreams.Streaming.Models.ParameterValue lhs, QuixStreams.Streaming.Models.ParameterValue rhs); +``` +#### Parameters + + + +`lhs` [ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +First Parameter value to compare + + + +`rhs` [ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +Second Parameter value to compare + +#### Returns +[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') +Whether the values are not equal \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValue.operator(ParameterValue,ParameterValue).md b/temp_dir/client-library/api-reference/csharp/ParameterValue.operator(ParameterValue,ParameterValue).md new file mode 100644 index 00000000..9db573d5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValue.operator(ParameterValue,ParameterValue).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +## ParameterValue.operator ==(ParameterValue, ParameterValue) Operator + +Equality comparison of Parameter values + +```csharp +public static bool operator ==(QuixStreams.Streaming.Models.ParameterValue lhs, QuixStreams.Streaming.Models.ParameterValue rhs); +``` +#### Parameters + + + +`lhs` [ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +First Parameter value to compare + + + +`rhs` [ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +Second Parameter value to compare + +#### Returns +[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') +Whether the values are equal \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/ParameterValueType.md b/temp_dir/client-library/api-reference/csharp/ParameterValueType.md new file mode 100644 index 00000000..0bf4d635 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/ParameterValueType.md @@ -0,0 +1,35 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## ParameterValueType Enum + +Describes the type of a Value of a specific Timestamp / Parameter + +```csharp +public enum ParameterValueType +``` +### Fields + + + +`Binary` 3 + +Binary value + + + +`Empty` 0 + +The value is empty and type cannot be determined + + + +`Numeric` 1 + +Numeric value + + + +`String` 2 + +String value \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixApiException.QuixApiException(string,string,string,HttpStatusCode).md b/temp_dir/client-library/api-reference/csharp/QuixApiException.QuixApiException(string,string,string,HttpStatusCode).md new file mode 100644 index 00000000..441b2e08 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixApiException.QuixApiException(string,string,string,HttpStatusCode).md @@ -0,0 +1,35 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.QuixApi](QuixStreams.Streaming.QuixApi.md 'QuixStreams.Streaming.QuixApi').[QuixApiException](QuixApiException.md 'QuixStreams.Streaming.QuixApi.QuixApiException') + +## QuixApiException(string, string, string, HttpStatusCode) Constructor + +Initializes a new instance of [QuixApiException](QuixApiException.md 'QuixStreams.Streaming.QuixApi.QuixApiException') + +```csharp +public QuixApiException(string endpoint, string msg, string cid, System.Net.HttpStatusCode httpStatusCode); +``` +#### Parameters + + + +`endpoint` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Endpoint used to access Quix Api + + + +`msg` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Error message + + + +`cid` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Correlation Id + + + +`httpStatusCode` [System.Net.HttpStatusCode](https://docs.microsoft.com/en-us/dotnet/api/System.Net.HttpStatusCode 'System.Net.HttpStatusCode') + +Http error code \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixApiException.md b/temp_dir/client-library/api-reference/csharp/QuixApiException.md new file mode 100644 index 00000000..48c8b1d5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixApiException.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.QuixApi](QuixStreams.Streaming.QuixApi.md 'QuixStreams.Streaming.QuixApi') + +## QuixApiException Class + +API exception converted to a c# exception + +```csharp +public class QuixApiException : System.Exception +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 [System.Exception](https://docs.microsoft.com/en-us/dotnet/api/System.Exception 'System.Exception') 🡒 QuixApiException + +| Constructors | | +| :--- | :--- | +| [QuixApiException(string, string, string, HttpStatusCode)](QuixApiException.QuixApiException(string,string,string,HttpStatusCode).md 'QuixStreams.Streaming.QuixApi.QuixApiException.QuixApiException(string, string, string, System.Net.HttpStatusCode)') | Initializes a new instance of [QuixApiException](QuixApiException.md 'QuixStreams.Streaming.QuixApi.QuixApiException') | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.ApiUrl.md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.ApiUrl.md new file mode 100644 index 00000000..286a2e71 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.ApiUrl.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +## QuixStreamingClient.ApiUrl Field + +The base API uri. Defaults to `https://portal-api.platform.quix.ai`, or environment variable `Quix__Portal__Api` if available. + +```csharp +public Uri ApiUrl; +``` + +#### Field Value +[System.Uri](https://docs.microsoft.com/en-us/dotnet/api/System.Uri 'System.Uri') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.CachePeriod.md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.CachePeriod.md new file mode 100644 index 00000000..f85e3015 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.CachePeriod.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +## QuixStreamingClient.CachePeriod Field + +The period for which some API responses will be cached to avoid excessive amount of calls. Defaults to 1 minute. + +```csharp +public TimeSpan CachePeriod; +``` + +#### Field Value +[System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md new file mode 100644 index 00000000..a09449ef --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md @@ -0,0 +1,33 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +## QuixStreamingClient.GetRawTopicConsumer(string, string, Nullable) Method + +Gets a topic consumer capable of subscribing to receive non-quixstreams incoming messages. + +```csharp +public QuixStreams.Streaming.Raw.IRawTopicConsumer GetRawTopicConsumer(string topicIdOrName, string consumerGroup=null, System.Nullable autoOffset=null); +``` +#### Parameters + + + +`topicIdOrName` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Id or name of the topic. If name is provided, workspace will be derived from environment variable or token, in that order + + + +`consumerGroup` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The consumer group id to use for consuming messages. If null, consumer group is not used and only consuming new messages. + + + +`autoOffset` [System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[QuixStreams.Telemetry.Kafka.AutoOffsetReset](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.AutoOffsetReset 'QuixStreams.Telemetry.Kafka.AutoOffsetReset')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') + +The offset to use when there is no saved offset for the consumer group. + +#### Returns +[IRawTopicConsumer](IRawTopicConsumer.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetRawTopicProducer(string).md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetRawTopicProducer(string).md new file mode 100644 index 00000000..6761d5de --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetRawTopicProducer(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +## QuixStreamingClient.GetRawTopicProducer(string) Method + +Gets a topic producer capable of publishing non-quixstreams messages. + +```csharp +public QuixStreams.Streaming.Raw.IRawTopicProducer GetRawTopicProducer(string topicIdOrName); +``` +#### Parameters + + + +`topicIdOrName` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Id or name of the topic. If name is provided, workspace will be derived from environment variable or token, in that order + +#### Returns +[IRawTopicProducer](IRawTopicProducer.md 'QuixStreams.Streaming.Raw.IRawTopicProducer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md new file mode 100644 index 00000000..e0e8232d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md @@ -0,0 +1,39 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +## QuixStreamingClient.GetTopicConsumer(string, string, CommitOptions, AutoOffsetReset) Method + +Gets a topic consumer capable of subscribing to receive incoming streams. + +```csharp +public QuixStreams.Streaming.ITopicConsumer GetTopicConsumer(string topicIdOrName, string consumerGroup=null, QuixStreams.Transport.Fw.CommitOptions options=null, QuixStreams.Telemetry.Kafka.AutoOffsetReset autoOffset=QuixStreams.Telemetry.Kafka.AutoOffsetReset.Latest); +``` +#### Parameters + + + +`topicIdOrName` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Id or name of the topic. If name is provided, workspace will be derived from environment variable or token, in that order + + + +`consumerGroup` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The consumer group id to use for consuming messages. If null, consumer group is not used and only consuming new messages. + + + +`options` [QuixStreams.Transport.Fw.CommitOptions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Transport.Fw.CommitOptions 'QuixStreams.Transport.Fw.CommitOptions') + +The settings to use for committing + + + +`autoOffset` [QuixStreams.Telemetry.Kafka.AutoOffsetReset](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.AutoOffsetReset 'QuixStreams.Telemetry.Kafka.AutoOffsetReset') + +The offset to use when there is no saved offset for the consumer group. + +#### Returns +[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetTopicProducer(string).md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetTopicProducer(string).md new file mode 100644 index 00000000..3b78e76f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.GetTopicProducer(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +## QuixStreamingClient.GetTopicProducer(string) Method + +Gets a topic producer capable of publishing stream messages. + +```csharp +public QuixStreams.Streaming.ITopicProducer GetTopicProducer(string topicIdOrName); +``` +#### Parameters + + + +`topicIdOrName` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Id or name of the topic. If name is provided, workspace will be derived from environment variable or token, in that order + +#### Returns +[ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.QuixStreamingClient(string,bool,IDictionary_string,string_,bool,HttpClient).md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.QuixStreamingClient(string,bool,IDictionary_string,string_,bool,HttpClient).md new file mode 100644 index 00000000..911fe46a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.QuixStreamingClient(string,bool,IDictionary_string,string_,bool,HttpClient).md @@ -0,0 +1,41 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +## QuixStreamingClient(string, bool, IDictionary, bool, HttpClient) Constructor + +Initializes a new instance of [KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') that is capable of creating topic consumer and producers + +```csharp +public QuixStreamingClient(string token=null, bool autoCreateTopics=true, System.Collections.Generic.IDictionary properties=null, bool debug=false, System.Net.Http.HttpClient httpClient=null); +``` +#### Parameters + + + +`token` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The token to use when talking to Quix. When not provided, Quix__Sdk__Token environment variable will be used + + + +`autoCreateTopics` [System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') + +Whether topics should be auto created if they don't exist yet + + + +`properties` [System.Collections.Generic.IDictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IDictionary-2 'System.Collections.Generic.IDictionary`2') + +Additional broker properties + + + +`debug` [System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') + +Whether debugging should be enabled + + + +`httpClient` [System.Net.Http.HttpClient](https://docs.microsoft.com/en-us/dotnet/api/System.Net.Http.HttpClient 'System.Net.Http.HttpClient') + +The http client to use \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfig.md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfig.md new file mode 100644 index 00000000..a346f98e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfig.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +## QuixStreamingClient.TokenValidationConfig Property + +Gets or sets the token validation configuration + +```csharp +public QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfiguration TokenValidationConfig { get; set; } +``` + +#### Property Value +[TokenValidationConfiguration](QuixStreamingClient.TokenValidationConfiguration.md 'QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfiguration') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.Enabled.md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.Enabled.md new file mode 100644 index 00000000..da3e7beb --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.Enabled.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient').[TokenValidationConfiguration](QuixStreamingClient.TokenValidationConfiguration.md 'QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfiguration') + +## QuixStreamingClient.TokenValidationConfiguration.Enabled Field + +Whether token validation and warnings are enabled. Defaults to `true`. + +```csharp +public bool Enabled; +``` + +#### Field Value +[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.WarnAboutNonPatToken.md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.WarnAboutNonPatToken.md new file mode 100644 index 00000000..781404a2 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.WarnAboutNonPatToken.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient').[TokenValidationConfiguration](QuixStreamingClient.TokenValidationConfiguration.md 'QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfiguration') + +## QuixStreamingClient.TokenValidationConfiguration.WarnAboutNonPatToken Field + +Whether to warn if the provided token is not PAT token. Defaults to `true`. + +```csharp +public bool WarnAboutNonPatToken; +``` + +#### Field Value +[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.WarningBeforeExpiry.md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.WarningBeforeExpiry.md new file mode 100644 index 00000000..61695f0f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.WarningBeforeExpiry.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient').[TokenValidationConfiguration](QuixStreamingClient.TokenValidationConfiguration.md 'QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfiguration') + +## QuixStreamingClient.TokenValidationConfiguration.WarningBeforeExpiry Field + +If the token expires within this period, a warning will be displayed. Defaults to `2 days`. Set to null to disable the check + +```csharp +public Nullable WarningBeforeExpiry; +``` + +#### Field Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.md new file mode 100644 index 00000000..0d771de0 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.TokenValidationConfiguration.md @@ -0,0 +1,18 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +## QuixStreamingClient.TokenValidationConfiguration Class + +Token Validation configuration + +```csharp +public class QuixStreamingClient.TokenValidationConfiguration +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 TokenValidationConfiguration + +| Fields | | +| :--- | :--- | +| [Enabled](QuixStreamingClient.TokenValidationConfiguration.Enabled.md 'QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfiguration.Enabled') | Whether token validation and warnings are enabled. Defaults to `true`. | +| [WarnAboutNonPatToken](QuixStreamingClient.TokenValidationConfiguration.WarnAboutNonPatToken.md 'QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfiguration.WarnAboutNonPatToken') | Whether to warn if the provided token is not PAT token. Defaults to `true`. | +| [WarningBeforeExpiry](QuixStreamingClient.TokenValidationConfiguration.WarningBeforeExpiry.md 'QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfiguration.WarningBeforeExpiry') | If the token expires within this period, a warning will be displayed. Defaults to `2 days`. Set to null to disable the check | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.md new file mode 100644 index 00000000..219954fe --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClient.md @@ -0,0 +1,33 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## QuixStreamingClient Class + +Streaming client for Kafka configured automatically using Environment Variables and Quix platform endpoints. +Use this Client when you use this library together with Quix platform. + +```csharp +public class QuixStreamingClient +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 QuixStreamingClient + +| Constructors | | +| :--- | :--- | +| [QuixStreamingClient(string, bool, IDictionary<string,string>, bool, HttpClient)](QuixStreamingClient.QuixStreamingClient(string,bool,IDictionary_string,string_,bool,HttpClient).md 'QuixStreams.Streaming.QuixStreamingClient.QuixStreamingClient(string, bool, System.Collections.Generic.IDictionary, bool, System.Net.Http.HttpClient)') | Initializes a new instance of [KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') that is capable of creating topic consumer and producers | + +| Fields | | +| :--- | :--- | +| [ApiUrl](QuixStreamingClient.ApiUrl.md 'QuixStreams.Streaming.QuixStreamingClient.ApiUrl') | The base API uri. Defaults to `https://portal-api.platform.quix.ai`, or environment variable `Quix__Portal__Api` if available. | +| [CachePeriod](QuixStreamingClient.CachePeriod.md 'QuixStreams.Streaming.QuixStreamingClient.CachePeriod') | The period for which some API responses will be cached to avoid excessive amount of calls. Defaults to 1 minute. | + +| Properties | | +| :--- | :--- | +| [TokenValidationConfig](QuixStreamingClient.TokenValidationConfig.md 'QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfig') | Gets or sets the token validation configuration | + +| Methods | | +| :--- | :--- | +| [GetRawTopicConsumer(string, string, Nullable<AutoOffsetReset>)](QuixStreamingClient.GetRawTopicConsumer(string,string,Nullable_AutoOffsetReset_).md 'QuixStreams.Streaming.QuixStreamingClient.GetRawTopicConsumer(string, string, System.Nullable)') | Gets a topic consumer capable of subscribing to receive non-quixstreams incoming messages. | +| [GetRawTopicProducer(string)](QuixStreamingClient.GetRawTopicProducer(string).md 'QuixStreams.Streaming.QuixStreamingClient.GetRawTopicProducer(string)') | Gets a topic producer capable of publishing non-quixstreams messages. | +| [GetTopicConsumer(string, string, CommitOptions, AutoOffsetReset)](QuixStreamingClient.GetTopicConsumer(string,string,CommitOptions,AutoOffsetReset).md 'QuixStreams.Streaming.QuixStreamingClient.GetTopicConsumer(string, string, QuixStreams.Transport.Fw.CommitOptions, QuixStreams.Telemetry.Kafka.AutoOffsetReset)') | Gets a topic consumer capable of subscribing to receive incoming streams. | +| [GetTopicProducer(string)](QuixStreamingClient.GetTopicProducer(string).md 'QuixStreams.Streaming.QuixStreamingClient.GetTopicProducer(string)') | Gets a topic producer capable of publishing stream messages. | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClientExtensions.GetTopicConsumer(thisQuixStreamingClient,string,string,CommitMode,AutoOffsetReset).md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClientExtensions.GetTopicConsumer(thisQuixStreamingClient,string,string,CommitMode,AutoOffsetReset).md new file mode 100644 index 00000000..6a5e1beb --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClientExtensions.GetTopicConsumer(thisQuixStreamingClient,string,string,CommitMode,AutoOffsetReset).md @@ -0,0 +1,45 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[QuixStreamingClientExtensions](QuixStreamingClientExtensions.md 'QuixStreams.Streaming.QuixStreamingClientExtensions') + +## QuixStreamingClientExtensions.GetTopicConsumer(this QuixStreamingClient, string, string, CommitMode, AutoOffsetReset) Method + +Gets a topic consumer capable of subscribing to receive streams in the specified topic + +```csharp +public static QuixStreams.Streaming.ITopicConsumer GetTopicConsumer(this QuixStreams.Streaming.QuixStreamingClient client, string topicId, string consumerGroup=null, QuixStreams.Streaming.Models.CommitMode commitMode=QuixStreams.Streaming.Models.CommitMode.Automatic, QuixStreams.Telemetry.Kafka.AutoOffsetReset autoOffset=QuixStreams.Telemetry.Kafka.AutoOffsetReset.Latest); +``` +#### Parameters + + + +`client` [QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') + +Quix Streaming client instance + + + +`topicId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Id of the topic. Should look like: myvery-myworkspace-mytopic + + + +`consumerGroup` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The consumer group id to use for consuming messages. If null, consumer group is not used and only consuming new messages. + + + +`commitMode` [CommitMode](CommitMode.md 'QuixStreams.Streaming.Models.CommitMode') + +The commit strategy to use for this topic + + + +`autoOffset` [QuixStreams.Telemetry.Kafka.AutoOffsetReset](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.AutoOffsetReset 'QuixStreams.Telemetry.Kafka.AutoOffsetReset') + +The offset to use when there is no saved offset for the consumer group. + +#### Returns +[ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') +Instance of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreamingClientExtensions.md b/temp_dir/client-library/api-reference/csharp/QuixStreamingClientExtensions.md new file mode 100644 index 00000000..600a7fba --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreamingClientExtensions.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## QuixStreamingClientExtensions Class + +Quix Streaming Client extensions + +```csharp +public static class QuixStreamingClientExtensions +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 QuixStreamingClientExtensions + +| Methods | | +| :--- | :--- | +| [GetTopicConsumer(this QuixStreamingClient, string, string, CommitMode, AutoOffsetReset)](QuixStreamingClientExtensions.GetTopicConsumer(thisQuixStreamingClient,string,string,CommitMode,AutoOffsetReset).md 'QuixStreams.Streaming.QuixStreamingClientExtensions.GetTopicConsumer(this QuixStreams.Streaming.QuixStreamingClient, string, string, QuixStreams.Streaming.Models.CommitMode, QuixStreams.Telemetry.Kafka.AutoOffsetReset)') | Gets a topic consumer capable of subscribing to receive streams in the specified topic | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Configuration.md b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Configuration.md new file mode 100644 index 00000000..8383169f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Configuration.md @@ -0,0 +1,11 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming.Configuration Namespace + +| Classes | | +| :--- | :--- | +| [SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') | A class representing security options for configuring SSL encryption with SASL authentication in Kafka. | + +| Enums | | +| :--- | :--- | +| [SaslMechanism](SaslMechanism.md 'QuixStreams.Streaming.Configuration.SaslMechanism') | Kafka SASL mechanism | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Exceptions.md b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Exceptions.md new file mode 100644 index 00000000..0141ec5f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Exceptions.md @@ -0,0 +1,9 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming.Exceptions Namespace + +| Classes | | +| :--- | :--- | +| [InvalidConfigurationException](InvalidConfigurationException.md 'QuixStreams.Streaming.Exceptions.InvalidConfigurationException') | Exception due to an invalid configuration during the connection setup of a Quix streaming client | +| [InvalidTokenException](InvalidTokenException.md 'QuixStreams.Streaming.Exceptions.InvalidTokenException') | Exception due to an invalid token during the connection setup of a Quix streaming client | +| [StreamClosedException](StreamClosedException.md 'QuixStreams.Streaming.Exceptions.StreamClosedException') | Invalid operation due to the stream being closed already | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.StreamConsumer.md b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.StreamConsumer.md new file mode 100644 index 00000000..97eb9ec0 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.StreamConsumer.md @@ -0,0 +1,12 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming.Models.StreamConsumer Namespace + +| Classes | | +| :--- | :--- | +| [StreamEventsConsumer](StreamEventsConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer') | Consumer for streams, which raises [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') and [QuixStreams.Telemetry.Models.EventDefinitions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventDefinitions 'QuixStreams.Telemetry.Models.EventDefinitions') related messages | +| [StreamPropertiesConsumer](StreamPropertiesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer') | Represents properties and metadata of the stream.
All changes to these properties are automatically populated to this class. | +| [StreamTimeseriesConsumer](StreamTimeseriesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer') | Consumer for streams, which raises [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') and [QuixStreams.Telemetry.Models.ParameterDefinitions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.ParameterDefinitions 'QuixStreams.Telemetry.Models.ParameterDefinitions') related messages | +| [TimeseriesBufferConsumer](TimeseriesBufferConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer') | Represents a class for consuming data from a stream in a buffered manner. | +| [TimeseriesDataRawReadEventArgs](TimeseriesDataRawReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs') | | +| [TimeseriesDataReadEventArgs](TimeseriesDataReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataReadEventArgs') | | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.StreamProducer.md b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.StreamProducer.md new file mode 100644 index 00000000..63ef0e20 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.StreamProducer.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming.Models.StreamProducer Namespace + +| Classes | | +| :--- | :--- | +| [EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') | Builder for creating [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') packages within the [StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') | +| [EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') | Builder for creating [QuixStreams.Telemetry.Models.EventDefinitions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventDefinitions 'QuixStreams.Telemetry.Models.EventDefinitions') within [StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') | +| [ObservableDictionary<TKey,TValue>](ObservableDictionary_TKey,TValue_.md 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary') | Observable dictionary based on https://codereview.stackexchange.com/questions/202663/simple-observabledictionary-implementation | +| [ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') | Builder for creating [ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') for [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') | +| [StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') | Helper class for producing [QuixStreams.Telemetry.Models.EventDefinitions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventDefinitions 'QuixStreams.Telemetry.Models.EventDefinitions') and [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') | +| [StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') | Represents properties and metadata of the stream.
All changes to these properties are automatically published to the underlying stream. | +| [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') | Helper class for producing [ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') and [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') | +| [TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') | A class for producing timeseries data to an [IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') in a buffered manner. | +| [TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') | Builder for managing [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') instances on [TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.md b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.md new file mode 100644 index 00000000..992cb60a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Models.md @@ -0,0 +1,22 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming.Models Namespace + +| Classes | | +| :--- | :--- | +| [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') | Represents a single point in time with event value and tags attached to it | +| [EventDefinition](EventDefinition.md 'QuixStreams.Streaming.Models.EventDefinition') | Describes additional context for the event | +| [ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') | Describes additional context for the parameter | +| [TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') | Represents a class used to consume and produce stream messages in a buffered manner. | +| [TimeseriesBufferConfiguration](TimeseriesBufferConfiguration.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration') | Describes the configuration for timeseries buffers | +| [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') | Represents a collection of [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') | + +| Structs | | +| :--- | :--- | +| [ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') | Represents a single parameter value of either numeric, string or binary type | +| [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') | Represents a single point in time with parameter values and tags attached to that time | + +| Enums | | +| :--- | :--- | +| [CommitMode](CommitMode.md 'QuixStreams.Streaming.Models.CommitMode') | The mode for committing packages | +| [ParameterValueType](ParameterValueType.md 'QuixStreams.Streaming.Models.ParameterValueType') | Describes the type of a Value of a specific Timestamp / Parameter | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.QuixApi.md b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.QuixApi.md new file mode 100644 index 00000000..ec0df28d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.QuixApi.md @@ -0,0 +1,7 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming.QuixApi Namespace + +| Classes | | +| :--- | :--- | +| [QuixApiException](QuixApiException.md 'QuixStreams.Streaming.QuixApi.QuixApiException') | API exception converted to a c# exception | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Raw.md b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Raw.md new file mode 100644 index 00000000..bd69e910 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Raw.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming.Raw Namespace + +| Classes | | +| :--- | :--- | +| [RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') | The message read from topic without any transformation | +| [RawTopicConsumer](RawTopicConsumer.md 'QuixStreams.Streaming.Raw.RawTopicConsumer') | Topic class to read incoming raw messages (capable to read non-quixstreams messages) | +| [RawTopicProducer](RawTopicProducer.md 'QuixStreams.Streaming.Raw.RawTopicProducer') | Class to produce raw messages into a Topic (capable to producing non-quixstreams messages) | + +| Interfaces | | +| :--- | :--- | +| [IRawTopicConsumer](IRawTopicConsumer.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer') | Interface to subscribe to incoming raw messages (capable to read non-quixstreams messages) | +| [IRawTopicProducer](IRawTopicProducer.md 'QuixStreams.Streaming.Raw.IRawTopicProducer') | Interface to publish raw messages into a topic (capable to producing non-quixstreams messages) | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Utils.md b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Utils.md new file mode 100644 index 00000000..87ec4957 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.Utils.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming.Utils Namespace + +| Classes | | +| :--- | :--- | +| [CodecSettings](CodecSettings.md 'QuixStreams.Streaming.Utils.CodecSettings') | Global Codec settings for streams. | +| [QuixUtils](QuixUtils.md 'QuixStreams.Streaming.Utils.QuixUtils') | Quix extension methods used across the library | + +| Structs | | +| :--- | :--- | +| [TimeseriesDataTimestampTags](TimeseriesDataTimestampTags.md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestampTags') | ReadOnlyDictionary which returns the Tags of the current Timestamp | +| [TimeseriesDataTimestamps](TimeseriesDataTimestamps.md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestamps') | Enumerable which returns the Timestamps of the current [QuixStreams.Streaming.Utils.TimeseriesDataTimestamps.TimeseriesData](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Streaming.Utils.TimeseriesDataTimestamps.TimeseriesData 'QuixStreams.Streaming.Utils.TimeseriesDataTimestamps.TimeseriesData') | diff --git a/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.md b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.md new file mode 100644 index 00000000..5fa183b1 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixStreams.Streaming.md @@ -0,0 +1,25 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming Namespace + +| Classes | | +| :--- | :--- | +| [App](App.md 'QuixStreams.Streaming.App') | Provides utilities to handle default streaming behaviors and automatic resource cleanup on shutdown. | +| [KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') | A Kafka streaming client capable of creating topic consumer and producers. | +| [KafkaStreamingClientExtensions](KafkaStreamingClientExtensions.md 'QuixStreams.Streaming.KafkaStreamingClientExtensions') | Extensions for Streaming Client class | +| [QuixStreamingClient](QuixStreamingClient.md 'QuixStreams.Streaming.QuixStreamingClient') | Streaming client for Kafka configured automatically using Environment Variables and Quix platform endpoints.
Use this Client when you use this library together with Quix platform. | +| [QuixStreamingClient.TokenValidationConfiguration](QuixStreamingClient.TokenValidationConfiguration.md 'QuixStreams.Streaming.QuixStreamingClient.TokenValidationConfiguration') | Token Validation configuration | +| [QuixStreamingClientExtensions](QuixStreamingClientExtensions.md 'QuixStreams.Streaming.QuixStreamingClientExtensions') | Quix Streaming Client extensions | +| [TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') | Implementation of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') to consume incoming streams | +| [TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') | Implementation of [ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') to produce outgoing streams | + +| Structs | | +| :--- | :--- | +| [TimeseriesDataTimestampValues](TimeseriesDataTimestampValues.md 'QuixStreams.Streaming.TimeseriesDataTimestampValues') | Enumerable which returns the the Parameter Values of the current [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') | + +| Interfaces | | +| :--- | :--- | +| [IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') | Stream reader interface. Stands for a new stream read from the platform.
Allows to read the stream data received from a topic. | +| [IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') | Stands for a new stream that we want to send to the platform.
It provides you helper properties to stream data the platform like parameter values, events, definitions and all the information you can persist to the platform. | +| [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') | Interface to subscribe to incoming streams | +| [ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') | Interface to produce outgoing streams | diff --git a/temp_dir/client-library/api-reference/csharp/QuixUtils.TryGetWorkspaceIdPrefix(string,string).md b/temp_dir/client-library/api-reference/csharp/QuixUtils.TryGetWorkspaceIdPrefix(string,string).md new file mode 100644 index 00000000..65d64ca2 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixUtils.TryGetWorkspaceIdPrefix(string,string).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils').[QuixUtils](QuixUtils.md 'QuixStreams.Streaming.Utils.QuixUtils') + +## QuixUtils.TryGetWorkspaceIdPrefix(string, string) Method + +Extract WorkspaceId from TopicId information + +```csharp +public static bool TryGetWorkspaceIdPrefix(string topicId, out string workspaceId); +``` +#### Parameters + + + +`topicId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Topic Id + + + +`workspaceId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Workspace Id (output) + +#### Returns +[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') +Whether the function could extract the Workspace Id information \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/QuixUtils.md b/temp_dir/client-library/api-reference/csharp/QuixUtils.md new file mode 100644 index 00000000..df6f8a5a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/QuixUtils.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils') + +## QuixUtils Class + +Quix extension methods used across the library + +```csharp +public static class QuixUtils +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 QuixUtils + +| Methods | | +| :--- | :--- | +| [TryGetWorkspaceIdPrefix(string, string)](QuixUtils.TryGetWorkspaceIdPrefix(string,string).md 'QuixStreams.Streaming.Utils.QuixUtils.TryGetWorkspaceIdPrefix(string, string)') | Extract WorkspaceId from TopicId information | diff --git a/temp_dir/client-library/api-reference/csharp/RawMessage.Key.md b/temp_dir/client-library/api-reference/csharp/RawMessage.Key.md new file mode 100644 index 00000000..6fd0725b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawMessage.Key.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') + +## RawMessage.Key Field + +The optional key of the message. Depending on broker and message it is not guaranteed + +```csharp +public byte[] Key; +``` + +#### Field Value +[System.Byte](https://docs.microsoft.com/en-us/dotnet/api/System.Byte 'System.Byte')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawMessage.Metadata.md b/temp_dir/client-library/api-reference/csharp/RawMessage.Metadata.md new file mode 100644 index 00000000..487ca465 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawMessage.Metadata.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') + +## RawMessage.Metadata Property + +The broker specific optional metadata + +```csharp +public System.Collections.ObjectModel.ReadOnlyDictionary Metadata { get; } +``` + +#### Property Value +[System.Collections.ObjectModel.ReadOnlyDictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.ObjectModel.ReadOnlyDictionary-2 'System.Collections.ObjectModel.ReadOnlyDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.ObjectModel.ReadOnlyDictionary-2 'System.Collections.ObjectModel.ReadOnlyDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.ObjectModel.ReadOnlyDictionary-2 'System.Collections.ObjectModel.ReadOnlyDictionary`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawMessage.RawMessage(byte[]).md b/temp_dir/client-library/api-reference/csharp/RawMessage.RawMessage(byte[]).md new file mode 100644 index 00000000..5f72dfe9 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawMessage.RawMessage(byte[]).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') + +## RawMessage(byte[]) Constructor + +Initializes a new instance of [RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') without a Key + +```csharp +public RawMessage(byte[] value); +``` +#### Parameters + + + +`value` [System.Byte](https://docs.microsoft.com/en-us/dotnet/api/System.Byte 'System.Byte')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') + +Value of the message \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawMessage.RawMessage(byte[],byte[]).md b/temp_dir/client-library/api-reference/csharp/RawMessage.RawMessage(byte[],byte[]).md new file mode 100644 index 00000000..2a9bde50 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawMessage.RawMessage(byte[],byte[]).md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') + +## RawMessage(byte[], byte[]) Constructor + +Initializes a new instance of [RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') + +```csharp +public RawMessage(byte[] key, byte[] value); +``` +#### Parameters + + + +`key` [System.Byte](https://docs.microsoft.com/en-us/dotnet/api/System.Byte 'System.Byte')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') + +Key of the message + + + +`value` [System.Byte](https://docs.microsoft.com/en-us/dotnet/api/System.Byte 'System.Byte')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') + +Value of the message \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawMessage.Value.md b/temp_dir/client-library/api-reference/csharp/RawMessage.Value.md new file mode 100644 index 00000000..b012ee44 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawMessage.Value.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') + +## RawMessage.Value Field + +The value of the message + +```csharp +public byte[] Value; +``` + +#### Field Value +[System.Byte](https://docs.microsoft.com/en-us/dotnet/api/System.Byte 'System.Byte')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawMessage.md b/temp_dir/client-library/api-reference/csharp/RawMessage.md new file mode 100644 index 00000000..f5d4b771 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawMessage.md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw') + +## RawMessage Class + +The message read from topic without any transformation + +```csharp +public class RawMessage +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 RawMessage + +| Constructors | | +| :--- | :--- | +| [RawMessage(byte[])](RawMessage.RawMessage(byte[]).md 'QuixStreams.Streaming.Raw.RawMessage.RawMessage(byte[])') | Initializes a new instance of [RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') without a Key | +| [RawMessage(byte[], byte[])](RawMessage.RawMessage(byte[],byte[]).md 'QuixStreams.Streaming.Raw.RawMessage.RawMessage(byte[], byte[])') | Initializes a new instance of [RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') | + +| Fields | | +| :--- | :--- | +| [Key](RawMessage.Key.md 'QuixStreams.Streaming.Raw.RawMessage.Key') | The optional key of the message. Depending on broker and message it is not guaranteed | +| [Value](RawMessage.Value.md 'QuixStreams.Streaming.Raw.RawMessage.Value') | The value of the message | + +| Properties | | +| :--- | :--- | +| [Metadata](RawMessage.Metadata.md 'QuixStreams.Streaming.Raw.RawMessage.Metadata') | The broker specific optional metadata | diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnDisposed.md b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnDisposed.md new file mode 100644 index 00000000..66449f53 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnDisposed.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawTopicConsumer](RawTopicConsumer.md 'QuixStreams.Streaming.Raw.RawTopicConsumer') + +## RawTopicConsumer.OnDisposed Event + +Raised when the resource is disposed + +```csharp +public event EventHandler OnDisposed; +``` + +Implements [OnDisposed](IRawTopicConsumer.OnDisposed.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer.OnDisposed') + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnErrorOccurred.md b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnErrorOccurred.md new file mode 100644 index 00000000..df784580 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnErrorOccurred.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawTopicConsumer](RawTopicConsumer.md 'QuixStreams.Streaming.Raw.RawTopicConsumer') + +## RawTopicConsumer.OnErrorOccurred Event + +Event raised when a new error occurs + +```csharp +public event EventHandler OnErrorOccurred; +``` + +Implements [OnErrorOccurred](IRawTopicConsumer.OnErrorOccurred.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer.OnErrorOccurred') + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[System.Exception](https://docs.microsoft.com/en-us/dotnet/api/System.Exception 'System.Exception')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnMessageReceived.md b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnMessageReceived.md new file mode 100644 index 00000000..f428a467 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.OnMessageReceived.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawTopicConsumer](RawTopicConsumer.md 'QuixStreams.Streaming.Raw.RawTopicConsumer') + +## RawTopicConsumer.OnMessageReceived Event + +Event raised when a message is received from the topic + +```csharp +public event EventHandler OnMessageReceived; +``` + +Implements [OnMessageReceived](IRawTopicConsumer.OnMessageReceived.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer.OnMessageReceived') + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.RawTopicConsumer(string,string,string,Dictionary_string,string_,Nullable_AutoOffsetReset_).md b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.RawTopicConsumer(string,string,string,Dictionary_string,string_,Nullable_AutoOffsetReset_).md new file mode 100644 index 00000000..a839e41b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.RawTopicConsumer(string,string,string,Dictionary_string,string_,Nullable_AutoOffsetReset_).md @@ -0,0 +1,41 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawTopicConsumer](RawTopicConsumer.md 'QuixStreams.Streaming.Raw.RawTopicConsumer') + +## RawTopicConsumer(string, string, string, Dictionary, Nullable) Constructor + +Initializes a new instance of [RawTopicConsumer](RawTopicConsumer.md 'QuixStreams.Streaming.Raw.RawTopicConsumer') + +```csharp +public RawTopicConsumer(string brokerAddress, string topicName, string consumerGroup, System.Collections.Generic.Dictionary brokerProperties=null, System.Nullable autoOffset=null); +``` +#### Parameters + + + +`brokerAddress` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Address of Kafka cluster. + + + +`topicName` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Name of the topic. + + + +`consumerGroup` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The consumer group id to use for consuming messages. If null, consumer group is not used and only consuming new messages. + + + +`brokerProperties` [System.Collections.Generic.Dictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2') + +Additional broker properties + + + +`autoOffset` [System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[QuixStreams.Telemetry.Kafka.AutoOffsetReset](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.AutoOffsetReset 'QuixStreams.Telemetry.Kafka.AutoOffsetReset')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') + +The offset to use when there is no saved offset for the consumer group. \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.Subscribe().md b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.Subscribe().md new file mode 100644 index 00000000..1133425f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.Subscribe().md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawTopicConsumer](RawTopicConsumer.md 'QuixStreams.Streaming.Raw.RawTopicConsumer') + +## RawTopicConsumer.Subscribe() Method + +Start reading streams. +Use 'OnMessageReceived' event to read messages after executing this method + +```csharp +public void Subscribe(); +``` + +Implements [Subscribe()](IRawTopicConsumer.Subscribe().md 'QuixStreams.Streaming.Raw.IRawTopicConsumer.Subscribe()') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.md b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.md new file mode 100644 index 00000000..f344f950 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicConsumer.md @@ -0,0 +1,30 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw') + +## RawTopicConsumer Class + +Topic class to read incoming raw messages (capable to read non-quixstreams messages) + +```csharp +public class RawTopicConsumer : +QuixStreams.Streaming.Raw.IRawTopicConsumer, +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 RawTopicConsumer + +Implements [IRawTopicConsumer](IRawTopicConsumer.md 'QuixStreams.Streaming.Raw.IRawTopicConsumer'), [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Constructors | | +| :--- | :--- | +| [RawTopicConsumer(string, string, string, Dictionary<string,string>, Nullable<AutoOffsetReset>)](RawTopicConsumer.RawTopicConsumer(string,string,string,Dictionary_string,string_,Nullable_AutoOffsetReset_).md 'QuixStreams.Streaming.Raw.RawTopicConsumer.RawTopicConsumer(string, string, string, System.Collections.Generic.Dictionary, System.Nullable)') | Initializes a new instance of [RawTopicConsumer](RawTopicConsumer.md 'QuixStreams.Streaming.Raw.RawTopicConsumer') | + +| Methods | | +| :--- | :--- | +| [Subscribe()](RawTopicConsumer.Subscribe().md 'QuixStreams.Streaming.Raw.RawTopicConsumer.Subscribe()') | Start reading streams.
Use 'OnMessageReceived' event to read messages after executing this method | + +| Events | | +| :--- | :--- | +| [OnDisposed](RawTopicConsumer.OnDisposed.md 'QuixStreams.Streaming.Raw.RawTopicConsumer.OnDisposed') | Raised when the resource is disposed | +| [OnErrorOccurred](RawTopicConsumer.OnErrorOccurred.md 'QuixStreams.Streaming.Raw.RawTopicConsumer.OnErrorOccurred') | Event raised when a new error occurs | +| [OnMessageReceived](RawTopicConsumer.OnMessageReceived.md 'QuixStreams.Streaming.Raw.RawTopicConsumer.OnMessageReceived') | Event raised when a message is received from the topic | diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicProducer.OnDisposed.md b/temp_dir/client-library/api-reference/csharp/RawTopicProducer.OnDisposed.md new file mode 100644 index 00000000..86c0427c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicProducer.OnDisposed.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawTopicProducer](RawTopicProducer.md 'QuixStreams.Streaming.Raw.RawTopicProducer') + +## RawTopicProducer.OnDisposed Event + +Raised when the resource is disposed + +```csharp +public event EventHandler OnDisposed; +``` + +Implements [OnDisposed](IRawTopicProducer.OnDisposed.md 'QuixStreams.Streaming.Raw.IRawTopicProducer.OnDisposed') + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicProducer.Publish(RawMessage).md b/temp_dir/client-library/api-reference/csharp/RawTopicProducer.Publish(RawMessage).md new file mode 100644 index 00000000..02992e9a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicProducer.Publish(RawMessage).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawTopicProducer](RawTopicProducer.md 'QuixStreams.Streaming.Raw.RawTopicProducer') + +## RawTopicProducer.Publish(RawMessage) Method + +Publish data to the topic + +```csharp +public void Publish(QuixStreams.Streaming.Raw.RawMessage message); +``` +#### Parameters + + + +`message` [RawMessage](RawMessage.md 'QuixStreams.Streaming.Raw.RawMessage') + +Implements [Publish(RawMessage)](IRawTopicProducer.Publish(RawMessage).md 'QuixStreams.Streaming.Raw.IRawTopicProducer.Publish(QuixStreams.Streaming.Raw.RawMessage)') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicProducer.RawTopicProducer(string,string,Dictionary_string,string_).md b/temp_dir/client-library/api-reference/csharp/RawTopicProducer.RawTopicProducer(string,string,Dictionary_string,string_).md new file mode 100644 index 00000000..36563eb7 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicProducer.RawTopicProducer(string,string,Dictionary_string,string_).md @@ -0,0 +1,29 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw').[RawTopicProducer](RawTopicProducer.md 'QuixStreams.Streaming.Raw.RawTopicProducer') + +## RawTopicProducer(string, string, Dictionary) Constructor + +Initializes a new instance of [RawTopicProducer](RawTopicProducer.md 'QuixStreams.Streaming.Raw.RawTopicProducer') + +```csharp +public RawTopicProducer(string brokerAddress, string topicName, System.Collections.Generic.Dictionary brokerProperties=null); +``` +#### Parameters + + + +`brokerAddress` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Address of Kafka cluster. + + + +`topicName` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Name of the topic. + + + +`brokerProperties` [System.Collections.Generic.Dictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2') + +Additional broker properties \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/RawTopicProducer.md b/temp_dir/client-library/api-reference/csharp/RawTopicProducer.md new file mode 100644 index 00000000..303662d8 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/RawTopicProducer.md @@ -0,0 +1,28 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw') + +## RawTopicProducer Class + +Class to produce raw messages into a Topic (capable to producing non-quixstreams messages) + +```csharp +public class RawTopicProducer : +QuixStreams.Streaming.Raw.IRawTopicProducer, +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 RawTopicProducer + +Implements [IRawTopicProducer](IRawTopicProducer.md 'QuixStreams.Streaming.Raw.IRawTopicProducer'), [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Constructors | | +| :--- | :--- | +| [RawTopicProducer(string, string, Dictionary<string,string>)](RawTopicProducer.RawTopicProducer(string,string,Dictionary_string,string_).md 'QuixStreams.Streaming.Raw.RawTopicProducer.RawTopicProducer(string, string, System.Collections.Generic.Dictionary)') | Initializes a new instance of [RawTopicProducer](RawTopicProducer.md 'QuixStreams.Streaming.Raw.RawTopicProducer') | + +| Methods | | +| :--- | :--- | +| [Publish(RawMessage)](RawTopicProducer.Publish(RawMessage).md 'QuixStreams.Streaming.Raw.RawTopicProducer.Publish(QuixStreams.Streaming.Raw.RawMessage)') | Publish data to the topic | + +| Events | | +| :--- | :--- | +| [OnDisposed](RawTopicProducer.OnDisposed.md 'QuixStreams.Streaming.Raw.RawTopicProducer.OnDisposed') | Raised when the resource is disposed | diff --git a/temp_dir/client-library/api-reference/csharp/SaslMechanism.md b/temp_dir/client-library/api-reference/csharp/SaslMechanism.md new file mode 100644 index 00000000..1000d70b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SaslMechanism.md @@ -0,0 +1,41 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration') + +## SaslMechanism Enum + +Kafka SASL mechanism + +```csharp +public enum SaslMechanism +``` +### Fields + + + +`Gssapi` 0 + +GSSAPI + + + +`OAuthBearer` 4 + +OAUTHBEARER + + + +`Plain` 1 + +PLAIN + + + +`ScramSha256` 2 + +SCRAM-SHA-256 + + + +`ScramSha512` 3 + +SCRAM-SHA-512 \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/SecurityOptions.Password.md b/temp_dir/client-library/api-reference/csharp/SecurityOptions.Password.md new file mode 100644 index 00000000..01f1c2bc --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SecurityOptions.Password.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration').[SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') + +## SecurityOptions.Password Property + +The password for SASL authentication + +```csharp +public string Password { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/SecurityOptions.SaslMechanism.md b/temp_dir/client-library/api-reference/csharp/SecurityOptions.SaslMechanism.md new file mode 100644 index 00000000..c928a451 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SecurityOptions.SaslMechanism.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration').[SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') + +## SecurityOptions.SaslMechanism Property + +The SASL mechanism to use. + +```csharp +public System.Nullable SaslMechanism { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[SaslMechanism](SaslMechanism.md 'QuixStreams.Streaming.Configuration.SaslMechanism')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/SecurityOptions.SecurityOptions().md b/temp_dir/client-library/api-reference/csharp/SecurityOptions.SecurityOptions().md new file mode 100644 index 00000000..00a2f4f3 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SecurityOptions.SecurityOptions().md @@ -0,0 +1,10 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration').[SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') + +## SecurityOptions() Constructor + +For deserialization when binding to Configurations like Appsettings + +```csharp +public SecurityOptions(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/SecurityOptions.SecurityOptions(string,string,string,SaslMechanism).md b/temp_dir/client-library/api-reference/csharp/SecurityOptions.SecurityOptions(string,string,string,SaslMechanism).md new file mode 100644 index 00000000..0ef971e8 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SecurityOptions.SecurityOptions(string,string,string,SaslMechanism).md @@ -0,0 +1,35 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration').[SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') + +## SecurityOptions(string, string, string, SaslMechanism) Constructor + +Initializes a new instance of [SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') that is configured for SSL encryption with SASL authentication + +```csharp +public SecurityOptions(string sslCertificates, string username, string password, QuixStreams.Streaming.Configuration.SaslMechanism saslMechanism=QuixStreams.Streaming.Configuration.SaslMechanism.ScramSha256); +``` +#### Parameters + + + +`sslCertificates` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The path to the folder or file containing the certificate authority certificate(s) to validate the ssl connection. Example: "./certificates/ca.cert" + + + +`username` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The username for the SASL authentication + + + +`password` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The password for the SASL authentication + + + +`saslMechanism` [SaslMechanism](SaslMechanism.md 'QuixStreams.Streaming.Configuration.SaslMechanism') + +The SASL mechanism to use. Defaulting to ScramSha256 \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/SecurityOptions.SslCertificates.md b/temp_dir/client-library/api-reference/csharp/SecurityOptions.SslCertificates.md new file mode 100644 index 00000000..ab3c74b7 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SecurityOptions.SslCertificates.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration').[SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') + +## SecurityOptions.SslCertificates Property + +The path to the folder or file containing the certificate authority certificate(s) to validate the ssl connection. + +```csharp +public string SslCertificates { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/SecurityOptions.UseSasl.md b/temp_dir/client-library/api-reference/csharp/SecurityOptions.UseSasl.md new file mode 100644 index 00000000..139136e1 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SecurityOptions.UseSasl.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration').[SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') + +## SecurityOptions.UseSasl Property + +Use authentication + +```csharp +public bool UseSasl { get; set; } +``` + +#### Property Value +[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/SecurityOptions.UseSsl.md b/temp_dir/client-library/api-reference/csharp/SecurityOptions.UseSsl.md new file mode 100644 index 00000000..88d69c5d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SecurityOptions.UseSsl.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration').[SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') + +## SecurityOptions.UseSsl Property + +Use SSL + +```csharp +public bool UseSsl { get; set; } +``` + +#### Property Value +[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/SecurityOptions.Username.md b/temp_dir/client-library/api-reference/csharp/SecurityOptions.Username.md new file mode 100644 index 00000000..1baf4e8a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SecurityOptions.Username.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration').[SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') + +## SecurityOptions.Username Property + +The username for SASL authentication. + +```csharp +public string Username { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/SecurityOptions.md b/temp_dir/client-library/api-reference/csharp/SecurityOptions.md new file mode 100644 index 00000000..0c00d951 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/SecurityOptions.md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration') + +## SecurityOptions Class + +A class representing security options for configuring SSL encryption with SASL authentication in Kafka. + +```csharp +public class SecurityOptions +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 SecurityOptions + +| Constructors | | +| :--- | :--- | +| [SecurityOptions()](SecurityOptions.SecurityOptions().md 'QuixStreams.Streaming.Configuration.SecurityOptions.SecurityOptions()') | For deserialization when binding to Configurations like Appsettings | +| [SecurityOptions(string, string, string, SaslMechanism)](SecurityOptions.SecurityOptions(string,string,string,SaslMechanism).md 'QuixStreams.Streaming.Configuration.SecurityOptions.SecurityOptions(string, string, string, QuixStreams.Streaming.Configuration.SaslMechanism)') | Initializes a new instance of [SecurityOptions](SecurityOptions.md 'QuixStreams.Streaming.Configuration.SecurityOptions') that is configured for SSL encryption with SASL authentication | + +| Properties | | +| :--- | :--- | +| [Password](SecurityOptions.Password.md 'QuixStreams.Streaming.Configuration.SecurityOptions.Password') | The password for SASL authentication | +| [SaslMechanism](SecurityOptions.SaslMechanism.md 'QuixStreams.Streaming.Configuration.SecurityOptions.SaslMechanism') | The SASL mechanism to use. | +| [SslCertificates](SecurityOptions.SslCertificates.md 'QuixStreams.Streaming.Configuration.SecurityOptions.SslCertificates') | The path to the folder or file containing the certificate authority certificate(s) to validate the ssl connection. | +| [UseSasl](SecurityOptions.UseSasl.md 'QuixStreams.Streaming.Configuration.SecurityOptions.UseSasl') | Use authentication | +| [UseSsl](SecurityOptions.UseSsl.md 'QuixStreams.Streaming.Configuration.SecurityOptions.UseSsl') | Use SSL | +| [Username](SecurityOptions.Username.md 'QuixStreams.Streaming.Configuration.SecurityOptions.Username') | The username for SASL authentication. | diff --git a/temp_dir/client-library/api-reference/csharp/StreamClosedException.StreamClosedException(string).md b/temp_dir/client-library/api-reference/csharp/StreamClosedException.StreamClosedException(string).md new file mode 100644 index 00000000..e5322d12 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamClosedException.StreamClosedException(string).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Exceptions](QuixStreams.Streaming.Exceptions.md 'QuixStreams.Streaming.Exceptions').[StreamClosedException](StreamClosedException.md 'QuixStreams.Streaming.Exceptions.StreamClosedException') + +## StreamClosedException(string) Constructor + +Initializes a new instance of [StreamClosedException](StreamClosedException.md 'QuixStreams.Streaming.Exceptions.StreamClosedException') + +```csharp +public StreamClosedException(string message); +``` +#### Parameters + + + +`message` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The message \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamClosedException.md b/temp_dir/client-library/api-reference/csharp/StreamClosedException.md new file mode 100644 index 00000000..775fcfa5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamClosedException.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Exceptions](QuixStreams.Streaming.Exceptions.md 'QuixStreams.Streaming.Exceptions') + +## StreamClosedException Class + +Invalid operation due to the stream being closed already + +```csharp +public class StreamClosedException : System.InvalidOperationException +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 [System.Exception](https://docs.microsoft.com/en-us/dotnet/api/System.Exception 'System.Exception') 🡒 [System.SystemException](https://docs.microsoft.com/en-us/dotnet/api/System.SystemException 'System.SystemException') 🡒 [System.InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/System.InvalidOperationException 'System.InvalidOperationException') 🡒 StreamClosedException + +| Constructors | | +| :--- | :--- | +| [StreamClosedException(string)](StreamClosedException.StreamClosedException(string).md 'QuixStreams.Streaming.Exceptions.StreamClosedException.StreamClosedException(string)') | Initializes a new instance of [StreamClosedException](StreamClosedException.md 'QuixStreams.Streaming.Exceptions.StreamClosedException') | diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.Definitions.md b/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.Definitions.md new file mode 100644 index 00000000..f39953ac --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.Definitions.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamEventsConsumer](StreamEventsConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer') + +## StreamEventsConsumer.Definitions Property + +Gets the latest set of event definitions + +```csharp +public System.Collections.Generic.IList Definitions { get; set; } +``` + +#### Property Value +[System.Collections.Generic.IList<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IList-1 'System.Collections.Generic.IList`1')[EventDefinition](EventDefinition.md 'QuixStreams.Streaming.Models.EventDefinition')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IList-1 'System.Collections.Generic.IList`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.OnDataReceived.md b/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.OnDataReceived.md new file mode 100644 index 00000000..fdddbc39 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.OnDataReceived.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamEventsConsumer](StreamEventsConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer') + +## StreamEventsConsumer.OnDataReceived Event + +Raised when an events data package is received for the stream + +```csharp +public event EventHandler OnDataReceived; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[QuixStreams.Streaming.Models.StreamConsumer.EventDataReadEventArgs](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Streaming.Models.StreamConsumer.EventDataReadEventArgs 'QuixStreams.Streaming.Models.StreamConsumer.EventDataReadEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.OnDefinitionsChanged.md b/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.OnDefinitionsChanged.md new file mode 100644 index 00000000..8f9d42d4 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.OnDefinitionsChanged.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamEventsConsumer](StreamEventsConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer') + +## StreamEventsConsumer.OnDefinitionsChanged Event + +Raised when the event definitions have changed for the stream. +See [Definitions](StreamEventsConsumer.Definitions.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer.Definitions') for the latest set of event definitions + +```csharp +public event EventHandler OnDefinitionsChanged; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[QuixStreams.Streaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Streaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs 'QuixStreams.Streaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.md b/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.md new file mode 100644 index 00000000..18267f79 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsConsumer.md @@ -0,0 +1,24 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer') + +## StreamEventsConsumer Class + +Consumer for streams, which raises [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') and [QuixStreams.Telemetry.Models.EventDefinitions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventDefinitions 'QuixStreams.Telemetry.Models.EventDefinitions') related messages + +```csharp +public class StreamEventsConsumer : +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 StreamEventsConsumer + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Properties | | +| :--- | :--- | +| [Definitions](StreamEventsConsumer.Definitions.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer.Definitions') | Gets the latest set of event definitions | + +| Events | | +| :--- | :--- | +| [OnDataReceived](StreamEventsConsumer.OnDataReceived.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer.OnDataReceived') | Raised when an events data package is received for the stream | +| [OnDefinitionsChanged](StreamEventsConsumer.OnDefinitionsChanged.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer.OnDefinitionsChanged') | Raised when the event definitions have changed for the stream.
See [Definitions](StreamEventsConsumer.Definitions.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamEventsConsumer.Definitions') for the latest set of event definitions | diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddDefinition(string,string,string).md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddDefinition(string,string,string).md new file mode 100644 index 00000000..aab95958 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddDefinition(string,string,string).md @@ -0,0 +1,33 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.AddDefinition(string, string, string) Method + +Add new Event definition to define properties like Name or Level, among others. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder AddDefinition(string eventId, string name=null, string description=null); +``` +#### Parameters + + + +`eventId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Event Id. This must match the event id you use to Event values + + + +`name` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Human friendly display name of the event + + + +`description` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Description of the event + +#### Returns +[EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') +Event definition builder to define the event properties \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddDefinitions(List_EventDefinition_).md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddDefinitions(List_EventDefinition_).md new file mode 100644 index 00000000..eaa10646 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddDefinitions(List_EventDefinition_).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.AddDefinitions(List) Method + +Adds a list of definitions to the [StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer'). Configure it with the builder methods. + +```csharp +public void AddDefinitions(System.Collections.Generic.List definitions); +``` +#### Parameters + + + +`definitions` [System.Collections.Generic.List<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1')[EventDefinition](EventDefinition.md 'QuixStreams.Streaming.Models.EventDefinition')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1') + +List of definitions \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddLocation(string).md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddLocation(string).md new file mode 100644 index 00000000..baa91c01 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddLocation(string).md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.AddLocation(string) Method + +Adds a new Location in the event groups hierarchy. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder AddLocation(string location); +``` +#### Parameters + + + +`location` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The group location + +#### Returns +[EventDefinitionBuilder](EventDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDefinitionBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestamp(DateTime).md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestamp(DateTime).md new file mode 100644 index 00000000..ba041cb0 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestamp(DateTime).md @@ -0,0 +1,22 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.AddTimestamp(DateTime) Method + +Starts adding a new set of event values at the given timestamp. +Note, [Epoch](StreamEventsProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Epoch') is not used when invoking with [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder AddTimestamp(System.DateTime dateTime); +``` +#### Parameters + + + +`dateTime` [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') + +The datetime to use for adding new event values + +#### Returns +[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') +Event data builder to add event values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestamp(TimeSpan).md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestamp(TimeSpan).md new file mode 100644 index 00000000..6bbc4601 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestamp(TimeSpan).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.AddTimestamp(TimeSpan) Method + +Starts adding a new set of event values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder AddTimestamp(System.TimeSpan timeSpan); +``` +#### Parameters + + + +`timeSpan` [System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') + +The time since the default [Epoch](StreamEventsProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Epoch') to add the event values at + +#### Returns +[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') +Event data builder to add event values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestampMilliseconds(long).md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestampMilliseconds(long).md new file mode 100644 index 00000000..2b375ef5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestampMilliseconds(long).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.AddTimestampMilliseconds(long) Method + +Starts adding a new set of event values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder AddTimestampMilliseconds(long timeMilliseconds); +``` +#### Parameters + + + +`timeMilliseconds` [System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') + +The time in milliseconds since the default [Epoch](StreamEventsProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Epoch') to add the event values at + +#### Returns +[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') +Event data builder to add event values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestampNanoseconds(long).md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestampNanoseconds(long).md new file mode 100644 index 00000000..5ed94225 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.AddTimestampNanoseconds(long).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.AddTimestampNanoseconds(long) Method + +Starts adding a new set of event values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder AddTimestampNanoseconds(long timeNanoseconds); +``` +#### Parameters + + + +`timeNanoseconds` [System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') + +The time in nanoseconds since the default [Epoch](StreamEventsProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Epoch') to add the event values at + +#### Returns +[EventDataBuilder](EventDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.EventDataBuilder') +Event data builder to add event values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.DefaultLocation.md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.DefaultLocation.md new file mode 100644 index 00000000..b579eb79 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.DefaultLocation.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.DefaultLocation Property + +Default Location of the events. Event definitions added with [AddDefinition(string, string, string)](StreamEventsProducer.AddDefinition(string,string,string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddDefinition(string, string, string)') will be inserted at this location. +See [AddLocation(string)](StreamEventsProducer.AddLocation(string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddLocation(string)') for adding definitions at a different location without changing default. +Example: "/Group1/SubGroup2" + +```csharp +public string DefaultLocation { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.DefaultTags.md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.DefaultTags.md new file mode 100644 index 00000000..b0b3f908 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.DefaultTags.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.DefaultTags Property + +Default Tags injected to all Event Values sent by the producer. + +```csharp +public System.Collections.Generic.Dictionary DefaultTags { get; set; } +``` + +#### Property Value +[System.Collections.Generic.Dictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Dispose().md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Dispose().md new file mode 100644 index 00000000..86b41c8e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Dispose().md @@ -0,0 +1,12 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.Dispose() Method + +Flushes internal buffers and disposes + +```csharp +public void Dispose(); +``` + +Implements [Dispose()](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable.Dispose 'System.IDisposable.Dispose') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Epoch.md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Epoch.md new file mode 100644 index 00000000..33b1ec60 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Epoch.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.Epoch Property + +Default epoch used for Timestamp event values. Datetime added on top of all the Timestamps. + +```csharp +public System.DateTime Epoch { get; set; } +``` + +#### Property Value +[System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Flush().md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Flush().md new file mode 100644 index 00000000..5ff58eb7 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Flush().md @@ -0,0 +1,10 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.Flush() Method + +Immediately writes the event definitions from the buffer without waiting for buffer condition to fulfill (200ms timeout) + +```csharp +public void Flush(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Publish(EventData).md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Publish(EventData).md new file mode 100644 index 00000000..10a38931 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Publish(EventData).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.Publish(EventData) Method + +Publish an event into the stream. + +```csharp +public void Publish(QuixStreams.Streaming.Models.EventData data); +``` +#### Parameters + + + +`data` [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +Event to publish \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Publish(ICollection_EventData_).md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Publish(ICollection_EventData_).md new file mode 100644 index 00000000..0ed812c7 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.Publish(ICollection_EventData_).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer') + +## StreamEventsProducer.Publish(ICollection) Method + +Publish events into the stream. + +```csharp +public void Publish(System.Collections.Generic.ICollection events); +``` +#### Parameters + + + +`events` [System.Collections.Generic.ICollection<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.ICollection-1 'System.Collections.Generic.ICollection`1')[EventData](EventData.md 'QuixStreams.Streaming.Models.EventData')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.ICollection-1 'System.Collections.Generic.ICollection`1') + +Events to publish \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.md b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.md new file mode 100644 index 00000000..ef2cd7f5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamEventsProducer.md @@ -0,0 +1,35 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') + +## StreamEventsProducer Class + +Helper class for producing [QuixStreams.Telemetry.Models.EventDefinitions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.EventDefinitions 'QuixStreams.Telemetry.Models.EventDefinitions') and [EventData](EventData.md 'QuixStreams.Streaming.Models.EventData') + +```csharp +public class StreamEventsProducer : +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 StreamEventsProducer + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Properties | | +| :--- | :--- | +| [DefaultLocation](StreamEventsProducer.DefaultLocation.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.DefaultLocation') | Default Location of the events. Event definitions added with [AddDefinition(string, string, string)](StreamEventsProducer.AddDefinition(string,string,string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddDefinition(string, string, string)') will be inserted at this location.
See [AddLocation(string)](StreamEventsProducer.AddLocation(string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddLocation(string)') for adding definitions at a different location without changing default.
Example: "/Group1/SubGroup2" | +| [DefaultTags](StreamEventsProducer.DefaultTags.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.DefaultTags') | Default Tags injected to all Event Values sent by the producer. | +| [Epoch](StreamEventsProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Epoch') | Default epoch used for Timestamp event values. Datetime added on top of all the Timestamps. | + +| Methods | | +| :--- | :--- | +| [AddDefinition(string, string, string)](StreamEventsProducer.AddDefinition(string,string,string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddDefinition(string, string, string)') | Add new Event definition to define properties like Name or Level, among others. | +| [AddDefinitions(List<EventDefinition>)](StreamEventsProducer.AddDefinitions(List_EventDefinition_).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddDefinitions(System.Collections.Generic.List)') | Adds a list of definitions to the [StreamEventsProducer](StreamEventsProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer'). Configure it with the builder methods. | +| [AddLocation(string)](StreamEventsProducer.AddLocation(string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddLocation(string)') | Adds a new Location in the event groups hierarchy. | +| [AddTimestamp(DateTime)](StreamEventsProducer.AddTimestamp(DateTime).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddTimestamp(System.DateTime)') | Starts adding a new set of event values at the given timestamp.
Note, [Epoch](StreamEventsProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Epoch') is not used when invoking with [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') | +| [AddTimestamp(TimeSpan)](StreamEventsProducer.AddTimestamp(TimeSpan).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddTimestamp(System.TimeSpan)') | Starts adding a new set of event values at the given timestamp. | +| [AddTimestampMilliseconds(long)](StreamEventsProducer.AddTimestampMilliseconds(long).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddTimestampMilliseconds(long)') | Starts adding a new set of event values at the given timestamp. | +| [AddTimestampNanoseconds(long)](StreamEventsProducer.AddTimestampNanoseconds(long).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.AddTimestampNanoseconds(long)') | Starts adding a new set of event values at the given timestamp. | +| [Dispose()](StreamEventsProducer.Dispose().md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Dispose()') | Flushes internal buffers and disposes | +| [Flush()](StreamEventsProducer.Flush().md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Flush()') | Immediately writes the event definitions from the buffer without waiting for buffer condition to fulfill (200ms timeout) | +| [Publish(EventData)](StreamEventsProducer.Publish(EventData).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Publish(QuixStreams.Streaming.Models.EventData)') | Publish an event into the stream. | +| [Publish(ICollection<EventData>)](StreamEventsProducer.Publish(ICollection_EventData_).md 'QuixStreams.Streaming.Models.StreamProducer.StreamEventsProducer.Publish(System.Collections.Generic.ICollection)') | Publish events into the stream. | diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Location.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Location.md new file mode 100644 index 00000000..fb909ce9 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Location.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamPropertiesConsumer](StreamPropertiesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer') + +## StreamPropertiesConsumer.Location Property + +Gets the location of the stream + +```csharp +public string Location { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Metadata.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Metadata.md new file mode 100644 index 00000000..f5a30255 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Metadata.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamPropertiesConsumer](StreamPropertiesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer') + +## StreamPropertiesConsumer.Metadata Property + +Gets the metadata of the stream + +```csharp +public System.Collections.Generic.Dictionary Metadata { get; set; } +``` + +#### Property Value +[System.Collections.Generic.Dictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Name.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Name.md new file mode 100644 index 00000000..f3ad9c90 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Name.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamPropertiesConsumer](StreamPropertiesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer') + +## StreamPropertiesConsumer.Name Property + +Gets the name of the stream + +```csharp +public string Name { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.OnChanged.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.OnChanged.md new file mode 100644 index 00000000..2664ef36 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.OnChanged.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamPropertiesConsumer](StreamPropertiesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer') + +## StreamPropertiesConsumer.OnChanged Event + +Raised when the stream properties change + +```csharp +public event EventHandler OnChanged; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Parents.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Parents.md new file mode 100644 index 00000000..ee5a8ef5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.Parents.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamPropertiesConsumer](StreamPropertiesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer') + +## StreamPropertiesConsumer.Parents Property + +Gets the list of Stream IDs for the parent streams + +```csharp +public System.Collections.Generic.List Parents { get; set; } +``` + +#### Property Value +[System.Collections.Generic.List<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.TimeOfRecording.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.TimeOfRecording.md new file mode 100644 index 00000000..b5eafa05 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.TimeOfRecording.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamPropertiesConsumer](StreamPropertiesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer') + +## StreamPropertiesConsumer.TimeOfRecording Property + +Gets the datetime of the recording + +```csharp +public System.Nullable TimeOfRecording { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.md new file mode 100644 index 00000000..8ec3c911 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesConsumer.md @@ -0,0 +1,28 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer') + +## StreamPropertiesConsumer Class + +Represents properties and metadata of the stream. +All changes to these properties are automatically populated to this class. + +```csharp +public class StreamPropertiesConsumer : +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 StreamPropertiesConsumer + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Properties | | +| :--- | :--- | +| [Location](StreamPropertiesConsumer.Location.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer.Location') | Gets the location of the stream | +| [Metadata](StreamPropertiesConsumer.Metadata.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer.Metadata') | Gets the metadata of the stream | +| [Name](StreamPropertiesConsumer.Name.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer.Name') | Gets the name of the stream | +| [Parents](StreamPropertiesConsumer.Parents.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer.Parents') | Gets the list of Stream IDs for the parent streams | +| [TimeOfRecording](StreamPropertiesConsumer.TimeOfRecording.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer.TimeOfRecording') | Gets the datetime of the recording | + +| Events | | +| :--- | :--- | +| [OnChanged](StreamPropertiesConsumer.OnChanged.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamPropertiesConsumer.OnChanged') | Raised when the stream properties change | diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.AddParent(string).md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.AddParent(string).md new file mode 100644 index 00000000..7ee6555c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.AddParent(string).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.AddParent(string) Method + +Adds a parent stream. + +```csharp +public void AddParent(string parentStreamId); +``` +#### Parameters + + + +`parentStreamId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Stream Id of the parent \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Dispose().md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Dispose().md new file mode 100644 index 00000000..16496657 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Dispose().md @@ -0,0 +1,12 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.Dispose() Method + +Flushes internal buffers and disposes + +```csharp +public void Dispose(); +``` + +Implements [Dispose()](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable.Dispose 'System.IDisposable.Dispose') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Flush().md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Flush().md new file mode 100644 index 00000000..6a8b3037 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Flush().md @@ -0,0 +1,10 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.Flush() Method + +Immediately writes the properties yet to be sent instead of waiting for the flush timer (20ms) + +```csharp +public void Flush(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.FlushInterval.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.FlushInterval.md new file mode 100644 index 00000000..5b155057 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.FlushInterval.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.FlushInterval Property + +Automatic flush interval of the properties metadata into the channel [ in milliseconds ] + +```csharp +public int FlushInterval { get; set; } +``` + +#### Property Value +[System.Int32](https://docs.microsoft.com/en-us/dotnet/api/System.Int32 'System.Int32') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Location.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Location.md new file mode 100644 index 00000000..23ec7dd6 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Location.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.Location Property + +Specify location of the stream in data catalogue. +For example: /cars/ai/carA/. + +```csharp +public string Location { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Metadata.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Metadata.md new file mode 100644 index 00000000..14206300 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Metadata.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.Metadata Property + +Metadata of the stream. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary Metadata { get; } +``` + +#### Property Value +[QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary<](ObservableDictionary_TKey,TValue_.md 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](ObservableDictionary_TKey,TValue_.md 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](ObservableDictionary_TKey,TValue_.md 'QuixStreams.Streaming.Models.StreamProducer.ObservableDictionary') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Name.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Name.md new file mode 100644 index 00000000..bf18cc8a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Name.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.Name Property + +Name of the stream. + +```csharp +public string Name { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Parents.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Parents.md new file mode 100644 index 00000000..138c8d57 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.Parents.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.Parents Property + +List of Stream Ids of the Parent streams + +```csharp +public System.Collections.ObjectModel.ObservableCollection Parents { get; } +``` + +#### Property Value +[System.Collections.ObjectModel.ObservableCollection<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.ObjectModel.ObservableCollection-1 'System.Collections.ObjectModel.ObservableCollection`1')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.ObjectModel.ObservableCollection-1 'System.Collections.ObjectModel.ObservableCollection`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.RemoveParent(string).md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.RemoveParent(string).md new file mode 100644 index 00000000..acd8d19d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.RemoveParent(string).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.RemoveParent(string) Method + +Removes a parent stream + +```csharp +public void RemoveParent(string parentStreamId); +``` +#### Parameters + + + +`parentStreamId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Stream Id of the parent \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.TimeOfRecording.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.TimeOfRecording.md new file mode 100644 index 00000000..c739230a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.TimeOfRecording.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamPropertiesProducer](StreamPropertiesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer') + +## StreamPropertiesProducer.TimeOfRecording Property + +Date Time of stream recording. Commonly set to Datetime.UtcNow. + +```csharp +public System.Nullable TimeOfRecording { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.md b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.md new file mode 100644 index 00000000..4d564e3f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamPropertiesProducer.md @@ -0,0 +1,32 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') + +## StreamPropertiesProducer Class + +Represents properties and metadata of the stream. +All changes to these properties are automatically published to the underlying stream. + +```csharp +public class StreamPropertiesProducer : +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 StreamPropertiesProducer + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Properties | | +| :--- | :--- | +| [FlushInterval](StreamPropertiesProducer.FlushInterval.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.FlushInterval') | Automatic flush interval of the properties metadata into the channel [ in milliseconds ] | +| [Location](StreamPropertiesProducer.Location.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.Location') | Specify location of the stream in data catalogue.
For example: /cars/ai/carA/. | +| [Metadata](StreamPropertiesProducer.Metadata.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.Metadata') | Metadata of the stream. | +| [Name](StreamPropertiesProducer.Name.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.Name') | Name of the stream. | +| [Parents](StreamPropertiesProducer.Parents.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.Parents') | List of Stream Ids of the Parent streams | +| [TimeOfRecording](StreamPropertiesProducer.TimeOfRecording.md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.TimeOfRecording') | Date Time of stream recording. Commonly set to Datetime.UtcNow. | + +| Methods | | +| :--- | :--- | +| [AddParent(string)](StreamPropertiesProducer.AddParent(string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.AddParent(string)') | Adds a parent stream. | +| [Dispose()](StreamPropertiesProducer.Dispose().md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.Dispose()') | Flushes internal buffers and disposes | +| [Flush()](StreamPropertiesProducer.Flush().md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.Flush()') | Immediately writes the properties yet to be sent instead of waiting for the flush timer (20ms) | +| [RemoveParent(string)](StreamPropertiesProducer.RemoveParent(string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamPropertiesProducer.RemoveParent(string)') | Removes a parent stream | diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.CreateBuffer(TimeseriesBufferConfiguration,string[]).md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.CreateBuffer(TimeseriesBufferConfiguration,string[]).md new file mode 100644 index 00000000..58220e01 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.CreateBuffer(TimeseriesBufferConfiguration,string[]).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamTimeseriesConsumer](StreamTimeseriesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer') + +## StreamTimeseriesConsumer.CreateBuffer(TimeseriesBufferConfiguration, string[]) Method + +Creates a new buffer for reading data + +```csharp +public QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer CreateBuffer(QuixStreams.Streaming.Models.TimeseriesBufferConfiguration bufferConfiguration=null, params string[] parametersFilter); +``` +#### Parameters + + + +`bufferConfiguration` [TimeseriesBufferConfiguration](TimeseriesBufferConfiguration.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration') + +An optional TimeseriesBufferConfiguration + + + +`parametersFilter` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') + +Zero or more parameter identifiers to filter as a whitelist. If provided, only those parameters will be available through this buffer + +#### Returns +[TimeseriesBufferConsumer](TimeseriesBufferConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer') +[TimeseriesBufferConsumer](TimeseriesBufferConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer') which will raise OnDataReceived event when new data is consumed \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.CreateBuffer(string[]).md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.CreateBuffer(string[]).md new file mode 100644 index 00000000..4711211a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.CreateBuffer(string[]).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamTimeseriesConsumer](StreamTimeseriesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer') + +## StreamTimeseriesConsumer.CreateBuffer(string[]) Method + +Creates a new buffer for reading data + +```csharp +public QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer CreateBuffer(params string[] parametersFilter); +``` +#### Parameters + + + +`parametersFilter` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') + +Zero or more parameter identifiers to filter as a whitelist. If provided, only those parameters will be available through this buffer + +#### Returns +[TimeseriesBufferConsumer](TimeseriesBufferConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer') +[TimeseriesBufferConsumer](TimeseriesBufferConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer') which will raise OnDataReceived event when new data is consumed \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.Definitions.md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.Definitions.md new file mode 100644 index 00000000..a310c33b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.Definitions.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamTimeseriesConsumer](StreamTimeseriesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer') + +## StreamTimeseriesConsumer.Definitions Property + +Gets the latest set of parameter definitions + +```csharp +public System.Collections.Generic.List Definitions { get; set; } +``` + +#### Property Value +[System.Collections.Generic.List<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1')[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnDataReceived.md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnDataReceived.md new file mode 100644 index 00000000..dca5c66f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnDataReceived.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamTimeseriesConsumer](StreamTimeseriesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer') + +## StreamTimeseriesConsumer.OnDataReceived Event + +Event raised when data is received (without buffering) +This event does not use Buffers, and data will be raised as they arrive without any processing. + +```csharp +public event EventHandler OnDataReceived; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[TimeseriesDataReadEventArgs](TimeseriesDataReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataReadEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnDefinitionsChanged.md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnDefinitionsChanged.md new file mode 100644 index 00000000..ec900862 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnDefinitionsChanged.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamTimeseriesConsumer](StreamTimeseriesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer') + +## StreamTimeseriesConsumer.OnDefinitionsChanged Event + +Raised when the parameter definitions have changed for the stream. +See [Definitions](StreamTimeseriesConsumer.Definitions.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer.Definitions') for the latest set of parameter definitions + +```csharp +public event EventHandler OnDefinitionsChanged; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[QuixStreams.Streaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Streaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs 'QuixStreams.Streaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnRawReceived.md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnRawReceived.md new file mode 100644 index 00000000..81c81451 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.OnRawReceived.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[StreamTimeseriesConsumer](StreamTimeseriesConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer') + +## StreamTimeseriesConsumer.OnRawReceived Event + +Event raised when data is received (without buffering) in raw transport format +This event does not use Buffers, and data will be raised as they arrive without any processing. + +```csharp +public event EventHandler OnRawReceived; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[TimeseriesDataRawReadEventArgs](TimeseriesDataRawReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.md new file mode 100644 index 00000000..159525df --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesConsumer.md @@ -0,0 +1,30 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer') + +## StreamTimeseriesConsumer Class + +Consumer for streams, which raises [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') and [QuixStreams.Telemetry.Models.ParameterDefinitions](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.ParameterDefinitions 'QuixStreams.Telemetry.Models.ParameterDefinitions') related messages + +```csharp +public class StreamTimeseriesConsumer : +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 StreamTimeseriesConsumer + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Properties | | +| :--- | :--- | +| [Definitions](StreamTimeseriesConsumer.Definitions.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer.Definitions') | Gets the latest set of parameter definitions | + +| Methods | | +| :--- | :--- | +| [CreateBuffer(TimeseriesBufferConfiguration, string[])](StreamTimeseriesConsumer.CreateBuffer(TimeseriesBufferConfiguration,string[]).md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer.CreateBuffer(QuixStreams.Streaming.Models.TimeseriesBufferConfiguration, string[])') | Creates a new buffer for reading data | +| [CreateBuffer(string[])](StreamTimeseriesConsumer.CreateBuffer(string[]).md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer.CreateBuffer(string[])') | Creates a new buffer for reading data | + +| Events | | +| :--- | :--- | +| [OnDataReceived](StreamTimeseriesConsumer.OnDataReceived.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer.OnDataReceived') | Event raised when data is received (without buffering)
This event does not use Buffers, and data will be raised as they arrive without any processing. | +| [OnDefinitionsChanged](StreamTimeseriesConsumer.OnDefinitionsChanged.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer.OnDefinitionsChanged') | Raised when the parameter definitions have changed for the stream.
See [Definitions](StreamTimeseriesConsumer.Definitions.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer.Definitions') for the latest set of parameter definitions | +| [OnRawReceived](StreamTimeseriesConsumer.OnRawReceived.md 'QuixStreams.Streaming.Models.StreamConsumer.StreamTimeseriesConsumer.OnRawReceived') | Event raised when data is received (without buffering) in raw transport format
This event does not use Buffers, and data will be raised as they arrive without any processing. | diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddDefinition(string,string,string).md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddDefinition(string,string,string).md new file mode 100644 index 00000000..286733bb --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddDefinition(string,string,string).md @@ -0,0 +1,33 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +## StreamTimeseriesProducer.AddDefinition(string, string, string) Method + +Adds a new parameter definition to the [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer'). Configure it with the builder methods. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder AddDefinition(string parameterId, string name=null, string description=null); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The id of the parameter. Must match the parameter id used to send data. + + + +`name` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The human friendly display name of the parameter + + + +`description` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The description of the parameter + +#### Returns +[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') +Parameter definition builder to define the parameter properties \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddDefinitions(List_ParameterDefinition_).md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddDefinitions(List_ParameterDefinition_).md new file mode 100644 index 00000000..bf77e602 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddDefinitions(List_ParameterDefinition_).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +## StreamTimeseriesProducer.AddDefinitions(List) Method + +Adds a list of definitions to the [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer'). Configure it with the builder methods. + +```csharp +public void AddDefinitions(System.Collections.Generic.List definitions); +``` +#### Parameters + + + +`definitions` [System.Collections.Generic.List<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1')[ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1') + +List of definitions \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddLocation(string).md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddLocation(string).md new file mode 100644 index 00000000..17df9d0a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.AddLocation(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +## StreamTimeseriesProducer.AddLocation(string) Method + +Adds a new location in the parameters groups hierarchy + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder AddLocation(string location); +``` +#### Parameters + + + +`location` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The group location + +#### Returns +[ParameterDefinitionBuilder](ParameterDefinitionBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.ParameterDefinitionBuilder') +Parameter definition builder to define the parameters under the specified location \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Buffer.md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Buffer.md new file mode 100644 index 00000000..a265d0b0 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Buffer.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +## StreamTimeseriesProducer.Buffer Property + +Gets the buffer for producing timeseries data + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer Buffer { get; } +``` + +#### Property Value +[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.DefaultLocation.md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.DefaultLocation.md new file mode 100644 index 00000000..f03aabdb --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.DefaultLocation.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +## StreamTimeseriesProducer.DefaultLocation Property + +Default Location of the parameters. Parameter definitions added with [AddDefinition(string, string, string)](StreamTimeseriesProducer.AddDefinition(string,string,string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.AddDefinition(string, string, string)') will be inserted at this location. +See [AddLocation(string)](StreamTimeseriesProducer.AddLocation(string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.AddLocation(string)') for adding definitions at a different location without changing default. +Example: "/Group1/SubGroup2" + +```csharp +public string DefaultLocation { get; set; } +``` + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Dispose().md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Dispose().md new file mode 100644 index 00000000..1f62a7cf --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Dispose().md @@ -0,0 +1,12 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +## StreamTimeseriesProducer.Dispose() Method + +Flushes internal buffers and disposes + +```csharp +public void Dispose(); +``` + +Implements [Dispose()](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable.Dispose 'System.IDisposable.Dispose') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Flush().md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Flush().md new file mode 100644 index 00000000..44353dad --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Flush().md @@ -0,0 +1,10 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +## StreamTimeseriesProducer.Flush() Method + +Immediately publish timeseries data and definitions from the buffer without waiting for buffer condition to fulfill for either + +```csharp +public void Flush(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Publish(TimeseriesData).md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Publish(TimeseriesData).md new file mode 100644 index 00000000..a5c8ca66 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Publish(TimeseriesData).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +## StreamTimeseriesProducer.Publish(TimeseriesData) Method + +Publish data to stream without any buffering + +```csharp +public void Publish(QuixStreams.Streaming.Models.TimeseriesData data); +``` +#### Parameters + + + +`data` [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +Timeseries data to publish \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Publish(TimeseriesDataRaw).md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Publish(TimeseriesDataRaw).md new file mode 100644 index 00000000..6d25a48e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.Publish(TimeseriesDataRaw).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer') + +## StreamTimeseriesProducer.Publish(TimeseriesDataRaw) Method + +Publish data in TimeseriesDataRaw format without any buffering + +```csharp +public void Publish(QuixStreams.Telemetry.Models.TimeseriesDataRaw data); +``` +#### Parameters + + + +`data` [QuixStreams.Telemetry.Models.TimeseriesDataRaw](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.TimeseriesDataRaw 'QuixStreams.Telemetry.Models.TimeseriesDataRaw') + +Timeseries data to publish \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.md b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.md new file mode 100644 index 00000000..1741f366 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/StreamTimeseriesProducer.md @@ -0,0 +1,30 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') + +## StreamTimeseriesProducer Class + +Helper class for producing [ParameterDefinition](ParameterDefinition.md 'QuixStreams.Streaming.Models.ParameterDefinition') and [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +```csharp +public class StreamTimeseriesProducer : +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 StreamTimeseriesProducer + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Properties | | +| :--- | :--- | +| [Buffer](StreamTimeseriesProducer.Buffer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.Buffer') | Gets the buffer for producing timeseries data | +| [DefaultLocation](StreamTimeseriesProducer.DefaultLocation.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.DefaultLocation') | Default Location of the parameters. Parameter definitions added with [AddDefinition(string, string, string)](StreamTimeseriesProducer.AddDefinition(string,string,string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.AddDefinition(string, string, string)') will be inserted at this location.
See [AddLocation(string)](StreamTimeseriesProducer.AddLocation(string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.AddLocation(string)') for adding definitions at a different location without changing default.
Example: "/Group1/SubGroup2" | + +| Methods | | +| :--- | :--- | +| [AddDefinition(string, string, string)](StreamTimeseriesProducer.AddDefinition(string,string,string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.AddDefinition(string, string, string)') | Adds a new parameter definition to the [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer'). Configure it with the builder methods. | +| [AddDefinitions(List<ParameterDefinition>)](StreamTimeseriesProducer.AddDefinitions(List_ParameterDefinition_).md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.AddDefinitions(System.Collections.Generic.List)') | Adds a list of definitions to the [StreamTimeseriesProducer](StreamTimeseriesProducer.md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer'). Configure it with the builder methods. | +| [AddLocation(string)](StreamTimeseriesProducer.AddLocation(string).md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.AddLocation(string)') | Adds a new location in the parameters groups hierarchy | +| [Dispose()](StreamTimeseriesProducer.Dispose().md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.Dispose()') | Flushes internal buffers and disposes | +| [Flush()](StreamTimeseriesProducer.Flush().md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.Flush()') | Immediately publish timeseries data and definitions from the buffer without waiting for buffer condition to fulfill for either | +| [Publish(TimeseriesData)](StreamTimeseriesProducer.Publish(TimeseriesData).md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.Publish(QuixStreams.Streaming.Models.TimeseriesData)') | Publish data to stream without any buffering | +| [Publish(TimeseriesDataRaw)](StreamTimeseriesProducer.Publish(TimeseriesDataRaw).md 'QuixStreams.Streaming.Models.StreamProducer.StreamTimeseriesProducer.Publish(QuixStreams.Telemetry.Models.TimeseriesDataRaw)') | Publish data in TimeseriesDataRaw format without any buffering | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.BufferTimeout.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.BufferTimeout.md new file mode 100644 index 00000000..32f657bb --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.BufferTimeout.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.BufferTimeout Property + +Timeout configuration. [BufferTimeout](TimeseriesBufferConfiguration.BufferTimeout.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.BufferTimeout') + +```csharp +public System.Nullable BufferTimeout { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Int32](https://docs.microsoft.com/en-us/dotnet/api/System.Int32 'System.Int32')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.CustomTrigger.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.CustomTrigger.md new file mode 100644 index 00000000..c3d2cf94 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.CustomTrigger.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.CustomTrigger Property + +Gets or sets the custom function which is invoked after adding a new timestamp to the buffer. If returns true, [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') is invoked with the entire buffer content +Defaults to null (disabled). + +```csharp +public System.Func CustomTrigger { get; set; } +``` + +#### Property Value +[System.Func<](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.CustomTriggerBeforeEnqueue.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.CustomTriggerBeforeEnqueue.md new file mode 100644 index 00000000..8240c0ca --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.CustomTriggerBeforeEnqueue.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.CustomTriggerBeforeEnqueue Property + +Gets or set the custom function which is invoked before adding the timestamp to the buffer. If returns true, [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') is invoked before adding the timestamp to it. +Defaults to null (disabled). + +```csharp +public System.Func CustomTriggerBeforeEnqueue { get; set; } +``` + +#### Property Value +[System.Func<](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.Dispose().md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.Dispose().md new file mode 100644 index 00000000..768c1648 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.Dispose().md @@ -0,0 +1,12 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.Dispose() Method + +Dispose the buffer. It releases data out before the actual disposal. + +```csharp +public virtual void Dispose(); +``` + +Implements [Dispose()](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable.Dispose 'System.IDisposable.Dispose') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.Filter.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.Filter.md new file mode 100644 index 00000000..744b735c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.Filter.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.Filter Property + +Filter configuration. [Filter](TimeseriesBufferConfiguration.Filter.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.Filter') + +```csharp +public System.Func Filter { get; set; } +``` + +#### Property Value +[System.Func<](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.OnDataReleased.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.OnDataReleased.md new file mode 100644 index 00000000..046e8ffd --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.OnDataReleased.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.OnDataReleased Event + +Event invoked when TimeseriesData is received from the buffer + +```csharp +public event EventHandler OnDataReleased; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[TimeseriesDataReadEventArgs](TimeseriesDataReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataReadEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.OnRawReleased.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.OnRawReleased.md new file mode 100644 index 00000000..887ef191 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.OnRawReleased.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.OnRawReleased Event + +Event invoked when TimeseriesDataRaw is received from the buffer + +```csharp +public event EventHandler OnRawReleased; +``` + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[TimeseriesDataRawReadEventArgs](TimeseriesDataRawReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.PacketSize.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.PacketSize.md new file mode 100644 index 00000000..7bc25d8e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.PacketSize.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.PacketSize Property + +Packet Size configuration. [PacketSize](TimeseriesBufferConfiguration.PacketSize.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.PacketSize') + +```csharp +public System.Nullable PacketSize { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Int32](https://docs.microsoft.com/en-us/dotnet/api/System.Int32 'System.Int32')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.TimeSpanInMilliseconds.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.TimeSpanInMilliseconds.md new file mode 100644 index 00000000..34380b5e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.TimeSpanInMilliseconds.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.TimeSpanInMilliseconds Property + +TimeSpan configuration in Milliseconds. [TimeSpanInMilliseconds](TimeseriesBufferConfiguration.TimeSpanInMilliseconds.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.TimeSpanInMilliseconds') + +```csharp +public System.Nullable TimeSpanInMilliseconds { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.TimeSpanInNanoseconds.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.TimeSpanInNanoseconds.md new file mode 100644 index 00000000..d5545605 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.TimeSpanInNanoseconds.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') + +## TimeseriesBuffer.TimeSpanInNanoseconds Property + +TimeSpan configuration in Nanoseconds. [TimeSpanInNanoseconds](TimeseriesBufferConfiguration.TimeSpanInNanoseconds.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.TimeSpanInNanoseconds') + +```csharp +public System.Nullable TimeSpanInNanoseconds { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.md new file mode 100644 index 00000000..a9d3faa5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBuffer.md @@ -0,0 +1,38 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## TimeseriesBuffer Class + +Represents a class used to consume and produce stream messages in a buffered manner. + +```csharp +public class TimeseriesBuffer : +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 TimeseriesBuffer + +Derived +↳ [TimeseriesBufferConsumer](TimeseriesBufferConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer') +↳ [TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +Implements [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Properties | | +| :--- | :--- | +| [BufferTimeout](TimeseriesBuffer.BufferTimeout.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.BufferTimeout') | Timeout configuration. [BufferTimeout](TimeseriesBufferConfiguration.BufferTimeout.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.BufferTimeout') | +| [CustomTrigger](TimeseriesBuffer.CustomTrigger.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.CustomTrigger') | Gets or sets the custom function which is invoked after adding a new timestamp to the buffer. If returns true, [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') is invoked with the entire buffer content
Defaults to null (disabled). | +| [CustomTriggerBeforeEnqueue](TimeseriesBuffer.CustomTriggerBeforeEnqueue.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.CustomTriggerBeforeEnqueue') | Gets or set the custom function which is invoked before adding the timestamp to the buffer. If returns true, [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') is invoked before adding the timestamp to it.
Defaults to null (disabled). | +| [Filter](TimeseriesBuffer.Filter.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.Filter') | Filter configuration. [Filter](TimeseriesBufferConfiguration.Filter.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.Filter') | +| [PacketSize](TimeseriesBuffer.PacketSize.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.PacketSize') | Packet Size configuration. [PacketSize](TimeseriesBufferConfiguration.PacketSize.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.PacketSize') | +| [TimeSpanInMilliseconds](TimeseriesBuffer.TimeSpanInMilliseconds.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.TimeSpanInMilliseconds') | TimeSpan configuration in Milliseconds. [TimeSpanInMilliseconds](TimeseriesBufferConfiguration.TimeSpanInMilliseconds.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.TimeSpanInMilliseconds') | +| [TimeSpanInNanoseconds](TimeseriesBuffer.TimeSpanInNanoseconds.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.TimeSpanInNanoseconds') | TimeSpan configuration in Nanoseconds. [TimeSpanInNanoseconds](TimeseriesBufferConfiguration.TimeSpanInNanoseconds.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.TimeSpanInNanoseconds') | + +| Methods | | +| :--- | :--- | +| [Dispose()](TimeseriesBuffer.Dispose().md 'QuixStreams.Streaming.Models.TimeseriesBuffer.Dispose()') | Dispose the buffer. It releases data out before the actual disposal. | + +| Events | | +| :--- | :--- | +| [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') | Event invoked when TimeseriesData is received from the buffer | +| [OnRawReleased](TimeseriesBuffer.OnRawReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnRawReleased') | Event invoked when TimeseriesDataRaw is received from the buffer | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.BufferTimeout.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.BufferTimeout.md new file mode 100644 index 00000000..ae3b4a29 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.BufferTimeout.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBufferConfiguration](TimeseriesBufferConfiguration.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration') + +## TimeseriesBufferConfiguration.BufferTimeout Property + +Gets or sets the maximum duration in milliseconds for which the buffer will be held before triggering [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event. +[OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event is triggered when the configured [BufferTimeout](TimeseriesBufferConfiguration.BufferTimeout.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.BufferTimeout') has elapsed from the last data received by the buffer. +Defaults to null (disabled). + +```csharp +public System.Nullable BufferTimeout { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Int32](https://docs.microsoft.com/en-us/dotnet/api/System.Int32 'System.Int32')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.CustomTrigger.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.CustomTrigger.md new file mode 100644 index 00000000..92153d3b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.CustomTrigger.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBufferConfiguration](TimeseriesBufferConfiguration.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration') + +## TimeseriesBufferConfiguration.CustomTrigger Property + +Gets or sets the custom function which is invoked after adding a new timestamp to the buffer. If returns true, [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') is invoked with the entire buffer content +Defaults to null (disabled). + +```csharp +public System.Func CustomTrigger { get; set; } +``` + +#### Property Value +[System.Func<](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.CustomTriggerBeforeEnqueue.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.CustomTriggerBeforeEnqueue.md new file mode 100644 index 00000000..c218994e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.CustomTriggerBeforeEnqueue.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBufferConfiguration](TimeseriesBufferConfiguration.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration') + +## TimeseriesBufferConfiguration.CustomTriggerBeforeEnqueue Property + +Gets or set the custom function which is invoked before adding the timestamp to the buffer. If returns true, [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') is invoked before adding the timestamp to it. +Defaults to null (disabled). + +```csharp +public System.Func CustomTriggerBeforeEnqueue { get; set; } +``` + +#### Property Value +[System.Func<](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.Filter.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.Filter.md new file mode 100644 index 00000000..3b6add0b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.Filter.md @@ -0,0 +1,14 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBufferConfiguration](TimeseriesBufferConfiguration.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration') + +## TimeseriesBufferConfiguration.Filter Property + +Gets or sets the custom function to filter the incoming data before adding it to the buffer. If returns true, data is added otherwise not. +Defaults to null (disabled). + +```csharp +public System.Func Filter { get; set; } +``` + +#### Property Value +[System.Func<](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.PacketSize.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.PacketSize.md new file mode 100644 index 00000000..c31cbb71 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.PacketSize.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBufferConfiguration](TimeseriesBufferConfiguration.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration') + +## TimeseriesBufferConfiguration.PacketSize Property + +Gets or sets the max packet size in terms of values for the buffer. Each time the buffer has this amount +of data the [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event is invoked and the data is cleared from the buffer. +Defaults to null (disabled). + +```csharp +public System.Nullable PacketSize { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Int32](https://docs.microsoft.com/en-us/dotnet/api/System.Int32 'System.Int32')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.TimeSpanInMilliseconds.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.TimeSpanInMilliseconds.md new file mode 100644 index 00000000..21742718 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.TimeSpanInMilliseconds.md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBufferConfiguration](TimeseriesBufferConfiguration.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration') + +## TimeseriesBufferConfiguration.TimeSpanInMilliseconds Property + +Gets or sets the maximum time between timestamps for the buffer in milliseconds. When the difference between the +earliest and latest buffered timestamp surpasses this number the [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event +is invoked and the data is cleared from the buffer. +Defaults to null (disabled). +Note: This is a millisecond converter on top of [TimeSpanInNanoseconds](TimeseriesBufferConfiguration.TimeSpanInNanoseconds.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.TimeSpanInNanoseconds'). They both work with same underlying value. + +```csharp +public System.Nullable TimeSpanInMilliseconds { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.TimeSpanInNanoseconds.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.TimeSpanInNanoseconds.md new file mode 100644 index 00000000..25a4e9ab --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.TimeSpanInNanoseconds.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesBufferConfiguration](TimeseriesBufferConfiguration.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration') + +## TimeseriesBufferConfiguration.TimeSpanInNanoseconds Property + +Gets or sets the maximum time between timestamps for the buffer in nanoseconds. When the difference between the +earliest and latest buffered timestamp surpasses this number the [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event +is invoked and the data is cleared from the buffer. +Defaults to None (disabled). + +```csharp +public System.Nullable TimeSpanInNanoseconds { get; set; } +``` + +#### Property Value +[System.Nullable<](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1')[System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Nullable-1 'System.Nullable`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.md new file mode 100644 index 00000000..511924ad --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConfiguration.md @@ -0,0 +1,22 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## TimeseriesBufferConfiguration Class + +Describes the configuration for timeseries buffers + +```csharp +public class TimeseriesBufferConfiguration +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 TimeseriesBufferConfiguration + +| Properties | | +| :--- | :--- | +| [BufferTimeout](TimeseriesBufferConfiguration.BufferTimeout.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.BufferTimeout') | Gets or sets the maximum duration in milliseconds for which the buffer will be held before triggering [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event.
[OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event is triggered when the configured [BufferTimeout](TimeseriesBufferConfiguration.BufferTimeout.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.BufferTimeout') has elapsed from the last data received by the buffer.
Defaults to null (disabled). | +| [CustomTrigger](TimeseriesBufferConfiguration.CustomTrigger.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.CustomTrigger') | Gets or sets the custom function which is invoked after adding a new timestamp to the buffer. If returns true, [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') is invoked with the entire buffer content
Defaults to null (disabled). | +| [CustomTriggerBeforeEnqueue](TimeseriesBufferConfiguration.CustomTriggerBeforeEnqueue.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.CustomTriggerBeforeEnqueue') | Gets or set the custom function which is invoked before adding the timestamp to the buffer. If returns true, [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') is invoked before adding the timestamp to it.
Defaults to null (disabled). | +| [Filter](TimeseriesBufferConfiguration.Filter.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.Filter') | Gets or sets the custom function to filter the incoming data before adding it to the buffer. If returns true, data is added otherwise not.
Defaults to null (disabled). | +| [PacketSize](TimeseriesBufferConfiguration.PacketSize.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.PacketSize') | Gets or sets the max packet size in terms of values for the buffer. Each time the buffer has this amount
of data the [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event is invoked and the data is cleared from the buffer.
Defaults to null (disabled). | +| [TimeSpanInMilliseconds](TimeseriesBufferConfiguration.TimeSpanInMilliseconds.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.TimeSpanInMilliseconds') | Gets or sets the maximum time between timestamps for the buffer in milliseconds. When the difference between the
earliest and latest buffered timestamp surpasses this number the [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event
is invoked and the data is cleared from the buffer.
Defaults to null (disabled).
Note: This is a millisecond converter on top of [TimeSpanInNanoseconds](TimeseriesBufferConfiguration.TimeSpanInNanoseconds.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.TimeSpanInNanoseconds'). They both work with same underlying value. | +| [TimeSpanInNanoseconds](TimeseriesBufferConfiguration.TimeSpanInNanoseconds.md 'QuixStreams.Streaming.Models.TimeseriesBufferConfiguration.TimeSpanInNanoseconds') | Gets or sets the maximum time between timestamps for the buffer in nanoseconds. When the difference between the
earliest and latest buffered timestamp surpasses this number the [OnDataReleased](TimeseriesBuffer.OnDataReleased.md 'QuixStreams.Streaming.Models.TimeseriesBuffer.OnDataReleased') event
is invoked and the data is cleared from the buffer.
Defaults to None (disabled). | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConsumer.Dispose().md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConsumer.Dispose().md new file mode 100644 index 00000000..fb68b7d1 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConsumer.Dispose().md @@ -0,0 +1,12 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[TimeseriesBufferConsumer](TimeseriesBufferConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer') + +## TimeseriesBufferConsumer.Dispose() Method + +Disposes the resources used by the [TimeseriesBufferConsumer](TimeseriesBufferConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer') instance. + +```csharp +public override void Dispose(); +``` + +Implements [Dispose()](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable.Dispose 'System.IDisposable.Dispose') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConsumer.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConsumer.md new file mode 100644 index 00000000..3d60bb26 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferConsumer.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer') + +## TimeseriesBufferConsumer Class + +Represents a class for consuming data from a stream in a buffered manner. + +```csharp +public class TimeseriesBufferConsumer : QuixStreams.Streaming.Models.TimeseriesBuffer +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 [TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') 🡒 TimeseriesBufferConsumer + +| Methods | | +| :--- | :--- | +| [Dispose()](TimeseriesBufferConsumer.Dispose().md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer.Dispose()') | Disposes the resources used by the [TimeseriesBufferConsumer](TimeseriesBufferConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesBufferConsumer') instance. | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestamp(DateTime).md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestamp(DateTime).md new file mode 100644 index 00000000..ed964551 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestamp(DateTime).md @@ -0,0 +1,22 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +## TimeseriesBufferProducer.AddTimestamp(DateTime) Method + +Starts adding a new set of parameter values at the given timestamp. +Note, [Epoch](TimeseriesBufferProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.Epoch') is not used when invoking with a [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder AddTimestamp(System.DateTime dateTime); +``` +#### Parameters + + + +`dateTime` [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') + +The datetime to use for adding new parameter values + +#### Returns +[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') +Timeseries data builder to add parameter values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestamp(TimeSpan).md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestamp(TimeSpan).md new file mode 100644 index 00000000..95c1523c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestamp(TimeSpan).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +## TimeseriesBufferProducer.AddTimestamp(TimeSpan) Method + +Starts adding a new set of parameter values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder AddTimestamp(System.TimeSpan timeSpan); +``` +#### Parameters + + + +`timeSpan` [System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') + +The time since the default [Epoch](TimeseriesBufferProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.Epoch') to add the parameter values at + +#### Returns +[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') +Timeseries data builder to add parameter values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestampMilliseconds(long).md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestampMilliseconds(long).md new file mode 100644 index 00000000..67551073 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestampMilliseconds(long).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +## TimeseriesBufferProducer.AddTimestampMilliseconds(long) Method + +Starts adding a new set of parameter values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder AddTimestampMilliseconds(long timeMilliseconds); +``` +#### Parameters + + + +`timeMilliseconds` [System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') + +The time in milliseconds since the default [Epoch](TimeseriesBufferProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.Epoch') to add the parameter values at + +#### Returns +[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') +Timeseries data builder to add parameter values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestampNanoseconds(long).md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestampNanoseconds(long).md new file mode 100644 index 00000000..e59ef59f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.AddTimestampNanoseconds(long).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +## TimeseriesBufferProducer.AddTimestampNanoseconds(long) Method + +Starts adding a new set of parameter values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder AddTimestampNanoseconds(long timeNanoseconds); +``` +#### Parameters + + + +`timeNanoseconds` [System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') + +The time in nanoseconds since the default [Epoch](TimeseriesBufferProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.Epoch') to add the parameter values at + +#### Returns +[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') +Timeseries data builder to add parameter values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.DefaultTags.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.DefaultTags.md new file mode 100644 index 00000000..be7dbe2d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.DefaultTags.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +## TimeseriesBufferProducer.DefaultTags Property + +Default tags injected for all parameters values sent by this buffer. + +```csharp +public System.Collections.Generic.Dictionary DefaultTags { get; set; } +``` + +#### Property Value +[System.Collections.Generic.Dictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.Dictionary-2 'System.Collections.Generic.Dictionary`2') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Dispose().md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Dispose().md new file mode 100644 index 00000000..fda0c442 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Dispose().md @@ -0,0 +1,12 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +## TimeseriesBufferProducer.Dispose() Method + +Flushes the internal buffers and disposes the object. + +```csharp +public override void Dispose(); +``` + +Implements [Dispose()](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable.Dispose 'System.IDisposable.Dispose') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Epoch.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Epoch.md new file mode 100644 index 00000000..762ff03d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Epoch.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +## TimeseriesBufferProducer.Epoch Property + +Default Epoch used for Timestamp parameter values. Datetime added on top of all the Timestamps. + +```csharp +public System.DateTime Epoch { get; set; } +``` + +#### Property Value +[System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Flush().md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Flush().md new file mode 100644 index 00000000..48fdfc0e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Flush().md @@ -0,0 +1,10 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +## TimeseriesBufferProducer.Flush() Method + +Immediately publishes the data from the buffer without waiting for the buffer condition to be fulfilled. + +```csharp +public void Flush(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Publish(TimeseriesData).md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Publish(TimeseriesData).md new file mode 100644 index 00000000..d6b08a25 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.Publish(TimeseriesData).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +## TimeseriesBufferProducer.Publish(TimeseriesData) Method + +Publish the provided timeseries data to the buffer. + +```csharp +public void Publish(QuixStreams.Streaming.Models.TimeseriesData data); +``` +#### Parameters + + + +`data` [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +Data to publish \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.md b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.md new file mode 100644 index 00000000..7fc69194 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesBufferProducer.md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') + +## TimeseriesBufferProducer Class + +A class for producing timeseries data to an [IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') in a buffered manner. + +```csharp +public class TimeseriesBufferProducer : QuixStreams.Streaming.Models.TimeseriesBuffer +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 [TimeseriesBuffer](TimeseriesBuffer.md 'QuixStreams.Streaming.Models.TimeseriesBuffer') 🡒 TimeseriesBufferProducer + +| Properties | | +| :--- | :--- | +| [DefaultTags](TimeseriesBufferProducer.DefaultTags.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.DefaultTags') | Default tags injected for all parameters values sent by this buffer. | +| [Epoch](TimeseriesBufferProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.Epoch') | Default Epoch used for Timestamp parameter values. Datetime added on top of all the Timestamps. | + +| Methods | | +| :--- | :--- | +| [AddTimestamp(DateTime)](TimeseriesBufferProducer.AddTimestamp(DateTime).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.AddTimestamp(System.DateTime)') | Starts adding a new set of parameter values at the given timestamp.
Note, [Epoch](TimeseriesBufferProducer.Epoch.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.Epoch') is not used when invoking with a [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') | +| [AddTimestamp(TimeSpan)](TimeseriesBufferProducer.AddTimestamp(TimeSpan).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.AddTimestamp(System.TimeSpan)') | Starts adding a new set of parameter values at the given timestamp. | +| [AddTimestampMilliseconds(long)](TimeseriesBufferProducer.AddTimestampMilliseconds(long).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.AddTimestampMilliseconds(long)') | Starts adding a new set of parameter values at the given timestamp. | +| [AddTimestampNanoseconds(long)](TimeseriesBufferProducer.AddTimestampNanoseconds(long).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.AddTimestampNanoseconds(long)') | Starts adding a new set of parameter values at the given timestamp. | +| [Dispose()](TimeseriesBufferProducer.Dispose().md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.Dispose()') | Flushes the internal buffers and disposes the object. | +| [Flush()](TimeseriesBufferProducer.Flush().md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.Flush()') | Immediately publishes the data from the buffer without waiting for the buffer condition to be fulfilled. | +| [Publish(TimeseriesData)](TimeseriesBufferProducer.Publish(TimeseriesData).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer.Publish(QuixStreams.Streaming.Models.TimeseriesData)') | Publish the provided timeseries data to the buffer. | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestamp(DateTime).md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestamp(DateTime).md new file mode 100644 index 00000000..e696435e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestamp(DateTime).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +## TimeseriesData.AddTimestamp(DateTime) Method + +Starts adding a new set of parameter values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddTimestamp(System.DateTime dateTime); +``` +#### Parameters + + + +`dateTime` [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') + +The datetime to use for adding new parameter values + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +Timeseries data to add parameter values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestamp(TimeSpan).md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestamp(TimeSpan).md new file mode 100644 index 00000000..a0cac249 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestamp(TimeSpan).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +## TimeseriesData.AddTimestamp(TimeSpan) Method + +Starts adding a new set of parameter values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddTimestamp(System.TimeSpan timeSpan); +``` +#### Parameters + + + +`timeSpan` [System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') + +The time since the to add the parameter values at + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +Timeseries data to add parameter values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestampMilliseconds(long).md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestampMilliseconds(long).md new file mode 100644 index 00000000..394536fa --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestampMilliseconds(long).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +## TimeseriesData.AddTimestampMilliseconds(long) Method + +Starts adding a new set of parameter values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddTimestampMilliseconds(long timeMilliseconds); +``` +#### Parameters + + + +`timeMilliseconds` [System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') + +The time in milliseconds since the to add the parameter values at + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +Timeseries data to add parameter values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestampNanoseconds(long).md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestampNanoseconds(long).md new file mode 100644 index 00000000..61f43af2 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.AddTimestampNanoseconds(long).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +## TimeseriesData.AddTimestampNanoseconds(long) Method + +Starts adding a new set of parameter values at the given timestamp. + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddTimestampNanoseconds(long timeNanoseconds); +``` +#### Parameters + + + +`timeNanoseconds` [System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') + +The time in nanoseconds since the to add the parameter values at + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +Timeseries data to add parameter values at the provided time \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.Clone(string[]).md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.Clone(string[]).md new file mode 100644 index 00000000..a21d3d36 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.Clone(string[]).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +## TimeseriesData.Clone(string[]) Method + +Clone the Timeseries Data + +```csharp +public QuixStreams.Streaming.Models.TimeseriesData Clone(params string[] parametersFilter); +``` +#### Parameters + + + +`parametersFilter` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') + +List of parameters to filter when we clone the data. + +#### Returns +[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') +Cloned data \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(List_TimeseriesDataTimestamp_,bool,bool).md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(List_TimeseriesDataTimestamp_,bool,bool).md new file mode 100644 index 00000000..36ac4de5 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(List_TimeseriesDataTimestamp_,bool,bool).md @@ -0,0 +1,29 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +## TimeseriesData(List, bool, bool) Constructor + +Creates a new instance of [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') with the provided timestamps + +```csharp +public TimeseriesData(System.Collections.Generic.List timestamps, bool merge=true, bool clean=true); +``` +#### Parameters + + + +`timestamps` [System.Collections.Generic.List<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1')[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.List-1 'System.Collections.Generic.List`1') + +The timestamps with timeseries data + + + +`merge` [System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') + +Merge duplicated timestamps + + + +`clean` [System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') + +Clean timestamps without values \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(TimeseriesDataRaw,string[],bool,bool).md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(TimeseriesDataRaw,string[],bool,bool).md new file mode 100644 index 00000000..40ced95f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(TimeseriesDataRaw,string[],bool,bool).md @@ -0,0 +1,35 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +## TimeseriesData(TimeseriesDataRaw, string[], bool, bool) Constructor + +Creates a new instance of [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') based on a [QuixStreams.Telemetry.Models.TimeseriesDataRaw](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.TimeseriesDataRaw 'QuixStreams.Telemetry.Models.TimeseriesDataRaw') instance + +```csharp +public TimeseriesData(QuixStreams.Telemetry.Models.TimeseriesDataRaw rawData, string[] parametersFilter=null, bool merge=true, bool clean=true); +``` +#### Parameters + + + +`rawData` [QuixStreams.Telemetry.Models.TimeseriesDataRaw](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.TimeseriesDataRaw 'QuixStreams.Telemetry.Models.TimeseriesDataRaw') + +Timeseries Data Raw instance from where lookup the data + + + +`parametersFilter` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') + +List of parameters to filter + + + +`merge` [System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') + +Merge duplicated timestamps + + + +`clean` [System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') + +Clean timestamps without values \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(int).md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(int).md new file mode 100644 index 00000000..8d06a9cd --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.TimeseriesData(int).md @@ -0,0 +1,18 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +## TimeseriesData(int) Constructor + +Create a new empty Timeseries Data instance to allow create new timestamps and parameters values from scratch + +```csharp +public TimeseriesData(int capacity=10); +``` +#### Parameters + + + +`capacity` [System.Int32](https://docs.microsoft.com/en-us/dotnet/api/System.Int32 'System.Int32') + +The number of timestamps that the new Timeseries Data initially store. + Using this parameter when you know the number of Timestamps you need to store will increase the performance of the writing. \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.Timestamps.md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.Timestamps.md new file mode 100644 index 00000000..db2a090a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.Timestamps.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +## TimeseriesData.Timestamps Property + +Gets the data as rows of [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +```csharp +public QuixStreams.Streaming.Utils.TimeseriesDataTimestamps Timestamps { get; } +``` + +#### Property Value +[TimeseriesDataTimestamps](TimeseriesDataTimestamps.md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestamps') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesData.md b/temp_dir/client-library/api-reference/csharp/TimeseriesData.md new file mode 100644 index 00000000..9ac5087c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesData.md @@ -0,0 +1,30 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## TimeseriesData Class + +Represents a collection of [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +```csharp +public class TimeseriesData +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 TimeseriesData + +| Constructors | | +| :--- | :--- | +| [TimeseriesData(TimeseriesDataRaw, string[], bool, bool)](TimeseriesData.TimeseriesData(TimeseriesDataRaw,string[],bool,bool).md 'QuixStreams.Streaming.Models.TimeseriesData.TimeseriesData(QuixStreams.Telemetry.Models.TimeseriesDataRaw, string[], bool, bool)') | Creates a new instance of [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') based on a [QuixStreams.Telemetry.Models.TimeseriesDataRaw](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Models.TimeseriesDataRaw 'QuixStreams.Telemetry.Models.TimeseriesDataRaw') instance | +| [TimeseriesData(List<TimeseriesDataTimestamp>, bool, bool)](TimeseriesData.TimeseriesData(List_TimeseriesDataTimestamp_,bool,bool).md 'QuixStreams.Streaming.Models.TimeseriesData.TimeseriesData(System.Collections.Generic.List, bool, bool)') | Creates a new instance of [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') with the provided timestamps | +| [TimeseriesData(int)](TimeseriesData.TimeseriesData(int).md 'QuixStreams.Streaming.Models.TimeseriesData.TimeseriesData(int)') | Create a new empty Timeseries Data instance to allow create new timestamps and parameters values from scratch | + +| Properties | | +| :--- | :--- | +| [Timestamps](TimeseriesData.Timestamps.md 'QuixStreams.Streaming.Models.TimeseriesData.Timestamps') | Gets the data as rows of [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') | + +| Methods | | +| :--- | :--- | +| [AddTimestamp(DateTime)](TimeseriesData.AddTimestamp(DateTime).md 'QuixStreams.Streaming.Models.TimeseriesData.AddTimestamp(System.DateTime)') | Starts adding a new set of parameter values at the given timestamp. | +| [AddTimestamp(TimeSpan)](TimeseriesData.AddTimestamp(TimeSpan).md 'QuixStreams.Streaming.Models.TimeseriesData.AddTimestamp(System.TimeSpan)') | Starts adding a new set of parameter values at the given timestamp. | +| [AddTimestampMilliseconds(long)](TimeseriesData.AddTimestampMilliseconds(long).md 'QuixStreams.Streaming.Models.TimeseriesData.AddTimestampMilliseconds(long)') | Starts adding a new set of parameter values at the given timestamp. | +| [AddTimestampNanoseconds(long)](TimeseriesData.AddTimestampNanoseconds(long).md 'QuixStreams.Streaming.Models.TimeseriesData.AddTimestampNanoseconds(long)') | Starts adding a new set of parameter values at the given timestamp. | +| [Clone(string[])](TimeseriesData.Clone(string[]).md 'QuixStreams.Streaming.Models.TimeseriesData.Clone(string[])') | Clone the Timeseries Data | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddTag(string,string).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddTag(string,string).md new file mode 100644 index 00000000..cc3b259d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddTag(string,string).md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') + +## TimeseriesDataBuilder.AddTag(string, string) Method + +Adds a tag to the values. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder AddTag(string tagId, string value); +``` +#### Parameters + + + +`tagId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag Id + + + +`value` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag value + +#### Returns +[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md new file mode 100644 index 00000000..bbf1f512 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') + +## TimeseriesDataBuilder.AddTags(IEnumerable>) Method + +Adds tags to the values. + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder AddTags(System.Collections.Generic.IEnumerable> tags); +``` +#### Parameters + + + +`tags` [System.Collections.Generic.IEnumerable<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1') + +Tags to add. + +#### Returns +[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,byte[]).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,byte[]).md new file mode 100644 index 00000000..b841e073 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,byte[]).md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') + +## TimeseriesDataBuilder.AddValue(string, byte[]) Method + +Adds new parameter value at the time the builder is created for + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder AddValue(string parameterId, byte[] value); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Parameter Id + + + +`value` [System.Byte](https://docs.microsoft.com/en-us/dotnet/api/System.Byte 'System.Byte')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') + +Binary value + +#### Returns +[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,double).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,double).md new file mode 100644 index 00000000..92321f77 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,double).md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') + +## TimeseriesDataBuilder.AddValue(string, double) Method + +Adds new parameter value at the time the builder is created for + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder AddValue(string parameterId, double value); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Parameter Id + + + +`value` [System.Double](https://docs.microsoft.com/en-us/dotnet/api/System.Double 'System.Double') + +Numeric value + +#### Returns +[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,string).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,string).md new file mode 100644 index 00000000..d1a1414e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.AddValue(string,string).md @@ -0,0 +1,26 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') + +## TimeseriesDataBuilder.AddValue(string, string) Method + +Adds new parameter value at the time the builder is created for + +```csharp +public QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder AddValue(string parameterId, string value); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Parameter Id + + + +`value` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +String value + +#### Returns +[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.Publish().md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.Publish().md new file mode 100644 index 00000000..6c07082b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.Publish().md @@ -0,0 +1,10 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') + +## TimeseriesDataBuilder.Publish() Method + +Publish the values + +```csharp +public void Publish(); +``` \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.TimeseriesDataBuilder(TimeseriesBufferProducer,TimeseriesData,TimeseriesDataTimestamp).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.TimeseriesDataBuilder(TimeseriesBufferProducer,TimeseriesData,TimeseriesDataTimestamp).md new file mode 100644 index 00000000..8d26f8df --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.TimeseriesDataBuilder(TimeseriesBufferProducer,TimeseriesData,TimeseriesDataTimestamp).md @@ -0,0 +1,29 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer').[TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') + +## TimeseriesDataBuilder(TimeseriesBufferProducer, TimeseriesData, TimeseriesDataTimestamp) Constructor + +Initializes a new instance of [TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') + +```csharp +public TimeseriesDataBuilder(QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer buffer, QuixStreams.Streaming.Models.TimeseriesData data, QuixStreams.Streaming.Models.TimeseriesDataTimestamp timestamp); +``` +#### Parameters + + + +`buffer` [TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +The [TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') to adds to + + + +`data` [TimeseriesData](TimeseriesData.md 'QuixStreams.Streaming.Models.TimeseriesData') + +Instance of TimeseriesData to modify + + + +`timestamp` [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +Data package managed by the builder \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.md new file mode 100644 index 00000000..7f2feb34 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataBuilder.md @@ -0,0 +1,25 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') + +## TimeseriesDataBuilder Class + +Builder for managing [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') instances on [TimeseriesBufferProducer](TimeseriesBufferProducer.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer') + +```csharp +public class TimeseriesDataBuilder +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 TimeseriesDataBuilder + +| Constructors | | +| :--- | :--- | +| [TimeseriesDataBuilder(TimeseriesBufferProducer, TimeseriesData, TimeseriesDataTimestamp)](TimeseriesDataBuilder.TimeseriesDataBuilder(TimeseriesBufferProducer,TimeseriesData,TimeseriesDataTimestamp).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder(QuixStreams.Streaming.Models.StreamProducer.TimeseriesBufferProducer, QuixStreams.Streaming.Models.TimeseriesData, QuixStreams.Streaming.Models.TimeseriesDataTimestamp)') | Initializes a new instance of [TimeseriesDataBuilder](TimeseriesDataBuilder.md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder') | + +| Methods | | +| :--- | :--- | +| [AddTag(string, string)](TimeseriesDataBuilder.AddTag(string,string).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder.AddTag(string, string)') | Adds a tag to the values. | +| [AddTags(IEnumerable<KeyValuePair<string,string>>)](TimeseriesDataBuilder.AddTags(IEnumerable_KeyValuePair_string,string__).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder.AddTags(System.Collections.Generic.IEnumerable>)') | Adds tags to the values. | +| [AddValue(string, byte[])](TimeseriesDataBuilder.AddValue(string,byte[]).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder.AddValue(string, byte[])') | Adds new parameter value at the time the builder is created for | +| [AddValue(string, double)](TimeseriesDataBuilder.AddValue(string,double).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder.AddValue(string, double)') | Adds new parameter value at the time the builder is created for | +| [AddValue(string, string)](TimeseriesDataBuilder.AddValue(string,string).md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder.AddValue(string, string)') | Adds new parameter value at the time the builder is created for | +| [Publish()](TimeseriesDataBuilder.Publish().md 'QuixStreams.Streaming.Models.StreamProducer.TimeseriesDataBuilder.Publish()') | Publish the values | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.Stream.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.Stream.md new file mode 100644 index 00000000..0017d974 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.Stream.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[TimeseriesDataRawReadEventArgs](TimeseriesDataRawReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs') + +## TimeseriesDataRawReadEventArgs.Stream Property + +Stream of type [IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') or [IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +```csharp +public object Stream { get; } +``` + +#### Property Value +[System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.Topic.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.Topic.md new file mode 100644 index 00000000..6764aace --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.Topic.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[TimeseriesDataRawReadEventArgs](TimeseriesDataRawReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs') + +## TimeseriesDataRawReadEventArgs.Topic Property + +Topic of type [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') or [ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') + +```csharp +public object Topic { get; } +``` + +#### Property Value +[System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.md new file mode 100644 index 00000000..8c127e6e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataRawReadEventArgs.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer') + +## TimeseriesDataRawReadEventArgs Class + +```csharp +public class TimeseriesDataRawReadEventArgs +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 TimeseriesDataRawReadEventArgs + +| Properties | | +| :--- | :--- | +| [Stream](TimeseriesDataRawReadEventArgs.Stream.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs.Stream') | Stream of type [IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') or [IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') | +| [Topic](TimeseriesDataRawReadEventArgs.Topic.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs.Topic') | Topic of type [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') or [ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.Stream.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.Stream.md new file mode 100644 index 00000000..1e6fdbfe --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.Stream.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[TimeseriesDataReadEventArgs](TimeseriesDataReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataReadEventArgs') + +## TimeseriesDataReadEventArgs.Stream Property + +Stream of type [IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') or [IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') + +```csharp +public object Stream { get; } +``` + +#### Property Value +[System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.Topic.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.Topic.md new file mode 100644 index 00000000..f747621f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.Topic.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer').[TimeseriesDataReadEventArgs](TimeseriesDataReadEventArgs.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataReadEventArgs') + +## TimeseriesDataReadEventArgs.Topic Property + +Topic of type [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') or [ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') + +```csharp +public object Topic { get; } +``` + +#### Property Value +[System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.md new file mode 100644 index 00000000..9eecc7b8 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataReadEventArgs.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer') + +## TimeseriesDataReadEventArgs Class + +```csharp +public class TimeseriesDataReadEventArgs +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 TimeseriesDataReadEventArgs + +| Properties | | +| :--- | :--- | +| [Stream](TimeseriesDataReadEventArgs.Stream.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataReadEventArgs.Stream') | Stream of type [IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer') or [IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') | +| [Topic](TimeseriesDataReadEventArgs.Topic.md 'QuixStreams.Streaming.Models.StreamConsumer.TimeseriesDataReadEventArgs.Topic') | Topic of type [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') or [ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddTag(string,string).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddTag(string,string).md new file mode 100644 index 00000000..42ea8df4 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddTag(string,string).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.AddTag(string, string) Method + +Adds a tag to the values + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddTag(string tagId, string tagValue); +``` +#### Parameters + + + +`tagId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag name + + + +`tagValue` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag value + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddTags(IEnumerable_KeyValuePair_string,string__).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddTags(IEnumerable_KeyValuePair_string,string__).md new file mode 100644 index 00000000..09c9d896 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddTags(IEnumerable_KeyValuePair_string,string__).md @@ -0,0 +1,22 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.AddTags(IEnumerable>) Method + +Copies the tags from the specified dictionary. +Conflicting tags will be overwritten + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddTags(System.Collections.Generic.IEnumerable> tags); +``` +#### Parameters + + + +`tags` [System.Collections.Generic.IEnumerable<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1') + +The tags to copy + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,ParameterValue).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,ParameterValue).md new file mode 100644 index 00000000..3a72ecec --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,ParameterValue).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.AddValue(string, ParameterValue) Method + +Adds a new value. + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddValue(string parameterId, QuixStreams.Streaming.Models.ParameterValue value); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Parameter Id + + + +`value` [ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +The value + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,byte[]).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,byte[]).md new file mode 100644 index 00000000..553bd197 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,byte[]).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.AddValue(string, byte[]) Method + +Adds a new binary value. + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddValue(string parameterId, byte[] value); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Parameter Id + + + +`value` [System.Byte](https://docs.microsoft.com/en-us/dotnet/api/System.Byte 'System.Byte')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array') + +String value + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,double).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,double).md new file mode 100644 index 00000000..df66028f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,double).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.AddValue(string, double) Method + +Adds a new numeric value. + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddValue(string parameterId, double value); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Parameter Id + + + +`value` [System.Double](https://docs.microsoft.com/en-us/dotnet/api/System.Double 'System.Double') + +Numeric value + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,string).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,string).md new file mode 100644 index 00000000..f1eb188f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.AddValue(string,string).md @@ -0,0 +1,27 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.AddValue(string, string) Method + +Adds a new string value. + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp AddValue(string parameterId, string value); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Parameter Id + + + +`value` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +String value + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Parameters.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Parameters.md new file mode 100644 index 00000000..2dcc521a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Parameters.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.Parameters Property + +Parameter values for the timestamp. When a key is not found, returns empty [ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') + +```csharp +public QuixStreams.Streaming.TimeseriesDataTimestampValues Parameters { get; } +``` + +#### Property Value +[TimeseriesDataTimestampValues](TimeseriesDataTimestampValues.md 'QuixStreams.Streaming.TimeseriesDataTimestampValues') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.RemoveTag(string).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.RemoveTag(string).md new file mode 100644 index 00000000..16b12d6f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.RemoveTag(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.RemoveTag(string) Method + +Removes a tag from the values + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp RemoveTag(string tagId); +``` +#### Parameters + + + +`tagId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Tag name + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.RemoveValue(string).md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.RemoveValue(string).md new file mode 100644 index 00000000..ad286491 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.RemoveValue(string).md @@ -0,0 +1,21 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.RemoveValue(string) Method + +Removes a parameter value. + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp RemoveValue(string parameterId); +``` +#### Parameters + + + +`parameterId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Parameter Id + +#### Returns +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') +This instance \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Tags.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Tags.md new file mode 100644 index 00000000..44d0857e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Tags.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.Tags Property + +Tags for the timestamp. When key is not found, returns null + +```csharp +public QuixStreams.Streaming.Utils.TimeseriesDataTimestampTags Tags { get; } +``` + +#### Property Value +[TimeseriesDataTimestampTags](TimeseriesDataTimestampTags.md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestampTags') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Timestamp.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Timestamp.md new file mode 100644 index 00000000..f078a36f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.Timestamp.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.Timestamp Property + +Gets the timestamp in [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') format + +```csharp +public System.DateTime Timestamp { get; } +``` + +#### Property Value +[System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampAsTimeSpan.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampAsTimeSpan.md new file mode 100644 index 00000000..4be4b9eb --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampAsTimeSpan.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.TimestampAsTimeSpan Property + +Gets the timestamp in [System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') format + +```csharp +public System.TimeSpan TimestampAsTimeSpan { get; } +``` + +#### Property Value +[System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampMilliseconds.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampMilliseconds.md new file mode 100644 index 00000000..52cb4ef9 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampMilliseconds.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.TimestampMilliseconds Property + +Gets the timestamp in milliseconds + +```csharp +public long TimestampMilliseconds { get; } +``` + +#### Property Value +[System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampNanoseconds.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampNanoseconds.md new file mode 100644 index 00000000..817c6e5b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.TimestampNanoseconds.md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models').[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +## TimeseriesDataTimestamp.TimestampNanoseconds Property + +Gets the timestamp in nanoseconds + +```csharp +public long TimestampNanoseconds { get; set; } +``` + +#### Property Value +[System.Int64](https://docs.microsoft.com/en-us/dotnet/api/System.Int64 'System.Int64') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.md new file mode 100644 index 00000000..b30a4e35 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamp.md @@ -0,0 +1,30 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') + +## TimeseriesDataTimestamp Struct + +Represents a single point in time with parameter values and tags attached to that time + +```csharp +public readonly struct TimeseriesDataTimestamp +``` + +| Properties | | +| :--- | :--- | +| [Parameters](TimeseriesDataTimestamp.Parameters.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.Parameters') | Parameter values for the timestamp. When a key is not found, returns empty [ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue') | +| [Tags](TimeseriesDataTimestamp.Tags.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.Tags') | Tags for the timestamp. When key is not found, returns null | +| [Timestamp](TimeseriesDataTimestamp.Timestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.Timestamp') | Gets the timestamp in [System.DateTime](https://docs.microsoft.com/en-us/dotnet/api/System.DateTime 'System.DateTime') format | +| [TimestampAsTimeSpan](TimeseriesDataTimestamp.TimestampAsTimeSpan.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.TimestampAsTimeSpan') | Gets the timestamp in [System.TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/System.TimeSpan 'System.TimeSpan') format | +| [TimestampMilliseconds](TimeseriesDataTimestamp.TimestampMilliseconds.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.TimestampMilliseconds') | Gets the timestamp in milliseconds | +| [TimestampNanoseconds](TimeseriesDataTimestamp.TimestampNanoseconds.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.TimestampNanoseconds') | Gets the timestamp in nanoseconds | + +| Methods | | +| :--- | :--- | +| [AddTag(string, string)](TimeseriesDataTimestamp.AddTag(string,string).md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.AddTag(string, string)') | Adds a tag to the values | +| [AddTags(IEnumerable<KeyValuePair<string,string>>)](TimeseriesDataTimestamp.AddTags(IEnumerable_KeyValuePair_string,string__).md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.AddTags(System.Collections.Generic.IEnumerable>)') | Copies the tags from the specified dictionary.
Conflicting tags will be overwritten | +| [AddValue(string, ParameterValue)](TimeseriesDataTimestamp.AddValue(string,ParameterValue).md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.AddValue(string, QuixStreams.Streaming.Models.ParameterValue)') | Adds a new value. | +| [AddValue(string, byte[])](TimeseriesDataTimestamp.AddValue(string,byte[]).md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.AddValue(string, byte[])') | Adds a new binary value. | +| [AddValue(string, double)](TimeseriesDataTimestamp.AddValue(string,double).md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.AddValue(string, double)') | Adds a new numeric value. | +| [AddValue(string, string)](TimeseriesDataTimestamp.AddValue(string,string).md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.AddValue(string, string)') | Adds a new string value. | +| [RemoveTag(string)](TimeseriesDataTimestamp.RemoveTag(string).md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.RemoveTag(string)') | Removes a tag from the values | +| [RemoveValue(string)](TimeseriesDataTimestamp.RemoveValue(string).md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp.RemoveValue(string)') | Removes a parameter value. | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampTags.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampTags.md new file mode 100644 index 00000000..cfde68a4 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampTags.md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils') + +## TimeseriesDataTimestampTags Struct + +ReadOnlyDictionary which returns the Tags of the current Timestamp + +```csharp +public readonly struct TimeseriesDataTimestampTags : +System.Collections.Generic.IReadOnlyDictionary, +System.Collections.Generic.IEnumerable>, +System.Collections.IEnumerable, +System.Collections.Generic.IReadOnlyCollection> +``` + +Implements [System.Collections.Generic.IReadOnlyDictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyDictionary-2 'System.Collections.Generic.IReadOnlyDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyDictionary-2 'System.Collections.Generic.IReadOnlyDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyDictionary-2 'System.Collections.Generic.IReadOnlyDictionary`2'), [System.Collections.Generic.IEnumerable<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1'), [System.Collections.IEnumerable](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.IEnumerable 'System.Collections.IEnumerable'), [System.Collections.Generic.IReadOnlyCollection<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyCollection-1 'System.Collections.Generic.IReadOnlyCollection`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyCollection-1 'System.Collections.Generic.IReadOnlyCollection`1') + +| Properties | | +| :--- | :--- | +| [this[string]](TimeseriesDataTimestampTags.this[string].md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestampTags.this[string]') | Retrieves a Tag value by its Tag key | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampTags.this[string].md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampTags.this[string].md new file mode 100644 index 00000000..f3d47d3f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampTags.this[string].md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils').[TimeseriesDataTimestampTags](TimeseriesDataTimestampTags.md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestampTags') + +## TimeseriesDataTimestampTags.this[string] Property + +Retrieves a Tag value by its Tag key + +```csharp +public string this[string key] { get; } +``` +#### Parameters + + + +`key` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Key of the tag + +#### Property Value +[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampValues.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampValues.md new file mode 100644 index 00000000..07eddac4 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestampValues.md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## TimeseriesDataTimestampValues Struct + +Enumerable which returns the the Parameter Values of the current [TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') + +```csharp +public readonly struct TimeseriesDataTimestampValues : +System.Collections.Generic.IReadOnlyDictionary, +System.Collections.Generic.IEnumerable>, +System.Collections.IEnumerable, +System.Collections.Generic.IReadOnlyCollection> +``` + +Implements [System.Collections.Generic.IReadOnlyDictionary<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyDictionary-2 'System.Collections.Generic.IReadOnlyDictionary`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyDictionary-2 'System.Collections.Generic.IReadOnlyDictionary`2')[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyDictionary-2 'System.Collections.Generic.IReadOnlyDictionary`2'), [System.Collections.Generic.IEnumerable<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1'), [System.Collections.IEnumerable](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.IEnumerable 'System.Collections.IEnumerable'), [System.Collections.Generic.IReadOnlyCollection<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyCollection-1 'System.Collections.Generic.IReadOnlyCollection`1')[System.Collections.Generic.KeyValuePair<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[ParameterValue](ParameterValue.md 'QuixStreams.Streaming.Models.ParameterValue')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.KeyValuePair-2 'System.Collections.Generic.KeyValuePair`2')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyCollection-1 'System.Collections.Generic.IReadOnlyCollection`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.Count.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.Count.md new file mode 100644 index 00000000..40c7ed3d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.Count.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils').[TimeseriesDataTimestamps](TimeseriesDataTimestamps.md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestamps') + +## TimeseriesDataTimestamps.Count Property + +Number of Timestamps + +```csharp +public int Count { get; } +``` + +Implements [Count](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyCollection-1.Count 'System.Collections.Generic.IReadOnlyCollection`1.Count') + +#### Property Value +[System.Int32](https://docs.microsoft.com/en-us/dotnet/api/System.Int32 'System.Int32') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.md new file mode 100644 index 00000000..8d0f4963 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils') + +## TimeseriesDataTimestamps Struct + +Enumerable which returns the Timestamps of the current [QuixStreams.Streaming.Utils.TimeseriesDataTimestamps.TimeseriesData](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Streaming.Utils.TimeseriesDataTimestamps.TimeseriesData 'QuixStreams.Streaming.Utils.TimeseriesDataTimestamps.TimeseriesData') + +```csharp +public readonly struct TimeseriesDataTimestamps : +System.Collections.Generic.IReadOnlyCollection, +System.Collections.Generic.IEnumerable, +System.Collections.IEnumerable +``` + +Implements [System.Collections.Generic.IReadOnlyCollection<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyCollection-1 'System.Collections.Generic.IReadOnlyCollection`1')[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IReadOnlyCollection-1 'System.Collections.Generic.IReadOnlyCollection`1'), [System.Collections.Generic.IEnumerable<](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1')[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.Generic.IEnumerable-1 'System.Collections.Generic.IEnumerable`1'), [System.Collections.IEnumerable](https://docs.microsoft.com/en-us/dotnet/api/System.Collections.IEnumerable 'System.Collections.IEnumerable') + +| Properties | | +| :--- | :--- | +| [Count](TimeseriesDataTimestamps.Count.md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestamps.Count') | Number of Timestamps | +| [this[int]](TimeseriesDataTimestamps.this[int].md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestamps.this[int]') | Retrieve a Timestamp by index | diff --git a/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.this[int].md b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.this[int].md new file mode 100644 index 00000000..1d7dbf09 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TimeseriesDataTimestamps.this[int].md @@ -0,0 +1,20 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils').[TimeseriesDataTimestamps](TimeseriesDataTimestamps.md 'QuixStreams.Streaming.Utils.TimeseriesDataTimestamps') + +## TimeseriesDataTimestamps.this[int] Property + +Retrieve a Timestamp by index + +```csharp +public QuixStreams.Streaming.Models.TimeseriesDataTimestamp this[int index] { get; } +``` +#### Parameters + + + +`index` [System.Int32](https://docs.microsoft.com/en-us/dotnet/api/System.Int32 'System.Int32') + +Index of the timestamp + +#### Property Value +[TimeseriesDataTimestamp](TimeseriesDataTimestamp.md 'QuixStreams.Streaming.Models.TimeseriesDataTimestamp') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.Commit().md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.Commit().md new file mode 100644 index 00000000..8090d29f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.Commit().md @@ -0,0 +1,12 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +## TopicConsumer.Commit() Method + +Commit packages read up until now + +```csharp +public void Commit(); +``` + +Implements [Commit()](ITopicConsumer.Commit().md 'QuixStreams.Streaming.ITopicConsumer.Commit()') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnCommitted.md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnCommitted.md new file mode 100644 index 00000000..01d8fe1d --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnCommitted.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +## TopicConsumer.OnCommitted Event + +Raised when underlying source committed data read up to this point + +```csharp +public event EventHandler OnCommitted; +``` + +Implements [OnCommitted](ITopicConsumer.OnCommitted.md 'QuixStreams.Streaming.ITopicConsumer.OnCommitted') + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnCommitting.md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnCommitting.md new file mode 100644 index 00000000..cc9028db --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnCommitting.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +## TopicConsumer.OnCommitting Event + +Raised when underlying source is about to commit data read up to this point + +```csharp +public event EventHandler OnCommitting; +``` + +Implements [OnCommitting](ITopicConsumer.OnCommitting.md 'QuixStreams.Streaming.ITopicConsumer.OnCommitting') + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnDisposed.md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnDisposed.md new file mode 100644 index 00000000..2aa4c0e7 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnDisposed.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +## TopicConsumer.OnDisposed Event + +Raised when the resource is disposed + +```csharp +public event EventHandler OnDisposed; +``` + +Implements [OnDisposed](ITopicConsumer.OnDisposed.md 'QuixStreams.Streaming.ITopicConsumer.OnDisposed') + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnRevoking.md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnRevoking.md new file mode 100644 index 00000000..0f544975 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnRevoking.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +## TopicConsumer.OnRevoking Event + +Raised when the underlying source of data will became unavailable, but depending on implementation commit might be possible at this point + +```csharp +public event EventHandler OnRevoking; +``` + +Implements [OnRevoking](ITopicConsumer.OnRevoking.md 'QuixStreams.Streaming.ITopicConsumer.OnRevoking') + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnStreamReceived.md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnStreamReceived.md new file mode 100644 index 00000000..267e0544 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnStreamReceived.md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +## TopicConsumer.OnStreamReceived Event + +Event raised when a new stream has been received for reading. +Use the Stream Reader interface received to read data from the stream. +You must execute 'Subscribe' method before starting to receive streams from this event + +```csharp +public event EventHandler OnStreamReceived; +``` + +Implements [OnStreamReceived](ITopicConsumer.OnStreamReceived.md 'QuixStreams.Streaming.ITopicConsumer.OnStreamReceived') + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnStreamsRevoked.md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnStreamsRevoked.md new file mode 100644 index 00000000..624933d3 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.OnStreamsRevoked.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +## TopicConsumer.OnStreamsRevoked Event + +Raised when the underlying source of data became unavailable for the streams affected by it + +```csharp +public event EventHandler OnStreamsRevoked; +``` + +Implements [OnStreamsRevoked](ITopicConsumer.OnStreamsRevoked.md 'QuixStreams.Streaming.ITopicConsumer.OnStreamsRevoked') + +#### Event Type +[System.EventHandler<](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1')[IStreamConsumer](IStreamConsumer.md 'QuixStreams.Streaming.IStreamConsumer')[[]](https://docs.microsoft.com/en-us/dotnet/api/System.Array 'System.Array')[>](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler-1 'System.EventHandler`1') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.Subscribe().md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.Subscribe().md new file mode 100644 index 00000000..8f1a9edc --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.Subscribe().md @@ -0,0 +1,13 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +## TopicConsumer.Subscribe() Method + +Start subscribing to streams. +Use 'OnStreamReceived' event to read stream after executing this method + +```csharp +public void Subscribe(); +``` + +Implements [Subscribe()](ITopicConsumer.Subscribe().md 'QuixStreams.Streaming.ITopicConsumer.Subscribe()') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.TopicConsumer(TelemetryKafkaConsumer).md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.TopicConsumer(TelemetryKafkaConsumer).md new file mode 100644 index 00000000..43ba170f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.TopicConsumer(TelemetryKafkaConsumer).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicConsumer](TopicConsumer.md 'QuixStreams.Streaming.TopicConsumer') + +## TopicConsumer(TelemetryKafkaConsumer) Constructor + +Initializes a new instance of [KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') + +```csharp +public TopicConsumer(QuixStreams.Telemetry.Kafka.TelemetryKafkaConsumer telemetryKafkaConsumer); +``` +#### Parameters + + + +`telemetryKafkaConsumer` [QuixStreams.Telemetry.Kafka.TelemetryKafkaConsumer](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.TelemetryKafkaConsumer 'QuixStreams.Telemetry.Kafka.TelemetryKafkaConsumer') + +Kafka consumer from Telemetry layer \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicConsumer.md b/temp_dir/client-library/api-reference/csharp/TopicConsumer.md new file mode 100644 index 00000000..85228e1b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicConsumer.md @@ -0,0 +1,34 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## TopicConsumer Class + +Implementation of [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer') to consume incoming streams + +```csharp +public class TopicConsumer : +QuixStreams.Streaming.ITopicConsumer, +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 TopicConsumer + +Implements [ITopicConsumer](ITopicConsumer.md 'QuixStreams.Streaming.ITopicConsumer'), [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Constructors | | +| :--- | :--- | +| [TopicConsumer(TelemetryKafkaConsumer)](TopicConsumer.TopicConsumer(TelemetryKafkaConsumer).md 'QuixStreams.Streaming.TopicConsumer.TopicConsumer(QuixStreams.Telemetry.Kafka.TelemetryKafkaConsumer)') | Initializes a new instance of [KafkaStreamingClient](KafkaStreamingClient.md 'QuixStreams.Streaming.KafkaStreamingClient') | + +| Methods | | +| :--- | :--- | +| [Commit()](TopicConsumer.Commit().md 'QuixStreams.Streaming.TopicConsumer.Commit()') | Commit packages read up until now | +| [Subscribe()](TopicConsumer.Subscribe().md 'QuixStreams.Streaming.TopicConsumer.Subscribe()') | Start subscribing to streams.
Use 'OnStreamReceived' event to read stream after executing this method | + +| Events | | +| :--- | :--- | +| [OnCommitted](TopicConsumer.OnCommitted.md 'QuixStreams.Streaming.TopicConsumer.OnCommitted') | Raised when underlying source committed data read up to this point | +| [OnCommitting](TopicConsumer.OnCommitting.md 'QuixStreams.Streaming.TopicConsumer.OnCommitting') | Raised when underlying source is about to commit data read up to this point | +| [OnDisposed](TopicConsumer.OnDisposed.md 'QuixStreams.Streaming.TopicConsumer.OnDisposed') | Raised when the resource is disposed | +| [OnRevoking](TopicConsumer.OnRevoking.md 'QuixStreams.Streaming.TopicConsumer.OnRevoking') | Raised when the underlying source of data will became unavailable, but depending on implementation commit might be possible at this point | +| [OnStreamReceived](TopicConsumer.OnStreamReceived.md 'QuixStreams.Streaming.TopicConsumer.OnStreamReceived') | Event raised when a new stream has been received for reading.
Use the Stream Reader interface received to read data from the stream.
You must execute 'Subscribe' method before starting to receive streams from this event | +| [OnStreamsRevoked](TopicConsumer.OnStreamsRevoked.md 'QuixStreams.Streaming.TopicConsumer.OnStreamsRevoked') | Raised when the underlying source of data became unavailable for the streams affected by it | diff --git a/temp_dir/client-library/api-reference/csharp/TopicProducer.CreateStream().md b/temp_dir/client-library/api-reference/csharp/TopicProducer.CreateStream().md new file mode 100644 index 00000000..44706378 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicProducer.CreateStream().md @@ -0,0 +1,16 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +## TopicProducer.CreateStream() Method + +Creates a new stream and returns the related stream producer to operate it. + +```csharp +public QuixStreams.Streaming.IStreamProducer CreateStream(); +``` + +Implements [CreateStream()](ITopicProducer.CreateStream().md 'QuixStreams.Streaming.ITopicProducer.CreateStream()') + +#### Returns +[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') +Stream producer to allow the stream to push data to the platform \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicProducer.CreateStream(string).md b/temp_dir/client-library/api-reference/csharp/TopicProducer.CreateStream(string).md new file mode 100644 index 00000000..fc72fa5f --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicProducer.CreateStream(string).md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +## TopicProducer.CreateStream(string) Method + +Creates a new stream and returns the related stream producer to operate it. + +```csharp +public QuixStreams.Streaming.IStreamProducer CreateStream(string streamId); +``` +#### Parameters + + + +`streamId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +Stream Id of the created stream + +Implements [CreateStream(string)](ITopicProducer.CreateStream(string).md 'QuixStreams.Streaming.ITopicProducer.CreateStream(string)') + +#### Returns +[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') +Stream producer to allow the stream to push data to the platform \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md b/temp_dir/client-library/api-reference/csharp/TopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md new file mode 100644 index 00000000..097a91df --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md @@ -0,0 +1,29 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +## TopicProducer.GetOrCreateStream(string, Action) Method + +Retrieves a stream that was previously created by this instance, if the stream is not closed, otherwise creates a new stream. + +```csharp +public QuixStreams.Streaming.IStreamProducer GetOrCreateStream(string streamId, System.Action onStreamCreated=null); +``` +#### Parameters + + + +`streamId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The Id of the stream you want to get or create + + + +`onStreamCreated` [System.Action<](https://docs.microsoft.com/en-us/dotnet/api/System.Action-1 'System.Action`1')[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Action-1 'System.Action`1') + +Callback executed when a new Stream is created in the topic producer because it doesn't exist. + +Implements [GetOrCreateStream(string, Action<IStreamProducer>)](ITopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md 'QuixStreams.Streaming.ITopicProducer.GetOrCreateStream(string, System.Action)') + +#### Returns +[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') +Stream producer to allow the stream to push data to the platform. \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicProducer.GetStream(string).md b/temp_dir/client-library/api-reference/csharp/TopicProducer.GetStream(string).md new file mode 100644 index 00000000..9c0a883e --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicProducer.GetStream(string).md @@ -0,0 +1,23 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +## TopicProducer.GetStream(string) Method + +Retrieves a stream that was previously created by this instance, if the stream is not closed. + +```csharp +public QuixStreams.Streaming.IStreamProducer GetStream(string streamId); +``` +#### Parameters + + + +`streamId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') + +The Id of the stream + +Implements [GetStream(string)](ITopicProducer.GetStream(string).md 'QuixStreams.Streaming.ITopicProducer.GetStream(string)') + +#### Returns +[IStreamProducer](IStreamProducer.md 'QuixStreams.Streaming.IStreamProducer') +Stream producer to allow the stream to push data to the platform or null if not found. \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicProducer.OnDisposed.md b/temp_dir/client-library/api-reference/csharp/TopicProducer.OnDisposed.md new file mode 100644 index 00000000..246dfb6a --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicProducer.OnDisposed.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +## TopicProducer.OnDisposed Event + +Raised when the resource finished disposing + +```csharp +public event EventHandler OnDisposed; +``` + +Implements [OnDisposed](ITopicProducer.OnDisposed.md 'QuixStreams.Streaming.ITopicProducer.OnDisposed') + +#### Event Type +[System.EventHandler](https://docs.microsoft.com/en-us/dotnet/api/System.EventHandler 'System.EventHandler') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicProducer.RemoveStream(string).md b/temp_dir/client-library/api-reference/csharp/TopicProducer.RemoveStream(string).md new file mode 100644 index 00000000..46a58546 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicProducer.RemoveStream(string).md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +## TopicProducer.RemoveStream(string) Method + +Removes a stream from the internal list of streams + +```csharp +public void RemoveStream(string streamId); +``` +#### Parameters + + + +`streamId` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicProducer.TopicProducer(Func_string,TelemetryKafkaProducer_).md b/temp_dir/client-library/api-reference/csharp/TopicProducer.TopicProducer(Func_string,TelemetryKafkaProducer_).md new file mode 100644 index 00000000..41470a8b --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicProducer.TopicProducer(Func_string,TelemetryKafkaProducer_).md @@ -0,0 +1,17 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +## TopicProducer(Func) Constructor + +Initializes a new instance of [TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +```csharp +public TopicProducer(System.Func createKafkaProducer); +``` +#### Parameters + + + +`createKafkaProducer` [System.Func<](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String')[,](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2')[QuixStreams.Telemetry.Kafka.TelemetryKafkaProducer](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.TelemetryKafkaProducer 'QuixStreams.Telemetry.Kafka.TelemetryKafkaProducer')[>](https://docs.microsoft.com/en-us/dotnet/api/System.Func-2 'System.Func`2') + +Function factory to create a Kafka producer from Telemetry layer. \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicProducer.TopicProducer(KafkaProducerConfiguration,string).md b/temp_dir/client-library/api-reference/csharp/TopicProducer.TopicProducer(KafkaProducerConfiguration,string).md new file mode 100644 index 00000000..7126acb2 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicProducer.TopicProducer(KafkaProducerConfiguration,string).md @@ -0,0 +1,19 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming').[TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +## TopicProducer(KafkaProducerConfiguration, string) Constructor + +Initializes a new instance of [TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') + +```csharp +public TopicProducer(QuixStreams.Telemetry.Kafka.KafkaProducerConfiguration config, string topic); +``` +#### Parameters + + + +`config` [QuixStreams.Telemetry.Kafka.KafkaProducerConfiguration](https://docs.microsoft.com/en-us/dotnet/api/QuixStreams.Telemetry.Kafka.KafkaProducerConfiguration 'QuixStreams.Telemetry.Kafka.KafkaProducerConfiguration') + + + +`topic` [System.String](https://docs.microsoft.com/en-us/dotnet/api/System.String 'System.String') \ No newline at end of file diff --git a/temp_dir/client-library/api-reference/csharp/TopicProducer.md b/temp_dir/client-library/api-reference/csharp/TopicProducer.md new file mode 100644 index 00000000..dfc835f0 --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/TopicProducer.md @@ -0,0 +1,33 @@ +#### [QuixStreams.Streaming](index.md 'index') +### [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') + +## TopicProducer Class + +Implementation of [ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer') to produce outgoing streams + +```csharp +public class TopicProducer : +QuixStreams.Streaming.ITopicProducer, +System.IDisposable +``` + +Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 TopicProducer + +Implements [ITopicProducer](ITopicProducer.md 'QuixStreams.Streaming.ITopicProducer'), [System.IDisposable](https://docs.microsoft.com/en-us/dotnet/api/System.IDisposable 'System.IDisposable') + +| Constructors | | +| :--- | :--- | +| [TopicProducer(KafkaProducerConfiguration, string)](TopicProducer.TopicProducer(KafkaProducerConfiguration,string).md 'QuixStreams.Streaming.TopicProducer.TopicProducer(QuixStreams.Telemetry.Kafka.KafkaProducerConfiguration, string)') | Initializes a new instance of [TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') | +| [TopicProducer(Func<string,TelemetryKafkaProducer>)](TopicProducer.TopicProducer(Func_string,TelemetryKafkaProducer_).md 'QuixStreams.Streaming.TopicProducer.TopicProducer(System.Func)') | Initializes a new instance of [TopicProducer](TopicProducer.md 'QuixStreams.Streaming.TopicProducer') | + +| Methods | | +| :--- | :--- | +| [CreateStream()](TopicProducer.CreateStream().md 'QuixStreams.Streaming.TopicProducer.CreateStream()') | Creates a new stream and returns the related stream producer to operate it. | +| [CreateStream(string)](TopicProducer.CreateStream(string).md 'QuixStreams.Streaming.TopicProducer.CreateStream(string)') | Creates a new stream and returns the related stream producer to operate it. | +| [GetOrCreateStream(string, Action<IStreamProducer>)](TopicProducer.GetOrCreateStream(string,Action_IStreamProducer_).md 'QuixStreams.Streaming.TopicProducer.GetOrCreateStream(string, System.Action)') | Retrieves a stream that was previously created by this instance, if the stream is not closed, otherwise creates a new stream. | +| [GetStream(string)](TopicProducer.GetStream(string).md 'QuixStreams.Streaming.TopicProducer.GetStream(string)') | Retrieves a stream that was previously created by this instance, if the stream is not closed. | +| [RemoveStream(string)](TopicProducer.RemoveStream(string).md 'QuixStreams.Streaming.TopicProducer.RemoveStream(string)') | Removes a stream from the internal list of streams | + +| Events | | +| :--- | :--- | +| [OnDisposed](TopicProducer.OnDisposed.md 'QuixStreams.Streaming.TopicProducer.OnDisposed') | Raised when the resource finished disposing | diff --git a/temp_dir/client-library/api-reference/csharp/index.md b/temp_dir/client-library/api-reference/csharp/index.md new file mode 100644 index 00000000..35c30b6c --- /dev/null +++ b/temp_dir/client-library/api-reference/csharp/index.md @@ -0,0 +1,15 @@ +#### [QuixStreams.Streaming](index.md 'index') + +## QuixStreams.Streaming Assembly + +| Namespaces | | +| :--- | :--- | +| [QuixStreams.Streaming](QuixStreams.Streaming.md 'QuixStreams.Streaming') | | +| [QuixStreams.Streaming.Configuration](QuixStreams.Streaming.Configuration.md 'QuixStreams.Streaming.Configuration') | | +| [QuixStreams.Streaming.Exceptions](QuixStreams.Streaming.Exceptions.md 'QuixStreams.Streaming.Exceptions') | | +| [QuixStreams.Streaming.Models](QuixStreams.Streaming.Models.md 'QuixStreams.Streaming.Models') | | +| [QuixStreams.Streaming.Models.StreamConsumer](QuixStreams.Streaming.Models.StreamConsumer.md 'QuixStreams.Streaming.Models.StreamConsumer') | | +| [QuixStreams.Streaming.Models.StreamProducer](QuixStreams.Streaming.Models.StreamProducer.md 'QuixStreams.Streaming.Models.StreamProducer') | | +| [QuixStreams.Streaming.QuixApi](QuixStreams.Streaming.QuixApi.md 'QuixStreams.Streaming.QuixApi') | | +| [QuixStreams.Streaming.Raw](QuixStreams.Streaming.Raw.md 'QuixStreams.Streaming.Raw') | | +| [QuixStreams.Streaming.Utils](QuixStreams.Streaming.Utils.md 'QuixStreams.Streaming.Utils') | | diff --git a/temp_dir/client-library/api-reference/python/quixstreams.md b/temp_dir/client-library/api-reference/python/quixstreams.md new file mode 100644 index 00000000..1659efbd --- /dev/null +++ b/temp_dir/client-library/api-reference/python/quixstreams.md @@ -0,0 +1,30156 @@ +# Table of Contents + +* [quixstreams](#quixstreams) +* [quixstreams.app](#quixstreams.app) + * [CancellationTokenSource](#quixstreams.app.CancellationTokenSource) + * [\_\_init\_\_](#quixstreams.app.CancellationTokenSource.__init__) + * [is\_cancellation\_requested](#quixstreams.app.CancellationTokenSource.is_cancellation_requested) + * [cancel](#quixstreams.app.CancellationTokenSource.cancel) + * [token](#quixstreams.app.CancellationTokenSource.token) + * [get\_net\_pointer](#quixstreams.app.CancellationTokenSource.get_net_pointer) + * [App](#quixstreams.app.App) + * [run](#quixstreams.app.App.run) +* [quixstreams.builders](#quixstreams.builders) +* [quixstreams.builders.eventdatabuilder](#quixstreams.builders.eventdatabuilder) + * [EventDataBuilder](#quixstreams.builders.eventdatabuilder.EventDataBuilder) + * [\_\_init\_\_](#quixstreams.builders.eventdatabuilder.EventDataBuilder.__init__) + * [add\_value](#quixstreams.builders.eventdatabuilder.EventDataBuilder.add_value) + * [add\_tag](#quixstreams.builders.eventdatabuilder.EventDataBuilder.add_tag) + * [add\_tags](#quixstreams.builders.eventdatabuilder.EventDataBuilder.add_tags) + * [publish](#quixstreams.builders.eventdatabuilder.EventDataBuilder.publish) +* [quixstreams.builders.eventdefinitionbuilder](#quixstreams.builders.eventdefinitionbuilder) + * [EventDefinitionBuilder](#quixstreams.builders.eventdefinitionbuilder.EventDefinitionBuilder) + * [\_\_init\_\_](#quixstreams.builders.eventdefinitionbuilder.EventDefinitionBuilder.__init__) + * [set\_level](#quixstreams.builders.eventdefinitionbuilder.EventDefinitionBuilder.set_level) + * [set\_custom\_properties](#quixstreams.builders.eventdefinitionbuilder.EventDefinitionBuilder.set_custom_properties) + * [add\_definition](#quixstreams.builders.eventdefinitionbuilder.EventDefinitionBuilder.add_definition) +* [quixstreams.builders.parameterdefinitionbuilder](#quixstreams.builders.parameterdefinitionbuilder) + * [ParameterDefinitionBuilder](#quixstreams.builders.parameterdefinitionbuilder.ParameterDefinitionBuilder) + * [\_\_init\_\_](#quixstreams.builders.parameterdefinitionbuilder.ParameterDefinitionBuilder.__init__) + * [set\_range](#quixstreams.builders.parameterdefinitionbuilder.ParameterDefinitionBuilder.set_range) + * [set\_unit](#quixstreams.builders.parameterdefinitionbuilder.ParameterDefinitionBuilder.set_unit) + * [set\_format](#quixstreams.builders.parameterdefinitionbuilder.ParameterDefinitionBuilder.set_format) + * [set\_custom\_properties](#quixstreams.builders.parameterdefinitionbuilder.ParameterDefinitionBuilder.set_custom_properties) + * [add\_definition](#quixstreams.builders.parameterdefinitionbuilder.ParameterDefinitionBuilder.add_definition) +* [quixstreams.builders.timeseriesdatabuilder](#quixstreams.builders.timeseriesdatabuilder) + * [TimeseriesDataBuilder](#quixstreams.builders.timeseriesdatabuilder.TimeseriesDataBuilder) + * [\_\_init\_\_](#quixstreams.builders.timeseriesdatabuilder.TimeseriesDataBuilder.__init__) + * [add\_value](#quixstreams.builders.timeseriesdatabuilder.TimeseriesDataBuilder.add_value) + * [add\_tag](#quixstreams.builders.timeseriesdatabuilder.TimeseriesDataBuilder.add_tag) + * [add\_tags](#quixstreams.builders.timeseriesdatabuilder.TimeseriesDataBuilder.add_tags) + * [publish](#quixstreams.builders.timeseriesdatabuilder.TimeseriesDataBuilder.publish) +* [quixstreams.configuration](#quixstreams.configuration) +* [quixstreams.configuration.saslmechanism](#quixstreams.configuration.saslmechanism) +* [quixstreams.configuration.securityoptions](#quixstreams.configuration.securityoptions) + * [SecurityOptions](#quixstreams.configuration.securityoptions.SecurityOptions) + * [\_\_init\_\_](#quixstreams.configuration.securityoptions.SecurityOptions.__init__) + * [get\_net\_pointer](#quixstreams.configuration.securityoptions.SecurityOptions.get_net_pointer) +* [quixstreams.exceptions.quixapiexception](#quixstreams.exceptions.quixapiexception) +* [quixstreams.helpers](#quixstreams.helpers) +* [quixstreams.helpers.dotnet.datetimeconverter](#quixstreams.helpers.dotnet.datetimeconverter) + * [DateTimeConverter](#quixstreams.helpers.dotnet.datetimeconverter.DateTimeConverter) + * [datetime\_to\_python](#quixstreams.helpers.dotnet.datetimeconverter.DateTimeConverter.datetime_to_python) + * [datetime\_to\_dotnet](#quixstreams.helpers.dotnet.datetimeconverter.DateTimeConverter.datetime_to_dotnet) + * [timespan\_to\_python](#quixstreams.helpers.dotnet.datetimeconverter.DateTimeConverter.timespan_to_python) + * [timedelta\_to\_dotnet](#quixstreams.helpers.dotnet.datetimeconverter.DateTimeConverter.timedelta_to_dotnet) +* [quixstreams.helpers.enumconverter](#quixstreams.helpers.enumconverter) +* [quixstreams.helpers.exceptionconverter](#quixstreams.helpers.exceptionconverter) +* [quixstreams.helpers.nativedecorator](#quixstreams.helpers.nativedecorator) +* [quixstreams.helpers.timeconverter](#quixstreams.helpers.timeconverter) + * [TimeConverter](#quixstreams.helpers.timeconverter.TimeConverter) + * [offset\_from\_utc](#quixstreams.helpers.timeconverter.TimeConverter.offset_from_utc) + * [to\_unix\_nanoseconds](#quixstreams.helpers.timeconverter.TimeConverter.to_unix_nanoseconds) + * [to\_nanoseconds](#quixstreams.helpers.timeconverter.TimeConverter.to_nanoseconds) + * [from\_nanoseconds](#quixstreams.helpers.timeconverter.TimeConverter.from_nanoseconds) + * [from\_unix\_nanoseconds](#quixstreams.helpers.timeconverter.TimeConverter.from_unix_nanoseconds) + * [from\_string](#quixstreams.helpers.timeconverter.TimeConverter.from_string) +* [quixstreams.kafkastreamingclient](#quixstreams.kafkastreamingclient) + * [KafkaStreamingClient](#quixstreams.kafkastreamingclient.KafkaStreamingClient) + * [\_\_init\_\_](#quixstreams.kafkastreamingclient.KafkaStreamingClient.__init__) + * [get\_topic\_consumer](#quixstreams.kafkastreamingclient.KafkaStreamingClient.get_topic_consumer) + * [get\_topic\_producer](#quixstreams.kafkastreamingclient.KafkaStreamingClient.get_topic_producer) + * [get\_raw\_topic\_consumer](#quixstreams.kafkastreamingclient.KafkaStreamingClient.get_raw_topic_consumer) + * [get\_raw\_topic\_producer](#quixstreams.kafkastreamingclient.KafkaStreamingClient.get_raw_topic_producer) +* [quixstreams.logging](#quixstreams.logging) +* [quixstreams.models](#quixstreams.models) +* [quixstreams.models.autooffsetreset](#quixstreams.models.autooffsetreset) + * [AutoOffsetReset](#quixstreams.models.autooffsetreset.AutoOffsetReset) + * [Latest](#quixstreams.models.autooffsetreset.AutoOffsetReset.Latest) + * [Earliest](#quixstreams.models.autooffsetreset.AutoOffsetReset.Earliest) + * [Error](#quixstreams.models.autooffsetreset.AutoOffsetReset.Error) +* [quixstreams.models.codecsettings](#quixstreams.models.codecsettings) + * [CodecSettings](#quixstreams.models.codecsettings.CodecSettings) + * [set\_global\_codec\_type](#quixstreams.models.codecsettings.CodecSettings.set_global_codec_type) +* [quixstreams.models.codectype](#quixstreams.models.codectype) + * [CodecType](#quixstreams.models.codectype.CodecType) +* [quixstreams.models.commitmode](#quixstreams.models.commitmode) +* [quixstreams.models.commitoptions](#quixstreams.models.commitoptions) + * [CommitOptions](#quixstreams.models.commitoptions.CommitOptions) + * [\_\_init\_\_](#quixstreams.models.commitoptions.CommitOptions.__init__) + * [auto\_commit\_enabled](#quixstreams.models.commitoptions.CommitOptions.auto_commit_enabled) + * [auto\_commit\_enabled](#quixstreams.models.commitoptions.CommitOptions.auto_commit_enabled) + * [commit\_interval](#quixstreams.models.commitoptions.CommitOptions.commit_interval) + * [commit\_interval](#quixstreams.models.commitoptions.CommitOptions.commit_interval) + * [commit\_every](#quixstreams.models.commitoptions.CommitOptions.commit_every) + * [commit\_every](#quixstreams.models.commitoptions.CommitOptions.commit_every) +* [quixstreams.models.eventdata](#quixstreams.models.eventdata) + * [EventData](#quixstreams.models.eventdata.EventData) + * [\_\_init\_\_](#quixstreams.models.eventdata.EventData.__init__) + * [id](#quixstreams.models.eventdata.EventData.id) + * [id](#quixstreams.models.eventdata.EventData.id) + * [value](#quixstreams.models.eventdata.EventData.value) + * [value](#quixstreams.models.eventdata.EventData.value) + * [tags](#quixstreams.models.eventdata.EventData.tags) + * [timestamp\_nanoseconds](#quixstreams.models.eventdata.EventData.timestamp_nanoseconds) + * [timestamp\_milliseconds](#quixstreams.models.eventdata.EventData.timestamp_milliseconds) + * [timestamp](#quixstreams.models.eventdata.EventData.timestamp) + * [timestamp\_as\_time\_span](#quixstreams.models.eventdata.EventData.timestamp_as_time_span) + * [clone](#quixstreams.models.eventdata.EventData.clone) + * [add\_tag](#quixstreams.models.eventdata.EventData.add_tag) + * [add\_tags](#quixstreams.models.eventdata.EventData.add_tags) + * [remove\_tag](#quixstreams.models.eventdata.EventData.remove_tag) + * [get\_net\_pointer](#quixstreams.models.eventdata.EventData.get_net_pointer) +* [quixstreams.models.eventdefinition](#quixstreams.models.eventdefinition) + * [EventDefinition](#quixstreams.models.eventdefinition.EventDefinition) + * [\_\_init\_\_](#quixstreams.models.eventdefinition.EventDefinition.__init__) +* [quixstreams.models.eventlevel](#quixstreams.models.eventlevel) +* [quixstreams.models.netdict](#quixstreams.models.netdict) + * [ReadOnlyNetDict](#quixstreams.models.netdict.ReadOnlyNetDict) + * [NetDict](#quixstreams.models.netdict.NetDict) + * [constructor\_for\_string\_string](#quixstreams.models.netdict.NetDict.constructor_for_string_string) +* [quixstreams.models.netlist](#quixstreams.models.netlist) + * [NetReadOnlyList](#quixstreams.models.netlist.NetReadOnlyList) + * [NetList](#quixstreams.models.netlist.NetList) + * [constructor\_for\_string](#quixstreams.models.netlist.NetList.constructor_for_string) +* [quixstreams.models.parameterdefinition](#quixstreams.models.parameterdefinition) + * [ParameterDefinition](#quixstreams.models.parameterdefinition.ParameterDefinition) + * [\_\_init\_\_](#quixstreams.models.parameterdefinition.ParameterDefinition.__init__) +* [quixstreams.models.parametervalue](#quixstreams.models.parametervalue) + * [ParameterValue](#quixstreams.models.parametervalue.ParameterValue) + * [\_\_init\_\_](#quixstreams.models.parametervalue.ParameterValue.__init__) + * [numeric\_value](#quixstreams.models.parametervalue.ParameterValue.numeric_value) + * [numeric\_value](#quixstreams.models.parametervalue.ParameterValue.numeric_value) + * [string\_value](#quixstreams.models.parametervalue.ParameterValue.string_value) + * [string\_value](#quixstreams.models.parametervalue.ParameterValue.string_value) + * [binary\_value](#quixstreams.models.parametervalue.ParameterValue.binary_value) + * [binary\_value](#quixstreams.models.parametervalue.ParameterValue.binary_value) + * [type](#quixstreams.models.parametervalue.ParameterValue.type) + * [value](#quixstreams.models.parametervalue.ParameterValue.value) + * [get\_net\_pointer](#quixstreams.models.parametervalue.ParameterValue.get_net_pointer) +* [quixstreams.models.streamconsumer](#quixstreams.models.streamconsumer) +* [quixstreams.models.streamconsumer.streameventsconsumer](#quixstreams.models.streamconsumer.streameventsconsumer) + * [StreamEventsConsumer](#quixstreams.models.streamconsumer.streameventsconsumer.StreamEventsConsumer) + * [\_\_init\_\_](#quixstreams.models.streamconsumer.streameventsconsumer.StreamEventsConsumer.__init__) + * [on\_data\_received](#quixstreams.models.streamconsumer.streameventsconsumer.StreamEventsConsumer.on_data_received) + * [on\_data\_received](#quixstreams.models.streamconsumer.streameventsconsumer.StreamEventsConsumer.on_data_received) + * [on\_definitions\_changed](#quixstreams.models.streamconsumer.streameventsconsumer.StreamEventsConsumer.on_definitions_changed) + * [on\_definitions\_changed](#quixstreams.models.streamconsumer.streameventsconsumer.StreamEventsConsumer.on_definitions_changed) + * [definitions](#quixstreams.models.streamconsumer.streameventsconsumer.StreamEventsConsumer.definitions) +* [quixstreams.models.streamconsumer.streampropertiesconsumer](#quixstreams.models.streamconsumer.streampropertiesconsumer) + * [StreamPropertiesConsumer](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer) + * [\_\_init\_\_](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer.__init__) + * [on\_changed](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer.on_changed) + * [on\_changed](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer.on_changed) + * [name](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer.name) + * [location](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer.location) + * [time\_of\_recording](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer.time_of_recording) + * [metadata](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer.metadata) + * [parents](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer.parents) + * [get\_net\_pointer](#quixstreams.models.streamconsumer.streampropertiesconsumer.StreamPropertiesConsumer.get_net_pointer) +* [quixstreams.models.streamconsumer.streamtimeseriesconsumer](#quixstreams.models.streamconsumer.streamtimeseriesconsumer) + * [StreamTimeseriesConsumer](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer) + * [\_\_init\_\_](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.__init__) + * [on\_data\_received](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.on_data_received) + * [on\_data\_received](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.on_data_received) + * [on\_raw\_received](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.on_raw_received) + * [on\_raw\_received](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.on_raw_received) + * [on\_dataframe\_received](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.on_dataframe_received) + * [on\_dataframe\_received](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.on_dataframe_received) + * [on\_definitions\_changed](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.on_definitions_changed) + * [on\_definitions\_changed](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.on_definitions_changed) + * [definitions](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.definitions) + * [create\_buffer](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.create_buffer) + * [get\_net\_pointer](#quixstreams.models.streamconsumer.streamtimeseriesconsumer.StreamTimeseriesConsumer.get_net_pointer) +* [quixstreams.models.streamconsumer.timeseriesbufferconsumer](#quixstreams.models.streamconsumer.timeseriesbufferconsumer) + * [TimeseriesBufferConsumer](#quixstreams.models.streamconsumer.timeseriesbufferconsumer.TimeseriesBufferConsumer) + * [\_\_init\_\_](#quixstreams.models.streamconsumer.timeseriesbufferconsumer.TimeseriesBufferConsumer.__init__) + * [get\_net\_pointer](#quixstreams.models.streamconsumer.timeseriesbufferconsumer.TimeseriesBufferConsumer.get_net_pointer) +* [quixstreams.models.streamendtype](#quixstreams.models.streamendtype) +* [quixstreams.models.streampackage](#quixstreams.models.streampackage) + * [StreamPackage](#quixstreams.models.streampackage.StreamPackage) + * [\_\_init\_\_](#quixstreams.models.streampackage.StreamPackage.__init__) + * [transport\_context](#quixstreams.models.streampackage.StreamPackage.transport_context) + * [to\_json](#quixstreams.models.streampackage.StreamPackage.to_json) + * [get\_net\_pointer](#quixstreams.models.streampackage.StreamPackage.get_net_pointer) +* [quixstreams.models.streamproducer](#quixstreams.models.streamproducer) +* [quixstreams.models.streamproducer.streameventsproducer](#quixstreams.models.streamproducer.streameventsproducer) + * [StreamEventsProducer](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer) + * [\_\_init\_\_](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.__init__) + * [flush](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.flush) + * [default\_tags](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.default_tags) + * [default\_location](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.default_location) + * [default\_location](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.default_location) + * [epoch](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.epoch) + * [epoch](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.epoch) + * [publish](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.publish) + * [add\_timestamp](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.add_timestamp) + * [add\_timestamp\_milliseconds](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.add_timestamp_milliseconds) + * [add\_timestamp\_nanoseconds](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.add_timestamp_nanoseconds) + * [add\_definition](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.add_definition) + * [add\_location](#quixstreams.models.streamproducer.streameventsproducer.StreamEventsProducer.add_location) +* [quixstreams.models.streamproducer.streampropertiesproducer](#quixstreams.models.streamproducer.streampropertiesproducer) + * [StreamPropertiesProducer](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer) + * [\_\_init\_\_](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.__init__) + * [name](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.name) + * [name](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.name) + * [location](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.location) + * [location](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.location) + * [metadata](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.metadata) + * [parents](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.parents) + * [time\_of\_recording](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.time_of_recording) + * [time\_of\_recording](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.time_of_recording) + * [flush\_interval](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.flush_interval) + * [flush\_interval](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.flush_interval) + * [flush](#quixstreams.models.streamproducer.streampropertiesproducer.StreamPropertiesProducer.flush) +* [quixstreams.models.streamproducer.streamtimeseriesproducer](#quixstreams.models.streamproducer.streamtimeseriesproducer) + * [StreamTimeseriesProducer](#quixstreams.models.streamproducer.streamtimeseriesproducer.StreamTimeseriesProducer) + * [\_\_init\_\_](#quixstreams.models.streamproducer.streamtimeseriesproducer.StreamTimeseriesProducer.__init__) + * [flush](#quixstreams.models.streamproducer.streamtimeseriesproducer.StreamTimeseriesProducer.flush) + * [add\_definition](#quixstreams.models.streamproducer.streamtimeseriesproducer.StreamTimeseriesProducer.add_definition) + * [add\_location](#quixstreams.models.streamproducer.streamtimeseriesproducer.StreamTimeseriesProducer.add_location) + * [default\_location](#quixstreams.models.streamproducer.streamtimeseriesproducer.StreamTimeseriesProducer.default_location) + * [default\_location](#quixstreams.models.streamproducer.streamtimeseriesproducer.StreamTimeseriesProducer.default_location) + * [buffer](#quixstreams.models.streamproducer.streamtimeseriesproducer.StreamTimeseriesProducer.buffer) + * [publish](#quixstreams.models.streamproducer.streamtimeseriesproducer.StreamTimeseriesProducer.publish) +* [quixstreams.models.streamproducer.timeseriesbufferproducer](#quixstreams.models.streamproducer.timeseriesbufferproducer) + * [TimeseriesBufferProducer](#quixstreams.models.streamproducer.timeseriesbufferproducer.TimeseriesBufferProducer) + * [\_\_init\_\_](#quixstreams.models.streamproducer.timeseriesbufferproducer.TimeseriesBufferProducer.__init__) + * [default\_tags](#quixstreams.models.streamproducer.timeseriesbufferproducer.TimeseriesBufferProducer.default_tags) + * [epoch](#quixstreams.models.streamproducer.timeseriesbufferproducer.TimeseriesBufferProducer.epoch) + * [epoch](#quixstreams.models.streamproducer.timeseriesbufferproducer.TimeseriesBufferProducer.epoch) + * [add\_timestamp](#quixstreams.models.streamproducer.timeseriesbufferproducer.TimeseriesBufferProducer.add_timestamp) + * [add\_timestamp\_nanoseconds](#quixstreams.models.streamproducer.timeseriesbufferproducer.TimeseriesBufferProducer.add_timestamp_nanoseconds) + * [flush](#quixstreams.models.streamproducer.timeseriesbufferproducer.TimeseriesBufferProducer.flush) + * [publish](#quixstreams.models.streamproducer.timeseriesbufferproducer.TimeseriesBufferProducer.publish) +* [quixstreams.models.timeseriesbuffer](#quixstreams.models.timeseriesbuffer) + * [TimeseriesBuffer](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer) + * [\_\_init\_\_](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.__init__) + * [on\_data\_released](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.on_data_released) + * [on\_data\_released](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.on_data_released) + * [on\_raw\_released](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.on_raw_released) + * [on\_raw\_released](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.on_raw_released) + * [on\_dataframe\_released](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.on_dataframe_released) + * [on\_dataframe\_released](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.on_dataframe_released) + * [filter](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.filter) + * [filter](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.filter) + * [custom\_trigger](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.custom_trigger) + * [custom\_trigger](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.custom_trigger) + * [packet\_size](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.packet_size) + * [packet\_size](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.packet_size) + * [time\_span\_in\_nanoseconds](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.time_span_in_nanoseconds) + * [time\_span\_in\_nanoseconds](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.time_span_in_nanoseconds) + * [time\_span\_in\_milliseconds](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.time_span_in_milliseconds) + * [time\_span\_in\_milliseconds](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.time_span_in_milliseconds) + * [buffer\_timeout](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.buffer_timeout) + * [buffer\_timeout](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.buffer_timeout) + * [get\_net\_pointer](#quixstreams.models.timeseriesbuffer.TimeseriesBuffer.get_net_pointer) +* [quixstreams.models.timeseriesbufferconfiguration](#quixstreams.models.timeseriesbufferconfiguration) + * [TimeseriesBufferConfiguration](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration) + * [\_\_init\_\_](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.__init__) + * [packet\_size](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.packet_size) + * [packet\_size](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.packet_size) + * [time\_span\_in\_nanoseconds](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.time_span_in_nanoseconds) + * [time\_span\_in\_nanoseconds](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.time_span_in_nanoseconds) + * [time\_span\_in\_milliseconds](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.time_span_in_milliseconds) + * [time\_span\_in\_milliseconds](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.time_span_in_milliseconds) + * [buffer\_timeout](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.buffer_timeout) + * [buffer\_timeout](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.buffer_timeout) + * [custom\_trigger\_before\_enqueue](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.custom_trigger_before_enqueue) + * [custom\_trigger\_before\_enqueue](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.custom_trigger_before_enqueue) + * [filter](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.filter) + * [filter](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.filter) + * [custom\_trigger](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.custom_trigger) + * [custom\_trigger](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.custom_trigger) + * [get\_net\_pointer](#quixstreams.models.timeseriesbufferconfiguration.TimeseriesBufferConfiguration.get_net_pointer) +* [quixstreams.models.timeseriesdata](#quixstreams.models.timeseriesdata) + * [TimeseriesData](#quixstreams.models.timeseriesdata.TimeseriesData) + * [\_\_init\_\_](#quixstreams.models.timeseriesdata.TimeseriesData.__init__) + * [clone](#quixstreams.models.timeseriesdata.TimeseriesData.clone) + * [add\_timestamp](#quixstreams.models.timeseriesdata.TimeseriesData.add_timestamp) + * [add\_timestamp\_milliseconds](#quixstreams.models.timeseriesdata.TimeseriesData.add_timestamp_milliseconds) + * [add\_timestamp\_nanoseconds](#quixstreams.models.timeseriesdata.TimeseriesData.add_timestamp_nanoseconds) + * [timestamps](#quixstreams.models.timeseriesdata.TimeseriesData.timestamps) + * [timestamps](#quixstreams.models.timeseriesdata.TimeseriesData.timestamps) + * [to\_dataframe](#quixstreams.models.timeseriesdata.TimeseriesData.to_dataframe) + * [from\_panda\_dataframe](#quixstreams.models.timeseriesdata.TimeseriesData.from_panda_dataframe) + * [get\_net\_pointer](#quixstreams.models.timeseriesdata.TimeseriesData.get_net_pointer) +* [quixstreams.models.timeseriesdataraw](#quixstreams.models.timeseriesdataraw) + * [TimeseriesDataRaw](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw) + * [\_\_init\_\_](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.__init__) + * [to\_dataframe](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.to_dataframe) + * [from\_dataframe](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.from_dataframe) + * [set\_values](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.set_values) + * [epoch](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.epoch) + * [timestamps](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.timestamps) + * [numeric\_values](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.numeric_values) + * [string\_values](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.string_values) + * [binary\_values](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.binary_values) + * [tag\_values](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.tag_values) + * [convert\_to\_timeseriesdata](#quixstreams.models.timeseriesdataraw.TimeseriesDataRaw.convert_to_timeseriesdata) +* [quixstreams.models.timeseriesdatatimestamp](#quixstreams.models.timeseriesdatatimestamp) + * [TimeseriesDataTimestamp](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp) + * [\_\_init\_\_](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.__init__) + * [parameters](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.parameters) + * [tags](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.tags) + * [timestamp\_nanoseconds](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.timestamp_nanoseconds) + * [timestamp\_milliseconds](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.timestamp_milliseconds) + * [timestamp](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.timestamp) + * [timestamp\_as\_time\_span](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.timestamp_as_time_span) + * [add\_value](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.add_value) + * [remove\_value](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.remove_value) + * [add\_tag](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.add_tag) + * [remove\_tag](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.remove_tag) + * [add\_tags](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.add_tags) + * [get\_net\_pointer](#quixstreams.models.timeseriesdatatimestamp.TimeseriesDataTimestamp.get_net_pointer) +* [quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array) + * [Array](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array) + * [ReadBlittables](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadBlittables) + * [WriteBlittables](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteBlittables) + * [ReadArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadArray) + * [WriteArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteArray) + * [ReadNullables](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadNullables) + * [ReadLongs](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadLongs) + * [ReadLongsArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadLongsArray) + * [WriteLongs](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteLongs) + * [WriteLongsArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteLongsArray) + * [ReadStrings](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadStrings) + * [ReadStringsArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadStringsArray) + * [WriteStrings](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteStrings) + * [WriteStringsArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteStringsArray) + * [ReadDoubles](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadDoubles) + * [ReadDoublesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadDoublesArray) + * [WriteDoubles](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteDoubles) + * [WriteDoublesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteDoublesArray) + * [ReadPointers](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadPointers) + * [ReadPointersArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadPointersArray) + * [WritePointers](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WritePointers) + * [WritePointersArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WritePointersArray) + * [ReadBytes](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadBytes) + * [ReadBytesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadBytesArray) + * [WriteBytes](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteBytes) + * [WriteBytesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteBytesArray) + * [ReadNullableDoubles](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadNullableDoubles) + * [ReadNullableDoublesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.ReadNullableDoublesArray) + * [WriteNullableDoubles](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteNullableDoubles) + * [WriteNullableDoublesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array.Array.WriteNullableDoublesArray) +* [quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Collection](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Collection) +* [quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary) + * [Dictionary](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary) + * [ReadAnyHPtrToUPtr](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.ReadAnyHPtrToUPtr) + * [WriteBlittables](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.WriteBlittables) + * [ReadBlittables](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.ReadBlittables) + * [WriteStringPointers](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.WriteStringPointers) + * [ReadStringPointers](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.ReadStringPointers) + * [WriteStringDoublesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.WriteStringDoublesArray) + * [ReadStringDoublesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.ReadStringDoublesArray) + * [WriteStringLongsArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.WriteStringLongsArray) + * [ReadStringLongsArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.ReadStringLongsArray) + * [WriteStringStrings](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.WriteStringStrings) + * [ReadStringStrings](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.ReadStringStrings) + * [WriteStringStringsArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.WriteStringStringsArray) + * [ReadStringStringsArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.ReadStringStringsArray) + * [WriteStringBytesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.WriteStringBytesArray) + * [ReadStringBytesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.ReadStringBytesArray) + * [WriteStringNullableDoublesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.WriteStringNullableDoublesArray) + * [ReadStringNullableDoublesArray](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary.Dictionary.ReadStringNullableDoublesArray) +* [quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Enumerable](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Enumerable) + * [Enumerable](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Enumerable.Enumerable) + * [ReadAny](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Enumerable.Enumerable.ReadAny) +* [quixstreams.native.Python.InteropHelpers.ExternalTypes.System.List](#quixstreams.native.Python.InteropHelpers.ExternalTypes.System.List) +* [quixstreams.native.Python.InteropHelpers.InteropUtils](#quixstreams.native.Python.InteropHelpers.InteropUtils) + * [InteropUtils](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils) + * [set\_exception\_callback](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.set_exception_callback) + * [log\_debug](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.log_debug) + * [enable\_debug](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.enable_debug) + * [disable\_debug](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.disable_debug) + * [pin\_hptr\_target](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.pin_hptr_target) + * [get\_pin\_address](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.get_pin_address) + * [free\_hptr](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.free_hptr) + * [free\_uptr](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.free_uptr) + * [allocate\_uptr](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.allocate_uptr) + * [invoke\_and\_free](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.invoke_and_free) + * [dict\_nullables](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.dict_nullables) + * [create\_nullable](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.create_nullable) + * [dict\_mem\_nullables](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.dict_mem_nullables) + * [create\_mem\_nullable](#quixstreams.native.Python.InteropHelpers.InteropUtils.InteropUtils.create_mem_nullable) +* [quixstreams.native.Python.MicrosoftExtensionsLoggingAbstractions.Microsoft.Extensions.Logging.LogLevel](#quixstreams.native.Python.MicrosoftExtensionsLoggingAbstractions.Microsoft.Extensions.Logging.LogLevel) +* [quixstreams.native.Python.QuixStreamsState.StateValue](#quixstreams.native.Python.QuixStreamsState.StateValue) + * [StateValue](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.Constructor) + * [Constructor2](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.Constructor2) + * [Constructor3](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.Constructor3) + * [Constructor4](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.Constructor4) + * [Constructor5](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.Constructor5) + * [Constructor6](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.Constructor6) + * [get\_Type](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.get_Type) + * [get\_DoubleValue](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.get_DoubleValue) + * [get\_LongValue](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.get_LongValue) + * [get\_StringValue](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.get_StringValue) + * [get\_BoolValue](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.get_BoolValue) + * [get\_BinaryValue](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.get_BinaryValue) + * [Equals](#quixstreams.native.Python.QuixStreamsState.StateValue.StateValue.Equals) +* [quixstreams.native.Python.QuixStreamsState.StateValue\_StateType](#quixstreams.native.Python.QuixStreamsState.StateValue_StateType) +* [quixstreams.native.Python.QuixStreamsState.Storage.FileStorage.LocalFileStorage.LocalFileStorage](#quixstreams.native.Python.QuixStreamsState.Storage.FileStorage.LocalFileStorage.LocalFileStorage) + * [LocalFileStorage](#quixstreams.native.Python.QuixStreamsState.Storage.FileStorage.LocalFileStorage.LocalFileStorage.LocalFileStorage) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsState.Storage.FileStorage.LocalFileStorage.LocalFileStorage.LocalFileStorage.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsState.Storage.FileStorage.LocalFileStorage.LocalFileStorage.LocalFileStorage.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsState.Storage.FileStorage.LocalFileStorage.LocalFileStorage.LocalFileStorage.Constructor) +* [quixstreams.native.Python.QuixStreamsState.Storage.IStateStorage](#quixstreams.native.Python.QuixStreamsState.Storage.IStateStorage) + * [IStateStorage](#quixstreams.native.Python.QuixStreamsState.Storage.IStateStorage.IStateStorage) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsState.Storage.IStateStorage.IStateStorage.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsState.Storage.IStateStorage.IStateStorage.__init__) +* [quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions) + * [StorageExtensions](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions) + * [Set](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.Set) + * [Set2](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.Set2) + * [Set3](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.Set3) + * [Set4](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.Set4) + * [Set5](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.Set5) + * [Set6](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.Set6) + * [Get](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.Get) + * [GetDouble](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.GetDouble) + * [GetString](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.GetString) + * [GetBool](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.GetBool) + * [GetLong](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.GetLong) + * [GetBinary](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.GetBinary) + * [Remove](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.Remove) + * [ContainsKey](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.ContainsKey) + * [GetAllKeys](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.GetAllKeys) + * [Clear](#quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions.StorageExtensions.Clear) +* [quixstreams.native.Python.QuixStreamsStreaming.App](#quixstreams.native.Python.QuixStreamsStreaming.App) + * [App](#quixstreams.native.Python.QuixStreamsStreaming.App.App) + * [Run](#quixstreams.native.Python.QuixStreamsStreaming.App.App.Run) +* [quixstreams.native.Python.QuixStreamsStreaming.Configuration.SaslMechanism](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SaslMechanism) +* [quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions) + * [SecurityOptions](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.Constructor) + * [Constructor2](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.Constructor2) + * [get\_SaslMechanism](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.get_SaslMechanism) + * [set\_SaslMechanism](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.set_SaslMechanism) + * [get\_Username](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.get_Username) + * [set\_Username](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.set_Username) + * [get\_Password](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.get_Password) + * [set\_Password](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.set_Password) + * [get\_SslCertificates](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.get_SslCertificates) + * [set\_SslCertificates](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.set_SslCertificates) + * [get\_UseSsl](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.get_UseSsl) + * [set\_UseSsl](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.set_UseSsl) + * [get\_UseSasl](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.get_UseSasl) + * [set\_UseSasl](#quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions.SecurityOptions.set_UseSasl) +* [quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer) + * [IStreamConsumer](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.__init__) + * [get\_StreamId](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.get_StreamId) + * [get\_Properties](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.get_Properties) + * [get\_Timeseries](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.get_Timeseries) + * [get\_Events](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.get_Events) + * [add\_OnPackageReceived](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.add_OnPackageReceived) + * [remove\_OnPackageReceived](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.remove_OnPackageReceived) + * [add\_OnStreamClosed](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.add_OnStreamClosed) + * [remove\_OnStreamClosed](#quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer.IStreamConsumer.remove_OnStreamClosed) +* [quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer) + * [IStreamProducer](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.__init__) + * [get\_StreamId](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.get_StreamId) + * [get\_Epoch](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.get_Epoch) + * [set\_Epoch](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.set_Epoch) + * [get\_Properties](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.get_Properties) + * [get\_Timeseries](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.get_Timeseries) + * [get\_Events](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.get_Events) + * [Flush](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.Flush) + * [Close](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.Close) + * [add\_OnWriteException](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.add_OnWriteException) + * [remove\_OnWriteException](#quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer.IStreamProducer.remove_OnWriteException) +* [quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer) + * [ITopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.__init__) + * [Subscribe](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.Subscribe) + * [add\_OnStreamReceived](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.add_OnStreamReceived) + * [remove\_OnStreamReceived](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.remove_OnStreamReceived) + * [add\_OnRevoking](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.add_OnRevoking) + * [remove\_OnRevoking](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.remove_OnRevoking) + * [add\_OnStreamsRevoked](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.add_OnStreamsRevoked) + * [remove\_OnStreamsRevoked](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.remove_OnStreamsRevoked) + * [add\_OnCommitted](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.add_OnCommitted) + * [remove\_OnCommitted](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.remove_OnCommitted) + * [add\_OnCommitting](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.add_OnCommitting) + * [remove\_OnCommitting](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.remove_OnCommitting) + * [Commit](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.Commit) + * [add\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.add_OnDisposed) + * [remove\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer.ITopicConsumer.remove_OnDisposed) +* [quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer) + * [ITopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer.ITopicProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer.ITopicProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer.ITopicProducer.__init__) + * [CreateStream](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer.ITopicProducer.CreateStream) + * [CreateStream2](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer.ITopicProducer.CreateStream2) + * [GetStream](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer.ITopicProducer.GetStream) + * [GetOrCreateStream](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer.ITopicProducer.GetOrCreateStream) + * [add\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer.ITopicProducer.add_OnDisposed) + * [remove\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer.ITopicProducer.remove_OnDisposed) +* [quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient) + * [KafkaStreamingClient](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient.KafkaStreamingClient) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient.KafkaStreamingClient.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient.KafkaStreamingClient.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient.KafkaStreamingClient.Constructor) + * [GetTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient.KafkaStreamingClient.GetTopicConsumer) + * [GetRawTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient.KafkaStreamingClient.GetRawTopicConsumer) + * [GetRawTopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient.KafkaStreamingClient.GetRawTopicProducer) + * [GetTopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient.KafkaStreamingClient.GetTopicProducer) +* [quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClientExtensions](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClientExtensions) + * [KafkaStreamingClientExtensions](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClientExtensions.KafkaStreamingClientExtensions) + * [GetTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClientExtensions.KafkaStreamingClientExtensions.GetTopicConsumer) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.CommitMode](#quixstreams.native.Python.QuixStreamsStreaming.Models.CommitMode) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.EventData](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData) + * [EventData](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.Constructor) + * [Constructor2](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.Constructor2) + * [Constructor3](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.Constructor3) + * [Clone](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.Clone) + * [get\_Id](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.get_Id) + * [set\_Id](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.set_Id) + * [get\_Value](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.get_Value) + * [set\_Value](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.set_Value) + * [get\_Tags](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.get_Tags) + * [AddTag](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.AddTag) + * [AddTags](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.AddTags) + * [RemoveTag](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.RemoveTag) + * [get\_TimestampNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.get_TimestampNanoseconds) + * [get\_TimestampMilliseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.get_TimestampMilliseconds) + * [get\_Timestamp](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.get_Timestamp) + * [get\_TimestampAsTimeSpan](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventData.EventData.get_TimestampAsTimeSpan) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition) + * [EventDefinition](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition.Constructor) + * [get\_Id](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition.get_Id) + * [get\_Name](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition.get_Name) + * [get\_Description](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition.get_Description) + * [get\_Location](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition.get_Location) + * [get\_CustomProperties](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition.get_CustomProperties) + * [get\_Level](#quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition.EventDefinition.get_Level) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition) + * [ParameterDefinition](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.Constructor) + * [get\_Id](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.get_Id) + * [get\_Name](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.get_Name) + * [get\_Description](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.get_Description) + * [get\_Location](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.get_Location) + * [get\_MinimumValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.get_MinimumValue) + * [get\_MaximumValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.get_MaximumValue) + * [get\_Unit](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.get_Unit) + * [get\_Format](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.get_Format) + * [get\_CustomProperties](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition.ParameterDefinition.get_CustomProperties) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue) + * [ParameterValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.__init__) + * [get\_ParameterId](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.get_ParameterId) + * [get\_NumericValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.get_NumericValue) + * [set\_NumericValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.set_NumericValue) + * [get\_StringValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.get_StringValue) + * [set\_StringValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.set_StringValue) + * [get\_BinaryValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.get_BinaryValue) + * [set\_BinaryValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.set_BinaryValue) + * [get\_Value](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.get_Value) + * [op\_Equality](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.op_Equality) + * [op\_Inequality](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.op_Inequality) + * [Equals](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.Equals) + * [GetHashCode](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.GetHashCode) + * [ToString](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.ToString) + * [get\_Type](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue.ParameterValue.get_Type) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValueType](#quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValueType) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs) + * [EventDataReadEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs.EventDataReadEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs.EventDataReadEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs.EventDataReadEventArgs.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs.EventDataReadEventArgs.Constructor) + * [get\_TopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs.EventDataReadEventArgs.get_TopicConsumer) + * [get\_Stream](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs.EventDataReadEventArgs.get_Stream) + * [get\_Data](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs.EventDataReadEventArgs.get_Data) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs) + * [EventDefinitionsChangedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs.EventDefinitionsChangedEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs.EventDefinitionsChangedEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs.EventDefinitionsChangedEventArgs.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs.EventDefinitionsChangedEventArgs.Constructor) + * [get\_TopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs.EventDefinitionsChangedEventArgs.get_TopicConsumer) + * [get\_Stream](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs.EventDefinitionsChangedEventArgs.get_Stream) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs) + * [ParameterDefinitionsChangedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs.ParameterDefinitionsChangedEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs.ParameterDefinitionsChangedEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs.ParameterDefinitionsChangedEventArgs.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs.ParameterDefinitionsChangedEventArgs.Constructor) + * [get\_TopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs.ParameterDefinitionsChangedEventArgs.get_TopicConsumer) + * [get\_Stream](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs.ParameterDefinitionsChangedEventArgs.get_Stream) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer) + * [StreamEventsConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer.StreamEventsConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer.StreamEventsConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer.StreamEventsConsumer.__init__) + * [add\_OnDataReceived](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer.StreamEventsConsumer.add_OnDataReceived) + * [remove\_OnDataReceived](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer.StreamEventsConsumer.remove_OnDataReceived) + * [add\_OnDefinitionsChanged](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer.StreamEventsConsumer.add_OnDefinitionsChanged) + * [remove\_OnDefinitionsChanged](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer.StreamEventsConsumer.remove_OnDefinitionsChanged) + * [get\_Definitions](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer.StreamEventsConsumer.get_Definitions) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer.StreamEventsConsumer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs) + * [StreamPropertiesChangedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs.StreamPropertiesChangedEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs.StreamPropertiesChangedEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs.StreamPropertiesChangedEventArgs.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs.StreamPropertiesChangedEventArgs.Constructor) + * [get\_TopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs.StreamPropertiesChangedEventArgs.get_TopicConsumer) + * [get\_Stream](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs.StreamPropertiesChangedEventArgs.get_Stream) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer) + * [StreamPropertiesConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.__init__) + * [add\_OnChanged](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.add_OnChanged) + * [remove\_OnChanged](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.remove_OnChanged) + * [get\_Name](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.get_Name) + * [get\_Location](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.get_Location) + * [get\_TimeOfRecording](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.get_TimeOfRecording) + * [get\_Metadata](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.get_Metadata) + * [get\_Parents](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.get_Parents) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer.StreamPropertiesConsumer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer) + * [StreamTimeseriesConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.__init__) + * [CreateBuffer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.CreateBuffer) + * [CreateBuffer2](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.CreateBuffer2) + * [add\_OnDefinitionsChanged](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.add_OnDefinitionsChanged) + * [remove\_OnDefinitionsChanged](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.remove_OnDefinitionsChanged) + * [add\_OnDataReceived](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.add_OnDataReceived) + * [remove\_OnDataReceived](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.remove_OnDataReceived) + * [add\_OnRawReceived](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.add_OnRawReceived) + * [remove\_OnRawReceived](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.remove_OnRawReceived) + * [get\_Definitions](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.get_Definitions) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer.StreamTimeseriesConsumer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesBufferConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesBufferConsumer) + * [TimeseriesBufferConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesBufferConsumer.TimeseriesBufferConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesBufferConsumer.TimeseriesBufferConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesBufferConsumer.TimeseriesBufferConsumer.__init__) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesBufferConsumer.TimeseriesBufferConsumer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs) + * [TimeseriesDataRawReadEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs.TimeseriesDataRawReadEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs.TimeseriesDataRawReadEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs.TimeseriesDataRawReadEventArgs.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs.TimeseriesDataRawReadEventArgs.Constructor) + * [get\_Topic](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs.TimeseriesDataRawReadEventArgs.get_Topic) + * [get\_Stream](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs.TimeseriesDataRawReadEventArgs.get_Stream) + * [get\_Data](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs.TimeseriesDataRawReadEventArgs.get_Data) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs) + * [TimeseriesDataReadEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs.TimeseriesDataReadEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs.TimeseriesDataReadEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs.TimeseriesDataReadEventArgs.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs.TimeseriesDataReadEventArgs.Constructor) + * [get\_Topic](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs.TimeseriesDataReadEventArgs.get_Topic) + * [get\_Stream](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs.TimeseriesDataReadEventArgs.get_Stream) + * [get\_Data](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs.TimeseriesDataReadEventArgs.get_Data) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder) + * [EventDataBuilder](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder.EventDataBuilder) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder.EventDataBuilder.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder.EventDataBuilder.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder.EventDataBuilder.Constructor) + * [AddValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder.EventDataBuilder.AddValue) + * [AddTag](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder.EventDataBuilder.AddTag) + * [AddTags](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder.EventDataBuilder.AddTags) + * [Publish](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder.EventDataBuilder.Publish) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder) + * [EventDefinitionBuilder](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder.EventDefinitionBuilder) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder.EventDefinitionBuilder.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder.EventDefinitionBuilder.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder.EventDefinitionBuilder.Constructor) + * [SetLevel](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder.EventDefinitionBuilder.SetLevel) + * [SetCustomProperties](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder.EventDefinitionBuilder.SetCustomProperties) + * [AddDefinition](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder.EventDefinitionBuilder.AddDefinition) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder) + * [ParameterDefinitionBuilder](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder.Constructor) + * [SetRange](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder.SetRange) + * [SetUnit](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder.SetUnit) + * [SetFormat](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder.SetFormat) + * [SetCustomProperties](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder.SetCustomProperties) + * [AddDefinition](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder.ParameterDefinitionBuilder.AddDefinition) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer) + * [StreamEventsProducer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.__init__) + * [get\_DefaultTags](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.get_DefaultTags) + * [set\_DefaultTags](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.set_DefaultTags) + * [get\_DefaultLocation](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.get_DefaultLocation) + * [set\_DefaultLocation](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.set_DefaultLocation) + * [get\_Epoch](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.get_Epoch) + * [set\_Epoch](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.set_Epoch) + * [AddTimestamp](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.AddTimestamp) + * [AddTimestamp2](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.AddTimestamp2) + * [AddTimestampMilliseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.AddTimestampMilliseconds) + * [AddTimestampNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.AddTimestampNanoseconds) + * [AddDefinitions](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.AddDefinitions) + * [AddDefinition](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.AddDefinition) + * [AddLocation](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.AddLocation) + * [Flush](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.Flush) + * [Publish](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.Publish) + * [Publish2](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.Publish2) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer.StreamEventsProducer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer) + * [StreamPropertiesProducer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.__init__) + * [get\_FlushInterval](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.get_FlushInterval) + * [set\_FlushInterval](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.set_FlushInterval) + * [get\_Name](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.get_Name) + * [set\_Name](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.set_Name) + * [get\_Location](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.get_Location) + * [set\_Location](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.set_Location) + * [get\_TimeOfRecording](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.get_TimeOfRecording) + * [set\_TimeOfRecording](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.set_TimeOfRecording) + * [get\_Metadata](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.get_Metadata) + * [get\_Parents](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.get_Parents) + * [AddParent](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.AddParent) + * [RemoveParent](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.RemoveParent) + * [Flush](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.Flush) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer.StreamPropertiesProducer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer) + * [StreamTimeseriesProducer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.__init__) + * [get\_Buffer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.get_Buffer) + * [Publish](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.Publish) + * [Publish2](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.Publish2) + * [get\_DefaultLocation](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.get_DefaultLocation) + * [set\_DefaultLocation](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.set_DefaultLocation) + * [AddDefinitions](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.AddDefinitions) + * [AddDefinition](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.AddDefinition) + * [AddLocation](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.AddLocation) + * [Flush](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.Flush) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer.StreamTimeseriesProducer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer) + * [TimeseriesBufferProducer](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.__init__) + * [get\_Epoch](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.get_Epoch) + * [set\_Epoch](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.set_Epoch) + * [AddTimestamp](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.AddTimestamp) + * [AddTimestamp2](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.AddTimestamp2) + * [AddTimestampMilliseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.AddTimestampMilliseconds) + * [AddTimestampNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.AddTimestampNanoseconds) + * [Publish](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.Publish) + * [get\_DefaultTags](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.get_DefaultTags) + * [set\_DefaultTags](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.set_DefaultTags) + * [Flush](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.Flush) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer.TimeseriesBufferProducer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder) + * [TimeseriesDataBuilder](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder.Constructor) + * [AddValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder.AddValue) + * [AddValue2](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder.AddValue2) + * [AddValue3](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder.AddValue3) + * [AddTag](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder.AddTag) + * [AddTags](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder.AddTags) + * [Publish](#quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder.TimeseriesDataBuilder.Publish) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer) + * [TimeseriesBuffer](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.__init__) + * [add\_OnDataReleased](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.add_OnDataReleased) + * [remove\_OnDataReleased](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.remove_OnDataReleased) + * [add\_OnRawReleased](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.add_OnRawReleased) + * [remove\_OnRawReleased](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.remove_OnRawReleased) + * [get\_PacketSize](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.get_PacketSize) + * [set\_PacketSize](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.set_PacketSize) + * [get\_BufferTimeout](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.get_BufferTimeout) + * [set\_BufferTimeout](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.set_BufferTimeout) + * [get\_TimeSpanInNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.get_TimeSpanInNanoseconds) + * [set\_TimeSpanInNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.set_TimeSpanInNanoseconds) + * [get\_TimeSpanInMilliseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.get_TimeSpanInMilliseconds) + * [set\_TimeSpanInMilliseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.set_TimeSpanInMilliseconds) + * [get\_Filter](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.get_Filter) + * [set\_Filter](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.set_Filter) + * [get\_CustomTriggerBeforeEnqueue](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.get_CustomTriggerBeforeEnqueue) + * [set\_CustomTriggerBeforeEnqueue](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.set_CustomTriggerBeforeEnqueue) + * [get\_CustomTrigger](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.get_CustomTrigger) + * [set\_CustomTrigger](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.set_CustomTrigger) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer.TimeseriesBuffer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration) + * [TimeseriesBufferConfiguration](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.Constructor) + * [get\_PacketSize](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.get_PacketSize) + * [set\_PacketSize](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.set_PacketSize) + * [get\_TimeSpanInNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.get_TimeSpanInNanoseconds) + * [set\_TimeSpanInNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.set_TimeSpanInNanoseconds) + * [get\_TimeSpanInMilliseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.get_TimeSpanInMilliseconds) + * [set\_TimeSpanInMilliseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.set_TimeSpanInMilliseconds) + * [get\_CustomTriggerBeforeEnqueue](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.get_CustomTriggerBeforeEnqueue) + * [set\_CustomTriggerBeforeEnqueue](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.set_CustomTriggerBeforeEnqueue) + * [get\_CustomTrigger](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.get_CustomTrigger) + * [set\_CustomTrigger](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.set_CustomTrigger) + * [get\_Filter](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.get_Filter) + * [set\_Filter](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.set_Filter) + * [get\_BufferTimeout](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.get_BufferTimeout) + * [set\_BufferTimeout](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration.TimeseriesBufferConfiguration.set_BufferTimeout) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData) + * [TimeseriesData](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.Constructor) + * [Constructor2](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.Constructor2) + * [Constructor3](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.Constructor3) + * [Clone](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.Clone) + * [get\_Timestamps](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.get_Timestamps) + * [AddTimestamp](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.AddTimestamp) + * [AddTimestamp2](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.AddTimestamp2) + * [AddTimestampMilliseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.AddTimestampMilliseconds) + * [AddTimestampNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.AddTimestampNanoseconds) + * [Equals](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.Equals) + * [GetHashCode](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData.TimeseriesData.GetHashCode) +* [quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp) + * [TimeseriesDataTimestamp](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.__init__) + * [get\_Parameters](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.get_Parameters) + * [get\_Tags](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.get_Tags) + * [get\_TimestampNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.get_TimestampNanoseconds) + * [set\_TimestampNanoseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.set_TimestampNanoseconds) + * [get\_TimestampMilliseconds](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.get_TimestampMilliseconds) + * [get\_Timestamp](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.get_Timestamp) + * [get\_TimestampAsTimeSpan](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.get_TimestampAsTimeSpan) + * [AddValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.AddValue) + * [AddValue2](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.AddValue2) + * [AddValue3](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.AddValue3) + * [AddValue4](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.AddValue4) + * [RemoveValue](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.RemoveValue) + * [AddTag](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.AddTag) + * [AddTags](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.AddTags) + * [RemoveTag](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.RemoveTag) + * [Equals](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.Equals) + * [GetHashCode](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.GetHashCode) + * [ToString](#quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp.TimeseriesDataTimestamp.ToString) +* [quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs) + * [PackageReceivedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs.PackageReceivedEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs.PackageReceivedEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs.PackageReceivedEventArgs.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs.PackageReceivedEventArgs.Constructor) + * [get\_TopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs.PackageReceivedEventArgs.get_TopicConsumer) + * [get\_Stream](#quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs.PackageReceivedEventArgs.get_Stream) + * [get\_Package](#quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs.PackageReceivedEventArgs.get_Package) +* [quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient) + * [QuixStreamingClient](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.Constructor) + * [get\_TokenValidationConfig](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.get_TokenValidationConfig) + * [set\_TokenValidationConfig](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.set_TokenValidationConfig) + * [GetTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.GetTopicConsumer) + * [GetRawTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.GetRawTopicConsumer) + * [GetRawTopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.GetRawTopicProducer) + * [GetTopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.GetTopicProducer) + * [get\_ApiUrl](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.get_ApiUrl) + * [set\_ApiUrl](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.set_ApiUrl) + * [get\_CachePeriod](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.get_CachePeriod) + * [set\_CachePeriod](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient.QuixStreamingClient.set_CachePeriod) +* [quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClientExtensions](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClientExtensions) + * [QuixStreamingClientExtensions](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClientExtensions.QuixStreamingClientExtensions) + * [GetTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClientExtensions.QuixStreamingClientExtensions.GetTopicConsumer) +* [quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient\_TokenValidationConfiguration](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration) + * [TokenValidationConfiguration](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration.Constructor) + * [get\_Enabled](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration.get_Enabled) + * [set\_Enabled](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration.set_Enabled) + * [get\_WarningBeforeExpiry](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration.get_WarningBeforeExpiry) + * [set\_WarningBeforeExpiry](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration.set_WarningBeforeExpiry) + * [get\_WarnAboutNonPatToken](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration.get_WarnAboutNonPatToken) + * [set\_WarnAboutNonPatToken](#quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient_TokenValidationConfiguration.TokenValidationConfiguration.set_WarnAboutNonPatToken) +* [quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer) + * [IRawTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer.__init__) + * [Subscribe](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer.Subscribe) + * [add\_OnMessageReceived](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer.add_OnMessageReceived) + * [remove\_OnMessageReceived](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer.remove_OnMessageReceived) + * [add\_OnErrorOccurred](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer.add_OnErrorOccurred) + * [remove\_OnErrorOccurred](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer.remove_OnErrorOccurred) + * [add\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer.add_OnDisposed) + * [remove\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer.IRawTopicConsumer.remove_OnDisposed) +* [quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicProducer) + * [IRawTopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicProducer.IRawTopicProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicProducer.IRawTopicProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicProducer.IRawTopicProducer.__init__) + * [Publish](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicProducer.IRawTopicProducer.Publish) + * [add\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicProducer.IRawTopicProducer.add_OnDisposed) + * [remove\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicProducer.IRawTopicProducer.remove_OnDisposed) +* [quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage) + * [RawMessage](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage.Constructor) + * [Constructor2](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage.Constructor2) + * [get\_Metadata](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage.get_Metadata) + * [get\_Key](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage.get_Key) + * [set\_Key](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage.set_Key) + * [get\_Value](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage.get_Value) + * [set\_Value](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage.RawMessage.set_Value) +* [quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer) + * [RawTopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.Constructor) + * [add\_OnMessageReceived](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.add_OnMessageReceived) + * [remove\_OnMessageReceived](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.remove_OnMessageReceived) + * [add\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.add_OnDisposed) + * [remove\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.remove_OnDisposed) + * [add\_OnErrorOccurred](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.add_OnErrorOccurred) + * [remove\_OnErrorOccurred](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.remove_OnErrorOccurred) + * [Subscribe](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.Subscribe) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer.RawTopicConsumer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer) + * [RawTopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer.RawTopicProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer.RawTopicProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer.RawTopicProducer.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer.RawTopicProducer.Constructor) + * [add\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer.RawTopicProducer.add_OnDisposed) + * [remove\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer.RawTopicProducer.remove_OnDisposed) + * [Publish](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer.RawTopicProducer.Publish) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer.RawTopicProducer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs) + * [StreamClosedEventArgs](#quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs.StreamClosedEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs.StreamClosedEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs.StreamClosedEventArgs.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs.StreamClosedEventArgs.Constructor) + * [get\_TopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs.StreamClosedEventArgs.get_TopicConsumer) + * [get\_Stream](#quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs.StreamClosedEventArgs.get_Stream) + * [get\_EndType](#quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs.StreamClosedEventArgs.get_EndType) +* [quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues) + * [TimeseriesDataTimestampValues](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.__init__) + * [get\_Values](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.get_Values) + * [ContainsKey](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.ContainsKey) + * [TryGetValue](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.TryGetValue) + * [get\_Count](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.get_Count) + * [get\_Keys](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.get_Keys) + * [get\_Item](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.get_Item) + * [Equals](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.Equals) + * [GetHashCode](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.GetHashCode) + * [ToString](#quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues.TimeseriesDataTimestampValues.ToString) +* [quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer) + * [TopicConsumer](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.Constructor) + * [add\_OnStreamReceived](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.add_OnStreamReceived) + * [remove\_OnStreamReceived](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.remove_OnStreamReceived) + * [add\_OnRevoking](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.add_OnRevoking) + * [remove\_OnRevoking](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.remove_OnRevoking) + * [add\_OnStreamsRevoked](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.add_OnStreamsRevoked) + * [remove\_OnStreamsRevoked](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.remove_OnStreamsRevoked) + * [add\_OnCommitted](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.add_OnCommitted) + * [remove\_OnCommitted](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.remove_OnCommitted) + * [add\_OnCommitting](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.add_OnCommitting) + * [remove\_OnCommitting](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.remove_OnCommitting) + * [add\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.add_OnDisposed) + * [remove\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.remove_OnDisposed) + * [Commit](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.Commit) + * [Subscribe](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.Subscribe) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer.TopicConsumer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.TopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer) + * [TopicProducer](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.Constructor) + * [Constructor2](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.Constructor2) + * [add\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.add_OnDisposed) + * [remove\_OnDisposed](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.remove_OnDisposed) + * [CreateStream](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.CreateStream) + * [CreateStream2](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.CreateStream2) + * [GetStream](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.GetStream) + * [GetOrCreateStream](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.GetOrCreateStream) + * [RemoveStream](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.RemoveStream) + * [Dispose](#quixstreams.native.Python.QuixStreamsStreaming.TopicProducer.TopicProducer.Dispose) +* [quixstreams.native.Python.QuixStreamsStreaming.Utils.CodecSettings](#quixstreams.native.Python.QuixStreamsStreaming.Utils.CodecSettings) + * [CodecSettings](#quixstreams.native.Python.QuixStreamsStreaming.Utils.CodecSettings.CodecSettings) + * [SetGlobalCodecType](#quixstreams.native.Python.QuixStreamsStreaming.Utils.CodecSettings.CodecSettings.SetGlobalCodecType) + * [get\_CurrentCodec](#quixstreams.native.Python.QuixStreamsStreaming.Utils.CodecSettings.CodecSettings.get_CurrentCodec) + * [set\_CurrentCodec](#quixstreams.native.Python.QuixStreamsStreaming.Utils.CodecSettings.CodecSettings.set_CurrentCodec) +* [quixstreams.native.Python.QuixStreamsStreaming.Utils.QuixUtils](#quixstreams.native.Python.QuixStreamsStreaming.Utils.QuixUtils) + * [QuixUtils](#quixstreams.native.Python.QuixStreamsStreaming.Utils.QuixUtils.QuixUtils) + * [TryGetWorkspaceIdPrefix](#quixstreams.native.Python.QuixStreamsStreaming.Utils.QuixUtils.QuixUtils.TryGetWorkspaceIdPrefix) +* [quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags) + * [TimeseriesDataTimestampTags](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.__init__) + * [GetEnumerator](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.GetEnumerator) + * [get\_Item](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.get_Item) + * [get\_Keys](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.get_Keys) + * [get\_Values](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.get_Values) + * [get\_Count](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.get_Count) + * [ContainsKey](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.ContainsKey) + * [TryGetValue](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.TryGetValue) + * [Equals](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.Equals) + * [GetHashCode](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.GetHashCode) + * [ToString](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags.TimeseriesDataTimestampTags.ToString) +* [quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps) + * [TimeseriesDataTimestamps](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps.TimeseriesDataTimestamps) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps.TimeseriesDataTimestamps.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps.TimeseriesDataTimestamps.__init__) + * [GetEnumerator](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps.TimeseriesDataTimestamps.GetEnumerator) + * [get\_Item](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps.TimeseriesDataTimestamps.get_Item) + * [get\_Count](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps.TimeseriesDataTimestamps.get_Count) + * [Equals](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps.TimeseriesDataTimestamps.Equals) + * [GetHashCode](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps.TimeseriesDataTimestamps.GetHashCode) + * [ToString](#quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps.TimeseriesDataTimestamps.ToString) +* [quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline) + * [IStreamPipeline](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.__init__) + * [get\_StreamId](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.get_StreamId) + * [get\_SourceMetadata](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.get_SourceMetadata) + * [set\_SourceMetadata](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.set_SourceMetadata) + * [Subscribe3](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.Subscribe3) + * [Close](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.Close) + * [add\_OnClosing](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.add_OnClosing) + * [remove\_OnClosing](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.remove_OnClosing) + * [add\_OnClosed](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.add_OnClosed) + * [remove\_OnClosed](#quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline.IStreamPipeline.remove_OnClosed) +* [quixstreams.native.Python.QuixStreamsTelemetry.Kafka.AutoOffsetReset](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.AutoOffsetReset) +* [quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration) + * [KafkaProducerConfiguration](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration.KafkaProducerConfiguration) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration.KafkaProducerConfiguration.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration.KafkaProducerConfiguration.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration.KafkaProducerConfiguration.Constructor) + * [get\_BrokerList](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration.KafkaProducerConfiguration.get_BrokerList) + * [get\_MaxMessageSize](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration.KafkaProducerConfiguration.get_MaxMessageSize) + * [get\_MaxKeySize](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration.KafkaProducerConfiguration.get_MaxKeySize) + * [get\_Properties](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration.KafkaProducerConfiguration.get_Properties) +* [quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer) + * [TelemetryKafkaConsumer](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.Constructor) + * [add\_OnReceiveException](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.add_OnReceiveException) + * [remove\_OnReceiveException](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.remove_OnReceiveException) + * [add\_OnStreamsRevoked](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.add_OnStreamsRevoked) + * [remove\_OnStreamsRevoked](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.remove_OnStreamsRevoked) + * [add\_OnRevoking](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.add_OnRevoking) + * [remove\_OnRevoking](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.remove_OnRevoking) + * [add\_OnCommitted](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.add_OnCommitted) + * [remove\_OnCommitted](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.remove_OnCommitted) + * [add\_OnCommitting](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.add_OnCommitting) + * [remove\_OnCommitting](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.remove_OnCommitting) + * [Start](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.Start) + * [ForEach](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.ForEach) + * [Stop](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.Stop) + * [Dispose](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.Dispose) + * [Commit](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer.TelemetryKafkaConsumer.Commit) +* [quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration) + * [TelemetryKafkaConsumerConfiguration](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration.TelemetryKafkaConsumerConfiguration) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration.TelemetryKafkaConsumerConfiguration.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration.TelemetryKafkaConsumerConfiguration.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration.TelemetryKafkaConsumerConfiguration.Constructor) + * [get\_BrokerList](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration.TelemetryKafkaConsumerConfiguration.get_BrokerList) + * [get\_ConsumerGroupId](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration.TelemetryKafkaConsumerConfiguration.get_ConsumerGroupId) + * [get\_CommitOptions](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration.TelemetryKafkaConsumerConfiguration.get_CommitOptions) + * [set\_CommitOptions](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration.TelemetryKafkaConsumerConfiguration.set_CommitOptions) + * [get\_Properties](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration.TelemetryKafkaConsumerConfiguration.get_Properties) +* [quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer) + * [TelemetryKafkaProducer](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer.Constructor) + * [get\_StreamId](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer.get_StreamId) + * [add\_OnWriteException](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer.add_OnWriteException) + * [remove\_OnWriteException](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer.remove_OnWriteException) + * [Dispose](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer.Dispose) + * [get\_OnStreamPipelineAssigned](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer.get_OnStreamPipelineAssigned) + * [set\_OnStreamPipelineAssigned](#quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer.TelemetryKafkaProducer.set_OnStreamPipelineAssigned) +* [quixstreams.native.Python.QuixStreamsTelemetry.Models.CodecType](#quixstreams.native.Python.QuixStreamsTelemetry.Models.CodecType) +* [quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition) + * [EventDefinition](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.Constructor) + * [get\_Id](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.get_Id) + * [set\_Id](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.set_Id) + * [get\_Name](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.get_Name) + * [set\_Name](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.set_Name) + * [get\_Description](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.get_Description) + * [set\_Description](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.set_Description) + * [get\_CustomProperties](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.get_CustomProperties) + * [set\_CustomProperties](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.set_CustomProperties) + * [get\_Level](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.get_Level) + * [set\_Level](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition.EventDefinition.set_Level) +* [quixstreams.native.Python.QuixStreamsTelemetry.Models.EventLevel](#quixstreams.native.Python.QuixStreamsTelemetry.Models.EventLevel) +* [quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition) + * [ParameterDefinition](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.Constructor) + * [get\_Id](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.get_Id) + * [set\_Id](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.set_Id) + * [get\_Name](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.get_Name) + * [set\_Name](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.set_Name) + * [get\_Description](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.get_Description) + * [set\_Description](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.set_Description) + * [get\_MinimumValue](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.get_MinimumValue) + * [set\_MinimumValue](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.set_MinimumValue) + * [get\_MaximumValue](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.get_MaximumValue) + * [set\_MaximumValue](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.set_MaximumValue) + * [get\_Unit](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.get_Unit) + * [set\_Unit](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.set_Unit) + * [get\_Format](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.get_Format) + * [set\_Format](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.set_Format) + * [get\_CustomProperties](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.get_CustomProperties) + * [set\_CustomProperties](#quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition.ParameterDefinition.set_CustomProperties) +* [quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamEndType](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamEndType) +* [quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage) + * [StreamPackage](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.Constructor) + * [get\_Type](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.get_Type) + * [set\_Type](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.set_Type) + * [get\_TransportContext](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.get_TransportContext) + * [set\_TransportContext](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.set_TransportContext) + * [get\_Value](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.get_Value) + * [set\_Value](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.set_Value) + * [ToJson](#quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage.StreamPackage.ToJson) +* [quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw) + * [TimeseriesDataRaw](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.Constructor) + * [Constructor2](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.Constructor2) + * [ToJson](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.ToJson) + * [get\_Epoch](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.get_Epoch) + * [set\_Epoch](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.set_Epoch) + * [get\_Timestamps](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.get_Timestamps) + * [set\_Timestamps](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.set_Timestamps) + * [get\_NumericValues](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.get_NumericValues) + * [set\_NumericValues](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.set_NumericValues) + * [get\_StringValues](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.get_StringValues) + * [set\_StringValues](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.set_StringValues) + * [get\_BinaryValues](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.get_BinaryValues) + * [set\_BinaryValues](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.set_BinaryValues) + * [get\_TagValues](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.get_TagValues) + * [set\_TagValues](#quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw.TimeseriesDataRaw.set_TagValues) +* [quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions) + * [CommitOptions](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions.Constructor) + * [get\_AutoCommitEnabled](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions.get_AutoCommitEnabled) + * [set\_AutoCommitEnabled](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions.set_AutoCommitEnabled) + * [get\_CommitInterval](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions.get_CommitInterval) + * [set\_CommitInterval](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions.set_CommitInterval) + * [get\_CommitEvery](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions.get_CommitEvery) + * [set\_CommitEvery](#quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions.CommitOptions.set_CommitEvery) +* [quixstreams.native.Python.QuixStreamsTransport.Fw.IByteSplitter](#quixstreams.native.Python.QuixStreamsTransport.Fw.IByteSplitter) + * [IByteSplitter](#quixstreams.native.Python.QuixStreamsTransport.Fw.IByteSplitter.IByteSplitter) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTransport.Fw.IByteSplitter.IByteSplitter.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTransport.Fw.IByteSplitter.IByteSplitter.__init__) + * [Split](#quixstreams.native.Python.QuixStreamsTransport.Fw.IByteSplitter.IByteSplitter.Split) +* [quixstreams.native.Python.QuixStreamsTransport.IO.IProducer](#quixstreams.native.Python.QuixStreamsTransport.IO.IProducer) + * [IProducer](#quixstreams.native.Python.QuixStreamsTransport.IO.IProducer.IProducer) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTransport.IO.IProducer.IProducer.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTransport.IO.IProducer.IProducer.__init__) +* [quixstreams.native.Python.QuixStreamsTransport.IO.TransportContext](#quixstreams.native.Python.QuixStreamsTransport.IO.TransportContext) + * [TransportContext](#quixstreams.native.Python.QuixStreamsTransport.IO.TransportContext.TransportContext) + * [\_\_new\_\_](#quixstreams.native.Python.QuixStreamsTransport.IO.TransportContext.TransportContext.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.QuixStreamsTransport.IO.TransportContext.TransportContext.__init__) + * [Constructor](#quixstreams.native.Python.QuixStreamsTransport.IO.TransportContext.TransportContext.Constructor) + * [Constructor2](#quixstreams.native.Python.QuixStreamsTransport.IO.TransportContext.TransportContext.Constructor2) +* [quixstreams.native.Python.QuixStreamsTransport.QuixStreams.Logging](#quixstreams.native.Python.QuixStreamsTransport.QuixStreams.Logging) + * [Logging](#quixstreams.native.Python.QuixStreamsTransport.QuixStreams.Logging.Logging) + * [UpdateFactory](#quixstreams.native.Python.QuixStreamsTransport.QuixStreams.Logging.Logging.UpdateFactory) +* [quixstreams.native.Python.SystemNetHttp.HttpClient](#quixstreams.native.Python.SystemNetHttp.HttpClient) + * [HttpClient](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient) + * [\_\_new\_\_](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.__init__) + * [Constructor](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.Constructor) + * [get\_BaseAddress](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.get_BaseAddress) + * [set\_BaseAddress](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.set_BaseAddress) + * [get\_Timeout](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.get_Timeout) + * [set\_Timeout](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.set_Timeout) + * [get\_MaxResponseContentBufferSize](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.get_MaxResponseContentBufferSize) + * [set\_MaxResponseContentBufferSize](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.set_MaxResponseContentBufferSize) + * [CancelPendingRequests](#quixstreams.native.Python.SystemNetHttp.HttpClient.HttpClient.CancelPendingRequests) +* [quixstreams.native.Python.SystemNetPrimitives.System.Net.HttpStatusCode](#quixstreams.native.Python.SystemNetPrimitives.System.Net.HttpStatusCode) +* [quixstreams.native.Python.SystemObjectModel.System.Collections.Specialized.NotifyCollectionChangedEventArgs](#quixstreams.native.Python.SystemObjectModel.System.Collections.Specialized.NotifyCollectionChangedEventArgs) + * [NotifyCollectionChangedEventArgs](#quixstreams.native.Python.SystemObjectModel.System.Collections.Specialized.NotifyCollectionChangedEventArgs.NotifyCollectionChangedEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.SystemObjectModel.System.Collections.Specialized.NotifyCollectionChangedEventArgs.NotifyCollectionChangedEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemObjectModel.System.Collections.Specialized.NotifyCollectionChangedEventArgs.NotifyCollectionChangedEventArgs.__init__) + * [get\_NewStartingIndex](#quixstreams.native.Python.SystemObjectModel.System.Collections.Specialized.NotifyCollectionChangedEventArgs.NotifyCollectionChangedEventArgs.get_NewStartingIndex) + * [get\_OldStartingIndex](#quixstreams.native.Python.SystemObjectModel.System.Collections.Specialized.NotifyCollectionChangedEventArgs.NotifyCollectionChangedEventArgs.get_OldStartingIndex) +* [quixstreams.native.Python.SystemObjectModel.System.ComponentModel.PropertyChangedEventArgs](#quixstreams.native.Python.SystemObjectModel.System.ComponentModel.PropertyChangedEventArgs) + * [PropertyChangedEventArgs](#quixstreams.native.Python.SystemObjectModel.System.ComponentModel.PropertyChangedEventArgs.PropertyChangedEventArgs) + * [\_\_new\_\_](#quixstreams.native.Python.SystemObjectModel.System.ComponentModel.PropertyChangedEventArgs.PropertyChangedEventArgs.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemObjectModel.System.ComponentModel.PropertyChangedEventArgs.PropertyChangedEventArgs.__init__) + * [Constructor](#quixstreams.native.Python.SystemObjectModel.System.ComponentModel.PropertyChangedEventArgs.PropertyChangedEventArgs.Constructor) + * [get\_PropertyName](#quixstreams.native.Python.SystemObjectModel.System.ComponentModel.PropertyChangedEventArgs.PropertyChangedEventArgs.get_PropertyName) +* [quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime) + * [DateTime](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime) + * [\_\_new\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.__init__) + * [Constructor](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Constructor) + * [Constructor5](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Constructor5) + * [Constructor8](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Constructor8) + * [Constructor11](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Constructor11) + * [Constructor14](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Constructor14) + * [Add](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Add) + * [AddDays](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.AddDays) + * [AddHours](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.AddHours) + * [AddMilliseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.AddMilliseconds) + * [AddMicroseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.AddMicroseconds) + * [AddMinutes](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.AddMinutes) + * [AddMonths](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.AddMonths) + * [AddSeconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.AddSeconds) + * [AddTicks](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.AddTicks) + * [AddYears](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.AddYears) + * [Compare](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Compare) + * [CompareTo](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.CompareTo) + * [CompareTo2](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.CompareTo2) + * [DaysInMonth](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.DaysInMonth) + * [Equals](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Equals) + * [Equals2](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Equals2) + * [Equals3](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Equals3) + * [FromBinary](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.FromBinary) + * [FromFileTime](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.FromFileTime) + * [FromFileTimeUtc](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.FromFileTimeUtc) + * [FromOADate](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.FromOADate) + * [IsDaylightSavingTime](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.IsDaylightSavingTime) + * [ToBinary](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToBinary) + * [get\_Date](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Date) + * [get\_Day](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Day) + * [get\_DayOfYear](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_DayOfYear) + * [GetHashCode](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.GetHashCode) + * [get\_Hour](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Hour) + * [get\_Millisecond](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Millisecond) + * [get\_Microsecond](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Microsecond) + * [get\_Nanosecond](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Nanosecond) + * [get\_Minute](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Minute) + * [get\_Month](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Month) + * [get\_Now](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Now) + * [get\_Second](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Second) + * [get\_Ticks](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Ticks) + * [get\_TimeOfDay](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_TimeOfDay) + * [get\_Today](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Today) + * [get\_Year](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_Year) + * [IsLeapYear](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.IsLeapYear) + * [Parse](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Parse) + * [Parse2](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Parse2) + * [ParseExact](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ParseExact) + * [Subtract](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Subtract) + * [Subtract2](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Subtract2) + * [ToOADate](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToOADate) + * [ToFileTime](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToFileTime) + * [ToFileTimeUtc](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToFileTimeUtc) + * [ToLocalTime](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToLocalTime) + * [ToLongDateString](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToLongDateString) + * [ToLongTimeString](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToLongTimeString) + * [ToShortDateString](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToShortDateString) + * [ToShortTimeString](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToShortTimeString) + * [ToString](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToString) + * [ToString2](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToString2) + * [ToString3](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToString3) + * [ToString4](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToString4) + * [ToUniversalTime](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.ToUniversalTime) + * [TryParse](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.TryParse) + * [op\_Equality](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.op_Equality) + * [op\_Inequality](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.op_Inequality) + * [Deconstruct2](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.Deconstruct2) + * [GetDateTimeFormats](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.GetDateTimeFormats) + * [GetDateTimeFormats2](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.GetDateTimeFormats2) + * [GetTypeCode](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.GetTypeCode) + * [TryParse5](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.TryParse5) + * [get\_UtcNow](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_UtcNow) + * [get\_MinValue](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_MinValue) + * [get\_MaxValue](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_MaxValue) + * [get\_UnixEpoch](#quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime.DateTime.get_UnixEpoch) +* [quixstreams.native.Python.SystemPrivateCoreLib.System.Enum](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum) + * [Enum](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum) + * [\_\_new\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.__init__) + * [GetName2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.GetName2) + * [GetNames](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.GetNames) + * [GetUnderlyingType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.GetUnderlyingType) + * [GetValues](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.GetValues) + * [GetValuesAsUnderlyingType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.GetValuesAsUnderlyingType) + * [HasFlag](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.HasFlag) + * [IsDefined2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.IsDefined2) + * [Parse](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.Parse) + * [Parse3](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.Parse3) + * [TryParse](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.TryParse) + * [TryParse3](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.TryParse3) + * [Equals](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.Equals) + * [GetHashCode](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.GetHashCode) + * [CompareTo](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.CompareTo) + * [ToString](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.ToString) + * [ToString2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.ToString2) + * [ToString3](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.ToString3) + * [ToString4](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.ToString4) + * [Format](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.Format) + * [GetTypeCode](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.GetTypeCode) + * [ToObject](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.ToObject) + * [ToObject4](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.ToObject4) + * [ToObject5](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.ToObject5) + * [ToObject8](#quixstreams.native.Python.SystemPrivateCoreLib.System.Enum.Enum.ToObject8) +* [quixstreams.native.Python.SystemPrivateCoreLib.System.IFormatProvider](#quixstreams.native.Python.SystemPrivateCoreLib.System.IFormatProvider) + * [IFormatProvider](#quixstreams.native.Python.SystemPrivateCoreLib.System.IFormatProvider.IFormatProvider) + * [\_\_new\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.IFormatProvider.IFormatProvider.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.IFormatProvider.IFormatProvider.__init__) + * [GetFormat](#quixstreams.native.Python.SystemPrivateCoreLib.System.IFormatProvider.IFormatProvider.GetFormat) +* [quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken) + * [CancellationToken](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken) + * [\_\_new\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.__init__) + * [Constructor](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.Constructor) + * [get\_None](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.get_None) + * [get\_IsCancellationRequested](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.get_IsCancellationRequested) + * [get\_CanBeCanceled](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.get_CanBeCanceled) + * [Equals](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.Equals) + * [Equals2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.Equals2) + * [GetHashCode](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.GetHashCode) + * [op\_Equality](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.op_Equality) + * [op\_Inequality](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.op_Inequality) + * [ThrowIfCancellationRequested](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.ThrowIfCancellationRequested) + * [ToString](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken.CancellationToken.ToString) +* [quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource) + * [CancellationTokenSource](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource) + * [\_\_new\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.__init__) + * [Constructor](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.Constructor) + * [Constructor2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.Constructor2) + * [Constructor3](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.Constructor3) + * [get\_IsCancellationRequested](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.get_IsCancellationRequested) + * [get\_Token](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.get_Token) + * [Cancel](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.Cancel) + * [Cancel2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.Cancel2) + * [CancelAfter](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.CancelAfter) + * [CancelAfter2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.CancelAfter2) + * [TryReset](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.TryReset) + * [Dispose](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.Dispose) + * [CreateLinkedTokenSource](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.CreateLinkedTokenSource) + * [CreateLinkedTokenSource2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.CreateLinkedTokenSource2) + * [CreateLinkedTokenSource3](#quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource.CancellationTokenSource.CreateLinkedTokenSource3) +* [quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan) + * [TimeSpan](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan) + * [\_\_init\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.__init__) + * [Constructor](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Constructor) + * [Constructor2](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Constructor2) + * [Constructor3](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Constructor3) + * [Constructor4](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Constructor4) + * [Constructor5](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Constructor5) + * [get\_Ticks](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_Ticks) + * [get\_Days](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_Days) + * [get\_Hours](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_Hours) + * [get\_Milliseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_Milliseconds) + * [get\_Microseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_Microseconds) + * [get\_Nanoseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_Nanoseconds) + * [get\_Minutes](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_Minutes) + * [get\_Seconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_Seconds) + * [get\_TotalDays](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TotalDays) + * [get\_TotalHours](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TotalHours) + * [get\_TotalMilliseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TotalMilliseconds) + * [get\_TotalMicroseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TotalMicroseconds) + * [get\_TotalNanoseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TotalNanoseconds) + * [get\_TotalMinutes](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TotalMinutes) + * [get\_TotalSeconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TotalSeconds) + * [Add](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Add) + * [Compare](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Compare) + * [CompareTo](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.CompareTo) + * [CompareTo2](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.CompareTo2) + * [FromDays](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.FromDays) + * [Duration](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Duration) + * [Equals](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Equals) + * [Equals2](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Equals2) + * [Equals3](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Equals3) + * [GetHashCode](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.GetHashCode) + * [FromHours](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.FromHours) + * [FromMilliseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.FromMilliseconds) + * [FromMicroseconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.FromMicroseconds) + * [FromMinutes](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.FromMinutes) + * [Negate](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Negate) + * [FromSeconds](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.FromSeconds) + * [Subtract](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Subtract) + * [Multiply](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Multiply) + * [Divide](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Divide) + * [Divide2](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Divide2) + * [FromTicks](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.FromTicks) + * [Parse](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Parse) + * [Parse2](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.Parse2) + * [ParseExact](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.ParseExact) + * [ParseExact2](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.ParseExact2) + * [TryParse](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.TryParse) + * [TryParse3](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.TryParse3) + * [TryParseExact](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.TryParseExact) + * [TryParseExact3](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.TryParseExact3) + * [ToString](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.ToString) + * [ToString2](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.ToString2) + * [ToString3](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.ToString3) + * [op\_Equality](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.op_Equality) + * [op\_Inequality](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.op_Inequality) + * [get\_Zero](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_Zero) + * [get\_MaxValue](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_MaxValue) + * [get\_MinValue](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_MinValue) + * [get\_NanosecondsPerTick](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_NanosecondsPerTick) + * [get\_TicksPerMicrosecond](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TicksPerMicrosecond) + * [get\_TicksPerMillisecond](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TicksPerMillisecond) + * [get\_TicksPerSecond](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TicksPerSecond) + * [get\_TicksPerMinute](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TicksPerMinute) + * [get\_TicksPerHour](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TicksPerHour) + * [get\_TicksPerDay](#quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan.TimeSpan.get_TicksPerDay) +* [quixstreams.native.Python.SystemPrivateCoreLib.System.Type](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type) + * [Type](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type) + * [\_\_new\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.__init__) + * [get\_IsInterface](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsInterface) + * [GetType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetType) + * [GetType2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetType2) + * [GetType3](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetType3) + * [GetType7](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetType7) + * [get\_Namespace](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_Namespace) + * [get\_AssemblyQualifiedName](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_AssemblyQualifiedName) + * [get\_FullName](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_FullName) + * [get\_IsNested](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsNested) + * [get\_DeclaringType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_DeclaringType) + * [get\_ReflectedType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_ReflectedType) + * [get\_UnderlyingSystemType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_UnderlyingSystemType) + * [get\_IsTypeDefinition](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsTypeDefinition) + * [get\_IsArray](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsArray) + * [get\_IsByRef](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsByRef) + * [get\_IsPointer](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsPointer) + * [get\_IsConstructedGenericType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsConstructedGenericType) + * [get\_IsGenericParameter](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsGenericParameter) + * [get\_IsGenericTypeParameter](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsGenericTypeParameter) + * [get\_IsGenericMethodParameter](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsGenericMethodParameter) + * [get\_IsGenericType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsGenericType) + * [get\_IsGenericTypeDefinition](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsGenericTypeDefinition) + * [get\_IsSZArray](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsSZArray) + * [get\_IsVariableBoundArray](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsVariableBoundArray) + * [get\_IsByRefLike](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsByRefLike) + * [get\_IsFunctionPointer](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsFunctionPointer) + * [get\_IsUnmanagedFunctionPointer](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsUnmanagedFunctionPointer) + * [get\_HasElementType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_HasElementType) + * [GetElementType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetElementType) + * [GetArrayRank](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetArrayRank) + * [GetGenericTypeDefinition](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetGenericTypeDefinition) + * [get\_GenericTypeArguments](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_GenericTypeArguments) + * [GetGenericArguments](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetGenericArguments) + * [GetOptionalCustomModifiers](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetOptionalCustomModifiers) + * [GetRequiredCustomModifiers](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetRequiredCustomModifiers) + * [get\_GenericParameterPosition](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_GenericParameterPosition) + * [GetGenericParameterConstraints](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetGenericParameterConstraints) + * [get\_IsAbstract](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsAbstract) + * [get\_IsImport](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsImport) + * [get\_IsSealed](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsSealed) + * [get\_IsSpecialName](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsSpecialName) + * [get\_IsClass](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsClass) + * [get\_IsNestedAssembly](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsNestedAssembly) + * [get\_IsNestedFamANDAssem](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsNestedFamANDAssem) + * [get\_IsNestedFamily](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsNestedFamily) + * [get\_IsNestedFamORAssem](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsNestedFamORAssem) + * [get\_IsNestedPrivate](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsNestedPrivate) + * [get\_IsNestedPublic](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsNestedPublic) + * [get\_IsNotPublic](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsNotPublic) + * [get\_IsPublic](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsPublic) + * [get\_IsAutoLayout](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsAutoLayout) + * [get\_IsExplicitLayout](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsExplicitLayout) + * [get\_IsLayoutSequential](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsLayoutSequential) + * [get\_IsAnsiClass](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsAnsiClass) + * [get\_IsAutoClass](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsAutoClass) + * [get\_IsUnicodeClass](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsUnicodeClass) + * [get\_IsCOMObject](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsCOMObject) + * [get\_IsContextful](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsContextful) + * [get\_IsEnum](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsEnum) + * [get\_IsMarshalByRef](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsMarshalByRef) + * [get\_IsPrimitive](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsPrimitive) + * [get\_IsValueType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsValueType) + * [IsAssignableTo](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.IsAssignableTo) + * [get\_IsSignatureType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsSignatureType) + * [get\_IsSecurityCritical](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsSecurityCritical) + * [get\_IsSecuritySafeCritical](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsSecuritySafeCritical) + * [get\_IsSecurityTransparent](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsSecurityTransparent) + * [GetFunctionPointerCallingConventions](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetFunctionPointerCallingConventions) + * [GetFunctionPointerReturnType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetFunctionPointerReturnType) + * [GetFunctionPointerParameterTypes](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetFunctionPointerParameterTypes) + * [GetNestedType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetNestedType) + * [GetNestedTypes](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetNestedTypes) + * [GetTypeArray](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetTypeArray) + * [GetTypeCode](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetTypeCode) + * [GetTypeFromProgID](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetTypeFromProgID) + * [GetTypeFromProgID2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetTypeFromProgID2) + * [GetTypeFromProgID3](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetTypeFromProgID3) + * [GetTypeFromProgID4](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetTypeFromProgID4) + * [get\_BaseType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_BaseType) + * [GetInterface](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetInterface) + * [GetInterface2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetInterface2) + * [GetInterfaces](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetInterfaces) + * [IsInstanceOfType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.IsInstanceOfType) + * [IsEquivalentTo](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.IsEquivalentTo) + * [GetEnumUnderlyingType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetEnumUnderlyingType) + * [GetEnumValues](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetEnumValues) + * [GetEnumValuesAsUnderlyingType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetEnumValuesAsUnderlyingType) + * [MakeArrayType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.MakeArrayType) + * [MakeArrayType2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.MakeArrayType2) + * [MakeByRefType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.MakeByRefType) + * [MakeGenericType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.MakeGenericType) + * [MakePointerType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.MakePointerType) + * [MakeGenericSignatureType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.MakeGenericSignatureType) + * [MakeGenericMethodParameter](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.MakeGenericMethodParameter) + * [ToString](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.ToString) + * [Equals](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.Equals) + * [GetHashCode](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetHashCode) + * [Equals2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.Equals2) + * [op\_Equality](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.op_Equality) + * [op\_Inequality](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.op_Inequality) + * [ReflectionOnlyGetType](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.ReflectionOnlyGetType) + * [IsEnumDefined](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.IsEnumDefined) + * [GetEnumName](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetEnumName) + * [GetEnumNames](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetEnumNames) + * [get\_IsSerializable](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsSerializable) + * [get\_ContainsGenericParameters](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_ContainsGenericParameters) + * [get\_IsVisible](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsVisible) + * [IsSubclassOf](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.IsSubclassOf) + * [IsAssignableFrom](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.IsAssignableFrom) + * [get\_Name](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_Name) + * [IsDefined](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.IsDefined) + * [GetCustomAttributes](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetCustomAttributes) + * [GetCustomAttributes2](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.GetCustomAttributes2) + * [get\_IsCollectible](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_IsCollectible) + * [get\_MetadataToken](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_MetadataToken) + * [get\_EmptyTypes](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_EmptyTypes) + * [get\_Missing](#quixstreams.native.Python.SystemPrivateCoreLib.System.Type.Type.get_Missing) +* [quixstreams.native.Python.SystemPrivateCoreLib.System.TypeCode](#quixstreams.native.Python.SystemPrivateCoreLib.System.TypeCode) +* [quixstreams.native.Python.SystemPrivateUri.System.Uri](#quixstreams.native.Python.SystemPrivateUri.System.Uri) + * [Uri](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri) + * [\_\_new\_\_](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.__new__) + * [\_\_init\_\_](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.__init__) + * [Constructor](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.Constructor) + * [Constructor2](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.Constructor2) + * [Constructor3](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.Constructor3) + * [Constructor6](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.Constructor6) + * [Constructor7](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.Constructor7) + * [get\_AbsolutePath](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_AbsolutePath) + * [get\_AbsoluteUri](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_AbsoluteUri) + * [get\_LocalPath](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_LocalPath) + * [get\_Authority](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_Authority) + * [get\_IsDefaultPort](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_IsDefaultPort) + * [get\_IsFile](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_IsFile) + * [get\_IsLoopback](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_IsLoopback) + * [get\_PathAndQuery](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_PathAndQuery) + * [get\_Segments](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_Segments) + * [get\_IsUnc](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_IsUnc) + * [get\_Host](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_Host) + * [get\_Port](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_Port) + * [get\_Query](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_Query) + * [get\_Fragment](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_Fragment) + * [get\_Scheme](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_Scheme) + * [get\_OriginalString](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_OriginalString) + * [get\_DnsSafeHost](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_DnsSafeHost) + * [get\_IdnHost](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_IdnHost) + * [get\_IsAbsoluteUri](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_IsAbsoluteUri) + * [get\_UserEscaped](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UserEscaped) + * [get\_UserInfo](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UserInfo) + * [IsHexEncoding](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.IsHexEncoding) + * [CheckSchemeName](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.CheckSchemeName) + * [GetHashCode](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.GetHashCode) + * [ToString](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.ToString) + * [op\_Equality](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.op_Equality) + * [op\_Inequality](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.op_Inequality) + * [Equals](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.Equals) + * [MakeRelativeUri](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.MakeRelativeUri) + * [MakeRelative](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.MakeRelative) + * [TryCreate3](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.TryCreate3) + * [TryCreate4](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.TryCreate4) + * [IsWellFormedOriginalString](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.IsWellFormedOriginalString) + * [UnescapeDataString](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.UnescapeDataString) + * [EscapeUriString](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.EscapeUriString) + * [EscapeDataString](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.EscapeDataString) + * [IsBaseOf](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.IsBaseOf) + * [get\_UriSchemeFile](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeFile) + * [get\_UriSchemeFtp](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeFtp) + * [get\_UriSchemeSftp](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeSftp) + * [get\_UriSchemeFtps](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeFtps) + * [get\_UriSchemeGopher](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeGopher) + * [get\_UriSchemeHttp](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeHttp) + * [get\_UriSchemeHttps](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeHttps) + * [get\_UriSchemeWs](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeWs) + * [get\_UriSchemeWss](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeWss) + * [get\_UriSchemeMailto](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeMailto) + * [get\_UriSchemeNews](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeNews) + * [get\_UriSchemeNntp](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeNntp) + * [get\_UriSchemeSsh](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeSsh) + * [get\_UriSchemeTelnet](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeTelnet) + * [get\_UriSchemeNetTcp](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeNetTcp) + * [get\_UriSchemeNetPipe](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_UriSchemeNetPipe) + * [get\_SchemeDelimiter](#quixstreams.native.Python.SystemPrivateUri.System.Uri.Uri.get_SchemeDelimiter) +* [quixstreams.quixstreamingclient](#quixstreams.quixstreamingclient) + * [TokenValidationConfiguration](#quixstreams.quixstreamingclient.TokenValidationConfiguration) + * [\_\_init\_\_](#quixstreams.quixstreamingclient.TokenValidationConfiguration.__init__) + * [enabled](#quixstreams.quixstreamingclient.TokenValidationConfiguration.enabled) + * [enabled](#quixstreams.quixstreamingclient.TokenValidationConfiguration.enabled) + * [warning\_before\_expiry](#quixstreams.quixstreamingclient.TokenValidationConfiguration.warning_before_expiry) + * [warning\_before\_expiry](#quixstreams.quixstreamingclient.TokenValidationConfiguration.warning_before_expiry) + * [warn\_about\_pat\_token](#quixstreams.quixstreamingclient.TokenValidationConfiguration.warn_about_pat_token) + * [warn\_about\_pat\_token](#quixstreams.quixstreamingclient.TokenValidationConfiguration.warn_about_pat_token) + * [get\_net\_pointer](#quixstreams.quixstreamingclient.TokenValidationConfiguration.get_net_pointer) + * [QuixStreamingClient](#quixstreams.quixstreamingclient.QuixStreamingClient) + * [\_\_init\_\_](#quixstreams.quixstreamingclient.QuixStreamingClient.__init__) + * [get\_topic\_consumer](#quixstreams.quixstreamingclient.QuixStreamingClient.get_topic_consumer) + * [get\_topic\_producer](#quixstreams.quixstreamingclient.QuixStreamingClient.get_topic_producer) + * [get\_raw\_topic\_consumer](#quixstreams.quixstreamingclient.QuixStreamingClient.get_raw_topic_consumer) + * [get\_raw\_topic\_producer](#quixstreams.quixstreamingclient.QuixStreamingClient.get_raw_topic_producer) + * [token\_validation\_config](#quixstreams.quixstreamingclient.QuixStreamingClient.token_validation_config) + * [token\_validation\_config](#quixstreams.quixstreamingclient.QuixStreamingClient.token_validation_config) + * [api\_url](#quixstreams.quixstreamingclient.QuixStreamingClient.api_url) + * [api\_url](#quixstreams.quixstreamingclient.QuixStreamingClient.api_url) + * [cache\_period](#quixstreams.quixstreamingclient.QuixStreamingClient.cache_period) + * [cache\_period](#quixstreams.quixstreamingclient.QuixStreamingClient.cache_period) + * [get\_net\_pointer](#quixstreams.quixstreamingclient.QuixStreamingClient.get_net_pointer) +* [quixstreams.raw](#quixstreams.raw) +* [quixstreams.raw.rawmessage](#quixstreams.raw.rawmessage) + * [RawMessage](#quixstreams.raw.rawmessage.RawMessage) + * [\_\_init\_\_](#quixstreams.raw.rawmessage.RawMessage.__init__) + * [get\_net\_pointer](#quixstreams.raw.rawmessage.RawMessage.get_net_pointer) + * [key](#quixstreams.raw.rawmessage.RawMessage.key) + * [key](#quixstreams.raw.rawmessage.RawMessage.key) + * [value](#quixstreams.raw.rawmessage.RawMessage.value) + * [value](#quixstreams.raw.rawmessage.RawMessage.value) + * [metadata](#quixstreams.raw.rawmessage.RawMessage.metadata) +* [quixstreams.raw.rawtopicconsumer](#quixstreams.raw.rawtopicconsumer) + * [RawTopicConsumer](#quixstreams.raw.rawtopicconsumer.RawTopicConsumer) + * [\_\_init\_\_](#quixstreams.raw.rawtopicconsumer.RawTopicConsumer.__init__) + * [on\_message\_received](#quixstreams.raw.rawtopicconsumer.RawTopicConsumer.on_message_received) + * [on\_message\_received](#quixstreams.raw.rawtopicconsumer.RawTopicConsumer.on_message_received) + * [on\_error\_occurred](#quixstreams.raw.rawtopicconsumer.RawTopicConsumer.on_error_occurred) + * [on\_error\_occurred](#quixstreams.raw.rawtopicconsumer.RawTopicConsumer.on_error_occurred) + * [subscribe](#quixstreams.raw.rawtopicconsumer.RawTopicConsumer.subscribe) +* [quixstreams.raw.rawtopicproducer](#quixstreams.raw.rawtopicproducer) + * [RawTopicProducer](#quixstreams.raw.rawtopicproducer.RawTopicProducer) + * [\_\_init\_\_](#quixstreams.raw.rawtopicproducer.RawTopicProducer.__init__) + * [publish](#quixstreams.raw.rawtopicproducer.RawTopicProducer.publish) +* [quixstreams.state](#quixstreams.state) +* [quixstreams.state.inmemorystorage](#quixstreams.state.inmemorystorage) + * [InMemoryStorage](#quixstreams.state.inmemorystorage.InMemoryStorage) +* [quixstreams.state.localfilestorage](#quixstreams.state.localfilestorage) + * [LocalFileStorage](#quixstreams.state.localfilestorage.LocalFileStorage) + * [\_\_init\_\_](#quixstreams.state.localfilestorage.LocalFileStorage.__init__) + * [get](#quixstreams.state.localfilestorage.LocalFileStorage.get) + * [set](#quixstreams.state.localfilestorage.LocalFileStorage.set) + * [contains\_key](#quixstreams.state.localfilestorage.LocalFileStorage.contains_key) + * [get\_all\_keys](#quixstreams.state.localfilestorage.LocalFileStorage.get_all_keys) + * [remove](#quixstreams.state.localfilestorage.LocalFileStorage.remove) + * [clear](#quixstreams.state.localfilestorage.LocalFileStorage.clear) +* [quixstreams.state.statetype](#quixstreams.state.statetype) +* [quixstreams.state.statevalue](#quixstreams.state.statevalue) + * [StateValue](#quixstreams.state.statevalue.StateValue) + * [\_\_init\_\_](#quixstreams.state.statevalue.StateValue.__init__) + * [type](#quixstreams.state.statevalue.StateValue.type) + * [value](#quixstreams.state.statevalue.StateValue.value) + * [get\_net\_pointer](#quixstreams.state.statevalue.StateValue.get_net_pointer) +* [quixstreams.streamconsumer](#quixstreams.streamconsumer) + * [StreamConsumer](#quixstreams.streamconsumer.StreamConsumer) + * [\_\_init\_\_](#quixstreams.streamconsumer.StreamConsumer.__init__) + * [topic](#quixstreams.streamconsumer.StreamConsumer.topic) + * [on\_stream\_closed](#quixstreams.streamconsumer.StreamConsumer.on_stream_closed) + * [on\_stream\_closed](#quixstreams.streamconsumer.StreamConsumer.on_stream_closed) + * [on\_package\_received](#quixstreams.streamconsumer.StreamConsumer.on_package_received) + * [on\_package\_received](#quixstreams.streamconsumer.StreamConsumer.on_package_received) + * [stream\_id](#quixstreams.streamconsumer.StreamConsumer.stream_id) + * [properties](#quixstreams.streamconsumer.StreamConsumer.properties) + * [events](#quixstreams.streamconsumer.StreamConsumer.events) + * [timeseries](#quixstreams.streamconsumer.StreamConsumer.timeseries) + * [get\_net\_pointer](#quixstreams.streamconsumer.StreamConsumer.get_net_pointer) +* [quixstreams.streamproducer](#quixstreams.streamproducer) + * [StreamProducer](#quixstreams.streamproducer.StreamProducer) + * [\_\_init\_\_](#quixstreams.streamproducer.StreamProducer.__init__) + * [topic](#quixstreams.streamproducer.StreamProducer.topic) + * [on\_write\_exception](#quixstreams.streamproducer.StreamProducer.on_write_exception) + * [on\_write\_exception](#quixstreams.streamproducer.StreamProducer.on_write_exception) + * [stream\_id](#quixstreams.streamproducer.StreamProducer.stream_id) + * [epoch](#quixstreams.streamproducer.StreamProducer.epoch) + * [epoch](#quixstreams.streamproducer.StreamProducer.epoch) + * [properties](#quixstreams.streamproducer.StreamProducer.properties) + * [timeseries](#quixstreams.streamproducer.StreamProducer.timeseries) + * [events](#quixstreams.streamproducer.StreamProducer.events) + * [flush](#quixstreams.streamproducer.StreamProducer.flush) + * [close](#quixstreams.streamproducer.StreamProducer.close) +* [quixstreams.topicconsumer](#quixstreams.topicconsumer) + * [TopicConsumer](#quixstreams.topicconsumer.TopicConsumer) + * [\_\_init\_\_](#quixstreams.topicconsumer.TopicConsumer.__init__) + * [on\_stream\_received](#quixstreams.topicconsumer.TopicConsumer.on_stream_received) + * [on\_stream\_received](#quixstreams.topicconsumer.TopicConsumer.on_stream_received) + * [on\_streams\_revoked](#quixstreams.topicconsumer.TopicConsumer.on_streams_revoked) + * [on\_streams\_revoked](#quixstreams.topicconsumer.TopicConsumer.on_streams_revoked) + * [on\_revoking](#quixstreams.topicconsumer.TopicConsumer.on_revoking) + * [on\_revoking](#quixstreams.topicconsumer.TopicConsumer.on_revoking) + * [on\_committed](#quixstreams.topicconsumer.TopicConsumer.on_committed) + * [on\_committed](#quixstreams.topicconsumer.TopicConsumer.on_committed) + * [on\_committing](#quixstreams.topicconsumer.TopicConsumer.on_committing) + * [on\_committing](#quixstreams.topicconsumer.TopicConsumer.on_committing) + * [subscribe](#quixstreams.topicconsumer.TopicConsumer.subscribe) + * [commit](#quixstreams.topicconsumer.TopicConsumer.commit) + * [get\_net\_pointer](#quixstreams.topicconsumer.TopicConsumer.get_net_pointer) +* [quixstreams.topicproducer](#quixstreams.topicproducer) + * [TopicProducer](#quixstreams.topicproducer.TopicProducer) + * [\_\_init\_\_](#quixstreams.topicproducer.TopicProducer.__init__) + * [on\_disposed](#quixstreams.topicproducer.TopicProducer.on_disposed) + * [on\_disposed](#quixstreams.topicproducer.TopicProducer.on_disposed) + * [create\_stream](#quixstreams.topicproducer.TopicProducer.create_stream) + * [get\_stream](#quixstreams.topicproducer.TopicProducer.get_stream) + * [get\_or\_create\_stream](#quixstreams.topicproducer.TopicProducer.get_or_create_stream) + + + +# quixstreams + + + +# quixstreams.app + + + +## CancellationTokenSource Objects + +```python +class CancellationTokenSource() +``` + +Represents a token source that can signal a cancellation System.Threading.CancellationToken + + + +#### \_\_init\_\_ + +```python +def __init__() +``` + +Initializes a new instance of the CancellationTokenSource class. + + + +#### is\_cancellation\_requested + +```python +def is_cancellation_requested() +``` + +Checks if a cancellation has been requested. + +**Returns**: + +- `bool` - True if the cancellation has been requested, False otherwise. + + + +#### cancel + +```python +def cancel() -> 'CancellationToken' +``` + +Signals a cancellation to the CancellationToken. + + + +#### token + +```python +@property +def token() -> 'CancellationToken' +``` + +Gets the associated CancellationToken. + +**Returns**: + +- `CancellationToken` - The CancellationToken associated with this CancellationTokenSource. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the interop pointer of the CancellationTokenSource object. + +**Returns**: + +- `ctypes.c_void_p` - The interop pointer of the CancellationTokenSource object. + + + +## App Objects + +```python +class App() +``` + +Provides utilities to handle default streaming behaviors and automatic resource cleanup on shutdown. + + + +#### run + +```python +@staticmethod +def run(cancellation_token: CancellationToken = None, + before_shutdown: Callable[[], None] = None) +``` + +Runs the application, managing streaming behaviors and automatic resource cleanup on shutdown. + +**Arguments**: + +- `cancellation_token` - An optional CancellationToken to abort the application run with. +- `before_shutdown` - An optional function to call before shutting down the application. + + + +# quixstreams.builders + + + +# quixstreams.builders.eventdatabuilder + + + +## EventDataBuilder Objects + +```python +@nativedecorator +class EventDataBuilder(object) +``` + +Builder for creating event data packages for StreamEventsProducer. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of EventDataBuilder. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net EventDataBuilder. + + + +#### add\_value + +```python +def add_value(event_id: str, value: str) -> 'EventDataBuilder' +``` + +Adds new event at the time the builder is created for. + +**Arguments**: + +- `event_id` - The id of the event to set the value for. +- `value` - The string value. + + +**Returns**: + + The builder. + + + +#### add\_tag + +```python +def add_tag(tag_id: str, value: str) -> 'EventDataBuilder' +``` + +Sets tag value for the values. + +**Arguments**: + +- `tag_id` - The id of the tag. +- `value` - The value of the tag. + + +**Returns**: + + The builder. + + + +#### add\_tags + +```python +def add_tags(tags: Dict[str, str]) -> 'EventDataBuilder' +``` + +Copies the tags from the specified dictionary. Conflicting tags will be overwritten. + +**Arguments**: + +- `tags` - The tags to add. + + +**Returns**: + + The builder. + + + +#### publish + +```python +def publish() +``` + +Publishes the values to the StreamEventsProducer buffer. + +See StreamEventsProducer buffer settings for more information on when the values are sent to the broker. + + + +# quixstreams.builders.eventdefinitionbuilder + + + +## EventDefinitionBuilder Objects + +```python +@nativedecorator +class EventDefinitionBuilder(object) +``` + +Builder for creating EventDefinitions within StreamPropertiesProducer. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of EventDefinitionBuilder. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net EventDefinitionBuilder. + + + +#### set\_level + +```python +def set_level(level: EventLevel) -> 'EventDefinitionBuilder' +``` + +Set severity level of the Event. + +**Arguments**: + +- `level` - The severity level of the event. + + +**Returns**: + + The builder. + + + +#### set\_custom\_properties + +```python +def set_custom_properties(custom_properties: str) -> 'EventDefinitionBuilder' +``` + +Set custom properties of the Event. + +**Arguments**: + +- `custom_properties` - The custom properties of the event. + + +**Returns**: + + The builder. + + + +#### add\_definition + +```python +def add_definition(event_id: str, + name: str = None, + description: str = None) -> 'EventDefinitionBuilder' +``` + +Add new Event definition, to define properties like Name or Level, among others. + +**Arguments**: + +- `event_id` - Event id. This must match the event id you use to publish event values. +- `name` - Human friendly display name of the event. +- `description` - Description of the event. + + +**Returns**: + + Event definition builder to define the event properties. + + + +# quixstreams.builders.parameterdefinitionbuilder + + + +## ParameterDefinitionBuilder Objects + +```python +@nativedecorator +class ParameterDefinitionBuilder(object) +``` + +Builder for creating ParameterDefinition for StreamTimeseriesProducer. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of ParameterDefinitionBuilder. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net ParameterDefinitionBuilder. + + + +#### set\_range + +```python +def set_range(minimum_value: float, + maximum_value: float) -> 'ParameterDefinitionBuilder' +``` + +Set the minimum and maximum range of the parameter. + +**Arguments**: + +- `minimum_value` - The minimum value. +- `maximum_value` - The maximum value. + + +**Returns**: + + The builder. + + + +#### set\_unit + +```python +def set_unit(unit: str) -> 'ParameterDefinitionBuilder' +``` + +Set the unit of the parameter. + +**Arguments**: + +- `unit` - The unit of the parameter. + + +**Returns**: + + The builder. + + + +#### set\_format + +```python +def set_format(format: str) -> 'ParameterDefinitionBuilder' +``` + +Set the format of the parameter. + +**Arguments**: + +- `format` - The format of the parameter. + + +**Returns**: + + The builder. + + + +#### set\_custom\_properties + +```python +def set_custom_properties( + custom_properties: str) -> 'ParameterDefinitionBuilder' +``` + +Set the custom properties of the parameter. + +**Arguments**: + +- `custom_properties` - The custom properties of the parameter. + + +**Returns**: + + The builder. + + + +#### add\_definition + +```python +def add_definition(parameter_id: str, + name: str = None, + description: str = None) -> 'ParameterDefinitionBuilder' +``` + +Add new parameter definition to the StreamTimeseriesProducer. Configure it with the builder methods. + +**Arguments**: + +- `parameter_id` - The id of the parameter. Must match the parameter id used to send data. +- `name` - The human friendly display name of the parameter. +- `description` - The description of the parameter. + + +**Returns**: + + Parameter definition builder to define the parameter properties + + + +# quixstreams.builders.timeseriesdatabuilder + + + +## TimeseriesDataBuilder Objects + +```python +@nativedecorator +class TimeseriesDataBuilder(object) +``` + +Builder for managing TimeseriesDataTimestamp instances on TimeseriesBufferProducer. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of TimeseriesDataBuilder. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net TimeseriesDataBuilder. + + + +#### add\_value + +```python +def add_value( + parameter_id: str, value: Union[str, float, int, bytes, + bytearray]) -> 'TimeseriesDataBuilder' +``` + +Adds new parameter value at the time the builder is created for. + +**Arguments**: + +- `parameter_id` - The id of the parameter to set the value for. +- `value` - The value of type string, float, int, bytes, or bytearray. + + +**Returns**: + + The builder. + + + +#### add\_tag + +```python +def add_tag(tag_id: str, value: str) -> 'TimeseriesDataBuilder' +``` + +Adds a tag to the values. + +**Arguments**: + +- `tag_id` - The id of the tag. +- `value` - The value of the tag. + + +**Returns**: + + The builder. + + + +#### add\_tags + +```python +def add_tags(tags: Dict[str, str]) -> 'TimeseriesDataBuilder' +``` + +Copies the tags from the specified dictionary. Conflicting tags will be overwritten. + +**Arguments**: + +- `tags` - The tags to add. + + +**Returns**: + + The builder. + + + +#### publish + +```python +def publish() +``` + +Publish the values. + + + +# quixstreams.configuration + + + +# quixstreams.configuration.saslmechanism + + + +# quixstreams.configuration.securityoptions + + + +## SecurityOptions Objects + +```python +class SecurityOptions(object) +``` + +A class representing security options for configuring SSL encryption with SASL authentication in Kafka. + + + +#### \_\_init\_\_ + +```python +def __init__(ssl_certificates: str, + username: str, + password: str, + sasl_mechanism: SaslMechanism = SaslMechanism.ScramSha256) +``` + +Initializes a new instance of SecurityOptions configured for SSL encryption with SASL authentication. + +**Arguments**: + +- `ssl_certificates` - The path to the folder or file containing the certificate authority + certificate(s) used to validate the SSL connection. +- `Example` - "./certificates/ca.cert" +- `username` - The username for SASL authentication. +- `password` - The password for SASL authentication. +- `sasl_mechanism` - The SASL mechanism to use. Defaults to ScramSha256. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() +``` + +Retrieves the .NET pointer for the current SecurityOptions instance. + +**Returns**: + +- `ctypes.c_void_p` - The .NET pointer. + + + +# quixstreams.exceptions.quixapiexception + + + +# quixstreams.helpers + + + +# quixstreams.helpers.dotnet.datetimeconverter + + + +## DateTimeConverter Objects + +```python +class DateTimeConverter() +``` + + + +#### datetime\_to\_python + +```python +@staticmethod +def datetime_to_python(hptr: ctypes.c_void_p) -> datetime.datetime +``` + +Converts dotnet pointer to DateTime and frees the pointer. + +**Arguments**: + +- `hptr` - Handler Pointer to .Net type DateTime + + +**Returns**: + + datetime.datetime: + Python type datetime + + + +#### datetime\_to\_dotnet + +```python +@staticmethod +def datetime_to_dotnet(value: datetime.datetime) -> ctypes.c_void_p +``` + +**Arguments**: + +- `value` - Python type datetime + + +**Returns**: + + ctypes.c_void_p: + Handler Pointer to .Net type DateTime + + + +#### timespan\_to\_python + +```python +@staticmethod +def timespan_to_python(uptr: ctypes.c_void_p) -> datetime.timedelta +``` + +Converts dotnet pointer to Timespan as binary and frees the pointer. + +**Arguments**: + +- `uptr` - Pointer to .Net type TimeSpan + + +**Returns**: + + datetime.timedelta: + Python type timedelta + + + +#### timedelta\_to\_dotnet + +```python +@staticmethod +def timedelta_to_dotnet(value: datetime.timedelta) -> ctypes.c_void_p +``` + +**Arguments**: + +- `value` - Python type timedelta + + +**Returns**: + + ctypes.c_void_p: + Pointer to unmanaged memory containing TimeSpan + + + +# quixstreams.helpers.enumconverter + + + +# quixstreams.helpers.exceptionconverter + + + +# quixstreams.helpers.nativedecorator + + + +# quixstreams.helpers.timeconverter + + + +## TimeConverter Objects + +```python +class TimeConverter() +``` + +A utility class for converting between different time representations. + + + +#### offset\_from\_utc + +The local time ahead of utc by this amount of nanoseconds + + + +#### to\_unix\_nanoseconds + +```python +@staticmethod +def to_unix_nanoseconds(value: datetime) -> int +``` + +Converts a datetime object to UNIX timestamp in nanoseconds. + +**Arguments**: + +- `value` - The datetime object to be converted. + + +**Returns**: + +- `int` - The UNIX timestamp in nanoseconds. + + + +#### to\_nanoseconds + +```python +@staticmethod +def to_nanoseconds(value: timedelta) -> int +``` + +Converts a timedelta object to nanoseconds. + +**Arguments**: + +- `value` - The timedelta object to be converted. + + +**Returns**: + +- `int` - The duration in nanoseconds. + + + +#### from\_nanoseconds + +```python +@staticmethod +def from_nanoseconds(value: int) -> timedelta +``` + +Converts a duration in nanoseconds to a timedelta object. + +**Arguments**: + +- `value` - The duration in nanoseconds. + + +**Returns**: + +- `timedelta` - The corresponding timedelta object. + + + +#### from\_unix\_nanoseconds + +```python +@staticmethod +def from_unix_nanoseconds(value: int) -> datetime +``` + +Converts a UNIX timestamp in nanoseconds to a datetime object. + +**Arguments**: + +- `value` - The UNIX timestamp in nanoseconds. + + +**Returns**: + +- `datetime` - The corresponding datetime object. + + + +#### from\_string + +```python +@staticmethod +def from_string(value: str) -> int +``` + +Converts a string representation of a timestamp to a UNIX timestamp in nanoseconds. + +**Arguments**: + +- `value` - The string representation of a timestamp. + + +**Returns**: + +- `int` - The corresponding UNIX timestamp in nanoseconds. + + + +# quixstreams.kafkastreamingclient + + + +## KafkaStreamingClient Objects + +```python +@nativedecorator +class KafkaStreamingClient(object) +``` + +A Kafka streaming client capable of creating topic consumer and producers. + + + +#### \_\_init\_\_ + +```python +def __init__(broker_address: str, + security_options: SecurityOptions = None, + properties: Dict[str, str] = None, + debug: bool = False) +``` + +Initializes a new instance of the KafkaStreamingClient. + +**Arguments**: + +- `broker_address` - The address of the Kafka cluster. +- `security_options` - Optional security options for the Kafka client. +- `properties` - Optional extra properties for broker configuration. +- `debug` - Whether debugging should be enabled. Defaults to False. + + + +#### get\_topic\_consumer + +```python +def get_topic_consumer( + topic: str, + consumer_group: str = None, + commit_settings: Union[CommitOptions, CommitMode] = None, + auto_offset_reset: AutoOffsetReset = AutoOffsetReset.Latest +) -> TopicConsumer +``` + +Gets a topic consumer capable of subscribing to receive incoming streams. + +**Arguments**: + +- `topic` - The name of the topic. +- `consumer_group` - The consumer group ID to use for consuming messages. Defaults to None. +- `commit_settings` - The settings to use for committing. If not provided, defaults to committing every 5000 messages or 5 seconds, whichever is sooner. +- `auto_offset_reset` - The offset to use when there is no saved offset for the consumer group. Defaults to AutoOffsetReset.Latest. + + +**Returns**: + +- `TopicConsumer` - An instance of TopicConsumer for the specified topic. + + + +#### get\_topic\_producer + +```python +def get_topic_producer(topic: str) -> TopicProducer +``` + +Gets a topic producer capable of publishing stream messages. + +**Arguments**: + +- `topic` - The name of the topic. + + +**Returns**: + +- `TopicProducer` - An instance of TopicProducer for the specified topic. + + + +#### get\_raw\_topic\_consumer + +```python +def get_raw_topic_consumer( + topic: str, + consumer_group: str = None, + auto_offset_reset: Union[AutoOffsetReset, + None] = None) -> RawTopicConsumer +``` + +Gets a topic consumer capable of subscribing to receive non-quixstreams incoming messages. + +**Arguments**: + +- `topic` - The name of the topic. +- `consumer_group` - The consumer group ID to use for consuming messages. Defaults to None. +- `auto_offset_reset` - The offset to use when there is no saved offset for the consumer group. Defaults to None. + + +**Returns**: + +- `RawTopicConsumer` - An instance of RawTopicConsumer for the specified topic. + + + +#### get\_raw\_topic\_producer + +```python +def get_raw_topic_producer(topic: str) -> RawTopicProducer +``` + +Gets a topic producer capable of publishing non-quixstreams messages. + +**Arguments**: + +- `topic` - The name of the topic. + + +**Returns**: + +- `RawTopicProducer` - An instance of RawTopicProducer for the specified topic. + + + +# quixstreams.logging + + + +# quixstreams.models + + + +# quixstreams.models.autooffsetreset + + + +## AutoOffsetReset Objects + +```python +class AutoOffsetReset(Enum) +``` + +Enum representing the policy on how a consumer should behave when consuming from a topic partition when there is no initial offset. + + + +#### Latest + +Latest: Starts from the newest message if there is no stored offset. + + + +#### Earliest + +Earliest: Starts from the oldest message if there is no stored offset. + + + +#### Error + +Error: Throws an exception if there is no stored offset. + + + +# quixstreams.models.codecsettings + + + +## CodecSettings Objects + +```python +class CodecSettings(object) +``` + +Global Codec settings for streams. + + + +#### set\_global\_codec\_type + +```python +@staticmethod +def set_global_codec_type(codec_type: CodecType) +``` + +Sets the codec type to be used by producers and transfer package value serialization. + + + +# quixstreams.models.codectype + + + +## CodecType Objects + +```python +class CodecType(Enum) +``` + +Codecs available for serialization and deserialization of streams. + + + +# quixstreams.models.commitmode + + + +# quixstreams.models.commitoptions + + + +## CommitOptions Objects + +```python +@nativedecorator +class CommitOptions(object) +``` + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p = None) +``` + +Initializes a new instance of CommitOptions + +**Arguments**: + +- `net_pointer`: Pointer to an instance of a .net CommitOptions. + + + +#### auto\_commit\_enabled + +```python +@property +def auto_commit_enabled() -> bool +``` + +Gets whether automatic committing is enabled. +If automatic committing is not enabled, other values are ignored. +Default is True. + + + +#### auto\_commit\_enabled + +```python +@auto_commit_enabled.setter +def auto_commit_enabled(value: bool) -> None +``` + +Sets whether automatic committing is enabled. +If automatic committing is not enabled, other values are ignored. +Default is True. + + + +#### commit\_interval + +```python +@property +def commit_interval() -> Optional[int] +``` + +Gets the interval of automatic commit in ms. Default is 5000. + + + +#### commit\_interval + +```python +@commit_interval.setter +def commit_interval(value: Optional[int]) -> None +``` + +Sets the interval of automatic commit in ms. Default is 5000. + + + +#### commit\_every + +```python +@property +def commit_every() -> Optional[int] +``` + +Gets the number of messages to automatically commit at. Default is 5000. + + + +#### commit\_every + +```python +@commit_every.setter +def commit_every(value: Optional[int]) -> None +``` + +Sets the number of messages to automatically commit at. Default is 5000. + + + +# quixstreams.models.eventdata + + + +## EventData Objects + +```python +@nativedecorator +class EventData(object) +``` + +Represents a single point in time with event value and tags attached to it. + + + +#### \_\_init\_\_ + +```python +def __init__(event_id: str = None, + time: Union[int, str, datetime, pd.Timestamp] = None, + value: str = None, + net_pointer: ctypes.c_void_p = None) +``` + +Initializes a new instance of EventData. + +**Arguments**: + +- `event_id` - The unique id of the event the value belongs to. +- `time` - The time at which the event has occurred in nanoseconds since epoch or as a datetime. +- `value` - The value of the event. +- `net_pointer` - Pointer to an instance of a .net EventData. + + + +#### id + +```python +@property +def id() -> str +``` + +Gets the globally unique identifier of the event. + + + +#### id + +```python +@id.setter +def id(value: str) -> None +``` + +Sets the globally unique identifier of the event. + + + +#### value + +```python +@property +def value() -> str +``` + +Gets the value of the event. + + + +#### value + +```python +@value.setter +def value(value: str) -> None +``` + +Sets the value of the event. + + + +#### tags + +```python +@property +def tags() -> Dict[str, str] +``` + +Gets the tags for the timestamp. + +If a key is not found, it returns None. +The dictionary key is the tag id. +The dictionary value is the tag value. + + + +#### timestamp\_nanoseconds + +```python +@property +def timestamp_nanoseconds() -> int +``` + +Gets timestamp in nanoseconds. + + + +#### timestamp\_milliseconds + +```python +@property +def timestamp_milliseconds() -> int +``` + +Gets timestamp in milliseconds. + + + +#### timestamp + +```python +@property +def timestamp() -> datetime +``` + +Gets the timestamp in datetime format. + + + +#### timestamp\_as\_time\_span + +```python +@property +def timestamp_as_time_span() -> timedelta +``` + +Gets the timestamp in timespan format. + + + +#### clone + +```python +def clone() +``` + +Clones the event data. + +**Returns**: + +- `EventData` - Cloned EventData object. + + + +#### add\_tag + +```python +def add_tag(tag_id: str, tag_value: str) -> 'EventData' +``` + +Adds a tag to the event. + +**Arguments**: + +- `tag_id` - The id of the tag. +- `tag_value` - The value to set. + + +**Returns**: + +- `EventData` - The updated EventData object. + + + +#### add\_tags + +```python +def add_tags(tags: Dict[str, str]) -> 'EventData' +``` + +Adds tags from the specified dictionary. Conflicting tags will be overwritten. + +**Arguments**: + +- `tags` - The tags to add. + + +**Returns**: + +- `EventData` - The updated EventData object. + + + +#### remove\_tag + +```python +def remove_tag(tag_id: str) -> 'EventData' +``` + +Removes a tag from the event. + +**Arguments**: + +- `tag_id` - The id of the tag to remove. + + +**Returns**: + +- `EventData` - The updated EventData object. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() +``` + +Gets the associated .net object pointer. + +**Returns**: + + The .net object pointer. + + + +# quixstreams.models.eventdefinition + + + +## EventDefinition Objects + +```python +class EventDefinition(object) +``` + +Describes additional context for the event + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of EventDefinition + +NOTE: Do not initialize this class manually. Instances of it are available on StreamEventsConsumer.definitions + +**Arguments**: + +- `net_pointer`: Pointer to an instance of a .net EventDefinition + + + +# quixstreams.models.eventlevel + + + +# quixstreams.models.netdict + + + +## ReadOnlyNetDict Objects + +```python +class ReadOnlyNetDict(object) +``` + +Experimental. Acts as a proxy between a .net dictionary and a python dict. Useful if .net dictionary is observable and reacts to changes + + + +## NetDict Objects + +```python +class NetDict(ReadOnlyNetDict) +``` + +Experimental. Acts as a proxy between a .net dictionary and a python list. + + + +#### constructor\_for\_string\_string + +```python +@staticmethod +def constructor_for_string_string(net_pointer=None) +``` + +Creates an empty dotnet list for strings if no pointer provided, else wraps in NetDict with string converters + + + +# quixstreams.models.netlist + + + +## NetReadOnlyList Objects + +```python +class NetReadOnlyList(object) +``` + +Experimental. Acts as a proxy between a .net collection and a python list. Useful if .net collection is observable and reacts to changes + + + +## NetList Objects + +```python +class NetList(NetReadOnlyList) +``` + +Experimental. Acts as a proxy between a .net collection and a python list. Useful if .net collection is observable and reacts to changes + + + +#### constructor\_for\_string + +```python +@staticmethod +def constructor_for_string(net_pointer=None) +``` + +Creates an empty dotnet list for strings if no pointer provided, else wraps in NetDict with string converters + + + +# quixstreams.models.parameterdefinition + + + +## ParameterDefinition Objects + +```python +class ParameterDefinition(object) +``` + +Describes additional context for the parameter + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of ParameterDefinition + +NOTE: Do not initialize this class manually. Instances of it are available on StreamTimeseriesConsumer.definitions + +**Arguments**: + +- `net_pointer`: Pointer to an instance of a .net ParameterDefinition. + + + +# quixstreams.models.parametervalue + + + +## ParameterValue Objects + +```python +@nativedecorator +class ParameterValue(object) +``` + +Represents a single parameter value of either numeric, string, or binary type. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of ParameterValue. + +**Arguments**: + +- `net_pointer` - The .net object pointer representing ParameterValue. + + + +#### numeric\_value + +```python +@property +def numeric_value() -> float +``` + +Gets the numeric value of the parameter if the underlying parameter is of numeric type. + + + +#### numeric\_value + +```python +@numeric_value.setter +def numeric_value(value: float) +``` + +Sets the numeric value of the parameter and updates the type to numeric. + +**Arguments**: + +- `value` - The numeric value to set. + + + +#### string\_value + +```python +@property +def string_value() -> str +``` + +Gets the string value of the parameter if the underlying parameter is of string type. + + + +#### string\_value + +```python +@string_value.setter +def string_value(value: str) +``` + +Sets the string value of the parameter and updates the type to string. + +**Arguments**: + +- `value` - The string value to set. + + + +#### binary\_value + +```python +@property +def binary_value() -> bytes +``` + +Gets the binary value of the parameter if the underlying parameter is of binary type. + + + +#### binary\_value + +```python +@binary_value.setter +def binary_value(value: Union[bytearray, bytes]) +``` + +Sets the binary value of the parameter and updates the type to binary. + +**Arguments**: + +- `value` - The binary value to set. + + + +#### type + +```python +@property +def type() -> ParameterValueType +``` + +Gets the type of value, which is numeric, string, binary if set, otherwise empty + + + +#### value + +```python +@property +def value() +``` + +Gets the underlying value. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the associated .net object pointer. + + + +# quixstreams.models.streamconsumer + + + +# quixstreams.models.streamconsumer.streameventsconsumer + + + +## StreamEventsConsumer Objects + +```python +@nativedecorator +class StreamEventsConsumer(object) +``` + +Consumer for streams, which raises EventData and EventDefinitions related messages + + + +#### \_\_init\_\_ + +```python +def __init__(stream_consumer, net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of StreamEventsConsumer. +NOTE: Do not initialize this class manually, use StreamConsumer.events to access an instance of it + +**Arguments**: + +- `stream_consumer` - The Stream consumer which owns this stream event consumer +- `net_pointer` - Pointer to an instance of a .net StreamEventsConsumer + + + +#### on\_data\_received + +```python +@property +def on_data_received() -> Callable[['StreamConsumer', EventData], None] +``` + +Gets the handler for when an events data package is received for the stream. + +**Returns**: + + Callable[['StreamConsumer', EventData], None]: + The first parameter is the stream the event is received for. The second is the event. + + + +#### on\_data\_received + +```python +@on_data_received.setter +def on_data_received( + value: Callable[['StreamConsumer', EventData], None]) -> None +``` + +Sets the handler for when an events data package is received for the stream. + +**Arguments**: + +- `value` - The first parameter is the stream the event is received for. The second is the event. + + + +#### on\_definitions\_changed + +```python +@property +def on_definitions_changed() -> Callable[['StreamConsumer'], None] +``` + +Gets the handler for event definitions have changed for the stream. + +**Returns**: + + Callable[['StreamConsumer'], None]: + The first parameter is the stream the event definitions changed for. + + + +#### on\_definitions\_changed + +```python +@on_definitions_changed.setter +def on_definitions_changed(value: Callable[['StreamConsumer'], None]) -> None +``` + +Sets the handler for event definitions have changed for the stream. + +**Arguments**: + +- `value` - The first parameter is the stream the event definitions changed for. + + + +#### definitions + +```python +@property +def definitions() -> List[EventDefinition] +``` + +Gets the latest set of event definitions. + + + +# quixstreams.models.streamconsumer.streampropertiesconsumer + + + +## StreamPropertiesConsumer Objects + +```python +@nativedecorator +class StreamPropertiesConsumer(object) +``` + +Represents properties and metadata of the stream. +All changes to these properties are automatically populated to this class. + + + +#### \_\_init\_\_ + +```python +def __init__(stream_consumer: 'StreamConsumer', net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of StreamPropertiesConsumer. +NOTE: Do not initialize this class manually, use StreamConsumer.properties to access an instance of it. + +**Arguments**: + +- `stream_consumer` - The Stream consumer that owns this stream event consumer. +- `net_pointer` - Pointer to an instance of a .NET StreamPropertiesConsumer. + + + +#### on\_changed + +```python +@property +def on_changed() -> Callable[['StreamConsumer'], None] +``` + +Gets the handler for when the stream properties change. + +**Returns**: + + Callable[[StreamConsumer], None]: The event handler for stream property changes. + The first parameter is the StreamConsumer instance for which the change is invoked. + + + +#### on\_changed + +```python +@on_changed.setter +def on_changed(value: Callable[['StreamConsumer'], None]) -> None +``` + +Sets the handler for when the stream properties change. + +**Arguments**: + +- `value` - The first parameter is the stream it is invoked for. + + + +#### name + +```python +@property +def name() -> str +``` + +Gets the name of the stream. + + + +#### location + +```python +@property +def location() -> str +``` + +Gets the location of the stream. + + + +#### time\_of\_recording + +```python +@property +def time_of_recording() -> datetime +``` + +Gets the datetime of the recording. + + + +#### metadata + +```python +@property +def metadata() -> Dict[str, str] +``` + +Gets the metadata of the stream. + + + +#### parents + +```python +@property +def parents() -> List[str] +``` + +Gets the list of Stream IDs for the parent streams. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the .NET pointer for the StreamPropertiesConsumer instance. + +**Returns**: + +- `ctypes.c_void_p` - .NET pointer for the StreamPropertiesConsumer instance. + + + +# quixstreams.models.streamconsumer.streamtimeseriesconsumer + + + +## StreamTimeseriesConsumer Objects + +```python +@nativedecorator +class StreamTimeseriesConsumer(object) +``` + +Consumer for streams, which raises TimeseriesData and ParameterDefinitions related messages + + + +#### \_\_init\_\_ + +```python +def __init__(stream_consumer, net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of StreamTimeseriesConsumer. +NOTE: Do not initialize this class manually. Use StreamConsumer.timeseries to access an instance of it. + +**Arguments**: + +- `stream_consumer` - The Stream consumer which owns this stream event consumer. +- `net_pointer` _.net object_ - Pointer to an instance of a .net StreamTimeseriesConsumer. + + + +#### on\_data\_received + +```python +@property +def on_data_received() -> Callable[['StreamConsumer', TimeseriesData], None] +``` + +Gets the handler for when data is received (without buffering). + +**Returns**: + + Callable[['StreamConsumer', TimeseriesData], None]: The function that handles the data received. + The first parameter is the stream that receives the data, and the second is the data in TimeseriesData format. + + + +#### on\_data\_received + +```python +@on_data_received.setter +def on_data_received( + value: Callable[['StreamConsumer', TimeseriesData], None]) -> None +``` + +Sets the handler for when data is received (without buffering). + +**Arguments**: + +- `value` - The function that handles the data received. + The first parameter is the stream that receives the data, and the second is the data in TimeseriesData format. + + + +#### on\_raw\_received + +```python +@property +def on_raw_received() -> Callable[['StreamConsumer', TimeseriesDataRaw], None] +``` + +Gets the handler for when data is received (without buffering) in raw transport format. + +**Returns**: + + Callable[['StreamConsumer', TimeseriesDataRaw], None]: The function that handles the data received. + The first parameter is the stream that receives the data, and the second is the data in TimeseriesDataRaw format. + + + +#### on\_raw\_received + +```python +@on_raw_received.setter +def on_raw_received( + value: Callable[['StreamConsumer', TimeseriesDataRaw], None]) -> None +``` + +Sets the handler for when data is received (without buffering) in raw transport format. + +**Arguments**: + +- `value` - The function that handles the data received. + The first parameter is the stream that receives the data, and the second is the data in TimeseriesDataRaw format. + + + +#### on\_dataframe\_received + +```python +@property +def on_dataframe_received( +) -> Callable[['StreamConsumer', pandas.DataFrame], None] +``` + +Gets the handler for when data is received (without buffering) in pandas DataFrame format. + +**Returns**: + + Callable[['StreamConsumer', pandas.DataFrame], None]: The function that handles the data received. + The first parameter is the stream that receives the data, and the second is the data in pandas DataFrame format. + + + +#### on\_dataframe\_received + +```python +@on_dataframe_received.setter +def on_dataframe_received( + value: Callable[['StreamConsumer', pandas.DataFrame], None]) -> None +``` + +Sets the handler for when data is received (without buffering) in pandas DataFrame format. + +**Arguments**: + +- `value` - The function that handles the data received. + The first parameter is the stream that receives the data, and the second is the data in pandas DataFrame format. + + + +#### on\_definitions\_changed + +```python +@property +def on_definitions_changed() -> Callable[['StreamConsumer'], None] +``` + +Gets the handler for when the parameter definitions have changed for the stream. + +**Returns**: + + Callable[['StreamConsumer'], None]: The function that handles the parameter definitions change. + The first parameter is the stream for which the parameter definitions changed. + + + +#### on\_definitions\_changed + +```python +@on_definitions_changed.setter +def on_definitions_changed(value: Callable[['StreamConsumer'], None]) -> None +``` + +Sets the handler for when the parameter definitions have changed for the stream. + +**Arguments**: + +- `value` - The function that handles the parameter definitions change. + The first parameter is the stream for which the parameter definitions changed. + + + +#### definitions + +```python +@property +def definitions() -> List[ParameterDefinition] +``` + +Gets the latest set of parameter definitions. + + + +#### create\_buffer + +```python +def create_buffer( + *parameter_filter: str, + buffer_configuration: TimeseriesBufferConfiguration = None +) -> TimeseriesBufferConsumer +``` + +Creates a new buffer for consuming data according to the provided parameter_filter and buffer_configuration. + +**Arguments**: + +- `parameter_filter` - Zero or more parameter identifiers to filter as a whitelist. If provided, only those + parameters will be available through this buffer. +- `buffer_configuration` - An optional TimeseriesBufferConfiguration. + + +**Returns**: + +- `TimeseriesBufferConsumer` - An consumer that will raise new data consumed via the on_data_released event. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the .NET pointer for the StreamTimeseriesConsumer instance. + +**Returns**: + +- `ctypes.c_void_p` - .NET pointer for the StreamTimeseriesConsumer instance. + + + +# quixstreams.models.streamconsumer.timeseriesbufferconsumer + + + +## TimeseriesBufferConsumer Objects + +```python +class TimeseriesBufferConsumer(TimeseriesBuffer) +``` + +Represents a class for consuming data from a stream in a buffered manner. + + + +#### \_\_init\_\_ + +```python +def __init__(stream_consumer, net_pointer: ctypes.c_void_p = None) +``` + +Initializes a new instance of TimeseriesBufferConsumer. + +NOTE: Do not initialize this class manually, +use StreamTimeseriesConsumer.create_buffer to create it. + +**Arguments**: + +- `stream_consumer` - The Stream consumer which owns this timeseries buffer consumer. +- `net_pointer` - Pointer to an instance of a .net TimeseriesBufferConsumer. + Defaults to None. + + +**Raises**: + +- `Exception` - If net_pointer is None. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Retrieves the pointer to the .net TimeseriesBufferConsumer instance. + +**Returns**: + +- `ctypes.c_void_p` - The pointer to the .net TimeseriesBufferConsumer instance. + + + +# quixstreams.models.streamendtype + + + +# quixstreams.models.streampackage + + + +## StreamPackage Objects + +```python +@nativedecorator +class StreamPackage(object) +``` + +Default model implementation for non-typed message packages of the Telemetry layer. It holds a value and its type. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of StreamPackage. + +**Notes**: + + Do not initialize this class manually. Will be initialized by StreamConsumer.on_package_received. + + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net StreamPackage. + + + +#### transport\_context + +```python +@property +def transport_context() -> Dict[str, str] +``` + +Context holder for package when transporting through the pipeline. + + + +#### to\_json + +```python +def to_json() -> str +``` + +Serialize the package into JSON. + +**Returns**: + +- `str` - The serialized JSON string of the package. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the associated .net object pointer. + +**Returns**: + +- `ctypes.c_void_p` - The .net object pointer. + + + +# quixstreams.models.streamproducer + + + +# quixstreams.models.streamproducer.streameventsproducer + + + +## StreamEventsProducer Objects + +```python +@nativedecorator +class StreamEventsProducer(object) +``` + +Helper class for producing EventDefinitions and EventData. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of StreamEventsProducer. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .NET StreamEventsProducer. + + + +#### flush + +```python +def flush() +``` + +Immediately publishes the event definitions from the buffer without waiting for buffer condition to fulfill +(200ms timeout). TODO: Verify 200ms timeout value. + + + +#### default\_tags + +```python +@property +def default_tags() -> Dict[str, str] +``` + +Gets default tags injected to all event values sent by the producer. + + + +#### default\_location + +```python +@property +def default_location() -> str +``` + +Gets the default Location of the events. Event definitions added with add_definition will be inserted at this location. +See add_location for adding definitions at a different location without changing default. +Example: "/Group1/SubGroup2" + + + +#### default\_location + +```python +@default_location.setter +def default_location(value: str) +``` + +Sets the default Location of the events. Event definitions added with add_definition will be inserted at this location. +See add_location for adding definitions at a different location without changing default. + +**Arguments**: + +- `value` - Location string, e.g., "/Group1/SubGroup2". + + + +#### epoch + +```python +@property +def epoch() -> datetime +``` + +The unix epoch from, which all other timestamps in this model are measured from in nanoseconds. + + + +#### epoch + +```python +@epoch.setter +def epoch(value: datetime) +``` + +Sets the default epoch used for event values. + + + +#### publish + +```python +def publish(data: Union[EventData, pd.DataFrame], **columns) -> None +``` + +Publish an event into the stream. + +**Arguments**: + +- `data` - EventData object or a pandas dataframe. +- `columns` - Column names if the dataframe has different columns from 'id', 'timestamp', and 'value'. + For instance, if 'id' is in the column 'event_id', id='event_id' must be passed as an argument. + + +**Raises**: + +- `TypeError` - If the data argument is neither an EventData nor pandas dataframe. + + + +#### add\_timestamp + +```python +def add_timestamp(time: Union[datetime, timedelta]) -> EventDataBuilder +``` + +Start adding a new set of event values at the given timestamp. + +**Arguments**: + +- `time` - The time to use for adding new event values. + * datetime: The datetime to use for adding new event values. NOTE, epoch is not used. + * timedelta: The time since the default epoch to add the event values at + + +**Returns**: + +- `EventDataBuilder` - Event data builder to add event values at the provided time. + + + +#### add\_timestamp\_milliseconds + +```python +def add_timestamp_milliseconds(milliseconds: int) -> EventDataBuilder +``` + +Start adding a new set of event values at the given timestamp. + +**Arguments**: + +- `milliseconds` - The time in milliseconds since the default epoch to add the event values at. + + +**Returns**: + +- `EventDataBuilder` - Event data builder to add event values at the provided time. + + + +#### add\_timestamp\_nanoseconds + +```python +def add_timestamp_nanoseconds(nanoseconds: int) -> EventDataBuilder +``` + +Start adding a new set of event values at the given timestamp. + +**Arguments**: + +- `nanoseconds` - The time in nanoseconds since the default epoch to add the event values at. + + +**Returns**: + +- `EventDataBuilder` - Event data builder to add event values at the provided time. + + + +#### add\_definition + +```python +def add_definition(event_id: str, + name: str = None, + description: str = None) -> EventDefinitionBuilder +``` + +Add new Event definition to define properties like Name or Level, among others. + +**Arguments**: + +- `event_id` - The id of the event. Must match the event id used to send data. +- `name` - The human-friendly display name of the event. +- `description` - The description of the event. + + +**Returns**: + +- `EventDefinitionBuilder` - EventDefinitionBuilder to define properties of the event or add additional events. + + + +#### add\_location + +```python +def add_location(location: str) -> EventDefinitionBuilder +``` + +Add a new location in the events groups hierarchy. + +**Arguments**: + +- `location` - The group location. + + +**Returns**: + +- `EventDefinitionBuilder` - EventDefinitionBuilder to define the events under the specified location. + + + +# quixstreams.models.streamproducer.streampropertiesproducer + + + +## StreamPropertiesProducer Objects + +```python +@nativedecorator +class StreamPropertiesProducer(object) +``` + +Represents properties and metadata of the stream. +All changes to these properties are automatically published to the underlying stream. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of StreamPropertiesProducer. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net StreamPropertiesProducer. + + + +#### name + +```python +@property +def name() -> str +``` + +Gets the human friendly name of the stream. + +**Returns**: + +- `str` - The human friendly name of the stream. + + + +#### name + +```python +@name.setter +def name(value: str) +``` + +Sets the human friendly name of the stream. + +**Arguments**: + +- `value` - The new human friendly name of the stream. + + + +#### location + +```python +@property +def location() -> str +``` + +Gets the location of the stream in the data catalogue. + +**Returns**: + +- `str` - The location of the stream in the data catalogue, e.g., "/cars/ai/carA/". + + + +#### location + +```python +@location.setter +def location(value: str) +``` + +Sets the location of the stream in the data catalogue. + +**Arguments**: + +- `value` - The new location of the stream in the data catalogue. + + + +#### metadata + +```python +@property +def metadata() -> Dict[str, str] +``` + +" +Gets the metadata of the stream. + +**Returns**: + + Dict[str, str]: The metadata of the stream. + + + +#### parents + +```python +@property +def parents() -> List[str] +``` + +Gets the list of stream ids of the parent streams. + +**Returns**: + +- `List[str]` - The list of stream ids of the parent streams. + + + +#### time\_of\_recording + +```python +@property +def time_of_recording() -> datetime +``` + +Gets the datetime of the stream recording. + +**Returns**: + +- `datetime` - The datetime of the stream recording. + + + +#### time\_of\_recording + +```python +@time_of_recording.setter +def time_of_recording(value: datetime) +``` + +Sets the time of the stream recording. + +**Arguments**: + +- `value` - The new time of the stream recording. + + + +#### flush\_interval + +```python +@property +def flush_interval() -> int +``` + +Gets the automatic flush interval of the properties metadata into the channel (in milliseconds). + +**Returns**: + +- `int` - The automatic flush interval in milliseconds, default is 30000. + + + +#### flush\_interval + +```python +@flush_interval.setter +def flush_interval(value: int) +``` + +Sets the automatic flush interval of the properties metadata into the channel (in milliseconds). + +**Arguments**: + +- `value` - The new flush interval in milliseconds. + + + +#### flush + +```python +def flush() +``` + +Immediately publishes the properties yet to be sent instead of waiting for the flush timer (20ms). + + + +# quixstreams.models.streamproducer.streamtimeseriesproducer + + + +## StreamTimeseriesProducer Objects + +```python +@nativedecorator +class StreamTimeseriesProducer(object) +``` + +Helper class for producing ParameterDefinition and TimeseriesData. + + + +#### \_\_init\_\_ + +```python +def __init__(stream_producer, net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of StreamTimeseriesProducer. + +**Arguments**: + +- `stream_producer` - The Stream producer which owns this stream timeseries producer. +- `net_pointer` - Pointer to an instance of a .net StreamTimeseriesProducer. + + + +#### flush + +```python +def flush() +``` + +Immediately publish timeseries data and definitions from the buffer without waiting for buffer condition to fulfill for either. + + + +#### add\_definition + +```python +def add_definition(parameter_id: str, + name: str = None, + description: str = None) -> ParameterDefinitionBuilder +``` + +Add new parameter definition to the StreamTimeseriesProducer. Configure it with the builder methods. + +**Arguments**: + +- `parameter_id` - The id of the parameter. Must match the parameter id used to send data. +- `name` - The human friendly display name of the parameter. +- `description` - The description of the parameter. + + +**Returns**: + +- `ParameterDefinitionBuilder` - Builder to define the parameter properties. + + + +#### add\_location + +```python +def add_location(location: str) -> ParameterDefinitionBuilder +``` + +Add a new location in the parameters groups hierarchy. + +**Arguments**: + +- `location` - The group location. + + +**Returns**: + +- `ParameterDefinitionBuilder` - Builder to define the parameters under the specified location. + + + +#### default\_location + +```python +@property +def default_location() -> str +``` + +Gets the default location of the parameters. Parameter definitions added with add_definition will be inserted at this location. +See add_location for adding definitions at a different location without changing default. + +**Returns**: + +- `str` - The default location of the parameters, e.g., "/Group1/SubGroup2". + + + +#### default\_location + +```python +@default_location.setter +def default_location(value: str) +``` + +Sets the default location of the parameters. Parameter definitions added with add_definition will be inserted at this location. +See add_location for adding definitions at a different location without changing default. + +**Arguments**: + +- `value` - The new default location of the parameters, e.g., "/Group1/SubGroup2". + + + +#### buffer + +```python +@property +def buffer() -> TimeseriesBufferProducer +``` + +Get the buffer for producing timeseries data. + +**Returns**: + +- `TimeseriesBufferProducer` - The buffer for producing timeseries data. + + + +#### publish + +```python +def publish( + packet: Union[TimeseriesData, pd.DataFrame, + TimeseriesDataRaw]) -> None +``` + +Publish the given packet to the stream without any buffering. + +**Arguments**: + +- `packet` - The packet containing TimeseriesData, TimeseriesDataRaw, or pandas DataFrame. + + +**Notes**: + + - Pandas DataFrame should contain 'time' label, else the first integer label will be taken as time. + - Tags should be prefixed by TAG__ or they will be treated as parameters. + + +**Examples**: + + Send a pandas DataFrame: + pdf = pandas.DataFrame({'time': [1, 5], +- `'panda_param'` - [123.2, 5]}) + instance.publish(pdf) + + Send a pandas DataFrame with multiple values: + pdf = pandas.DataFrame({'time': [1, 5, 10], +- `'panda_param'` - [123.2, None, 12], +- `'panda_param2'` - ["val1", "val2", None]}) + instance.publish(pdf) + + Send a pandas DataFrame with tags: + pdf = pandas.DataFrame({'time': [1, 5, 10], +- `'panda_param'` - [123.2, 5, 12], +- `'TAG__Tag1'` - ["v1", 2, None], +- `'TAG__Tag2'` - [1, None, 3]}) + instance.publish(pdf) + + +**Raises**: + +- `Exception` - If the given type is not supported for publishing. + + + +# quixstreams.models.streamproducer.timeseriesbufferproducer + + + +## TimeseriesBufferProducer Objects + +```python +@nativedecorator +class TimeseriesBufferProducer(TimeseriesBuffer) +``` + +A class for producing timeseries data to a StreamProducer in a buffered manner. + + + +#### \_\_init\_\_ + +```python +def __init__(stream_producer, net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of TimeseriesBufferProducer. +NOTE: Do not initialize this class manually, use StreamTimeseriesProducer.buffer to access an instance of it + +**Arguments**: + +- `stream_producer` - The Stream producer which owns this timeseries buffer producer +- `net_pointer` - Pointer to an instance of a .net TimeseriesBufferProducer + + +**Raises**: + +- `Exception` - If TimeseriesBufferProducer is None + + + +#### default\_tags + +```python +@property +def default_tags() -> Dict[str, str] +``` + +Get default tags injected for all parameters values sent by this buffer. + +**Returns**: + + Dict[str, str]: A dictionary containing the default tags + + + +#### epoch + +```python +@property +def epoch() -> datetime +``` + +Get the default epoch used for parameter values. + +**Returns**: + +- `datetime` - The default epoch used for parameter values + + + +#### epoch + +```python +@epoch.setter +def epoch(value: datetime) +``` + +Set the default epoch used for parameter values. Datetime added on top of all the Timestamps. + +**Arguments**: + +- `value` - The default epoch to set for parameter values + + + +#### add\_timestamp + +```python +def add_timestamp(time: Union[datetime, timedelta]) -> TimeseriesDataBuilder +``` + +Start adding a new set of parameter values at the given timestamp. + +**Arguments**: + +- `time` - The time to use for adding new parameter values. + - datetime: The datetime to use for adding new parameter values. NOTE, epoch is not used + - timedelta: The time since the default epoch to add the parameter values at + + +**Returns**: + +- `TimeseriesDataBuilder` - A TimeseriesDataBuilder instance for adding parameter values + + +**Raises**: + +- `ValueError` - If 'time' is None or not an instance of datetime or timedelta + + + +#### add\_timestamp\_nanoseconds + +```python +def add_timestamp_nanoseconds(nanoseconds: int) -> TimeseriesDataBuilder +``` + +Start adding a new set of parameter values at the given timestamp. + +**Arguments**: + +- `nanoseconds` - The time in nanoseconds since the default epoch to add the parameter values at + + +**Returns**: + +- `TimeseriesDataBuilder` - A TimeseriesDataBuilder instance for adding parameter values + + + +#### flush + +```python +def flush() +``` + +Immediately publishes the data from the buffer without waiting for the buffer condition to be fulfilled. + + + +#### publish + +```python +def publish(packet: Union[TimeseriesData, pd.DataFrame]) -> None +``` + +Publish the provided timeseries packet to the buffer. + +**Arguments**: + +- `packet` - The packet containing TimeseriesData or panda DataFrame + - packet type panda.DataFrame: + * Note 1: panda data frame should contain 'time' label, else the first integer label will be taken as time. + * Note 2: Tags should be prefixed by TAG__ or they will be treated as timeseries parameters + + +**Examples**: + + Send a panda data frame: + pdf = panda.DataFrame({'time': [1, 5], +- `'panda_param'` - [123.2, 5]}) + + instance.publish(pdf) + + Send a panda data frame with multiple values: + pdf = panda.DataFrame({'time': [1, 5, 10], +- `'panda_param'` - [123.2, None, 12], +- `'panda_param2'` - ["val1", "val2", None]}) + + instance.publish(pdf) + + Send a panda data frame with tags: + pdf = panda.DataFrame({'time': [1, 5, 10], +- `'panda_param'` - [123.2, 5, 12],, +- `'TAG__Tag1'` - ["v1", 2, None], +- `'TAG__Tag2'` - [1, None, 3]}) + + instance.publish(pdf) + + +**Raises**: + +- `Exception` - If the packet type is not supported + + + +# quixstreams.models.timeseriesbuffer + + + +## TimeseriesBuffer Objects + +```python +@nativedecorator +class TimeseriesBuffer(object) +``` + +Represents a class used to consume and produce stream messages in a buffered manner. +When buffer conditions are not configured, it acts a pass-through, raising each message as arrives. + + + +#### \_\_init\_\_ + +```python +def __init__(stream, net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of TimeseriesBuffer. + +NOTE: Do not initialize this class manually, use StreamProducer.timeseries.buffer to create it. + +**Arguments**: + +- `stream` - The stream the buffer is created for. +- `net_pointer` - Pointer to a .net TimeseriesBuffer object. + + + +#### on\_data\_released + +```python +@property +def on_data_released() -> Callable[ + [Union['StreamConsumer', 'StreamProducer'], TimeseriesData], None] +``` + +Gets the handler for when the stream receives data. + +**Returns**: + + Callable[[Union['StreamConsumer', 'StreamProducer'], TimeseriesData], None]: The event handler. + The first parameter is the stream the data is received for, second is the data in TimeseriesData format. + + + +#### on\_data\_released + +```python +@on_data_released.setter +def on_data_released( + value: Callable[ + [Union['StreamConsumer', 'StreamProducer'], TimeseriesData], None] +) -> None +``` + +Sets the handler for when the stream receives data. + +**Arguments**: + +- `value` - The event handler. The first parameter is the stream the data is received for, second is the data in TimeseriesData format. + + + +#### on\_raw\_released + +```python +@property +def on_raw_released() -> Callable[ + [Union['StreamConsumer', 'StreamProducer'], TimeseriesDataRaw], None] +``` + +Gets the handler for when the stream receives raw data. + +**Returns**: + + Callable[[Union['StreamConsumer', 'StreamProducer'], TimeseriesDataRaw], None]: The event handler. + The first parameter is the stream the data is received for, second is the data in TimeseriesDataRaw format. + + + +#### on\_raw\_released + +```python +@on_raw_released.setter +def on_raw_released( + value: Callable[ + [Union['StreamConsumer', 'StreamProducer'], TimeseriesDataRaw], None] +) -> None +``` + +Sets the handler for when the stream receives raw data. + +**Arguments**: + +- `value` - The event handler. The first parameter is the stream the data is received for, second is the data in TimeseriesDataRaw format. + + + +#### on\_dataframe\_released + +```python +@property +def on_dataframe_released() -> Callable[ + [Union['StreamConsumer', 'StreamProducer'], pandas.DataFrame], None] +``` + +Gets the handler for when the stream receives data as a pandas DataFrame. + +**Returns**: + + Callable[[Union['StreamConsumer', 'StreamProducer'], pandas.DataFrame], None]: The event handler. + The first parameter is the stream the data is received for, second is the data in pandas.DataFrame format. + + + +#### on\_dataframe\_released + +```python +@on_dataframe_released.setter +def on_dataframe_released( + value: Callable[ + [Union['StreamConsumer', 'StreamProducer'], pandas.DataFrame], None] +) -> None +``` + +Sets the handler for when the stream receives data as a pandas DataFrame. + +**Arguments**: + +- `value` - The event handler. The first parameter is the stream the data is received for, second is the data in pandas.DataFrame format. + + + +#### filter + +```python +@property +def filter() -> Callable[[TimeseriesDataTimestamp], bool] +``` + +Gets the custom function to filter the incoming data before adding it to the buffer. If returns true, data is added otherwise not. +Defaults to none (disabled). + + + +#### filter + +```python +@filter.setter +def filter(value: Callable[[TimeseriesDataTimestamp], bool]) +``` + +Sets the custom function to filter incoming data before adding to the buffer. + +The custom function takes a TimeseriesDataTimestamp object as input and returns +a boolean value. If the function returns True, the data is added to the buffer, +otherwise not. By default, this feature is disabled (None). + +**Arguments**: + +- `value` - Custom filter function. + + + +#### custom\_trigger + +```python +@property +def custom_trigger() -> Callable[[TimeseriesData], bool] +``` + +Gets the custom trigger function, which is invoked after adding a new timestamp to the buffer. + +If the custom trigger function returns True, the buffer releases content and triggers relevant callbacks. +By default, this feature is disabled (None). + +**Returns**: + + Callable[[TimeseriesData], bool]: Custom trigger function. + + + +#### custom\_trigger + +```python +@custom_trigger.setter +def custom_trigger(value: Callable[[TimeseriesData], bool]) +``` + +Sets the custom trigger function, which is invoked after adding a new timestamp to the buffer. + +If the custom trigger function returns True, the buffer releases content and triggers relevant callbacks. +By default, this feature is disabled (None). + +**Arguments**: + +- `value` - Custom trigger function. + + + +#### packet\_size + +```python +@property +def packet_size() -> Optional[int] +``` + +Gets the maximum packet size in terms of values for the buffer. + +Each time the buffer has this amount of data, a callback method, such as `on_data_released`, +is invoked, and the data is cleared from the buffer. By default, this feature +is disabled (None). + +**Returns**: + +- `Optional[int]` - Maximum packet size for the buffer. + + + +#### packet\_size + +```python +@packet_size.setter +def packet_size(value: Optional[int]) +``` + +Sets the maximum packet size in terms of values for the buffer. + +Each time the buffer has this amount of data, a callback method, such as `on_data_released`, +is invoked, and the data is cleared from the buffer. By default, this feature +is disabled (None). + +**Arguments**: + +- `value` - Maximum packet size for the buffer. + + + +#### time\_span\_in\_nanoseconds + +```python +@property +def time_span_in_nanoseconds() -> Optional[int] +``` + +Gets the maximum time between timestamps for the buffer in nanoseconds. + +When the difference between the earliest and latest buffered timestamp surpasses +this number, a callback method, such as `on_data_released`, is invoked, and the data is cleared +from the buffer. By default, this feature is disabled (None). + +**Returns**: + +- `Optional[int]` - Maximum time between timestamps in nanoseconds. + + + +#### time\_span\_in\_nanoseconds + +```python +@time_span_in_nanoseconds.setter +def time_span_in_nanoseconds(value: Optional[int]) +``` + +Sets the maximum time between timestamps for the buffer in nanoseconds. + +When the difference between the earliest and latest buffered timestamp surpasses +this number, a callback method, such as `on_data_released`, is invoked, and the data is cleared +from the buffer. By default, this feature is disabled (None). + +**Arguments**: + +- `value` - Maximum time between timestamps in nanoseconds. + + + +#### time\_span\_in\_milliseconds + +```python +@property +def time_span_in_milliseconds() -> Optional[int] +``` + +Gets the maximum time between timestamps for the buffer in milliseconds. + +This property retrieves the maximum time between the earliest and latest buffered +timestamp in milliseconds. If the difference surpasses this number, a callback method, +such as on_data_released, is invoked, and the data is cleared from the buffer. Note that +this property is a millisecond converter on top of time_span_in_nanoseconds, and both +work with the same underlying value. Defaults to None (disabled). + +**Returns**: + +- `Optional[int]` - The maximum time difference between timestamps in milliseconds, or None if disabled. + + + +#### time\_span\_in\_milliseconds + +```python +@time_span_in_milliseconds.setter +def time_span_in_milliseconds(value: Optional[int]) +``` + +Sets the maximum time between timestamps for the buffer in milliseconds. + +This property sets the maximum time between the earliest and latest buffered +timestamp in milliseconds. If the difference surpasses this number, a callback method, +such as on_data_released, is invoked, and the data is cleared from the buffer. Note that +this property is a millisecond converter on top of time_span_in_nanoseconds, and both +work with the same underlying value. Defaults to None (disabled). + +**Arguments**: + +- `value` - The maximum time difference between timestamps in milliseconds, or None to disable. + + + +#### buffer\_timeout + +```python +@property +def buffer_timeout() -> Optional[int] +``` + +Gets the maximum duration in milliseconds for which the buffer will be held. When the configured value has elapsed +or other buffer conditions are met, a callback method, such as on_data_released, is invoked. +Defaults to None (disabled). + +**Returns**: + +- `Optional[int]` - The maximum duration in milliseconds before invoking a callback method, or None if disabled. + + + +#### buffer\_timeout + +```python +@buffer_timeout.setter +def buffer_timeout(value: Optional[int]) +``` + +Sets the maximum duration in milliseconds for which the buffer will be held. When the configured value has elapsed +or other buffer conditions are met, a callback method, such as on_data_released, is invoked. +Defaults to None (disabled). + +**Arguments**: + +- `value` - The maximum duration in milliseconds before invoking a callback method, or None to disable. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the associated .net object pointer. + +**Returns**: + +- `ctypes.c_void_p` - The .net object pointer. + + + +# quixstreams.models.timeseriesbufferconfiguration + + + +## TimeseriesBufferConfiguration Objects + +```python +@nativedecorator +class TimeseriesBufferConfiguration(object) +``` + +Describes the configuration for timeseries buffers +When buffer conditions are not configured, it acts a pass-through, raising each message as arrives. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p = None) +``` + +Initializes a new instance of TimeseriesBufferConfiguration. + +**Arguments**: + +- `net_pointer` - Can be ignored, here for internal purposes .net object: The .net object representing a TimeseriesBufferConfiguration. Defaults to None. + + + +#### packet\_size + +```python +@property +def packet_size() -> Optional[int] +``` + +Gets the maximum packet size in terms of values for the buffer. + +When the buffer reaches this number of values, a callback method, such as on_data_released, is invoked and the buffer is cleared. +If not set, defaults to None (disabled). + +**Returns**: + +- `Optional[int]` - The maximum packet size in values or None if disabled. + + + +#### packet\_size + +```python +@packet_size.setter +def packet_size(value: Optional[int]) +``` + +Sets the maximum packet size in terms of values for the buffer. + +When the buffer reaches this number of values, a callback method, such as on_data_released, is invoked and the buffer is cleared. +If not set, defaults to None (disabled). + +**Arguments**: + +- `value` - The maximum packet size in values or None to disable. + + + +#### time\_span\_in\_nanoseconds + +```python +@property +def time_span_in_nanoseconds() -> Optional[int] +``` + +Gets the maximum time difference between timestamps in the buffer, in nanoseconds. + +When the difference between the earliest and latest buffered timestamp exceeds this value, a callback +method, such as on_data_released, is invoked and the data is cleared from the buffer. If not set, defaults to None (disabled). + +**Returns**: + +- `Optional[int]` - The maximum time span in nanoseconds or None if disabled. + + + +#### time\_span\_in\_nanoseconds + +```python +@time_span_in_nanoseconds.setter +def time_span_in_nanoseconds(value: Optional[int]) +``` + +Sets the maximum time difference between timestamps in the buffer, in nanoseconds. + +When the difference between the earliest and latest buffered timestamp exceeds this value, a callback method, +such as on_data_released, is invoked and the data is cleared from the buffer. If not set, defaults to None (disabled). + +**Arguments**: + +- `value` - The maximum time span in nanoseconds or None to disable. + + + +#### time\_span\_in\_milliseconds + +```python +@property +def time_span_in_milliseconds() -> Optional[int] +``` + +Gets the maximum time difference between timestamps in the buffer, in milliseconds. + +When the difference between the earliest and latest buffered timestamp exceeds this value, a callback method, +such as on_data_released, is invoked and the data is cleared from the buffer. If not set, defaults to None (disabled). + +Note: This is a millisecond converter on top of time_span_in_nanoseconds. They both work with the same underlying value. + +**Returns**: + +- `Optional[int]` - The maximum time span in milliseconds or None if disabled. + + + +#### time\_span\_in\_milliseconds + +```python +@time_span_in_milliseconds.setter +def time_span_in_milliseconds(value: Optional[int]) +``` + +Sets the maximum time difference between timestamps in the buffer, in milliseconds. + +When the difference between the earliest and latest buffered timestamp exceeds this value, a callback method, +such as on_data_released, is invoked and the data is cleared from the buffer. If not set, defaults to None (disabled). + +**Arguments**: + +- `value` - The maximum time span in nanoseconds or None to disable. + + + +#### buffer\_timeout + +```python +@property +def buffer_timeout() -> Optional[int] +``` + +Gets the maximum duration for which the buffer will be held before releasing the events through callbacks, such as on_data_released. + +A callback will be invoked once the configured value has elapsed or other buffer conditions are met. +If not set, defaults to None (disabled). + +**Returns**: + +- `Optional[int]` - The maximum buffer timeout in milliseconds or None if disabled. + + + +#### buffer\_timeout + +```python +@buffer_timeout.setter +def buffer_timeout(value: Optional[int]) +``` + +Sets the maximum duration for which the buffer will be held before releasing the events through callbacks, such as on_data_released. + +A callback will be invoked once the configured value has elapsed or other buffer conditions are met. +If not set, defaults to None (disabled). + +**Arguments**: + +- `value` - The maximum buffer timeout in milliseconds or None to disable. + + + +#### custom\_trigger\_before\_enqueue + +```python +@property +def custom_trigger_before_enqueue( +) -> Callable[[TimeseriesDataTimestamp], bool] +``` + +Gets the custom function that is called before adding a timestamp to the buffer. + +If the function returns True, the buffer releases content and triggers relevant callbacks before adding the timestamp to +the buffer. If not set, defaults to None (disabled). + +**Returns**: + + Callable[[TimeseriesDataTimestamp], bool]: The custom function or None if disabled. + + + +#### custom\_trigger\_before\_enqueue + +```python +@custom_trigger_before_enqueue.setter +def custom_trigger_before_enqueue(value: Callable[[TimeseriesDataTimestamp], + bool]) +``` + +Sets the custom function that is called before adding a timestamp to the buffer. + +If the function returns True, the buffer releases content and triggers relevant callbacks before adding the timestamp +to the buffer. If not set, defaults to None (disabled). + +**Arguments**: + +- `value` - The custom function or None to disable. + + + +#### filter + +```python +@property +def filter() -> Callable[[TimeseriesDataTimestamp], bool] +``` + +Gets the custom function used to filter incoming data before adding it to the buffer. + +If the function returns True, the data is added to the buffer; otherwise, it is not. If not set, defaults to None +(disabled). + +**Returns**: + + Callable[[TimeseriesDataTimestamp], bool]: The custom filter function or None if disabled. + + + +#### filter + +```python +@filter.setter +def filter(value: Callable[[TimeseriesDataTimestamp], bool]) +``` + +Sets the custom function used to filter incoming data before adding it to the buffer. + +If the function returns True, the data is added to the buffer; otherwise, it is not. If not set, defaults to None +(disabled). + +**Arguments**: + +- `value` - The custom filter function or None to disable. + + + +#### custom\_trigger + +```python +@property +def custom_trigger() -> Callable[[TimeseriesData], bool] +``` + +Gets the custom function that is called after adding a new timestamp to the buffer. + +If the function returns True, the buffer releases content and triggers relevant callbacks. +If not set, defaults to None (disabled). + +**Returns**: + + Callable[[TimeseriesData], bool]: The custom trigger function or None if disabled. + + + +#### custom\_trigger + +```python +@custom_trigger.setter +def custom_trigger(value: Callable[[TimeseriesData], bool]) +``` + +Sets the custom function that is called after adding a new timestamp to the buffer. + +If the function returns True, the buffer releases content and triggers relevant callbacks. +If not set, defaults to None (disabled). + +**Arguments**: + +- `value` - The custom trigger function or None to disable. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Returns the .net pointer for the TimeseriesBufferConfiguration object. + +**Returns**: + +- `ctypes.c_void_p` - The .net pointer for the TimeseriesBufferConfiguration object. + + + +# quixstreams.models.timeseriesdata + + + +## TimeseriesData Objects + +```python +@nativedecorator +class TimeseriesData(object) +``` + +Describes timeseries data for multiple timestamps. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p = None) +``` + +Initializes a new instance of TimeseriesData. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net TimeseriesData. + + + +#### clone + +```python +def clone(parameter_filter: Optional[List[str]] = None) +``` + +Initializes a new instance of timeseries data with parameters matching the filter if one is provided. + +**Arguments**: + +- `parameter_filter` - The parameter filter. If one is provided, only parameters + present in the list will be cloned. + + +**Returns**: + +- `TimeseriesData` - A new instance of TimeseriesData with filtered parameters. + + + +#### add\_timestamp + +```python +def add_timestamp(time: Union[datetime, timedelta]) -> TimeseriesDataTimestamp +``` + +Start adding a new set of parameters and their tags at the specified time. + +**Arguments**: + +- `time` - The time to use for adding new event values. + | datetime: The datetime to use for adding new event values. Epoch will never be added to this + | timedelta: The time since the default epoch to add the event values at + + +**Returns**: + +- `TimeseriesDataTimestamp` - A new TimeseriesDataTimestamp instance. + + + +#### add\_timestamp\_milliseconds + +```python +def add_timestamp_milliseconds(milliseconds: int) -> TimeseriesDataTimestamp +``` + +Start adding a new set of parameters and their tags at the specified time. + +**Arguments**: + +- `milliseconds` - The time in milliseconds since the default epoch to add the event values at. + + +**Returns**: + +- `TimeseriesDataTimestamp` - A new TimeseriesDataTimestamp instance. + + + +#### add\_timestamp\_nanoseconds + +```python +def add_timestamp_nanoseconds(nanoseconds: int) -> TimeseriesDataTimestamp +``` + +Start adding a new set of parameters and their tags at the specified time. + +**Arguments**: + +- `nanoseconds` - The time in nanoseconds since the default epoch to add the event values at. + + +**Returns**: + +- `TimeseriesDataTimestamp` - A new TimeseriesDataTimestamp instance. + + + +#### timestamps + +```python +@property +def timestamps() -> List[TimeseriesDataTimestamp] +``` + +Gets the data as rows of TimeseriesDataTimestamp. + +**Returns**: + +- `List[TimeseriesDataTimestamp]` - A list of TimeseriesDataTimestamp instances. + + + +#### timestamps + +```python +@timestamps.setter +def timestamps(timestamp_list: List[TimeseriesDataTimestamp]) -> None +``` + +Sets the data as rows of TimeseriesDataTimestamp. + +**Arguments**: + +- `timestamp_list` - A list of TimeseriesDataTimestamp instances to set. + + + +#### to\_dataframe + +```python +def to_dataframe() -> pd.DataFrame +``` + +Converts TimeseriesData to pandas DataFrame. + +**Returns**: + +- `pd.DataFrame` - Converted pandas DataFrame. + + + +#### from\_panda\_dataframe + +```python +@staticmethod +def from_panda_dataframe(data_frame: pd.DataFrame, + epoch: int = 0) -> 'TimeseriesData' +``` + +Converts pandas DataFrame to TimeseriesData. + +**Arguments**: + +- `data_frame` - The pandas DataFrame to convert to TimeseriesData. +- `epoch` - The epoch to add to each time value when converting to TimeseriesData. Defaults to 0. + + +**Returns**: + +- `TimeseriesData` - Converted TimeseriesData instance. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the .net pointer of the current instance. + +**Returns**: + +- `ctypes.c_void_p` - The .net pointer of the current instance + + + +# quixstreams.models.timeseriesdataraw + + + +## TimeseriesDataRaw Objects + +```python +@nativedecorator +class TimeseriesDataRaw(object) +``` + +Describes timeseries data in a raw format for multiple timestamps. Class is intended for read only. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p = None) +``` + +Initializes a new instance of TimeseriesDataRaw. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net TimeseriesDataRaw. Defaults to None. + + + +#### to\_dataframe + +```python +def to_dataframe() -> pd.DataFrame +``` + +Converts TimeseriesDataRaw to pandas DataFrame. + +**Returns**: + +- `pd.DataFrame` - Converted pandas DataFrame. + + + +#### from\_dataframe + +```python +@staticmethod +def from_dataframe(data_frame: pd.DataFrame, + epoch: int = 0) -> 'TimeseriesDataRaw' +``` + +Converts from pandas DataFrame to TimeseriesDataRaw. + +**Arguments**: + +- `data_frame` - The pandas DataFrame to convert to TimeseriesData. +- `epoch` - The epoch to add to each time value when converting to TimeseriesData. Defaults to 0. + + +**Returns**: + +- `TimeseriesDataRaw` - Converted TimeseriesDataRaw. + + + +#### set\_values + +```python +def set_values(epoch: int, timestamps: List[int], + numeric_values: Dict[str, List[float]], + string_values: Dict[str, List[str]], + binary_values: Dict[str, + List[bytes]], tag_values: Dict[str, + List[str]]) +``` + +Sets the values of the timeseries data from the provided dictionaries. +Dictionary values are matched by index to the provided timestamps. + +**Arguments**: + +- `epoch` - The time from which all timestamps are measured from. +- `timestamps` - The timestamps of values in nanoseconds since epoch as an array. +- `numeric_values` - The numeric values where the dictionary key is the parameter name and the value is the array of values. +- `string_values` - The string values where the dictionary key is the parameter name and the value is the array of values. +- `binary_values` - The binary values where the dictionary key is the parameter name and the value is the array of values. +- `tag_values` - The tag values where the dictionary key is the parameter name and the value is the array of values. + + + +#### epoch + +```python +@property +def epoch() -> int +``` + +The Unix epoch from which all other timestamps in this model are measured, in nanoseconds. + +**Returns**: + +- `int` - The Unix epoch (01/01/1970) in nanoseconds. + + + +#### timestamps + +```python +@property +def timestamps() -> List[int] +``` + +The timestamps of values in nanoseconds since the epoch. +Timestamps are matched by index to numeric_values, string_values, binary_values, and tag_values. + +**Returns**: + +- `List[int]` - A list of timestamps in nanoseconds since the epoch. + + + +#### numeric\_values + +```python +@property +def numeric_values() -> Dict[str, List[Optional[float]]] +``` + +The numeric values for parameters. +The key is the parameter ID the values belong to. The value is the numerical values of the parameter. +Values are matched by index to timestamps. + +**Returns**: + + Dict[str, List[Optional[float]]]: A dictionary mapping parameter IDs to lists of numerical values. + + + +#### string\_values + +```python +@property +def string_values() -> Dict[str, List[str]] +``` + +The string values for parameters. +The key is the parameter ID the values belong to. The value is the string values of the parameter. +Values are matched by index to timestamps. + +**Returns**: + + Dict[str, List[str]]: A dictionary mapping parameter IDs to lists of string values + + + +#### binary\_values + +```python +@property +def binary_values() -> Dict[str, List[bytes]] +``` + +The binary values for parameters. +The key is the parameter ID the values belong to. +The value is the binary values of the parameter. Values are matched by index to timestamps. + +**Returns**: + + Dict[str, List[bytes]]: A dictionary mapping parameter IDs to lists of bytes values + + + +#### tag\_values + +```python +@property +def tag_values() -> Dict[str, List[str]] +``` + +The tag values for parameters. +The key is the parameter ID the values belong to. The value is the tag values of the parameter. +Values are matched by index to timestamps. + +**Returns**: + + Dict[str, List[str]]: A dictionary mapping parameter IDs to lists of string values + + + +#### convert\_to\_timeseriesdata + +```python +def convert_to_timeseriesdata() -> TimeseriesData +``` + +Converts TimeseriesDataRaw to TimeseriesData + + + +# quixstreams.models.timeseriesdatatimestamp + + + +## TimeseriesDataTimestamp Objects + +```python +@nativedecorator +class TimeseriesDataTimestamp() +``` + +Represents a single point in time with parameter values and tags attached to that time. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of TimeseriesDataTimestamp. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net TimeseriesDataTimestamp. + + + +#### parameters + +```python +@property +def parameters() -> Dict[str, ParameterValue] +``` + +Gets the parameter values for the timestamp as a dictionary. If a key is not found, returns an empty ParameterValue. + +**Returns**: + + Dict[str, ParameterValue]: A dictionary with parameter id as key and ParameterValue as value. + + + +#### tags + +```python +@property +def tags() -> Dict[str, str] +``` + +Gets the tags for the timestamp as a dictionary. + +**Returns**: + + Dict[str, str]: A dictionary with tag id as key and tag value as value. + + + +#### timestamp\_nanoseconds + +```python +@property +def timestamp_nanoseconds() -> int +``` + +Gets the timestamp in nanoseconds. + +**Returns**: + +- `int` - The timestamp in nanoseconds. + + + +#### timestamp\_milliseconds + +```python +@property +def timestamp_milliseconds() -> int +``` + +Gets the timestamp in milliseconds. + +**Returns**: + +- `int` - The timestamp in milliseconds. + + + +#### timestamp + +```python +@property +def timestamp() -> datetime +``` + +Gets the timestamp in datetime format. + +**Returns**: + +- `datetime` - The timestamp in datetime format. + + + +#### timestamp\_as\_time\_span + +```python +@property +def timestamp_as_time_span() -> timedelta +``` + +Gets the timestamp in timespan format. + +**Returns**: + +- `timedelta` - The timestamp in timespan format. + + + +#### add\_value + +```python +def add_value( + parameter_id: str, value: Union[numbers.Number, str, bytearray, bytes] +) -> 'TimeseriesDataTimestamp' +``` + +Adds a new value for the specified parameter. + +**Arguments**: + +- `parameter_id` - The parameter id to add the value for. +- `value` - The value to add. Can be a number, string, bytearray, or bytes. + + +**Returns**: + +- `TimeseriesDataTimestamp` - The updated TimeseriesDataTimestamp instance. + + + +#### remove\_value + +```python +def remove_value(parameter_id: str) -> 'TimeseriesDataTimestamp' +``` + +Removes the value for the specified parameter. + +**Arguments**: + +- `parameter_id` - The parameter id to remove the value for. + + +**Returns**: + +- `TimeseriesDataTimestamp` - The updated TimeseriesDataTimestamp instance. + + + +#### add\_tag + +```python +def add_tag(tag_id: str, tag_value: str) -> 'TimeseriesDataTimestamp' +``` + +Adds a tag to the timestamp. + +**Arguments**: + +- `tag_id` - The id of the tag to add. +- `tag_value` - The value of the tag to add. + + +**Returns**: + +- `TimeseriesDataTimestamp` - The updated TimeseriesDataTimestamp instance. + + + +#### remove\_tag + +```python +def remove_tag(tag_id: str) -> 'TimeseriesDataTimestamp' +``` + +Removes a tag from the timestamp. + +**Arguments**: + +- `tag_id` - The id of the tag to remove. + + +**Returns**: + +- `TimeseriesDataTimestamp` - The updated TimeseriesDataTimestamp instance. + + + +#### add\_tags + +```python +def add_tags(tags: Dict[str, str]) -> 'TimeseriesDataTimestamp' +``` + +Copies the tags from the specified dictionary. Conflicting tags will be overwritten. + +**Arguments**: + +- `tags` - The dictionary of tags to add, with tag id as key and tag value as value. + + +**Returns**: + +- `TimeseriesDataTimestamp` - The updated TimeseriesDataTimestamp instance. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the .net pointer of the TimeseriesDataTimestamp instance. + +**Returns**: + +- `ctypes.c_void_p` - The .net pointer of the TimeseriesDataTimestamp instance. + + + +# quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Array + + + +## Array Objects + +```python +class Array() +``` + + + +#### ReadBlittables + +```python +@staticmethod +def ReadBlittables(array_uptr: ctypes.c_void_p, + valuetype, + valuemapper=None) -> [] +``` + +Reads blittable values starting from the array pointer using the specified type and mapper then frees the pointer + +**Arguments**: + +- `array_uptr`: Unmanaged memory pointer to the first element of the array. +- `valuetype`: Type of the value +- `valuemapper`: Conversion function for the value + +**Returns**: + +The converted array to the given type using the mapper + + + +#### WriteBlittables + +```python +@staticmethod +def WriteBlittables(blittables: [any], + valuetype, + valuemapper=None) -> c_void_p +``` + +Writes a list of blittables (like int) into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### ReadArray + +```python +@staticmethod +def ReadArray(array_uptr: ctypes.c_void_p, + valuemapper: Callable[[c_void_p], Any]) -> [[any]] +``` + +Reads from unmanaged memory, returning list of any sets (any[][]) + + + +#### WriteArray + +```python +@staticmethod +def WriteArray(values: [[any]], valuemapper: Callable[[Any], + c_void_p]) -> c_void_p +``` + +Writes an array of any sets (any[][]) into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### ReadNullables + +```python +@staticmethod +def ReadNullables(array_uptr: ctypes.c_void_p, nullable_type) -> [Any] +``` + +Parameters +---------- + +array_ptr: c_void_p + Pointer to .Net nullable array. + +nullable_type: + nullable type created by InteropUtils.create_nullable + +Returns +------- +[]: + array of underlying type with possible None values + + + +#### ReadLongs + +```python +@staticmethod +def ReadLongs(array_uptr: ctypes.c_void_p) -> [int] +``` + +Reads from unmanaged memory, returning list of int64 + + + +#### ReadLongsArray + +```python +@staticmethod +def ReadLongsArray(array_uptr: ctypes.c_void_p) -> [[int]] +``` + +Reads from unmanaged memory, returning list of int64 lists + + + +#### WriteLongs + +```python +@staticmethod +def WriteLongs(longs: [int]) -> c_void_p +``` + +Writes list of int64 into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### WriteLongsArray + +```python +@staticmethod +def WriteLongsArray(longs_array: [[int]]) -> c_void_p +``` + +Writes list of int64 lists into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### ReadStrings + +```python +@staticmethod +def ReadStrings(array_uptr: ctypes.c_void_p) -> [str] +``` + +Reads from unmanaged memory, returning list of str + + + +#### ReadStringsArray + +```python +@staticmethod +def ReadStringsArray(array_uptr: ctypes.c_void_p) -> [[str]] +``` + +Reads from unmanaged memory, returning list of str lists + + + +#### WriteStrings + +```python +@staticmethod +def WriteStrings(strings: [str]) -> c_void_p +``` + +Writes list of str into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### WriteStringsArray + +```python +@staticmethod +def WriteStringsArray(strings_array: [[str]]) -> c_void_p +``` + +Writes list of str lists into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### ReadDoubles + +```python +@staticmethod +def ReadDoubles(array_uptr: ctypes.c_void_p) -> [float] +``` + +Reads from unmanaged memory, returning list of double (float) + + + +#### ReadDoublesArray + +```python +@staticmethod +def ReadDoublesArray(array_uptr: ctypes.c_void_p) -> [[float]] +``` + +Reads from unmanaged memory, returning list of double (float) lists + + + +#### WriteDoubles + +```python +@staticmethod +def WriteDoubles(doubles: [float]) -> c_void_p +``` + +Writes list of double (float) into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### WriteDoublesArray + +```python +@staticmethod +def WriteDoublesArray(doubles_array: [[float]]) -> c_void_p +``` + +Writes list of double (float) lists into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### ReadPointers + +```python +@staticmethod +def ReadPointers(pointers: [c_void_p]) -> c_void_p +``` + +Reads from unmanaged memory, returning list of pointers + + + +#### ReadPointersArray + +```python +@staticmethod +def ReadPointersArray(array_uptr: ctypes.c_void_p) -> [[c_void_p]] +``` + +Reads from unmanaged memory, returning list of pointer lists + + + +#### WritePointers + +```python +@staticmethod +def WritePointers(pointers: [c_void_p]) -> c_void_p +``` + +Writes list of pointer into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### WritePointersArray + +```python +@staticmethod +def WritePointersArray(pointers_array: [[c_void_p]]) -> c_void_p +``` + +Writes list of pointer lists into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### ReadBytes + +```python +@staticmethod +def ReadBytes(array_uptr: ctypes.c_void_p) -> bytes +``` + +Reads from unmanaged memory, returning bytes + + + +#### ReadBytesArray + +```python +@staticmethod +def ReadBytesArray(array_uptr: ctypes.c_void_p) -> [bytes] +``` + +Reads from unmanaged memory, returning list of bytes + + + +#### WriteBytes + +```python +@staticmethod +def WriteBytes(bytes_value: Union[bytes, bytearray]) -> c_void_p +``` + +Writes list of bytes into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### WriteBytesArray + +```python +@staticmethod +def WriteBytesArray( + bytes_array: Union[List[bytes], List[bytearray]]) -> c_void_p +``` + +Writes list of bytes into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### ReadNullableDoubles + +```python +@staticmethod +def ReadNullableDoubles(array_uptr: ctypes.c_void_p) -> [Optional[float]] +``` + +Reads from unmanaged memory, returning list of Optional[float] + + + +#### ReadNullableDoublesArray + +```python +@staticmethod +def ReadNullableDoublesArray( + array_uptr: ctypes.c_void_p) -> [[Optional[float]]] +``` + +Reads from unmanaged memory, returning list of Optional[float] lists + + + +#### WriteNullableDoubles + +```python +@staticmethod +def WriteNullableDoubles(nullable_doubles: [Optional[float]]) -> c_void_p +``` + +Writes list of Optional[float] into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +#### WriteNullableDoublesArray + +```python +@staticmethod +def WriteNullableDoublesArray( + nullable_doubles_array: [[Optional[float]]]) -> c_void_p +``` + +Writes list of int64 lists into unmanaged memory, returning a pointer to the array, where first 4 bytes is the length + + + +# quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Collection + + + +# quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Dictionary + + + +## Dictionary Objects + +```python +class Dictionary() +``` + + + +#### ReadAnyHPtrToUPtr + +```python +@staticmethod +def ReadAnyHPtrToUPtr(dictionary_hptr: c_void_p) -> c_void_p +``` + +Read any dictionary that implements IEnumerable>. Useful for dictionaries that do not implement + +IDictionary, such as ReadOnlyDictionary + +**Arguments**: + +- `dictionary_hptr`: Handler pointer to a dictionary + +**Returns**: + +Pointer to array with elements [c_void_p, c_void_p] where first is the key array, 2nd is the value array + + + +#### WriteBlittables + +```python +@staticmethod +def WriteBlittables(dictionary: Dict[any, any], key_converter, + value_converter) -> c_void_p +``` + +Writes dictionary into unmanaged memory, returning a pointer with structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### ReadBlittables + +```python +@staticmethod +def ReadBlittables(dict_uptr: c_void_p, key_converter, + value_converter) -> c_void_p +``` + +Read a pointer into a managed dictionary. The pointer must be to a structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### WriteStringPointers + +```python +@staticmethod +def WriteStringPointers(dictionary: Dict[str, c_void_p]) -> c_void_p +``` + +Writes dictionary of [str, c_void_p] into unmanaged memory, returning a pointer with structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### ReadStringPointers + +```python +@staticmethod +def ReadStringPointers(dictionary_uptr: c_void_p, + valuemapper=None) -> Dict[str, c_void_p] +``` + +Writes dictionary of [str, c_void_p] into unmanaged memory, returning a pointer with structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### WriteStringDoublesArray + +```python +@staticmethod +def WriteStringDoublesArray(dictionary: Dict[str, List[float]]) -> c_void_p +``` + +Writes dictionary of [str, [float]] into unmanaged memory, returning a pointer with structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### ReadStringDoublesArray + +```python +@staticmethod +def ReadStringDoublesArray(dictionary: Dict[str, List[int]]) -> c_void_p +``` + +Reads unmanaged memory at address, converting it to managed [str, float[]] dictionary + + + +#### WriteStringLongsArray + +```python +@staticmethod +def WriteStringLongsArray(dictionary: Dict[str, List[int]]) -> c_void_p +``` + +Writes dictionary of [str, [int64]] into unmanaged memory, returning a pointer with structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### ReadStringLongsArray + +```python +@staticmethod +def ReadStringLongsArray(dictionary: Dict[str, List[int]]) -> c_void_p +``` + +Reads unmanaged memory at address, converting it to managed [str, int64p[]] dictionary + + + +#### WriteStringStrings + +```python +@staticmethod +def WriteStringStrings(dictionary: Dict[str, str]) -> c_void_p +``` + +Writes dictionary of [str, str] into unmanaged memory, returning a pointer with structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### ReadStringStrings + +```python +@staticmethod +def ReadStringStrings(dictionary: Dict[str, str]) -> c_void_p +``` + +Reads unmanaged memory at address, converting it to managed [str, str] dictionary + + + +#### WriteStringStringsArray + +```python +@staticmethod +def WriteStringStringsArray(dictionary: Dict[str, List[str]]) -> c_void_p +``` + +Writes dictionary of [str, [str]] into unmanaged memory, returning a pointer with structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### ReadStringStringsArray + +```python +@staticmethod +def ReadStringStringsArray(dictionary: Dict[str, List[str]]) -> c_void_p +``` + +Reads unmanaged memory at address, converting it to managed [str, str[]] dictionary + + + +#### WriteStringBytesArray + +```python +@staticmethod +def WriteStringBytesArray(dictionary: Dict[str, List[bytes]]) -> c_void_p +``` + +Writes dictionary of [str, [bytes]] into unmanaged memory, returning a pointer with structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### ReadStringBytesArray + +```python +@staticmethod +def ReadStringBytesArray(dictionary: Dict[str, List[bytes]]) -> c_void_p +``` + +Reads unmanaged memory at address, converting it to managed [str, [bytes]] dictionary + + + +#### WriteStringNullableDoublesArray + +```python +@staticmethod +def WriteStringNullableDoublesArray( + dictionary: Dict[str, List[Optional[float]]]) -> c_void_p +``` + +Writes dictionary of [str, [Optional[float]]] into unmanaged memory, returning a pointer with structure [[keys],[values]], each array with a 4 byte length prefix + + + +#### ReadStringNullableDoublesArray + +```python +@staticmethod +def ReadStringNullableDoublesArray( + dictionary: Dict[str, List[Optional[Optional[float]]]]) -> c_void_p +``` + +Reads unmanaged memory at address, converting it to managed [str, float[]] dictionary + + + +# quixstreams.native.Python.InteropHelpers.ExternalTypes.System.Enumerable + + + +## Enumerable Objects + +```python +class Enumerable() +``` + + + +#### ReadAny + +```python +@staticmethod +def ReadAny(enumerable_hptr: c_void_p) -> c_void_p +``` + +Read any object that implements IEnumerable. Useful for cases when other enumerable methods don't fulfill the + +the role in a more efficient manner + +**Arguments**: + +- `enumerable_hptr`: Handler pointer to an object + +**Returns**: + +Handle pointer to an array of values which depend on the underlying value types + + + +# quixstreams.native.Python.InteropHelpers.ExternalTypes.System.List + + + +# quixstreams.native.Python.InteropHelpers.InteropUtils + + + +## InteropUtils Objects + +```python +class InteropUtils(object) +``` + + + +#### set\_exception\_callback + +```python +@staticmethod +def set_exception_callback(callback: Callable[[InteropException], None]) +``` + +Sets the exception handler for interop exceptions + +callback: Callable[[InteropException], None] + The callback which takes InteropException and returns nothing + + + +#### log\_debug + +```python +@staticmethod +def log_debug(message: str) +``` + +Logs debug message if debugging is enabled + +message: str + The message to log + + + +#### enable\_debug + +```python +@staticmethod +def enable_debug() +``` + +Enables Debugging logs + + + +#### disable\_debug + +```python +@staticmethod +def disable_debug() +``` + +Enables Debugging logs + + + +#### pin\_hptr\_target + +```python +@staticmethod +def pin_hptr_target(hptr: c_void_p) -> c_void_p +``` + +Creates a GC Handle with pinned type. +Use get_pin_address to acquire the pinned resources's address +Must be freed as soon as possible with free_hptr + +Parameters +---------- + +hptr: c_void_p + Pointer to .Net GC Handle + +Returns +------- +c_void_p: + .Net pointer to the value + + + +#### get\_pin\_address + +```python +@staticmethod +def get_pin_address(hptr: c_void_p) -> c_void_p +``` + +Retrieves the address of the pinned resource from the provided GC Handle ptr + +Parameters +---------- + +hptr: c_void_p + Pointer to .Net pinned GC Handle + +Returns +------- +c_void_p: + memory address of the underlying resource + + + +#### free\_hptr + +```python +@staticmethod +def free_hptr(hptr: c_void_p) -> None +``` + +Frees the provided GC Handle + +Parameters +---------- + +hptr: c_void_p + Pointer to .Net GC Handle + + + +#### free\_uptr + +```python +@staticmethod +def free_uptr(uptr: c_void_p) -> None +``` + +Frees the provided unmanaged pointer + +Parameters +---------- + +uptr: c_void_p + Unmanaged pointer + + + +#### allocate\_uptr + +```python +@staticmethod +def allocate_uptr(size: int) -> c_void_p +``` + +Allocated unmanaged memory pointer of the desired size + +Parameters +---------- + +size: c_void_p + The desired size of the memory + +Returns +------- +c_void_p: + Unmanaged memory pointer + + + +#### invoke\_and\_free + +```python +@staticmethod +def invoke_and_free(hptr: ctypes.c_void_p, func, *args, **kwargs) +``` + +Invokes a function where first positional argument is a c# GC Handle pointer (hptr), then disposes it + +Parameters +---------- + +hptr: ctypes.c_void_p + c# GC Handle pointer (hptr) + +func: + callable function where first arg is the hptr + +Returns +------- +Any: + the function result + + + +#### dict\_nullables + +TODO Should I lock on this? + + + +#### create\_nullable + +```python +@staticmethod +def create_nullable(underlying_ctype) +``` + +Create a nullable type that is equivalent for serialization purposes to a nullable c# type in places where it is +serialized as a struct. In this case byte prefix is added equivalent to minimum addressable memory size according +to cpu architecture. For example a nullable double on 64 bit would be 8 bytes for boolean and 8 bytes for double. + +Parameters +---------- + +underlying_ctype: + type defined by ctypes such as ctypes.c_double + + + +#### dict\_mem\_nullables + +TODO Should I lock on this? + + + +#### create\_mem\_nullable + +```python +@staticmethod +def create_mem_nullable(underlying_ctype) +``` + +Create a nullable type that is equivalent for serialization purposes to a nullable c# type in places where it is not +serialized as a struct, but rather as a continuous memory segment to pointed at by either a pointer or array. +In this case 1 byte prefix is added kept for the boolean flag rather than the min addressable memory size according +to cpu architecture. For example a nullable double on 64 bit would be 1 byte for boolean and 8 bytes for double. + +Parameters +---------- + +underlying_ctype: + type defined by ctypes such as ctypes.c_double + + + +# quixstreams.native.Python.MicrosoftExtensionsLoggingAbstractions.Microsoft.Extensions.Logging.LogLevel + + + +# quixstreams.native.Python.QuixStreamsState.StateValue + + + +## StateValue Objects + +```python +class StateValue(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StateValue + +Returns +---------- + +StateValue: + Instance wrapping the .net type StateValue + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StateValue + +Returns +---------- + +StateValue: + Instance wrapping the .net type StateValue + + + +#### Constructor + +```python +@staticmethod +def Constructor(value: bool) -> c_void_p +``` + +Parameters +---------- + +value: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StateValue + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2(value: int) -> c_void_p +``` + +Parameters +---------- + +value: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StateValue + + + +#### Constructor3 + +```python +@staticmethod +def Constructor3(value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StateValue + + + +#### Constructor4 + +```python +@staticmethod +def Constructor4(value: c_void_p, type: StateType) -> c_void_p +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +type: StateType + Underlying .Net type is StateValue.StateType + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StateValue + + + +#### Constructor5 + +```python +@staticmethod +def Constructor5(value: str) -> c_void_p +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StateValue + + + +#### Constructor6 + +```python +@staticmethod +def Constructor6(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StateValue + + + +#### get\_Type + +```python +def get_Type() -> StateType +``` + +Parameters +---------- + +Returns +------- + +StateType: + Underlying .Net type is StateValue.StateType + + + +#### get\_DoubleValue + +```python +def get_DoubleValue() -> float +``` + +Parameters +---------- + +Returns +------- + +float: + Underlying .Net type is double + + + +#### get\_LongValue + +```python +def get_LongValue() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_StringValue + +```python +def get_StringValue() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_BoolValue + +```python +def get_BoolValue() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_BinaryValue + +```python +def get_BinaryValue() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type byte[] + + + +#### Equals + +```python +def Equals(other: c_void_p) -> bool +``` + +Parameters +---------- + +other: c_void_p + GC Handle Pointer to .Net type StateValue + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +# quixstreams.native.Python.QuixStreamsState.StateValue\_StateType + + + +# quixstreams.native.Python.QuixStreamsState.Storage.FileStorage.LocalFileStorage.LocalFileStorage + + + +## LocalFileStorage Objects + +```python +class LocalFileStorage(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type LocalFileStorage + +Returns +---------- + +LocalFileStorage: + Instance wrapping the .net type LocalFileStorage + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type LocalFileStorage + +Returns +---------- + +LocalFileStorage: + Instance wrapping the .net type LocalFileStorage + + + +#### Constructor + +```python +@staticmethod +def Constructor(storageDirectory: str = None, + autoCreateDir: bool = True) -> c_void_p +``` + +Parameters +---------- + +storageDirectory: str + (Optional) Underlying .Net type is string. Defaults to None + +autoCreateDir: bool + (Optional) Underlying .Net type is Boolean. Defaults to True + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type LocalFileStorage + + + +# quixstreams.native.Python.QuixStreamsState.Storage.IStateStorage + + + +## IStateStorage Objects + +```python +class IStateStorage(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IStateStorage + +Returns +---------- + +IStateStorage: + Instance wrapping the .net type IStateStorage + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IStateStorage + +Returns +---------- + +IStateStorage: + Instance wrapping the .net type IStateStorage + + + +# quixstreams.native.Python.QuixStreamsState.Storage.StorageExtensions + + + +## StorageExtensions Objects + +```python +class StorageExtensions(object) +``` + + + +#### Set + +```python +@staticmethod +def Set(stateStorage: c_void_p, key: str, value: int) -> None +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +value: int + Underlying .Net type is long + +Returns +------- +None: + Underlying .Net type is void + + + +#### Set2 + +```python +@staticmethod +def Set2(stateStorage: c_void_p, key: str, value: float) -> None +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +value: float + Underlying .Net type is double + +Returns +------- +None: + Underlying .Net type is void + + + +#### Set3 + +```python +@staticmethod +def Set3(stateStorage: c_void_p, key: str, value: str) -> None +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### Set4 + +```python +@staticmethod +def Set4(stateStorage: c_void_p, key: str, value: c_void_p) -> None +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- +None: + Underlying .Net type is void + + + +#### Set5 + +```python +@staticmethod +def Set5(stateStorage: c_void_p, key: str, value: bool) -> None +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +value: bool + Underlying .Net type is Boolean + +Returns +------- +None: + Underlying .Net type is void + + + +#### Set6 + +```python +@staticmethod +def Set6(stateStorage: c_void_p, key: str, value: c_void_p) -> None +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +value: c_void_p + GC Handle Pointer to .Net type StateValue + +Returns +------- +None: + Underlying .Net type is void + + + +#### Get + +```python +@staticmethod +def Get(stateStorage: c_void_p, key: str) -> c_void_p +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StateValue + + + +#### GetDouble + +```python +@staticmethod +def GetDouble(stateStorage: c_void_p, key: str) -> float +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +Returns +------- + +float: + Underlying .Net type is double + + + +#### GetString + +```python +@staticmethod +def GetString(stateStorage: c_void_p, key: str) -> str +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +Returns +------- + +str: + Underlying .Net type is string + + + +#### GetBool + +```python +@staticmethod +def GetBool(stateStorage: c_void_p, key: str) -> bool +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetLong + +```python +@staticmethod +def GetLong(stateStorage: c_void_p, key: str) -> int +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +Returns +------- + +int: + Underlying .Net type is long + + + +#### GetBinary + +```python +@staticmethod +def GetBinary(stateStorage: c_void_p, key: str) -> c_void_p +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type byte[] + + + +#### Remove + +```python +@staticmethod +def Remove(stateStorage: c_void_p, key: str) -> None +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### ContainsKey + +```python +@staticmethod +def ContainsKey(stateStorage: c_void_p, key: str) -> bool +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +key: str + Underlying .Net type is string + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetAllKeys + +```python +@staticmethod +def GetAllKeys(stateStorage: c_void_p) -> c_void_p +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type string[] + + + +#### Clear + +```python +@staticmethod +def Clear(stateStorage: c_void_p) -> None +``` + +Parameters +---------- + +stateStorage: c_void_p + GC Handle Pointer to .Net type IStateStorage + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.App + + + +## App Objects + +```python +class App(object) +``` + + + +#### Run + +```python +@staticmethod +def Run(cancellationToken: c_void_p = None, + beforeShutdown: Callable[[], None] = None) -> None +``` + +Parameters +---------- + +cancellationToken: c_void_p + (Optional) GC Handle Pointer to .Net type CancellationToken. Defaults to None + +beforeShutdown: Callable[[], None] + (Optional) Underlying .Net type is Action. Defaults to None + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Configuration.SaslMechanism + + + +# quixstreams.native.Python.QuixStreamsStreaming.Configuration.SecurityOptions + + + +## SecurityOptions Objects + +```python +class SecurityOptions(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type SecurityOptions + +Returns +---------- + +SecurityOptions: + Instance wrapping the .net type SecurityOptions + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type SecurityOptions + +Returns +---------- + +SecurityOptions: + Instance wrapping the .net type SecurityOptions + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type SecurityOptions + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2( + sslCertificates: str, + username: str, + password: str, + saslMechanism: SaslMechanism = SaslMechanism.ScramSha256) -> c_void_p +``` + +Parameters +---------- + +sslCertificates: str + Underlying .Net type is string + +username: str + Underlying .Net type is string + +password: str + Underlying .Net type is string + +saslMechanism: SaslMechanism + (Optional) Underlying .Net type is SaslMechanism. Defaults to ScramSha256 + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type SecurityOptions + + + +#### get\_SaslMechanism + +```python +def get_SaslMechanism() -> Optional[SaslMechanism] +``` + +Parameters +---------- + +Returns +------- + +Optional[SaslMechanism]: + Underlying .Net type is SaslMechanism? + + + +#### set\_SaslMechanism + +```python +def set_SaslMechanism(value: Optional[SaslMechanism]) -> None +``` + +Parameters +---------- + +value: Optional[SaslMechanism] + Underlying .Net type is SaslMechanism? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Username + +```python +def get_Username() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Username + +```python +def set_Username(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Password + +```python +def get_Password() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Password + +```python +def set_Password(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_SslCertificates + +```python +def get_SslCertificates() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_SslCertificates + +```python +def set_SslCertificates(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_UseSsl + +```python +def get_UseSsl() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### set\_UseSsl + +```python +def set_UseSsl(value: bool) -> None +``` + +Parameters +---------- + +value: bool + Underlying .Net type is Boolean + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_UseSasl + +```python +def get_UseSasl() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### set\_UseSasl + +```python +def set_UseSasl(value: bool) -> None +``` + +Parameters +---------- + +value: bool + Underlying .Net type is Boolean + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.IStreamConsumer + + + +## IStreamConsumer Objects + +```python +class IStreamConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IStreamConsumer + +Returns +---------- + +IStreamConsumer: + Instance wrapping the .net type IStreamConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IStreamConsumer + +Returns +---------- + +IStreamConsumer: + Instance wrapping the .net type IStreamConsumer + + + +#### get\_StreamId + +```python +def get_StreamId() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Properties + +```python +def get_Properties() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamPropertiesConsumer + + + +#### get\_Timeseries + +```python +def get_Timeseries() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamTimeseriesConsumer + + + +#### get\_Events + +```python +def get_Events() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamEventsConsumer + + + +#### add\_OnPackageReceived + +```python +def add_OnPackageReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnPackageReceived + +```python +def remove_OnPackageReceived( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnStreamClosed + +```python +def add_OnStreamClosed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnStreamClosed + +```python +def remove_OnStreamClosed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.IStreamProducer + + + +## IStreamProducer Objects + +```python +class IStreamProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IStreamProducer + +Returns +---------- + +IStreamProducer: + Instance wrapping the .net type IStreamProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IStreamProducer + +Returns +---------- + +IStreamProducer: + Instance wrapping the .net type IStreamProducer + + + +#### get\_StreamId + +```python +def get_StreamId() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Epoch + +```python +def get_Epoch() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### set\_Epoch + +```python +def set_Epoch(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Properties + +```python +def get_Properties() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamPropertiesProducer + + + +#### get\_Timeseries + +```python +def get_Timeseries() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamTimeseriesProducer + + + +#### get\_Events + +```python +def get_Events() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamEventsProducer + + + +#### Flush + +```python +def Flush() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Close + +```python +def Close(streamState: StreamEndType = StreamEndType.Closed) -> None +``` + +Parameters +---------- + +streamState: StreamEndType + (Optional) Underlying .Net type is StreamEndType. Defaults to Closed + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnWriteException + +```python +def add_OnWriteException(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnWriteException + +```python +def remove_OnWriteException( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.ITopicConsumer + + + +## ITopicConsumer Objects + +```python +class ITopicConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ITopicConsumer + +Returns +---------- + +ITopicConsumer: + Instance wrapping the .net type ITopicConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ITopicConsumer + +Returns +---------- + +ITopicConsumer: + Instance wrapping the .net type ITopicConsumer + + + +#### Subscribe + +```python +def Subscribe() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnStreamReceived + +```python +def add_OnStreamReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnStreamReceived + +```python +def remove_OnStreamReceived( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnRevoking + +```python +def add_OnRevoking(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnRevoking + +```python +def remove_OnRevoking(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnStreamsRevoked + +```python +def add_OnStreamsRevoked(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnStreamsRevoked + +```python +def remove_OnStreamsRevoked( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnCommitted + +```python +def add_OnCommitted(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnCommitted + +```python +def remove_OnCommitted(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnCommitting + +```python +def add_OnCommitting(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnCommitting + +```python +def remove_OnCommitting(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### Commit + +```python +def Commit() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnDisposed + +```python +def add_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDisposed + +```python +def remove_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.ITopicProducer + + + +## ITopicProducer Objects + +```python +class ITopicProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ITopicProducer + +Returns +---------- + +ITopicProducer: + Instance wrapping the .net type ITopicProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ITopicProducer + +Returns +---------- + +ITopicProducer: + Instance wrapping the .net type ITopicProducer + + + +#### CreateStream + +```python +def CreateStream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamProducer + + + +#### CreateStream2 + +```python +def CreateStream2(streamId: str) -> c_void_p +``` + +Parameters +---------- + +streamId: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamProducer + + + +#### GetStream + +```python +def GetStream(streamId: str) -> c_void_p +``` + +Parameters +---------- + +streamId: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamProducer + + + +#### GetOrCreateStream + +```python +def GetOrCreateStream( + streamId: str, + onStreamCreated: Callable[[c_void_p], None] = None) -> c_void_p +``` + +Parameters +---------- + +streamId: str + Underlying .Net type is string + +onStreamCreated: Callable[[c_void_p], None] + (Optional) Underlying .Net type is Action. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamProducer + + + +#### add\_OnDisposed + +```python +def add_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDisposed + +```python +def remove_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClient + + + +## KafkaStreamingClient Objects + +```python +class KafkaStreamingClient(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type KafkaStreamingClient + +Returns +---------- + +KafkaStreamingClient: + Instance wrapping the .net type KafkaStreamingClient + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type KafkaStreamingClient + +Returns +---------- + +KafkaStreamingClient: + Instance wrapping the .net type KafkaStreamingClient + + + +#### Constructor + +```python +@staticmethod +def Constructor(brokerAddress: str, + securityOptions: c_void_p = None, + properties: c_void_p = None, + debug: bool = False) -> c_void_p +``` + +Parameters +---------- + +brokerAddress: str + Underlying .Net type is string + +securityOptions: c_void_p + (Optional) GC Handle Pointer to .Net type SecurityOptions. Defaults to None + +properties: c_void_p + (Optional) GC Handle Pointer to .Net type IDictionary. Defaults to None + +debug: bool + (Optional) Underlying .Net type is Boolean. Defaults to False + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type KafkaStreamingClient + + + +#### GetTopicConsumer + +```python +def GetTopicConsumer( + topic: str, + consumerGroup: str = None, + options: c_void_p = None, + autoOffset: AutoOffsetReset = AutoOffsetReset.Latest) -> c_void_p +``` + +Parameters +---------- + +topic: str + Underlying .Net type is string + +consumerGroup: str + (Optional) Underlying .Net type is string. Defaults to None + +options: c_void_p + (Optional) GC Handle Pointer to .Net type CommitOptions. Defaults to None + +autoOffset: AutoOffsetReset + (Optional) Underlying .Net type is AutoOffsetReset. Defaults to Latest + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +#### GetRawTopicConsumer + +```python +def GetRawTopicConsumer( + topic: str, + consumerGroup: str = None, + autoOffset: Optional[AutoOffsetReset] = None) -> c_void_p +``` + +Parameters +---------- + +topic: str + Underlying .Net type is string + +consumerGroup: str + (Optional) Underlying .Net type is string. Defaults to None + +autoOffset: Optional[AutoOffsetReset] + (Optional) Underlying .Net type is AutoOffsetReset?. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IRawTopicConsumer + + + +#### GetRawTopicProducer + +```python +def GetRawTopicProducer(topic: str) -> c_void_p +``` + +Parameters +---------- + +topic: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IRawTopicProducer + + + +#### GetTopicProducer + +```python +def GetTopicProducer(topic: str) -> c_void_p +``` + +Parameters +---------- + +topic: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicProducer + + + +# quixstreams.native.Python.QuixStreamsStreaming.KafkaStreamingClientExtensions + + + +## KafkaStreamingClientExtensions Objects + +```python +class KafkaStreamingClientExtensions(object) +``` + + + +#### GetTopicConsumer + +```python +@staticmethod +def GetTopicConsumer( + client: c_void_p, + topic: str, + consumerGroup: str = None, + commitMode: CommitMode = CommitMode.Automatic, + autoOffset: AutoOffsetReset = AutoOffsetReset.Latest) -> c_void_p +``` + +Parameters +---------- + +client: c_void_p + GC Handle Pointer to .Net type KafkaStreamingClient + +topic: str + Underlying .Net type is string + +consumerGroup: str + (Optional) Underlying .Net type is string. Defaults to None + +commitMode: CommitMode + (Optional) Underlying .Net type is CommitMode. Defaults to Automatic + +autoOffset: AutoOffsetReset + (Optional) Underlying .Net type is AutoOffsetReset. Defaults to Latest + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.CommitMode + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.EventData + + + +## EventData Objects + +```python +class EventData(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventData + +Returns +---------- + +EventData: + Instance wrapping the .net type EventData + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventData + +Returns +---------- + +EventData: + Instance wrapping the .net type EventData + + + +#### Constructor + +```python +@staticmethod +def Constructor(eventId: str, timestampNanoseconds: int, + eventValue: str) -> c_void_p +``` + +Parameters +---------- + +eventId: str + Underlying .Net type is string + +timestampNanoseconds: int + Underlying .Net type is long + +eventValue: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventData + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2(eventId: str, timestamp: c_void_p, + eventValue: str) -> c_void_p +``` + +Parameters +---------- + +eventId: str + Underlying .Net type is string + +timestamp: c_void_p + GC Handle Pointer to .Net type DateTime + +eventValue: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventData + + + +#### Constructor3 + +```python +@staticmethod +def Constructor3(eventId: str, timestamp: c_void_p, + eventValue: str) -> c_void_p +``` + +Parameters +---------- + +eventId: str + Underlying .Net type is string + +timestamp: c_void_p + GC Handle Pointer to .Net type TimeSpan + +eventValue: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventData + + + +#### Clone + +```python +def Clone() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventData + + + +#### get\_Id + +```python +def get_Id() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Id + +```python +def set_Id(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Value + +```python +def get_Value() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Value + +```python +def set_Value(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Tags + +```python +def get_Tags() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IDictionary + + + +#### AddTag + +```python +def AddTag(tagId: str, tagValue: str) -> c_void_p +``` + +Parameters +---------- + +tagId: str + Underlying .Net type is string + +tagValue: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventData + + + +#### AddTags + +```python +def AddTags(tags: c_void_p) -> c_void_p +``` + +Parameters +---------- + +tags: c_void_p + GC Handle Pointer to .Net type IEnumerable> + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventData + + + +#### RemoveTag + +```python +def RemoveTag(tagId: str) -> c_void_p +``` + +Parameters +---------- + +tagId: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventData + + + +#### get\_TimestampNanoseconds + +```python +def get_TimestampNanoseconds() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_TimestampMilliseconds + +```python +def get_TimestampMilliseconds() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_Timestamp + +```python +def get_Timestamp() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### get\_TimestampAsTimeSpan + +```python +def get_TimestampAsTimeSpan() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.EventDefinition + + + +## EventDefinition Objects + +```python +class EventDefinition(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventDefinition + +Returns +---------- + +EventDefinition: + Instance wrapping the .net type EventDefinition + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventDefinition + +Returns +---------- + +EventDefinition: + Instance wrapping the .net type EventDefinition + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDefinition + + + +#### get\_Id + +```python +def get_Id() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Name + +```python +def get_Name() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Description + +```python +def get_Description() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Location + +```python +def get_Location() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_CustomProperties + +```python +def get_CustomProperties() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Level + +```python +def get_Level() -> EventLevel +``` + +Parameters +---------- + +Returns +------- + +EventLevel: + Underlying .Net type is EventLevel + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterDefinition + + + +## ParameterDefinition Objects + +```python +class ParameterDefinition(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ParameterDefinition + +Returns +---------- + +ParameterDefinition: + Instance wrapping the .net type ParameterDefinition + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ParameterDefinition + +Returns +---------- + +ParameterDefinition: + Instance wrapping the .net type ParameterDefinition + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinition + + + +#### get\_Id + +```python +def get_Id() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Name + +```python +def get_Name() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Description + +```python +def get_Description() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Location + +```python +def get_Location() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_MinimumValue + +```python +def get_MinimumValue() -> Optional[float] +``` + +Parameters +---------- + +Returns +------- + +Optional[float]: + Underlying .Net type is double? + + + +#### get\_MaximumValue + +```python +def get_MaximumValue() -> Optional[float] +``` + +Parameters +---------- + +Returns +------- + +Optional[float]: + Underlying .Net type is double? + + + +#### get\_Unit + +```python +def get_Unit() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Format + +```python +def get_Format() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_CustomProperties + +```python +def get_CustomProperties() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValue + + + +## ParameterValue Objects + +```python +class ParameterValue(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ParameterValue + +Returns +---------- + +ParameterValue: + Instance wrapping the .net type ParameterValue + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ParameterValue + +Returns +---------- + +ParameterValue: + Instance wrapping the .net type ParameterValue + + + +#### get\_ParameterId + +```python +def get_ParameterId() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_NumericValue + +```python +def get_NumericValue() -> Optional[float] +``` + +Parameters +---------- + +Returns +------- + +Optional[float]: + Underlying .Net type is double? + + + +#### set\_NumericValue + +```python +def set_NumericValue(value: Optional[float]) -> None +``` + +Parameters +---------- + +value: Optional[float] + Underlying .Net type is double? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_StringValue + +```python +def get_StringValue() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_StringValue + +```python +def set_StringValue(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_BinaryValue + +```python +def get_BinaryValue() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type byte[] + + + +#### set\_BinaryValue + +```python +def set_BinaryValue(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Value + +```python +def get_Value() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### op\_Equality + +```python +@staticmethod +def op_Equality(lhs: c_void_p, rhs: c_void_p) -> bool +``` + +Parameters +---------- + +lhs: c_void_p + GC Handle Pointer to .Net type ParameterValue + +rhs: c_void_p + GC Handle Pointer to .Net type ParameterValue + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### op\_Inequality + +```python +@staticmethod +def op_Inequality(lhs: c_void_p, rhs: c_void_p) -> bool +``` + +Parameters +---------- + +lhs: c_void_p + GC Handle Pointer to .Net type ParameterValue + +rhs: c_void_p + GC Handle Pointer to .Net type ParameterValue + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals + +```python +def Equals(obj: c_void_p) -> bool +``` + +Parameters +---------- + +obj: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Type + +```python +def get_Type() -> ParameterValueType +``` + +Parameters +---------- + +Returns +------- + +ParameterValueType: + Underlying .Net type is ParameterValueType + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.ParameterValueType + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDataReadEventArgs + + + +## EventDataReadEventArgs Objects + +```python +class EventDataReadEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type EventDataReadEventArgs + +Returns +---------- + +EventDataReadEventArgs: +Instance wrapping the .net type EventDataReadEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type EventDataReadEventArgs + +Returns +---------- + +EventDataReadEventArgs: +Instance wrapping the .net type EventDataReadEventArgs + + + +#### Constructor + +```python +@staticmethod +def Constructor(topicConsumer: c_void_p, consumer: c_void_p, + data: c_void_p) -> c_void_p +``` + +Parameters +---------- + +topicConsumer: c_void_p + GC Handle Pointer to .Net type ITopicConsumer + +consumer: c_void_p + GC Handle Pointer to .Net type IStreamConsumer + +data: c_void_p + GC Handle Pointer to .Net type EventData + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDataReadEventArgs + + + +#### get\_TopicConsumer + +```python +def get_TopicConsumer() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +#### get\_Stream + +```python +def get_Stream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamConsumer + + + +#### get\_Data + +```python +def get_Data() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventData + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.EventDefinitionsChangedEventArgs + + + +## EventDefinitionsChangedEventArgs Objects + +```python +class EventDefinitionsChangedEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type EventDefinitionsChangedEventArgs + +Returns +---------- + +EventDefinitionsChangedEventArgs: +Instance wrapping the .net type EventDefinitionsChangedEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type EventDefinitionsChangedEventArgs + +Returns +---------- + +EventDefinitionsChangedEventArgs: +Instance wrapping the .net type EventDefinitionsChangedEventArgs + + + +#### Constructor + +```python +@staticmethod +def Constructor(topicConsumer: c_void_p, consumer: c_void_p) -> c_void_p +``` + +Parameters +---------- + +topicConsumer: c_void_p + GC Handle Pointer to .Net type ITopicConsumer + +consumer: c_void_p + GC Handle Pointer to .Net type IStreamConsumer + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDefinitionsChangedEventArgs + + + +#### get\_TopicConsumer + +```python +def get_TopicConsumer() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +#### get\_Stream + +```python +def get_Stream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamConsumer + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.ParameterDefinitionsChangedEventArgs + + + +## ParameterDefinitionsChangedEventArgs Objects + +```python +class ParameterDefinitionsChangedEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type ParameterDefinitionsChangedEventArgs + +Returns +---------- + +ParameterDefinitionsChangedEventArgs: +Instance wrapping the .net type ParameterDefinitionsChangedEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type ParameterDefinitionsChangedEventArgs + +Returns +---------- + +ParameterDefinitionsChangedEventArgs: +Instance wrapping the .net type ParameterDefinitionsChangedEventArgs + + + +#### Constructor + +```python +@staticmethod +def Constructor(topicConsumer: c_void_p, consumer: c_void_p) -> c_void_p +``` + +Parameters +---------- + +topicConsumer: c_void_p + GC Handle Pointer to .Net type ITopicConsumer + +consumer: c_void_p + GC Handle Pointer to .Net type IStreamConsumer + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinitionsChangedEventArgs + + + +#### get\_TopicConsumer + +```python +def get_TopicConsumer() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +#### get\_Stream + +```python +def get_Stream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamConsumer + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamEventsConsumer + + + +## StreamEventsConsumer Objects + +```python +class StreamEventsConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamEventsConsumer + +Returns +---------- + +StreamEventsConsumer: + Instance wrapping the .net type StreamEventsConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamEventsConsumer + +Returns +---------- + +StreamEventsConsumer: + Instance wrapping the .net type StreamEventsConsumer + + + +#### add\_OnDataReceived + +```python +def add_OnDataReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDataReceived + +```python +def remove_OnDataReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnDefinitionsChanged + +```python +def add_OnDefinitionsChanged( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDefinitionsChanged + +```python +def remove_OnDefinitionsChanged( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Definitions + +```python +def get_Definitions() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IList + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesChangedEventArgs + + + +## StreamPropertiesChangedEventArgs Objects + +```python +class StreamPropertiesChangedEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type StreamPropertiesChangedEventArgs + +Returns +---------- + +StreamPropertiesChangedEventArgs: +Instance wrapping the .net type StreamPropertiesChangedEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type StreamPropertiesChangedEventArgs + +Returns +---------- + +StreamPropertiesChangedEventArgs: +Instance wrapping the .net type StreamPropertiesChangedEventArgs + + + +#### Constructor + +```python +@staticmethod +def Constructor(topicConsumer: c_void_p, consumer: c_void_p) -> c_void_p +``` + +Parameters +---------- + +topicConsumer: c_void_p + GC Handle Pointer to .Net type ITopicConsumer + +consumer: c_void_p + GC Handle Pointer to .Net type IStreamConsumer + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamPropertiesChangedEventArgs + + + +#### get\_TopicConsumer + +```python +def get_TopicConsumer() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +#### get\_Stream + +```python +def get_Stream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamConsumer + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamPropertiesConsumer + + + +## StreamPropertiesConsumer Objects + +```python +class StreamPropertiesConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamPropertiesConsumer + +Returns +---------- + +StreamPropertiesConsumer: + Instance wrapping the .net type StreamPropertiesConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamPropertiesConsumer + +Returns +---------- + +StreamPropertiesConsumer: + Instance wrapping the .net type StreamPropertiesConsumer + + + +#### add\_OnChanged + +```python +def add_OnChanged(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnChanged + +```python +def remove_OnChanged(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Name + +```python +def get_Name() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Location + +```python +def get_Location() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_TimeOfRecording + +```python +def get_TimeOfRecording() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime? + + + +#### get\_Metadata + +```python +def get_Metadata() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Dictionary + + + +#### get\_Parents + +```python +def get_Parents() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type List + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.StreamTimeseriesConsumer + + + +## StreamTimeseriesConsumer Objects + +```python +class StreamTimeseriesConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamTimeseriesConsumer + +Returns +---------- + +StreamTimeseriesConsumer: + Instance wrapping the .net type StreamTimeseriesConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamTimeseriesConsumer + +Returns +---------- + +StreamTimeseriesConsumer: + Instance wrapping the .net type StreamTimeseriesConsumer + + + +#### CreateBuffer + +```python +def CreateBuffer(parametersFilter: c_void_p, + bufferConfiguration: c_void_p = None) -> c_void_p +``` + +Parameters +---------- + +parametersFilter: c_void_p + GC Handle Pointer to .Net type string[] + +bufferConfiguration: c_void_p + (Optional) GC Handle Pointer to .Net type TimeseriesBufferConfiguration. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesBufferConsumer + + + +#### CreateBuffer2 + +```python +def CreateBuffer2(parametersFilter: c_void_p) -> c_void_p +``` + +Parameters +---------- + +parametersFilter: c_void_p + GC Handle Pointer to .Net type string[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesBufferConsumer + + + +#### add\_OnDefinitionsChanged + +```python +def add_OnDefinitionsChanged( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDefinitionsChanged + +```python +def remove_OnDefinitionsChanged( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnDataReceived + +```python +def add_OnDataReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDataReceived + +```python +def remove_OnDataReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnRawReceived + +```python +def add_OnRawReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnRawReceived + +```python +def remove_OnRawReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Definitions + +```python +def get_Definitions() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type List + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesBufferConsumer + + + +## TimeseriesBufferConsumer Objects + +```python +class TimeseriesBufferConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesBufferConsumer + +Returns +---------- + +TimeseriesBufferConsumer: + Instance wrapping the .net type TimeseriesBufferConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesBufferConsumer + +Returns +---------- + +TimeseriesBufferConsumer: + Instance wrapping the .net type TimeseriesBufferConsumer + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataRawReadEventArgs + + + +## TimeseriesDataRawReadEventArgs Objects + +```python +class TimeseriesDataRawReadEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type TimeseriesDataRawReadEventArgs + +Returns +---------- + +TimeseriesDataRawReadEventArgs: +Instance wrapping the .net type TimeseriesDataRawReadEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type TimeseriesDataRawReadEventArgs + +Returns +---------- + +TimeseriesDataRawReadEventArgs: +Instance wrapping the .net type TimeseriesDataRawReadEventArgs + + + +#### Constructor + +```python +@staticmethod +def Constructor(topic: c_void_p, stream: c_void_p, data: c_void_p) -> c_void_p +``` + +Parameters +---------- + +topic: c_void_p + GC Handle Pointer to .Net type Object + +stream: c_void_p + GC Handle Pointer to .Net type Object + +data: c_void_p + GC Handle Pointer to .Net type TimeseriesDataRaw + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataRawReadEventArgs + + + +#### get\_Topic + +```python +def get_Topic() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### get\_Stream + +```python +def get_Stream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### get\_Data + +```python +def get_Data() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataRaw + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamConsumer.TimeseriesDataReadEventArgs + + + +## TimeseriesDataReadEventArgs Objects + +```python +class TimeseriesDataReadEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type TimeseriesDataReadEventArgs + +Returns +---------- + +TimeseriesDataReadEventArgs: +Instance wrapping the .net type TimeseriesDataReadEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type TimeseriesDataReadEventArgs + +Returns +---------- + +TimeseriesDataReadEventArgs: +Instance wrapping the .net type TimeseriesDataReadEventArgs + + + +#### Constructor + +```python +@staticmethod +def Constructor(topic: c_void_p, stream: c_void_p, data: c_void_p) -> c_void_p +``` + +Parameters +---------- + +topic: c_void_p + GC Handle Pointer to .Net type Object + +stream: c_void_p + GC Handle Pointer to .Net type Object + +data: c_void_p + GC Handle Pointer to .Net type TimeseriesData + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataReadEventArgs + + + +#### get\_Topic + +```python +def get_Topic() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### get\_Stream + +```python +def get_Stream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### get\_Data + +```python +def get_Data() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesData + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDataBuilder + + + +## EventDataBuilder Objects + +```python +class EventDataBuilder(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventDataBuilder + +Returns +---------- + +EventDataBuilder: + Instance wrapping the .net type EventDataBuilder + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventDataBuilder + +Returns +---------- + +EventDataBuilder: + Instance wrapping the .net type EventDataBuilder + + + +#### Constructor + +```python +@staticmethod +def Constructor(streamEventsProducer: c_void_p, + timestampNanoseconds: int) -> c_void_p +``` + +Parameters +---------- + +streamEventsProducer: c_void_p + GC Handle Pointer to .Net type StreamEventsProducer + +timestampNanoseconds: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDataBuilder + + + +#### AddValue + +```python +def AddValue(eventId: str, value: str) -> c_void_p +``` + +Parameters +---------- + +eventId: str + Underlying .Net type is string + +value: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDataBuilder + + + +#### AddTag + +```python +def AddTag(tagId: str, value: str) -> c_void_p +``` + +Parameters +---------- + +tagId: str + Underlying .Net type is string + +value: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDataBuilder + + + +#### AddTags + +```python +def AddTags(tagsValues: c_void_p) -> c_void_p +``` + +Parameters +---------- + +tagsValues: c_void_p + GC Handle Pointer to .Net type IEnumerable> + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDataBuilder + + + +#### Publish + +```python +def Publish() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.EventDefinitionBuilder + + + +## EventDefinitionBuilder Objects + +```python +class EventDefinitionBuilder(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventDefinitionBuilder + +Returns +---------- + +EventDefinitionBuilder: + Instance wrapping the .net type EventDefinitionBuilder + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventDefinitionBuilder + +Returns +---------- + +EventDefinitionBuilder: + Instance wrapping the .net type EventDefinitionBuilder + + + +#### Constructor + +```python +@staticmethod +def Constructor(streamEventsProducer: c_void_p, + location: str, + properties: c_void_p = None) -> c_void_p +``` + +Parameters +---------- + +streamEventsProducer: c_void_p + GC Handle Pointer to .Net type StreamEventsProducer + +location: str + Underlying .Net type is string + +properties: c_void_p + (Optional) GC Handle Pointer to .Net type EventDefinition. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDefinitionBuilder + + + +#### SetLevel + +```python +def SetLevel(level: EventLevel) -> c_void_p +``` + +Parameters +---------- + +level: EventLevel + Underlying .Net type is EventLevel + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDefinitionBuilder + + + +#### SetCustomProperties + +```python +def SetCustomProperties(customProperties: str) -> c_void_p +``` + +Parameters +---------- + +customProperties: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDefinitionBuilder + + + +#### AddDefinition + +```python +def AddDefinition(eventId: str, + name: str = None, + description: str = None) -> c_void_p +``` + +Parameters +---------- + +eventId: str + Underlying .Net type is string + +name: str + (Optional) Underlying .Net type is string. Defaults to None + +description: str + (Optional) Underlying .Net type is string. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDefinitionBuilder + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.ParameterDefinitionBuilder + + + +## ParameterDefinitionBuilder Objects + +```python +class ParameterDefinitionBuilder(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ParameterDefinitionBuilder + +Returns +---------- + +ParameterDefinitionBuilder: + Instance wrapping the .net type ParameterDefinitionBuilder + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ParameterDefinitionBuilder + +Returns +---------- + +ParameterDefinitionBuilder: + Instance wrapping the .net type ParameterDefinitionBuilder + + + +#### Constructor + +```python +@staticmethod +def Constructor(streamTimeseriesProducer: c_void_p, + location: str, + definition: c_void_p = None) -> c_void_p +``` + +Parameters +---------- + +streamTimeseriesProducer: c_void_p + GC Handle Pointer to .Net type StreamTimeseriesProducer + +location: str + Underlying .Net type is string + +definition: c_void_p + (Optional) GC Handle Pointer to .Net type ParameterDefinition. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinitionBuilder + + + +#### SetRange + +```python +def SetRange(minimumValue: float, maximumValue: float) -> c_void_p +``` + +Parameters +---------- + +minimumValue: float + Underlying .Net type is double + +maximumValue: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinitionBuilder + + + +#### SetUnit + +```python +def SetUnit(unit: str) -> c_void_p +``` + +Parameters +---------- + +unit: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinitionBuilder + + + +#### SetFormat + +```python +def SetFormat(format: str) -> c_void_p +``` + +Parameters +---------- + +format: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinitionBuilder + + + +#### SetCustomProperties + +```python +def SetCustomProperties(customProperties: str) -> c_void_p +``` + +Parameters +---------- + +customProperties: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinitionBuilder + + + +#### AddDefinition + +```python +def AddDefinition(parameterId: str, + name: str = None, + description: str = None) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +name: str + (Optional) Underlying .Net type is string. Defaults to None + +description: str + (Optional) Underlying .Net type is string. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinitionBuilder + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamEventsProducer + + + +## StreamEventsProducer Objects + +```python +class StreamEventsProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamEventsProducer + +Returns +---------- + +StreamEventsProducer: + Instance wrapping the .net type StreamEventsProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamEventsProducer + +Returns +---------- + +StreamEventsProducer: + Instance wrapping the .net type StreamEventsProducer + + + +#### get\_DefaultTags + +```python +def get_DefaultTags() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Dictionary + + + +#### set\_DefaultTags + +```python +def set_DefaultTags(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Dictionary + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_DefaultLocation + +```python +def get_DefaultLocation() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_DefaultLocation + +```python +def set_DefaultLocation(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Epoch + +```python +def get_Epoch() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### set\_Epoch + +```python +def set_Epoch(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- +None: + Underlying .Net type is void + + + +#### AddTimestamp + +```python +def AddTimestamp(dateTime: c_void_p) -> c_void_p +``` + +Parameters +---------- + +dateTime: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDataBuilder + + + +#### AddTimestamp2 + +```python +def AddTimestamp2(timeSpan: c_void_p) -> c_void_p +``` + +Parameters +---------- + +timeSpan: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDataBuilder + + + +#### AddTimestampMilliseconds + +```python +def AddTimestampMilliseconds(timeMilliseconds: int) -> c_void_p +``` + +Parameters +---------- + +timeMilliseconds: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDataBuilder + + + +#### AddTimestampNanoseconds + +```python +def AddTimestampNanoseconds(timeNanoseconds: int) -> c_void_p +``` + +Parameters +---------- + +timeNanoseconds: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDataBuilder + + + +#### AddDefinitions + +```python +def AddDefinitions(definitions: c_void_p) -> None +``` + +Parameters +---------- + +definitions: c_void_p + GC Handle Pointer to .Net type List + +Returns +------- +None: + Underlying .Net type is void + + + +#### AddDefinition + +```python +def AddDefinition(eventId: str, + name: str = None, + description: str = None) -> c_void_p +``` + +Parameters +---------- + +eventId: str + Underlying .Net type is string + +name: str + (Optional) Underlying .Net type is string. Defaults to None + +description: str + (Optional) Underlying .Net type is string. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDefinitionBuilder + + + +#### AddLocation + +```python +def AddLocation(location: str) -> c_void_p +``` + +Parameters +---------- + +location: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDefinitionBuilder + + + +#### Flush + +```python +def Flush() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Publish + +```python +def Publish(data: c_void_p) -> None +``` + +Parameters +---------- + +data: c_void_p + GC Handle Pointer to .Net type EventData + +Returns +------- +None: + Underlying .Net type is void + + + +#### Publish2 + +```python +def Publish2(events: c_void_p) -> None +``` + +Parameters +---------- + +events: c_void_p + GC Handle Pointer to .Net type ICollection + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamPropertiesProducer + + + +## StreamPropertiesProducer Objects + +```python +class StreamPropertiesProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamPropertiesProducer + +Returns +---------- + +StreamPropertiesProducer: + Instance wrapping the .net type StreamPropertiesProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamPropertiesProducer + +Returns +---------- + +StreamPropertiesProducer: + Instance wrapping the .net type StreamPropertiesProducer + + + +#### get\_FlushInterval + +```python +def get_FlushInterval() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### set\_FlushInterval + +```python +def set_FlushInterval(value: int) -> None +``` + +Parameters +---------- + +value: int + Underlying .Net type is int + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Name + +```python +def get_Name() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Name + +```python +def set_Name(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Location + +```python +def get_Location() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Location + +```python +def set_Location(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_TimeOfRecording + +```python +def get_TimeOfRecording() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime? + + + +#### set\_TimeOfRecording + +```python +def set_TimeOfRecording(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type DateTime? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Metadata + +```python +def get_Metadata() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ObservableDictionary + + + +#### get\_Parents + +```python +def get_Parents() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ObservableCollection + + + +#### AddParent + +```python +def AddParent(parentStreamId: str) -> None +``` + +Parameters +---------- + +parentStreamId: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### RemoveParent + +```python +def RemoveParent(parentStreamId: str) -> None +``` + +Parameters +---------- + +parentStreamId: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### Flush + +```python +def Flush() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.StreamTimeseriesProducer + + + +## StreamTimeseriesProducer Objects + +```python +class StreamTimeseriesProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamTimeseriesProducer + +Returns +---------- + +StreamTimeseriesProducer: + Instance wrapping the .net type StreamTimeseriesProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamTimeseriesProducer + +Returns +---------- + +StreamTimeseriesProducer: + Instance wrapping the .net type StreamTimeseriesProducer + + + +#### get\_Buffer + +```python +def get_Buffer() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesBufferProducer + + + +#### Publish + +```python +def Publish(data: c_void_p) -> None +``` + +Parameters +---------- + +data: c_void_p + GC Handle Pointer to .Net type TimeseriesData + +Returns +------- +None: + Underlying .Net type is void + + + +#### Publish2 + +```python +def Publish2(data: c_void_p) -> None +``` + +Parameters +---------- + +data: c_void_p + GC Handle Pointer to .Net type TimeseriesDataRaw + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_DefaultLocation + +```python +def get_DefaultLocation() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_DefaultLocation + +```python +def set_DefaultLocation(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### AddDefinitions + +```python +def AddDefinitions(definitions: c_void_p) -> None +``` + +Parameters +---------- + +definitions: c_void_p + GC Handle Pointer to .Net type List + +Returns +------- +None: + Underlying .Net type is void + + + +#### AddDefinition + +```python +def AddDefinition(parameterId: str, + name: str = None, + description: str = None) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +name: str + (Optional) Underlying .Net type is string. Defaults to None + +description: str + (Optional) Underlying .Net type is string. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinitionBuilder + + + +#### AddLocation + +```python +def AddLocation(location: str) -> c_void_p +``` + +Parameters +---------- + +location: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinitionBuilder + + + +#### Flush + +```python +def Flush() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesBufferProducer + + + +## TimeseriesBufferProducer Objects + +```python +class TimeseriesBufferProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesBufferProducer + +Returns +---------- + +TimeseriesBufferProducer: + Instance wrapping the .net type TimeseriesBufferProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesBufferProducer + +Returns +---------- + +TimeseriesBufferProducer: + Instance wrapping the .net type TimeseriesBufferProducer + + + +#### get\_Epoch + +```python +def get_Epoch() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### set\_Epoch + +```python +def set_Epoch(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- +None: + Underlying .Net type is void + + + +#### AddTimestamp + +```python +def AddTimestamp(dateTime: c_void_p) -> c_void_p +``` + +Parameters +---------- + +dateTime: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### AddTimestamp2 + +```python +def AddTimestamp2(timeSpan: c_void_p) -> c_void_p +``` + +Parameters +---------- + +timeSpan: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### AddTimestampMilliseconds + +```python +def AddTimestampMilliseconds(timeMilliseconds: int) -> c_void_p +``` + +Parameters +---------- + +timeMilliseconds: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### AddTimestampNanoseconds + +```python +def AddTimestampNanoseconds(timeNanoseconds: int) -> c_void_p +``` + +Parameters +---------- + +timeNanoseconds: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### Publish + +```python +def Publish(data: c_void_p) -> None +``` + +Parameters +---------- + +data: c_void_p + GC Handle Pointer to .Net type TimeseriesData + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_DefaultTags + +```python +def get_DefaultTags() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Dictionary + + + +#### set\_DefaultTags + +```python +def set_DefaultTags(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Dictionary + +Returns +------- +None: + Underlying .Net type is void + + + +#### Flush + +```python +def Flush() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.StreamProducer.TimeseriesDataBuilder + + + +## TimeseriesDataBuilder Objects + +```python +class TimeseriesDataBuilder(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataBuilder + +Returns +---------- + +TimeseriesDataBuilder: + Instance wrapping the .net type TimeseriesDataBuilder + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataBuilder + +Returns +---------- + +TimeseriesDataBuilder: + Instance wrapping the .net type TimeseriesDataBuilder + + + +#### Constructor + +```python +@staticmethod +def Constructor(buffer: c_void_p, data: c_void_p, + timestamp: c_void_p) -> c_void_p +``` + +Parameters +---------- + +buffer: c_void_p + GC Handle Pointer to .Net type TimeseriesBufferProducer + +data: c_void_p + GC Handle Pointer to .Net type TimeseriesData + +timestamp: c_void_p + GC Handle Pointer to .Net type TimeseriesDataTimestamp + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### AddValue + +```python +def AddValue(parameterId: str, value: float) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### AddValue2 + +```python +def AddValue2(parameterId: str, value: str) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +value: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### AddValue3 + +```python +def AddValue3(parameterId: str, value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### AddTag + +```python +def AddTag(tagId: str, value: str) -> c_void_p +``` + +Parameters +---------- + +tagId: str + Underlying .Net type is string + +value: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### AddTags + +```python +def AddTags(tags: c_void_p) -> c_void_p +``` + +Parameters +---------- + +tags: c_void_p + GC Handle Pointer to .Net type IEnumerable> + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataBuilder + + + +#### Publish + +```python +def Publish() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBuffer + + + +## TimeseriesBuffer Objects + +```python +class TimeseriesBuffer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesBuffer + +Returns +---------- + +TimeseriesBuffer: + Instance wrapping the .net type TimeseriesBuffer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesBuffer + +Returns +---------- + +TimeseriesBuffer: + Instance wrapping the .net type TimeseriesBuffer + + + +#### add\_OnDataReleased + +```python +def add_OnDataReleased(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDataReleased + +```python +def remove_OnDataReleased(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnRawReleased + +```python +def add_OnRawReleased(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnRawReleased + +```python +def remove_OnRawReleased(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_PacketSize + +```python +def get_PacketSize() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is int? + + + +#### set\_PacketSize + +```python +def set_PacketSize(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is int? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_BufferTimeout + +```python +def get_BufferTimeout() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is int? + + + +#### set\_BufferTimeout + +```python +def set_BufferTimeout(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is int? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_TimeSpanInNanoseconds + +```python +def get_TimeSpanInNanoseconds() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is long? + + + +#### set\_TimeSpanInNanoseconds + +```python +def set_TimeSpanInNanoseconds(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is long? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_TimeSpanInMilliseconds + +```python +def get_TimeSpanInMilliseconds() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is long? + + + +#### set\_TimeSpanInMilliseconds + +```python +def set_TimeSpanInMilliseconds(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is long? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Filter + +```python +def get_Filter() -> Callable[[c_void_p], bool] +``` + +Parameters +---------- + +Returns +------- + +Callable[[c_void_p], bool]: + Underlying .Net type is Func + + + +#### set\_Filter + +```python +def set_Filter(value: Callable[[c_void_p], bool]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p], bool] + Underlying .Net type is Func + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CustomTriggerBeforeEnqueue + +```python +def get_CustomTriggerBeforeEnqueue() -> Callable[[c_void_p], bool] +``` + +Parameters +---------- + +Returns +------- + +Callable[[c_void_p], bool]: + Underlying .Net type is Func + + + +#### set\_CustomTriggerBeforeEnqueue + +```python +def set_CustomTriggerBeforeEnqueue(value: Callable[[c_void_p], bool]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p], bool] + Underlying .Net type is Func + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CustomTrigger + +```python +def get_CustomTrigger() -> Callable[[c_void_p], bool] +``` + +Parameters +---------- + +Returns +------- + +Callable[[c_void_p], bool]: + Underlying .Net type is Func + + + +#### set\_CustomTrigger + +```python +def set_CustomTrigger(value: Callable[[c_void_p], bool]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p], bool] + Underlying .Net type is Func + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesBufferConfiguration + + + +## TimeseriesBufferConfiguration Objects + +```python +class TimeseriesBufferConfiguration(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesBufferConfiguration + +Returns +---------- + +TimeseriesBufferConfiguration: + Instance wrapping the .net type TimeseriesBufferConfiguration + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesBufferConfiguration + +Returns +---------- + +TimeseriesBufferConfiguration: + Instance wrapping the .net type TimeseriesBufferConfiguration + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesBufferConfiguration + + + +#### get\_PacketSize + +```python +def get_PacketSize() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is int? + + + +#### set\_PacketSize + +```python +def set_PacketSize(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is int? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_TimeSpanInNanoseconds + +```python +def get_TimeSpanInNanoseconds() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is long? + + + +#### set\_TimeSpanInNanoseconds + +```python +def set_TimeSpanInNanoseconds(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is long? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_TimeSpanInMilliseconds + +```python +def get_TimeSpanInMilliseconds() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is long? + + + +#### set\_TimeSpanInMilliseconds + +```python +def set_TimeSpanInMilliseconds(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is long? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CustomTriggerBeforeEnqueue + +```python +def get_CustomTriggerBeforeEnqueue() -> Callable[[c_void_p], bool] +``` + +Parameters +---------- + +Returns +------- + +Callable[[c_void_p], bool]: + Underlying .Net type is Func + + + +#### set\_CustomTriggerBeforeEnqueue + +```python +def set_CustomTriggerBeforeEnqueue(value: Callable[[c_void_p], bool]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p], bool] + Underlying .Net type is Func + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CustomTrigger + +```python +def get_CustomTrigger() -> Callable[[c_void_p], bool] +``` + +Parameters +---------- + +Returns +------- + +Callable[[c_void_p], bool]: + Underlying .Net type is Func + + + +#### set\_CustomTrigger + +```python +def set_CustomTrigger(value: Callable[[c_void_p], bool]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p], bool] + Underlying .Net type is Func + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Filter + +```python +def get_Filter() -> Callable[[c_void_p], bool] +``` + +Parameters +---------- + +Returns +------- + +Callable[[c_void_p], bool]: + Underlying .Net type is Func + + + +#### set\_Filter + +```python +def set_Filter(value: Callable[[c_void_p], bool]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p], bool] + Underlying .Net type is Func + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_BufferTimeout + +```python +def get_BufferTimeout() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is int? + + + +#### set\_BufferTimeout + +```python +def set_BufferTimeout(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is int? + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesData + + + +## TimeseriesData Objects + +```python +class TimeseriesData(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesData + +Returns +---------- + +TimeseriesData: + Instance wrapping the .net type TimeseriesData + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesData + +Returns +---------- + +TimeseriesData: + Instance wrapping the .net type TimeseriesData + + + +#### Constructor + +```python +@staticmethod +def Constructor(capacity: int = None) -> c_void_p +``` + +Parameters +---------- + +capacity: int + (Optional) Underlying .Net type is int. Defaults to 10 + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesData + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2(rawData: c_void_p, + parametersFilter: c_void_p = None, + merge: bool = True, + clean: bool = True) -> c_void_p +``` + +Parameters +---------- + +rawData: c_void_p + GC Handle Pointer to .Net type TimeseriesDataRaw + +parametersFilter: c_void_p + (Optional) GC Handle Pointer to .Net type string[]. Defaults to None + +merge: bool + (Optional) Underlying .Net type is Boolean. Defaults to True + +clean: bool + (Optional) Underlying .Net type is Boolean. Defaults to True + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesData + + + +#### Constructor3 + +```python +@staticmethod +def Constructor3(timestamps: c_void_p, + merge: bool = True, + clean: bool = True) -> c_void_p +``` + +Parameters +---------- + +timestamps: c_void_p + GC Handle Pointer to .Net type List + +merge: bool + (Optional) Underlying .Net type is Boolean. Defaults to True + +clean: bool + (Optional) Underlying .Net type is Boolean. Defaults to True + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesData + + + +#### Clone + +```python +def Clone(parametersFilter: c_void_p) -> c_void_p +``` + +Parameters +---------- + +parametersFilter: c_void_p + GC Handle Pointer to .Net type string[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesData + + + +#### get\_Timestamps + +```python +def get_Timestamps() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamps + + + +#### AddTimestamp + +```python +def AddTimestamp(dateTime: c_void_p) -> c_void_p +``` + +Parameters +---------- + +dateTime: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### AddTimestamp2 + +```python +def AddTimestamp2(timeSpan: c_void_p) -> c_void_p +``` + +Parameters +---------- + +timeSpan: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### AddTimestampMilliseconds + +```python +def AddTimestampMilliseconds(timeMilliseconds: int) -> c_void_p +``` + +Parameters +---------- + +timeMilliseconds: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### AddTimestampNanoseconds + +```python +def AddTimestampNanoseconds(timeNanoseconds: int) -> c_void_p +``` + +Parameters +---------- + +timeNanoseconds: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### Equals + +```python +def Equals(obj: c_void_p) -> bool +``` + +Parameters +---------- + +obj: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +# quixstreams.native.Python.QuixStreamsStreaming.Models.TimeseriesDataTimestamp + + + +## TimeseriesDataTimestamp Objects + +```python +class TimeseriesDataTimestamp(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataTimestamp + +Returns +---------- + +TimeseriesDataTimestamp: + Instance wrapping the .net type TimeseriesDataTimestamp + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataTimestamp + +Returns +---------- + +TimeseriesDataTimestamp: + Instance wrapping the .net type TimeseriesDataTimestamp + + + +#### get\_Parameters + +```python +def get_Parameters() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestampValues + + + +#### get\_Tags + +```python +def get_Tags() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestampTags + + + +#### get\_TimestampNanoseconds + +```python +def get_TimestampNanoseconds() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### set\_TimestampNanoseconds + +```python +def set_TimestampNanoseconds(value: int) -> None +``` + +Parameters +---------- + +value: int + Underlying .Net type is long + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_TimestampMilliseconds + +```python +def get_TimestampMilliseconds() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_Timestamp + +```python +def get_Timestamp() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### get\_TimestampAsTimeSpan + +```python +def get_TimestampAsTimeSpan() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### AddValue + +```python +def AddValue(parameterId: str, value: float) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### AddValue2 + +```python +def AddValue2(parameterId: str, value: str) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +value: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### AddValue3 + +```python +def AddValue3(parameterId: str, value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### AddValue4 + +```python +def AddValue4(parameterId: str, value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +value: c_void_p + GC Handle Pointer to .Net type ParameterValue + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### RemoveValue + +```python +def RemoveValue(parameterId: str) -> c_void_p +``` + +Parameters +---------- + +parameterId: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### AddTag + +```python +def AddTag(tagId: str, tagValue: str) -> c_void_p +``` + +Parameters +---------- + +tagId: str + Underlying .Net type is string + +tagValue: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### AddTags + +```python +def AddTags(tags: c_void_p) -> c_void_p +``` + +Parameters +---------- + +tags: c_void_p + GC Handle Pointer to .Net type IEnumerable> + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### RemoveTag + +```python +def RemoveTag(tagId: str) -> c_void_p +``` + +Parameters +---------- + +tagId: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### Equals + +```python +def Equals(obj: c_void_p) -> bool +``` + +Parameters +---------- + +obj: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +# quixstreams.native.Python.QuixStreamsStreaming.PackageReceivedEventArgs + + + +## PackageReceivedEventArgs Objects + +```python +class PackageReceivedEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type PackageReceivedEventArgs + +Returns +---------- + +PackageReceivedEventArgs: +Instance wrapping the .net type PackageReceivedEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type PackageReceivedEventArgs + +Returns +---------- + +PackageReceivedEventArgs: +Instance wrapping the .net type PackageReceivedEventArgs + + + +#### Constructor + +```python +@staticmethod +def Constructor(topicConsumer: c_void_p, consumer: c_void_p, + package: c_void_p) -> c_void_p +``` + +Parameters +---------- + +topicConsumer: c_void_p + GC Handle Pointer to .Net type ITopicConsumer + +consumer: c_void_p + GC Handle Pointer to .Net type IStreamConsumer + +package: c_void_p + GC Handle Pointer to .Net type StreamPackage + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type PackageReceivedEventArgs + + + +#### get\_TopicConsumer + +```python +def get_TopicConsumer() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +#### get\_Stream + +```python +def get_Stream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamConsumer + + + +#### get\_Package + +```python +def get_Package() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamPackage + + + +# quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient + + + +## QuixStreamingClient Objects + +```python +class QuixStreamingClient(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type QuixStreamingClient + +Returns +---------- + +QuixStreamingClient: + Instance wrapping the .net type QuixStreamingClient + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type QuixStreamingClient + +Returns +---------- + +QuixStreamingClient: + Instance wrapping the .net type QuixStreamingClient + + + +#### Constructor + +```python +@staticmethod +def Constructor(token: str = None, + autoCreateTopics: bool = True, + properties: c_void_p = None, + debug: bool = False, + httpClient: c_void_p = None) -> c_void_p +``` + +Parameters +---------- + +token: str + (Optional) Underlying .Net type is string. Defaults to None + +autoCreateTopics: bool + (Optional) Underlying .Net type is Boolean. Defaults to True + +properties: c_void_p + (Optional) GC Handle Pointer to .Net type IDictionary. Defaults to None + +debug: bool + (Optional) Underlying .Net type is Boolean. Defaults to False + +httpClient: c_void_p + (Optional) GC Handle Pointer to .Net type HttpClient. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type QuixStreamingClient + + + +#### get\_TokenValidationConfig + +```python +def get_TokenValidationConfig() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type QuixStreamingClient.TokenValidationConfiguration + + + +#### set\_TokenValidationConfig + +```python +def set_TokenValidationConfig(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type QuixStreamingClient.TokenValidationConfiguration + +Returns +------- +None: + Underlying .Net type is void + + + +#### GetTopicConsumer + +```python +def GetTopicConsumer( + topicIdOrName: str, + consumerGroup: str = None, + options: c_void_p = None, + autoOffset: AutoOffsetReset = AutoOffsetReset.Latest) -> c_void_p +``` + +Parameters +---------- + +topicIdOrName: str + Underlying .Net type is string + +consumerGroup: str + (Optional) Underlying .Net type is string. Defaults to None + +options: c_void_p + (Optional) GC Handle Pointer to .Net type CommitOptions. Defaults to None + +autoOffset: AutoOffsetReset + (Optional) Underlying .Net type is AutoOffsetReset. Defaults to Latest + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +#### GetRawTopicConsumer + +```python +def GetRawTopicConsumer( + topicIdOrName: str, + consumerGroup: str = None, + autoOffset: Optional[AutoOffsetReset] = None) -> c_void_p +``` + +Parameters +---------- + +topicIdOrName: str + Underlying .Net type is string + +consumerGroup: str + (Optional) Underlying .Net type is string. Defaults to None + +autoOffset: Optional[AutoOffsetReset] + (Optional) Underlying .Net type is AutoOffsetReset?. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IRawTopicConsumer + + + +#### GetRawTopicProducer + +```python +def GetRawTopicProducer(topicIdOrName: str) -> c_void_p +``` + +Parameters +---------- + +topicIdOrName: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IRawTopicProducer + + + +#### GetTopicProducer + +```python +def GetTopicProducer(topicIdOrName: str) -> c_void_p +``` + +Parameters +---------- + +topicIdOrName: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicProducer + + + +#### get\_ApiUrl + +```python +def get_ApiUrl() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Uri + + + +#### set\_ApiUrl + +```python +def set_ApiUrl(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CachePeriod + +```python +def get_CachePeriod() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### set\_CachePeriod + +```python +def set_CachePeriod(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClientExtensions + + + +## QuixStreamingClientExtensions Objects + +```python +class QuixStreamingClientExtensions(object) +``` + + + +#### GetTopicConsumer + +```python +@staticmethod +def GetTopicConsumer( + client: c_void_p, + topicId: str, + consumerGroup: str = None, + commitMode: CommitMode = CommitMode.Automatic, + autoOffset: AutoOffsetReset = AutoOffsetReset.Latest) -> c_void_p +``` + +Parameters +---------- + +client: c_void_p + GC Handle Pointer to .Net type QuixStreamingClient + +topicId: str + Underlying .Net type is string + +consumerGroup: str + (Optional) Underlying .Net type is string. Defaults to None + +commitMode: CommitMode + (Optional) Underlying .Net type is CommitMode. Defaults to Automatic + +autoOffset: AutoOffsetReset + (Optional) Underlying .Net type is AutoOffsetReset. Defaults to Latest + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +# quixstreams.native.Python.QuixStreamsStreaming.QuixStreamingClient\_TokenValidationConfiguration + + + +## TokenValidationConfiguration Objects + +```python +class TokenValidationConfiguration(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TokenValidationConfiguration + +Returns +---------- + +TokenValidationConfiguration: + Instance wrapping the .net type TokenValidationConfiguration + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TokenValidationConfiguration + +Returns +---------- + +TokenValidationConfiguration: + Instance wrapping the .net type TokenValidationConfiguration + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type QuixStreamingClient.TokenValidationConfiguration + + + +#### get\_Enabled + +```python +def get_Enabled() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### set\_Enabled + +```python +def set_Enabled(value: bool) -> None +``` + +Parameters +---------- + +value: bool + Underlying .Net type is Boolean + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_WarningBeforeExpiry + +```python +def get_WarningBeforeExpiry() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan? + + + +#### set\_WarningBeforeExpiry + +```python +def set_WarningBeforeExpiry(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type TimeSpan? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_WarnAboutNonPatToken + +```python +def get_WarnAboutNonPatToken() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### set\_WarnAboutNonPatToken + +```python +def set_WarnAboutNonPatToken(value: bool) -> None +``` + +Parameters +---------- + +value: bool + Underlying .Net type is Boolean + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicConsumer + + + +## IRawTopicConsumer Objects + +```python +class IRawTopicConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IRawTopicConsumer + +Returns +---------- + +IRawTopicConsumer: + Instance wrapping the .net type IRawTopicConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IRawTopicConsumer + +Returns +---------- + +IRawTopicConsumer: + Instance wrapping the .net type IRawTopicConsumer + + + +#### Subscribe + +```python +def Subscribe() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnMessageReceived + +```python +def add_OnMessageReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnMessageReceived + +```python +def remove_OnMessageReceived( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnErrorOccurred + +```python +def add_OnErrorOccurred(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnErrorOccurred + +```python +def remove_OnErrorOccurred( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnDisposed + +```python +def add_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDisposed + +```python +def remove_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Raw.IRawTopicProducer + + + +## IRawTopicProducer Objects + +```python +class IRawTopicProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IRawTopicProducer + +Returns +---------- + +IRawTopicProducer: + Instance wrapping the .net type IRawTopicProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IRawTopicProducer + +Returns +---------- + +IRawTopicProducer: + Instance wrapping the .net type IRawTopicProducer + + + +#### Publish + +```python +def Publish(data: c_void_p) -> None +``` + +Parameters +---------- + +data: c_void_p + GC Handle Pointer to .Net type RawMessage + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnDisposed + +```python +def add_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDisposed + +```python +def remove_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Raw.RawMessage + + + +## RawMessage Objects + +```python +class RawMessage(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type RawMessage + +Returns +---------- + +RawMessage: + Instance wrapping the .net type RawMessage + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type RawMessage + +Returns +---------- + +RawMessage: + Instance wrapping the .net type RawMessage + + + +#### Constructor + +```python +@staticmethod +def Constructor(key: c_void_p, value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +key: c_void_p + GC Handle Pointer to .Net type byte[] + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type RawMessage + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2(value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type RawMessage + + + +#### get\_Metadata + +```python +def get_Metadata() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ReadOnlyDictionary + + + +#### get\_Key + +```python +def get_Key() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type byte[] + + + +#### set\_Key + +```python +def set_Key(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Value + +```python +def get_Value() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type byte[] + + + +#### set\_Value + +```python +def set_Value(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicConsumer + + + +## RawTopicConsumer Objects + +```python +class RawTopicConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type RawTopicConsumer + +Returns +---------- + +RawTopicConsumer: + Instance wrapping the .net type RawTopicConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type RawTopicConsumer + +Returns +---------- + +RawTopicConsumer: + Instance wrapping the .net type RawTopicConsumer + + + +#### Constructor + +```python +@staticmethod +def Constructor(brokerAddress: str, + topicName: str, + consumerGroup: str, + brokerProperties: c_void_p = None, + autoOffset: Optional[AutoOffsetReset] = None) -> c_void_p +``` + +Parameters +---------- + +brokerAddress: str + Underlying .Net type is string + +topicName: str + Underlying .Net type is string + +consumerGroup: str + Underlying .Net type is string + +brokerProperties: c_void_p + (Optional) GC Handle Pointer to .Net type Dictionary. Defaults to None + +autoOffset: Optional[AutoOffsetReset] + (Optional) Underlying .Net type is AutoOffsetReset?. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type RawTopicConsumer + + + +#### add\_OnMessageReceived + +```python +def add_OnMessageReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnMessageReceived + +```python +def remove_OnMessageReceived( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnDisposed + +```python +def add_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDisposed + +```python +def remove_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnErrorOccurred + +```python +def add_OnErrorOccurred(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnErrorOccurred + +```python +def remove_OnErrorOccurred( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### Subscribe + +```python +def Subscribe() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Raw.RawTopicProducer + + + +## RawTopicProducer Objects + +```python +class RawTopicProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type RawTopicProducer + +Returns +---------- + +RawTopicProducer: + Instance wrapping the .net type RawTopicProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type RawTopicProducer + +Returns +---------- + +RawTopicProducer: + Instance wrapping the .net type RawTopicProducer + + + +#### Constructor + +```python +@staticmethod +def Constructor(brokerAddress: str, + topicName: str, + brokerProperties: c_void_p = None) -> c_void_p +``` + +Parameters +---------- + +brokerAddress: str + Underlying .Net type is string + +topicName: str + Underlying .Net type is string + +brokerProperties: c_void_p + (Optional) GC Handle Pointer to .Net type Dictionary. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type RawTopicProducer + + + +#### add\_OnDisposed + +```python +def add_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDisposed + +```python +def remove_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### Publish + +```python +def Publish(message: c_void_p) -> None +``` + +Parameters +---------- + +message: c_void_p + GC Handle Pointer to .Net type RawMessage + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.StreamClosedEventArgs + + + +## StreamClosedEventArgs Objects + +```python +class StreamClosedEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type StreamClosedEventArgs + +Returns +---------- + +StreamClosedEventArgs: +Instance wrapping the .net type StreamClosedEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type StreamClosedEventArgs + +Returns +---------- + +StreamClosedEventArgs: +Instance wrapping the .net type StreamClosedEventArgs + + + +#### Constructor + +```python +@staticmethod +def Constructor(topicConsumer: c_void_p, consumer: c_void_p, + endType: StreamEndType) -> c_void_p +``` + +Parameters +---------- + +topicConsumer: c_void_p + GC Handle Pointer to .Net type ITopicConsumer + +consumer: c_void_p + GC Handle Pointer to .Net type IStreamConsumer + +endType: StreamEndType + Underlying .Net type is StreamEndType + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamClosedEventArgs + + + +#### get\_TopicConsumer + +```python +def get_TopicConsumer() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ITopicConsumer + + + +#### get\_Stream + +```python +def get_Stream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamConsumer + + + +#### get\_EndType + +```python +def get_EndType() -> StreamEndType +``` + +Parameters +---------- + +Returns +------- + +StreamEndType: + Underlying .Net type is StreamEndType + + + +# quixstreams.native.Python.QuixStreamsStreaming.TimeseriesDataTimestampValues + + + +## TimeseriesDataTimestampValues Objects + +```python +class TimeseriesDataTimestampValues(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataTimestampValues + +Returns +---------- + +TimeseriesDataTimestampValues: + Instance wrapping the .net type TimeseriesDataTimestampValues + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataTimestampValues + +Returns +---------- + +TimeseriesDataTimestampValues: + Instance wrapping the .net type TimeseriesDataTimestampValues + + + +#### get\_Values + +```python +def get_Values() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IEnumerable + + + +#### ContainsKey + +```python +def ContainsKey(key: str) -> bool +``` + +Parameters +---------- + +key: str + Underlying .Net type is string + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### TryGetValue + +```python +def TryGetValue(key: str, value: c_void_p) -> bool +``` + +Parameters +---------- + +key: str + Underlying .Net type is string + +value: c_void_p + GC Handle Pointer to .Net type ParameterValue& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_Count + +```python +def get_Count() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Keys + +```python +def get_Keys() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IEnumerable + + + +#### get\_Item + +```python +def get_Item(key: str) -> c_void_p +``` + +Parameters +---------- + +key: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterValue + + + +#### Equals + +```python +def Equals(obj: c_void_p) -> bool +``` + +Parameters +---------- + +obj: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +# quixstreams.native.Python.QuixStreamsStreaming.TopicConsumer + + + +## TopicConsumer Objects + +```python +class TopicConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TopicConsumer + +Returns +---------- + +TopicConsumer: + Instance wrapping the .net type TopicConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TopicConsumer + +Returns +---------- + +TopicConsumer: + Instance wrapping the .net type TopicConsumer + + + +#### Constructor + +```python +@staticmethod +def Constructor(telemetryKafkaConsumer: c_void_p) -> c_void_p +``` + +Parameters +---------- + +telemetryKafkaConsumer: c_void_p + GC Handle Pointer to .Net type TelemetryKafkaConsumer + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TopicConsumer + + + +#### add\_OnStreamReceived + +```python +def add_OnStreamReceived(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnStreamReceived + +```python +def remove_OnStreamReceived( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnRevoking + +```python +def add_OnRevoking(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnRevoking + +```python +def remove_OnRevoking(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnStreamsRevoked + +```python +def add_OnStreamsRevoked(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnStreamsRevoked + +```python +def remove_OnStreamsRevoked( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnCommitted + +```python +def add_OnCommitted(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnCommitted + +```python +def remove_OnCommitted(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnCommitting + +```python +def add_OnCommitting(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnCommitting + +```python +def remove_OnCommitting(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnDisposed + +```python +def add_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDisposed + +```python +def remove_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### Commit + +```python +def Commit() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Subscribe + +```python +def Subscribe() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.TopicProducer + + + +## TopicProducer Objects + +```python +class TopicProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TopicProducer + +Returns +---------- + +TopicProducer: + Instance wrapping the .net type TopicProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TopicProducer + +Returns +---------- + +TopicProducer: + Instance wrapping the .net type TopicProducer + + + +#### Constructor + +```python +@staticmethod +def Constructor(createKafkaProducer: Callable[[str], c_void_p]) -> c_void_p +``` + +Parameters +---------- + +createKafkaProducer: Callable[[str], c_void_p] + Underlying .Net type is Func + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TopicProducer + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2(config: c_void_p, topic: str) -> c_void_p +``` + +Parameters +---------- + +config: c_void_p + GC Handle Pointer to .Net type KafkaProducerConfiguration + +topic: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TopicProducer + + + +#### add\_OnDisposed + +```python +def add_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnDisposed + +```python +def remove_OnDisposed(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### CreateStream + +```python +def CreateStream() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamProducer + + + +#### CreateStream2 + +```python +def CreateStream2(streamId: str) -> c_void_p +``` + +Parameters +---------- + +streamId: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamProducer + + + +#### GetStream + +```python +def GetStream(streamId: str) -> c_void_p +``` + +Parameters +---------- + +streamId: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamProducer + + + +#### GetOrCreateStream + +```python +def GetOrCreateStream( + streamId: str, + onStreamCreated: Callable[[c_void_p], None] = None) -> c_void_p +``` + +Parameters +---------- + +streamId: str + Underlying .Net type is string + +onStreamCreated: Callable[[c_void_p], None] + (Optional) Underlying .Net type is Action. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamProducer + + + +#### RemoveStream + +```python +def RemoveStream(streamId: str) -> None +``` + +Parameters +---------- + +streamId: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Utils.CodecSettings + + + +## CodecSettings Objects + +```python +class CodecSettings(object) +``` + + + +#### SetGlobalCodecType + +```python +@staticmethod +def SetGlobalCodecType(codecType: CodecType) -> None +``` + +Parameters +---------- + +codecType: CodecType + Underlying .Net type is CodecType + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CurrentCodec + +```python +@staticmethod +def get_CurrentCodec() -> CodecType +``` + +Parameters +---------- + +Returns +------- + +CodecType: + Underlying .Net type is CodecType + + + +#### set\_CurrentCodec + +```python +@staticmethod +def set_CurrentCodec(value: CodecType) -> None +``` + +Parameters +---------- + +value: CodecType + Underlying .Net type is CodecType + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsStreaming.Utils.QuixUtils + + + +## QuixUtils Objects + +```python +class QuixUtils(object) +``` + + + +#### TryGetWorkspaceIdPrefix + +```python +@staticmethod +def TryGetWorkspaceIdPrefix(topicId: str, workspaceId: c_void_p) -> bool +``` + +Parameters +---------- + +topicId: str + Underlying .Net type is string + +workspaceId: c_void_p + GC Handle Pointer to .Net type String& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +# quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestampTags + + + +## TimeseriesDataTimestampTags Objects + +```python +class TimeseriesDataTimestampTags(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataTimestampTags + +Returns +---------- + +TimeseriesDataTimestampTags: + Instance wrapping the .net type TimeseriesDataTimestampTags + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataTimestampTags + +Returns +---------- + +TimeseriesDataTimestampTags: + Instance wrapping the .net type TimeseriesDataTimestampTags + + + +#### GetEnumerator + +```python +def GetEnumerator() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IEnumerator> + + + +#### get\_Item + +```python +def get_Item(key: str) -> str +``` + +Parameters +---------- + +key: str + Underlying .Net type is string + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Keys + +```python +def get_Keys() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IEnumerable + + + +#### get\_Values + +```python +def get_Values() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IEnumerable + + + +#### get\_Count + +```python +def get_Count() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### ContainsKey + +```python +def ContainsKey(key: str) -> bool +``` + +Parameters +---------- + +key: str + Underlying .Net type is string + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### TryGetValue + +```python +def TryGetValue(key: str, value: c_void_p) -> bool +``` + +Parameters +---------- + +key: str + Underlying .Net type is string + +value: c_void_p + GC Handle Pointer to .Net type String& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals + +```python +def Equals(obj: c_void_p) -> bool +``` + +Parameters +---------- + +obj: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +# quixstreams.native.Python.QuixStreamsStreaming.Utils.TimeseriesDataTimestamps + + + +## TimeseriesDataTimestamps Objects + +```python +class TimeseriesDataTimestamps(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataTimestamps + +Returns +---------- + +TimeseriesDataTimestamps: + Instance wrapping the .net type TimeseriesDataTimestamps + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataTimestamps + +Returns +---------- + +TimeseriesDataTimestamps: + Instance wrapping the .net type TimeseriesDataTimestamps + + + +#### GetEnumerator + +```python +def GetEnumerator() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IEnumerator + + + +#### get\_Item + +```python +def get_Item(index: int) -> c_void_p +``` + +Parameters +---------- + +index: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataTimestamp + + + +#### get\_Count + +```python +def get_Count() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### Equals + +```python +def Equals(obj: c_void_p) -> bool +``` + +Parameters +---------- + +obj: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +# quixstreams.native.Python.QuixStreamsTelemetry.IStreamPipeline + + + +## IStreamPipeline Objects + +```python +class IStreamPipeline(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IStreamPipeline + +Returns +---------- + +IStreamPipeline: + Instance wrapping the .net type IStreamPipeline + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IStreamPipeline + +Returns +---------- + +IStreamPipeline: + Instance wrapping the .net type IStreamPipeline + + + +#### get\_StreamId + +```python +def get_StreamId() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_SourceMetadata + +```python +def get_SourceMetadata() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Dictionary + + + +#### set\_SourceMetadata + +```python +def set_SourceMetadata(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Dictionary + +Returns +------- +None: + Underlying .Net type is void + + + +#### Subscribe3 + +```python +def Subscribe3( + onStreamPackage: Callable[[c_void_p, c_void_p], None]) -> c_void_p +``` + +Parameters +---------- + +onStreamPackage: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is Action + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IStreamPipeline + + + +#### Close + +```python +def Close() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnClosing + +```python +def add_OnClosing(value: Callable[[], None]) -> None +``` + +Parameters +---------- + +value: Callable[[], None] + Underlying .Net type is Action + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnClosing + +```python +def remove_OnClosing(value: Callable[[], None]) -> None +``` + +Parameters +---------- + +value: Callable[[], None] + Underlying .Net type is Action + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnClosed + +```python +def add_OnClosed(value: Callable[[], None]) -> None +``` + +Parameters +---------- + +value: Callable[[], None] + Underlying .Net type is Action + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnClosed + +```python +def remove_OnClosed(value: Callable[[], None]) -> None +``` + +Parameters +---------- + +value: Callable[[], None] + Underlying .Net type is Action + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Kafka.AutoOffsetReset + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Kafka.KafkaProducerConfiguration + + + +## KafkaProducerConfiguration Objects + +```python +class KafkaProducerConfiguration(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type KafkaProducerConfiguration + +Returns +---------- + +KafkaProducerConfiguration: + Instance wrapping the .net type KafkaProducerConfiguration + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type KafkaProducerConfiguration + +Returns +---------- + +KafkaProducerConfiguration: + Instance wrapping the .net type KafkaProducerConfiguration + + + +#### Constructor + +```python +@staticmethod +def Constructor(brokerList: str, properties: c_void_p = None) -> c_void_p +``` + +Parameters +---------- + +brokerList: str + Underlying .Net type is string + +properties: c_void_p + (Optional) GC Handle Pointer to .Net type IDictionary. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type KafkaProducerConfiguration + + + +#### get\_BrokerList + +```python +def get_BrokerList() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_MaxMessageSize + +```python +def get_MaxMessageSize() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_MaxKeySize + +```python +def get_MaxKeySize() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Properties + +```python +def get_Properties() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IDictionary + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumer + + + +## TelemetryKafkaConsumer Objects + +```python +class TelemetryKafkaConsumer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TelemetryKafkaConsumer + +Returns +---------- + +TelemetryKafkaConsumer: + Instance wrapping the .net type TelemetryKafkaConsumer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TelemetryKafkaConsumer + +Returns +---------- + +TelemetryKafkaConsumer: + Instance wrapping the .net type TelemetryKafkaConsumer + + + +#### Constructor + +```python +@staticmethod +def Constructor(telemetryKafkaConsumerConfiguration: c_void_p, + topic: str) -> c_void_p +``` + +Parameters +---------- + +telemetryKafkaConsumerConfiguration: c_void_p + GC Handle Pointer to .Net type TelemetryKafkaConsumerConfiguration + +topic: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TelemetryKafkaConsumer + + + +#### add\_OnReceiveException + +```python +def add_OnReceiveException( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnReceiveException + +```python +def remove_OnReceiveException( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnStreamsRevoked + +```python +def add_OnStreamsRevoked(value: Callable[[c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p], None] + Underlying .Net type is Action + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnStreamsRevoked + +```python +def remove_OnStreamsRevoked(value: Callable[[c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p], None] + Underlying .Net type is Action + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnRevoking + +```python +def add_OnRevoking(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnRevoking + +```python +def remove_OnRevoking(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnCommitted + +```python +def add_OnCommitted(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnCommitted + +```python +def remove_OnCommitted(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### add\_OnCommitting + +```python +def add_OnCommitting(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnCommitting + +```python +def remove_OnCommitting(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### Start + +```python +def Start() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### ForEach + +```python +def ForEach(streamPipelineFactoryHandler: Callable[[str], c_void_p]) -> None +``` + +Parameters +---------- + +streamPipelineFactoryHandler: Callable[[str], c_void_p] + Underlying .Net type is Func + +Returns +------- +None: + Underlying .Net type is void + + + +#### Stop + +```python +def Stop() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Commit + +```python +def Commit() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaConsumerConfiguration + + + +## TelemetryKafkaConsumerConfiguration Objects + +```python +class TelemetryKafkaConsumerConfiguration(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TelemetryKafkaConsumerConfiguration + +Returns +---------- + +TelemetryKafkaConsumerConfiguration: + Instance wrapping the .net type TelemetryKafkaConsumerConfiguration + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TelemetryKafkaConsumerConfiguration + +Returns +---------- + +TelemetryKafkaConsumerConfiguration: + Instance wrapping the .net type TelemetryKafkaConsumerConfiguration + + + +#### Constructor + +```python +@staticmethod +def Constructor(brokerList: str, + consumerGroupId: str = None, + properties: c_void_p = None) -> c_void_p +``` + +Parameters +---------- + +brokerList: str + Underlying .Net type is string + +consumerGroupId: str + (Optional) Underlying .Net type is string. Defaults to None + +properties: c_void_p + (Optional) GC Handle Pointer to .Net type IDictionary. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TelemetryKafkaConsumerConfiguration + + + +#### get\_BrokerList + +```python +def get_BrokerList() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_ConsumerGroupId + +```python +def get_ConsumerGroupId() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_CommitOptions + +```python +def get_CommitOptions() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CommitOptions + + + +#### set\_CommitOptions + +```python +def set_CommitOptions(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type CommitOptions + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Properties + +```python +def get_Properties() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IDictionary + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Kafka.TelemetryKafkaProducer + + + +## TelemetryKafkaProducer Objects + +```python +class TelemetryKafkaProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TelemetryKafkaProducer + +Returns +---------- + +TelemetryKafkaProducer: + Instance wrapping the .net type TelemetryKafkaProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TelemetryKafkaProducer + +Returns +---------- + +TelemetryKafkaProducer: + Instance wrapping the .net type TelemetryKafkaProducer + + + +#### Constructor + +```python +@staticmethod +def Constructor(producer: c_void_p, + byteSplitter: c_void_p, + streamId: str = None) -> c_void_p +``` + +Parameters +---------- + +producer: c_void_p + GC Handle Pointer to .Net type IProducer + +byteSplitter: c_void_p + GC Handle Pointer to .Net type IByteSplitter + +streamId: str + (Optional) Underlying .Net type is string. Defaults to None + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TelemetryKafkaProducer + + + +#### get\_StreamId + +```python +def get_StreamId() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### add\_OnWriteException + +```python +def add_OnWriteException(value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### remove\_OnWriteException + +```python +def remove_OnWriteException( + value: Callable[[c_void_p, c_void_p], None]) -> None +``` + +Parameters +---------- + +value: Callable[[c_void_p, c_void_p], None] + Underlying .Net type is EventHandler + +Returns +------- +None: + Underlying .Net type is void + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_OnStreamPipelineAssigned + +```python +def get_OnStreamPipelineAssigned() -> Callable[[], None] +``` + +Parameters +---------- + +Returns +------- + +Callable[[], None]: + Underlying .Net type is Action + + + +#### set\_OnStreamPipelineAssigned + +```python +def set_OnStreamPipelineAssigned(value: Callable[[], None]) -> None +``` + +Parameters +---------- + +value: Callable[[], None] + Underlying .Net type is Action + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Models.CodecType + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Models.EventDefinition + + + +## EventDefinition Objects + +```python +class EventDefinition(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventDefinition + +Returns +---------- + +EventDefinition: + Instance wrapping the .net type EventDefinition + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type EventDefinition + +Returns +---------- + +EventDefinition: + Instance wrapping the .net type EventDefinition + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type EventDefinition + + + +#### get\_Id + +```python +def get_Id() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Id + +```python +def set_Id(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Name + +```python +def get_Name() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Name + +```python +def set_Name(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Description + +```python +def get_Description() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Description + +```python +def set_Description(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CustomProperties + +```python +def get_CustomProperties() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_CustomProperties + +```python +def set_CustomProperties(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Level + +```python +def get_Level() -> EventLevel +``` + +Parameters +---------- + +Returns +------- + +EventLevel: + Underlying .Net type is EventLevel + + + +#### set\_Level + +```python +def set_Level(value: EventLevel) -> None +``` + +Parameters +---------- + +value: EventLevel + Underlying .Net type is EventLevel + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Models.EventLevel + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Models.ParameterDefinition + + + +## ParameterDefinition Objects + +```python +class ParameterDefinition(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ParameterDefinition + +Returns +---------- + +ParameterDefinition: + Instance wrapping the .net type ParameterDefinition + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type ParameterDefinition + +Returns +---------- + +ParameterDefinition: + Instance wrapping the .net type ParameterDefinition + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type ParameterDefinition + + + +#### get\_Id + +```python +def get_Id() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Id + +```python +def set_Id(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Name + +```python +def get_Name() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Name + +```python +def set_Name(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Description + +```python +def get_Description() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Description + +```python +def set_Description(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_MinimumValue + +```python +def get_MinimumValue() -> Optional[float] +``` + +Parameters +---------- + +Returns +------- + +Optional[float]: + Underlying .Net type is double? + + + +#### set\_MinimumValue + +```python +def set_MinimumValue(value: Optional[float]) -> None +``` + +Parameters +---------- + +value: Optional[float] + Underlying .Net type is double? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_MaximumValue + +```python +def get_MaximumValue() -> Optional[float] +``` + +Parameters +---------- + +Returns +------- + +Optional[float]: + Underlying .Net type is double? + + + +#### set\_MaximumValue + +```python +def set_MaximumValue(value: Optional[float]) -> None +``` + +Parameters +---------- + +value: Optional[float] + Underlying .Net type is double? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Unit + +```python +def get_Unit() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Unit + +```python +def set_Unit(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Format + +```python +def get_Format() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_Format + +```python +def set_Format(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CustomProperties + +```python +def get_CustomProperties() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### set\_CustomProperties + +```python +def set_CustomProperties(value: str) -> None +``` + +Parameters +---------- + +value: str + Underlying .Net type is string + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamEndType + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Models.StreamPackage + + + +## StreamPackage Objects + +```python +class StreamPackage(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamPackage + +Returns +---------- + +StreamPackage: + Instance wrapping the .net type StreamPackage + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type StreamPackage + +Returns +---------- + +StreamPackage: + Instance wrapping the .net type StreamPackage + + + +#### Constructor + +```python +@staticmethod +def Constructor(type: c_void_p, value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +type: c_void_p + GC Handle Pointer to .Net type Type + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type StreamPackage + + + +#### get\_Type + +```python +def get_Type() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### set\_Type + +```python +def set_Type(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_TransportContext + +```python +def get_TransportContext() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TransportContext + + + +#### set\_TransportContext + +```python +def set_TransportContext(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type TransportContext + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Value + +```python +def get_Value() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### set\_Value + +```python +def set_Value(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- +None: + Underlying .Net type is void + + + +#### ToJson + +```python +def ToJson() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +# quixstreams.native.Python.QuixStreamsTelemetry.Models.TimeseriesDataRaw + + + +## TimeseriesDataRaw Objects + +```python +class TimeseriesDataRaw(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataRaw + +Returns +---------- + +TimeseriesDataRaw: + Instance wrapping the .net type TimeseriesDataRaw + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TimeseriesDataRaw + +Returns +---------- + +TimeseriesDataRaw: + Instance wrapping the .net type TimeseriesDataRaw + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataRaw + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2(epoch: int, timestamps: c_void_p, numericValues: c_void_p, + stringValues: c_void_p, binaryValues: c_void_p, + tagValues: c_void_p) -> c_void_p +``` + +Parameters +---------- + +epoch: int + Underlying .Net type is long + +timestamps: c_void_p + GC Handle Pointer to .Net type long[] + +numericValues: c_void_p + GC Handle Pointer to .Net type Dictionary + +stringValues: c_void_p + GC Handle Pointer to .Net type Dictionary + +binaryValues: c_void_p + GC Handle Pointer to .Net type Dictionary + +tagValues: c_void_p + GC Handle Pointer to .Net type Dictionary + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeseriesDataRaw + + + +#### ToJson + +```python +def ToJson() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Epoch + +```python +def get_Epoch() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### set\_Epoch + +```python +def set_Epoch(value: int) -> None +``` + +Parameters +---------- + +value: int + Underlying .Net type is long + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Timestamps + +```python +def get_Timestamps() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type long[] + + + +#### set\_Timestamps + +```python +def set_Timestamps(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type long[] + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_NumericValues + +```python +def get_NumericValues() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Dictionary + + + +#### set\_NumericValues + +```python +def set_NumericValues(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Dictionary + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_StringValues + +```python +def get_StringValues() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Dictionary + + + +#### set\_StringValues + +```python +def set_StringValues(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Dictionary + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_BinaryValues + +```python +def get_BinaryValues() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Dictionary + + + +#### set\_BinaryValues + +```python +def set_BinaryValues(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Dictionary + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_TagValues + +```python +def get_TagValues() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Dictionary + + + +#### set\_TagValues + +```python +def set_TagValues(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Dictionary + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsTransport.Fw.CommitOptions + + + +## CommitOptions Objects + +```python +class CommitOptions(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type CommitOptions + +Returns +---------- + +CommitOptions: + Instance wrapping the .net type CommitOptions + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type CommitOptions + +Returns +---------- + +CommitOptions: + Instance wrapping the .net type CommitOptions + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CommitOptions + + + +#### get\_AutoCommitEnabled + +```python +def get_AutoCommitEnabled() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### set\_AutoCommitEnabled + +```python +def set_AutoCommitEnabled(value: bool) -> None +``` + +Parameters +---------- + +value: bool + Underlying .Net type is Boolean + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CommitInterval + +```python +def get_CommitInterval() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is int? + + + +#### set\_CommitInterval + +```python +def set_CommitInterval(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is int? + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_CommitEvery + +```python +def get_CommitEvery() -> Optional[int] +``` + +Parameters +---------- + +Returns +------- + +Optional[int]: + Underlying .Net type is int? + + + +#### set\_CommitEvery + +```python +def set_CommitEvery(value: Optional[int]) -> None +``` + +Parameters +---------- + +value: Optional[int] + Underlying .Net type is int? + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.QuixStreamsTransport.Fw.IByteSplitter + + + +## IByteSplitter Objects + +```python +class IByteSplitter(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IByteSplitter + +Returns +---------- + +IByteSplitter: + Instance wrapping the .net type IByteSplitter + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IByteSplitter + +Returns +---------- + +IByteSplitter: + Instance wrapping the .net type IByteSplitter + + + +#### Split + +```python +def Split(msgBytes: c_void_p) -> c_void_p +``` + +Parameters +---------- + +msgBytes: c_void_p + GC Handle Pointer to .Net type byte[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type IEnumerable + + + +# quixstreams.native.Python.QuixStreamsTransport.IO.IProducer + + + +## IProducer Objects + +```python +class IProducer(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IProducer + +Returns +---------- + +IProducer: + Instance wrapping the .net type IProducer + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IProducer + +Returns +---------- + +IProducer: + Instance wrapping the .net type IProducer + + + +# quixstreams.native.Python.QuixStreamsTransport.IO.TransportContext + + + +## TransportContext Objects + +```python +class TransportContext(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TransportContext + +Returns +---------- + +TransportContext: + Instance wrapping the .net type TransportContext + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type TransportContext + +Returns +---------- + +TransportContext: + Instance wrapping the .net type TransportContext + + + +#### Constructor + +```python +@staticmethod +def Constructor(dictionary: c_void_p) -> c_void_p +``` + +Parameters +---------- + +dictionary: c_void_p + GC Handle Pointer to .Net type IDictionary + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TransportContext + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TransportContext + + + +# quixstreams.native.Python.QuixStreamsTransport.QuixStreams.Logging + + + +## Logging Objects + +```python +class Logging(object) +``` + + + +#### UpdateFactory + +```python +@staticmethod +def UpdateFactory(logLevel: LogLevel) -> None +``` + +Parameters +---------- + +logLevel: LogLevel + Underlying .Net type is LogLevel + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.SystemNetHttp.HttpClient + + + +## HttpClient Objects + +```python +class HttpClient(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type HttpClient + +Returns +---------- + +HttpClient: + Instance wrapping the .net type HttpClient + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type HttpClient + +Returns +---------- + +HttpClient: + Instance wrapping the .net type HttpClient + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type HttpClient + + + +#### get\_BaseAddress + +```python +def get_BaseAddress() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Uri + + + +#### set\_BaseAddress + +```python +def set_BaseAddress(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_Timeout + +```python +def get_Timeout() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### set\_Timeout + +```python +def set_Timeout(value: c_void_p) -> None +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- +None: + Underlying .Net type is void + + + +#### get\_MaxResponseContentBufferSize + +```python +def get_MaxResponseContentBufferSize() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### set\_MaxResponseContentBufferSize + +```python +def set_MaxResponseContentBufferSize(value: int) -> None +``` + +Parameters +---------- + +value: int + Underlying .Net type is long + +Returns +------- +None: + Underlying .Net type is void + + + +#### CancelPendingRequests + +```python +def CancelPendingRequests() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +# quixstreams.native.Python.SystemNetPrimitives.System.Net.HttpStatusCode + + + +# quixstreams.native.Python.SystemObjectModel.System.Collections.Specialized.NotifyCollectionChangedEventArgs + + + +## NotifyCollectionChangedEventArgs Objects + +```python +class NotifyCollectionChangedEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type NotifyCollectionChangedEventArgs + +Returns +---------- + +NotifyCollectionChangedEventArgs: +Instance wrapping the .net type NotifyCollectionChangedEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type NotifyCollectionChangedEventArgs + +Returns +---------- + +NotifyCollectionChangedEventArgs: +Instance wrapping the .net type NotifyCollectionChangedEventArgs + + + +#### get\_NewStartingIndex + +```python +def get_NewStartingIndex() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_OldStartingIndex + +```python +def get_OldStartingIndex() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +# quixstreams.native.Python.SystemObjectModel.System.ComponentModel.PropertyChangedEventArgs + + + +## PropertyChangedEventArgs Objects + +```python +class PropertyChangedEventArgs(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type PropertyChangedEventArgs + +Returns +---------- + +PropertyChangedEventArgs: +Instance wrapping the .net type PropertyChangedEventArgs + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p +GC Handle Pointer to .Net type PropertyChangedEventArgs + +Returns +---------- + +PropertyChangedEventArgs: +Instance wrapping the .net type PropertyChangedEventArgs + + + +#### Constructor + +```python +@staticmethod +def Constructor(propertyName: str) -> c_void_p +``` + +Parameters +---------- + +propertyName: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type PropertyChangedEventArgs + + + +#### get\_PropertyName + +```python +def get_PropertyName() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +# quixstreams.native.Python.SystemPrivateCoreLib.System.DateTime + + + +## DateTime Objects + +```python +class DateTime(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +---------- + +DateTime: + Instance wrapping the .net type DateTime + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +---------- + +DateTime: + Instance wrapping the .net type DateTime + + + +#### Constructor + +```python +@staticmethod +def Constructor(ticks: int) -> c_void_p +``` + +Parameters +---------- + +ticks: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### Constructor5 + +```python +@staticmethod +def Constructor5(year: int, month: int, day: int) -> c_void_p +``` + +Parameters +---------- + +year: int + Underlying .Net type is int + +month: int + Underlying .Net type is int + +day: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### Constructor8 + +```python +@staticmethod +def Constructor8(year: int, month: int, day: int, hour: int, minute: int, + second: int) -> c_void_p +``` + +Parameters +---------- + +year: int + Underlying .Net type is int + +month: int + Underlying .Net type is int + +day: int + Underlying .Net type is int + +hour: int + Underlying .Net type is int + +minute: int + Underlying .Net type is int + +second: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### Constructor11 + +```python +@staticmethod +def Constructor11(year: int, month: int, day: int, hour: int, minute: int, + second: int, millisecond: int) -> c_void_p +``` + +Parameters +---------- + +year: int + Underlying .Net type is int + +month: int + Underlying .Net type is int + +day: int + Underlying .Net type is int + +hour: int + Underlying .Net type is int + +minute: int + Underlying .Net type is int + +second: int + Underlying .Net type is int + +millisecond: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### Constructor14 + +```python +@staticmethod +def Constructor14(year: int, month: int, day: int, hour: int, minute: int, + second: int, millisecond: int, microsecond: int) -> c_void_p +``` + +Parameters +---------- + +year: int + Underlying .Net type is int + +month: int + Underlying .Net type is int + +day: int + Underlying .Net type is int + +hour: int + Underlying .Net type is int + +minute: int + Underlying .Net type is int + +second: int + Underlying .Net type is int + +millisecond: int + Underlying .Net type is int + +microsecond: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### Add + +```python +def Add(value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### AddDays + +```python +def AddDays(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### AddHours + +```python +def AddHours(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### AddMilliseconds + +```python +def AddMilliseconds(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### AddMicroseconds + +```python +def AddMicroseconds(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### AddMinutes + +```python +def AddMinutes(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### AddMonths + +```python +def AddMonths(months: int) -> c_void_p +``` + +Parameters +---------- + +months: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### AddSeconds + +```python +def AddSeconds(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### AddTicks + +```python +def AddTicks(value: int) -> c_void_p +``` + +Parameters +---------- + +value: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### AddYears + +```python +def AddYears(value: int) -> c_void_p +``` + +Parameters +---------- + +value: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### Compare + +```python +@staticmethod +def Compare(t1: c_void_p, t2: c_void_p) -> int +``` + +Parameters +---------- + +t1: c_void_p + GC Handle Pointer to .Net type DateTime + +t2: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +int: + Underlying .Net type is int + + + +#### CompareTo + +```python +def CompareTo(value: c_void_p) -> int +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +int: + Underlying .Net type is int + + + +#### CompareTo2 + +```python +def CompareTo2(value: c_void_p) -> int +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +int: + Underlying .Net type is int + + + +#### DaysInMonth + +```python +@staticmethod +def DaysInMonth(year: int, month: int) -> int +``` + +Parameters +---------- + +year: int + Underlying .Net type is int + +month: int + Underlying .Net type is int + +Returns +------- + +int: + Underlying .Net type is int + + + +#### Equals + +```python +def Equals(value: c_void_p) -> bool +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals2 + +```python +def Equals2(value: c_void_p) -> bool +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals3 + +```python +@staticmethod +def Equals3(t1: c_void_p, t2: c_void_p) -> bool +``` + +Parameters +---------- + +t1: c_void_p + GC Handle Pointer to .Net type DateTime + +t2: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### FromBinary + +```python +@staticmethod +def FromBinary(dateData: int) -> c_void_p +``` + +Parameters +---------- + +dateData: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### FromFileTime + +```python +@staticmethod +def FromFileTime(fileTime: int) -> c_void_p +``` + +Parameters +---------- + +fileTime: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### FromFileTimeUtc + +```python +@staticmethod +def FromFileTimeUtc(fileTime: int) -> c_void_p +``` + +Parameters +---------- + +fileTime: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### FromOADate + +```python +@staticmethod +def FromOADate(d: float) -> c_void_p +``` + +Parameters +---------- + +d: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### IsDaylightSavingTime + +```python +def IsDaylightSavingTime() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### ToBinary + +```python +def ToBinary() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_Date + +```python +def get_Date() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### get\_Day + +```python +def get_Day() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_DayOfYear + +```python +def get_DayOfYear() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Hour + +```python +def get_Hour() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Millisecond + +```python +def get_Millisecond() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Microsecond + +```python +def get_Microsecond() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Nanosecond + +```python +def get_Nanosecond() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Minute + +```python +def get_Minute() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Month + +```python +def get_Month() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Now + +```python +@staticmethod +def get_Now() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### get\_Second + +```python +def get_Second() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Ticks + +```python +def get_Ticks() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_TimeOfDay + +```python +def get_TimeOfDay() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### get\_Today + +```python +@staticmethod +def get_Today() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### get\_Year + +```python +def get_Year() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### IsLeapYear + +```python +@staticmethod +def IsLeapYear(year: int) -> bool +``` + +Parameters +---------- + +year: int + Underlying .Net type is int + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Parse + +```python +@staticmethod +def Parse(s: str) -> c_void_p +``` + +Parameters +---------- + +s: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### Parse2 + +```python +@staticmethod +def Parse2(s: str, provider: c_void_p) -> c_void_p +``` + +Parameters +---------- + +s: str + Underlying .Net type is string + +provider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### ParseExact + +```python +@staticmethod +def ParseExact(s: str, format: str, provider: c_void_p) -> c_void_p +``` + +Parameters +---------- + +s: str + Underlying .Net type is string + +format: str + Underlying .Net type is string + +provider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### Subtract + +```python +def Subtract(value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Subtract2 + +```python +def Subtract2(value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### ToOADate + +```python +def ToOADate() -> float +``` + +Parameters +---------- + +Returns +------- + +float: + Underlying .Net type is double + + + +#### ToFileTime + +```python +def ToFileTime() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### ToFileTimeUtc + +```python +def ToFileTimeUtc() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### ToLocalTime + +```python +def ToLocalTime() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### ToLongDateString + +```python +def ToLongDateString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToLongTimeString + +```python +def ToLongTimeString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToShortDateString + +```python +def ToShortDateString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToShortTimeString + +```python +def ToShortTimeString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToString2 + +```python +def ToString2(format: str) -> str +``` + +Parameters +---------- + +format: str + Underlying .Net type is string + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToString3 + +```python +def ToString3(provider: c_void_p) -> str +``` + +Parameters +---------- + +provider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToString4 + +```python +def ToString4(format: str, provider: c_void_p) -> str +``` + +Parameters +---------- + +format: str + Underlying .Net type is string + +provider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToUniversalTime + +```python +def ToUniversalTime() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### TryParse + +```python +@staticmethod +def TryParse(s: str, result: c_void_p) -> bool +``` + +Parameters +---------- + +s: str + Underlying .Net type is string + +result: c_void_p + GC Handle Pointer to .Net type DateTime& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### op\_Equality + +```python +@staticmethod +def op_Equality(d1: c_void_p, d2: c_void_p) -> bool +``` + +Parameters +---------- + +d1: c_void_p + GC Handle Pointer to .Net type DateTime + +d2: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### op\_Inequality + +```python +@staticmethod +def op_Inequality(d1: c_void_p, d2: c_void_p) -> bool +``` + +Parameters +---------- + +d1: c_void_p + GC Handle Pointer to .Net type DateTime + +d2: c_void_p + GC Handle Pointer to .Net type DateTime + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Deconstruct2 + +```python +def Deconstruct2(year: c_void_p, month: c_void_p, day: c_void_p) -> None +``` + +Parameters +---------- + +year: c_void_p + GC Handle Pointer to .Net type Int32& + +month: c_void_p + GC Handle Pointer to .Net type Int32& + +day: c_void_p + GC Handle Pointer to .Net type Int32& + +Returns +------- +None: + Underlying .Net type is void + + + +#### GetDateTimeFormats + +```python +def GetDateTimeFormats() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type string[] + + + +#### GetDateTimeFormats2 + +```python +def GetDateTimeFormats2(provider: c_void_p) -> c_void_p +``` + +Parameters +---------- + +provider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type string[] + + + +#### GetTypeCode + +```python +def GetTypeCode() -> TypeCode +``` + +Parameters +---------- + +Returns +------- + +TypeCode: + Underlying .Net type is TypeCode + + + +#### TryParse5 + +```python +@staticmethod +def TryParse5(s: str, provider: c_void_p, result: c_void_p) -> bool +``` + +Parameters +---------- + +s: str + Underlying .Net type is string + +provider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +result: c_void_p + GC Handle Pointer to .Net type DateTime& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_UtcNow + +```python +@staticmethod +def get_UtcNow() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### get\_MinValue + +```python +@staticmethod +def get_MinValue() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### get\_MaxValue + +```python +@staticmethod +def get_MaxValue() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +#### get\_UnixEpoch + +```python +@staticmethod +def get_UnixEpoch() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type DateTime + + + +# quixstreams.native.Python.SystemPrivateCoreLib.System.Enum + + + +## Enum Objects + +```python +class Enum(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type Enum + +Returns +---------- + +Enum: + Instance wrapping the .net type Enum + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type Enum + +Returns +---------- + +Enum: + Instance wrapping the .net type Enum + + + +#### GetName2 + +```python +@staticmethod +def GetName2(enumType: c_void_p, value: c_void_p) -> str +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +str: + Underlying .Net type is string + + + +#### GetNames + +```python +@staticmethod +def GetNames(enumType: c_void_p) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type string[] + + + +#### GetUnderlyingType + +```python +@staticmethod +def GetUnderlyingType(enumType: c_void_p) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetValues + +```python +@staticmethod +def GetValues(enumType: c_void_p) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Array + + + +#### GetValuesAsUnderlyingType + +```python +@staticmethod +def GetValuesAsUnderlyingType(enumType: c_void_p) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Array + + + +#### HasFlag + +```python +def HasFlag(flag: c_void_p) -> bool +``` + +Parameters +---------- + +flag: c_void_p + GC Handle Pointer to .Net type Enum + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### IsDefined2 + +```python +@staticmethod +def IsDefined2(enumType: c_void_p, value: c_void_p) -> bool +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Parse + +```python +@staticmethod +def Parse(enumType: c_void_p, value: str) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### Parse3 + +```python +@staticmethod +def Parse3(enumType: c_void_p, value: str, ignoreCase: bool) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: str + Underlying .Net type is string + +ignoreCase: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### TryParse + +```python +@staticmethod +def TryParse(enumType: c_void_p, value: str, result: c_void_p) -> bool +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: str + Underlying .Net type is string + +result: c_void_p + GC Handle Pointer to .Net type Object& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### TryParse3 + +```python +@staticmethod +def TryParse3(enumType: c_void_p, value: str, ignoreCase: bool, + result: c_void_p) -> bool +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: str + Underlying .Net type is string + +ignoreCase: bool + Underlying .Net type is Boolean + +result: c_void_p + GC Handle Pointer to .Net type Object& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals + +```python +def Equals(obj: c_void_p) -> bool +``` + +Parameters +---------- + +obj: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### CompareTo + +```python +def CompareTo(target: c_void_p) -> int +``` + +Parameters +---------- + +target: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +int: + Underlying .Net type is int + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToString2 + +```python +def ToString2(format: str) -> str +``` + +Parameters +---------- + +format: str + Underlying .Net type is string + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToString3 + +```python +def ToString3(provider: c_void_p) -> str +``` + +Parameters +---------- + +provider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToString4 + +```python +def ToString4(format: str, provider: c_void_p) -> str +``` + +Parameters +---------- + +format: str + Underlying .Net type is string + +provider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +str: + Underlying .Net type is string + + + +#### Format + +```python +@staticmethod +def Format(enumType: c_void_p, value: c_void_p, format: str) -> str +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: c_void_p + GC Handle Pointer to .Net type Object + +format: str + Underlying .Net type is string + +Returns +------- + +str: + Underlying .Net type is string + + + +#### GetTypeCode + +```python +def GetTypeCode() -> TypeCode +``` + +Parameters +---------- + +Returns +------- + +TypeCode: + Underlying .Net type is TypeCode + + + +#### ToObject + +```python +@staticmethod +def ToObject(enumType: c_void_p, value: c_void_p) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### ToObject4 + +```python +@staticmethod +def ToObject4(enumType: c_void_p, value: int) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### ToObject5 + +```python +@staticmethod +def ToObject5(enumType: c_void_p, value: int) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: int + Underlying .Net type is byte + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +#### ToObject8 + +```python +@staticmethod +def ToObject8(enumType: c_void_p, value: int) -> c_void_p +``` + +Parameters +---------- + +enumType: c_void_p + GC Handle Pointer to .Net type Type + +value: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +# quixstreams.native.Python.SystemPrivateCoreLib.System.IFormatProvider + + + +## IFormatProvider Objects + +```python +class IFormatProvider(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +---------- + +IFormatProvider: + Instance wrapping the .net type IFormatProvider + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +---------- + +IFormatProvider: + Instance wrapping the .net type IFormatProvider + + + +#### GetFormat + +```python +def GetFormat(formatType: c_void_p) -> c_void_p +``` + +Parameters +---------- + +formatType: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +# quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationToken + + + +## CancellationToken Objects + +```python +class CancellationToken(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type CancellationToken + +Returns +---------- + +CancellationToken: + Instance wrapping the .net type CancellationToken + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type CancellationToken + +Returns +---------- + +CancellationToken: + Instance wrapping the .net type CancellationToken + + + +#### Constructor + +```python +@staticmethod +def Constructor(canceled: bool) -> c_void_p +``` + +Parameters +---------- + +canceled: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CancellationToken + + + +#### get\_None + +```python +@staticmethod +def get_None() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CancellationToken + + + +#### get\_IsCancellationRequested + +```python +def get_IsCancellationRequested() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_CanBeCanceled + +```python +def get_CanBeCanceled() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals + +```python +def Equals(other: c_void_p) -> bool +``` + +Parameters +---------- + +other: c_void_p + GC Handle Pointer to .Net type CancellationToken + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals2 + +```python +def Equals2(other: c_void_p) -> bool +``` + +Parameters +---------- + +other: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### op\_Equality + +```python +@staticmethod +def op_Equality(left: c_void_p, right: c_void_p) -> bool +``` + +Parameters +---------- + +left: c_void_p + GC Handle Pointer to .Net type CancellationToken + +right: c_void_p + GC Handle Pointer to .Net type CancellationToken + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### op\_Inequality + +```python +@staticmethod +def op_Inequality(left: c_void_p, right: c_void_p) -> bool +``` + +Parameters +---------- + +left: c_void_p + GC Handle Pointer to .Net type CancellationToken + +right: c_void_p + GC Handle Pointer to .Net type CancellationToken + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### ThrowIfCancellationRequested + +```python +def ThrowIfCancellationRequested() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +# quixstreams.native.Python.SystemPrivateCoreLib.System.Threading.CancellationTokenSource + + + +## CancellationTokenSource Objects + +```python +class CancellationTokenSource(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type CancellationTokenSource + +Returns +---------- + +CancellationTokenSource: + Instance wrapping the .net type CancellationTokenSource + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type CancellationTokenSource + +Returns +---------- + +CancellationTokenSource: + Instance wrapping the .net type CancellationTokenSource + + + +#### Constructor + +```python +@staticmethod +def Constructor() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CancellationTokenSource + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2(delay: c_void_p) -> c_void_p +``` + +Parameters +---------- + +delay: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CancellationTokenSource + + + +#### Constructor3 + +```python +@staticmethod +def Constructor3(millisecondsDelay: int) -> c_void_p +``` + +Parameters +---------- + +millisecondsDelay: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CancellationTokenSource + + + +#### get\_IsCancellationRequested + +```python +def get_IsCancellationRequested() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_Token + +```python +def get_Token() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CancellationToken + + + +#### Cancel + +```python +def Cancel() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### Cancel2 + +```python +def Cancel2(throwOnFirstException: bool) -> None +``` + +Parameters +---------- + +throwOnFirstException: bool + Underlying .Net type is Boolean + +Returns +------- +None: + Underlying .Net type is void + + + +#### CancelAfter + +```python +def CancelAfter(delay: c_void_p) -> None +``` + +Parameters +---------- + +delay: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- +None: + Underlying .Net type is void + + + +#### CancelAfter2 + +```python +def CancelAfter2(millisecondsDelay: int) -> None +``` + +Parameters +---------- + +millisecondsDelay: int + Underlying .Net type is int + +Returns +------- +None: + Underlying .Net type is void + + + +#### TryReset + +```python +def TryReset() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Dispose + +```python +def Dispose() -> None +``` + +Parameters +---------- + +Returns +------- +None: + Underlying .Net type is void + + + +#### CreateLinkedTokenSource + +```python +@staticmethod +def CreateLinkedTokenSource(token1: c_void_p, token2: c_void_p) -> c_void_p +``` + +Parameters +---------- + +token1: c_void_p + GC Handle Pointer to .Net type CancellationToken + +token2: c_void_p + GC Handle Pointer to .Net type CancellationToken + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CancellationTokenSource + + + +#### CreateLinkedTokenSource2 + +```python +@staticmethod +def CreateLinkedTokenSource2(token: c_void_p) -> c_void_p +``` + +Parameters +---------- + +token: c_void_p + GC Handle Pointer to .Net type CancellationToken + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CancellationTokenSource + + + +#### CreateLinkedTokenSource3 + +```python +@staticmethod +def CreateLinkedTokenSource3(tokens: c_void_p) -> c_void_p +``` + +Parameters +---------- + +tokens: c_void_p + GC Handle Pointer to .Net type CancellationToken[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type CancellationTokenSource + + + +# quixstreams.native.Python.SystemPrivateCoreLib.System.TimeSpan + + + +## TimeSpan Objects + +```python +class TimeSpan(object) +``` + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + Pointer to .Net type TimeSpan in memory as bytes + +Returns +---------- + +TimeSpan: + Instance wrapping the .net type TimeSpan + + + +#### Constructor + +```python +@staticmethod +def Constructor(ticks: int) -> c_void_p +``` + +Parameters +---------- + +ticks: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2(hours: int, minutes: int, seconds: int) -> c_void_p +``` + +Parameters +---------- + +hours: int + Underlying .Net type is int + +minutes: int + Underlying .Net type is int + +seconds: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Constructor3 + +```python +@staticmethod +def Constructor3(days: int, hours: int, minutes: int, + seconds: int) -> c_void_p +``` + +Parameters +---------- + +days: int + Underlying .Net type is int + +hours: int + Underlying .Net type is int + +minutes: int + Underlying .Net type is int + +seconds: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Constructor4 + +```python +@staticmethod +def Constructor4(days: int, hours: int, minutes: int, seconds: int, + milliseconds: int) -> c_void_p +``` + +Parameters +---------- + +days: int + Underlying .Net type is int + +hours: int + Underlying .Net type is int + +minutes: int + Underlying .Net type is int + +seconds: int + Underlying .Net type is int + +milliseconds: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Constructor5 + +```python +@staticmethod +def Constructor5(days: int, hours: int, minutes: int, seconds: int, + milliseconds: int, microseconds: int) -> c_void_p +``` + +Parameters +---------- + +days: int + Underlying .Net type is int + +hours: int + Underlying .Net type is int + +minutes: int + Underlying .Net type is int + +seconds: int + Underlying .Net type is int + +milliseconds: int + Underlying .Net type is int + +microseconds: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### get\_Ticks + +```python +def get_Ticks() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_Days + +```python +def get_Days() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Hours + +```python +def get_Hours() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Milliseconds + +```python +def get_Milliseconds() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Microseconds + +```python +def get_Microseconds() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Nanoseconds + +```python +def get_Nanoseconds() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Minutes + +```python +def get_Minutes() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Seconds + +```python +def get_Seconds() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_TotalDays + +```python +def get_TotalDays() -> float +``` + +Parameters +---------- + +Returns +------- + +float: + Underlying .Net type is double + + + +#### get\_TotalHours + +```python +def get_TotalHours() -> float +``` + +Parameters +---------- + +Returns +------- + +float: + Underlying .Net type is double + + + +#### get\_TotalMilliseconds + +```python +def get_TotalMilliseconds() -> float +``` + +Parameters +---------- + +Returns +------- + +float: + Underlying .Net type is double + + + +#### get\_TotalMicroseconds + +```python +def get_TotalMicroseconds() -> float +``` + +Parameters +---------- + +Returns +------- + +float: + Underlying .Net type is double + + + +#### get\_TotalNanoseconds + +```python +def get_TotalNanoseconds() -> float +``` + +Parameters +---------- + +Returns +------- + +float: + Underlying .Net type is double + + + +#### get\_TotalMinutes + +```python +def get_TotalMinutes() -> float +``` + +Parameters +---------- + +Returns +------- + +float: + Underlying .Net type is double + + + +#### get\_TotalSeconds + +```python +def get_TotalSeconds() -> float +``` + +Parameters +---------- + +Returns +------- + +float: + Underlying .Net type is double + + + +#### Add + +```python +def Add(ts: c_void_p) -> c_void_p +``` + +Parameters +---------- + +ts: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Compare + +```python +@staticmethod +def Compare(t1: c_void_p, t2: c_void_p) -> int +``` + +Parameters +---------- + +t1: c_void_p + GC Handle Pointer to .Net type TimeSpan + +t2: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +int: + Underlying .Net type is int + + + +#### CompareTo + +```python +def CompareTo(value: c_void_p) -> int +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +int: + Underlying .Net type is int + + + +#### CompareTo2 + +```python +def CompareTo2(value: c_void_p) -> int +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +int: + Underlying .Net type is int + + + +#### FromDays + +```python +@staticmethod +def FromDays(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Duration + +```python +def Duration() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Equals + +```python +def Equals(value: c_void_p) -> bool +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals2 + +```python +def Equals2(obj: c_void_p) -> bool +``` + +Parameters +---------- + +obj: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals3 + +```python +@staticmethod +def Equals3(t1: c_void_p, t2: c_void_p) -> bool +``` + +Parameters +---------- + +t1: c_void_p + GC Handle Pointer to .Net type TimeSpan + +t2: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### FromHours + +```python +@staticmethod +def FromHours(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### FromMilliseconds + +```python +@staticmethod +def FromMilliseconds(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### FromMicroseconds + +```python +@staticmethod +def FromMicroseconds(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### FromMinutes + +```python +@staticmethod +def FromMinutes(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Negate + +```python +def Negate() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### FromSeconds + +```python +@staticmethod +def FromSeconds(value: float) -> c_void_p +``` + +Parameters +---------- + +value: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Subtract + +```python +def Subtract(ts: c_void_p) -> c_void_p +``` + +Parameters +---------- + +ts: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Multiply + +```python +def Multiply(factor: float) -> c_void_p +``` + +Parameters +---------- + +factor: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Divide + +```python +def Divide(divisor: float) -> c_void_p +``` + +Parameters +---------- + +divisor: float + Underlying .Net type is double + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Divide2 + +```python +def Divide2(ts: c_void_p) -> float +``` + +Parameters +---------- + +ts: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +float: + Underlying .Net type is double + + + +#### FromTicks + +```python +@staticmethod +def FromTicks(value: int) -> c_void_p +``` + +Parameters +---------- + +value: int + Underlying .Net type is long + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Parse + +```python +@staticmethod +def Parse(s: str) -> c_void_p +``` + +Parameters +---------- + +s: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### Parse2 + +```python +@staticmethod +def Parse2(input: str, formatProvider: c_void_p) -> c_void_p +``` + +Parameters +---------- + +input: str + Underlying .Net type is string + +formatProvider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### ParseExact + +```python +@staticmethod +def ParseExact(input: str, format: str, formatProvider: c_void_p) -> c_void_p +``` + +Parameters +---------- + +input: str + Underlying .Net type is string + +format: str + Underlying .Net type is string + +formatProvider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### ParseExact2 + +```python +@staticmethod +def ParseExact2(input: str, formats: c_void_p, + formatProvider: c_void_p) -> c_void_p +``` + +Parameters +---------- + +input: str + Underlying .Net type is string + +formats: c_void_p + GC Handle Pointer to .Net type string[] + +formatProvider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### TryParse + +```python +@staticmethod +def TryParse(s: str, result: c_void_p) -> bool +``` + +Parameters +---------- + +s: str + Underlying .Net type is string + +result: c_void_p + GC Handle Pointer to .Net type TimeSpan& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### TryParse3 + +```python +@staticmethod +def TryParse3(input: str, formatProvider: c_void_p, result: c_void_p) -> bool +``` + +Parameters +---------- + +input: str + Underlying .Net type is string + +formatProvider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +result: c_void_p + GC Handle Pointer to .Net type TimeSpan& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### TryParseExact + +```python +@staticmethod +def TryParseExact(input: str, format: str, formatProvider: c_void_p, + result: c_void_p) -> bool +``` + +Parameters +---------- + +input: str + Underlying .Net type is string + +format: str + Underlying .Net type is string + +formatProvider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +result: c_void_p + GC Handle Pointer to .Net type TimeSpan& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### TryParseExact3 + +```python +@staticmethod +def TryParseExact3(input: str, formats: c_void_p, formatProvider: c_void_p, + result: c_void_p) -> bool +``` + +Parameters +---------- + +input: str + Underlying .Net type is string + +formats: c_void_p + GC Handle Pointer to .Net type string[] + +formatProvider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +result: c_void_p + GC Handle Pointer to .Net type TimeSpan& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToString2 + +```python +def ToString2(format: str) -> str +``` + +Parameters +---------- + +format: str + Underlying .Net type is string + +Returns +------- + +str: + Underlying .Net type is string + + + +#### ToString3 + +```python +def ToString3(format: str, formatProvider: c_void_p) -> str +``` + +Parameters +---------- + +format: str + Underlying .Net type is string + +formatProvider: c_void_p + GC Handle Pointer to .Net type IFormatProvider + +Returns +------- + +str: + Underlying .Net type is string + + + +#### op\_Equality + +```python +@staticmethod +def op_Equality(t1: c_void_p, t2: c_void_p) -> bool +``` + +Parameters +---------- + +t1: c_void_p + GC Handle Pointer to .Net type TimeSpan + +t2: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### op\_Inequality + +```python +@staticmethod +def op_Inequality(t1: c_void_p, t2: c_void_p) -> bool +``` + +Parameters +---------- + +t1: c_void_p + GC Handle Pointer to .Net type TimeSpan + +t2: c_void_p + GC Handle Pointer to .Net type TimeSpan + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_Zero + +```python +@staticmethod +def get_Zero() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### get\_MaxValue + +```python +@staticmethod +def get_MaxValue() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### get\_MinValue + +```python +@staticmethod +def get_MinValue() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type TimeSpan + + + +#### get\_NanosecondsPerTick + +```python +@staticmethod +def get_NanosecondsPerTick() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_TicksPerMicrosecond + +```python +@staticmethod +def get_TicksPerMicrosecond() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_TicksPerMillisecond + +```python +@staticmethod +def get_TicksPerMillisecond() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_TicksPerSecond + +```python +@staticmethod +def get_TicksPerSecond() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_TicksPerMinute + +```python +@staticmethod +def get_TicksPerMinute() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_TicksPerHour + +```python +@staticmethod +def get_TicksPerHour() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +#### get\_TicksPerDay + +```python +@staticmethod +def get_TicksPerDay() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is long + + + +# quixstreams.native.Python.SystemPrivateCoreLib.System.Type + + + +## Type Objects + +```python +class Type(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type Type + +Returns +---------- + +Type: + Instance wrapping the .net type Type + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type Type + +Returns +---------- + +Type: + Instance wrapping the .net type Type + + + +#### get\_IsInterface + +```python +def get_IsInterface() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetType + +```python +@staticmethod +def GetType(typeName: str, throwOnError: bool, ignoreCase: bool) -> c_void_p +``` + +Parameters +---------- + +typeName: str + Underlying .Net type is string + +throwOnError: bool + Underlying .Net type is Boolean + +ignoreCase: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetType2 + +```python +@staticmethod +def GetType2(typeName: str, throwOnError: bool) -> c_void_p +``` + +Parameters +---------- + +typeName: str + Underlying .Net type is string + +throwOnError: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetType3 + +```python +@staticmethod +def GetType3(typeName: str) -> c_void_p +``` + +Parameters +---------- + +typeName: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetType7 + +```python +def GetType7() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### get\_Namespace + +```python +def get_Namespace() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_AssemblyQualifiedName + +```python +def get_AssemblyQualifiedName() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_FullName + +```python +def get_FullName() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_IsNested + +```python +def get_IsNested() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_DeclaringType + +```python +def get_DeclaringType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### get\_ReflectedType + +```python +def get_ReflectedType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### get\_UnderlyingSystemType + +```python +def get_UnderlyingSystemType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### get\_IsTypeDefinition + +```python +def get_IsTypeDefinition() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsArray + +```python +def get_IsArray() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsByRef + +```python +def get_IsByRef() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsPointer + +```python +def get_IsPointer() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsConstructedGenericType + +```python +def get_IsConstructedGenericType() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsGenericParameter + +```python +def get_IsGenericParameter() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsGenericTypeParameter + +```python +def get_IsGenericTypeParameter() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsGenericMethodParameter + +```python +def get_IsGenericMethodParameter() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsGenericType + +```python +def get_IsGenericType() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsGenericTypeDefinition + +```python +def get_IsGenericTypeDefinition() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsSZArray + +```python +def get_IsSZArray() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsVariableBoundArray + +```python +def get_IsVariableBoundArray() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsByRefLike + +```python +def get_IsByRefLike() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsFunctionPointer + +```python +def get_IsFunctionPointer() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsUnmanagedFunctionPointer + +```python +def get_IsUnmanagedFunctionPointer() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_HasElementType + +```python +def get_HasElementType() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetElementType + +```python +def GetElementType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetArrayRank + +```python +def GetArrayRank() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### GetGenericTypeDefinition + +```python +def GetGenericTypeDefinition() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### get\_GenericTypeArguments + +```python +def get_GenericTypeArguments() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### GetGenericArguments + +```python +def GetGenericArguments() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### GetOptionalCustomModifiers + +```python +def GetOptionalCustomModifiers() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### GetRequiredCustomModifiers + +```python +def GetRequiredCustomModifiers() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### get\_GenericParameterPosition + +```python +def get_GenericParameterPosition() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### GetGenericParameterConstraints + +```python +def GetGenericParameterConstraints() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### get\_IsAbstract + +```python +def get_IsAbstract() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsImport + +```python +def get_IsImport() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsSealed + +```python +def get_IsSealed() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsSpecialName + +```python +def get_IsSpecialName() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsClass + +```python +def get_IsClass() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsNestedAssembly + +```python +def get_IsNestedAssembly() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsNestedFamANDAssem + +```python +def get_IsNestedFamANDAssem() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsNestedFamily + +```python +def get_IsNestedFamily() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsNestedFamORAssem + +```python +def get_IsNestedFamORAssem() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsNestedPrivate + +```python +def get_IsNestedPrivate() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsNestedPublic + +```python +def get_IsNestedPublic() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsNotPublic + +```python +def get_IsNotPublic() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsPublic + +```python +def get_IsPublic() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsAutoLayout + +```python +def get_IsAutoLayout() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsExplicitLayout + +```python +def get_IsExplicitLayout() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsLayoutSequential + +```python +def get_IsLayoutSequential() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsAnsiClass + +```python +def get_IsAnsiClass() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsAutoClass + +```python +def get_IsAutoClass() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsUnicodeClass + +```python +def get_IsUnicodeClass() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsCOMObject + +```python +def get_IsCOMObject() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsContextful + +```python +def get_IsContextful() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsEnum + +```python +def get_IsEnum() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsMarshalByRef + +```python +def get_IsMarshalByRef() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsPrimitive + +```python +def get_IsPrimitive() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsValueType + +```python +def get_IsValueType() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### IsAssignableTo + +```python +def IsAssignableTo(targetType: c_void_p) -> bool +``` + +Parameters +---------- + +targetType: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsSignatureType + +```python +def get_IsSignatureType() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsSecurityCritical + +```python +def get_IsSecurityCritical() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsSecuritySafeCritical + +```python +def get_IsSecuritySafeCritical() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsSecurityTransparent + +```python +def get_IsSecurityTransparent() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetFunctionPointerCallingConventions + +```python +def GetFunctionPointerCallingConventions() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### GetFunctionPointerReturnType + +```python +def GetFunctionPointerReturnType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetFunctionPointerParameterTypes + +```python +def GetFunctionPointerParameterTypes() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### GetNestedType + +```python +def GetNestedType(name: str) -> c_void_p +``` + +Parameters +---------- + +name: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetNestedTypes + +```python +def GetNestedTypes() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### GetTypeArray + +```python +@staticmethod +def GetTypeArray(args: c_void_p) -> c_void_p +``` + +Parameters +---------- + +args: c_void_p + GC Handle Pointer to .Net type Object[] + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### GetTypeCode + +```python +@staticmethod +def GetTypeCode(type: c_void_p) -> TypeCode +``` + +Parameters +---------- + +type: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +TypeCode: + Underlying .Net type is TypeCode + + + +#### GetTypeFromProgID + +```python +@staticmethod +def GetTypeFromProgID(progID: str) -> c_void_p +``` + +Parameters +---------- + +progID: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetTypeFromProgID2 + +```python +@staticmethod +def GetTypeFromProgID2(progID: str, throwOnError: bool) -> c_void_p +``` + +Parameters +---------- + +progID: str + Underlying .Net type is string + +throwOnError: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetTypeFromProgID3 + +```python +@staticmethod +def GetTypeFromProgID3(progID: str, server: str) -> c_void_p +``` + +Parameters +---------- + +progID: str + Underlying .Net type is string + +server: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetTypeFromProgID4 + +```python +@staticmethod +def GetTypeFromProgID4(progID: str, server: str, + throwOnError: bool) -> c_void_p +``` + +Parameters +---------- + +progID: str + Underlying .Net type is string + +server: str + Underlying .Net type is string + +throwOnError: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### get\_BaseType + +```python +def get_BaseType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetInterface + +```python +def GetInterface(name: str) -> c_void_p +``` + +Parameters +---------- + +name: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetInterface2 + +```python +def GetInterface2(name: str, ignoreCase: bool) -> c_void_p +``` + +Parameters +---------- + +name: str + Underlying .Net type is string + +ignoreCase: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetInterfaces + +```python +def GetInterfaces() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### IsInstanceOfType + +```python +def IsInstanceOfType(o: c_void_p) -> bool +``` + +Parameters +---------- + +o: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### IsEquivalentTo + +```python +def IsEquivalentTo(other: c_void_p) -> bool +``` + +Parameters +---------- + +other: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetEnumUnderlyingType + +```python +def GetEnumUnderlyingType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### GetEnumValues + +```python +def GetEnumValues() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Array + + + +#### GetEnumValuesAsUnderlyingType + +```python +def GetEnumValuesAsUnderlyingType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Array + + + +#### MakeArrayType + +```python +def MakeArrayType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### MakeArrayType2 + +```python +def MakeArrayType2(rank: int) -> c_void_p +``` + +Parameters +---------- + +rank: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### MakeByRefType + +```python +def MakeByRefType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### MakeGenericType + +```python +def MakeGenericType(typeArguments: c_void_p) -> c_void_p +``` + +Parameters +---------- + +typeArguments: c_void_p +GC Handle Pointer to .Net type Type[] + +Returns +------- + +c_void_p: +GC Handle Pointer to .Net type Type + + + +#### MakePointerType + +```python +def MakePointerType() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### MakeGenericSignatureType + +```python +@staticmethod +def MakeGenericSignatureType(genericTypeDefinition: c_void_p, + typeArguments: c_void_p) -> c_void_p +``` + +Parameters +---------- + +genericTypeDefinition: c_void_p +GC Handle Pointer to .Net type Type + +typeArguments: c_void_p +GC Handle Pointer to .Net type Type[] + +Returns +------- + +c_void_p: +GC Handle Pointer to .Net type Type + + + +#### MakeGenericMethodParameter + +```python +@staticmethod +def MakeGenericMethodParameter(position: int) -> c_void_p +``` + +Parameters +---------- + +position: int + Underlying .Net type is int + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### Equals + +```python +def Equals(o: c_void_p) -> bool +``` + +Parameters +---------- + +o: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### Equals2 + +```python +def Equals2(o: c_void_p) -> bool +``` + +Parameters +---------- + +o: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### op\_Equality + +```python +@staticmethod +def op_Equality(left: c_void_p, right: c_void_p) -> bool +``` + +Parameters +---------- + +left: c_void_p + GC Handle Pointer to .Net type Type + +right: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### op\_Inequality + +```python +@staticmethod +def op_Inequality(left: c_void_p, right: c_void_p) -> bool +``` + +Parameters +---------- + +left: c_void_p + GC Handle Pointer to .Net type Type + +right: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### ReflectionOnlyGetType + +```python +@staticmethod +def ReflectionOnlyGetType(typeName: str, throwIfNotFound: bool, + ignoreCase: bool) -> c_void_p +``` + +Parameters +---------- + +typeName: str + Underlying .Net type is string + +throwIfNotFound: bool + Underlying .Net type is Boolean + +ignoreCase: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type + + + +#### IsEnumDefined + +```python +def IsEnumDefined(value: c_void_p) -> bool +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetEnumName + +```python +def GetEnumName(value: c_void_p) -> str +``` + +Parameters +---------- + +value: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +str: + Underlying .Net type is string + + + +#### GetEnumNames + +```python +def GetEnumNames() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type string[] + + + +#### get\_IsSerializable + +```python +def get_IsSerializable() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_ContainsGenericParameters + +```python +def get_ContainsGenericParameters() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsVisible + +```python +def get_IsVisible() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### IsSubclassOf + +```python +def IsSubclassOf(c: c_void_p) -> bool +``` + +Parameters +---------- + +c: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### IsAssignableFrom + +```python +def IsAssignableFrom(c: c_void_p) -> bool +``` + +Parameters +---------- + +c: c_void_p + GC Handle Pointer to .Net type Type + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_Name + +```python +def get_Name() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### IsDefined + +```python +def IsDefined(attributeType: c_void_p, inherit: bool) -> bool +``` + +Parameters +---------- + +attributeType: c_void_p + GC Handle Pointer to .Net type Type + +inherit: bool + Underlying .Net type is Boolean + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetCustomAttributes + +```python +def GetCustomAttributes(inherit: bool) -> c_void_p +``` + +Parameters +---------- + +inherit: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object[] + + + +#### GetCustomAttributes2 + +```python +def GetCustomAttributes2(attributeType: c_void_p, inherit: bool) -> c_void_p +``` + +Parameters +---------- + +attributeType: c_void_p + GC Handle Pointer to .Net type Type + +inherit: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object[] + + + +#### get\_IsCollectible + +```python +def get_IsCollectible() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_MetadataToken + +```python +def get_MetadataToken() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_EmptyTypes + +```python +@staticmethod +def get_EmptyTypes() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Type[] + + + +#### get\_Missing + +```python +@staticmethod +def get_Missing() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Object + + + +# quixstreams.native.Python.SystemPrivateCoreLib.System.TypeCode + + + +# quixstreams.native.Python.SystemPrivateUri.System.Uri + + + +## Uri Objects + +```python +class Uri(object) +``` + + + +#### \_\_new\_\_ + +```python +def __new__(cls, net_pointer: c_void_p) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +---------- + +Uri: + Instance wrapping the .net type Uri + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: c_void_p, finalize: bool = True) +``` + +Parameters +---------- + +net_pointer: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +---------- + +Uri: + Instance wrapping the .net type Uri + + + +#### Constructor + +```python +@staticmethod +def Constructor(uriString: str) -> c_void_p +``` + +Parameters +---------- + +uriString: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Uri + + + +#### Constructor2 + +```python +@staticmethod +def Constructor2(uriString: str, dontEscape: bool) -> c_void_p +``` + +Parameters +---------- + +uriString: str + Underlying .Net type is string + +dontEscape: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Uri + + + +#### Constructor3 + +```python +@staticmethod +def Constructor3(baseUri: c_void_p, relativeUri: str, + dontEscape: bool) -> c_void_p +``` + +Parameters +---------- + +baseUri: c_void_p + GC Handle Pointer to .Net type Uri + +relativeUri: str + Underlying .Net type is string + +dontEscape: bool + Underlying .Net type is Boolean + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Uri + + + +#### Constructor6 + +```python +@staticmethod +def Constructor6(baseUri: c_void_p, relativeUri: str) -> c_void_p +``` + +Parameters +---------- + +baseUri: c_void_p + GC Handle Pointer to .Net type Uri + +relativeUri: str + Underlying .Net type is string + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Uri + + + +#### Constructor7 + +```python +@staticmethod +def Constructor7(baseUri: c_void_p, relativeUri: c_void_p) -> c_void_p +``` + +Parameters +---------- + +baseUri: c_void_p + GC Handle Pointer to .Net type Uri + +relativeUri: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Uri + + + +#### get\_AbsolutePath + +```python +def get_AbsolutePath() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_AbsoluteUri + +```python +def get_AbsoluteUri() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_LocalPath + +```python +def get_LocalPath() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Authority + +```python +def get_Authority() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_IsDefaultPort + +```python +def get_IsDefaultPort() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsFile + +```python +def get_IsFile() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_IsLoopback + +```python +def get_IsLoopback() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_PathAndQuery + +```python +def get_PathAndQuery() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Segments + +```python +def get_Segments() -> c_void_p +``` + +Parameters +---------- + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type string[] + + + +#### get\_IsUnc + +```python +def get_IsUnc() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_Host + +```python +def get_Host() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Port + +```python +def get_Port() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### get\_Query + +```python +def get_Query() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Fragment + +```python +def get_Fragment() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_Scheme + +```python +def get_Scheme() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_OriginalString + +```python +def get_OriginalString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_DnsSafeHost + +```python +def get_DnsSafeHost() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_IdnHost + +```python +def get_IdnHost() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_IsAbsoluteUri + +```python +def get_IsAbsoluteUri() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_UserEscaped + +```python +def get_UserEscaped() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_UserInfo + +```python +def get_UserInfo() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### IsHexEncoding + +```python +@staticmethod +def IsHexEncoding(pattern: str, index: int) -> bool +``` + +Parameters +---------- + +pattern: str + Underlying .Net type is string + +index: int + Underlying .Net type is int + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### CheckSchemeName + +```python +@staticmethod +def CheckSchemeName(schemeName: str) -> bool +``` + +Parameters +---------- + +schemeName: str + Underlying .Net type is string + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### GetHashCode + +```python +def GetHashCode() -> int +``` + +Parameters +---------- + +Returns +------- + +int: + Underlying .Net type is int + + + +#### ToString + +```python +def ToString() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### op\_Equality + +```python +@staticmethod +def op_Equality(uri1: c_void_p, uri2: c_void_p) -> bool +``` + +Parameters +---------- + +uri1: c_void_p + GC Handle Pointer to .Net type Uri + +uri2: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### op\_Inequality + +```python +@staticmethod +def op_Inequality(uri1: c_void_p, uri2: c_void_p) -> bool +``` + +Parameters +---------- + +uri1: c_void_p + GC Handle Pointer to .Net type Uri + +uri2: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### Equals + +```python +def Equals(comparand: c_void_p) -> bool +``` + +Parameters +---------- + +comparand: c_void_p + GC Handle Pointer to .Net type Object + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### MakeRelativeUri + +```python +def MakeRelativeUri(uri: c_void_p) -> c_void_p +``` + +Parameters +---------- + +uri: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +------- + +c_void_p: + GC Handle Pointer to .Net type Uri + + + +#### MakeRelative + +```python +def MakeRelative(toUri: c_void_p) -> str +``` + +Parameters +---------- + +toUri: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +------- + +str: + Underlying .Net type is string + + + +#### TryCreate3 + +```python +@staticmethod +def TryCreate3(baseUri: c_void_p, relativeUri: str, result: c_void_p) -> bool +``` + +Parameters +---------- + +baseUri: c_void_p + GC Handle Pointer to .Net type Uri + +relativeUri: str + Underlying .Net type is string + +result: c_void_p + GC Handle Pointer to .Net type Uri& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### TryCreate4 + +```python +@staticmethod +def TryCreate4(baseUri: c_void_p, relativeUri: c_void_p, + result: c_void_p) -> bool +``` + +Parameters +---------- + +baseUri: c_void_p + GC Handle Pointer to .Net type Uri + +relativeUri: c_void_p + GC Handle Pointer to .Net type Uri + +result: c_void_p + GC Handle Pointer to .Net type Uri& + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### IsWellFormedOriginalString + +```python +def IsWellFormedOriginalString() -> bool +``` + +Parameters +---------- + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### UnescapeDataString + +```python +@staticmethod +def UnescapeDataString(stringToUnescape: str) -> str +``` + +Parameters +---------- + +stringToUnescape: str + Underlying .Net type is string + +Returns +------- + +str: + Underlying .Net type is string + + + +#### EscapeUriString + +```python +@staticmethod +def EscapeUriString(stringToEscape: str) -> str +``` + +Parameters +---------- + +stringToEscape: str + Underlying .Net type is string + +Returns +------- + +str: + Underlying .Net type is string + + + +#### EscapeDataString + +```python +@staticmethod +def EscapeDataString(stringToEscape: str) -> str +``` + +Parameters +---------- + +stringToEscape: str + Underlying .Net type is string + +Returns +------- + +str: + Underlying .Net type is string + + + +#### IsBaseOf + +```python +def IsBaseOf(uri: c_void_p) -> bool +``` + +Parameters +---------- + +uri: c_void_p + GC Handle Pointer to .Net type Uri + +Returns +------- + +bool: + Underlying .Net type is Boolean + + + +#### get\_UriSchemeFile + +```python +@staticmethod +def get_UriSchemeFile() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeFtp + +```python +@staticmethod +def get_UriSchemeFtp() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeSftp + +```python +@staticmethod +def get_UriSchemeSftp() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeFtps + +```python +@staticmethod +def get_UriSchemeFtps() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeGopher + +```python +@staticmethod +def get_UriSchemeGopher() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeHttp + +```python +@staticmethod +def get_UriSchemeHttp() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeHttps + +```python +@staticmethod +def get_UriSchemeHttps() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeWs + +```python +@staticmethod +def get_UriSchemeWs() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeWss + +```python +@staticmethod +def get_UriSchemeWss() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeMailto + +```python +@staticmethod +def get_UriSchemeMailto() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeNews + +```python +@staticmethod +def get_UriSchemeNews() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeNntp + +```python +@staticmethod +def get_UriSchemeNntp() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeSsh + +```python +@staticmethod +def get_UriSchemeSsh() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeTelnet + +```python +@staticmethod +def get_UriSchemeTelnet() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeNetTcp + +```python +@staticmethod +def get_UriSchemeNetTcp() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_UriSchemeNetPipe + +```python +@staticmethod +def get_UriSchemeNetPipe() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +#### get\_SchemeDelimiter + +```python +@staticmethod +def get_SchemeDelimiter() -> str +``` + +Parameters +---------- + +Returns +------- + +str: + Underlying .Net type is string + + + +# quixstreams.quixstreamingclient + + + +## TokenValidationConfiguration Objects + +```python +@nativedecorator +class TokenValidationConfiguration(object) +``` + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of TokenValidationConfiguration. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .NET TokenValidationConfiguration. + + + +#### enabled + +```python +@property +def enabled() -> bool +``` + +Gets whether token validation and warnings are enabled. Defaults to true. + +**Returns**: + +- `bool` - True if token validation and warnings are enabled, False otherwise. + + + +#### enabled + +```python +@enabled.setter +def enabled(value: bool) +``` + +Sets whether token validation and warnings are enabled. Defaults to true. + +**Arguments**: + +- `value` - True to enable token validation and warnings, False to disable. + + + +#### warning\_before\_expiry + +```python +@property +def warning_before_expiry() -> Union[timedelta, None] +``` + +Gets the period within which, if the token expires, a warning will be displayed. Defaults to 2 days. Set to None to disable the check. + +**Returns**: + + Union[timedelta, None]: The period within which a warning will be displayed if the token expires or None if the check is disabled. + + + +#### warning\_before\_expiry + +```python +@warning_before_expiry.setter +def warning_before_expiry(value: Union[timedelta, None]) +``` + +Sets the period within which, if the token expires, a warning will be displayed. Defaults to 2 days. Set to None to disable the check. + +**Arguments**: + +- `value` - The new period within which a warning will be displayed if the token expires or None to disable the check. + + + +#### warn\_about\_pat\_token + +```python +@property +def warn_about_pat_token() -> bool +``` + +Gets whether to warn if the provided token is not a PAT token. Defaults to true. + +**Returns**: + +- `bool` - True if the warning is enabled, False otherwise. + + + +#### warn\_about\_pat\_token + +```python +@warn_about_pat_token.setter +def warn_about_pat_token(value: bool) +``` + +Sets whether to warn if the provided token is not a PAT token. Defaults to true. + +**Arguments**: + +- `value` - True to enable the warning, False to disable. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the associated .NET object pointer. + +**Returns**: + +- `ctypes.c_void_p` - The .NET pointer + + + +## QuixStreamingClient Objects + +```python +class QuixStreamingClient(object) +``` + +Streaming client for Kafka configured automatically using Environment Variables and Quix platform endpoints. +Use this Client when you use this library together with Quix platform. + + + +#### \_\_init\_\_ + +```python +def __init__(token: str = None, + auto_create_topics: bool = True, + properties: Dict[str, str] = None, + debug: bool = False) +``` + +Initializes a new instance of the QuixStreamingClient capable of creating topic consumers and producers. + +**Arguments**: + +- `token` - The token to use when talking to Quix. If not provided, the Quix__Sdk__Token environment variable will be used. Defaults to None. +- `auto_create_topics` - Whether topics should be auto-created if they don't exist yet. Defaults to True. +- `properties` - Additional broker properties. Defaults to None. +- `debug` - Whether debugging should be enabled. Defaults to False. + + + +#### get\_topic\_consumer + +```python +def get_topic_consumer( + topic_id_or_name: str, + consumer_group: str = None, + commit_settings: Union[CommitOptions, CommitMode] = None, + auto_offset_reset: AutoOffsetReset = AutoOffsetReset.Latest +) -> TopicConsumer +``` + +Opens a topic consumer capable of subscribing to receive incoming streams. + +**Arguments**: + +- `topic_id_or_name` - ID or name of the topic. If name is provided, the workspace will be derived from the environment variable or token, in that order. +- `consumer_group` - The consumer group ID to use for consuming messages. If None, the consumer group is not used, and only consuming new messages. Defaults to None. +- `commit_settings` - The settings to use for committing. If not provided, defaults to committing every 5000 messages or 5 seconds, whichever is sooner. +- `auto_offset_reset` - The offset to use when there is no saved offset for the consumer group. Defaults to AutoOffsetReset.Latest. + + +**Returns**: + +- `TopicConsumer` - An instance of TopicConsumer for the specified topic. + + + +#### get\_topic\_producer + +```python +def get_topic_producer(topic_id_or_name: str) -> TopicProducer +``` + +Gets a topic producer capable of producing outgoing streams. + +**Arguments**: + +- `topic_id_or_name` - ID or name of the topic. If name is provided, the workspace will be derived from the environment variable or token, in that order. + + +**Returns**: + +- `TopicProducer` - An instance of TopicProducer for the specified topic. + + + +#### get\_raw\_topic\_consumer + +```python +def get_raw_topic_consumer( + topic_id_or_name: str, + consumer_group: str = None, + auto_offset_reset: Union[AutoOffsetReset, + None] = None) -> RawTopicConsumer +``` + +Gets a topic consumer for consuming raw data from the stream. + +**Arguments**: + +- `topic_id_or_name` - ID or name of the topic. If name is provided, the workspace will be derived from the environment variable or token, in that order. +- `consumer_group` - The consumer group ID to use for consuming messages. Defaults to None. +- `auto_offset_reset` - The offset to use when there is no saved offset for the consumer group. Defaults to None. + + +**Returns**: + +- `RawTopicConsumer` - An instance of RawTopicConsumer for the specified topic. + + + +#### get\_raw\_topic\_producer + +```python +def get_raw_topic_producer(topic_id_or_name: str) -> RawTopicProducer +``` + +Gets a topic producer for producing raw data to the stream. + +**Arguments**: + +- `topic_id_or_name` - ID or name of the topic. If name is provided, the workspace will be derived from the environment variable or token, in that order. + + +**Returns**: + +- `RawTopicProducer` - An instance of RawTopicProducer for the specified topic. + + + +#### token\_validation\_config + +```python +@property +def token_validation_config() -> TokenValidationConfiguration +``` + +Gets the configuration for token validation. + +**Returns**: + +- `TokenValidationConfiguration` - The current token validation configuration. + + + +#### token\_validation\_config + +```python +@token_validation_config.setter +def token_validation_config(value: TokenValidationConfiguration) +``` + +Sets the configuration for token validation. + +**Arguments**: + +- `value` - The new token validation configuration. + + + +#### api\_url + +```python +@property +def api_url() -> str +``` + +Gets the base API URI. Defaults to https://portal-api.platform.quix.ai, or environment variable Quix__Portal__Api if available. + +**Returns**: + +- `str` - The current base API URI. + + + +#### api\_url + +```python +@api_url.setter +def api_url(value: str) +``` + +Sets the base API URI. Defaults to https://portal-api.platform.quix.ai, or environment variable Quix__Portal__Api if available. + +**Arguments**: + +- `value` - The new base API URI. + + + +#### cache\_period + +```python +@property +def cache_period() -> timedelta +``` + +Gets the period for which some API responses will be cached to avoid an excessive amount of calls. Defaults to 1 minute. + +**Returns**: + +- `timedelta` - The current cache period. + + + +#### cache\_period + +```python +@cache_period.setter +def cache_period(value: timedelta) +``` + +Sets the period for which some API responses will be cached to avoid an excessive amount of calls. Defaults to 1 minute. + +**Arguments**: + +- `value` - The new cache period. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the associated .NET object pointer. + +**Returns**: + +- `ctypes.c_void_p` - The .NET pointer + + + +# quixstreams.raw + + + +# quixstreams.raw.rawmessage + + + +## RawMessage Objects + +```python +@nativedecorator +class RawMessage(object) +``` + +The message consumed from topic without any transformation. + + + +#### \_\_init\_\_ + +```python +def __init__(data: Union[ctypes.c_void_p, bytes, bytearray]) +``` + +Initializes a new instance of RawMessage. + +**Arguments**: + +- `data` - The raw data to be stored in the message. Must be one of ctypes_c.void_p, bytes, or bytearray. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the associated .net object pointer of the RawMessage instance. + +**Returns**: + +- `ctypes.c_void_p` - The .net object pointer of the RawMessage instance. + + + +#### key + +```python +@property +def key() -> bytes +``` + +Gets the optional key of the message. Depending on the broker and message, it is not guaranteed. + +**Returns**: + +- `bytes` - The optional key of the message. + + + +#### key + +```python +@key.setter +def key(value: Union[bytearray, bytes]) +``` + +Sets the message key. + +**Arguments**: + +- `value` - The key to set for the message. + + + +#### value + +```python +@property +def value() +``` + +Gets the message value (bytes content of the message). + +**Returns**: + + Union[bytearray, bytes]: The message value (bytes content of the message). + + + +#### value + +```python +@value.setter +def value(value: Union[bytearray, bytes]) +``` + +Sets the message value (bytes content of the message). + +**Arguments**: + +- `value` - The value to set for the message. + + + +#### metadata + +```python +@property +def metadata() -> Dict[str, str] +``` + +Gets the wrapped message metadata. + +**Returns**: + + Dict[str, str]: The wrapped message metadata. + + + +# quixstreams.raw.rawtopicconsumer + + + +## RawTopicConsumer Objects + +```python +@nativedecorator +class RawTopicConsumer(object) +``` + +Topic class to consume incoming raw messages (capable to consuming non-quixstreams messages). + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of RawTopicConsumer. + +**Notes**: + + Do not initialize this class manually, use KafkaStreamingClient.get_raw_topic_consumer. + + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .net RawTopicConsumer. + + + +#### on\_message\_received + +```python +@property +def on_message_received() -> Callable[['RawTopicConsumer', RawMessage], None] +``` + +Gets the handler for when a topic receives a message. + +**Returns**: + + Callable[[RawTopicConsumer, RawMessage], None]: The event handler for when a topic receives a message. + The first parameter is the RawTopicConsumer instance for which the message is received, and the second is the RawMessage. + + + +#### on\_message\_received + +```python +@on_message_received.setter +def on_message_received( + value: Callable[['RawTopicConsumer', RawMessage], None]) -> None +``` + +Sets the handler for when a topic receives a message. + +**Arguments**: + +- `value` - The new event handler for when a topic receives a message. + The first parameter is the RawTopicConsumer instance for which the message is received, and the second is the RawMessage. + + + +#### on\_error\_occurred + +```python +@property +def on_error_occurred() -> Callable[['RawTopicConsumer', BaseException], None] +``` + +Gets the handler for when a stream experiences an exception during the asynchronous write process. + +**Returns**: + + Callable[[RawTopicConsumer, BaseException], None]: The event handler for when a stream experiences an exception during the asynchronous write process. + The first parameter is the RawTopicConsumer instance for which the error is received, and the second is the exception. + + + +#### on\_error\_occurred + +```python +@on_error_occurred.setter +def on_error_occurred( + value: Callable[['RawTopicConsumer', BaseException], None]) -> None +``` + +Sets the handler for when a stream experiences an exception during the asynchronous write process. + +**Arguments**: + +- `value` - The new handler for when a stream experiences an exception during the asynchronous write process. + The first parameter is the RawTopicConsumer instance for which the error is received, and the second is the exception. + + + +#### subscribe + +```python +def subscribe() +``` + +Starts subscribing to the streams. + + + +# quixstreams.raw.rawtopicproducer + + + +## RawTopicProducer Objects + +```python +@nativedecorator +class RawTopicProducer(object) +``` + +Class to produce raw messages into a Topic (capable of producing non-quixstreams messages) + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of the RawTopicProducer class. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .NET RawTopicProducer object. + + + +#### publish + +```python +def publish(message: Union[RawMessage, bytes, bytearray]) +``` + +Publishes the given message to the associated topic producer. + +**Arguments**: + +- `message` - The message to be published, which can be either + a RawMessage instance, bytes, or a bytearray. + + + +# quixstreams.state + + + +# quixstreams.state.inmemorystorage + + + +## InMemoryStorage Objects + +```python +class InMemoryStorage() +``` + +In memory storage with an optional backing store + + + +# quixstreams.state.localfilestorage + + + +## LocalFileStorage Objects + +```python +class LocalFileStorage(object) +``` + +A directory storage containing the file storage for single process access purposes. +Locking is implemented via in-memory mutex. + + + +#### \_\_init\_\_ + +```python +def __init__(storage_directory=None, auto_create_dir=True) +``` + +Initializes the LocalFileStorage instance. + +**Arguments**: + +- `storage_directory` - The path to the storage directory. +- `auto_create_dir` - If True, automatically creates the storage directory if it doesn't exist. + + + +#### get + +```python +def get(key: str) -> Any +``` + +Gets the value at the specified key. + +**Arguments**: + +- `key` - The key to retrieve the value for. + + +**Returns**: + +- `Any` - The value at the specified key, which can be one of the following types: + str, int, float, bool, bytes, bytearray, or object (via pickle). + + + +#### set + +```python +def set(key: str, value: Any) +``` + +Sets the value at the specified key. + +**Arguments**: + +- `key` - The key to set the value for. +- `value` - The value to be set, which can be one of the following types: + StateValue, str, int, float, bool, bytes, bytearray, or object (via pickle). + + + +#### contains\_key + +```python +def contains_key(key: str) -> bool +``` + +Checks if the storage contains the specified key. + +**Arguments**: + +- `key` - The key to check for. + + +**Returns**: + +- `bool` - True if the storage contains the key, False otherwise. + + + +#### get\_all\_keys + +```python +def get_all_keys() +``` + +Retrieves a set containing all the keys in the storage. + +**Returns**: + +- `set[str]` - A set of all keys in the storage. + + + +#### remove + +```python +def remove(key) -> None +``` + +Removes the specified key from the storage. + +**Arguments**: + +- `key` - The key to be removed. + + + +#### clear + +```python +def clear() +``` + +Clears the storage by removing all keys and their associated values. + + + +# quixstreams.state.statetype + + + +# quixstreams.state.statevalue + + + +## StateValue Objects + +```python +class StateValue(object) +``` + +A wrapper class for values that can be stored inside the storage. + + + +#### \_\_init\_\_ + +```python +def __init__(value: Any) +``` + +Initializes the wrapped value inside the store. + +**Arguments**: + +- `value` - The value to be wrapped, which can be one of the following types: + StateValue, str, int, float, bool, bytes, bytearray, or object (via pickle). + + + +#### type + +```python +@property +def type() +``` + +Gets the type of the wrapped value. + +**Returns**: + +- `StateType` - The type of the wrapped value. + + + +#### value + +```python +@property +def value() +``` + +Gets the wrapped value. + +**Returns**: + + The wrapped value. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the .NET pointer of the wrapped value. + +**Returns**: + +- `ctypes.c_void_p` - The .NET pointer of the wrapped value. + + + +# quixstreams.streamconsumer + + + +## StreamConsumer Objects + +```python +@nativedecorator +class StreamConsumer(object) +``` + +Handles consuming stream from a topic. + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p, topic_consumer: 'TopicConsumer', + on_close_cb_always: Callable[['StreamConsumer'], None]) +``` + +Initializes a new instance of StreamConsumer. + +NOTE: Do not initialize this class manually, TopicProducer automatically creates this when a new stream is received. + +**Arguments**: + +- `net_pointer` - Pointer to an instance of a .NET StreamConsumer. +- `topic_consumer` - The topic consumer which owns the stream consumer. +- `on_close_cb_always` - The callback function to be executed when the stream is closed. + + + +#### topic + +```python +@property +def topic() -> 'TopicConsumer' +``` + +Gets the topic the stream was raised for. + +**Returns**: + +- `TopicConsumer` - The topic consumer instance associated with the stream. + + + +#### on\_stream\_closed + +```python +@property +def on_stream_closed() -> Callable[['StreamConsumer', 'StreamEndType'], None] +``` + +Gets the handler for when the stream closes. + +**Returns**: + + Callable[['StreamConsumer', 'StreamEndType'], None]: The callback function to be executed when the stream closes. + The first parameter is the stream that closes, and the second is the close type. + + + +#### on\_stream\_closed + +```python +@on_stream_closed.setter +def on_stream_closed( + value: Callable[['StreamConsumer', 'StreamEndType'], None]) -> None +``` + +Sets the handler for when the stream closes. + +**Arguments**: + +- `value` - The new callback function to be executed when the stream closes. + The first parameter is the stream that closes, and the second is the close type. + + + +#### on\_package\_received + +```python +@property +def on_package_received() -> Callable[['StreamConsumer', Any], None] +``` + +Gets the handler for when the stream receives a package of any type. + +**Returns**: + + Callable[['StreamConsumer', Any], None]: The callback function to be executed when the stream receives a package. + The first parameter is the stream that receives the package, and the second is the package itself. + + + +#### on\_package\_received + +```python +@on_package_received.setter +def on_package_received( + value: Callable[['StreamConsumer', Any], None]) -> None +``` + +Sets the handler for when the stream receives a package of any type. + +**Arguments**: + +- `value` - The new callback function to be executed when the stream receives a package. + The first parameter is the stream that receives the package, and the second is the package itself. + + + +#### stream\_id + +```python +@property +def stream_id() -> str +``` + +Get the ID of the stream being consumed. + +**Returns**: + +- `str` - The ID of the stream being consumed. + + + +#### properties + +```python +@property +def properties() -> StreamPropertiesConsumer +``` + +Gets the consumer for accessing the properties and metadata of the stream. + +**Returns**: + +- `StreamPropertiesConsumer` - The stream properties consumer instance. + + + +#### events + +```python +@property +def events() -> StreamEventsConsumer +``` + +Gets the consumer for accessing event related information of the stream such as event definitions and values. + +**Returns**: + +- `StreamEventsConsumer` - The stream events consumer instance. + + + +#### timeseries + +```python +@property +def timeseries() -> StreamTimeseriesConsumer +``` + +Gets the consumer for accessing timeseries related information of the stream such as parameter definitions and values. + +**Returns**: + +- `StreamTimeseriesConsumer` - The stream timeseries consumer instance. + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Gets the associated .NET object pointer. + +**Returns**: + +- `ctypes.c_void_p` - The .NET pointer + + + +# quixstreams.streamproducer + + + +## StreamProducer Objects + +```python +@nativedecorator +class StreamProducer(object) +``` + +Handles publishing stream to a topic + + + +#### \_\_init\_\_ + +```python +def __init__(topic_producer: 'TopicProducer', net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of StreamProducer. + +NOTE: Do not initialize this class manually, use TopicProducer.get_or_create_stream or create_stream + +**Arguments**: + +- `topic_producer` - The topic producer the stream producer publishes to. +- `net_pointer` - The .net object representing a StreamProducer. + + + +#### topic + +```python +@property +def topic() -> 'TopicProducer' +``` + +Gets the topic the stream is producing to. + +**Returns**: + +- `TopicProducer` - The topic the stream is producing to. + + + +#### on\_write\_exception + +```python +@property +def on_write_exception() -> Callable[['StreamProducer', BaseException], None] +``` + +Gets the handler for when a stream experiences exception during the asynchronous write process. + +**Returns**: + + Callable[['StreamProducer', BaseException], None]: The handler for exceptions during the asynchronous write process. + The first parameter is the stream is received for, second is the exception. + + + +#### on\_write\_exception + +```python +@on_write_exception.setter +def on_write_exception( + value: Callable[['StreamProducer', BaseException], None]) -> None +``` + +Sets the handler for when a stream experiences exception during the asynchronous write process. + +**Arguments**: + +- `value` - The handler for exceptions during the asynchronous write process. + The first parameter is the stream is received for, second is the exception. + + + +#### stream\_id + +```python +@property +def stream_id() -> str +``` + +Gets the unique id of the stream being produced. + +**Returns**: + +- `str` - The unique id of the stream being produced. + + + +#### epoch + +```python +@property +def epoch() -> datetime +``` + +Gets the default Epoch used for Timeseries and Events. + +**Returns**: + +- `datetime` - The default Epoch used for Timeseries and Events. + + + +#### epoch + +```python +@epoch.setter +def epoch(value: datetime) +``` + +Set the default Epoch used for Timeseries and Events. + +**Arguments**: + +- `value` - The default Epoch value to set. + + + +#### properties + +```python +@property +def properties() -> StreamPropertiesProducer +``` + +Gets the properties of the stream. The changes will automatically be sent after a slight delay. + +**Returns**: + +- `StreamPropertiesProducer` - The properties of the stream. + + + +#### timeseries + +```python +@property +def timeseries() -> StreamTimeseriesProducer +``` + +Gets the producer for publishing timeseries related information of the stream such as parameter definitions and values. + +**Returns**: + +- `StreamTimeseriesProducer` - The producer for publishing timeseries related information of the stream. + + + +#### events + +```python +@property +def events() -> StreamEventsProducer +``` + +Gets the producer for publishing event related information of the stream such as event definitions and values. + +**Returns**: + +- `StreamEventsProducer` - The producer for publishing event related information of the stream. + + + +#### flush + +```python +def flush() +``` + +Flushes the pending data to stream. + + + +#### close + +```python +def close(end_type: StreamEndType = StreamEndType.Closed) +``` + +Closes the stream and flushes the pending data to stream. + +**Arguments**: + +- `end_type` - The type of stream end. Defaults to StreamEndType.Closed. + + + +# quixstreams.topicconsumer + + + +## TopicConsumer Objects + +```python +@nativedecorator +class TopicConsumer(object) +``` + +Interface to operate with the streaming platform for consuming messages + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of TopicConsumer. + +NOTE: Do not initialize this class manually, use KafkaStreamingClient.get_topic_consumer to create it. + +**Arguments**: + +- `net_pointer` - The .net pointer to TopicConsumer instance. + + + +#### on\_stream\_received + +```python +@property +def on_stream_received() -> Callable[['StreamConsumer'], None] +``` + +Gets the event handler for when a stream is received for the topic. + +**Returns**: + + Callable[[StreamConsumer], None]: The event handler for when a stream is received for the topic. + The first parameter is the StreamConsumer instance that was received. + + + +#### on\_stream\_received + +```python +@on_stream_received.setter +def on_stream_received(value: Callable[['StreamConsumer'], None]) -> None +``` + +Sets the event handler for when a stream is received for the topic. + +**Arguments**: + +- `value` - The new event handler for when a stream is received for the topic. + The first parameter is the StreamConsumer instance that was received. + + + +#### on\_streams\_revoked + +```python +@property +def on_streams_revoked( +) -> Callable[['TopicConsumer', List['StreamConsumer']], None] +``` + +Gets the event handler for when streams are revoked for the topic. + +**Returns**: + + Callable[[TopicConsumer, List[StreamConsumer]], None]: The event handler for when streams are revoked for the topic. + The first parameter is the TopicConsumer instance for which the streams were revoked, and the second parameter is a list of StreamConsumer instances that were revoked. + + + +#### on\_streams\_revoked + +```python +@on_streams_revoked.setter +def on_streams_revoked( + value: Callable[['TopicConsumer', List['StreamConsumer']], + None]) -> None +``` + +Sets the event handler for when streams are revoked for the topic. + +**Arguments**: + +- `value` - The new event handler for when streams are revoked for the topic. + The first parameter is the TopicConsumer instance for which the streams were revoked, and the second parameter is a list of StreamConsumer instances that were revoked. + + + +#### on\_revoking + +```python +@property +def on_revoking() -> Callable[['TopicConsumer'], None] +``` + +Gets the event handler for when the topic is being revoked. + +**Returns**: + + Callable[[TopicConsumer], None]: The event handler for when the topic is being revoked. + The first parameter is the TopicConsumer instance for which the revocation is happening. + + + +#### on\_revoking + +```python +@on_revoking.setter +def on_revoking(value: Callable[['TopicConsumer'], None]) -> None +``` + +Sets the event handler for when the topic is being revoked. + +**Arguments**: + +- `value` - The new event handler for when the topic is being revoked. + The first parameter is the TopicConsumer instance for which the revocation is happening. + + + +#### on\_committed + +```python +@property +def on_committed() -> Callable[['TopicConsumer'], None] +``` + +Gets the event handler for when the topic finishes committing consumed data up to this point. + +**Returns**: + + Callable[[TopicConsumer], None]: The event handler for when the topic finishes committing consumed data up to this point. + The first parameter is the TopicConsumer instance for which the commit happened. + + + +#### on\_committed + +```python +@on_committed.setter +def on_committed(value: Callable[['TopicConsumer'], None]) -> None +``` + +Sets the event handler for when the topic finishes committing consumed data up to this point. + +**Arguments**: + +- `value` - The new event handler for when the topic finishes committing consumed data up to this point. + The first parameter is the TopicConsumer instance for which the commit happened. + + + +#### on\_committing + +```python +@property +def on_committing() -> Callable[['TopicConsumer'], None] +``` + +Gets the event handler for when the topic begins committing consumed data up to this point. + +**Returns**: + + Callable[[TopicConsumer], None]: The event handler for when the topic begins committing consumed data up to this point. + The first parameter is the TopicConsumer instance for which the commit is happening. + + + +#### on\_committing + +```python +@on_committing.setter +def on_committing(value: Callable[['TopicConsumer'], None]) -> None +``` + +Sets the event handler for when the topic begins committing consumed data up to this point. + +**Arguments**: + +- `value` - The new event handler for when the topic begins committing consumed data up to this point. + The first parameter is the TopicConsumer instance for which the commit is happening. + + + +#### subscribe + +```python +def subscribe() +``` + +Subscribes to streams in the topic. +Use 'on_stream_received' event to consume incoming streams. + + + +#### commit + +```python +def commit() +``` + +Commit packages consumed up until now + + + +#### get\_net\_pointer + +```python +def get_net_pointer() -> ctypes.c_void_p +``` + +Retrieves the .net pointer to TopicConsumer instance. + +**Returns**: + +- `ctypes.c_void_p` - The .net pointer to TopicConsumer instance. + + + +# quixstreams.topicproducer + + + +## TopicProducer Objects + +```python +@nativedecorator +class TopicProducer(object) +``` + +Interface to operate with the streaming platform for publishing messages + + + +#### \_\_init\_\_ + +```python +def __init__(net_pointer: ctypes.c_void_p) +``` + +Initializes a new instance of TopicProducer. + +NOTE: Do not initialize this class manually, use KafkaStreamingClient.get_topic_producer to create it. + +**Arguments**: + +- `net_pointer` - The .net object representing a StreamingClient. + + + +#### on\_disposed + +```python +@property +def on_disposed() -> Callable[['TopicProducer'], None] +``` + +Gets the handler for when the topic is disposed. + +**Returns**: + + Callable[[TopicProducer], None]: The event handler for topic disposal. + The first parameter is the TopicProducer instance that got disposed. + + + +#### on\_disposed + +```python +@on_disposed.setter +def on_disposed(value: Callable[['TopicProducer'], None]) -> None +``` + +Sets the handler for when the topic is disposed. + +**Arguments**: + +- `value` - The event handler for topic disposal. + The first parameter is the TopicProducer instance that got disposed. + + + +#### create\_stream + +```python +def create_stream(stream_id: str = None) -> StreamProducer +``` + +Create a new stream and returns the related StreamProducer to operate it. + +**Arguments**: + +- `stream_id` - Provide if you wish to overwrite the generated stream id. Useful if you wish + to always stream a certain source into the same stream. + + +**Returns**: + +- `StreamProducer` - The created StreamProducer instance. + + + +#### get\_stream + +```python +def get_stream(stream_id: str) -> StreamProducer +``` + +Retrieves a stream that was previously created by this instance, if the stream is not closed. + +**Arguments**: + +- `stream_id` - The id of the stream. + + +**Returns**: + +- `StreamProducer` - The retrieved StreamProducer instance or None if not found. + + + +#### get\_or\_create\_stream + +```python +def get_or_create_stream( + stream_id: str, + on_stream_created: Callable[[StreamProducer], + None] = None) -> StreamProducer +``` + +Retrieves a stream that was previously created by this instance if the stream is not closed, otherwise creates a new stream. + +**Arguments**: + +- `stream_id` - The id of the stream you want to get or create. +- `on_stream_created` - A callback function that takes a StreamProducer as a parameter. + + +**Returns**: + +- `StreamProducer` - The retrieved or created StreamProducer instance. + diff --git a/temp_dir/client-library/app-management.md b/temp_dir/client-library/app-management.md new file mode 100644 index 00000000..bfdd3c43 --- /dev/null +++ b/temp_dir/client-library/app-management.md @@ -0,0 +1,255 @@ +# App management + +In order to reduce the amount of boilerplate code added to each of our samples, we developed the `App.run()` feature. + +`App.run` takes care of several small but important tasks in managing your Python apps. These include: + +* Start subscribing to topics +* Handle termination +* Close streams and dispose topics +* Keep alive + +Each of these is described in the following sections. + +## Imports + +To use `App.run()` in your code, you will need this import: + +```py +from quixstreams import App +App.run() +``` + +## Start subscribing + +In order to start receiving from a topic you need to make a call to the `subscribe()` method. Your Python code won’t be able to receive any data from the broker if you have missed this step. It makes sense to add this call near the end of the code, just before your 'keep busy' `while` loop. + +Your code might look something like this: + +```py +from quixstreams import TopicConsumer, StreamConsumer + +def on_stream_received_handler(stream_received: StreamConsumer): + buffer = stream_received.timeseries.create_buffer() + buffer.on_dataframe_released = on_dataframe_released_handler + +def on_dataframe_released_handler(stream: StreamConsumer, df: pd.DataFrame): + print(df.to_string()) + +# ... some code setting up topic_consumer +topic_consumer.on_stream_received = on_stream_received_handler +topic_consumer.subscribe() + +while(True): # or other blocking call + print('running') +``` + +However, using `App.run()` you no longer need the call to `subscribe()`, because it is called for you. + +So your code would look like this instead: + +```py +from quixstreams import App, TopicConsumer, StreamConsumer +import pandas as pd + +def on_stream_received_handler(stream_received: StreamConsumer): + buffer = stream_received.timeseries.create_buffer() + buffer.on_dataframe_released = on_dataframe_released_handler + +def on_dataframe_released_handler(stream: StreamConsumer, df: pd.DataFrame): + print(df.to_string()) + +# ... some code setting up topic_consumer +topic_consumer.on_stream_received = on_stream_received_handler + +App.run() +``` + +## Termination + +Termination signals such as `SIGINT`, `SIGTERM` and `SIGQUIT` could be used to break out of the `while` loop used to keep your code listening for data. In order to listen for these you’d need to add some code like this: + +```py +import threading +import signal +import time + +# Handle graceful exit +event = threading.Event() + +def signal_handler(sig, frame): + # set the termination flag + print('Setting termination flag') + event.set() + +signal.signal(signal.SIGINT, signal_handler) +signal.signal(signal.SIGTERM, signal_handler) + +while not event.is_set(): + time.sleep(1) + +print('Exiting') +``` + +In this case, when the code runs, it will subscribe to and handle `SIGINT` (an interrupt signal) and `SIGTERM` (a termination signal). If either of these signals is observed, the code will call `signal_handler`, and the `while` loop will terminate enabling the code execution to come to an end. + +`App.run` has this termination signal handling built in. It works on all popular platforms too. + +Using `App.run` the above code becomes much simpler: + +```py +from quixstreams import App +App.run() +print('Exiting') +``` + +## Close streams + +Ideally, when your code terminates it will close the streams it opened and tidy up any other resources it was using. + +You can ensure the streams are closed by calling the following code just before your process terminates: + +```py +# dispose the topic(s) and close the stream(s) +print('Closing streams...') +topic_consumer.dispose() # Note the order. Producer should be closed after consumer +topic_producer.dispose() # to avoid receiving data - possibly committing - but not being able to write. +print('Closed streams...') + +# or using the with statement, if your code structure is suited for it +with topic_producer, topic_consumer: # disposed in reverse order + pass # do great stuff +# disposed when going out of scope +print('Closed streams...') +``` + +Here, you dispose of the topic consumer, which stops new data from being received, and then dispose of the topic producer. This code is easy and straightforward, however it is just more boilerplate that you have to remember. + +Once again, `App.run()` encapsulates this and handles this for you, so the code above becomes: + +```py +from quixstreams import App +App.run() +``` + +## Dispose events + +When a topic is disposed, it is possible to run additional code by linking the `on_disposed` event to an appropriate handler. The `on_disposed` event occurs at the end of the topic disposal process. + +## Keep alive + +Unless you add an infinite loop or similar code, a Python code file will run each code statement sequentially until the end of the file, and then exit. + +In order to continuously handle data in your Python code, you need to prevent the code from terminating. There are several ways this could be achieved. For example, you could use an infinite `while` loop to enable your code to run continuously. The following code will continuously print "running" until the `end_condition` has been satisfied: + +```py +run = True +while(run): + print('running') + if(end_condition = True): + run = False +print('ending') +``` + +We used code similar to this in our [Quix Library](https://github.com/quixai/quix-library) items for a while. However, once we'd seen the same pattern being used repeatedly, we decided to build this functionality into Quix Streams. + +This is how you can use it in your code: + +```py +from quixstreams import App +App.run() +``` + +# Bring it all together + +You have seen how you could start subscribing to streams, handle termination signals, dispose of topics consumers and producers, and how to keep your code running. + +To recap, here is an example of your code without using `App.run`, all in one snippet: + +```py +import threading +import signal +import time + +# ... some code setting up topic_consumer and topic_producer +topic_consumer.subscribe() # initiate read + +# Hook up to termination signal (for docker image) and CTRL-C +print('Listening to streams. Press CTRL-C to exit.') + +# Below code is to handle graceful exit of the model. +event = threading.Event() + +def signal_handler(sig, frame): + # dispose the topic(s) and close the stream(s) + print('Closing streams...') + topic_consumer.dispose() + topic_producer.dispose() + + print('Setting termination flag') + event.set() + +signal.signal(signal.SIGINT, signal_handler) +signal.signal(signal.SIGTERM, signal_handler) + +while not event.is_set(): + time.sleep(1) + +print('Exiting') +``` + +If you use `App.run()`, this is greatly simplified into the following much smaller snippet: + +```py +from quixstreams import App +# run a while loop +# Subscribe to the input topics +# listen for termination +# close topic consumers and producers +App.run() +print('Exiting') +``` + +## Before shutdown + +It's good practice to make sure that your code cleans up during the shutdown phase. Cleanup includes disposing of any resources you might have used, or indicating to external systems that they need to close or deallocate resources. + +If you choose to implement the cleanup of other resources, or simply need to log something immediately before the code ends, you can configure `App.run()` to call a function before it does all of the other built-in actions. `App.run` provides the `before_shutdown` hook to enable this facility. The following code provides an example of this: + +```py +from quixstreams import App +def before_shutdown(): + print('before shutdown') + +App.run(before_shutdown=before_shutdown) +``` + +In this snippet, `before_shutdown` is called before the app shuts down. That is before the `while` loop inside `App.run` comes to an end. This enables you to close connections, tidy up, and log your last messages before the app terminates. + +## Triggering shutdown from code + +In some cases you might want to trigger shutdown from code. You can do it using `CancellationTokenSource`. + +```py +from quixstreams import App, CancellationTokenSource +import threading +import time + +cts = CancellationTokenSource() # used for interrupting the App + +# setup shutdown after 5 seconds +def timeout_callback(): + time.sleep(5) + cts.cancel() + +timeout_thread = threading.Thread(target=timeout_callback) +timeout_thread.start() + +# Setup some prints and pass the token to App.run +def before_shutdown(): + print('before shutdown') + +print('Waiting 5 seconds') +App.run(cts.token, before_shutdown=before_shutdown) +print('exiting') +``` \ No newline at end of file diff --git a/temp_dir/client-library/connect.md b/temp_dir/client-library/connect.md new file mode 100644 index 00000000..07a75430 --- /dev/null +++ b/temp_dir/client-library/connect.md @@ -0,0 +1,93 @@ +# Connecting to a broker + +It is possible to connect Quix Streams to a Kafka broker managed by the Quix Platform, or to your own managed or self-hosted Kafka broker. + +How you can connect Quix Streams to these is discussed in the following sections. + +## Connecting to Kafka + +You can connect to Kafka using the `KafkaStreamingClient` class provided by the library. This is a Kafka specific client implementation that requires some explicit configuration, but enables you to connect to any Kafka cluster even outside of the Quix Platform. + +When your broker requires no authentication, you can use the following code to create a client to connect to it: + +=== "Python" + + ``` python + from quixstreams import KafkaStreamingClient + + client = KafkaStreamingClient('127.0.0.1:9092') + ``` + +=== "C\#" + + ``` cs + var client = new QuixStreams.Streaming.KafkaStreamingClient("127.0.0.1:9092"); + ``` + +If your broker is secured, the library provides easy authentication when using username and password, with an optional certificate to validate server identity. + +The following code shows you how to set up the `SecurityOptions` for your connection, and how to create a `KafkaStreamingClient` instance to [subscribe](subscribe.md) to topics and [publish](publish.md) data: + +=== "Python" + + ``` python + from quixstreams import SecurityOptions, KafkaStreamingClient + + security = SecurityOptions(CERTIFICATES_FOLDER, QUIX_USER, QUIX_PASSWORD) + client = KafkaStreamingClient('127.0.0.1:9093', security) # additional details can be set using `properties=` + ``` + +=== "C\#" + + ``` cs + var security = new SecurityOptions(CERTIFICATES_FOLDER, QUIX_USER, QUIX_PASSWORD); + var client = new QuixStreams.Streaming.KafkaStreamingClient("127.0.0.1:9093", security); + ``` + +## Connecting to Quix + +Quix Streams comes with a streaming client that enables you to connect to Quix Platform topics easily. The streaming client manages the connections between your application and Quix and makes sure that the data is delivered reliably to and from your application. You can still use `KafkaStreamingClient` and manually set details, but `QuixStreamingClient` is a much easier way to connect. + +`QuixStreamingClient` handles the cumbersome part of setting up your streaming credentials using the Quix API. + +### Code running in Quix Platform + +When you’re running the app in the Quix Portal, the following code connects to Quix: + +=== "Python" + + ``` python + from quixstreams import QuixStreamingClient + + client = QuixStreamingClient() + ``` + +=== "C\#" + + ``` cs + var client = new QuixStreams.Streaming.QuixStreamingClient(); + ``` + +### Code running locally + +If you wish to connect to Quix with your code running locally, you’ll have to provide an **OAuth2.0** bearer token. Quix have created a token for this, called `SDK token`. + +Once you have [obtained the token](../platform/how-to/use-sdk-token.md) you will have to provide it as an argument to `QuixStreamingClient` or set the `Quix__Sdk__Token` environment variable. This is shown in the following code: + +=== "Python" + + ``` python + from quixstreams import QuixStreamingClient + + client = QuixStreamingClient('your_token') + ``` + +=== "C\#" + + ``` cs + var client = new QuixStreams.Streaming.QuixStreamingClient("your_token"); + ``` + +## Next steps + +For more information on how Quix Streams leverages the Kafka technology, read [Kafka and Quix Streams](kafka.md). diff --git a/temp_dir/client-library/features/builtin-buffers.md b/temp_dir/client-library/features/builtin-buffers.md new file mode 100644 index 00000000..bba03fc8 --- /dev/null +++ b/temp_dir/client-library/features/builtin-buffers.md @@ -0,0 +1,15 @@ +# Built-in buffers + +If you’re sending data at a high frequency, processing time-series data without any buffering involved can be very costly. With smaller messages, data compression cannot be implemented as efficiently. The time spent in serializing and deserializing messages can be improved by sending more values per message. + +On the other hand, an incorrect buffer strategy can introduce unnecessary latency which may not be acceptable in some use cases. + +Quix Streams provides you with a high performance and low-latency buffer, and a simple way to configure buffer parameters. This enables you to configure the buffer to balance latency and cost of memeory allocated to buffers. + +Buffers in the library work at the timestamp level. A buffer accumulates timestamps until a release condition is met. A packet is then published containing those timestamps and values as a [TimeseriesData](../subscribe.md#timeseriesdata-format) package. + +![High level time-series buffering flow](../images/QuixBuffering.png) + +The buffer can be used to [subscribe](../subscribe.md#using-a-buffer) to and [publish](../publish.md#using-a-buffer) time-series data. + +The Quix Streams buffer implementation uses short-lived memory allocations and minimizes conversions between raw transport packages and the [TimeseriesData](../subscribe.md#timeseriesdata-format) format, to achieve low CPU and memory consumption, while retaining high throughput. diff --git a/temp_dir/client-library/features/checkpointing.md b/temp_dir/client-library/features/checkpointing.md new file mode 100644 index 00000000..d0173134 --- /dev/null +++ b/temp_dir/client-library/features/checkpointing.md @@ -0,0 +1,39 @@ +# Checkpointing + +Quix Streams enables you to do manual checkpointing when you read data from a topic. You can then notify the message broker that you have processed messages up to a point, usually called a **checkpoint**. + +This is a very important concept when you are developing high-performance, streaming applications, processing lots of data in memory. You don’t want to persist a state for each message received because it would cause an unaffordable processing cost, slowing down your streaming speeds and overall performance. + +Checkpointing enables you to do some of this costly processing at a lower frequency, without having to worry about losing data. If, for some reason, your process is restarted or crashes and you haven’t saved all the in-memory data, when you reconnect to the topic the message broker resends all messages from the last checkpoint. + +Refer to the [committing / checkpointing](../subscribe.md#committing-checkpointing) section of this documentation to find out how to do checkpointing when reading data with the library. + +## Checkpointing example + +The following provides an example of how checkpointing works. + +One process is reading and processing data, without saving its state after each message is received. This allows good performance and high throughput of the service but, without checkpointing, risks data loss in the case of failure. + +1. The process reads the first four messages, keeping its state in memory: + + ![Reading first four messages](../images/Checkpointing1.png) + +2. The process commits the messages of the topic (checkpointing) just after reading the first four and saves the in-memory state to the database: + + ![Checkpointing marking messages already processed](../images/Checkpointing2.png) + +3. The process reads the next four messages, but it crashes just after that, without time to commit the messages. There is no data loss because the process begins reading from the last checkpoint after it restarts: + + ![Process crashes without commiting last messages](../images/Checkpointing3.png) + +4. The process restarts and reopens the input topic. It will start reading messages from the last checkpoint resulting in no data loss from the previous crash: + + ![Process recover itself after restart](../images/Checkpointing4.png) + +5. The process resumes reading the next five messages, keeping its state in memory: + + ![Process resumes reading next five messages](../images/Checkpointing5.png) + +6. The process commits the messages of the topic just after reading the previous five messages and saves the in-memory state to the database: + + ![Final checkpointing](../images/Checkpointing6.png) diff --git a/temp_dir/client-library/features/data-frames.md b/temp_dir/client-library/features/data-frames.md new file mode 100644 index 00000000..9d5eb0c1 --- /dev/null +++ b/temp_dir/client-library/features/data-frames.md @@ -0,0 +1,31 @@ +# Support for Data Frames + +Quix Streams supports the [pandas DataFrame](https://pandas.pydata.org/docs/user_guide/dsintro.html#dataframe) format. + +When you [subscribe](../subscribe.md#pandas-dataframe-format) to a topic or [publish](../publish.md#pandas-dataframe-format) data to a topic, you can choose to use this format. + +The client library uses the common [`TimeseriesData`](../subscribe.md#timeseriesdata-format) format internally, but handles the conversion to pandas data frame format for you. + +For example, the following [`TimeseriesData`](../subscribe.md#timeseriesdata-format) data: + +| Timestamp | CarId (tag) | Speed | Gear | +| --------- | ----------- | ----- | ---- | +| 1 | car-1 | 120 | 3 | +| 1 | car-2 | 123 | 3 | +| 3 | car-1 | 125 | 3 | +| 6 | car-2 | 110 | 2 | + +Is represented as the following pandas DataFrame: + +| time | TAG\_\_CarId | Speed | Gear | +| ---- | ------------ | ----- | ---- | +| 1 | car-1 | 120 | 3 | +| 1 | car-2 | 123 | 3 | +| 3 | car-1 | 125 | 3 | +| 6 | car-2 | 110 | 2 | + +Quix Streams provides multiple methods and events that work directly with [pandas DataFrame](https://pandas.pydata.org/docs/user_guide/dsintro.html#dataframe). + +## Next steps + +Please refer to the sections [Using Data Frames for subscribing](../subscribe.md#pandas-dataframe-format) and [Using Data Frames for publishing](../publish.md#pandas-dataframe-format) for further information. diff --git a/temp_dir/client-library/features/data-serialization.md b/temp_dir/client-library/features/data-serialization.md new file mode 100644 index 00000000..4fd20a41 --- /dev/null +++ b/temp_dir/client-library/features/data-serialization.md @@ -0,0 +1,7 @@ +# Data serialization + +Serialization can be difficult, especially if it’s done with performance in mind. Quix Streams serializes and deserializes `TimeseriesData` transport objects, which was created specifically to be efficient with time series data. Codecs such as Protobuf are also used to significantly improve overall performance of the serialization and deserialization process. + +![Quix Timeseries Data serialization](../images/QuixStreamsSerialization.png) + +Quix Streams automatically serializes data from your language's built in types. You can work with familiar types, such as [pandas DataFrame](https://pandas.pydata.org/docs/user_guide/dsintro.html#dataframe), or use the Quix `TimeseriesData` type, and leave the library to perform any type conversions required. diff --git a/temp_dir/client-library/features/horizontal-scaling.md b/temp_dir/client-library/features/horizontal-scaling.md new file mode 100644 index 00000000..926799f4 --- /dev/null +++ b/temp_dir/client-library/features/horizontal-scaling.md @@ -0,0 +1,104 @@ +# Horizontal scaling + +Quix Streams provides horizontal scaling using [streaming context](streaming-context.md) for automatic partitioning, together with the underlying broker technology, such as Kafka. + +Consider the following example: + +![Horizontal scaling initial state](../images/QuixHorizontalScaling1.png) + +Each car produces one stream with its own time-series data, and each stream is processed by a replica of the deployment, labelled "Process". By default, the message broker assigns each stream to one replica via the [RangeAssignor strategy](https://kafka.apache.org/23/javadoc/org/apache/kafka/clients/consumer/RangeAssignor.html). + +When the purple replica crashes, "stream 4" is assigned automatically to the blue replica. + +![Purple replica crashes](../images/QuixHorizontalScaling2.png) + +This situation triggers an event on the topic consumer in the blue replica indicating that "stream 4" has been received: + +=== "Python" + + ``` python + def on_stream_received_handler(topic_consumer: TopicConsumer, stream_received: StreamConsumer): + print("Stream received:" + stream_received.stream_id) + + topic_consumer.on_stream_received = on_stream_received_handler + ``` + +=== "C\#" + + ``` cs + topicConsumer.OnStreamReceived += (topic, newStream) => + { + Console.WriteLine($"New stream received: {newStream.StreamId}"); + }; + ``` + +This would result in the following output on blue replica: + +``` console +New stream received: stream 4 +``` + +When the purple replica restarts and becomes available again, it signals to the broker, and takes control of "stream 4": + +![Purple replica has been restarted](../images/QuixHorizontalScaling3.png) + +This will trigger two events, one in the blue replica indicating that "stream 4" has been revoked, and one in the purple replica indicating that "stream 4" has been assigned again: + +=== "Python" + + ``` python + def on_stream_received_handler(stream_received: StreamConsumer): + print("Stream received:" + stream_received.stream_id) + + def on_streams_revoked_handler(topic_consumer: TopicConsumer, streams_revoked: [StreamConsumer]): + for stream in streams_revoked: + print("Stream revoked:" + stream.stream_id) + + topic_consumer.on_stream_received = on_stream_received_handler + topic_consumer.on_streams_revoked = on_streams_revoked_handler + ``` + +=== "C\#" + + ``` cs + topicConsumer.OnStreamReceived += (topic, newStream) => + { + Console.WriteLine($"New stream received: {newStream.StreamId}"); + }; + + topicConsumer.OnStreamsRevoked += (topic, streamsRevoked) => + { + foreach (var stream in streamsRevoked) + { + Console.WriteLine($"Stream revoked: {stream.StreamId}"); + } + }; + ``` + +Results in the following output on the blue replica: + +``` console +Stream revoked: stream 4 +``` + +Results in the following output on the purple replica: + +``` console +New stream received: stream 4 +``` + +The same behavior happens if the "Process" deployment is scaled up or down, by increasing or decreasing the number of replicas. Kafka triggers the rebalancing mechanism internally and this triggers the same events on Quix Streams. + +!!! note + + Note that this example assumes ideal conditions, but in reality a rebalance event can shift all streams to different processes. The library ensures you only get revocation raised for a stream if it is not assigned back to the same consumer, not while it is rebalancing. + +## Rebalancing mechanism and partitions + +Kafka uses partitions and the [RangeAssignor strategy](https://kafka.apache.org/23/javadoc/org/apache/kafka/clients/consumer/RangeAssignor.html) to decide which consumers receive which messages. + +Partitions and the Kafka rebalancing protocol are internal details of the Kafka implementation behind Quix Streams. These are abstracted within the [Streaming Context](streaming-context.md) feature of the library. The events described above remain the same, even if Quix Streams uses another message broker technology, or another rebalancing mechanism in the future. + +!!! warning + + The Kafka rebalancing mechanism is such that, when subscribing to a topic, you should not have more replicas than the number of partitions in the topic, as any additional replicas will remain idle. diff --git a/temp_dir/client-library/features/message-splitting.md b/temp_dir/client-library/features/message-splitting.md new file mode 100644 index 00000000..c48bf05d --- /dev/null +++ b/temp_dir/client-library/features/message-splitting.md @@ -0,0 +1,13 @@ +# Message splitting + +Message brokers have a message size limitation by design to ensure performance. For example, Kafka has a 1MB limit by default, and while you can increase it, it will have performance implications, and has a suggested upper limit of 10 MB. This can be a problem in some use cases where messages published are large, such as sound and video binary chunks, or large volumes of time-series data. + +Quix Streams automatically handles large messages on the producer side, splitting them up if required and merging them back together at the consumer side, in a totally transparent way. + +![High level of splitting / merging flow](../images/QuixStreamsSplitting.png) + +This feature gives you 255 times the broker message size limit, independent of the message broker used. This can be useful for a use case where you get messages that occasionally exceed the limit of your broker, as this will not generate exceptions. + +!!! warning + + While this feature is useful, effort should be made to stay within your broker's limit, to avoid complex commit limitations and increased memory footprint in the consumer. If you consistently have large messages that exceed the broker limit, you should consider uploading the messages to an external storage system, and only send a reference to the message through the broker. diff --git a/temp_dir/client-library/features/multiple-data-types.md b/temp_dir/client-library/features/multiple-data-types.md new file mode 100644 index 00000000..c90b7d73 --- /dev/null +++ b/temp_dir/client-library/features/multiple-data-types.md @@ -0,0 +1,9 @@ +# Multiple data types + +Quix Streams lets you attach any type of data, such as numbers, strings or binary data, to your timestamps. + +For example, with the library you can send telemetry data from your vehicle or IoT device and attach a picture or video frame to the same timestamp. + +![High level of splitting / merging flow](../images/QuixMultipleTypes.png) + +This gives Quix Streams the ability to adapt to any streaming application, from telemetry data to video streaming, or a mix of both. diff --git a/temp_dir/client-library/features/streaming-context.md b/temp_dir/client-library/features/streaming-context.md new file mode 100644 index 00000000..58515290 --- /dev/null +++ b/temp_dir/client-library/features/streaming-context.md @@ -0,0 +1,19 @@ +# Streaming context + +Broker client libraries enable you to send messages that can contain arbitrary data, by using binary content. Quix Streams takes a similar approach. The problem with these messages is there is no obvious way to group them, which is often a requirement in streaming applications. + +Sending messages using a broker client library is illustrated in the following diagram: + +![Read and Write using Broker client libraries](../images/PlainBrokerMessaging.png) + +Quix Streams creates a stream context for you to group all data for a source. This enables [automatic horizontal scaling](horizontal-scaling.md) of your models when you deal with multiple data sources. + +![Horizontal scalability using Quix Streams](../images/QuixStreamsScaling.png) + +This context simplifies processing streams by providing callbacks on the subscriber. You can keep working with each context (stream) separately or together, depending on your needs. + +The library also allows you to [attach metadata](../subscribe.md) to streams, such as IDs, location, references, time, or any other type of information related to the data source. + +![Attach metadata to streams using Quix Streams](../images/QuixStreamsMetadata.png) + +This metadata can be read by the library in real time. You can also review historical data in the Quix Portal, if you choose to persist the topic streams. diff --git a/temp_dir/client-library/images/Checkpointing1.png b/temp_dir/client-library/images/Checkpointing1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a80ba6770229fccecea1a47bbb65b5b0fc31600 GIT binary patch literal 37695 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 literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/Checkpointing2.png b/temp_dir/client-library/images/Checkpointing2.png new file mode 100644 index 0000000000000000000000000000000000000000..4a7fe4de2c3c480d85b427626378d87ddf49f800 GIT binary patch literal 42132 zcmeFZcOce(*guM7R3b_;Z*{vRWsi^*;kL3OW$!H`lC3gA>9+R>8KG>l%E;a$yJ07a zNwR6X_qE>d5H(eKibM2=2nYx$unMvo z1Ox}L1O!C&WF+uQO>^K^0s<5PR#sZ;j=^#*d8z)j_|>gsOc(YrIvs0u*@{|?JX`HG z`sBmwfkcYubELg6*Ck$^l@(xX%|el*`FaWIuQWWd{AM7IyPn~At4uNCj*=R7(Ek|c zM731uk#y{V%$~&_hpD*FX35V>iZ@0*3mjL5{`^FpnOPp)uAdg(xU^nBf5SyEx?{HZ zYXAW;ihz(zihzj95C3P76b&Zi$zMN_NxeTys7(Eo@Skt?KKBbEz=VAGFJBTwHqq^M z^dEhy#S@5O!;bvN^InT(G%v~DBa^-OKWH0C5Ia63EBo&ml1ZVi67yg^+J#=e**L%cuf7T_EfDjgvuHz#VXJDd9gQTDHZ4; zA^7aS+Y^$_gb-jju8v}~|Dr1m13jq79{-yKYqA89QP1pXIRE0cS|kA`7jyd1fASvb z%Hy;jwq3J4h>HErshz2khQmdMtINbyKSrMGe$tw(bo$g#*gaM2$rM>; z+!*LD>iKi|RB2?X&Ct2gm!?5pD=w*#MLs|B*QPe=bpCu``6F%7og`v3ru=Fuxv)9( zq}Zz)bF(XGm86S(*6!QCzI`0xGi?bo6|i!D!6!mRc8G{dK>+B<7`S&4FCeY-grD!3mO+q^UCeV zF(Zb)JAT-^zdi(+kCj?K3gH!{J%1fFqVJwO5W}&%T+$C}7Nx}27x)EBnNo834m?o81W zEzcr38H%gD#=EujH5;k?IVma z*{{^dQs>!r|E&jseAqt&Uut@EoK*&3iStq%=F7h%uy44Eu9Dxyq}+wER{hs(R+g6; z@61Jd8eXH58-#U2QJn-L^=1}N?rAaA8UMRSBZAeL^<@CDf{}@9Z@U5w2zCSm4s$TC zd&XKw@YAA>e! zr__n|W*BjoNJT|OgDX~(g_ICaVgS%}sQo+PKE?6yI7i$oPK=5;2Q$;kI{b3K-&@ep zhe~yTgI0E+Phwql5dS8E9}!5lq+2kn6R=!|Sfcmmw}|q?D$1v*krR@k5%!((kUF?8 zTItXkMYGZ;DnF?fm_A>O+8bnXU?b21ls3^rrk0ZmDDI;jb${MqmbU)v2aSD$P*K3N1!ui=xoh7;PhT+ez%F@(4Q5osel7K@Fp-)$!dSq zVqw32iR@x&K13lr*qap&(FYIHwzjdSp8q^j6f5re^WyGQv3aQ7M5Ve#Pl`Cz6A$0M zj4Q>?vx>UqcJYYgrJwIi`MiIB z_viE6Sc!gc_+)z^1w-C243?~!ou981!=-=DcKG?Jvo~|QuH|dDt<82kw(c<;zA#_D zs-4r+Vwn9W{W2C$%fHx!vLOl)#)h8cW;U}4h(jM3aLoQFggvS6+UH03Jj$*pB-a9` zEMBCZXNJ>LjsE?WKm2ZQ9}9k|WUmrL9v64H3k%e*g!+bQOZ!0|WP@pQ^qH7U+gzWg z981o7i}n~;T%n3jjjv-@j#JYq*Z=f!l6-vyb&cOQy7Ow8kRF#$+VBs0_T8iU z`qJuTcv00r)?sXrl@Zj?Un)bTAIqMMcC6c+YcRjlk~V0I({m~D+;Euhzqrm9`?c8` zw;g-pH%099vKHTsLfv%(=Y^tqzC2g!WDYU=F@gDFNrOFUWdUj3o=H#u85Q@JO+=eo zS#%|^S&TH-+7%i^Ml~g)>)m{R>vgSg4eV@8uTDfBcV*8_sOqOYc>}M>{-v<7X9>D2 z1QHN`L`B?*MBufR$$f&ge&>s0GE;h2qVS0Kt$T#@fMbrQ?F<}rI?$VxvA0w-vi#M* zq-5F_)w;b`Bjd^q{dDF^Dl#b?m>^M|HEGD!hVgGoM7vN=uJ=f;CJ9-(UEdZ{l1X-$ zubnvGy6ENT-oHqYGZj;hAaffO9V zgEhq380n-D2JH@%%2URT#1vL~mc+9Pao9YI z)^lHC9-O*}2X+E~S1{VLI1O{a5c|j$K^A$Oo9J%P9(b4mmT+u|U@ntMHGo#*#A8Z{ z_YhCvJgBmX<~<&;ll%cK$dwP__CcZ?tX?~sEOB_#0dI7>xnAyr#3L#o^!Og3U_MH6 zD(>6Me@QJ2NwVMy=!XZ|1bDRh_?;B?5(H$sMrFkI!B7=MQdC+U5Xa9i*a$~QvWF`E zj4;Y9s_i}*A=&jae%RtbT;Tr9+SmYD9URn109hYHXC5Nb$M!mF5C!UPX9_?Yvp9Iu z*v2NX4_}~AP1g|_R+9vhcb=c!pP9l1c(l&Gy;=`wyT`|#g}iU_=drF?(b)cyp#7xiY1zmd?i0hfL`2qck73I@LR^j4GDMtF6rs4vQ+<*k5fpo^ty+j` z5njS4CTvLO&;1q(WN1t_u#f624amRXniJvbYX9-?%1%rYE6G6fPJbFk< z*T2t|Xfm%4hYceTWFM*fDHt#8n4;PA>g?ubk1tonq+4QViuldC9|ewtur>KfWrEx- zqpyg*UqGY-*6tP<-5o`~JGPr`SA9-5!VW<2(J<=!j~{JAI))ckeRsFan;)L=Ll%hY z6u6ccj^fvH^7~}(ZujiEx&;~BU1W>DCm-o868Hcc*t2+I=? zJY(GHQ&z4-d&0{@+-dH{o^Dn8_Rdpoe8;UKgj^LJn*=B?vdsI)t0-LhL*>0!M1)5jS})Uv5E6~D`(fXp&3&V2 zSn(aB0}15)*fA%_z#!3BIgrpk>n!r0B{S7lS&_HOTvy`!_htR4?d^HV*l~wfT^?VTD`0)eqWez3aQ?5? z)ipefaJYn1uKU<>oS51ByL#2el&AUkg+Avtw%FEtloDr^V$MIA-kuZg@9Sf&nD%+) zwQS0w`CaN7Le2+p@CAq~F20YG82Ek2<(k>lM?v}VgbwBYUwl1Wxvm1MYA_gsp&HGc;q=!s9)?d-|b4Va>j=JYRdU%NzRI>FCL*I4XkrgGU%Ugj9YH2 z^*R0WYoK3uy{a+gvp9EQs^&u4IxRPbW8piquZOb6SH>CpsqRli^o>;8F2^jxUj(u~ z_Be`TSJt@fj(fA*PK>STDqi94IHA&n zvLB6B!^3?x!^0y>l$z6l7F~K&awXxSLIUGfjdJIu$9iqtPDUD^dVageI9=}YE4F`B7IbjA^iZEu6n*m`vcups>iuVBisLeFcaLP z31M1``OcO%%E>SMD69l*mq?VWe5q_o}3yEAn%Q!=n@(u zLyan`7tEbKX`xN@bHbFyVuRE18~t1p<8qzg%})YWV(N3`AoPbsC3vxMnbmK@!XH>o zChMNdf$khR!lb&a1Z_W)QrqUfpy(QVP?4oZBxovA5-vm(Qm%F#At3(2tz?VkW6ym_s)3{^p@GYWxU${F`o^ zvy&-t`(V!zCDrw=*Y0V!RK|tl!#0ncjV)O9lr>RQNM^2WeHF9;vO9N7Kd+C{+-lb9@beh$ADqB3>MzLiK;aGte`252P^${ zo_F?tWUynAt~0vY#w)M+zOKc5s%c@IS$_cVaPSoOi4Gf|O{=B62SIjHPe)tcoX=eD z9YT03b68t@5Cm7Jo${JKGQlV-b2f$qK^K1wpM@nvfX}!RumZvJ_Jqk5ch+s_*5c+- znq-Ken$;NLWM$VohW}S2XO76$pV+Q7(1O99II4iFa44yw8C1O)trDYodE#x>AEQ7k zRQt;inC}C+jC=W3|1ak&U&V9y)JI-Ck^j8_^_aHX{!a{c8WZA)Bce>M3ICkt#{)8- zW=ay-bnN}@$EO$$_f?CPXsIEZu0iLYfItN$dRW7lA))NBqf$DtO$(ke)b{Bwv|XlX zBLT*a@S4mS7yrp60VUGd{oS{{);D++vGI~!E!fT-zZQYwHV zmnmf#WD$))jtSXEE;44iou;JAi2jIZigr_wl`LM`?wegZ5pJQPA8mET9O?GK_ugyx zZV&5dmEyb2%+DJG^`y8)#d^+GaK1|bARp8ar0kZ7N(pwX`gZ>L>o26Z>VBE%*4`~E zEi0ptt#@BF(5<|cZujoR>&?;5c>dX!Zo&E9j$iSpDmSmT`DH)ym>_7I6hX^v;MGZ&Bdo2d3QVX-kQ079w*$Ul$L}AX z&EMQ7m%dD2{2XC2o6}TW*VgCZ0vCzKasvcurY;KEkD*=WI&5| zHcD#EJ7}M^wnuZCgDp|6QIJrif2{n|&mLU|$+4=A!z%ezPqNcry}AiOy}8z8A^U_d zMv;ESIzdp*{1EqX*J)wfN4%yj*F%N`GGL(%IU>BbeztKI)$o1Qen&bvY(if?Dc7`Y zb9-F%M#{Y-l^4CFsJyf7G^_NuNDIuKdNJNArKt)T-#YwuSE*(9@VnVeT`vUVwQpX( z#)qAHpd(0gZ8fgXs{ADn!@2tK>vqV?-|OlZgu31pM7bc#RgbBccAl=VjzYGqeD9c@ z^LBG%$S$X5y?iY()gF0Zu)p(Z!`CTRIC6#y(-j-9D~R>EH%Rt0Q~#^&=Pk*BA(NxF zR_D4-A~w5Tl<_K?H*(f0g3KM86FQNFAQ1@5B`{M4)1!U z=H|lSwv3rXdz^f{a(Q(3)Xx=aQl<_E5BrqTAGV9CCMjhuuhk5RDqXIhaW06j*Msfs zYm4My_nm^5>Z@Bfy425ON^Ee49t4ymIxqC5`yX^UbH`?UaCqZUvm)=Sme&?3i1Y^W zIfV1P$?lS~DinI$^io#?oL(N5l1MEUzEy`1UAn|8FGtWG^&uNR{EL51AAQw3i0JT- z7E{`8_GDMw_OhiUL*+!_@YWA?@$x9S5({2k&U!iPtme$Ek{8o*w#YiP>D=I{4$Y6e zDls}{?v9tVO8v-E2%->1einWs#3hKJH_KAVyWl%2zIes=?Q|&Y>ajPxy!535zb=B- zzNAC^v9^N3CdPC63W;=fTq$LtZE{VYyCTQ`#9O9tAl9)s$8%jd1fV#31!X_AgwxQN z+S=w;Pw`S!8v+;&keo;SLmT`Tlt=2^N^|-2y{5bAkom`Dz z%1@6Nc$D=VbT~t+H>xJMh$T11M{Z!+c1W(e6x7e1%+7WwYc|Vjj&gsQt8Zs5Fn&W> zyWR1r+aW}acN**ZXWfKaioP_Lbj5|2D{j~h{?;Q+=EJMgVu3sJVfrEtM?7K()p0hP z44fTBuu!<$W`jOq!=9e4z#=geOOt3z+Zo{eu_>e&5I`>uy;^$?J0`;a)qeinmhR6L z`neA&=+#2-nmQeGet$N?Em;bx6{j>mc-0^fEl__SZ({Ib@3|i;ali%MP_|a~>4&(^ zz?5B!Z6nV+9>zbH-o2Y;wpl7oA06H{chwfvYe{};pYqWP!TX7cBe$`+T~38Vb}ocp zxKQE7JYw>5(LoT#PL+2**)`{Y6Osqjo?|GIUNi7HX=3fJd;-8@$A%XI5oQ&2LOj?X zPV`!NG1xVF^p}d;35F60)p41>m2p4Up1)eH8{ZuE2Jf$XTG~K}He+bb&d0$`t5f*J zl&4$3LcW$ZO%X-ohas&+=MuSzr;(X)lfM|8>f>Vzge(SP3N|}RuW=Y`Sk8IhjEzJ# zlJIniXF~3OCVfg1?71+LlgHiVS-Iu?JYA-OQVYf0LEcE>MX1(|1w%+z;U z_-u;1%){6YD*JM988!NA_UTUZtWC}jrLy5IX)0TRaXyNnwejG43<9Cpo8PoMuAZUo zPq<^Bn5h_;(=WU#-Qw6Eo}OQHjQv$s7h3T2NWx}EOVTQfZ*)s#*XCFZvW67}HmNsn z2A#rV?58|eZdGQ876~{1Jc{eMp2%+R4cw?Gs*}KQ5I5R{TCE=IA7er@)O*=&zY!9( z+0iKY;X~C#-&L+GQ?~v4BqN4vy;r?UHMB+G-NTV4^~IY%ej>z>uFt2%IkLdzm$&zGoh9HRbP5I>Xc2NbYgt3{nS-$9Z#OD z#naEN`|;>zl4~AdQ_Dj9Qm*8}fEw`Oqj7OUb7sMv9l3Xj+=&~uac+X&#)PoylY=Rl zai2H)&$P~$-O#n~ELXu<7xnL0&dm$CZQFb0nwL;G8q~!4dithhR@!r?)jA28=rorW zfk$(5kzc2aZmcHP5Z10#dlOd1;4e->8xOjzunCH4|(f9T|K7RHTe)kO^SUK zeT|Q1EV36?FcFihVOLI}(XWgXJH2D*@J{a%hIdYmdFKn?P}pa=_=5w5yZ(LUF0en) zpQ@NX%XVQ!?gEBl;8Gl#=GiOHnMY?5NwBtu><2drQQI%?PB)^5Du(m4^PZ$$@l9Pu zQ#{GP`2O9mgV_u|uWb=1C(*Ha7ARL@KVZb3k$$reHmmT{<%-^j7xea61!7gun+k#9 zEzRg0F0cDfEdcL$f707Za3x0R84#Q5|ICqi`{6*qnh`t4*_Xi`wm!x-OLB~JQttF! z9ygWeE*S7D1dF^Q4|ei?WIu!DKiPDm0`cI2MSbx8TlqUg9LM@uN|_LaO}lF!h2U(( zF_~VWjKMH0{b@0Pb=4VZ(!}sJWD-K9LDn*O!!FE1g$Xh2kpB=%A^hiy+sM|~xHLRi zf*5vIrO-11W-3RFmuv(PtDMF#OZ0!86!2R1NdZ4t{cQo_1>a6`@I@Besi^?ArPP+V zaKz)5?<^OX=UoAZw7dlvon3fgM|vD@Y3Gf|c_6c6;3c*{qu3Rf$y!W9npCs1)^@XI zpFzn~{ITN)cd}T_Js4aH!-X=!Mgv8{z)K7b|L?kj@Iu<9ci2OU=Rd9`7{(=39}5!c zO_l=_zSkr4WMt_Z-Vp0MqjZT0RVXewyf?M<3-1|@nmqk)UGtFS%(PGIanLECq|FCb zhF-)#JIo>GDhRxu>AuOa*sG9eq2i%LNJ^R!Pik%NOXJZED&{6|Nx#~obJ(v^md zSO-SDjYviBn-lmEPxQ;^l%?yw`g-(&fqEZeU!1*6cI_HI;*dkYsnrjHU6v(jC58-u z_|ru&qT`vsG<(_HQ~$&RMEJ1@K@MZrgY!tO8b}1bB@_mWFvX5ruiH5n=-(k_OwfKf zjtC9sYho)|eAj+20?+6Dw;aPqPE5cL0e|a=jKmQc=Jhb_p^8LO7^K< zFbTDgtT7@BH=T&B@g8}w_D%DrAmwk+xo->pls7ZqkD0MC8zwVFzJ7yNFMwY zh*Qa7(jCMrP&M3nko6hMZ9yblk$x0ybO0|YM1k66mH(Z%$3b$t_gkAPwb)-={`fwy zn*B}OAsgDrglgUgoPX)&Ju7^iCM@=$x!`oK^?nRO#4)t3rny6vnpF6HlJ@ERY_P(g z03@A%e}>5#f(^X!6?eLLSm%t`QF1${+_pmbuEu5FPspq!NzI<-q13tU>ty{qJl`Si zj{X2utc6NFr#7)6!Tbe-B5ePQNANr2yr9LZs)pWX|91wk5fjlWyG}zC3>B|5vENe&L=IlMlThxD`c%Um~ila}V&1bsb#*1mQIdt0g ze5Y49cI=d{kDc3b3&L=0alC&^#R<&YxXdw+*J!p*^pNT)w*7ei=$Wr2sXNMr)l26* zK8CQ*++*1``bmU_%q;2}gvcRLO>w;mpM#MSBCpw~U5%dJS#e)W*{G3Efhe*a304bY zwKkAy=E3HkdQOI~)$zBZ=6R(sV&GZe>gw9M(D!uq+glb(VUEOH%sH~mKzzhF;q^nc zy@)Y}(EVgv_@l{8ySexrR0IanWsqua;k<#538PGjYhEchSS@4B&$rz_;C~!aVa7O( zi*`?t3LF9=T~;Hva3RO3^H1f%sa=**bmLsz+?*XXw5gRDsT4Tyk@_r|lcV@ZeS{m) z^zY${ncBsb&|tSM=BfVM-Btm46P zFqSJoViE$&Vb$V;A^-kRD-x>XZOz1mYk&FKU)S!6}x-C35U8OQM{1wMSDMVa02 zJ+vZ3@-PYQ3G(+iamgeXAAZf*uYgiGPUy3WImZOK*h2D5V~IED*}K8im+%qunFmNF z$D{3_(`D2uaX$}>F>XylF$5Bk5D|BlM)Ej%=l~Qefxq;I0_FrMh9fs#`Xs)oRKsb= zS6zt{I7mpALx%4+S3}tx&v8E~QTRn2cNCWc8RpWxj!Sj3CH7jP4ifjjIEy8eL&Lh$ z?zPob5KsXUk#TXV$hevOvXHAb3c@FdaLIZDhxQxy;TsD`H9^#Uc)zid@P8HoAdP4G zWlllk$i2p0VFR@Ljnnas&x)Es)5gFzf)D-Tq0TpoovWtx9cq$N6Tli#Ht)FUtCROm*)plZX95!zDv-^3!>yQ&EeiTIlOLl~&0d0P<>OQ0z5zgKMF{3+-Fn9^R$xA)Kwx1Ho zMN*RXOH@!g(}Vb{6Sd>LO8+ zG~{`ZL0S*O?_B-L5s(mNBU(o55@GrAib3FyhUu`0h*?2rI4InRDh*2mULcv5UIHML zL@Em^98e`dS-i>x|NRwtgyf~^5hxjil7;`lbS-3x`2VT3+(b%BRP5hHQ-1$h0}3@IV0i1Q?^nA- z+ISLrf1dJa2puoA$Xjz2OqT)!Zml|R8i~Fd57)=HfkWxVQs7Si_%+E^m4dt#XZ;Fao5E{v`_bp0;4n*+4 zB=55ki|msl2PsX#fOGaRsxC-syNyN2UST8ZJ>a3qMPxnxrwfiA5m+ACU*|QXJn-=) z8Ymw#3WB0tw~PJ%i9|fu5LL>Lz@__$7M^Eq-6ux?5~aDvw5(}BBhJA>Y4a=T?U6%B z2^&TuQZ+2K11$ehl7ZgW=`wiCRbhGqno9?KGVxQ5-RD3KXl@2Z)fd_%z@Pm|;-yH* zo1c^sQT^`D>Vc8A%MU`isudvLNqd=<1X)B1P;r}!CZdRXf$ANr{NAr*KHr_p=d=9_ z-DXo62r9Ut3JgXzam6!Fsu1XKj&=w@_H3$$(DJy@ zIlR0{-9YF_5J58SRKbtnjp*?Ay(Ba_QhFvu9f8O>>I3kE{3_KNeo_rwgr+!&tL=*2Nynj&fJR9?dN>%Vk4}|g|9CStsR0f)8gpjXmK%8d< z*PAGy`@hwb53n!FA5Be!d`1FFAV|m4wa4dTpaU08IfziD0Nb7hbx8mQuenxqFeita zZ*o;@?VJq5q!fD%suA*%B?tGOq=@FUUL`tIgOMJ=(2VHy--Xh*RLdICyi|B1jn0B~ z(n7k&Y=mVxi%@zN4OK-7Z1pj#~a z=XcSrD4`9Wj|47PsW=8}9Ro~|$$ndj(|0(a6 zhx}c(I)e;c6wmH}OzAJAh#-Uxj-a35$q;}7mfY8V*35Vq#a#i;KKDvPYAvOxfi<|e z69Rj3&`1`i`K9jb1Mb!nI(mICB&_K0E&5^OiCWoC-)m1q-I|AmI^RgU={kK{EbK4H!Ip9#Cm>2&!wxOKGkatt6S}Ao%1sXA@OezMe+DQPsp@E{al&kd@T8=((Cs? zDl=|qX(+#0@8LzHF3&mIhnDW*3552{2%zu*R)!DH==E|1wP{y9F#+KW!tKv>OGw;oJ5?h%EDbthx!tFPC2ziRD^N}r9opRO0dZXW zK>a@sn91E^|i$W{21R^e!OP%(F2!9iEhzm-|d%nFiLZdUU8JT~vp1 z{iunlCZL?S4`>@jn!YHQ_HGhGH0v}t3M< z6j(yJ+$lc$>K%_R%_fegV#wf6KoPDyN;L?EuN-5p1|5~-oD{nMoVx&Me5Cu9A zu{YEKjL0ZdR#3~;|I&*W8_wiX3cE-qQXAzhBEyScg|lP={pfh5g_ZhUpLq$id(hij zt?p&wc+XIW$`675TR!K$&<~veIS^B&|=Bn4c7=mw` zkgnil+5Po)Ha&E)w5e`?!@((1q&0M|>k{qLFn% zk#VA79qH)96nfT5P{vgn!v||8r;c1GAd-{8wXs#iU+j~)I z?KPzj&rAAGR4t8WpVCyJ-cU*d(Vc(lO{8Q%@96`g<&dQ@L!d%)5lx5ZW)3KvRw&gf z9)1WgA^S!{6>^N?S~WQ>qKAMpnQHIw+5-DGVglOE^&+T<5`{Ml*9X7`hK|vGej+bE zAnr{4@BDg2KYBE>T>pDDhN%R`1mdRx?iUAtE}Cj@Do}`>%d8lMY>W|((6iTk>H_lF z41)UZ9PCEOXZ}DK(V3?R^!{CB=Wm68+XrQC81f$3^BZM~G2Dhe%AffyyQAJRdn#vN zOY?Y90bCG)NX!2_$C6=HmM(r%UpG27oeWdHS zeMK9o#8>~p7Qb8nA@>@loBg6-1sf3+#^+iv4j0^HKYWsl@f~(;wW+dYb|&&FGmpd+ z6WVdJ)^kJD-u~SS;|47_I51-6LGfhEWyA8Mp_fy0GADPQV)evz&L5wK40HAF4MgP4 z@nUloPnsay1`j*(_+d9u*op0q<(T1=$1R>&LLKt~i|iXBBfpm6(8v3=OBK&;Uj*`T z!?6!1uJn8}udvY@uiU=)u^uwTb!K@)bG>vC^yqr0Hf#5-`?A=7nhOF@-<|u?%Nl$G zD;~lxs<>CSGX|F}XA&k)7g?_bzMmA~%WkUa^i~>Lxt3@40x4k?H2>4Fu)T4;>dWxW z!q?Uc*Vg~DV%-GHx`zkFk^v>k$=*TLtKivax0vl4wJmmAKfl~_dmi{Oe^?y*Cz*3~ z*4yFLpRM%Hp3fI7Lp{dEU!$|c?=2u@ioJJ0)>`Q?ko0CZ7|*i@?QYK%&=5_3|96PqM;Q* zdYg^6jOkwlng1{)@obtuHxFl1q1wMq1svOFeoC!|}vg z`Z(y2zbs;oA}&7xaR7C1LZ+gaL?Ov;t<>E7P?&sHQ1$Os^1R!(?(Gu4QY7WmS^|le z9>UPu)P30;gDkwWQMLm!VrgQt-KN2G=t*6E(8H{KnPvI7)* znf}ZaX^{&nsHl=hwdWWML0@)inH0#IQE(L6-F!m!++r_ibA%i}#$S*nl?_e!qE!PB z)aa#xl?*h>Qs0})Ib<%$?o(~ADX=P3)q5BPP(p~6+Jg^S`G&Ym^NyG{!#}fzaw8mw zwgP(OL6;iQTzjD=Kag0gQp9hBjAC#sqjnhgYY6YaXLLuA-%)B{>*mt3PT{Lw{gr{G z=I4@$4f?wc=C!cM)1da|W5S9kDJ~H8g1MO01Rv4-@X^Qd|3 zmH(L;nVd1AEvf(2%x&^H^%0`s#H?RC`Fn1ivZOMKdLR`5a!Z}Wm?;fmonI}It7rUv zu|_Zxb?Pj(ols;|11Cg7JnAga(sbGHiu|5*l1ck*o+B2>lR~`)^2k+>_M;-)iO!3z zNe~6IK=7%-D>_9l{W#GNFt~?gLcq3`I!}DvwJ9K36?_&d;<%#AQcn*NQzMar_cJI8 zA`kY4j5GiL(ElG{IMq;w>CW#TYjFCm9Zc)2f`SXH?_5}R^RDGHl7QKp-)6EpRa<=P z!{uko%cCVh=ck8;*pyk>BBHFFHqo^s$UR= zSOwjMpC%3HQPcQmG4Rz|Q`B`8v;r4@R#2)ner90g_F!Hb??5Im}b z`lV0~e&aXyAKvZq951(bnYvl$RkgkWhak;iGby&}J3T+msZ+>U%5S_>x!MH=KC|aC zZ@h$ebzCy}z^=T++A-aiCJ*dJi<|qL=9AsqpGo}SKzxBa9f{?WlSkH5Jirs_9-ZXj z9_YF0SUWq&?_0N?yxRKM=lfIXZ(95zL#35s4#>G8d1jBM#d!$+G6Xw;G0tb%%{V^~ zNl43<`;|%CcKJ?Drnybehdo!0c0)lHqe|d2_mSSFmqxFNg39{%Z!c-Z^O-9SC8LYv z24dPuUPaEVc67akQ;wgPPgl`TFnVkiwuD-rWe-15^ zPo&wAK;5&64@y1ao9)FzElk5Y*>qM;j|s|IuzIa`33nWzy!4)qwVs1F`wboGy36|7 zPeS_EPB3u#B?+f zg7RIwCo87ze)i+we>vegpmJbmbN9>R$*tA5EWTd7=8p}yxa+sq2+llxI<+AePCq;2 z2sJSW=xew2BG-ClC`GDVC{m^et6BJ-y2HWQ1DF9pFU$ti_={RRzq6U@^Lz0gSH=3q zm$^6Jo3m0E6NeFcwuh9@8$@b#@l?j1G4S2_aj)I;(}tnjoOjQyZ-#|)D`WA_f0QP`SL6;~ zFJCku`2`7?_jEpm2D`5*qCe)B)6Caq_I}Avz^)l`E!H#gNT&XBm8T!_igr-U36i=C z+hczuXVhhsJ8{MhS7KhQ#e7RGcMH0ycB9o(G-V_+E}5bpid+u+YH(g?n$*YK#I)J^ zgkdYU*E%>;%4y56^bbR0BWs0o)TpfnnUNQ8FlfVAx{&NgLJ(PK03rahZzp_jRf#3ddA&RTB<5XP(|m z$mEF~kC!&1U569M$4nPis^(K325HE8SLxTvTYI`c-j4mbInA)dC$3qJ8>es6yEEdIuT#ZhQ#}^~ec9WlW5$JJ$Fp4Ubh9&Q$)LOu zx;suiWQ|}z=*|$rt^`brlZRVz7Z%@P0nMOCFYwG({E+9^4=s1ZOqxO7I4l7VpSjEWCI;CGKSekbQtswqW=$ zrcJ{4Mkg2HT>kQ0OzRqQ46mn#MiAx$=FGYN`wEbjkc}&X16i%KfC}YnSOKcm%%cGI1tyBt!;iYxkaZ#|P<~UoxEJT7<1zyw?#C%tv&+L9I z4^^uG45<7p_Pw(Lyll**;Un%x?57)i4^+vd{5Bu*68PI8b|Po0>;bSCjryMCx>6q@ z=2HR7YG9GAk`akM@+{sz;$KQ-)s)d#x(Ug_H`0jZ)@mNBKesI@8Fb*2f6oI82fHS( ztUeiiphKP@GV_zXJ>HSA;}#7Q;qzSq6eG#YwgzwgF|l2bj)$2-CzS#<5Q8iBrzMjz zq9Pm*J!%@UQn%$`Ng9IB*vT{u$Fi5ta~303A2=4rxqXo{c7Z4(&pv;wNhO%cK1Ahn z2glb>#6!sBBZLGV#!A*g4B=QJnybRJ6+SRPf|CcpG=_^FLY(&2ak>*DBuI8o%7W}x zmA-`r7De>}0|{k~iYDsT+@ z9Cei!h>=H#5xFd%L#2S+d~kXo;4B>bqk2)h@Z$C=;V8HR#rtIBFH>Qt$uc3)z>(}B zBM8aLhMyS+BBMf$Wg@7^WE+NSj6CZO9VdPO>-ib z%@Z8_cT~55)o2{;k3U$M>Q}&h6{P6q{|zYuzTcdtd-i|@Bnd*Z?^22~G*uxsE5(NJ z4o*==Tqi0&$yB}~u5g~`KCsB2{N3-hrk`FXE>fKX4@nz1_WWZeaH9c(ETS^5Yq^(} zxLA6Rq;?Yh3_q#6@KJxF7+~Q#F^Ghnw`r2cS7I`MMi9Q)v!nM90jHoQ-AEmr&fpk7 z`^e)3cke>Dyk80tf=(UlRv~)Ue;p>2RR$?;YFGrfj0}-g0nu}pQBRK|Mh<}f zVNClgh<%aRE)o3#@jSoMy!bIozJ9{=FwrOy-_n){At8!C4W0)+9A=gPfRa6+bV~#x z;O)l!)H5KMP*5@aSF0QG^K{1q}Z9Gu(t`i&6gzWd!0w+vE*utnTZ8lvgJaKfF#;Lmr6 zAsj(;q;a^G6ioqnsiXTO70bjapdyfytgdquLr4Y}kva{oKnm&0C@R96>j7Uj%z zhb+N!2nOrQE8YVcxPV{pI^OaVEMH)}Z}6r$^}ul{R0zlfw)0Q|NKFt39iE~5RcklnZ~HD-SsXxR}j1uQ5I#DL0$Mqu4#Q1KqfNI zfI2@^6+xW&Xv9T735+r!M<}k|K)r0Bf~6qF7=7-bfwg=ul>-j(bpWv9hmkEXkwm03 z9;{G_3}`aRK1mF&Aw)!r@R6e9irP{CPMSTbbDDcigCcfDZl`%_Mstps2)x~cepev+ zfVx3cuA))8vjL^@d+2kUGk`Pm&uM4LNZ?vdwkZq|*~s?SXcC z^9xo5GUC%lwg#};2M+~+QvU0%gBMr!)wcZOQy340q*-UO>Q}FlCB419HO?N- zynbG>O3$rQKv-A_>hzB=2q_0rvT)hk+jpnJagkOqXw2aP8s`b8w{7I?Nhlh2)hL>) zm(*277ttcKQJQA$Q5?==*3ZlzITpZar82T_P?|!;uqXL;xtXS5p!gMdy#DDGecgzx zM6n?*CD!0Bw%lRzoG)ZLW_x`9l-P}ztCTxVuh1oFUKPKFxtg*Zcf#}rMkN7FgHew7 z^jLC=SFq)MoFtSDIV<-BA3MWHV|GMcNvXqcSR;3aj@>lvuBT^KetyTM>5&-T8>E!X zu3;l}-dl`kenPliB)gNYlu693wNU@n%=dw-vHU%kG$E{wu}t+YPlCcIxLW6k2-yAw zd{{-(xXes5A|^;Q@b0UPGF&X+zl>x?*<-Pfo9M#vMO9nVy9R&021&La=B{~9M`Oy@ zEw*~;t!t7?w}|twu4UUP%cKu<>6ta1g@ce9!W7l4Jv5#9^Zl8mNXts|Ny8|}cj!<3 zD0FXoaMIu`a_Sn%Crz!VY@n~)wPK3PM5G-;l?kBtgI2Yrlt>vv-7F!<$Su;^F{#DQEEk+vS&ilM4EG#i!xLrb~k<82|%Ome0LCwDV!*G`kV)8L? zy1N~3A0?Nc#BkW3lHmpog)Qq5P6bQ_5m2-!_FkNqDOJjykK`W6-8LQb$obt%-EZRV zALgoT(BN)!oa;@OL823)B;VjNAvd=)NMmv97Up5CAU9NCf}oxfPXq57tIE;VSP8i>V<}jVN~aR3F(CJ&*v>KB%bM6t(s?^_bH6#)Daa^a;oRSI$8St0edJ9*|yb?v{X)M zq*++MzWZcWK%-aIo7i9NbNw$89qV+FyHGf_pDWZ%l^)vu;^_OCN2teyPfU4^wZf?u zI(qWV5a0y^FuQkEnF1NC{(W=?Az$5EbWyA1?z&{hSeflCPKnD}ic(;a-6*UdIdwnJ zcWIq!{35XEV$J|;`)VfhDbcG7RE>^T!79nxnw{XW+$j~OyjDj`~`Y~G- z(-Us2y)xWc(&--?qZc`=tTEHN2$#v^#Nq+alX7Y3st5q==03P7N>nX#3Q)=mQp$RN zcyMwCgs$7Cfjq32@gXnVKLBU=ZqF?7V4s|MCIhq>;MXeiZky&&qD|Jl#hPV5&=&qZ zGIcu>(RF9Y8?ot_wM2gzuehozv1#VChM34#gDn-~I6#dAb zJ1FBkd?>}R-!PWL&vp4c*36I#52$mg{x#B`HMu`iN}}@ld@nU6x2P7h_m6zT*_2GW z0j=}2=F9J1nygT6{j8{G%BB7#n-aQF9!hpLA1nb(Y4_RJqW zAvAQ+BH9yYqDVXmCR!VqAblTpTi%sA`dAnsK;~kaj%_@@{-02hhe`q0g?{szr!g(NZ< zSsOC$rNbYY55Q`@!FR1*b#>7Ve{}`K=ZakyH6RvwWhY#XkIEmpQNV=jrP$8*fn?7J zBv@qhhzIMhrU5ozD<7x_{?ZdLx8jP5qp#A0?~;ABA1`l%%n3)2UHRoqiCVQ$^ zf0d3k96@v*P!Vpklvs~nKFFdj+j7eXuA_Le>b>gO%{2)(uATez_A$$#7=|OmtQW4( zf;7Z=(Y+YbDl$1?A{%k#pSjOcaK68v`Qm(cH+*9uBrFYu9%qrv=1-~XkKnd7eaPng zX%?aS1UIrpT=n`$^QbRLz*?g@g$El$Bjp01`Wx(H1>d6~a9<#jtEg2T;lnyK`9iTr zQsY6NUyUq^?(P*{@NZ0hVYMPx?f3p=Y4THjkC?=o;@Xki{@Ot5AFV=&bm+b?^56b4 z{l~tGmUsU~#8w7isYl1fZw}~BwAeBZkREM?c=K#*{dU%R(o-En?`!|wdEV-22p^|Y)^G@<@CPyb zL2cBh&dt#d8s!AcekgX}=N6?YuI60lN{C02AMc?So|?_M#5E}1y2@3(a5`SlHb(Ex zhX>Ac@s?vJnVmwB+7LK(yV=O{2L%zx82rxP&RNt7yT8v{#)P-Fa9EhV^qjJWm8%w* z*2Rjjk>U%~TA2Y#muIzXaoe(PU&dzXf|1)m9;HL?C(Xc8bN;hA-{CQz%s!vuS@>_G zffb4Dnxw@jvRMkZ#-&Q`ZuWF@jY1-O7OaNjrX*cl@g7rgyuK~O36kXoap;?9YjEsZ zj{r;Kv26ZQ;KhO<#F~s_a;aHeE>9_O*Ur!#HN6x@$SWV7c;+Qs%849QM6d+0-exi* zRh^Ft$MF~kn5IFr>EbCdx997YgE{JO_ZH@iTv)`1#vsHlEG;cP;%Ys1?)ahpkrDRV z+S=|~&E(`{W{HEK=#9~|;V(Db7CNC{}!F4ZP zye=(+T@XFyy%X+bjKc>p2>i8Rp`NstvVt{^M#QaD-WV5{Vc{0vx#-xEL)U1+HNsEQ zLU(FC1#brqd<+}qZF#%RE7wYwVe)c;?!vl_gM(XG`6rz$0njT;1LH4zM=FfJQXyJ-D|j3|in3A0 zg`DZ){^u?=NL5~U6(Hse2hpNHHFymX=KDE#HnDc(N<)(%Xp zrx)vlrc+7QPw@)dB#zW>OntuexT)rs$Hk)w#@$|7>9L(~xYBIqU}RL-r8L9~p#o7O zSCqS)6%{(!zw?_iGwX$lBDfNKnA{?H#Ye_V(HiMzXEPM8u7~g~mF{9bse0Cz9%12D zxzI>Wug;^3+z>{3trD(yOZHt~f6wSpzvK4SD$twP@Bv%w#9d@ClK+Fj?oQ$Q3wLiS zHv5YE11q?z~cviOY1>j0}svbmcDPs6SkRU_5lKvEZ0hU&?g|*))nX`-RWg6%!0L25yRl9WM~D9aK#ZxkLw9?DHxScTv2`OwKs3bg%$XGy_~Cb*Zq0y+}ce+ z6^+l|*p)&{m0rG*Y0oM)jZ$nbj_N4Th!L`8=2wwR@+k`wGu3t$*^DyAEoU#~8}8(7 zZ|we=mJx3EIzg{*!fArTJ)!@vqDO% zQ+25F?EOGTuW6iJot9&+ZMhj-}b`}^MCy8nEC_g(26Z`D5_dYvb zhfdxLQGJUNnHd-PIG|5|F7{3qY&yF{{P3fu^~Z=n4z8$Fq3Q8TO#e|{dE5@%1=XRz=_HMB>T3yPK)hR}iSd81aWw@Og!DBaIeZ2y+x8rZkS+#(wo~Y#IIqUi0S2 zr%Rm3@0|pY{N`o=jF<*d>XZR+y^uk?q1^UX7-JTlafIjBUQR`S!-ZKrF|(SILf9JR znn{M`@(I7@ZL7+au-V;hi%Q|)e-h`5FM&w#f7&xbJ%L;om|5d-Fgk3BNzOeWj=e+tHd&6MQ)`45MruM3}h0i*}4O$hz*d% z)DF_G3Ku^B4-#XZvKErh$pAP+N}+6luBC*Ilk*B|>h=o{ZnUS%qoUYS*E`n1~-V0g` zI6N?)`TX-0m->AEg*@4qqSdwh-hSM(xLR*Hb+5#yk2$nal9lcE?YiPr4xVzhyefZ| zBJ?3DlV7{5i*q_4Wa?0M18-}W`)!Cj9J`cw$3-v2ms&IH!_vj%gXs1vvHh@gag%QR z!6|)jIvJj}l{bi5cIWjLz#QUN+E`GWLa^I+*{EgkgB4LHID8C!C zxd~;eevF{CX?}DPvJgxF{G^%Raz%G{2Lu2j4#MDZAa90+sJvH1TS_6jbR>M_%g>gl zEf+3WCDm<%nAS=^2(?Lr@({d0JyPl7Ei?SkzBN=^*vFY7Hg0x_ z79iwZk5PJko@FxXsgen~xr;_$7M>ro!qRPXzuU&kP#dY--YfL0TgEby#q_Gik-V}E z0}mH(cU*!VZ=_7(=yn91AI3=wnWgSqE03wHH}}P^#vpYQ>HM_VxMvOIXVv6qb=&sv zcYM%k9xVb45V0p1W0R z?9W zdK};`8Hx~ye0F7^Vp1(^FoZv@(=AI2a%pMJ+H`I+*d9SwphmsBr;v`MAs#ac)%p`sV z_SAAsNmE<&8Q9N$s$Kkr+GY~o+|1hQ2QVjNg7~QGQUI(|*xfUkr2-^QI!$iKS+TMO z?B1>hImd*SGt&KhK#={C2t#OGW4#VVcAh}1M@BAYgluoonfF`7$Bu{K`MbLA^?vX5 zm=dpj|B`lje-$Bs7~!{z@Msj6R>20zx@n`}Ps^he%{4GL=H=gNwkw1mj4;ZKkGN07 zh^cpDyvF@vI(3k-_BIH7Dan&_n6|eQgFZvN8*cgopPfgu7;{B;u*0R0JhcV4ftsHzIfTt=*}% zQGJh(FowQgVwzE8j2GcYwO40?NLK6B)$tQ%0Y<1hF3S5gzG^8W)<35;r#@0BvUh#B z#+^2P%V#v!TH5@(W$evSd^1CsmI7E&{fs>Ph+!oP zuun({p98y*^R3xaKFyv~UCo|FysCz|9|=6JgA?Oc1|P{4-`Ty5TpATd3MAt@nYsyj zMlbx63*a2RSBt;G)q`;-!ZK9LYpryD{o43qJiI?J5alz28onxS+g7gV)OkU6F{K0j z#wUzYaYY5#j?WCNNx|f_5t0ZmF3RznU$~k=u(#fjs0WSwNb0`<0vBDBAfpfjoI(AK z>cp2QP5*H8QA;@5Z+5f$2h~cxkalmsxK>muj+LLqHy5u~Q#yQR!`yaO3Zd>5(^>W+ zZH#L+nxt%TiuK#A&fb_Y?pc~}pe3#1(#9~zVOfob?HCE0t*KaazY!{G=L|44^R0Jx z?bSs-I6CmXc>CN6^&XXPCYt+ZWca!G1ILtE`je}|52#pqn9@wXJAjy9g4h;h$RAht z{CptCN00HF#mD)lvcQT7#1CeGXnZqBS>ot2}v=jdCw9>A$h#{`d?rA6> zmjpFRBvtlPbYc;K>j<#O))d5dIiDUMC=G$B=oa}~qJdZjG53d8amdwx`SG3TttB55 zas~h1A@k_*okt!lbMd`d&UWE;TlQ}{_{*|2CYpz$l2W;96>)Yf$yW90=A5&Xr1tg< zJojinMMyrSt0C`QpSd!>JQss3_Ms^}xHyb6#{{RNxlSoao_36vDBh*8XC3E!yduKy z;iZXfcD4`n&-7RpY-eDrR*zD|Dx61rF+h>R);(%r>us;kgVB~o{V`e|eqgt8W6V%1 z(t$jW$8_NnKkAR&ZDdMUC58 zKZ}YpwcbtA>m3>v2X?EuKNPV7ryZ5qF6`kJ!db3agIVaYG%)5oslIIlP zc@{gp>#h@{THGj{UP}$19SKK&8{nPJ{^8dBb3pvZ;nRCD*DC?^utR7F;}?-9$;C@E zTx5mzt!iiQe11goPvUZrAvn(!{M1sjn!b~`wfw-K#v6Y#QlTEXBteqvG37FJF&_Oz zAN8xpud@94H?EeIo!8-Flx6@kIpL!i+@Iy@{HXh9+34H7^1Sel&*$eA`WKT5@965? zRDTiuF5(wvR_R6g>Ni1510c7uJVJd%SA0aT>q8hKD_>p1zvXq0u>%9gZ1zW(kBhZ* z>*drTVC|$ec8PU(kKPY|IIn4m0`Z&8QgFqA@~`*IME-lziBGXrHu_D>qW5%YBzopd z8XoSwlv|1EpCJj<@9|Ts_*x3G@O;2s0v|5}94kDCQIIUus>^~jwvN`V`FHyBpB}DC z1dj$B5smgs7dwyU~}kvve4u{r(0S$db>2!tFcPu1z#2 zVq99ekTP{0!wPw}D2*1LQCtHwxM8q=>YU>#uJb8l;&Qevl+aK6pisi_F{DKb;MkW%x>wd8iWp|bX zn|{Y7ibH~D9^j#SWE}ho+&hr8b#6m(6G=PxEmmK18Lhg%0ld3Ns18HYXufK}mo3F% z!M(lq1Rz-lrTDzGHjYLvD6spxJTxUgg<5FtJSN1Y3J&v7Va_3E2revInYt%$t2f z_A8zOa2Gpe^kp;ha9_0FYB26~Q@+BpOJGtrH4b^^flDtAz|(&Qsei)K;}5LNdD;Ra z094?j^^f*_RY8Bk}+^43T1z@c;xV5u2<@ zAh^6+rMQ^_vkJXYVEki=Jssp&Mv+N~X(wIGTF^mO7zj z-PQ&~WY;Wb7&N$BX{0K5m|h2j0DC3kb5h@@&twuja#-neatGSTk~c8n59*o+JL%mD zT0UZkPaiLYxHq4q|EwFhuP-Q%SkZYQraLp8!swlo#DZp!u>B0;ey6mM^&tK4lE5;o z8Y|gcv=-n#<3Uz5I}n$f%fyfv_Me|T%OkdIJVad)Vl_?B@+TddzWTgJ!p!1CQi zmDts(UVC<#{c%)%2pEfyxnKLnU;+zLD-JV01eMmN7qzPGP=O^i;FueAhu%_jA&U zRH;QC;J@J6jW>gaxxk59yspyno8Z`i{3-JrvrFu z@q4f)sHoR^tSa(_TY~us=<>8lQGL1#jwCqE{?W%nuU}kQFw>Z2O_-FDm_c1}fAIxM zXBPT6)1AI3)Hxc$Azr3k>3PIkwP$2C^Vz8+A~v3loey?~?b7vm>UkwnN^w2qBgK15)wM<56aLtj zzD2j)6yG?rZ2Hs!hx&BzDb@?SY2nX5+)&U$38TtEnw)hQuo#5Ur9!~$o)0*}#}B@z z=oUfA-pzW2SP(?$kEkU-n1RhJysgJ`l(NPe%-xNt#0`n?)03-vMeS?HV3D;mgSNA4 zB=+}E;~`gN7e53h%g4q&)}vLYOmn6`wLP`92hwkqiW+hI%8$xF$vSy_8r`Le!BUW6 zH6tA?A0}niPIvLgd{RsH!;g;L*}TG&>*bZwKBIE~_)dhgP#R(rx}Q5&s70l6i{*hH z`2k+_riMJ)#yHl)8yiV?8lk_c%ugQ$GE12c{12aDHLHIGYUUPq*rD3pb_ZDJA2>Gp zs4TtgSlB;(PsaC_D!v<826RlUL~)J5J=FfbMz6U;JcaXqcG_+cPO}%amIrcW&z4W? z5p5d!mf?a=KU4xY0$H}z`D{+H;n&&H&984pcEAk3Bl50Qf_&V)YT1Ea|Ayq;)hnV@ zu?7>yEwF*s2qXyCPy)yC#}npXZK}Ts)`wffWJm{cVRjNRm|V>iQ&Wu3H&=UxEARJ4 z4*BWYdn>@HxO_DpscVNXLRuo)r*Dg|A5x&bC!Tg^QI4mhRa|110)1Z4QM3dTF?JTk zxa0LUV~ChKMNoEjxsJNUX*)*l=+PnCUAI~lOT8N3NF<{I;#2xIz4*OxLfPBjYtgwF zL**xVCOp8EKfc5&=kZzgamkxE>Yt)m7MV?4I#FWU_m{aJ=%Tj9?WW$Cb-|MNK@PvW zh>uj_mt@UB)`x4&!G34L!L&VeQP{KJawNK@z5YgYSchEXSFVN-pRe^s`~aBAtxWja ztP!xn4=<8l|KLK~d?U4Ib=E>Qnuv>9g;FM3(bV{qv`6jCN2k%tVP&&rzZzXuv>W;?^GNaWf4PnM3q-o%9lK6Q?#IFy?h}R;YLt_XL4RL8Qz>Dyi?2Z>jp*p&vlIZSI()ys5YoFAjGh#B21g_}%Gj+at8vho9ew?@a4 zGri&ut?|yNVMDo6E~^z;f$ekX+A{SpsYHzH+zX^YmAX4N744RVpmvs@O!F9Obey_E z-{zRG?;X>*f|7i?Re^2$Ocsk-{`d?1txvcGGPS*B-;8)J$pK+qgE4SrWA~f7T{_Lf zAC)N}p@@x^tYnms=KT682UrFieTfGS;H2BhebX-8Gr=8YIcNzA9#OG6a)`+89|AM( z-|@WNfg^LZ6%~eZa&jaX(V}!1{(@T~Nu(z!m zC~0E{C`0I^rtqbA-zroiT?)_b;YVueZ}I2(P5f#c_A9fjvwTEA6nVNI_TV8*?PA*i zF^lhdKP>j~vZQslc>@mO_kLA~nyP96~u9Gw2 zPuI!GFEa@Ve}3KH{i%F@+}#UkYwv41HL4N)&a(61zjaTf7lUXWGZ_M*9`4P2$(wXb zWIKJWi_xbe04sEq?i!+fup+|Zy`#tOA*R%P0~uay$i++q@=kPA z?V*?dWL?Iotnauy4>-Aqyi)>21Gso$l=jkQ@hC2_(%>!L)_rqr$gJaZDs3ec316Ak zZpK8^+p!zIIv$~ui=X~+{70fm#EBCEzixla)9d-c-$E*FsjHR z6Slt0hgm!qP#g7%RSqm1xohh>Z~>=}=SkUVVoq@IbMBt?PM!aj)map%pIy%j+p~;H z#F|#X(>{wD4YXcS7SEbaijH&ZFM0D}^s4_B#;akL)2HW}cwov} ztPa({S{pBO^3?@byBIC_!nbA)=hN-em(p%BHvKQt{5 zp#Q%Dl{QkV^|rFVGVr9Z3)xR7GmHv8-r<*x!ixT^W+gT?(T*5c77%tG!gZq7KrBAP zPq$ZgHtm;)8_j?MV#eJ{lxD7cf1s>_~EKjV{ePjy)jy9F1gxRjI_$Sq&YHY4G1qfR0a z_}^K#FH5*EtrC=vZ^j>5efHEfkhNM`^)so;YD7APgUb!Mnh@%q@!vzyE8eWv7jEIA z4TfY43R|^>1Ym8siLaGcG#>Eq?b$u|rN4hsIk!ls?cFmHs?5BZ7^}E>xtAV899VxI zm?xWD!I8_MYI2dms*RTgU&mm@-S)Ug z4hsBA&r@ElRza>I>l$usZ5(nz2hUs%T?&0+sJ^z`|2sIxltDKAnBit1P4WM#xvmHpV5 zfu*R?@VFJ!S>ZQ1HcK$>(ivQ~j!o@p!Qq_@RQTzI$rj!Dh0vSbpfGUxR(9*6rxM!!h#o2hng2s2M_V&_kL-e%^x{edZgFZBrYs?V000tFw$7VbbtSS=++(PONZy zduq$ApiHH3X_^OO8h)2@rvQ(iO*_T*@VfW7&zqY!Z<>YP;@iLn7A+rTwSS5>SRoUe zFxq)|>HPwtx>e2iC}-P?6j2dCd@+ESM&?>jY}A4rU+=xuoXzJ4{S61pbu2D-8M4pl z^JrcTh1t+LFi2Rmy%QOb*4Pd~YV^zJIp!F>D$<*`eoaE9pcnC}M4{(ayBFIz6zbG? z-wyqyn$vMz*?z3Z16-b$i4Do~{&~xTRR`7pGs9pbaTr6=q{7*8axc~tMOboUY9ik4 za-gd(2o9Bl$jSJ`DbeZ8@01q3($Oacu%St-`N0J`lJ^q*wAA_*cbDU%=^9hSIf-fb z^uegb2?P&!`hR%$Jun6G>?KO;I2aQ!(K zPma%$0e7cra_N|xxVhUx__olbt2Gb*fYFe$<<%@wU z<7jj3VvTULLn%L|xWL&c@@CzHDp>J`|8>QY;gvbdimQ4fQC%w^tljGwZ-zTAh3h0B zj~YjH7^+XlOP$8tWA%GWfZXho#O0HNF!4=FsGG6!2kPF&yM!fDDRutllh`BDS$ z%_X>KYh2L}-oDo6DQ*MH%5qgja7JN#v!`=Hd*ZN1W|Pol%}2Z0 zP9_;22(oPau!=MTFc?*+z&*|&B|{3=UOoS5_p}0JxObi-wnMIbej;A3TsMl0UuTd- z>%-)k6xVSB{`v~(I%|DD_sZUGlp%y(gYm3_u)^wbxg z5$e1K`_QnA2T^B-MP%o7Y~-ltnoLdmaW9D4VI!mdSYoc(q-3u z(}p92fQ3f3d!+W?svsLCtq8lo&2Ao@^?uS556hqmyYW+PDGetx!>6`~C~n#2`qR2? zDDd(R^=LN@*ZGurWAuR=tCFo(>}$cAgCf zfpHFwLob^@NUb0C#ozVQPd++`cV4`~!;N7K%L^C{ALy^LoR9MNQAL@2Y}QLJwRcyr zOkZFmvEOZD)1MtTUl^_LJL($+VP&-M`xvHo8=>fDua#fx4z?K;Usv6Xrct*@&aUF+ zH=A|SeX`d;Udei?{Kksd8A@?nGWy}KMZxRI*ePFlf#Qj6X_(LL)-8KbIZ94ah6~HY zIUDIHBqIdWUtqzy2mxW9gDb6(fZKZI{!*x@-!7MXSNHPQwH2dFBSl(^7j4o)#m5*h zwPo$r3sOJ(H{-^!(l!#wX%YyFNihknnbqOAUttCNpGa&_w(BHizUgG@>gVm}xM0;I z+yKz#lT^xXM73eKHk`cDdOCw<)Bl{ag45l?QLFcgVUzU=dn-e2=TMKzq?MThuR{qV zW0nUW42n!RHYI4Utbm+8tOa_q;6}sSc*hBlmnNTWhMRpAZ>p(+tbSC-MnHUr7pTu? z8VfRRY30?`@LYw)L~5KUriNNDwo{$@0t3Yd&$7+RklI27tgnfRcC+5rn6KO34^&U$XmgnsE}}7uYj&c&2ESSNU|kGD zCbC9jmOT+#1yC@j>nr)IszT`>LABN^h{%Ie!Rs7BLH>lHumgv)*IuM~)S^rSvpRp^ zuh+;Q1;7{D`C^OuKKChRFEu}J&jy9Lv0FH;-k4~Qsc~-a8@cG{sn2>LjJh~cxqIE5 z+-E&+Q`fy2wkf)fG89BroT z91j%rir7)B8ECij&ZJ=_lLaw~{-Pqa0ZIui2tHujo5` z<;QR6Q)M3hc<@Rh?-8_dqjP31kqW|mf~|mmuwHO@`sVq%;$)c1rQA5~rjUd7io6Va z#S0%Fb@=;@KtNXj@86y66v;EFh>r&4ly~icf15{Lev$MFayDaGqk=bn;WOVr@(rGJ zLpjsp>_Ojw(+q|8?b32q>QjAJv<0MK)vFR%5tdrwD*A?Ao!F>GkKibI$ApDbQjev- z5I9FXW_o{8v+jbs8tS|D4#tK)ScmuvR%8o}Ue99&z(>K~$N~92^vaoV zS1RVMc;nyHoMyd|$AvLazd0YZ71L-Jry+~j>ct5Rg z7sF(>f}`oe1;j~+X-Ex$hQBUbc()V5cEfE`cc5anf~ySP9PI(S=$S3`_J6+zit)6Mq(%J6(L%4i9jKxMgr2k8tUSG~NDhFp*(GpGX?D&QDyZAvO z2Q3(^wLr-^qd3m+69am%&(^-TMcQCG#9CX{cuWKxB96A*Z6GJ>ePv6E@S+QewpM4E zJ4r}t3~NG!Uu_}H64ber+xhO?Lcl6sU~GKa!q$6f+RNTMzV`MToq;L|bw1C}mqqzo z-%~Mc27Q;~X5_uQ*54sH6>7h5rOsrSDDcKR|5|aD8DxVFc29FG9JTO$BzwQ6CPQUeQ@SvRqSu5v z>?5KLqF7h2o(MK3r$PNR9CX66dN$M}BUYB3T@lq~2!-2ird1qc$uTM6j_usDIex2) zJ{hrbhTj?Te~BC#NtH*nKaE>)*57E7|Gw84$Uoa8zcA`|J>qt(=R(?Q{{6Y6yjGAU z@2Y8hY#aX={17(SuE67TL6v!52_C6>j)91fG*kdc_nfpFk~7v4?ci8A+pQ>A;aCsM zT>ZR4&Detc;8*z`2hO+jqZ+uM})=ZHA?sST|uf!NGD!ON26 zc5}!$``{(Y&vGD38(*}N?vm#om|BWZkF^cFHh-jk-s!U(@{>^2tqgDL^X9H`2q}kM zAMYHS!|(zoeQtR*IJr^k!1DX;XR40CSj~e2tCf0-kbqd|EIW)bN-6oDTmTb;X9P=; z$>xB~v^|~tm04UA@_)1rb>!-{wWWlAPT`(^$kA3{JM&DO`Rb|8{OW2GD5!Mc9bl27nj20xVT5TPKDYvyvV!BkFr~oY zxz==LRP2rH#h~waoMPPQ`m566qdZ4ObiuW|{k%BCkT6!u64v1cE|+Us4N1wXy_lz`qSG95*Ymd zWx{9f8v%qa9-->uePs>U0_Vz^TJ_1h$M38Ccke43(I~ytJ^p*p|J~n%q7AHCPk@dd z(Sja{zzv`TPl-tp=g)-{u?L;t$o&)r&YLVJd4Cg!1|=jwVh(IW736akBCzn}I)5&_ zi2-HJqZ5RoXhwMwNa&>f7CK7s(wqw(Cka6NQeKqMlKxkbI7d!MN`rD(x^R(qcAU)j zIn`L+kF%%(fm7+AKPK?qC4=BA>_JL_#Jdd(FOZ)10B#I%J;?e>0d)qRo|kRwkJ^nI zUO~vIAU)jws(OMeb8GG#>o5Z$Df<^)U@PpCwb%mwuRbwh6qCrlMGa-w$pIh{&x7U4 z@bODjJG$(#ZFfP;)Y(|7B4-M?a1i%)9-kn*3M7>t9X%6QkWwh&L(8jA6qRamBNMo6 z5YL(eu9E=}e!Z;Zmo?l#>|DQnV|k*{^7NJ6TP<0nh;zJl;h=X*sCU5@FVK4h=v~j~ z)~y{pC?8VGH!2l8a;gTzSSmmi9bl7MPkI^r62?!92F6r>Tmb=)mmuz#1?o1{cvRq#&oWp5 z9XP;*$jR3IfI_<(v?^#SAm)1X4ICmGKqB^HyphFye44b&c++yhr<>6A+yQGLY;zI3 z8DBt-sppvI&{Yv22kVGEz#(G;5VyGm=z{^yCahtFLEd4&6|g4z>n{Qe0HEFiND1sW zYTO^#U@H82UTg9Y)W2mxP(A4wQ*gZ+C@Xb-Ov2F?DgK2F0O@cyAx^adC1>yyP7PouuB0}>2oH@d!`pc zqUrjGqHlB1oPsRO>sLPoDcvJo^EYJj?3QW=r>Q>kTa(g_d(UfXYPP`jvKF8Qa*$VX zukHI)vS$wg%#L{028av}0jH^-xzBWbiiBMh1fpu}s0J^6C+R^+KrAyqc|qw!u)~?j zgS?vpQg4q&0cKGKKuMLRsayZVR5SPLsddzIP#USkw)a_`#B26^MZjbe0l+fSfhuOU zK*`zys1^DO3OEWnL~6AF@>{i3V*mElYw*&!pjU#V?5^cN%rl=MWxp;Ac-Bx8BQT^Z z;dduv-RjXJGRj)-)xp*)J7Vded`%AA*y{=EOXok*>K2%Vlibw>MHt_qJLx`nTL$de zfJz)qU$8|y!O6Gw#~M`42r^n_mHgPMY{?KrcA6calWfqN4dI3tF-=Yqp#8bmMc-ML zN2~j&XaWI&$CTC=@{1ink%}BBbo1Dsf3pa(9R~Q{q`l(T&%WD>Mli~{p{1<4Y|B=h zqRA9p>bDc*HQ(9y@f;nk1}2h)*d{muI3VX;363v^M$4iq$O@xq92bohSf4v)W?^AU zoj@u?nkWlOGMA~0gX-8B5^CDZS|`LbpQmz{u(W;!iM88MGz^r&)PZWBSrO-ppq@io z>G=gQ71eNRPrT#3dxn~tPg7D-`oDe42@4|uj%{qz`|^05H}M*nI4zzrzc(Pp&_6z2 z^dbE8;$(A(c;aVJ@YiEr;R1@Rz$Q){_s5z`6N9`$?O0x2FS`aEP|hsfnS9-jb<2U! zg4r?@EpsDYi~|H-+(xbuWw%fBEg%$-9Em${0TkbZPFwYp0fQ^G69~qNgdl- zL1N0E4!c7cX+8<8fdO)aTW%QE6{8e}!#zEo+F%1y*Se^xd#pNpAQ3B30 zCG;0L_+#K71Ja1ZlvH|^a(a1y+zbk;0H;1jP1RQD14kf*2jd<^0qp?xmyjE&0(DWdsJ?mzyhR*I2PNZH0Prqssk{Yf1iUc??1KAd$G`T+ftRz}yKaG(gHfPK z?viyLXh6XZ=h$I}j?;6}py%tdK*>xO4AUNu;v^UaMWhlvG>VRsq=*FiCo3FKyP<+g zaPpzpLFjWC$ec4a{1ghFvqu|Ef;5p{2o{kx;lc5{?9rM*(I4+a17^Rj57bnOfOH7( z`Vwn^!Nq_4lnS*@oM#B;RT%$z0t{Sf8VoPK%vSe!66b+_65=B?hu#vRXNQ?su-5=L zH(0@yLlFX%vydbLziN{~HG6|VU}&o#wGGpoq2pr-f=vh zw*Y9&(1&3D3N$bRFz=Jm!^hu(yW>M)eh$jI(8x@|yx-jj3pkz&<&zT}_DaU~bOa#0 z5D&sAH>RyG9*^=dF(~!xncEq0NhH&(JDw5{j7spIRnWL;a`-{}+VQE!qu>Uk(75wU z`}o5F0VR0eVEb1WFs7GofIRIcWxU6XLIJ37o-SAfTD}AdKm<{mF;%EBQX>%9DB>-I zhIF5f9oABk_lyiYS7I-20to=+08K9W?MDje$%$YyFqbHB1OmUN0D=z~R5J)c6Gj1c zfL$6tUbX9mpkIeV=A&z%c>!K9pfo8z6{xGXO5ot6d}fXid~&NASS=fbUlooUb3LgA zuL0RJHvc{G%^t3|?0=GOP=@E_=1CZXPhQFZ65O|NdVb6Z)1XHIQT8!)s7H3t;|cNF zV@kbM2R-Tv&yhhr=7Syw+rNk&_egMt9Y#ee_#9fu5-^pPyfjJ@Xp%3Zo46CrUO^DX zq1^v-oZn*kvaC!WWJy$lU=GQ1Rt32&0>!l^qMDzPf+XnWFY>0rB#FYN*)31$u`6w( zi5qJlPM^-{Q5vcubSn9N@?U0Y3IZHW5*mN)44-9FnsG6}?=>>_j0Zk`4F^{cKL?5U zZ$?x5^ViRXDZ7p~UwZx(V6ElIuhx~lbeBCcX$+_b_`I(`_5Tek{yPJ+pf1p$a@6gq zmhsR3+yyqINwgEm5_S&ry%=zTX3Pi*Z)fZES)RWElqz}vXuH~x2NLu%JwBT=)%i|) zb`qTt2WhhI3aSV=+#jtz z#(<2$c~BqfHc{(5CWpo18d4h%4yNj{KuPwio>o9Zr6e<}j)MhX?cbz(X$96@dfo!c zRdY9>?-{CMq~F}YId{69Ob0r| z4474(tv^>^Ow=Xerc%7}I1>6(un6h^jQ?G%(e<&YWcYzkF*jHJrkf92Mt;zRI0l$}-p za^Haxe$SPL&K(dy9~3)~T7^8lezIA1)AbWe9g2PD(gxb>XegPh7bYL4fO}hesorMX zcXV77lknhiO->|x>Qc8JW~#Yq>ALf#IEAiMVs+az(R*rr#SMsr>A7_ai0LnZ-z)U& zuE{D9;%Fy;DPjVpDl#QOMZG&Dr^^;quqV&aqUuc20pb9wlmOl-Vee|uWVEQ(gDhbg z)3Z)}iobqN_`KD{CDW}c07STXD#P&}00+O={c+C{XOi_W3pP{`W&c4@(Dof!n4aim z5>czIa2TF4et29_bI1rTU~TuEJZywOPRRZpIJrcq692UufnCH!TA z8=5SY)7dbJ4` z2E$|g0E(r;!iHj5BS?_Q#g?``JQ7P}-EWQQ0Er(pBWnYFDo$$9k8^ygx~AHkn~OTO-t2`%rMg#vP~m>F_BjvFL&L!Mdeeq9cd~ zCy56)nUPoB8@Z&gKlgg&^HE~|NqXUn`6bB*iJgsA2lSDo4LyoF?z!nELhtJu01WN| z(8X@_!E5J>E-oi0CR0fqNJyxF`h-VMS*IjOzwe9oEjlKzPOd(BdSy4T5vUFCW-@(K zQG=O9-7E5|4U*@b`8Gq&{~RGhaNOyo0|J>wAINYmijKE57YUnN=wr?oGb13OIpwUVz#J4DdqlpjmYxe9i4<&AJEJxaIkgi=csime;L78vAlm^-_ z=s8eMO!+FAV7n3!lW5%nX}Bw!wf~DG`%9mLV`|xDnxGLCFfj>NX4b*s) zp^etDHugCw(s=0RzwBrk`+q=n?li0 z#oB-6p5uL%4FrIcp)<)-@M;`P2`&)vT>5z420(4*-V{`CgiO75(4c@_SH>}kg@AZ8 zxlUXIC`D=vPJ`sRN;CUApfEqIpRw!MOr(r!0$C(mO+=^vQsFX z=xBEPKe`Qm0_--9bD)c}u)k*ZR|hmDpk*{6=;9HY;h(laFP!H=%LXSv7txZ(wEt^3 zN*@8IM3aLq{?84bRQVPFvq=Gtd_7@d^BRMv=Ypgxj z+ml%gFt+nwzy2@=zzHgR{Jil;*hL5^r~6)=7ceR4b^?rwEym=ji`{K6gLqfR$k0>K zhAQvQjs)R8P{;VKeDv*BmCMBwv^ET`|<2Y25CLudM?c2=o>ed(XcUJp9Pa`bu zk~j2FSmoa+loO~r$Eb-30L+g_`A=5lCa05IXPbMA5`_)R#M0Hx3S1xz2^P2f#xEJW z162q!(T z$Wb{dzzv&DMYNwo9VT8PnNWud7^ElRGotA>2_-K7y_1Ck)Xd%7bT~GBD?$9KmsA4La<@eI53%o0q2?0+g8K7w&q|+gPzC>~D&AgWZ{KtTGACR)?kc4{ z>7NohNQzJ|!xHRaIm%Z;ci^fo|CH(lXP#^vf{oXEo5tphDkI^an&8%RrMTH4z)sX5 zd`~a*()@?gawL9rxe*8jj|*xhAEU#R{?s_eTr|^rQb3D*U~lIPlO+CAOEobD^Ys)1 zImSYwcU}z5@#Rm=Hc0yS6fZvcKRZQn>JaGi9N(!J_0jW(SGVwW&t`lC{~*2;@aHVN z-qQQI<*9}P7)*WdA5%yrqN^vO&pcaRKbt7Xb#M^;;;C)2szfm-1_Bnwe0?T(N&HrxxxFgs8Wuf?)TRgd1_gyZvInLB=cJ~2u zrQIpM^3Rcs5O%^0=e3Zomm*Bi-*M~`zW-|aV1NjVFl0t)4b>0BY-8RZT>ogiKqZ;#*h!jFz4Ve8>L@p{s!_`{X+yg zVI?>x?A+zMq==Id-~KROt^qTG9Hg9)GmkGBNo~ts%hV2oY~{a=5|EJ_5giA)b-unq zjr}d1z@OECDa{ExgW^0QEp`8Q4g@1$4xum=)V)lN{olq4O)k`m8a#4~>vQ+-0XqR2 zpFsg9mcPLK>3@0*QbGgMTjeYVfA0%+dB_R#mznieI|#JE2^-$YMJxWESPby-fiBT- z#Yaob|GcZzbP2fIK$q4dZ&0}3MEHMY(AGZio9~>G&x=~5RVD&#jXrSiR@9!qo!y)B zLdGuvWR~9F9*7%TC3e)*n{Lc+=CB(eDdE`Z1pPSnKu&YCc_ zw`8Wy{;}8Uc%5k?fOV~*(hGtrz}fohweMn=_+H>_7ki;ub?;b0G+oaS0vB|AB9C91>AMwkY0MqWS%L3NUvK&!RRwB_^glEN*ea3^!Y28-8yJ zH4flo`w7yduW-A_grfPb=q%Cx`!#?|0-cc|EZBiX7CY0K{2D^VsHM-vV5XDwfO~gs z9g1Q9!{&Oxf0ZW$OI|6mY_x#j-TX3KE=5GswX{a~|DO0qWpGG)4Cpy*ic9qaZHWEZ z29!RNCkgYBxC#8~<4NGkqk!wCVOCbT&d9$uIy`FC@I%S(?pXIoScClnw4XLJ5P9<-W9 zyVZ#k#B2yPWdrc>|L_D1Wnd;q?5mm|GCF!AWn%wM14I|W;S7?80c8K3JbaA4z#>5j zqSOD-BiI7Av6`4Uw1%Ts2(Z+0(l+=H;aOe2xofi!6 zehW1v_CbiA$b!?ZB*&41zZhAmg>u^MUFKVj$kM+jgE%GN;Ccpi$3I9y=8qO4K}_ciDpJAr z8|xp$`5z=Nnh?-z;6KI-F3D`Vp9Z%+t7G67WnHxd1x@~)BF&sBhzgzgtplMo*#%pN znfi|@1A=lySpB;Jj=%ma+@y6@{r6^pSOPq0{mmNx{gdn0gF2SU&z2DUK|IoaC=8O2 z*Jb?2sw%yF2_CYaVfww*fy+o32rP%(@6XQtISX>Yng4%nvI&36dhq5#cIVOH3Gfeb MRY$Ez<<_JB3lUX}rT_o{ literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/Checkpointing3.png b/temp_dir/client-library/images/Checkpointing3.png new file mode 100644 index 0000000000000000000000000000000000000000..bf39c2e2436faa94be4e0fbddb9d680148d16282 GIT binary patch literal 46122 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 XE-LVvtFyXE0{$3l9c@djcgFq?gzk0C literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/Checkpointing4.png b/temp_dir/client-library/images/Checkpointing4.png new file mode 100644 index 0000000000000000000000000000000000000000..f053f9651a861626c90566d6e21a99d199798ed7 GIT binary patch literal 41030 zcmeFZc{r8ryD*GYOC@7T5^7ndl3B2F?=^F%x0sq%}Q^e$^cQqowt1XJ^f*;w(Geh4K9hBzoAVu?Nyp zLt{h-uZJyBxP4EGWHr}_`^rQW5Hs~UMS14)*qGRjcOTo&3rjwT zqrAY(F6=+IWw8BW$hhCcSNO->4})HL#UG5k>fWEFSQNL*+uE*{n11!%GpTfCNTt#A zC3`h95iv@Nh=kIQh?MYW{n^d{Yzo`oe}bnMm5A_iH~)HP@AdJse%KVT|MX@(y6fP7 zS~G&JUWrB)R|fTTRw__gC4$?Ei$)JcJ0tab*yr{SVNSIf<1u zwB%_231*QT5k4Z_o`!4pe0#88jU>Wkah^H!Pv~{e_+i^L%0iC)1J+D9yyh{g{r@@?dbHMMxqo~w#e9X7 z2dmpA^ipOI(%qA5k=?*$pGo=0_srp}Br$2{EaI=T{2e|1*|35ZmHI!vr);4H^rcu)_a4^nPS3bp9$IE8*>#^|>!c=iRTt;u_zaRqZ@IRxa(_a2DCX6NY!E z`}2xC7EJHVzdmTO^s`Ie;g*|Q%jVkei6(}d5jH&;TK4b03x<+jqeozo16YE`GY{+{ zBv?r*Ho4OEN83=Toke#VHl?HaF+KmK)Cf(yrd@SRnjTjDC<&z^LURrN``iRhP-OK_ zX6cq*4{eM(uU{RRMs-%cWpU!2#rO8uBFm1GH(3=2j4NHzb#A>4Bv03RR^zqmiLv`s zbt_%eYvtEuF|NdIQe*I?S-$~I0zFX5SU6<)vqidH~WBDwUT1&Frx3~<;M_eA2 zXQvx^vf8xA@EW~3tMG)jE~*vJ#+3TnZ9i8eqkl3pk-r>GJ(^WiJor9BGXD~)tCl~@ zh8^(-PkYqsU*=rxK5&^nIqTXB&nENDKMO@ppJmiB3N^hu8#-yKl3Pm>`ky1RhRPh` zN1Wc0v*MTL-%`A52%!L)PMlOTQmm1sZuTYt7XJo%YQ9usm1s z^@#)q8(I1Ly;#jk$y)cagTulV{q2y0B$Q6~i7>69m!4A-xKl$WIV#V(ZIiv{xlUNg z=gQ@NeR0_o<UNqd~G!ue5>}+K-PiN&M>5DoED7mUH#@_m1C3BK5o%$7s@* zFD16|Dq(|IkD$yWKs-}J*z5^Ju|DFjr-R$Xuv+7K-9>k< zFs}2Mya|wKQmQM^dAvP4xBZ@9{$14h-(@rVJL1OB4nrkbCE005pLANx)$MFcU|Mem z@L)qH)eJx?Gbw=F-WA=PyTY7&&R=O2&4Dkv@tWjA!%r{V(xkf&K268#p8hgt-qkhV z?QeKBPyP8`TaC`#wH?E0C2CBF>QQ1;8i+qfUM%Y#+rTm}h9@_k+gQu-#!xm6y zc?B)`lX-F_);23Lbtad6&WaY&o!Z%2rM+CqMuw00$Q{UolBy2}lu|PH?FpbdiZlsd zV&01D-jdmhO&gzd-~Pd6(^GQi_xFdeL0RdY?iW34YMs{>dOfS2)gEjssH~}}S!!qV zHrAq*@AU^>>0}2fkbnB4YFAGE4^U@L5QQ9Q``V5Ca1vBe@6}C%Q@aYL^8~!y!+ETN!@k_5aTIk6-_bJE~~}2~W%)1Fg--*bIPN!9Xq)Q{*1G94YJ3l~36;LDjZ0`(c&jPhTb8RX&+q zu$bXO_eE0Xa6Z6s1Z#xT9t0Br&`&x9pSEnE>z^HC-CONFsB@8c(EwQ@5^`A0mdK5p zY)_TN0|bs=3@AVbV*!GRU(XqL33&A^>=T;Ij_5ooIUcOrzFmtZbpUqZ3pbYuAR^5L zL!&E;mE9$w|2No%RalrE6bnuP&RLz1jM`o7#xq!3RO2LkqoE8>zI>xTxr-YqP)1#J z$N_p)nW-=~pqBaU`p=21eZyOH#0eHzeKPQNlS>NO{xQFBArP_?{(E5eNC z+%+$q=V$`J6#)J>mz7SC)CLvi12s?VA|%etzqWlMXoU>iIV~;&ajVbs<^i zI8E_7bxtdszzdfF6kq789%pd^7K4)j?LOZPr~vKJQeRYXGSk9GBb7BeH-Gje$MRdP z=swGCM6dN^=>+$F=q*(UJ8gKatkij-AYe@=oHMr0<@*Z_hPW%8X!v*Y)>acog^bR% ztF*vifJrMb$O$TpZ&--@4^S$WU_~d>@aC(tpVA#X+LC*1aV3?5rFPNff~qyW$7|)| z(#Ff)B!4~>_sm89O1$7s)Y}{49hoEjqFU}>8bU_PB#j8v4QB*i`}HkO5m?HVBt!_? z)~WnVRI4}p(WsD44p!-llEzgp9&f#3Ba5n??Ts2Q+?#x~7N5@dPY;e0*s~t&Ia-H5 z$Pp!#Ohrn469;w>bNKkVaH}NmetoK;5}Rus2Zh;_)n~DbY;V51zp}+}cvJ)kVJAf8 z)4g!{b=&LR&nfM*>>3Ja2Y`>5!<7Ld^Y8n$z&`Vlp-0hK_@9Zs+jr(lL`vUK8|Y5W zxryz#7xTOr7HmUn>0uAKGkPaQj^_Uua}2^NeZO!r8-Yt84!o@{`tfzpQ&&h6c(79y zv*XyCrMZ-AG+kp`Qd@cR9}TcYx70KW?`u`Dwfd4)<-Zlja&LL2Ag-97IGoDsoDCV+ zdr4v|WsP|eITICJUG3PVKfXq@$@}6lt-e);PJ)UIrM54IBd2ktiH<*fw`uejx_92G z1R%KG1Vy-X5aEkb8mA_7R`{mE^&mm)>vd^4>7JCaavPjx{FVcS=3KOws)nHKTUVUz z+KIzI^sZND4+1@iQSyQ(aqy%&!O)c8Xb_`Lv4B&~g)E#2>LANq zn{Wo8!Nn^eQ}$Dou&sa}JR$C^+!Zz{W=GhkBE%J>rrrWD9bFvczNdyl0c(QyQcfTo zPxTtzMNZ%{A`*H~aBWgJG7zmoc_O?yIV<@dWH{I+Vq_%w2%PLRoNUqM-kIIS{BFV8 z(~35f@PrqhJj7qI-qmTuDiB>5BS*d}1`lR(+4mHuQxs^l!Cn?Hch*Gyfw5@8>%Vu! zZ+A&h^$N+?&tXJ=2F9hOy~VnHr#!feRg|<}WEy25J9y{4k$#82Qem?44gH$-RCO!! z_?t8|eHxkJk9D>^&wUJSL6_2edUv)jwE3;b~z#9q?lDn zxF0LTq+RqP9oRcpgYtN+RpQehNxnvobzAOhE9G_Puf0%>r02J6$i4RtSp*5jdev?^ z5g&bq_|1T}aZY~)CU4E!mC}ONLX)@Oa96mW9%QX!hbF~}a%ImiBHaCArMicKl5aCD4#wso@ z?lMz4&~{K_o>;fUnra-uQUmZz0QO;Cu`|mqA?tm2R(-v4WG~b#;T|&x=Tn5c;Bn8y zZnxd}@$5&QXwC0ubEM3`g#On-ka(~!-2}Kvb_sozv{&erda8V+A$_(0hdP(q#>$M@ zFry*Z#NbdO3>ltQ-|DN(9-ozRE~PSUDP}0gx*U0|gvWKn3%_HNSRlK(972bzjyM}U zSm!1F{5?Nl9#v9O(sFPA;k3%iwG(G-8#7006duS(BWiW+?&*ifx~3p;Z_th1T@@%q zOhEG<$Cr34d@+;aaD`BM2V~J1Y_d z%Lq4Q{DNBJI#aoUKnIEG?t%e)l2|Xe$CS z``hihjb|mLrLCWCkDV9(|l^wrwcLvHwfQ5UHr$f+_CJ(YeqIVc0`S_j5ys zbrYn_PQ2MM5-5__d>h_)DX5hO!||L8tFCSF20d!2yX8-Rxfp90&l_O#POeyp979vg zqvsGI*k!LV5V*qb5MwKp$8@>ahVfcQ#$;@0bwmy1J1g#?DJ-^!me8RF^7 zWy7nprJ9rsaoVK}rsbdCG8yLWv)7Z%HDZ`h5sdFIr;`0B^riPPFv^3Oq~-|WwRzqw zyK|RJ_hI53l-tj=Ju&EzE5?3mxkt_w2Rq(mm(;k0?07arDAyd>@dmr3%PodDhY~6g zzu;pkg3Thlk4}8y?Nb(r?=4N2v=_^WQ<)CxvrDbcvg}zGGDQu`C&ck$W6}z@Xz*^| zYG1N*SqWh*o5&6i`h{5Ht5_`bxE!+wOKMA{WCYCN4?a(VRzA~G8O~0@+OJ{45U0X68YM&4_n5pxXb8nRBx7=|!&$ZcT)?!T$-jZJ7__oR zhj&wxT*>!Gx}4Ss;ORUvf@TQd>@TAZ4HE#TRm!v^0M6cZ{7^gra25k)jh3EGWtH^2 zga;1ICB||66gdO(YZnF0K-8PO`@g+yPRoBeA50!&UB=7%h+WJ@kfsB3>+E5nT*5Zb zHx>Jk^Ms*?3UTBe7&HIpn=O3~2ztH|ozWKPJN2XCoM~{gCO^V5QQL(x1eVb*2wg-- zG91ie&){s^1oHo8<%3yU{M|n>y@JP2za*yV0D4eaDCAqh`5nz)2Le^&`-LNzvZ@dg zK9yt8E_yy_evT)Csj>>eTJR~UhKCt(UlU?3AE5%8>T0XczSfv8iu#({bn5%+VNj`u zdW_qm1pnL2W#vHftkk2}_C!(44<1<*qD3?6Zs6n^zP;^lYG}V`!ot7n0LA{{Z`zKuZRPfCvYJ5lz>A3|{vU9bQ0HHN=T2df|d)z=1En z;t{e2a1WI~Yz+#-8k&8kLe@1iJ+AKl%@z}?lCai=F z;FlbrdTMA3u^doJq$wSLqpO zy5cTaW+fw}jCzCWdyM??yg`rCUbc9$VOWFxdECqAgYpc|<@DL@vqkLit+|akRVR3V z^9+t(y$^bV-gh(Rzs)PfLjLdds$1DD+ft=ao7Ga)qQFD;0Qfm8tv9-jhDsB zufZb6Poi^H*D{o!mf8)prD5?h)Kljj7eAY62(!CScBi|{)vUG!k~5e?;M3foF|(z2 zUl`%947Zi&u_sTC#!C9u<{DIXA4UR9kqnC7lR2DLh%~Z>iiS;XL5$cICunC5nM)Iy zsq$QegcA*GX4-QFMm0kljAhGwpybDxnwvryEY_DMEoAu_b2dXkiSixSYPA5^TFnG-i$pj-%)gEx{9mFT3NlYA1>>_i#dOhqrc=)7W3T zZ`~^7|M>B&YYt|ZzPx@!zg2!szMhw{MQdc6B4Ip8d4At@SH9T0G05UJrdsdOYivf5 z%9?rJO$1u`uH`kGzeSAD4GGRh%kJCnCPt7wlQWW~yXS@lln`yEvu=2_s4&(JA>BO} z?}F|>_WT0`JILfa|L9e2ELuEP)7Ubj551pUL;NvrGGMI4Xa07TM!Pz>N+s`GWI?6h z8E_^qs z#wf!9CR{{r3Qml_zMoF!D((?iW}`PYM)$5UH}rnTB}5aAB{}B=QE5B$%etmJr%^p( zEq!8>z7P|cHWa?5bEUW8y2`^XOzVzH^-er?OZwEU6dQyu2bjX*E+)BkV;6g`sYR9z zYkAcPWj9Chb=mX9=0+K(myDQe?3|k_??SZSf!64Fo~hQpR< z)B5c|XklnxAVQSY)mPWUJo=XHt%c|h-{YM&$VnO=m6@uGLX5_|9pBcGY>RWkeFkA6 zvA$>WObbQs2t8BoKWpTh=(b^%cqilWNx|$WTJ7_QF|9RD7Lq$F|CsWanVntE&%3Kj zOV{;z1qf{J`uuA6fU&RPsOR+gf(sNUc#^|-^W*AI9{$*CFoTOp^FaxcJZY86$I#fy zlfO(yDvCaJ}A^%}l;`TX|l7%GW#I zF>3Y7kkn^=c)%8e^}TOZG%)sUUr(B2daHS5YlLr+jp!iI(vDA;yKY&JLjW<7A7|b< zloxmTI;bT&H072=zA{c7n!ELpWmgzH?HHTiH088`DFdZ3H8x@T(k24&VFI5Nch>|? zdB@AQY8H32rae@N-!J(56u;$T`>|Sa8pwDQDB-l<)7~8xS=r&<&>=5&Qp5RbfkK|3 z$zBnSNgL9QRO;ue?4(iFYW*hr5%F`lFMt7N&bX+?{(9Z8weD#$aR$Q-j2(fi~l4KpZuP35Wa4x~| z$BuVzj%7V z!=iW!CVUkDsf?Rk$=#TJ^vxJH%MvYO?F&_=_UtOOR$)ef(i z?RYn{%;mnX=E4KY8U)occ;ff{tpWq4auK89ZhKe0tl{h>FS}`;eTav7-#PLX9ou0{ zYh9eF*M2O&PzT<|8_@BhU>A}|OxO0=G!>n2`@4TW{;Ag%&GydJ_L4keO4CuMEStW0 zfbA3~_j0E?KJqwC&kZi4V+xfw`=*^aqp;OwD!83ht+6XQv!l5@TLZ`N=AN8pf|!gu z+B5Nw_e*@g?kx3Kg$vg{R~ z6Acj9#0Dy1vQAUr1!I+m9tv9rY^@dDsSC6nK#<0fA3ubrbveaohDvcKyWd#i4~ z6s%S+c|or#IS^0f{&Nf5* zZp8aTEKocoVrUnts7Go`(WhYx4Dx_>0tTCYJnm|*`z7Uy1`09TbEssEW zA9aumYZB6EFp8)z$99t_Zt%~V8qUpDARvT_sd|h5cTl!>tk$6*H6(vv&S$rf{W&0J z(2;IMR`UI#P?G_JLj!#=x$6l)|8WLHY#k;khMyqxFzhT9y!-U1cYN)^dwv3PnxLzaFhPY-o&juDcG-S~u0r9XTk_3s{I1BcKto;T9Q zjfhnEN2bjWKUfa8;X5FI$~`nEmXK~Z_3P<@f8)UTNT8|hEI&e8+u3uxbPY&;z^(Ek zo27}{vQGcMe=LZ=G+nJiDwzpE`nyIE-ovSf@oo`*HcynNhuidH+zD}cYM=JtUdm&u z-<;w8U%_^QU{83dhgS5N@AfBTBkk}nnZL}N8FU~X)QN-CMZ^T%AQPzlk`URIEd@C= zBXV8n=@5Z%!I=CJli}cN{K)2IzD2kOCCJhocpFZRq}t4I7b~8B_b-&*uY$p2ZZXj2 zBbkx0;0naEy3PBYhmfD**-E$9#ozp?JazJL*hjyR@3|_N;^P;%u%|{Sov(-F#kKxP zzdU4pw#+Zgpk*(QpmU4H^yqC8(~-Kj>z>Zvp&Wk|-<$c~%H|Rre9|@MlnI2;ChJ$~EK=|Oxq-|5T;L_Ej_Hg^t9sEm zwLj(C3B0-B{+EKsEvlQ)Gmp5Nq-OI^N zo}GtCpjB|d;B1)Wc7?&6iO9*r;lc3q1tBx6dh2?_Zf01N%)qVd^5VwWj?w69?P{y* z2l43l%pr%Mx*3Qhy1yw~U1ld_pwsYvdY7xV*Qe7V?+@WGCQN+gL=JXRSx{ZNo*t?& z$~gXK$DR|C;^C?!p2x5X&9)k%zm+v9ouIP{meTOOyxT98_Snz&7&fTMR-+B4e38-# z`W@i$jq=NUyE{Gb(-VZ?8h?aQRI@kB%ht4ebo6}<)&|StELE>g*ecbKZji9mxTrsp zV0QWO>~>o))mih;Zyva8%#^=_nt_9Em0Q-SOCDFFE*NtgZ+@XOq@dY?D#d-MKgFOA zzB-TFO@W^$l~`+4YoqY}BYWZ0PFlmx?~(?kQ}Ch~;l!MKd%E!x0Sa2XRR^gQ)O=-prW^ACl32|68;<~Nn;RXg2jOAMA!0fV zt8VLlXBp;cQiBs=(3Lfp-atV}g~t*KL^L7HijeL9AdbT}{v%Ods0bx7DvSygYvgx7 zmFLLVMVM4QISIG2(g<^i5>(qF2*smTfp@(@P*OpPbWm-=hU`1>6h(}>4x0c-Md8+Q zNR0=cqM!L4#^ciX<(NpBZ|oMHT2=FH_V4EY!>y5(smUpw0Uv^d!V=nUGJ|FBtS)2~ zJRDeV@d$uQ2>w28g0r_wDBEL0GNfpQe*QBYa{bqLaZ!}u7PnVaL_b9~M!U$;z{W|t zK>Li^K=luSEc_y2wVtAiEdc_dqn1z_+`gLlGndbM@SDn!ExN3`dvdUv)Y~ zdSbfTN)>vSH_-fY3Yt4yF5XexLq;#scgMxihSa<$q4;=s57z%1#YZSh?n`#X?%{F- zxXqd7hbJKV9sJ2{MKMFb1d;zqsK(loUgkw!d_y(vMzZ$>285aKspUN=ot>k)!P-i# z7>9KGAVh_Z5RTSCX$C-~02E@=EJ(%o788a3ls;lk6~JQ_^c5;O*pfk66+yWZbXbLq z5{gak@Xe5}`fgJf^Y}SviYd;Lh1z2$5j;5{^#ixJS_Odi1@nFxHjRcq4c?y~+N*a8 zLV2nW_0SY~@ghlr1hOvRyyXC#T4+%@0*=WD&6$Ir6}k4-`dfD!HPrGV3Imv-!3=@y zDh2H7c{N=Hia&XP8=H=E&IkeF*qO7R7XlL62N#CndUW$!q>(9M^1TGIw9e~L)Ak{h>*jH^rH9fugu}(B)U9Uq|+ye$>;iP#n+?seCCQm)C|Ec zUz$E2>U~bZ_ErOp8qxrIwp4)?RiWe;x!0|NtSW^< zmSl0d&XIj2#8V|+=)9&EBO_yxZ69alLK6dx)pzaO>nu9P-lfWM0$H@zDw7@@ig`n@ zNv*HbSoUh+lu>>T_%!VkmK|}dNK4aRXHrebGBh1sjtxSRx=2T-+V`oxoGV-mQ#F%4 zFT5mI2d?Ev*)D&*cbGf;MWSb$-R<49?VC6mt$~`=QLhO|5mO0f4RB$nJY9dhkK`(- z)&OfYTUu)J_P~daOE0vVZ-Zs?ta97fuA1`Pj`k^#eC^{{m0(=_z0mPfm4u#Pc_f#P zXO6`~wRBIP(e;zt?#EX3Z`NpyElg{>0vgZ~HqEVRM(ntQ&!x4+1K zkdI#6v*gc?xZBUGH|_fWEPTCkK!N`8y9;#&7`4O^D=~vYMhoWS7mUtPNc>42aQt}e zu@aYnU4QOVhvBk2o}2Pg&iQFtv6Y ztLLxb%Ox?jK0Qz{XNJBXr}g-?dx?q0rOlihk?rBOzn?0cehO)u3(j1|%YO`?tDvB7 z5xq{l$F}=O?c>s1zDw=cPxWSbW7ZGl#YIT2d^B5pP2p2mvaad4KO>GKD=I??Gx+UP_WFOw5I$EV)fSxJIb+VmlwxwE^W>E8bjvL^MgQ^PN~qk z+4X$y4)pY@r`EJrb&>=K^wLBG;x{3>tC=#m2W>->!Zz!J|0YSx%w7ZyAh`atIP{KE z)R!RamuNJu^f5p^8-4im)A>Ns2n^ao_1ak*Buz1 zv22g&`XPbVQqAMruM%Q>^{g^($Wcc%XVme9ntRVGwfIt}tVQ|ogF)PJgN5#4s$)sx z{ztd9cuKo}xAT99n62cD4pJJPxi``$$fla`(Ms##jJvjvxHXy;1d#)aHX-N&DF;&S znk9|FO4k>UPl*(j9pd1)HCy?E;PBXWWs+?qh`1`vOui+FAiheo$SCF>ENU)Qvw83c zDFt_DkT5hzH^mp`>^s~`jG9V6>M_qWdlh?kzHpzG>cDWZRoK82QAHUW?ct^+Vv3zV zVLR+?OPbx;rs^1_#^+Nxl9GR3Qz!*#{wc^A9>}rkliFC*68$Js`dPACW=ubw;_-a( z0#oqwf=^7VNw}Y*RuL}dZp!6RI1Xn_S0Uvn3BOPd;AM(KD?eiQ4fgMn-Nt{AYSq*|GKsKx&>_^ z9_;cY(|V?TpJ!#?!*v5ey&P_vht>w$d#{Gr!* z-agXH0!P$IF07tHe^NcKe=yYmFAA2-8~AiXdCzyDM*1YjzcG^|>PH4l2Q?05zDtQq zK$iul@0`e)3=qde#LJrCnD}>+Mqt-Ren_wl7`UqZtkQ%RKt0=o4Y4@;L2kEoNdc9) zk3nK*?SmQaClx_0Uj>5|@_x6kBo>)7(5xamj%Qh!i|n9y25b;@@jVQ|b;x8Ow!k6XM@-xELDTN!Cj$xgyd1zD zdCxSp>!YKIZ)Ja?tDWDktfA;gi{SR30}b_JeMj+f3cKjthP{3=5il9f0T@$GkH3K| zBL}E_7!ayNcrp&t0Jxl3Sz!d$Kk&sDvyRAJY#{cIOp$~d`461{i2Y0^a~fVFMtx*W zRxRE5LRZJGV|Xj_Q=kpP4A4R=3+Im0q~2}n>6HOr^e}51a?}=KBNb? zGJ=K&*|HNhdHz%#A<;jXh7##pzm!n9Yu3>Lus=(P)B)rhQa~x|MG?haS9^oB*Ps0N zj}OscriN}N9N)#%F@%(gXQg*ZiMUmzxD@bXi2Q#cbQ4~cLwdNF@$ev4Sxg$C4(c*^ zPKW3o5EiIMTJHwoE*YL%*6;WD&qbKFqt5v zS(ci#1h39t03;=yk8EQLN6sdr zd9ceE=ixP*Rm|i|BQi-z=XHzZj&mD$v@eT_ikfe4t`)gV zv~_#Ec1IkfV#^Ms7cH8c?|Q94JcE#ZILyW@XBpd7I+^$A>oIUm+ zaHP8tAx|`*CL`s;*1NG{3rJZZR)~-rpNTxhQ4PYn1%tdbDs)+3S-N3nsBj# zngCNDsG4l5FW$hSU8J0!>}Y8j&;1ZS{rXq}`zm^kLbY>1sFE$~)Y5prly{X;p?%&2 z^|Ozn58t8(?=uL{4xw$XrPjG!J%FXB->T(fpPHz%Qp=gTIh?Q~u4Tl4xz$^@BkmB; zW~fv1V)nKtOsv(=a7HdH?&z1kixTtl4v2y_+y5{x<5a=6IL%K=FFtDVT{TfH=h6{s ze@*`SK3l}73)^U)-ji7u2+>=OZlX?}tRw5r5nGp2+|gR5qp8}-Uft9;+Bzsqs-v;& zE~?dh)3GfUeT&*+zKRB;%+A>BhbTueR-JNqCb1X6b7hr`e*KBtJWmq zHK+L_IT-~{D|??0!kXv4^7w3u`(;tnt%TF#;4I&t-yOO2-FER?Yx<1)>toNyl{9=Y zS>0rJUPqqQ#{F78sCQ2)4p7-0pt(4ezg#YKc{_ zc-%9r+(+MLSl91D|Le4cY!kwQ6SLTED1B2s-`3V2TblE$3RC>_q1<6uXzqtk@kAXP z2aI{O^&r)FuejbE99Cm^ZWG8;kVAp%)F;srnZ*_jvssgq*dP-(vd2SqjioIn`KbN% z!W;g#+xaiJl1!+U|Bg=^r$c$_8x9_ES<{4CKAR`FsGY99+ch5|E zzV4aXTs^&BSNNyDymlhC+~QqSz!0nPl>Tf0ZfhIn1;Y{SN`W#c57st@# z=@Bfye*n!@43<%BOUHLvhfL?;C4ySEh8ZV~)D~C6-Tx3JEnDcSPB471yhtSXZgSX< z12~gIdJ3_1e;X)(P5za@@RJe*>u4L`0d4DG1vM^9eR|{u4N@*@8relkJjic|H!(PY zwc7>R3Eax_dL@e7uYMH;a9!T@mi{X;vsgY>67tSS!a6~T&UDx1K-fQmc^Ua94H?AQ z62Zv85Q3D7rSEc%u}BWnXFy&V>JsQ8`>*ZVZ6QL9fK?7v?&s3ruH5}P=Xs!u!XI)t z)orTzAp*#F+h7a7x=cNmL|HUJnIVNG982<82l01a#K8KEt*ip53RORB&@{cABx#YX z-vXytC8qmdemNT%&!iKdLvWxJhK$F^f^UZOnJHj|mMyxId0dnj!l(;De znZYUkkE~1rx<2h~YYEFql2~-TM`UXWjoU+n>Inui_x+|xW85kdrI%!x#Yj&S6yfd8 zbo@u&%n3(?Kg!k_SFPl23D^`}6;Q$p3jt`d45Wk#q<2 zHpwFyBiXRG0&nS>D&T(?n8$!_?cF;Z(8nm;wlvvOlXS2&JBfoPMP&b=_Lmehj^^AUFVFo} z6K#=+n8uzu+srR9f_72OdXup{CifmQN!ET*!WpO9UYXD>K<_U||LwfBJm8h1sCWPU z)19G64_@U8Y3BTeHu9610e%}G$+JJgQOx0b2%hd?u=Ga+)wOACmNoFhdYF#36IthV zJgM_SpT?oazQAf<~1J2O24z@Sp`ds-J`A zV5S^MOHIHoj+tpVh#AdqC37q?JcX%oFRsgv=q{`r!TV&juE31ShX)5Kot^;Hl@Tl_NCsIDs87QT_N7e>GVY$9XZTt<`~3AtWgOpC z&%@8g(4TyFwv70V0SA1y*M3-RtuI@YM@8~;`&>&lU5HOp3Y5O7Q2jZO zVLf8CnQ6rRyRVuvnWIimj(fI&)1&wu@tyvQzVV(6<8|B9b*JB|O_QGO!%9c}zXqqVF^eVen8#4obdWCJi z_`0U@P;U?whpu~x!jz8485Hmh@?m{`rz*dhh&DD_DJiXhRyc#rgc9P(IUlwyqsqvX z8~W0C8&h0~kb_%qlpLcDOn-JftyKt#MBfgotZ3r8P4@g0i6hwF%E$}7GR)UVzr?u( z@M0&Ppe~eu$_E#0$Z=roX_twLM#PMJHceLR=KSZkm+7kzr$jvB%FM+tWAQ_d zGly#j#)QPR$`UxT+^P&qXWS>sG*-$#y{}7ov2hI3`iX@bj%g^v9^|JFBI7u5xRkPm z7CEMK9NN3^{?2#bI(iPPly!Y<_d&6x+fK5TR#IAG$x^oj@~$wMKF2J+-iW=IBWXh6 zh#HmD3V9^tz8)c6xAw8vN-b$4vW=c*=QYE`(YDUjWUa5%)jO@ePO?0=U@#sx_vm*w25H^{t*7V%qrFT-`&mY!eW>W}zmX z3?OkxT}Dwl-2*-i5n!Pv83YTR>T^e@$plj5$I6G+paCweZk;2=0#%{nx6n4T`TR7A zG?Jkvg)GB$@F1q5PnHf{o75EZ?$gtbpL!7<#WH@JxQVNL@qr#n6V93~AG`|Vnt@a| zx=omBB<|jT!Lsy&DcV(sFs%~4dde5TO<4LK)$*@l^8{va6A0i?Qc^W>RS}bRLlPz; z|1LE-cw2s0h3sxD52d0Ye5m;%dYli*Z@f;U;UhI*fe#~6tf}Fd$NtK zONvXQcc5HEC{CE8X%W<3?)Y^va?vvh~N{90sklqTpjSajio%`|oadH4GbM z`&*}OJu+x~@DBh@#iEixo-Nw9E?{Fy+ru^AS z%4#pY6gPUx2-fi>z#lsC0q#uj_d#BTyq+Vtg5iF7&aYQIE@wbeqY3;_!6-=`$O)PX zVeQLPk-0}7gnav;!U)b{gMs_+xHU>2GZb)6OBr-%3^aP{M1 zBO#maUi65>vz}-p{fDq#2nHyf+CesXN`U_o0p*-sWzGu@9qWynQoz|bdF^u*{ z@@xn`E~uR-_^D5+NC)6lEn)>I6_0_Jnx(|{T8g<3oK1~qM)%$^!@~o3)fP&p2Ycr+ z{2ZhT=aC=*NdH8*vI5ReAz=v##0KXOD(bJEMjt=%1`ypzYVUo=)T{asBkCAnEC(>A z?c5FHzBll&*g;IIrMvZEl1b(pb_RvwM(Ovt)urkUfeyD_gIrK)iF+GfqevuT31@-x z9AS;W%0dZZ$w7MVAyiWrs0$r%U$j2-!QynNkL!y83vCbVQ>kDG`>zVHR6DSE!;u7p z#81I5zbvnC8HL8d5>IWUX-S!r5gz%t-W2l-$H*zGz!brxsogtegoD6vh^2Tlq_X4DVA)EFOf7QxlW`{K5 zbx6t-J&8B~a->gcuO@2mZD!9UF$5GpsRpCAe@-Ps;sz;lm}+-In%;xdJ|10&G&cY= z%M)Z@k9h-*kUXl6M92Y>tTXj#XSF8LCs1i|;PhwrTydg@kK1l^lhKppBdk)m9Qu-L zvlA)>4GQ%u9>4YnV3kY;8iwGTZE6nE=nJ%p-2hP@qUuO9X9rP=7aUzdVWw?WY%-`w&!Lda6Co%r6BJesN z=&zQanJ9lbkWyB@^T9B=OiN&^u@iU@a3WB&WzAeDP!ORYjJD@|kx}<0+4_~VxBWE- z(U4wOq(HU-A?cQlQDh#+fQ-c7krgE6lZKb};UhvEWy2wZUEf~;3g*x;QY4E#4ZPX^ zw3`_)@Mw?k92ynGfZ|_)#wU~Z(MmCgz&qIXLvg@uVNeAoCEO1M(9~WssZO~m{qO5l zgr918-5)T4ZiPYuK>Fp{`$!NN7uaFxFks;&fl)qrgv5h6%lfb~WysF|JBmq)^piB88 z>}4K6K^#V72t(`*SL(~K4|T+KU@rsa8`JM-nz-nSLgnE?4=7BCaVY^i@|oxkk}IxCop>6A8Tk0vAzW2 z`qkBs1cin=7)OY%G_(?pQ-OAeBAWHF&Jy705j;0sL!U&YJp`uHOvm3~4z~sU zouzu=wFQ!rzmH`zM^(rW_(`}ae_oaigoKG0AidjG3Ca4u83+QScu`OvK4JolV!daE z9vlrg1o+SbMV52X23l$gu>`&|=NBv4@9##rtH8UZquH6qxq&xdRmzHxYN+jPm~~Li zkFtdl&J&1J$)rRzkV%kFD)%8a!2FuN?d3( z?bp*%_&d&6KpWlI|6`Mp$-r)4toN6k6~KId`aAmlWfhOgIi|X$sHta=KM_er+59$H|$&0h}{_IdiQ|6K;=t?zFaIt>U zff&Z`Do(C=-fnF^6np9d(qRc@OUV|doj(e9pc&wjS&DKKauY%96W8}53hzay&xw3} z%zx=@L`1Y+q$gBeCm^0!c|4M|vuX9=W6hs0j~1cy-TG>DnfuP_t1-d_4u>yPUq$*h zSucBF7y!Nou4yR#uq z^SnKP@0hJc({l9Cm-0KmEkFF>*!KtG|JI$&4?D=!J?0R%x(r%G-|>C5@&;WQ#k(Yf zcsB8AN1mV61ZkJw)rQ$r9&L{}?$7`E8ukvaCNb%d^yd=$I*8E#$3G;r+@bOH9ztA04FlI0a2;k?Uw^;tP_mcXZ>Ado9*OJyF?ymPFt*G{0={}5)NV8AgPeS?gFI$ubwZ*^L zqKn>7FD*3CEOy-V=@HxSI6G3gIQYRw$XmLJwkty={@dpurWNhagljo~vlC+SJYv#f zM2VxpQFw!xS+J-dhy|I$-S@nUp~_b$l0@S+61`@T3q3|RydbT^9r#qSW2)sh1cY~1 zU7;-4ps#DYbQs_J^N16aHj>Z$b!tA)7UE!TCR;7U&#LRcb$m4=gbb{n(<{kLjBaxq z{vffD+k9R85jKw}D`-S$>H*f4_D=p`Vw5H;c#&E)%=G~jB&Xg(#xOGKc3$rNQ6 z(RZiy$8bnmiLEGC(!pvCZ$o-9tks#n_cKezjDBjlRmYcZ`ATBo|P< z?uZR7lI5;^njMsyeK4hV{>@>Rl|d^u9qWgYS+cxHmoi)%7%Z;zpH^5s-MhQOBH5l_ zch_Z7$K!X0@Vm+%iCl1Th0gkY73%;{F?e8PU86e_$B^41OtnI=5044cfxUdQ>z+S& zuBMAJ|H}fCueUyNfvfjMy?Lz?oaKuiWEgy6lU&1AF1B$^%QzED|@0wSJz@NTQ;m zqH*r{jDS4XQ?kqtmdjQPUmBkd2WwE_X&;=t1*Ex-;+YKI&rb*Ja}EN(A|hTB6?S}D z;@Ddy4Ko`4TT`0!!j1{ZZ7N|}C=7@8hyj=?lq>|2C-fp9I6H~;TgZO8H0|nOfveqK zE^t-T@SgAQwUtPU{`y2rwRg*8Y-{$mUA9>cC8qT_7V&3u!9_4(&w#~#VXz$EBc?fJo>bB?pQ{8;Z8=NxPb-HVerkj3DV0z`#Xeh=-0;s3w)MyM$NtZ zvbBKwqSG#PlFBbZW&3iX=M=|USD4SYE%gh^8YDCi&>#rBpj89{#dP4LZy@$P^x@p3 z;O2{A@%5jnF2fGxt$o=+VNUcEkB4>cKY-JDa~p$6UX++ay#(80tPd^QW}HTg7Lk zI0-rcuY5x~(KuurofG> zEL;Asdsd6&fgAhzRIA~JHKMPPuPSrWs`M*Y6WDHY6 zaS7B3hHMmlZBD#k>+<$6RLgHvKg7FV8sHPeN=M$T zUI?^eM%)IEz%LKzjKUG0ZS646?y-cO4rbGhk{w3zuNmJz#4kCDBGRc&*!$sCu)! zvr@YVdXafwdLg@)Bq8YH1M51lC%SvykL;s#!Xm_2m$Tzc*3O0sFtr8dWqs<49B96; zr7pSoTgoImw?UmTa4xUV%OFBAB&Z2$p6hU~xv{hi`Or3y%wpc1E-T>lUB=qpJ|;Fc z7Q>-ySZ$>4?d^@KtsSoQ$OplWp`oG4?hN_0tzpL(Lu^&RI$iEwU`GvtH0>$yc<9o5Y9mp7#Ic4gGfSUyuyX-?$yLekE2H9 z@=~m?M%=c?b^VA`qq2>&VoG6Yo-t=Hc_j)}oui6$1qyKd{Ea~^{>_)?D~c2}26nwl z9+Eb_N39E(By_7h7!^@P1Vk3-a=Ps$3GlSN&Rg_ud&kY5HKv`TNYCJAkSrjcUs535 zMgo-6O@#uD%~wewG2M#)nUpF|PBmtV?P*m(=gzn)I?{i0IkS+U15}!9*?7m-*HaGr+52G{5iHqJ<>ePL_h#Ohx+~} z-gO2@5n+#1WVxqN-($G*4VPJv#y5{U@}u3H#S`~448`0XqrYWPXS)r+F(YDc^FQ6c z&i|x|U-=<6V569A(+v4sO-;ae#B)w+Bc!TSCt4O^$HehO*0TMxOG(r>)~sx=@7?*J zS{hukM(yI&pVF87nr0_0O4xb^`4~Y&4nl3_kr#m>SO9q9c5}kWC$dpYg=N;{_}(km zDrRKP`&@X>Q;+u7QDf|UkHZRlSL8C}Ydi`gr+*~rsv#Cgxl~>-#QIt$(VS7};-+0w zfYKRebIYT=c5czT?o|l8kfUD$kZ9|T{xy;p({0khsPzFUpa$C32RE!{`AEW zzvxo0M;{ci-!Z>$zu^blDv^0{57^XCGNu&os3HW`g8!hDLY@KzOTdxEgdmf|RA3uX zp5N(PtLj;slLcUsh|e?LY8u5#Yt@fvlER{bxJ=j{tNWIm74uJ~sU1hk&G2Fn1MH(I z#M$Tp&gN9%$YcSPdae;K;+qWBTyO*8_ICjGV*k4dG_NPM*S!|0#iPusAKhdxKluy$ z6C3-DwWW_8G4$nB5agBq{6s1)UlF9Xw}FIu94gBs5&8DR1nBV}S3qVXRzVzFZJ9d~hw7ONmXWrMd zRSQFT%24Xn+BpTahD5K#bZfTj+&>0x7PIYQC(jgNeCKaC&l6+2h)z#nUU5cz>RIe9 z^T4Ht^&5K_8?PK~$Y;ikR`0K_yWi;8|Jk&g4I z;v4~wkoUBd-^52P;RhgdDlJh14f14TWSFmgS!QYo^+W@rwx`c#;BRbm&oXQ>Su+VK zqT;Ec?mmXgz04JE{Ntmn#O{sIqGn;JtB3aktAT-4=h;4Nq@0F&U5fYahp#b^ibeI1 zc4)u9HW6b$X*2i2IL$U>(85lPRsDyjZYu<>n+~$*JWn}RPtiHXD3$DNY^T~dek;6F z3a*GHW5m)svR=zR<32CpJXJO*y||@DtUnI$xjrjfkF?e1Rh^eY-3M-cc}jDJ#RRk#foGWn6%0aB zxqsMKFPv}nP|-?28O6DJRH|%GG-2uk!f9&6AmiD^S}W=m>+0p}M>KWVt_#HNaDBd* ziJzR}abiHEMQ5+N);e>}0gpn1QNZD*pPtKswDu<}fEC2?b}yB4(`9q*aCX532-r?SKgS%@dN$x7MqKh z_3abCo6*kzB<>nple(l5YTd$7C6)UzDs1`c)AF;7ypLNNw0n7?1YpMYp^)(g{hF=i z*h~S%QRDg$<%Eop^JbHbhkhUfG6D7B`>Mdi&uww9yZE`o90iSFcgSp!G+J1mh(@4K z?i})|*!+d4zi}S+1C_-&LBpex9`6{JdJ`)>=fB^WUG4R>yi$m9@Il;yOQ!L%B%F}m zx$O>HN(t4!%T5TGg5O) zm$;uC+@-&EH;|_9>xfd=;Z>S70nZHr>v=C@ve8AQvxsFfLbe(a<}YEhR$~Z;N)BOS?kQ7-n}OuJe15= zn*38!_s$wPEpvPH^?WmCUQfCgArFR=P`5R6d!D&g-h{ifQ(7bGtZk_1udV4=cQ&#< zDVA@bg}7;aJs*Wq4ez?*#hGUw;jRCo7mxhNCp_$^amZgk!q-FHTdd|*V(91i_LL>>BsEv7PmSIt3u#y-V`h#kNo>Zpbs$v(C3&6pL*B& zt!2dQfHv9d+cZ#`B!!SKtXpn%VG&eS(u-YDQ!!}JQsgr#jrK^c6}+qY^m4bGFMC9vT-u+Ae%Q(MX7AR^KUGBkmaiVd`KPm8W&+w8 z)WVgQx`P@xl9DV2tfMS;2J~7P$NXGtMR2bG!q(s6Id8eec@m3E*7SazRG6D{Kz>+xF&SJY4dHvNsI2Xxl1cSp&i$Ek z=rt1#US{FmyGT1tAxHcu^Uer>1|1X)BG-|n!AzvNw`XIQjKkX}q_MZoEsH{o_r+0Y zCCTMHZVXC&lZk~(tyU*d?C8o9Uz1zR!;AJs>*Fpc{qT*hjX5_PLgkdR#dmPMn1-c#4aE%Vr%V;i zId^Yfi6(V%WAy|vS?@9b&8O9(rF+!A-y+4n4I6T-bp}Sn#^MQ>Z;(Vjh%{1CA97!g zTB^JXbuA$NIv?7)Rm>BkhYVxb=$1&=?W~)x$4I zJ_?9VjBMY5$ZEscB64~bkstdk_;4DY;=eV#it-zll-e}pNO4Q{O!wGWOrnEZnx=`f zvDe%jH?04?!<<8V`&^t_9A2}2c6ZOuB5uYT!b;162t}pmd;(58nse66v9c{y&xJ0a z78cc8-SVHH@h}p1(1OKT;@G}p% zH|ss*%zSgdLEhV4f+wZcpLe&|p>>=4v5v@Em9Q#ds~hcP@cJ0LJkesL@61G2==JEz z4s;C1>RE(_p~=uT!^S!Di~F5lF#>NDYAD=&9`KIG#C^N>*!**RB*raW<=pZB?~~Lq z-E1jdxYCjaqFt*4p9of*r9vjTo7HvOh8{8_2C|na2z0yZv`PS)ymvqWu^&#MHyljy zx8v%6mg#RE_2YakYwi4Tpc->~x7z6xW zBjMsQ_NL>Qk&U6GrIMtXC1@bgVx(O~?fVX$UpSA$(|b`cA{eAYuWMS*(+nz8$1Tkg zaQ6$U>mP5^-W%d7eBSD01_IVxY2Cm+SOW}+DzV(Ct5*P2Vyl*S^ej*UIY+GHke|}m zOIH2|ju>A+8%`sfiJbA6d%xb{hj znxu#@SGD?PVYaOEPM$U=FJ#NvnZz6c% zn*#7I$?fDSZ`2U8m}{P;K?nu&k~N7LGFsi@b??H5GyK2Iipy8EJ~;sAuYk{%9WQ6= zM%Am;w&=TS^JYNcQ2%cN2Srmu0qa^Aj~N*bSY0|VR?|^j0_T~$rC7g!j~Q8Q%#K)? z^YgTulVXdMtNNVLUu(V`dlRMkS;fW0r9{@oI(C{4EaHK+jWx1NTHvdowB+KvNp7-h z)y%Eu_#7UuRm8TLW+ln$FilpBU|k3*AvmsH8H6a5zTsjhrM>r&j|_YDN=z0L&R6(p z6e-X31Czjfaj0Ui^8Ju45j;WgT~#a`vJ zU*PE9t)!`Ix>PQ@mW0Zru}FVeyCR9%oyH>NGFXstS;LDpNt28EVw3N%d6wL?67szx zL$)uy$uZ}nAZ$$E z4GRk)b1_Wy$Sk#2OFTA&)*u#F3M!kB@O-!06q~FOWn@E3Yk+A~gGZ}tEo1I5{Sh+v zwHTN>ycxp5PLT&9=~TFkg>>_a%38$2H12+;H57KSz8)S5Q97S*v_7<~lP4mVVyUjI z_ftbOa5MTmUz?t0L|mEl`;_M~1xw(lNSr(jP${$g&{^YAkw!DLg0U zbo*Sx(6@aCj!=ChPl|)S1F(J}Zv5fGLT!OKCs=!at0cV56aAQ}_fYjHhPk3c!+6~# zZ9iE8R5E9%Awa`~gMRIy!|hw>fTWQq9ecULFH@n?2NTa5Nnh%RJic|hK!1UnG&)%s zAQ0)~#H0g91~ssnRA)H~95N0qS{ql>C&jkBw(&vZ1RgpA^9{l{m_L@;hnb*&>6(u@ z2i(5NXW>abrn<4dt5VF7u(g(XE>9ML)yo}ASzo1qXVhwY4^gNTA4W_Lol}`Ps+#Jy zt>3<70WO40882T7T9#O6;dxdg#c7}&m7gH z*MQA7+$DAU1Jtm>QucceHFG&;m1OzxCYbx^rGebyROK>&0QPDX2(l@^&~DDZ{#B_&-ho^wwF>b0ot_<1xbW&(G z5ujfLQ5ezvmmWW_tgN+Gtv)BZk~z7BjVq^dhqVWCf~YxND|2+tQdM@m_||tKw_n?& zQPM2Ul~}$fsbPU|p0*7A8q{LP;XLUZzskN%rXi<|cOhdj*$?JM`q?c_T+nae^K(#` zWrpt6_-5Qt7wZd@B?+N)#Gm8W`6HJ6_`O2~cJz_XqiUrA?M%S9%*Mae zn;+?c)mo3lzue1%bhJR5X;dX|_4i~C^w4_O8W(f%Ga7qA&tB$b@ANKFt-BxlGI8fB z5O;38&^&U5?;)2RR#F#w2L}gp$3920PZgGRuBA3lVYA5Q0(iBvD{1nxy85~fmN)hJ zpDm{VnA23~WM7i0$%#auf2%6zln@Q;%FkW|>LUg| ze?w)Apj0!WYJ7xWa^C}1Tx3iXmdf1}!U!(#N9@~VjH3?yepcyqhx3;)lSOQV>SaCC zFiCbe<4C%Ct*s5R6Q9j&+@*MOXsE8~GGv^udP{gt!b$U7{TM5u#h25>Hz%D5t)qUL z4_GfplojvwV#mkoPqpe^*kQtMZq%*&Q<1O+$xwB36#jS)DKtW#A^8>?Yk0Ftm0Mr) z=W|31PnIs5<|7UtmFu+0IrH$K*D<6|o7L6XUP8 z8*HZf_NsUND!e)O*Oe{Q$V%W8VJ;l4Bht71rAI+Qf`#y{xw*O3WxliHwinLII$_hR zXRZ#AJA>fE(P7X7Vwg+gcTj`C8x}t}KWZC}rMx z2h=_$`ud;>=#y4J1=pGI6J=~UV* z*5<9&b;MSYBZ${GwqdX}WhnWt#chw8%Xe;&rM}Q%idEE${4$RmLjBOx8a>mg+4ZB^ zc}-Nbx=^{gu(5V@B}3LCd}=cG5%K3RDb;T(tqEmvwxCH^MMcuJehas2`IWWCr4L?7 z7V$~5`UC6g&>qv#I@{eH(RioHZ+kR1+;@^)_wtwR7)djFU6mhX@CRcF?-(T>f7xiU z3%oyVK^gr>N^j^T$4-iu2BkaBK;6gV^&|{}4&3F~sV3FKwKf2aG?w0w8)U8}+lU6E z&~2+y1e8_=cB-W|5zhR(A36ey#&&e5)g z)gctoKhAq)*VQ5JnJbBNk??1+qQ6_Oq*vcGpDY!_R>Ld`6yH~lvl|8^jaOLjz|>!i zuf{nmdsS!Qp`*L` z4S>*M1zd*$6m3OYKlby_XY~$<0ZPT3*4nj%4j5ysbk4xvucqyOu{>a8>F{%ZP~b0z z`8cE5_Va%GGuwxd(TrQfO69JKe5>&`G)6_fJ4~KNt9@u=!6wLm> z+S(CDko9#x{EH-vvpks!`8-uXNpN~7CyKv<*XJr?#SXIWNbRrOd?&H&{@^SR;*+U@ z04vl5r6EsDtaPj5WT3kqo;$QgosQBnGuG$=M!}`2knZ z91vO;_ibHvyi{^(-}r=i|#1 zN7w1vS~m-##U~oOf>8(0WH;+KEJdq-3|P3!a=Q$Bm#-}^ef?!I!*!-UsEB-g!~Sa3 z8NElUf`BoS>m-kMejb^YG-c!=U}UDxZ;m~?hhHl>kq_2%P51t}mx2&N*aO;|Z&4M# z>mlE_W8@IoF{bOgHA^)MpRQK_Ohpa#L;xgiMTQ`d7D?)aIZu5+Q{Wb2s=w5?$g@$8 zs34$5KDa7ri(rLLW%t#4K5=f@Qh}BcdcN-4o^^1~+GdS$M&!>(Y+f-ajr9{agXL6z!j8HG6wciE%oc5rYv-*K zo@if0C>L0^R<|{J$=J_*`0NL_81_$6Ssb~aG_o-`Z{nJYNF7`f=dTuR?P%wFAmlq6 z5hk&Xe13;Ib!=#FxN)+$NaaPzQF3hE`l0qOF9}E6NlEy$a|-BKDKjN*{zP7D7ppJU zAfYqpSv~5i@pQN0`HYKZmqD&LR}Q9d;V+a)n#I&a6&LVOh+)kbN4(wYF7lc+vJhEj_W+w7am?t-XP(K)&!nkzHYpOZ17gr*ba_g zF7OUhm$18po#ChKlrk)wK+xZR zly<+O`TgM~|B19{(Yg{F(z(<@gVztHCgqT3OY%1Q`StoKE_8e1KWIaVdqq9aH5ZDs z+9aX@;a!~9Fl9=@P8W^gJm<(~H%%q85Do(rN=KbuQ>?AFQR3LsMTfo8`xHcKn1ZjY zP`I$R^@3;Zuo_CDp@cIty3h1AzhG9_|TEH!yMsHfZF;Pg2V~g>GDBK_B zY$WZudG$_4WhWCY@xJaC^BZP^;=Q7_OSfSHvgr5@-qA8mM~MoR-6QFCzWUAY18WiH zM}{t)eT2+d%k0`QZz?}mw&-5v)4rxR#;vH4zbO%TBnHTJr|C#3kzjgIq2@w1 z^2P=g`F;PaUzf2;%^COHzQkt<@=KbcGvcN;Hqk=SaoW+(7t5lh7WsSo26GY9o_!JK z!Vgz^IjhWzXKb|%eL|;`_Z=+48TGb4vtq}mQz8A(uwZs+J6%$ESZ)~M%=}3BSk~53 zg7)maI>(7rl+|IbkKC7S-SVIJ9%i5_5;Eh}GGy>>zCReFshT z_c2j|tgTw;?`Xdz=Z@qg#KV=luOiGpM5vFUmryc7?;|Fa=jhK=tnDq%-#@eBIRpDr zQC4gG1^@27O|1~r&zA6g!yn5d)ji8|p!q^e<&N;MyZ*3N@qx&C!^-3PO~aF+%s&`j zhgAKd@OKEiDL$FteBsJ%r#9~3sw0Z!QvJpE6*=i3ar>2|owrz%3M?^2F_ot%FNzy8bp&{o3H8xq zJ>_?IeQEbhVisz+>_;@?BFwj%Q!0U>)zuuH+9${~dr^@aB!8Ko?J6VGyatlt0f z2iaVM*JRScu@SvHUhr2WEP;U{b5@=3yG(nD<5>Pn{+pyzp=&&ol5SflrKRgU)kl(w z>sNPpvrGBg_~;bLFEA6gFq;8uyht?yO$uc&1)rL-xAXSS>SFoFzX( z$C?9uY1%U=AF*>?nwLU`nj9`WaGe)+=E7ASk$5$s1J#YUbE-^w$egSepYt;5P(l*8 znrNZ3fFt)draxNJTc&y9(Q|sGW;?igt8S}WLBY+UjW2{^i;v1;q$@2a$57}H2-a_U zEL*$k6vYSq)&J}IbAO!`nTE4#3yD|)z=y2bDhs@{78iLNgUhmhJ~~JMlH+LVI2GZo`83qY$;NJ)d3{) z>n_`qIbJ;ROA; zm_G2BpK|92h^rke_%>T!)uFo@>}7&@^6E0fdfJCQa9@1^abR8G*7v^CArhQJaw9+7f6|`N-boV z)0vj3x~*{?k%zalUk<*`a0W(?yruEFe+BK4-{ieFv~tLwsJ@CHjW%P$M~Z0ImWz*P zVkal}T@Rixs~iUCSnmWsmv5T)F_Rg!2k3k@hOUu%{<9B&?u>&-4H;PCxmOhkI-Pz2 z1W`hww& zrBx=*%MQajxu-7QRMidJW(}0-A)`bl+FFesXjzz!7V8`ZG8;WVvcbS^lLKBiAa=miz_J zg5prIxk&@vjm>#3FG?G_ew6K@ZerluYB8Vs5T@?_`aaBA1u>HlkX3!bK_|b+@ATnX zwCGVHktsH6y6Aw{t<&II(Dpz82`hBy`hUuwf$q=;R`{%Fdc{a7z*Z=5GHMh>y={xUmCw__e=$H0?daM>)E~uAHu1=7EOOBGeU$dE-eix_!c-2& zs$z{-c9g781AF(X7vIY0mDwSK*PjPN#6Jb;0gd`f^Jr(K*_R4ZxjD^ImT4}` zc&%h<$w3l?W{v{Z*U_S?Zpy2EH*`gP#+884W=8^de~DiN1fA8ORmchGo5?Dj>h{vKaxedb*SsMQQdoY4;~mvmZUlTJ(0 zasj$+a9;|{*i0Ub&0s}%n&dX*9XwRw@p%<(;4@KZy-_>P*!PaPQbkbT>b)nqdG%n*vQk5g#(F~n@zG*rw$3DL87ahRK$cV3gOabt+)io=!(A|5UDd>hU6%Wt{HdS;U{^i&BVluVM}Bi8 z9i&{&oiW{!o3zmW{*i#8tuy ze)RlIs*gHw2KTIYNtXawBjB zkl{4RN4|I4x+CnGX?wT^vmm313DcP(USah$b5BPOO-l%j&m3G=VhxGaV9*SH+=)XD z(bS5j1nUNZtL0X<$T>WMA9UaMd6v%SnI4+%w&@>4Z32+nS;=KDjYFQy$?HK~pmJfa zncqJHhh<|>_CW25Krrg|0Gj4E@xUO_BEL!ceZMV4E6?BW8 zR^N0F6SwiJtZNTD2HL0}^4PvXZZ8h!;!?PzK~n-(P?@+uowjr97vQgf&_E&}7jFRK z#$N_VH#B$+B}f58kK+t35Ht$P+{D~}#p9gzegKds**}BN;1Ox^_IN-elh@?=fEWir z{zO5`FxpGO5Z;g=MKBfzZmbK(V|}ey2N`fZRSlbbhoBm*7mS$;;Ctpl@8@U5k2v|P zt*l_UvY12i>*p9m(n0y?7)4^G{YzPx4Tcm}MQKHZ=Ym-+Fg?ttuaRS>lu0Kf_;S?< z1gN~uY(!s;J%g)_I3mIy#~y9Rv`=jS;AYK!6Q80n;M_WWgU4y*yKI8yF5t@B(g5Xl zbAlq^Ho&dy4wc$qwS7eb|8|a?T>cau0pL&Y4-ENk*?$|r4uY&&{P!yS^(cTCC^t>v zkE^=4TDS56;$~rBzqq^%Fnww_7EG}QxLz1r%i|>l#Wl(RX7`oUN)W|u7x<`W3Iw8N zOSbah-;r^{tJ7X9;CkTpm4J}?Vi<#HCg?>xS_5h@H^V&YKKe>Q z(k17suvknjwmE0$^(jQcnBAFJ+wRv!8Xx}}mn zTeHA18>MI%5jAPTpkmiq1(Z;0m-nSKV>Xd!_lz>RATh@^<{T< zs#jE1@usMUC&ZU3XCt3CXM!4&fMp%dsIMz4uZf6>Z(O^^;__?+6fPVZ?}sr-=7VmG z3m`LlMZOy_Nio1K-QhKzNp=Zio>t8hr0~9hS3++JtX&4(z2M`yTH%$onY#xF$~F_w zxm2f;UgP{6Kc1jzb~OO=<_)t? zXQj;(?5osf6G1^E_LM&Lr`RiZeuS1~tHjw1mRk7J7j3XXDlk?(`hWL1DE9m{R%ncJ zg=#?7FK$+-vRa$m-(3Py@Z%XuB$afq>xpN01exH5t$>E#`Io}~kl7O`mLH)J=l-Gk z?`MHB(csi_-+-R^!?HNWqT&aZ{Q)KB;68a3`Ve6f1O99!C7n!T5bTWLT8JjG_}kP2V3@0OLHnzyjg$Cz(6> zjN}$n2KF2gRr(*lUIkPCNWseZ&tU(oKZqO5NXrI6cVa{mh)G~X^bRWu|0Fpmv%!r1 zhnW9Tl;wYj`5(OXKb(2uNdM0<|NoGg@5q8c?+j%Cu`G?|s~Y#Ob*P?-eUrv0?Qevu zqrqZ91^u^2gl9haU#JUMpY9l{v`-R9cp2~u*og&O%Sq!0IsQO5>q&5O=jP@rY4z^| zP~caa>{iKhUBH8tU%3gu@h&Z_GkT0<0HnK3l$pokP`2B`w^xUD01smb)RVd|kNGJl zOclR>s1kccv{fjn!v zqAtRGo`SeI@57*u{BP?JSZrmwk4>{zw4sm$e}Wc0GWbuzLeOw}9%NPZftsh>8`D~i z2@y0E+*8L&;UlMJ!y}!BOH>4GWmGiD-5Q*b1lsg9eaeqKedo_f%fhZn-we77ie0Ep z-Y3H9D_%d|5W;-0d4MG4s=zOhaDl>V3w?8 zrEgw?-CqM{^ESPWTdzid&YUCvjHOXUb z;YOS1_QQ1fHG&T^2r%LrW_TD*HwBd%44^BJ8=!7=Z#!i0t%1;(IRw(TnWa2&{L5EV zd9+AX@izXb7v2iF2gn9xzf{ntllsp4{3%1=U)6(=5jU_v)V5MlElfUN#$_Hw=-5W% zjPSo&+Kmznaj62SV@+JQ7D2gLuUWyJONGoYg6NXLr{aV|z$HBYhS&kq-;D+R3eKnk z@452!RIh<`!k16v6Ia78Oy?jR`7qvNQ8dN125-q6Ngc*4_rP2#6vM~ak5BtGwV<_> z!8Uyno<#@!hEkoQFR5#3`n9T{=n6XTZ5!D)G2zY~`kCFI;oM%}%^e$YLb9`sYP$?~5Og7nV7E0!|y%Pl;zjpy4IW<>A5y1e-!1tUHP;c@{DPkS0xXY3m~7_xq})>oE3 zw$@i`;Age5djA5)kcsKie>{9e2jUvPlZ1|qv3EA$Cg0a2|MSFWWYWI^ z(?#)xHuGOEv7<~B1D zf!4`V%cD5)E`V5Ak>HQjgRnuGpHR0y)r6iL{_~aCk1_Zpa8;R;D}JpW7$MXd@$s42 zsA`7niP@Atl}Q#2j6u;Qn7dLRez&jI+f^_H)JwNeu6p%F-Rih!mbIcJkEO5X)atP!! zuf4+Y=hBycKON)mIw%*92JONug6rf9e+;K1NRiY6!ntq1P{QFr&ymwM5A_< z4bLBcF0U5%RA(EmNO(*I5(pee$o~_0d($J#)1&s*B>2&4xuYk3q6+v1&|cJ<1b*Y0 z$cc$R14}1A2Zxg}yr0)c4vpMOQ>y{4p?`l05*BdZ*9E42PcG8tcxLx$aWp4^zwswP zGyJ9RJ7L_?o<*1s=OVX`3GtB!x0&aW_YX-BqJM@C47A75jEc3jQiEd=c)9-F{ion# zx4`Sod*@Nk#~d+?+aib@(mqXj=<)IV3UKqg1$(~94x2h&ZYAJ9-0QpJi{3x8 zqghajXggkt9rZs;sr2Ik*cg8XktzIVcF=F(EHTI8aDellrP%H3V3_{SF6cInRRCKQ zGRyKP{awmyH6T8`U^SpT(-olb=-E$!YkfKBfu-%A*72aiqMhy#WGnS$g-hjwIG=|1 zQbOxJlhhftz4|)f1pC7rK`3y4qGCd-uJaOR~k6KXk=79KUxPkcgBN z{>R>kGPqnQ5QDvXTNY^j+JGyp(AX~8m}5qSfMl)c?-4YGboKxbVz|;?8(fV6@^OXB zjJh$nvx_-TJ{=doTBWkW6`gZT0U;ysv+f9;hWj*y5Ma@aP{1EFTZ2{`M*+-IzVQ*g zE8(=XC%$qAybiL+iW2&+=AJoC%?fR0)))#q-oa3C?Rw9O#`r1AdXT^$`X=WcOOkZ@ zf0iW6f`bzgwi`$vt@Yr2djXxBI}>dJ{QVO@;lO3{hu}Ye2a)3nBw<<#Kx`Q_`qz)I z*%W{yEFz`e3nI4vZf*BjAZ!UjAU%_J_Z^quHX-4xet(Am5NN-bM^i|Xu-L$B?B1e` zRAUw#IzAG(LyeG=M_Rk@T6j=MZbURrd8_~dHfIJqadPc&j$bC^kK`*4oa5tWydDZa zt~q8oN~^p-=c>26i!J6@5#46{hrh1uUc;RIyR~@Y|8hTLngT8v;@_3refAIcmrgdp z1dqw^3y=YKHr;*cKu^p+3?0bv?{Py?uy>qTulzs9ZE*Dt3izb|h^biMSH`iliquOX z{J*^T?%coUyTvjRge3k<Gj;)Y?%!EL04L%^U;yd=Nd%I? z)r2f(fj|B457dDEWrN(+n{5;7gz*+#h0?j3oazeS^EyZmm#(d^% z%kjBn>F&inMQCd{iJh=Q-kJZ_Vy&I@VaI|=CLR6zX-?{QSKw>@Gv%OGAZbY8Q7M89 z$KJR=8SURXQ%&;y+(}a;>bC~q6t@&PX=vsEljl4#(fd)4=-*+1OPUu)N;UURCyD<{ z1V$^uZ05iI$Ih{6YQ0;pyKRmzF}l%$G3Gg;zJUPw1dNF5@_#7tnx?>it>OFaz~W12d`>rz!kCHev56HMMOnWk zVLN;8Tn3|x@m=EC9ZD*O5Evs|Jp}F-y;G{sUO5p@6=u46Q8~RNt3{+&6EeZR-V7(uW0ng#Qe&OH8a=q@2=uj&U zy!tQvWy@or)XA^l{Dn_wKOfO64X}CEv8D@WNInH(kjWd78yxVj`Q8#qc!tQ$NIT<~ zXONzre3`fbHgr$wU-KpCm9e=It{s9!cmIW+r}&1*yE3e(KrzIs*g!|vqsTK#l6 zuBjB3bNnVP1U)edar_7}u7@`|=CY&rPd?J*@b!p3=~cODmRoK&1{a!qHtUVp|5Z`X zp_Zwzp%Bu~Lqm=-I;Z0>xB5w&{z+3&Vnbpz!A|Z|U{n|aX1)11OUb}5Vq7~zg!4|TSIVwHa zILTKwU7Qraw9%p;&}nor#}!Oe~g?sM6u;d_amMnhv*%cy>*k}Zi<2o?GkvvSM_jh-y|&kk=ce}N#I>%zy7Cm_ zWd2}qNS(PQ@>AW=D}^OYF3Yb%s}ISEB^yv(Y8wN$PL)*3EwF$0v{K=JrSD(zj}NpD z6Ly^anP8pjOdltr23Q88a`ubA#z7y5fmV~lD=iGmT(`l&NqSkpDvif zWk2XCd0fMWv=u!*&|NT=f%9i4ZU-k;RKl15*vNt4)ux2O4vp zZ(WKI{pA)TU`U-te1K7IFom~K#_Vjff5?PAK*@*K=he>+PbG(e8oXb_4=8I2>>sNM zKGU_cNlZYvTW}z7JiuQbnvrK%On(E$mE}m@#HR1X20+6lvgFUE^aG#~Bw6C%INjh+ ztIxEfXR0_3{2Q0Tf(rnZkm5!VoI9Iw2}rABgy~(d_B%jA9Z7`bDeW*_0Pl`>6Lx_8 zcfp|XPW+%V;tqo^?-(=gfL%U;Whs?7-=0}`cL-#xQ;?Nn((@lwbc}y^V%GQqzu104 zc%=4u#qKW0gYvePP--)vFV9`c*qgg5k=r}pMWg-9}zmN9-d}&ZkIqJ*9 z=XT#Hl6YCF;O#;})y}J%VJ$h)!i`@PP^4m-6oPt2C2H-Kd*&R^=D78GEYz1Q6WK(} zI!M>Q(s7~5-gX&Cx2L0GI&j5qVP+{JdHMOwyNJqGX6WJv1Q48Su$N`81{Q68xx}u0 zSfpK#P0toV40T2AJ${RWUO<)|ETGHx${tT5g%UeK2*IvZ5LvxeC77+*bs{$AX3Or`^9_rz%5B+5<`Y5KFEO z7|EXa@gyuK{=49#$sZGfSJ`7;N)Le~C z|917eCruJUZXldl7ZQ`NKz@r`k#E3CKS*Rl5f{8JtEi($-_h}3{^(Wc)aRp!BCVO= ztf8KxE_16G)1X3DRgB@(p9H2o8#$SV--XU`2a#27J_@ z9`^Q`&1e$?B>VM5;RT@iZ2;u+8&>$I+Vk5DOa){~&K(MD`fv2$Pd~&RV(0+CzYqlf z+NGAB2g)fHK-W3KB#5TJcY_L8!v9Rt|9_~Q{(F!W`4HB{3pi-$JJW=CbKw#n^qhsi zXU4(4Oy5kr)pVxrt`iwDvtr!{09%`_cL1Ol7nh;*Pk;)7%E2Qc};isR! zt4JK2eLj!=i~)y%&-g^LpWI&{yL}3aUs(-?}pm zj!*JzCXm?_xYL`lJ?_%S8+0cs=3OxiB^EtO+Bg%?@oq|kAj5<|9rKbOSOW@SA~dls zi~UY<-|IAZ^O{kn!z@}KzB}QPd_%ADzURT%RLAtESM#4m)+6H|)!oXUehd6ESsow$ z-x$tFRndlsGd|3g`Zkb!TxvU7im2NkD(ukE(x1PI&nf4*5p2*#<1)?wG-l)@&#ia~ z$lOJ+U@8!cAObJl6h4;MI!!007MD^ zB0&B}=`-YGma%Wwu6rnFDkpnh3$YGHLKg45*iXzyyMg2oTrf0Th!DR0v&irn_UP#7 zTtW33a(H-nHXxfOO|FMFN{&efIIN_>_gElTTJ{A793K_gCXq&R$^zbD2;Fkq5r>q> zTa7RtPiS3Wh=BbM6WT|g*C&DGTc!Tz^BB{T^i1djMG|P3p1S2^c#j<<$%=^&45IQ1sybF~RkG|gb9pkjj61yAZ7!KQTo58rm)3$1 zi`yepunAOu9HrBlP!ZsX{{H5-InU*#BOP{)HCo>}cHCvkqxkXk-M!UEUhJzAg zku@b0^wC)89b8$kJMMTgF5D++mfKNQQVmIivA7;8s78mD}{q zS>fF8=D)q$sJ6BhR3|-`7C0trI8wIAxZteI+mnZzG3noLwT;yzw&L*nGwk==%*WP#|NR!%3kw1R0?CotO z>dZLBmDWC6-B$GyD-X3Jhvl(eTVC>}KHIb~!fwIQ_gCa21r-Dig4-*D`&e}Cq6GSE zRlmGB&R&hN7R;y9C=A_%Ru~Ilu%<>>w}AK~HLPd0BmQucC&%W7sQEc~oZXEs zZmAN)#8+QJ_Bb%{5sSFyQ?>5Q9g{%8cczjh?RthR;?7U0!%FZauBWQjoMQZu$baO}smVY+^ z#Fe&&gucvnws>;^jUm<$*={tB5$`e@1^MGSYdBsK=TM?igeZO4m>GxCi_yU&N0Dv_ zimRzvv0JE&@z6wP?xZc3sfZ!EV_*u%jTnKwc@xzy+RwUh75K-rW11srs^cK^6yZ>7 z@(w~XciVms}2e{O z{IF0YU0xN0haxFz&EmHsrkvc7bk$W5s|CUjHqA6w|S0M*U(!X zJ>)}*2Y)vmH`WZtQV_9Cr9n31?EC8X{+F*tTY1&-6?On079n@Lid0t3L5YUGA5g7^x`p!|QtL%ihL7h%Sd zXe_1L&dy}UZI#D#J*bIE4|LQGS*#54;x^%rnEMKm)tI2~qlUu&9kgszTEpWMmq+{Q z%4i_$L!_RB1ecme%8n6DbJf8OS3Oshff)R0=*w2y2C0(JmpTd~MR^eYs2{vHx(7`p zoNvvAq{H(@pMR9CrC{tug89}0d&!beLF4m8C8;?JFmiJq$tKu_g6iB`RD}c0RU!!g zPrD3}l~{VuyS{1%Si6|#q(G#6(-<%q0{!v2Ntex5vSg`oOqJzzT+!PRY3kQf4_It- zZ#@cbuW8Qnr{LK#E1u551=7TOykqiziIB|@lo>fVVAY^K_C;-h|M#b_iS@5(4n{Nr z`dwEl=zbiLN#fc>lus%IX}_S~6rrcA$1su|1WA*0Dj{1uq}J$fJ8PiT+C`ykOSD>} zpUBRIxSRXJb!juTZdX1+*I;r0X(Q}jg7$zdvfO@x?aAWjD0!}0bvdyu- zBhu##9NO={Rq~`z=doEp!YB~xNjr4#WTETz)0N@&uSF(lFVsukK@^N?!ZFcYF9ad& z0cH6PFHjKT6s?(x@utJ?bgoMBCFc2t0u{`yo?opyl%H^7Vxrh?Oi+0(l2y(0_s?m~O*=FQ8=mpU2iDy@)`KkU zMY+DOS=7h?j`v{if8O=S$xGHetpfZ}3j`49^YY^_(Fo6Z#N<7UflUmV z)i}nawswNaADS1vuONhoH8-&pNsFM=SEGBHwAz$r|`;8+;B6I-1SiFM%;jxSR*gI^sR_@ z{MO*(gY$&(SzNi5uJ}zd_U0ed=i^-k0paW4IM}?nqG>01_eq&+I%Pal)sxW%_bw$Q zZSgnzKwXNwdk(!Y9Pz-*p1eyZ*TbrN`5{vyL=mogGudr9XY+en_@!$VdAoJAL$mTg z`RFJNcNVJZTJbEMJQ!C_L!Sp#SZcUUu0;Y@c<=nzs(3;wUskX+$e^B&Qp^F_y7+c!1dsEp9$`Kl)x&k3i# z@`zj6^S~n6qddWVvt5|=-GdfrgA|D=qEOn~y6PdTtE)4M)rEyUqhW6$-v1aQpMk8| z>|oz)p?>tt#1;7XejyGM*w$q4b3Qzbj!CC_5r^4odR;3Rzl>h9{xOt>U)S@h<(n7^ zQLFVaS&1${)YSa~dHl|uF9zc885g`RJXk+s;TaA3VrrC$nv(Nx+g5u9nX0rHn1rUS zm^~JzRqx@K$=q4NQE9(9l&7{1SRr$VJr=f;FcQd|bki{Aro9$du=)CvaZX(ElYuX8 z@b(kzp1F7R?OY0|sv$B|6q(w`=FBDIPN|aoX48yALF=quNZfwDFLWCJ-157u_E|Y) zNx$ZjYp9#}7nQ72c~}}sY)x&+>p(k}>eN$F#zj_jIbEdT(|AJFC}nv}i&8=U8;V+EUO3rSQZQ zP{*BwU-sjy3(p(pRt+AAUb+M^FzS&Zn{%l2R;&9tZXlx{p&*{m2Z;kYD%}F95NBK3&sh-^cY(}L)d;ez`{u{Xe7M; zN>4n_NLM}w$WQ~Z%=$`q!X3|?;pgHP zj7hr76(q|J1!rb(QO)W3&+_K8u3WT2J+q5Xm-El=XI@unDO_pk{qiLsexlzTN%h(W zwb$8_Ku7Bp)l%8LH~I!5Vtu}~cttrUA2+a+Lf5o1EF3lsk-pWeqc-E9vWHHDXtRP%Q|Nt-~_5bJNfN62+kU2j=lM$uVU zLBTKonZ~s!F^xw}`P%S}Q9;DVWUUjOD!Cr>dzAH7Jc!H+-eD8tIE$gWc0HnDt)*v1 zNnv9-Ttd6zr8Z3zLfui_&8CwIsy~ZyPxeSpDiamA4C5Ff^=(yOEB%As2>I}8e2=rn zfk$7+#qs5%wF~v(h#`aFHew8ZW7`WdJ z6PW2VRU|`|&k#~i8`jy16}}x62>eoxkXwH19Bn+j*UQ+^V^da~$ulO1$gP#@NzU=A zD4KmVE6EXWhrLBCdQ5ZZ5wT$ZBtZY_P#xq{M0qacQcA{O-hn&|1J*3-OPA|y zkb9Csd- zKC|r-e&}F2Kpz`-mwLyKJ>c=XkGtFmH=BIx463~niZxVXI@Jej+-ubJ4PE{Q+oOdM*#jPkAp*a$?HECRC*KTYW5h#w*nxk3htIe?<5su> zi1|tc1pi~i7e9S2brU4N*ot0s#veBF=fppbIX4k&`FYHk_t8e~ox5Fq_7b+kJw>6S zv0XUbL1X^r)OIkMdbC4Z{x#-52Qk*BS(J|zm^ZWix}{ywVVh<605}ftA8vxfp=Sf{ zr2sM)@X^^}0q6_`_9!>BX@ZXe*Syy@jSxjKGbk{WFxPlP$vx_H)_)f`34J;*HUCjb zRoxgrS_o}Gr@7Bp@%7o77`<^ChcF7K$(l-rHtY@)U z{1p)vcjIg zFgt;xCQaD=|eG!Hd6l!+0Un)45I%+o?*>9&rJME^aTZZF120{g z-dbf;LO6R*tndPO#83)^NV7ZjKT-q=UI#YQe{X$x#5!PlDdg5Fl@=ew)Ll2frh(A=f13?p7D4=gfP(U~d|Sp2 z%7qfy$VyDjz!hbuUIWDItHweB_?{#68E;69eP4?@hvsSMLS7R<^h?KEqFpZFI<6~GeBm@x+iQyVL>2Ws%e*1Nw3qH^O~8cnSAnJP0vt1^Xs zi?8ck?NCxr0MSk54nJzybJRE?k4DsY=Tb92oZ{z~FG1AHM@t)EEOJbyAb5=?-c>m` zCVYwU6G3!$fN>7Mg+%Z!)$2T+ZCT~&ipv;FpE}Js-h1$0=cLWyK~XgCL+dx8Tb<`o zri5OfsDnzpTVMjB9GW5lC=&(b5Gia}J7JFswQX&@S2UuMfWr@OH^-%#(oDE!f?Qt2 zLCwV=a+7)GBvN=W&14U8*h9_|v{2r429(N-kTc=5*24ENP;=_SL}yiVZ;2pu8kv>0 zPWCb=%JI zWbg(OW@gGlf(sAi`Lj6&_7C(@KSE%-R>GjnHK68=aS9g(Ht$^wfXa@x`)~pUVv|3c zgJK_gsS!#N4o ze?m@?yA=((asmNa37ROa5^#`}L@M52r-Ue~Dou=_2n8j0>l+5TpbmGo9w(@>euyM2 zy$Sm8=4`Erpr(pb#(D<`rXwTgrvn2p8fylgRan7c)j_L)v8jZF9|jz8j`-eRkf8;K z7b)9l32>uovez&CXBVQ!psBDu!#1T^2LNxO=EwbK7kWb=7wy8TR9)A>9I_HQg}+b$ zL|uWH@f;QvI2Ba{%ipAh#31su6tT1kzztPr^f0>E13~RA55{tuo#Xfnr2SSr71VBY zw%!W(GW@#VkPOTzj?pkaE2DwKMuA@_D2aMO&rZL$)Rn&=gP1x!1cv0M0=OB}t}8vO z`T-8s11&L*tkjkcfIZqr2I&d@?1HBalu2<|ByNc;fU)@Pon! z2HN1<_43y}cdH$bcD{6iv|IS|N6kT3i$Rl#PKCXG^R56Bf4a7oR`d7-7dHL~$OwVSrlNmHQ&>@^5Zz9NX<}&QE?0saJc_caOY1EnJN4LAfpEvqD<2`T{nW_1fJI zyNZbgjSUxjUlE+Mo|?-yJddhCpW@Hu7cNA;x^!;e8C(H^!ufy^X-6?%9(Be0m1CU1 zZPeJHr1rD+){_N-@9#?UNCv4ry;eud{6a!b>UeLeIOl^-mfyR&?uR$k-L)RNW>iqm zE|$a%KTdk|VV-QH#Az%J>(FyR^cbjv_W2(v-IS0psQM7$@h5ug*5pOk%U?OH){V*Co2ffk z+ae2931?)L-14J4YX0ca8Z1nhE6Sb8){S0EYMrpc}q5#I~B}T z_x0f9<2{@E@%0kP{8s%bv(D4Pxdua%=PrxVgSunImn>_G?l^&SE%Q-Y4>z_GJ@=O$ zj{M|Q&rifJ`??$M^K$PiFXE2h{owGRk3zRQU~IQLzU@~V4wd3=y>m<>7_M}fE#1^; z@BQs3Y^(XnB>&AY_g0FEt$JOgy@0vKVW`;Xmu)(C?71+&EH13f-);iFb;wpZk2S)W zLN?xUW87&#@mxk#D=EFqa zD~!_DvdWNe@#72Rf`7k%eZl6!+Ot7k%;VJ2sh1bmgPLi0rYBN$tC>FTf^M88JY$ah zJ0uH>w!3Q+57(kT=0+9jy8BjpiUoh$(ijSp*RFV$3WTnfk?D}P)Xpxqr|SK1!O1A4C>rd+~8 z5NGfFka@iEj{ly%gr+V`OZXCbh|n`r4)<}c@%qu6`-R_Dorl84aKd|8Kcy`1x7Pc% zo($I8jg{NokG~_GyJix8d!d$YFpcc+B01-F81sHb+K8}yR;Nr${e$$(JN53P^FzL7oQbdHLoRhiaGw-M$@TR<~KChL)~VpH9rcUNcoD)aNEF5`ZtB3elY0FzIeNGae5Y5Py< zB)osL{Rd!ZJM5P6MK1uWMyeb6cXRp@)Tifid_S28e7T#lg!`B2xCyQY%t;VOd;?t! z$b(yV8U8Fr^d7jiropgPQ;1~;mY7a^q#;j=8?=cAVnUup2W)lxgPPd!Mz~F6CNTZq zgncUNcJd44rRdP>@B^osIETU}LZ=eyniZ?_XU5RAi10-KXH+@Oap97;Q zWv??pw#||ooX-z)Koq@uCFGcEirt4C^M-ps?U9%Gp87|YpyfpMQ*S>v80XUktc@8w z3j5U73xnl^BUzw1^i$yPz0cx(P(yDU4dzp$Pf*MGhhL*MPsl|upy~x6$YAy${Cu&ty12<6?n7&>=;I zkA)_X6Fv*dsgt9k4Oqvt2QMAb<0JUM_ynee#}F>&61}V5PY*wM)C`;VpeGWC&I7qF z1egDyPeHYyU-3OO(-?SN&5hDb=r8|hK*Ydm2Va<4flk?}RMY}5AkiQ-V!=i+~T!W-Ynm@T0*z6MjSPp3k>0K9kL8M3ZYN}(~?0)-DrJhx9_k;INf>~~p+F@l1l zgX~q+Q*8ZlnbBCaya_Q$>b+oY1R=BHc?jx$;KxNyj=#NzMvgJywPtVWtI+6wbUS-X zOhT9v!wR5-&<5I-)AvJIFwt%?C2;#X?(^c~Kwta-tW?-<%+Yetpa{{U$7AiuW`Rp> zr=m~xY1`7jq8@Zp6Ea=V01XVdy%G7j<}KAJFu-4J#+DI40|V`%QjCAvvENj^A3y6H zf@T4tY#>HWztITw(F2?^&o+S#b#l{_0U^3!tA4s^De--B!Ew)n)y)d8g91Q*K0LfN*|VU^N81C z*G^B!0We|JPAbfR0hF#gpIZ0Lcly}Uvl@MK0zI`7^e@5MtO`^}Z~zl*1sCL@KH~{q zqP5N{8IGb_gv;Ya*;wKo)gBIw=bAalkGa1TRC^;|hWEWpE&`1O9IY|`9h{gCz~vI$ zjQ-E66cW8Lc2jj8yz3+s9~;k$dQ{>iUYPYNDbps^(ogB))DO;jGUbe5Wef`4CY^Vlk@kQw8Ll zc@H>;0)>b`J<3}~11-ytK1QVClVIsE5q*KN(hk`d<(a3Xj@xVH*hU6ZHV+roONGhvj`w%Rq%iVnM{4hh}SjEaGE z6^fTB&=MQL4sfiOaq0{-0lgLUGF0yLizfI|YJLf=dXS(QT`o-E_NnQDyo5_IOnhkE zH4yMQir#5EH6+#8gC(*c=$np(Rcl)jLRvNxG9pn*zNbCma@fv4zA~WTikp+FaI2;M z49DiHS{SEyV(9M!4=2#)R8z;oe6+CQFVw?_c>e3h>oNOk zMa~a%#IE1pzT)ln{&p&XR6vLFKaBK;%#{x*apmD==e$e(K_ci{y|t8%GM#ICUF>z@ zxwN#jLC`;>WsumI9YFv%A9O^6lUtMOjGlUV7I=psK#Qh+RHO21bxcSWHF{5V0o^SN zi3#u&o1UFYqaM-y9{QtYt$L~ejaB&3LH&tHwd{vBu{)6c3;<$F8cLplHZSxU*n{@{ zAf6PvBZ*`ayZt^p_Z08oInMmGHg;HNNDKN{YUGbVE1}BastmFKw{0 zu~8Z^b^>tX9R&sO0CQ?Paf1}4PbraMot%7TFFxjNVBBsiMFK?=C*gfhh9qTx37eiM z7_1DLVeh{aHWjv{0X!&rD@B71Gp&a$BxOUV2*Exu3U~ z-y1hy2yd8a4qici|M4Tzb!)-Z%;Ix`PKo*16db>d8(rk=hKs3Sg9Zf7T;_5V%h|8OKwezsO^1?W^;uLWIo&rT*P9nx&4>hu?SlGl$s zKw8Vs8Lm!qQu`0rB^CT~LifAjyeUv_#h@8Zxs|;B_r1OEGU99?pA})~I#gaC|8`QX z5HvKoRZ}l#>_dsITDRpM;8@W>3JteetsAB}Ftc81H&LYlT{$gGE(D!E=XmT-ouK)n z=h}JuLS}c}m5j=VDt{NL8*8rL_BwB|vpkdpZ|1AC$)1T3aVcokU5XWTEe6+ZbC#7< z@26SI&yP$YF6_=P&VoBnyUwrO2|dGnJ+x+<`Co(7Mz_{dijN##I*15ak8Z)R@J!!G zs0N3c{PDs1uHzzg&HJ1kueQiZ0h?ih7=@{yIpaMsJhPQW#B*K? zu@;wv?a9~1dR{IErzJ1N4+GBVm%(i&l4S;(PI$}T8gI@QIy&eV{2hX*oqaaF`ze#f zQVKLZF07J*8x&o93diysWCc`u#5YG?oQ#hrOALwjq@ zHSay*zAm^8UN`I9!FKx*Nr>XkRemqeggcU{9lwtz96LEQlBYIY@^c+jGKYka(=@e) zHBpmWI(wka=fG`$Da&RP|2Rb>sBn@Gap$2C$dbLPoYd}YzU(RIr(j(t$4YA|N&ggx zX^uRlFGBirIQ@U!+?U!`IEF;4@CP`pIKk_(009V9b;=dL#4gp=-jXn=cdv&iXL@4dZ1WtVh_ zxiVk4;iZET6zlB|cUggnq0hM|LyAgwwm)1nR=;~_5$;GLzT-JYg ze9ElY4CxDQY`+1O?xSvy9ab-TKl@qx)UET;EXoBsHx~HXu!S)?q zDysHg+v{N|0->T6XU-m5?Th=D{=SSRQGf?4`yOD7WYfR$aH&$iED`o}ykI!04_u5( zn02-$%4t5#R!NhhtcqgS(yWQRzBKDxrDb*ACA?AQpmBXjI5Vq5lb318z9P?Myr5sD zL$`I+SH$hOvJsZy5+n~u!o?6NNv{t`veZFt%>X5O3BLyO*J2Ym4p(wa(!1d-%quO;bc%&g;Yri5Bo`)_qK2^eIcF6A;rhyhKv zJx|a~)J6y?Iz&9o>*KnCU;go$xD3ftW&~xlo0hj0$bNEO!;6EN{cz9!h~xg-_kx$9 z^am_acT>*aHU(iS_~5=WF!q%- z?6Z%*=(}j#wg$ZUG5(k;E8q=7ggr2cOP}eM8Hhll!dL+qrO)WmgV_^F))k|BwaY&Q z1(X;#AVdQ&8F92`r>L(1W5h#4u6br<~ioM>D%BZ#kqrd}+yDg2( z0r|(bpkkU)KRzX7B~uyER-L}Vy_v#Wq8u3a;wa@*AK>%8|K6r9j1N|TgAJFqiS;gl z4IN{g?)n3h4mL!)Aix5Hx@iOlAd>Ao%91_;T;CH$`^plT_}m6&!nN4ZlHlVtcwz(t z@IOMeow5bJz>POIJX)_qhYvGB>@_Dn^`Cq;8hT!~kADr=>yWzq6gZV2s|Dlp90ZOW zm2AVWRLNMz9gC4-GeUL60pL^6;(tvl+-!@8Vfa&?x(MYVy;twO;+2Jp3>AJ&kVo!) z-Eid-$=KG_5#VsfK_xW3W9S0sAid%9K2TV%1kr#IR`~)B7!nKlQGXAC*&=V+w?+WJ z%NNK2sAVN(x{*-T|07hl&g~l8hh!1;`kee2(;=InV}1!!ei-lBDCS*y8F12D za)NK~(qjRTu(e4+1cYP)=V8iAngsaeCwjj#jlZQqRU8T)&j3#TQb{TdIK$lFO!()r zM1adD2&nY+I}mMVfSUw`i>V+Oy9WUIG|b#$dj1qEt9ut30pw30>~$tjf`d|F+j0rp z-hM984|e$h?Gm`U$0qV35F2X=h?tzko|9eKn@zT zRv@3I^W%Z$iR*wLjaEoZ9&Geo0+9f?_n*G7h=D`&7{rt9&F@k`;rl1vS3!g!6y6cR zA+BCvZz01j2FbX{e0O3(Y~Fhf&G%mE-e=WE)D%?CTyQ8k@*-`EzdEdl0w1!&8>zgkM3ue290r!+!375gEAWZJuRtHf<~2AOwCw3W}VgUmbB z9l3D%*_K~S6S;<%x9af_2}N77dAE{$ zQ{uc2a{e#yDl5OgFH6adww>@q8mAA07c96HeR(b}CoWvIvXiw{rzDPujZWY1n@0Nc z3W|xUI4pt9%*x_l{znC41eQ|5 z9Zu{T+5EK3IjyvBWP}ye4^4<2^1|gLt zHD;oxlYo|So`R3t2!DhMSwV*c8(~mqz!gT(Cn8q;Fpk?*N8jVfGmN0RGF)>hj@K** zWLlJMDp!7`4QXGx5F0W^Pn($h`r0>`6rL$~jfRyk2S$Wv8vYlivm<#_aF;;IdtkC? zqa=GQoRhKa=VZBE{I67T(Kv|tui1-O-gj~?Pu)&Sd$5Eb-y$6&OS3hzUfd0C_cV~^ zIBYkZyWBS6GL>Iek};tC%RKn^m3x%RWo~^mHXBi@fKak$g-;NRN?k`Yh_4*S@lcpV zq{)L&ZbTH>o-SJ=OkPRG)55@sG{6z!1g>`L!gLPl0Tqa`)qT&4#*5C z7bI~7|3%^e^9B@4To#*6?I)eTML*%`M6q{q9i)&ZHWSy~Wdv=%5+Q=uu{!=eHjFz8I~u9^81kX48{|DgDaxNuUdIr{XV&uA__eRZtj zvhK6wGh$`^# zQdyGSz-rdR&#vNBm=i^0`5JOS+`FM<7n$om(1y#zKurV`R~EoOrxTW`IgHs=SaCQ* zd#bPEMHi6ilceO0SgfpoSUdju>ZsIGE0dT*xBTEldF9dIkx!Q;CN*8s_u~*#QU;?t z;4vz0M63e)ojdf@*iK}XD%V4cK|493-=kbgD~~hnC!v)JR}>^CB|U;cRs;)-kVK<+ zUqdU(!)AVw%v-R^o27+h={l^0l-+P(B*Qa>N=Pe|a522}m@{^JO0GWrvf{*L!X^U% zYDPL48sOHYm_?`GeH;<;yyzZ;6ZYFtVPhj=Vc9kheTA<07utW>a~NKg$;uav4CDpZ zcU>v2G~xMp0;M4ho{azob^^y9i7BOX|79{q;3iH+)sd7D=^^h3i!P}FBt8dwK~<77 zUxNF?!|dxPzL8f7`i2*{;)lnB7}wfM2Duwtn{f}kE{7B+%USDedBt2M&X|My@)_P7 z^o))LKC>Rw$`*-Zuj+75Cnespf0db48X~0Nbn3D+un848v=cavXti$pxKouH5n6VG z2b{kW^c>AOI``ssS$`;9<{NSrFfzSBWbcXpgP1Y7*$kFcSvSBTu6>?=%8p3+o( zTz0??g@VMjHG!5cpz;mKjJ_`lsOa;*L^a`Q%hw27GF|-53v_x%4QxnRRCR5rcw;&+ zNX~+wlKeJ!S;xm3a@#;Q59F1~$!V%u(#VLY?Y?7t0p^TR0jcE7jo4uMpd-I)k)O1m z?n$YfJ7ml3N!&o=Ep(#gxxvmh9> z@!JJ%mkW@G@pc?Jus;zdIXO)^nfeYge@t05f*wB{r6h{!r7F7K;zO{ z0vB-~co`HRISq1ndV0Wwro?*>{eOaQEjyO~;7`b9$-76oB9@z@+m})00R7^_Z#eaJ zw=AR#pmO{_-;Yse`j(2gt`9t@a=fpfbA_St0~c3UH>NXv60k@q0U@V?aa%SX&r)-mOHyJ7xn3R31*Ci~dgK0o*UJ z`(yvxJ34jeVtp030bZ|Sl`pchr&_{>uz#&hfWUk+sAhjTuh`}br|W9j7gNx_(+>>P zaxJ*A)&9}%{Cw|QNypzmjh5EdejRV`>>%FWk1#G`IcDO_&(H6loaB`BCwTo<@|B#7 z%&T3C!E6=BMttTr@W|X8Fkq1=WicI)$zaY(a12TSmk1q4t+LwF5vaKkzR$7(oi}HA zPCJyqqZAO&uyl z7`QX+QF2KRs<^oo6`k$1+5OkVu}eI1`g zw-jz2{3tQ&h-7sH?-+ILEhck;=LAs~xoX}oU880I;T2wPDTqR~8PMTXF_Mf5iX^|r zk=yoYL71n-G~)-2f>Z75UMJ7@KG7Z1_lRzVSSUocSAO%oC_3OU>AKi{YcYY*BJt@P zix+yXIr=%^=HGAEU-hh5HZRn+yXg$Zk!ySW@ zGWLFx6;Q{PmbnLf!9KK2@-QC%UTFnN>9SBy*sWpL6~t;o_ImWeP@yLiD6nojn@=A9 zs(22+8;ftoHuza#)L=Pa3e;dlXR`>tsVU!P0`K!BLl126KL2IAUj1p%Yv32im2jAR ze<=|Lx#hR+%47qsf@40QOX4=L!s>a(V@Bk;KakwP7%n)LKK64f_9}z79r^NJw;1@7*DXx9EI6Xu+URp zo4Z~oyNYGB}(ecN|a@ zY6tIu&4H5cQ-f!ytGS)mp{g?UXid#V3-#voWiM^9{l0LwiscX6jp!C$;J5qXLE)|2 zFK>PjT#qoE2H+abcotm9S9G4*b;mn}&np@x+*a~8H^RL{pWlI#_JPZs98-VQhIRVz}gCYq-Wa^?f6;Yco=7TL?5NWN94^Sjm#T^729H!b% z){GpiAMR}pQ23+bhN2e116tcji@J60A1X=)e~`m-MkrIf07tN$#f~Um5cfgN^ds$N zjEpKWpP+{xp;G(}{i@Q}`twz*%*pQkChzKk5v$xeTp#R)FQNu-Y;J>2he0T~99oTl z;=(mZKws>!RZA|)8|)(wx5Q7-4NRQXKZ<|gF5frpU^!Y4s^18k&fzMuYXNHzEN=q| zvAkl~_x5GrUBEQwKtz2__U<{D`z-ZT1e8)2Dh{O+ufx3EYbt!wxyQY?u>b2_?>QgNI_rFRzqs^qp8L7uy07bZ^*scovPKB_DBs`u z_}oGcDD4BHy#V0?O?!kR!8ZsW7(2DU(U~BzT*bQgPMl!^09*@Db8dYyoF8A(B|aCX z27gsG5A^lta=-O;>L4jgmT2<7EGartbG1yp0X^;o9$tzd!10uSQQhxv*cI9G0!r(27*FBqp)`(+@T0t+AK%z|eC6lO z`QCcM4Ruq%w5fRe%H=cAc&t*A`q75%=E<#Eg9C$#2L_8bC$&F7nlqJ{z|mg7yYSwr zae%cF07D$@74fgn1fUCh-rt~h4)^dJgNj1~nZ7^85lZ|H!WNd?0oW}k@GU81DjEPf zNd%{o1Z}+G%M-g9SL739jbI4W%kKv~pCjc_K<;c4h--7S?SG>~^gAjJ(CF85#dF0V z>Ke$Vv%ryNNAZpQX1*F+S(&hMSoj8EI&Ob<`pu`yvDmsN@$*fCJ0 zcZb`XwW+ac0#AOG`evY#tFhaltI)D49!<3YdzERp9{9m;?5EAUQsenH^v953QO|!zWq3i?2i#CVtNyxE#DXuK;tr z!&^pk1Uy;y8NlHc_%*8|x53^i;nz$(I8%P9;gk;$O6#CNkruw>+=2Vy{!Tkp!ke^y z-T<@1^@M5Z!ynQX!1c8LCd&806}fRRoCxO8bft2x`4)-au!)dcRlbT`2Mw5>b^n#qaYH;>D znzzB(p94l7_RU;yYavjuRnVc9O`VlC3ue!$3p+XfyBs?^o&J0x<36Q$b&;=rv&Z5C zx+(z_Pi<*D{MqP5ckg%NJYaO+1d~A4dC^50cCO|YC6H9mbrDb)LsOhCKz)0FSQZ5z zx`l74A&OQs{dZ&CtKVW9alQa9#A5-gb^@59RRZv5tB~(%IG`I*SaSPsW-+&P`fUs1 z>%v+9trzdvZY)&#r^NBP5;&wW0gXBe6@EY&n=^$;P9~sw9u9cPTfjH&bW-dC28sj~ zpdm7UBZcA_JBLydliW`mG=Cu^Rk#(2ykFh$NYnalQ$N7j{Sgz2Rw4!7&De zY<_O0GrNW_Lf|`buJRkG$pPZwWALu6_03+*HjoS;;W-gRH?`izkNq-1qi4(lqIbdy zh-0ZQG0}j-eGM$(G5uc*BlG(>l-&*tTP2G^BU1QSKbmpcJqGnfp_IVKjc^n2O-w=+ zx28(Cd!3yG`&n;7BGob& z>X9%uM-i38^hOXAFvd3sB-iwybvljZ*?zu3z)vJMa?~<*@Ba*fmM9|J00Dmij{BHI z?VCc;P7@i_W(K@L%f9eMp3gCb7X*CXOIXac(6tuF{7|^AMmnwe;{Y6ai3sHbkVF2g zkJPhM5}RTzid?&WR>4HLu; zG*%BIF5Zv>HJ2^E6`KpV%-yzibWEtIsCde!V-zGOySuxKs;nIFc3S|YX7Sil%wsiU zalFy2??N?5zgYR&0Ll!@yDbf|6*cVUSqGTuj$92~>tL`6leHd&vUa zt;M-NyjtIKvSy9l$yTCgbTvv5kg$85FWpMSC9i#rRx%513J^2Eo&Lxe1}UE^>pW1D zY(DXt>r#b)2@ts@Sc1aV2=$lO-w9fS7#oCOhiH?17CpZjTrjs6G0nV*3VI**dRp!7#UxPFkp(Eo%D5AN^yyt&RB}%70Q(9j4&e zOb+u{Z{Z*mo-mXC(ug%{Vhn0Zbsw9jZ?EE?$*-CkDHwPVYY`YB0JW9&i-4BgptLy+ zLVf?Tep|~2aBbD`p;K{D$gqQtHqlV-O;|NH*PJ`f;>%Pcq9Lum$K)bEQ%<9iQbeuH zP;dmbt!+n6Rku~P+ky?)C!>5nP}?$l=9N{D7v;Y(=7Y_5mBPpNejJ*h7}zl*Jy)~XH4tNg z67{L*lJl`nKU?4oZiNwIxcZ*48@h%ek-5V;ssz`eZl&fmSF9RJlF8`|1(~S$K136c zzC>NKh`9)~rhFjt^qc1$?xRiT2kW6>j{AmQQH;p=32T+Mxp2!VjAKlNIfr(mM`j;e zy~J0j{mxbmJLUj&u7^DY_03nm6EK# zwt)OpJlylgt-QHp*%0=kV=(L`L=DsZYAq6h7yVSRq3hZ{E!omIBIGnzTUC4SWf zQ#MdTT=E0}_OCL+WZ)DgZVNE5p!+x^y>U56tRzcwlLXrM_F0T3tXZyco@*2O<~G8q z?VP|Svd!Wfmt&myHc=VVKd}G+SU9a*f-m@K4Z&*Bm3vRhkmRb>E5$0ZiRi;i%XQ(G zBBf#>OHGz@s}num8Fyd{6&$W34sSW*(Au1BnN3Vi%eXavRqs#dUOY$Mbe6%(c<4tk zy*v1M%HaJe6yO$+u{Bj7on*bX4-?85hak=JMIOPQMU-TLKRT{e(ehFa9u0ts8f!bo@3E@i5-{u(SvoZ(_b6IsrT<( zD_8wFKhQdlTf&twu`QvWpQs#0a~hn3HiN3vH5ww|0N0-o1HGLE7@$HB=3207UEl}~O_ks?q6TiZ+ASvkg6rqlE+=UNv|11)82 zSiMQfO8Ee~-bWu+Kbl6*Am)c)^qKF3FYr8fhZpIKSHz+sM_V|>mTHRHim5pCBTClP z*VGUuAG1mB&G6KMBD%u8HzwrH8*~A`rW|c32#+m>Jy8tNNzo9>c0m1<`1Puc(aX4X zw8%@(Eg?K8i5+S^X1Z@>9|G%n}$! z>h;3v6>aCmID?w(LZFf%+GL3+TCuBC)9=a05^D0_-hjG=l>NTY4pPQ8?JjCn6!Nq} zz=;~Icn^>^Ue1}*GUVwG z8^iI(hqPhzilVisa>U+pB%Q$r5N^SoYfU8OcD$Kmr<6KwKpmz|(f~9h5A+>CH33Mc zH%6`A{t)zXLLCY1Zo3v~tTr{h=dS0~QGO5Qbp?8etFJp0_3(oSz0{%lE4M_X?1Grj z?J#9=wDpQTT=!#cWzP6*ENq4kB0MIj%gUcnRsDw31t;-D&9tI-S^#sWJQLyq+_)ak-Z%k=KZu< zgO*P^PbEWQZrUHo^l8Au%QVwiV`s0u zJ~UCIoy-pP0fBO@rfK-qQ-f`|d>e#iiYfrYkZ&o5pmR3#di;Lnz~{zT>p^vVZN}dw zoD!f<&Xtd&;ab5_sn>XYi&QY!&su?fje&iRi2c;eEIrRX357%N!1G$TH#H|WTsC`x z;hB)2Wm8+RwOeBDhupT8hRnI-lAt^%9V%7rXBcuW#rBC-Xc>NlDE`(guF&C?PE}{j zN;I`wLCoY~4%!%A*&FJ@Y#Z~ng3K1I)b;|sz>JG6?=lkJ`R*+l!Yg|&7YfhjxEp_q zO6YF%u6uYN0qHyIsK^6<*Zo3B^H{*9>(=u!x6f5Pbgf);jdu(~B2;J|r9n%Q`FaU% zY{ZTFRCOiIzkI|Je9Z%K|9-U@-UNHLZP^}t7xZu zl~40d@1gQ24~qm94C*jvY}GBW&wnpnkeD&`l1Inqar1Te$jAfiH)oZDP7ch9F}zl# z^%`b7B!Yo$whl`?Z=1?4uUV%LfJEB`-EvFdp381=k^SOhDZJ6Yg>EacMu-?RvFkix{u2QTjHb1$(?b5!UfguY0@Og^pRuS6ed-dU^`Bpn+PM0ry zHi*dOtC$t3b+@QGRffL8Sby_C0aa!9ggRBmUH2HI*1B5)%yNZ$4Z8A@kCh{h8{L3l zloC=?N_kvxo=I?e?nWK0^*4eb{JesOmloH*$k_uzEqQ)Ks37o?ll~?e8QycS&}rG( zOAed(-tdmMvZD2~V0KIH+7euJbLhXxBEU5qaoWF}#6 zd69AtG4lB|HvkbKARy!sCp|41>4k-1EB4UV*bVsHd~CyVz~*Icm4OCRE~dF{HxH$> z$Jr@2@0V;Y`OoK8i`DE=9Tu{>7F1TMPK};qdH7Hsb$`(&MmI)IPnN8)LfMNP3uKn> zg#w&q$w4jbv;vW!@L3iCj zHWVT@8Rz20niR!0!VCmZ`v~OjZXFZ){>Pbb&PuIwD%I-2kqj)p%3hY=LYJ-4MnA>vK*$o;fW~6UL)iC9o|qB4jFW z@-_5f^UKQ~5)7er)R!*Y+mtjV3*+ zryI8$jDZBDAyQo48KLffbKr7g7I&j>dizGKycCiqyC7kVWUVFlpc9Dj@71@xG{#;} z=p|XIv&aS8`)uBG!y#gG@n?*@ggClypfO*_hGTwi18OIc=lYp~%VkRiQ{=HI5kC~% zvcq))iqBNRoAYRS4I!Xp#?;hQCt$&BnU%td?eyhHvEduF2=U<)Uhuig zUy_9FyBhiRi)HXNA@N~+*9=N5y1f6+a%lz8iFICw<2o$pKW<=^zwN>7&%TP!g0?D}5l+ zza{MrnRc5W>gCz1sAn1VuBlI64UV{Yl_S;tRYZ~~d?>im+aGz3$AwPOQ0a4K!dP@e zpvh^Gu^lVh@3ry!v+?gcuc7-OT=zFVvqpJ*RHCOJhZGoB!#_qc{Up6^Dax*ywpd?e z+UoKuz>4=_KKwCU3}ZhjLZPPjOoFpvPvf9Vq`I%jb{e zRmn8+9q73(w%NnSl{X5(xk;?td)|e;hJFjtsU793+IXebK0LO46NDqY;JlAAwd25O zvCm_2($*tl?fgGHzmR52FKma*VF`n-wdd#;6+ggb##_^8{%6*C)B)thm2YhaEY%n&gJ*-3$`yQBG zmRMzs0eoiaJC9_~&b|g$Tv!iqkT^yU8KTS8eFxzAWo6}`t5*^y6Vn@57YuR$Pvd%y z41rC^M7g*x|7;|#8%pTT1}jp9euH3A(?@IF+we)!OC@tJQL7iq@ituv)rDWCt5u`G z@?d$eyEWzz>1b-|f8gp^39auV>*C5unOxEaMe=eYu{+8$?`!q^yaAAp=;}eM)`L2b z`0hd-TEel~ytE|pUbm^f=v9Q?Yy_bo8_pTjz~%TaHXID^)2d?S$C2Ag?7yV0!K${@ zzJ4d7EE}sGUvfS!G@(wh#tdf$=Z;edb6Tu2aSUJdf1|p6VBi}9ZxK`|SUUKaJAQ>p z7vY$)UcL3p^?L|psMgt8;L$*&A1qqyx*__s z#JAR?rgySGGIQGz+Jf#%cykars2BRf4P>wHTc-qc3h#9CB`!lA*QQR8d!Eg|j~G$m z2D0Q<20pM3&|yoa#YLDF-A$yMubvn7Vaz>8N1a%0?y}G4tPkSOUuw`K4v`>CM%^>0 zaZ8xq;*~%dbDxdS!ga(5sM?9N?BO03q@9zPtrrAV4UT5Mt$Jl;yq4;<&4f73&$NuY zjHX_}lU`wu1_IcF4K9y&aR%Q1kqEJ@>r*5@Y$ml6QCZs0z3-RTsp&IGwGMn#*Gr)I zOtE5VVMt)70;Vw;)TqPj(*h|F#@7zw?2PBR;y|q)jM}AFK!;bt2YIU0v{aaguLn@O zk8uPQN{(&FfaSNMZ_;~rTf#^7LJs)@bj+@MyKq36n!JA`YRr#$TXek(|)>G@~jZ64^Rt-M!D7o&i(G6C8TeQZx z&oL}OdC73t2*5g2y`mSEZaM{fpuVhz$U6Pb(_qA5)+daT?l~03=-Ev69~uiQ0$D;$ zGTKwQV!*X{klv#^#PU$y5LH{Nhw_jy^unrEKiY35T^L%4%{JkiZo(PCd`(yYwFmNV zf1Vh?<~crRa(P{d>j}P3cXM;)S~(1xCMC8voU$2TesmyNyNhP6p}%yZ464D@stPLduZ$Vb4Hg9$&>q7 z5d(|s=8m}?fc9=vcJsWJeXa2INu<3A?+82;OU!+;PU=z9D8Z?OXc;+5#C5^MM8C98 z1-L{p`J7%!NkQM5J^z|U6GeJ!4IFbiuCcbm@o;uub4J0m?a(T4U(TU5VOWenFENG3 z@#EEY(=CmHI=ifyBA;YROe9q0k%|QIs&BtnmWE2neYJB?w}{gPGAB-kpAnrewz*q{=!6*f|@_@eR!h&vIsZk3b6+)>A;hA_v=$BU`@j=LR1ggLMF52pg zC>uwwv|CYEa>DR*NR801)(dO_Iw-{G;`>JyX)zWz9j@1ovQf5@sf3R;7UUE7|$c2-&^Gqq?#U;j1z0a*|KbBP5^a~HzZ;Rz4Rb06TyDgt$-5Yyu3xlY z*SK{>8e2D|8pz@6%I=L^Sk%g^HNq68b@xL`^Mop{-d`45Cyp$cPZ5u8NV&uR+4+4z zwX!^71tL`Cf92b}gG)cB4_0iCIt(&h{rxKuOzdA=jhG_1mmKJd4DM^%+e@;{?6s!7iO6Fs z?+Bf*XnK|bvIHOR(_3USmY!_=5hX2k8Tr1X?cqnt!;U(R^ActtJ23DGO~d=Q)DFdz zha+e5lO1ZHp!I}uu{@fTUk*WKDk{1wR4KniO z2-AJ>{$ZnX<)OxzcUDvSy5Zw%Zq*tZWBM{qPV{0;O$@iLXS{z-bqiJD!3GW0;5}ST zaOtR3Vt!_~m*35T*(@5EDe4$7c2-}dTL1z%{Ugm`bF~LnVqI@L^7kRmTegA69vU*hJ0FO!6mYIr~FmU(k4Q zA^4KRMV!5JRloaMsQ#~nMG!0@L8LOluQUXaOncj_7HY~X-?YO)k+Kht}f4A&UO z#wKo+XMG6YsSaezSMn>?k{^toQmKBILOBDgSqo{VU9z%XmW91Ab;z-hOZ?&4Zrq^D zG|J@UWZ*g29j*NtC0vE8T0d>znO!&;J(bgk{c2ynEA5X_3i?=IA5%LVN1}+9w2}bxy&HSL3twkeL>OgX}9TRD7T-RL6&k@+Y$q>hA%j`dT?%E$-8Yyg;==U zSG~E<>yklR3Jn&Fe3p@Nh<&7w>sg73#0>2^JE4XWivYL)X1_SUL(INk&@ppl@kz=e z=DRODWLkq1g9{p%wj%kFFc_5iMRnV*e|!`(*v1z|=XKi1$g8)qdW6sToIpD#DRgFP zsau(u^w7(MA*?kB)uXz`E`H;|-AWD3=r?1o_sDy(IcCM7bqpBbK&B5(HmPO2ftJ^!%i;h?Cy&zV^a%wsl$?PY;lPOEO zES*T`FGNqB zJd*^GQL+0y^k}*q}sIdiYoWe z_OP+tEDd5EKAUgd9R&MjRlAZhWy!|RQ55|Z_{qe#6X>)*zg*p%`8xiN&Ar8ew_%3F zaJ_?Eqja|2(};BiDv*A8*B&_czm&b#YQ zIYFrXx0l2>r^dcNElCsHjUEzlFW;DQ>*!VV$Bp+3TCWLtkEK)!3qTSt$1gkR?S4T{ zMq3;{G;Q`@<0I41ls+hf=^^(0nt2d>@K9#EXVfoI!&qnh2t%oG5 zuw*f0FvE(qY-+hO6{SpDw zZwQ9!T9d^`NnLjvijtm~&T=QyBNj%=^=UL!!ulU|>z|UEHyL4e>OUle91D4`Lpqy_FlU=S>1+ zjCYiO^%xam@g>zWh{VUIx>ue&Q9Shw5`OkRgZhnp71pBV?$xK`TpL4;nCrJ*bAIncDILpRF7y+dkEM}E41Rd02T!|SIID_>a$9un+?+c%6-QB|6nrhykD@>dy&=EDnUOQk!Nw0#Dgr=o|+C{ zpF#9A#`HdoOecwnWWMj3;AUxg#**4_XVmto4T7a57A{C@*S{sv-%k6zJ(X3xFm-e( z>DCEaU1m!aanE&&Vz$HO(b~YYLSV%633n`g=#FNZ4vP|8;qkrwVE*O~n*1@DfokO< zxxYiCh{RN)6UZok^pO+ka9~!`W{M^pND2UYrQl)lykT%cw08LA6~z-zm`OZ__*f& z48Wm;FF9&mjfo%?uN@u~*7h+Q6uzug#-0~VeHOCuZevck+LpkW>Syo_KslWuli&&*6fc~ znDO)s+MnwTzkEWX#*TUvhQO3&n40`@$K{IgjD1a-+sw-Y%8m}3UG3>t#L#J71h=^c zb#7}A^G50938BGg>R_hQfHKexF79k;OK^J2Wxcj3b2bdE2lX&B}Ifj}KMt%348AA(Jo*-{Z z_~HI@k=&twQdK%b+uHp>*I*UPP-fn5QET(5DY(Zjm8#j7v%WH?=RkZ~4nDu2j!}Pn zd*^FqgX>2ayjq84Ly$@ege(<)H%0a66u`{$jYpG39Hs78fmVH#gKQqpAeW>_%TAsI zuGa6Uro4&g**6+;_A{BeutPYw!y}a-7uldPR*t2JgJGS_@2VJNylJ)UC@}U-m);?U zn!Yox(7VkNn^0|7RGVY%!n3+6TYmp3kA6A4a>i`!F|P^E47sonnjJ;T9TZK?>r%k+ z!N*Kd;_^+T?$4CmzK}=GK|Sj9U)Hpq;qzP4wOr@VlCuw;yWaIrEP#HZo<|h&++)yH zHqXQH&io9eIni#5rr&!>=uI`smqFBkb>fT4Gt`p|<3J_@rY zuJ!Oy-#1O{5Jd@#MF+Y9YaXO-Q8e`s(&58xE=Xd!W?6|KfWz$P6Ibuld7I2@csJjt zDSV{vLT|FRLIf?i-iv35A2gmsQ`fTO4}ITn$(d@XP~CZV_$DrEouy?1Zdf~SIIX!@ z;8UGCxcY8wdd9cfAxFH%#IfL@?bYJwmG8+*9zLo&A7}~r2GBsV!cjv}_#Kj3BNcl=7Hk>3lzD+x9 zFO-Y_jKToCU4M_I-MB)dI`d%ttRIKtRP;z$HIkp|mOqy} zchO>~IU3Q@t-4%C=E~OypEax1N%bu?B1s$*Qh&0NpWQuBFqta{zbFcv4mbTgjnM6k z3vUQKY)z)!`URh(Wna70u7Cz^mu^09TUxle#Ch@L8H!v!aK5ftqD&LhnytRmja>c< zxhZ9X#hE@T0zC4wzH@=F8JzE?`5Q|)#Lw)$`pHJSF{4A>Q0-aKz!fnk=L7Mbk*1!v z>C+J@aB~lZgCf#A4zXP|)YL20@`WsseCLmKqHEn>#qlCH_33?mA8nQvm--Plhv}P+ zFF7GW`J&C2*pS{YA5<}Dt6i4b+-9d3~s}B=QLrQ*p1u|i!_GyYd;r~%CB!%jl@zf zQGE51`-0Ue`(Z9`Ti$W*(ry>=Lm)xkbM_FPp?Izhz_p540p}O2arL}>E8|Wov2yxt zzwe|p!KHu$1*oo!q?G+y=jj*x@qFaVZJ>OL!3V1S^Q#jcz^@M82=&{6rTZw#7fI!N z<{!dLN@>+5CAXR7RKnaM?C=JV{~iT=rJ0#I8z;RMp|P~5Hyv4*tA;DCt1FrwIDCZo7 zh-(ZH;y0UL^G%O=XwB=TY44(yg=ZI$``WS%)|ao^SD<)^p;jWbg(T%R2MKWtwkzs% z-$n}~W1ScjH++Rjh1$mDfSv6L(SO+47RIQ}8XR?B5W^Zb1!+tVQtLLu;hL3wg9o6J z!A65s-SkG%oBevk;Me4YFJXv5m$!9ZUS6Bu?ne>eW@dYxUoImj_v~t%wi}|rl)q8@ z2b>go&E;1d02z--X6pJ}ij&`IYD}2j;u##}(sUNa72#x4OFJC&!ygoJ8fy^`d+tmp z5aOnO592ZB&`N}o(jKbByDOxSbQ#mAfOQc}He}#yBLs6{qB$h1vY+&}4Cns1i?K3A>S|U$!Kn8D+fh4dq*MOE`AaqfP z;N%%1=);?YUMHMr-<}{?ptDW-G=xS5d~uC0U3VBAAw)|kl_KQw5#C9ih;6sC}f^Q z_gOhV0dsu5QA5TW-lLAhF>v=QzG+52qlw+%jw&=c#UoE&ygN#?eLcae8{QkeO z)VmrTO;npVf7a-XvOx@l8HLV*v}^Fm!Ry3$Va(3@7Ta%uoOJyH{8w9`&#xT__g=H} z2ru7`P2Wd>><9th8Nqa0n@-Axl|9mem{tmz6HlSUk9uxEImzTtJk7=*KE=z14R|AmJMbV)d-q=#VIXH1R$=lmd~Yq}fb#<+eJQjGf&6WpFkZ zzVEfh$K;wx0JK?DjdKO=Em?yb?ft7jZd13vw zVLb@VC$LldzBIYyPQ8lqu>!4#Z6eR`j0{{UC+V z6{Kg%5MX_P1AqTvP5iQ-syyM-Ccc*@DC+LFI4_VGflpi9SRIuHd%g?uA#xMU{0#JrA1hLjwJ$7yJimJb znsV^P;E1!V|BOxaLH#>0k;y*!wULfvJQHS}=BadWa8UDWGTarEwYLSOw`#zG%I*5O zdCeM(LBv66c6iz>LB1^ee%)q|>O1bi2H(9+U{Y>?cy#9ER_OM^j@j zpbn1K@rL@k#1x7R*FEqnDC->dL1h#fe5?!G{ zpJ3sFskh4gLx*^V`Hh4EaZmc0%duxC&%6SPxFQB>@UOSMfecy{OcxNfq@wzlaN7w6aMenzM%s)JwKxPAjQ(dc|2dEU+01`-;x}#m4`m*|(*JYK|2I5Smk6JoJydMo zWc#pssbUykcRvERIMoshqMGik;+R2T9%w&(ci(+tukyj*D<%my&QuM;Ps?NVwfArh zd!s80InoEVgZJM%d3k%&xYlFG{c#@B?>{CUf?Vb5dqyB>Yhg`l98^dj0#eoX)AC@c z^3Q=HW*lC~mOcKVv@}|ajSvVoY5IXLE}mq|9*ZxJQx2MHuVLwu^>5gQF#yfzp@I$h zAK@XRerj4{x9L=PlWd>4<*R6m1%6Uvt)Nn1lapAfyMs?bHus={<)9>e`BB^ER_^omWS%kTiWO zG^y1fap>Re$sMOcFtDjh9?3*knq0R@vlTEZWUvaM?bWGcOLUDC8TVeJJPrjwmQC0}0yNek;4t)#=HBYU6qZd_h72aQXsjn+?mIRS0A8Hq7_uadVSCZ$Da0?;GgF0L9$LA+sH{^0lNBMZm->K6@jkDzB>)f1KGU} z$6m?4hJQsTRp=QiPl54hpSt7#8a^9>5+#Uyw8f+G&>^#v-2|AO{(jX4@q4aXz?Ov4 zWa~d#v5*daVpk!;TdXS6M-#62eL&A3!%}f&g#Qd8lYznSB-kGevn=-!H!N2FYmC8d z4C)wrRj0upJrPv>fCw)3ha{dn{A-Ms3Qe}9V-w87Pf$U{Zb3P^^=OkHQ2jMVg)g`5 zF&TFUfBN7|???w|NB*ITyUBlzQL=Og>V0&4N!<7?yMRdAy?}B$+R9--+h7dD!*tkC z;GZ$NwDANG8r|0ybtUeIU4LT-wz^x8(Z58sceC!_qFVX~Hc?Fp_)z=t)odg;yX5gb zDv+~jiHtMTdxyyJHV_u~=M-ADW!%N9Sf!1wNC_g7IkPG=}1x!W4)vVZA`K z2KqBgdLg6xR-r>R)DI+!(wj<&z+JYc91^6=_COIF1$D2l`PXs2v~!PKn4 zPGLhi(z<{tBOqSSP#uuzj~@!DM++|iM%OTN6#;d!O598uO83`AyyxJbVUocK-ynrf zz+wiMYey{IUqc2rZ)EWvy^d#D%|ehwD>^ebcTjJT(8w=@AMg*U;A4F0EjzHpPP1SV zW1H2;Hr9O`6WcS6-$;hv22>aOO<)$EtYbhp z#6N_mfAudSy|#0`=lszUB>pB+rgTMoXvg1!-wpkn(5ISI1ph1-bZq_Wvbg!s+5*ek z--AD4`}@Kn$XVO}*&1N;mjC%+J6eJ?Opi=LH$n-;#w_^4&Zz%KlmFo!<;9TijX{ zSV#Za#;5VW$2Rl|=oS0(@Z_27->0nZ+VSYtu@QIyGPnvU-#nA!d^9YP+Hankw2(64 zacl%bfCB)3n?I*9`_H$)S6}|-dqVwUO>4(SC?DLulT5=Y~a#9_7wc+U$(Flr=|(?q4%tg{RCXk*N_|kGFqKDsf&2| zFSFbe8J&}SmHDs_Cy$Tb1+WOpjp5;L*oiIf9On}!PW*x@$Z8*(fezSTolwy~Tpv%y zLjXPWX=JIJ9Xnu|3_v3o?hAy+Cnh5SB=nGN+5B;^MWhWVT8C{C*y@kn2>^895-)E0 z9)m&ebR_R=QUgA-6i4TVCvy8-_T3#K^} literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/Checkpointing6.png b/temp_dir/client-library/images/Checkpointing6.png new file mode 100644 index 0000000000000000000000000000000000000000..c37093d55c019c0759469abecf52fbb9a642d016 GIT binary patch literal 42842 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%0DFB+ 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 Ri=6@g5b~;WuVn5&{y#YvNIw7o literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/InMemoryProcessing1.png b/temp_dir/client-library/images/InMemoryProcessing1.png new file mode 100644 index 0000000000000000000000000000000000000000..c1989c2a2f63fca81681e801d637f0ed8b5872cd GIT binary patch literal 26391 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 DSzR)n literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/InMemoryProcessing2.png b/temp_dir/client-library/images/InMemoryProcessing2.png new file mode 100644 index 0000000000000000000000000000000000000000..3ddadcd9d2acc3bb5cd62ef28b7e8958032059a3 GIT binary patch literal 39290 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 KS|Y6P|Nj9z{}to_ literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/LocationProperties.png b/temp_dir/client-library/images/LocationProperties.png new file mode 100644 index 0000000000000000000000000000000000000000..3c55ef74383a04da5f9cabb83417e35bdf0d3e54 GIT binary patch literal 40762 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 literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/NameProperty.png b/temp_dir/client-library/images/NameProperty.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc2bd5a2286711496c89f2d5d19269f20751933 GIT binary patch literal 54366 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 MPgg&ebxsLQ04l@!od5s; literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/PlainBrokerMessaging.png b/temp_dir/client-library/images/PlainBrokerMessaging.png new file mode 100644 index 0000000000000000000000000000000000000000..4907fbae1f53f2211fba285218a334393492c477 GIT binary patch literal 16614 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 literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/QuixBuffering.png b/temp_dir/client-library/images/QuixBuffering.png new file mode 100644 index 0000000000000000000000000000000000000000..12c10312b5637fbd20619c81b470f7b2b3a53d73 GIT binary patch literal 51440 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 BDpLRe literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/QuixHorizontalScaling1.png b/temp_dir/client-library/images/QuixHorizontalScaling1.png new file mode 100644 index 0000000000000000000000000000000000000000..4b02fbe097fbb5a420c29e750a6753deeb31324a GIT binary patch literal 31123 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 DNY?$o literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/QuixHorizontalScaling2.png b/temp_dir/client-library/images/QuixHorizontalScaling2.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea438f7f7dd6be51213a9066044e0021413c362 GIT binary patch literal 36369 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

jQyT1>0s22 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 Kn=gIu>Hh*TS9B-< literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/QuixHorizontalScaling3.png b/temp_dir/client-library/images/QuixHorizontalScaling3.png new file mode 100644 index 0000000000000000000000000000000000000000..4b02fbe097fbb5a420c29e750a6753deeb31324a GIT binary patch literal 31123 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 DNY?$o literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/QuixMultipleTypes.png b/temp_dir/client-library/images/QuixMultipleTypes.png new file mode 100644 index 0000000000000000000000000000000000000000..44f1a8f656062d6ad6d3bf8837eff56653fa9543 GIT binary patch literal 209580 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%0DIae{>Tgm`%;EvN0-t2DBl*7fs)gZc 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�K*I@s8{YTS%IIW5BO^Ow3LB{ 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 }m|R2cjB2-?a}XjyTXjx|s2{YiT3S(@AZ4@mN6 z04i}pL2XWAFy}$ne$dsb{)i&B(;)F9$_kZPww>JRCyV^ax32xmXczDNx9dUgv;Tgk zaxD5a8y{~UNdakt`B^7=RghZ*x8v&i@{qvWHj@*S7gi0b#5=|E@|7bFQ!BT#KRCz4 zgrf}3tVA~t7);OjN-7ny|IW#+6T>w2O=n;R=79K4^NWzbEx=$9VxD8*m@}Z^>%rmo zvr*Z#<+1p)GwY?&$~ME_%zAZenM_)NjEQ&bhD_yn<%9xW=BRsF65tAanqE_m#!0te zy4HW+D?yDc+R)anX)6l>K1D-j;9~%?w9s8|o+amekS=BzC87%rW9c$8F~JlJau~`j__y zS}a%D;{|~UX*qs3yvYLA*qPWp$W2j@%mN9z!J~2iPnppo8l&5Khcg1HbxJOs#)nkX zj`^&Q+oI_I0!Sw?*FX76pWrjXj?sss1Mi9Vb)VPlQcw7U9m6of{`d8YwI;6->(w@c zg$mtj!bTg7#+BMB1PFS#SmyaN*NZSs`q1CI&Jm|R{jDAR~oT4eC}a^R(t2wsv=!F8(3U$e~|+VA4KLmK88SJD-oPIv8RsAoEK+m`5;JpQj2z;Q~? za|@Q*K&5H{Eze1y)+0sVaw+Y0Z0YLDJFYu_Qj9MD?_Y6VEuuur`4aEd`WoC>^t=AJ zJs8{J|6)8tEYN0~tyvg&_fxPR0+Au4a}pgvT9n;+HN9i-z6m0G4#yt@%pkuKsDrDa z7Y6Sw0D1r&+n!V^E^r?hHod0Wky}j1PZ5n<6W7@7Q~bgAT4J5E>a3|Ij?nI zv&@W9R>sg=*<1AsrLb`#->f5<;DMs zhW`UMDH6Pwd1vc$TA@v5bm7+Xn&(a(eMz0<_L`0=4 zDw_5aSoWJ~O)R|D3$WqyJM7dWdP|bXGx-vuhifiuoY*NfOOYl`wcVybB>48Mb*m!G zU_HxGC-zYL3Fh_oaVJiSyK;R^^}==BZo{ozFf)pFwsoQz@+S`-g4;<5%nLcZW5l2y zde3#jIKapDx+f;T95kg&k)+%{%?n^3TaFm(<%VbBzQoEK^MIT-*#r1h=e+N1)RL8H zCVPce%Th)4PpA#eWkbV@hj7C-%X~9rOBu5;-D&N0Cnu%=<841SPm7Nyge>%)rgYCn z+`rnqG5f*Kqa$dbHsNRwOMdY|G4_G{q1xb{Z#|Mpr7dLFGq03Y!yY1}4z>Y1v!-Z$ z%hFs7gp6f%hh77Y=L~TCV-`YKmlK>_B$VQ52+lhON)gXeRHsFj>3%|-<_a_QtTf6$ zVOM7g&PTccpSUoBTNa59Zt?k4s_yN_Jp8vr$fwziE(cpOPDb|P%rEJfIm`^TCy=W3 z?AaKgE*fPmI;`FdX|`&>48#T*Xo3l4%|)g&!GNm$J|oTrmjNOtjgOsG_Q@Pz+3aH~ z!@wPy(ZI~OSNcQ>`2${-Eh3?GsWrG~F5@6OK4G=X)Vpb(Oa6PfDK|;(iizRwOCSuw#8T9ck&wl` za^x0i+K}Un8qAJh960_1iNCWFrA~VXVMfpR%u!EaMs$)0uEs~YW^tgLwCWnI5W6)% zhpX$%!&MwRTd)b)^+hmZ)FarqE$D(J(Wp9;p>c6VpK&&$!bx6tqOOs&mMgZF6nbnH@+kz;Uj z>Rc>tE#}qN2^Oa^kC_R$g`WYK7{*`XFK&A1d(X7!vx?4C!+M0Bls~mNAnnhg3NuKw zVN|BRU;`I~C;cPPL z`5>mkN6U?>{F2I-`kN<)1-+PExP}L9yFTVO2YaPK;kEl0D^?jSTpnt86!hO1k8kz| z!x%AL-xMd^=4te#8%S^9r<*%)<%v!Hh$>O=mz9aI*q^eJf|vjnho2}A;(0`|E3gLJ_nOP{KKjm^%KZ$1Lg2QUbj}oy3OxiJ|kU{ zsJsMPp_y-rhGt@cu*3%uQV_VCVKIT>q)>L#c$D$}P3mFZ1=CFNxn(0s(BlHwnDT6F z!?h-STy1S24gEdh4h8%SWo|s3PR8`@w6{9iDv_M0;aR8r?fK(`pW_k4Dz$#m2UK9GF>b&gmS^+}B^oE8Oi-K@y zdKMXR^U;TAqQ$lmMcWB|@Ku~4C;M4BdA0zg56qL8;XA@a!QlW$x zf1*TEKk&-lsSl7<%epEXX26-EA9sL17ew8S&dRo^*aB zXi}aSFXg$k)3sah>T2SjLdK4s>M-=78Q1asWXa6^Wqyp7>0aU(gF^CUgS*knh1d_~ zF~Ud+xnGGlva4aF&v3DMzMY{JfJc*DK#IQ0dI6ri1a^&1>!7kkZ^xXRgU9J@O(ySD zgL6J;ZM~!Y^Qid!@d(Sx{@Kba(f7LkmYZqo=z{y(aHX!#<}f&gWn-UvqIV2~fXw^1 z)4sfXvKJAQS%+LvAdULH(#>r~v;0M5b4o@ScVqdPE`N2$zy)7wWVvczS)YVty6rR; zlsA8LvVHr))=n!kV?2EsBo{2iBs&RSxvC^s4UYvf)Uy1RHwZHi*Yd z{&q)d;onAo`xIzy+JkJepj9-5RgUO8jIOubqCOHijChT@`ysH@2?+J6xjJpn^8~K{ z^{SPKOyvDU?q2tgrn_#c)VY4Sj!~MAO5t9T_ha)L1f)#6F^D;#O6j~MI-Rs_pI1A= zvIgaheFH7oLXg+cHe>2v68=Tm_WC~ni$HY0*ig7FrxyDVogaQ;`5`H2XJ9H=ri`%) zJ&{UbV$|Y$x!%Of890sO22-DU?laWNRLUi*)iKL#iQ`>Pojzmj&MJ*U_Xcy@>5r^C zoY;hdaA=*1d>{VAd5ekC21-yy15gRe)dsJ1scLy{l#kOU!34}F6RX(7PNJlDs%`6? zhD|0zyLsz|z4Y=+cKOm38+5xe4-G9P-M1H+?35~k9vPa1x zQt%|flm>u*ea1@XmjAhCWV)wPGOx`(C4)&ATt2m{SFhXSkH1OpnZdH+?xk~j!@0a5 z%GybvbZ8;+5ltmC0k6;lk*uWIs_viGf2PGsdc>FjB;9R zBC$t01(rcXoPV@JYo~~|=n(KTtIl~yr9(w`Q|MiCfj#>^!NBE8Gr6od`Q|u#6GCKx zsgE7Y;(YNhU$Wo-^uM-dr$r_bTBzmKlUA;GY&a|0L4Pbk`53-CG-0FP7&cg}Cu+nv z2v*kyYYXFIz(SGX!n6Z_-mz|6YM)8U{Mn|j4@!FTsjW3ic4n<qWOpw?=11z2mJ`{!I+6wHz%lFU~nuZ8eqW$a8& z@a&rJO!(<+RdNc?)4$o`M*6GQ1P|S_=RDg-XCtmxopjKDGL4yQbDJmJAdBJ zo;hQ+TFu?3;biA$qG z6QIsT>aGWYRtJF@gMum6rMq_K-J^l8A-s)FQJn*sm9Wbo$Xwhhw7~`apN*VxXe2@^ zwTcJ8%Z~9{FqJD!eBhk_HX`=|I5}-pSI4@icO1E+Z)bpuRpQg zXkvpAHV){gN>;8`2##=naqTeVHi$fpdnsB0!^)|N@_Bqkuo@0*UH2n4H&{b;TFplz zYgWu2UT@i(PIRo*DB55&uuE63*h??HY&UP-w0^(Odr3ijf(wD3-2p#$Z=|uz=EQk! zmb-Va)x_ihe_peb2TFX6FWq1}4<`y~&E`O~EG6>EMoB(RfgU`J#^3V|7GP}vrrz|} zS$|a|7Wr5T3x^y_qsm*>?Uu@1-a#CIGbI%&NwX0mXSx}HO7T_aPrC~q+x1pHmoe#D z{d*@}pabzxusg?$i9|dWo`Er9o0o@GG8ALz69-kwW%Ghx{4{_%0G0#8T@%KBZ9Mj_6oLwX z2Ok~a*$?xd^cezF^MbmD@Ec)0*feW(p^nGkL;aE&ogRc1#8&4)lvjZo6 zXie~o!spzmo#^5d4#q4x2e|>_aXJK5D0Qf69Az1?VcvDf4J8MZyq!M;vT;u$%jL%% z{!YG`>W^GT92<%ruhhW=)6U~!rnWYA?Mq)gXM=gcwtFMn=??8+h>Z;!1%Oe-suk#= z)Sw{uY|UfC{i3Y_1`qq}JzOx3Y>A=ev_uHTK%ico_qw;^@yJT!v7KIS*kcbZ+v&B2 zl?`?W+xE)2^Y+SxbGEy?OH@F?I(^~P!-jPN0Wx$!I4_Jyp)qCn8_}IxW}wA1@6s>k z>qPF?fT>)Z;@t__GpoTZY{dD)W@}8(M+TuhFMu3WW8AANWs8Owhg zJ)IrOsv*%=#TQ}7}~8=>T@rgX8CKd-`qm+ygN6pv-p^H2BrN_I=;~KI`pvwUN7j)Zt^Q66YnSR627u zDW?(002aVRc;R^KwKFV^B2sBD=c$~OOeh%);LbcAa|0oll=Km95SJJe2QN%`!wW?- z+MFBmaswDDw31h>(`i`^r84|4wP=5NFcmr3;cKG}NLq=QW5%H9TBj_&2Tv}RMFdm? zn(SP0d;tNUJr`ig=63G{ zHk)O-y%66}GXk$A&xWb{i7v0CtHSvl9&VfIP~y9X4T9bujL2e_Up^mJSs|FR!0Rf7 zeB(RcWxw(p$5ZCJacjr^&p&#>_6H;DkES+;**Z7PvXv`U4Kn7uJOGy9Oy^=?@w=i@ zo;KP=hLq1&S{+_)17pi_&X}H2%k`2yvfi;X>r2*bl&s%Bu+7aayK?!G-MW3py1gDZ zYC0-}6L0D`1&AIKLEn-=Bu zg>@K9D-%}vk0W8oUM(gpj-55Uq>em4R&wfy0mXi7Gy_J-a6F#ajq5k;O^-b6OsS84 z$rMEn#N(NY)u(xUj2&)J86~VtK9SR}kpULa2|;)yGBWmDOyKC1Plx_smK7fWiU5>V z4wf-8)(O6cm_3&cFyWEb4nJe#0)9{QIsi3FDSX}Vk~*j($mg2O3V#Aqo;T*1Za4Rh zXEHHnx%z6JAPk^H^HMk7B@-onTQ}KDv`;jwfN{r@6UrN2Czd_E-W^; zp^^R|&t4rG;2Z2ym~O_g@+{3leVyP(A35``wefgtz23k^W4ZV;@TXcp#-?PTK#Ud5 z21CFe<(^1>I1qKJ3HLU$R&xtT62EhAzYdF;L+cZzDggt>2GRAC^I%G!lCV;A z*yM}~6RV%KK>G-!Rtu?Hy;WD&URjmsfG(50(6lrW++Y#Pp#3oK`rtI+!ho-?)XrU&M;sMGayuH7#ESUz8ysv|P zUnK&vCOQQCf95slBXX!s5x}+SczTqVry>^8y^+LFi5c;L>Z4*pke|M*;oyn_vYU%e z3)?53VRBzy7feO$fThs{3s1g{VCuKt*h2bGJnHJ&F8=s0p3^)`9&lWz;Q$niIPf`c z1eS8hCJRN@HEFXNy>1oCKY@8LEsPEJ5URPauE0qFHE|oA_%mL#8cJ_9$ zzPW*Ft){`m9Om2SOvr?n5Zx`Dz5P}eB9Q9qep@G+X?+N;2&9_LCfcpGo`*x4S*pxs z(^y=rC`pKbt}CzZyi_4!d%a5-mHM1b45eTL){|$pzfCp0P!@0qeobrrG+=3RTnBG8 zKx=&C_6AO!JYf=o(4rIcLW*0Hs1cmQ1qA%{jJ2D@HNyj8-y8eo9FhSU>X&@3q#kD! z_k^AIxu}7u4WN*~h}WObM{`&1LD}ELVyXaGvg4(2y=`k==neYX&n(Xm1*W{i&)@%@ zv6FE)o5`50!auw0F`~q1s;24*40k(4<$;Ae)CKH`<>8X8Pac>qpB^%19jTk|U;gVO zpQ$6w)LjY5Z|q5a=@)((?JCQBzU^NJSscnVJnOIn(8^TP*;E*m8MHTdmb|9Hl(9FH zzAnMZr!_?i0L;)MP#FSS00-X=Tznq0eU^|QPl+}4V`Y>RFck#$*RS8i z;?fc_0#h-h5^?kyjExGjr*y-+P&Txn>c)P&mS*uBDZ=e41zkkYU4{4UpN9s6Qzgjg z%}1reiJLK>k3sjKT0^VbGe(hPELgG~^ugiJ=CJLZlWuS*FhxKZd}YGGUOyZRkWZK@ z3)VjGF(NfA$lf8RiZo)OLn@T#4i7p$?BE>Ea=Y&V{Tl1$m(+AV&M-VdFm;y%=$F@a z@kf90JmT?`O4KS{k9d$8OTe2+{a=mgA-l*23OM^AYezl&CQm(i5Avapw3dOv#TrcpOb79OVC<%uDg#?qy5;YrGij}tZm+NR zVqwyZMj3Ov-JUlskTr}MGc{l=HZWzSJ__RPJw{u@Kc>1BM`NT@Dde<x@rQ(#AH8C>7*hyKfKEL2uw8^IO^v6wovhR`-6`NOf@|G zOo=$7a^B?7GX0Kq>O~piwDxGK)jteBwer{Ne+G3PNgiXqMXhEFolaj`8%x+|W@ksj z1jKl#bbWvhRCjMSm*-$@V22(78ucXB;Wx(oYz0dT^VS3A1}1^|pX~U_#y2oxY>yp9 zllP(k0P04JkqVQdrvX>Ay*+qJ{4Nk>Wjd>zIm6*}c*rINh+G##n}@xO>6CyJOSY|MQ`#xs3x1_i)b&_*St!nuhYE&&B3IaXCT1#>l*6CSMo#I; zjFofGsXH*N5fu~NQvjET9n~kI;Ay>;fpRxg4bKxbG=*-)G2SW%^t)5$yLNjYfA)n7 zT5AK&SraQ@Aj(R4)}0qR^a!S;RdGR?^M-+JSMBs!=T&7Oe&7EOEWmR zGK)ekEw+ek)GHTW!L@7GFgHIdjp5$@jsP(aQ-UiV%mO~NrU*KnJ~fU5^!h#BYqjiC zgEbhU)oP($ucO&y>9>Pkw<~6qYdMo5upVJ$WksxsSqSi*PH8H`vYrYh)3Soe-u1?f z=@OE*umkbw*?^(3ChW~AU=_d=)j=c8%yjn3V_a~PZ?`&_rT1GRAw63(BQeY@oL+lD zmlp}S^^aV(N;2s6C*i-BM_Dc%F#!=9HC8MPessJ<&DKqsZ?+bVjjS|S?p5%C|FqEQm9+>Tw>~urIJct<<}||NF2oH;3xMK5pH`Q!I^PHLk9;n9j1ED(E#amS_df)B^ysN zlCYWzFwJq}HFDigU?vPNgf(YuWUw$(_tBu|tcEj5Q}-ZfOeRd-L>m>>Vi<#Qs9jxa ziC5f>7b8Z&4?@?fshjU#+&wV$C!c-E7#;ycmh(93h2X`_V@Xun?GZ=~^tc|)Lmf=DJ6$nS{BE@frn&-UnPd`~Oj`C2$;24xOa}Qv&Pmq8 zU@8Lb5onksbcdt^&Pq=+l*Z3k$?Z;-#GcOf^;|lE`FtFy7|nanG=K9NgMxku(9&C*`SzCP>m;AXAWAJfCy|2+@`>~ zVgtYlMx5aq@t%wEBcnMSpjas2(158bKhJ;$aJ!dGFOg^GYJIa1W3gj$f@YT#H&cmFGTtk`1W1n$E zUftp$BM%)}AdtqeK*Qk9ESQ0t6}~5*d<0MZgSTOGa|`We3yo$&emP=yT$dVvp&`Uc zyqILmllLDq&XKmrUE`;3Vw709&kTV~IyS~qK8<%ApTlx7E!ur;zlF>79@csZG{;E{ z7*aB)zy3%55CP$ETXO1xZS3@UbU?+oM*ah6tbsmrL*0+(Fx;vVw%QtuM|9$c~y=P;g%*kAaobrpBfJhB1 z4u-d0(o+dW<&=b%xx728-$!ED$4oYXQ%hy6F3g~iO<^$XVQXs}uU)!|D_5@IU~fmS zbL{vr9i;VI&6zG^rN}t2Tx3hi!IX421XEt-qY0}EQ>IuC3@&&x|>Z{1-3u3qHwT4QuEXj%qb?rmw$mD37AZ-XnuwfrXGKm0w z#$y5HTrL;sr!1yUgq+iRF@zjX&F`>pnVdVpYfIs6+QPyoB!sdjXY>7^|K`YN>PR#7 zJ%m)h`12n@eZOW5h1dE6poqGu{QXQogZ;odc_w8)t903Rn3VZU>tfkoF#VilmCT_n zb8SV2gXXE?-FcpMhi)5tWdmV4NE7Vt3LQ+wQ1Nvb0GI{yo5*ZsaUMVLL+?=uf}<}e zfSsS4Q~ANn{U(N;hhJ*~NGvcKg`V87>y~w75>wsO%gyU5yw-j^Efv@gKDRb zoAoZPRr}a(_r*?i29UoC-*@EV91aHeewx-oNn7R&#+_NJ0Rv~MLOZluC1}3A?m2;| z**S!J%mbSshb1139AQ?k&tUIsJm_LLu%OHLLQ#C7P{7rz*HEuD(QGzUB4CDEC>Ag~ zH?K18?%s}Rr^Zl8CzmClvV)mNB$=0>?U}Hhlj|8Yc=|Uthc#Wu2*Vx^@?Lb11wpx? zsi1c{TmzgIwoW{|e3kKf1i>-2KYmC`lFY1K&r85L5}5jDzxBW0m7RO(#tuIEsplj- zPw~FE#*Ag%Q1a9+Fs}pa2(x;zTXIQ}Yy2=-l*fo z+8QoixTwxFf*sN=g<=Vn*;(u#>|@v`<7exG>=6%10`H)+h-4fTDQ{{KqE*f=5ttGUDZ9`+uPMDot-PASS;w!WjTC$kh!>!Xs|FF6{gmOM;Kd0 z9-qREpSmkSgA*l%7$c1_9$J{e+fG){NhGn}>|?#w!%i2dbw_A>`I6<jAFr{oPiOSAFCm6)rV%lxomX#GJCEk?pPrE)W4f1u2 zQ4;HyPU-rxq(^VMgZ+IR)D8rc78d65&Ud^6g<=tZ@tMzR|8uR?YAnMxwFdYcd@ja# zF;Oc28zaSi5`igC5~EA3P-D#qeBXsq5jncNx_&E)rqkDg40;rktP^)~pCg!N*KR6F z(w>hxc&A<9#~_$G@|ij+^WBwz{6?R|z*KeWAT<$X07TQkVj4^dMg-ULDaPt>+0Qc( zu|89!CVz8$K9(^UXvxl)2FQJgcrdVZ7fKkB5Gi;M87sl8&6pLM6S`(f!M%@awIODT zt>jNW{s>>QkH~$7#u3lF_JVsN*VnJnzAb<{x$Ln9eNm+v+&}R;h+ zp<^u(OQMiWVYO65Z!p4ctB<`7O9~9s&H~-xk)-E~%p%=)EBLm!qdM6hD@FOF_Ngu+ z(+jz~a3n!~z4vawSS{1?aI(^pm=F%kb%rFFii^GCVJv+W?HPsxQTkgOo7mae)4|D~ zagC74sLalxm@f)U)thw;#$!F6V^SFSjZuX8fJqZ(9!j?6{18&L&Dp5X^6#}49dLsY zTJ3gZGH7g`|87*C`_BPWrn$NkOc_o!*YCRtrmn2*;$xqA$*d4~ka8bL>`k(AGyxg$ zq`6~DHy6e@*+=FfL#BkHVhq|?oXO(cv3apkxl|n8eivKY+j#ZjMV0mH)q}~J9gi?G zQ_&$?t5==rq2N8Cjytj(mN=Pcn1>n<={`GfDOh&R4H+5!oQE^_I4u#Vl_IOc&$Ku@ zi({)R*xB7htya_ho}aH^VPOt2e&*K!Q~JQ3v3xt2Qq-CPQwB7qzwGV@4Vn3r# zUM%Yx?srGn?+(!F(w=1?c3WVSr7jxIMy0Nhz&HctMfv*Uk5} zuH_*nHL&>J9qcalL9Z#P0bT7`LgUDxR0?SV?WM=kj8Qwl=qLaIi1- zkoE-+Kl}jR^PYF(TQ9zXS6;cG`$3%}*Gse6vJ&Ee%_1fuj~F=aGb-i0gd4H5QxPx5 zW&}NMB<<8(rL5;LHrsdPly{w&I@+B$5RPmqwB7Hp%$NpK4(jZsedeIo1&_egQJL?J zVxYVBIF2j7rQt)>2GQ)(DnJxz!_|dZj-Od!%-s$yJ;!`H# z?b@abXGT6T1T^i3Ykd64l(p$GF`q|fx+xxfopu|0`v>TC`zYme_<{F5jaV{#>9;Y8}%CYclT5pV#gM($KSoL;1>>nTuge$4bxiz%tOv=2ue|YQjc|9EsjIj4@MoWU*=!C%_mg+I$*o_^ zZ0PvpvbAd`jSkBl!!ZVAllnarQ*o@$7jR-_7Bi(R;<1tL&Gj2Maq-oQxV3gmrB@zi zw#CfPh^3!SyNh1G>jzx|sWi<((*nGq@tv<{{zU{)Zqn&3>pXyYIFlV#mu{C#W={tn zOP8mPuOgetV(s=Vwe9n@E0r=%ojRc*%@!`EmDrmIbzcZkY(hxYt!4V+t>RvhK&G<8ZhsobY?PWdF=iNuP7^dMkT$FM+V`#*ZZ9# zo{V&flB9`+g3+j^(+m68YpT&t!U3RpqTb0Ywu+4%n$5^>AeYUm+`7NVJy}&ZCXu`~M21ahh>`p73TV9o@G&fA~|4FH?+1SKBqbWS9& zFh8qi12Udb7vSpv$Y7RYV9NdY!a-xV{xC3(T;ll;dRI{=5Gjo~m&Qy7~tDSxSSXSN9Jv><@5kX%Qdz!29sRD=*_4-+T_;4g)$+ z$mekXefL_{B+y_^&XHw<*t9SM&ztpvdo(lufeS>P-Y2tU@)`q%sdN_EY+e*PK~uNO z%$x_01?bR0XCr3JZ$`l;bia66&PquhNj$z<5I>Ch4iVzcTp5;{2suNpuF}|4bh5Hp zxI=!3soW6sZdTR}%>V+C-f5`LGH=u8a$q+Q12Ri}%|>0mLVV2P{Jctg97EFT(Kdni zAdi_+QEZ1gqNtn6=k+-LjG}av8syB}_pUZ-iM$(-E!=~lItY1i^BS{sHTm3A%v2aX z5p_6z`z{FwgI%^TTh5yh4l#zV7joc0F!dY1{o8MJ+x@MNyMB8gfBwZ+j3E@pcV8$6 z2ccCzN^Tqg@c@%qX19wpMp&B33MxqSYRr(L+8mPdv0QLd}g0B3s5x#dPM67`mQTf<>Z z2czDYz+bo1M~CaC*As{u5R_}=ku_de=UV6zohsAWGy2;Kv-hmz?RkwqV&Y+C%(1ah zksE&i@`r#za7;hEOb%Io==b<-rneSxEnba%y)en4E={ba{LswnZ6H89z@v{mjQ70v zefYu`zKGW@T@k~{^+PGdK=w4eUt|$YFBV4H7#lem8Kp$n3lI8iZpRSf3(K~%Ges4h z!}STD-$JbBP1zab*T=(Fps}Wa<>ZY03~(j8i0#c5f1!&MGlx(9Q%fMG%yr z-o{PncK7zsIH;+c<)QoU#p6#riqC!NOSpc0O+k_eHxKJ`XU`#@&m!(Z?9dS(}?DR>=vRyrHSWxubK^NJ=y|P)mqis@~6wK?q06za|e(-v|%Dc&Phj= zuE}WPbz|2!947WUPrmIb{KjwJ9cJqK`hmcd%nrjmJ=bXI`un5;E5RG6=3Zh+4c!ik z={Qa;S3rP_0 z+P>5!QJIBc$~(Sjoe)?l@9-m-V);m}=iWrYF*2o638z+%W9`4|)AN2Z>3?ZOBn+f!2;ZORcW65>lLF3w5RsQ?yuRMdH#>a&5PmEOqNe_7MiFJZC zf+D?NBWvoLGCk$}4=ky#1$vUr&sC6O;_Fv1ay$2kqrK{kR49rbX8UdDMqg2)Inl93 znzS)}rtUu)Cv)$SX6j9Wq3`y=uLq|1oS{-Z8Mk7QBnZpH!j6nP52a16TL|FGfA0`w z4@j`OU#%+;nzey5U}~xNOw$=7l{cbc#!lnA2-bj=iO-pxcKTgxY;L1fZy+`t;QjA? z8pU!6fBA(kpt@gEV3?nuN3l@E!r~&b`Mez18F0C&yWO@9XWBK`)OK?q5AMHg9~Ln3 zS#Uhm)0r#^`69A8GEo^FFw&9q_*l~)D1eB)V$d^#z9^IR4y5V(X*w9wg{4x){@7=< z1C8&?yqm1NA`z+%xNxYsf7R>ElQTdNO|JG5kBw$gz>6kb2WBz^LQ6sUC>s_XtpqE% zdiNy{KG`0GmVIwd&%_gGG;1os@;&o&%#@2_30b1xS1O%GrCd@MAj^QvuzBsoJh5~* zv~ECYiV`fFj?kz#(Wp1nSWs)!jp>*wB}|LaBOnwm_P3P}%sk8{W7FjvXz@S5b$}(Q3YgPk3b1rm= zneU{RjU1E(XCvpKA`lcBM3{8(_c_qmO3|h%3f;4j*xW&r))F7)O~UmM~S1CzXLxtU2>D~->nM*D`!a1m@EB0yF^nd%+JnZrdYt%_LfSmmL!q^ z?ke%?4SaHhi^{D@!%Z;`l|6kEMdMvq8Z@Skdal{Z402goOgQwLvNo`iypMp=l`!BM ztil8+UAho$*{FQ)sb`3v{xX#%x0M{bz#mw}MRiVS)b*DLtZ8%BnTcDPxm%_Q>;)hT;j?;Z-Z z2)}v3KTAd15U7>@+MGoO^r#uZCJcM)dRT2ir@}Qt-HIIm0#m$qI*{3&M#jpR48C{T z8Klw_Hm8wJ)01i}2BcgrqB2{?TxC{*S$-ZKf}vc*&%*a52XKthY_w3_ubSAo*)R=G z5ade-JP{%X#wwH{4*5!X`O4CXP!wgE)yp$er9K0s1}yI8IGO9~`}o9{Ua=Ch9~#^* zD&JV!t$RCBAl=2V+e0~*!pX%M9G{;-F`JY#Y`xjU=GK-(<~OcglaCues|~K^!RjJu z@ZK6oW>;;OhbUPo)nF`%;XaIjaVSSSJE8UF^Y_HKIAy~%$;3nDGbIyb6lup1!t)NtzK`xh9hbhT0fv9dr<$bcm)~sMQ0$LYdvWl>?SP$DnVfeN{QYib$_Q8h# zGARlrFzE)>VK&kGNHXAC#5~f3YD|ZuWXZ-RnOc2f*AS!=a)pcHqTK`9nM}GVr@Z$( zr0^c}eg97ifNrX(B!O;Q_Fm$#B+^RM$oAR5<-SUuZLz>i1U+iF;eRN3PYg5Q?OFxq0ui6UL|Pv2AVLyX9}3f==ct%dHS4-I%~b)c?718G*fQ| z2i=v&erGThgvlX8axle!KIJ(VCG|WkV@Z{q>f8gobQ ze4&VZaR!Sk$55P|*Xxk-XXbmbzl{#t``PkM>xOy_y-r(ziUX3%l`=||S)_6_FN~wz zwvibFvQR2}utndxV2r{JdJ7vf8xRz)rD?+KdIb|p25H(pXsE3MPnT zyT;C0E(2vO&k!VGWnYKcE1n*d=M#Wx6ymogv?KFePT{YD>AILNl0@QDL%XzGCtb^tF zpqrs~j@^A{&YZ^F{5&#+Vl*zP)okGA&70bbbkkR9P@-sS-!JA1n5mR8J3ogsMb|^F z7h|C`o=Q3>^S%;*au#<|4L2lWCY5e|KmZtwYn7~+5vij^0jZFa800VpMLZ_Q^^8Um z?UT{tbuzt~G0J3rxXN<*jPyxN94$ehJ}{I8nOGzZ0P9A$4;A;8vs~fr7|!q}1la%w z9Bu$yT$@aJr@&NTp&5fhqUuc#+>->Haz*B3 z>no24Ijq?yx;Gd&Wf(xv4mWpne{e1^v)sM6=rJ% z%Gxtq8dQ4wx+5shoh(8qo0Y@(z)Az|plm>d@=|7^G+!JclcxqNVOp-y5G$)oxP18v z&YV7pz1YZsGK) zQ+WQl=j1=5@=5go3v;sqrp*2&M0O|VNT1>N(tz(_XK2lblgprI++OarN%dqe?a<)$ za_6936mf#9mBlf)m};-7fR(;p1O?*-A3r6cG-qp61+jG3s?NmrLRF zu?mjOmyyqLZP2r=jjgRsT)K1#*RNj1LA8qhu!p!C(*}SP4xS(aBJ)LilKq1N39^H& zgwAl8NKWho!T}lqDK%htY1xwoODL?%kADihxcfh?FwUMmgKO8Xq0wyGcqHi~DL^k^ zZf;H$7)81{#k z58o&Chw^%J5TQZD!_Z`68oEKG@$*E@^`_KVDSErENijMAF}EQRc%CXHs(j0iMln^q zrW`k8%y($fI1HwYMT%yZ#$rl{$To9yP-t2@)Sc&SW?%~gE2x<0=*vYQht9S;L6!af z5Dz~5@R4Tf2u!_U9CTM67{JtFrbk=Dy7U6Wa0i$QLc(c5=CtqB^ddLig@4=7H3gE* z-8~(01VRB!MO}5$OdSSO@{*eJoeGB;->nX2XDK!}x3RmsuK@7S{cpkJPduAe5B3j_Jp7PeFPEjB%d*^Kt4p}GzKxlg zvJS5&-ueW7{}28EKlii$1TVe(G6tO?-u?8u)Xhdvv0vM>?zy!MeEKgwi=X=Nhw-+j zp1@~5^BJ5ydtRUIv!DAse(FOX!f*cOZ{j^qKaK6}ZCrfqB7X4w@7HTQ^UO2YSl=)( zHQf!TKpIq_27u+H;Wz!CIBP|E5F8uz9nVO8B z2@n3e22-@5&~;RnZ;cP_Rzoi4Cl*RLcYG0Z<*eo$^55!>25zq1!iAS#!mV33wMLb- zgB^51^EUDAIvhY^x^DXib(Q6$0Se5OGmNH@GnOMH-OqWD<#?*A(&5Q(l~y6Rc!If@l}D1Qn`eKgQ{5Mey4|S z-^$*N7H4~QRmLCmsbTVVegO|-o;WT^hLrx^$hwH-V^<^h@qmpXBP67gGnSnpi);JT z*)!5+sp%$_LbgyqqfytoPG&Rmd*bKe+I#G=C-Cn-`ANL}si&j`WK+c1)2H#$OD|w? zaS<=Q^0L^q4}9PQV&_@PzIo#&9(wp8T)%!@IQmcl9qaxr)JB{{E>}R8F2dQ2MCuIwthsSut2&eDm!k}gS+8Z? zae1iNHB#APY7SWNU;pZYX@<(GdMzx%KLHQxK4_iE(JYnLzKzxv<@Rp$Ko$3Kpp z&FzT~mLH_@k+F2t#_i(Opl;nzSLUb!ZnFfbKbYoO`a5U;Id6u<0ZHdu&|5P@f(yUEq(BB58Bqs|uF&qxw z>V5~9ng(Qi&bzLe`r-vKIcAtR7W;{Q7o|)BXI3g$U7AH9pOOBo)9YYsXBStmT$9jz zcYE8levT5Ujq5~iAReE;w$uQ7ZTx zQ98?N=A13I)tN!A2!i8$F^}sv*0iU%*SY?w4Kzl?oW8l6$gGwsGbmRo`kq@{#Om=A za%Q)Ngs#>y%YQat+00wRelj<5?m1)61e^#2sMlk6C`(w>_0W4tysvRBGNtvAHPR`i zQuwhCe@OmZ{G8qX5c3NQc>aZNA(vNvJ~Ld?{{{JgHm!NCE}oj-?L zH*X@J%W7;7uk-!)-6w4qzgYHs;DHC#;mA;S|GT%(j5cTioVjaz0{zsMfwi>zwydHZrbB)fg_DpBZ}c^rwR(C#@tmP>dx@K4Qn8 zSxIo>faa)94=VN~OYGFtVDs7XjOO)C!=eDGOqB0n?2b;^2vB)9wG!2-f$Jv2^7a5{ zq6wys9MF%t`MxJ0D!j-q{=!EDrW75Rh^J z6&}HChuvJ&dfi7Pcq_fLPDutY_l;sy)5do|C66f=;07&{vRI$Z$KZK;eO=591|$5; z&wd!!Z{5Jxp8Y0TO^(Wlp}Mzk`U&5Z%qTTFC7ltA!l0cm&7fGCK{}mP&}cAVOA}?~ zIF&A@Ha)YpiS*t^=fu^g+{c)X&~#a+XNv^DLutz_st^!Hk}3g+)y(zUZJa)FQo!e6cMq$_Rol_Iup zt)W?KV0mc?v7~iQl7ZtmiJLdq@aSWYV{Ky#rShy;p{@M`EU&Jrob=VNdoW)hy@4R`nxyY5*G!0vt(HQnpJ-A^YiO#e8=MY}Lw^C}}l)6kh}KjZb%th#XR z$-27qd1Yx)OXK$K4I7)}aYlL?FKv=-#S@x(;o`&5+%>Dv|aO<7bpTi2)~e8Jfwwy`Nw>plioQhfEg#@E`pny!6T| ziZujsOuFciC4jFEQ+5pw1*rIUvZ;(0)Qxop9MMxiIR%`UE1})0Yll!MFVGf`quJ@A zP%7#7lj$^S^(N*QmsNUAWOCrpD>Yh(S-0?EorCr{xyA=0`iXJSv;#}K>~@XqLYt0I zl>(nZs&5+Q;gSt$fvoQwL61vDAPa74Y8={0GAQYsV< zdD457m}H^0v;Fo>M#RVrRnF_i7OSUJ%?|z!4>41~gAYB3-}$%y_B(Fx|5E?qjSw^6 z%g4N#>-6`YnF?Ua7IgqquU`tVm}+2a8cgYToxzGW?sRD{m=A`-Hx7-Es5e@o$mtKo z!&7^mVs!7yv$CBX{sxwkqTGYH-P&o*x!E>&LP1TPeC>`(Gr#)Ze*|Co>R0gcE3cx} zWOloV1$MA5Wo6UKZHVtVc4^ESv@dAr=5a{ za(iqW??atCbZ2i5fxTKA>jxd&-ff`8u0(6(782$tRVPY!!de%eg#vO zsMyl)9cUiR<)Y4S25@>8g<$S%mg&VT&`VE8(8YU{P6|wA+4+}p_QI(^9%2+uw`AVg zkrqdcqdao_y-s;gMJ2lL5G`0D3VJI(U%%E_FXIci#_zx;f0u;Tv`XaV8e$*fGW8QZ%DVpXV#iRzwV&Stc+ zBbXt;6&MmRKfzK!*Uo&2Ob2MT3E>c2J+>nIk?rjr49IFYJz-54ri&zqrbd!FqqFDF zV}5yAaf0i$&C;IAz0MB%+&EbRIH=G)=PW(%80}MM)E_9J;Tld+%P2z>6E_FT27#%d z871RN2|}FKCpnxye-_(2ThjBzF%(lO!`cMLV#Q|f|N1ZEMpFU4x1_(eZ00=#f|+o+Hxn5xX_bX zwg&P#4=|u9Fj*rFK^~$z7@_ZgOZh=$S7Q<1{@a^=Gz5^qDrJdJK-yyHB53YY5!^-I znP_${vkTfZat@qzKg~piF`QNvMcL3ySl_6#ly$4et`T38aRjpgXqVqhsnSc9b3}7l` zy5V=M4CrQlAq$#zPM?bEI>chY#?F=oph_3T5}WHJ_(lk(SkfayWfRkFGm4RN21BGr z08{F6G2bHwkd3V^iBuUNf9-$x6@2EipTXrT*HN#vY}OX73p!nGItA`@S{_j|m06T$ z=M*@p>EdCg?mQp*8I=x{d3gt&i)z{8O!kRPR9p-cbr)kKW9F?xh@{tJDZ$6|NE4#j zT5%-Pab(jegjPD8+|Jv3$hO$K=OS7%u@MLD>@<)<>$J*uP zgVgU^>$eYWRd5d8TfsI#pq%BVFfwRjd+=@SOLQ1abRu`N%y;SfCjRe#_gBco#yGP) zi<2w!sFbn-ki#(ZMzBjpVws-cF z;0%TwY;2u(Vwk5GjVaDX`Wgw(1+Wc3*}-S#pTXo&r8drK)Y?yoMdi#tnnh||-4Qc* zkn`SE=4Nr~)G4eSTUD98*>0FM1_vrTQyO$y=5b|XnKVm}b_|^^Mg*9HJ`#fglKQ;1 z2a_7yJw`efLpGT}E(v5(j0JIl_5}Y-rNxXD(ivGYNDvvCx28RRnw6mn_gGa0mc z3B0n|*HGcJ1>T<)_Ie3yZ0?~uOyKI~K3>~B5R?C*x3A*Ye(py!FA*{B!HAoQ%4`;h z1CJlWs5d~r*1-#x*75OYFX37P=+a_@mNIdc#W}}tthf`S8SB_PHyxyP2Lm+wLo@~> zGzVmN97OSsXfS+8>S(E8$xnh~gHkNF(=^vI#$d*&UP4JB*&Z{|!}4vLw_ZmelNJ@+ zvoh|s1-w_WTfvGnG72m*PKl1axgmwg`%)NG6j2=COoA*V7Cmlpg5?0f{ME^Ynpr(yK zRbC;*zqujp5kZvnG^Cg9Y>nK=B}{i=vy3YFnBcWDRbw}hXW0rnlD4*YBtB0ksdCVtIUk%X=NXxYfea@zc_WJpbw?ATh#2 zl|Fv`fBEl#1T$qH*$^sSK2y$4Kr%>PIIt5|PSD#ocJRqByns(#*v5XJIxGvS482JV zO{7b$OJam%dZznVrv4)dNJvjoUt)i%J@ zSS!}_g2jSZOxM?ux!}5CCm_KgOOj-yBzX1?RQYmo%@A1WVDR>H54;M#ZZ{Chg{Cnv zuP(WAdj_lnAuug>fGIxy$)}#eZ``HXe3!3n;1i#I24{~g;P_G*`7A$244h+GZ`5$( z#x1<|+C|*DwT3~DNrCHowEe_c*;PQY%al+54S$Ha!f#~)~M+KwYOw(hYVzKri7K1 z6|9~-fnt#Z!3StI+vxT>u2uBGyP?c3xG$ya8zUW$ zVO8rwe zCDiYN7Zd;FMd}XGt~c@5FWkU?c(lFA5lm@7<1TLG5>pLym8Vjxz ztG5R+G z@jdR-2B*aV$_9w6n&2@%il@N=*qJ9ycCgM%rpkg!4yG)@31Dg>QV(UnBQSM$gzRqs zLQKy5zwZL{U!pa_feX-s)@70^9=et?ZHz{~*!;XGxt(gA{x(209V_VE4Pfo|x_}Qi zDG$cb!D9>rwKOdM5ll?3N{CMVINfG|@{WvE1B3rMrvmW)IhDU7Wh_L3Cp=RCl&;?{X54ok-$`8Mx!tB^WeX zmidOeCnxF^)_eC?pf8 zq~j=OQ^=ELL;|h;7+bA24p?UOf)6k?E4!=9i)B=f4eI%PyZ%sRbh0xl?a_OR0%^Ch zAi!le8wc-F2N*yU?5gdRI6ir>bV*&4)UnoUcrq44eSR!GwfIjXFwdc^QIY){|&Y zpasto1fv<}AjWCSxm)#=qj??B4icO|Oi*b&a{qBQ|cDAmbj9x&`$Yd5NP05d>z zyV%>?SCCy^T)@x%^oQ}$k9|zOQ_VUD?k2@XWea(f=N6F57d486f>LuvwxGsC-a3J% zO!{0SLN;dD?;+9aAvqc#Em1s6dBIhffC9LGWd={)dkhbpUc}O|0`fELXtNy9BC`81 z1t4QBG!|RQkWlR28lqDjpms38UMGpaS|8)ty@7zjT=xK(<{q{WYS?RcaQ=Y@(JPd( zkV)dF-m!?&$A(BUEw!67ErW>|215>0ZHQ4i zs11qJn??t>wR4;Il9la(o-Ua*KQ69~R*Sl_HWGsl@+s=<5?)?3Zys-WSB|YiMBQ%g zrxw<@?*(Pv4lD?EDb7ADWViNh3efM?pyS#>9ak@2*P7-vARWK9ehaT%x~Tbj{A{Y5 z=#$9xH5vv!(YXY~d?%n1oQ%fAsKF!=mj;h^17woISQfd8lPS$+7+@e59FfWDXhuD<)SgLnpAk-^1r$x{WVg zZDG9&bo}~=on;A>CaHtICOlBi75QQkvGkCFBlB?y8EA+WF0#}?!SM|ghj#|(*N14-257W^#vp;_IENSZ zM|ftVsaT(E?xBpHT%@awI-Yp^3G5<)LMn})dTJSu+(UpeT~7E8TO*RxOt&~s4wF%< zgI8Z%$EROv;^kTl?J>1!eQa-U$yku(TI-BtHxq#sUnd@U;Sg+-rJJE9%ncd`DdGt{f3PoJMep7>_Z{5DFLsMOV%!<7PNUaFhryS#D@an!~JUQvT)9zq7 z-p8ptK>SM3CKEv(!1Qby(fkx(-&$`x61Zbove_M=-Rp}bq0pUXm(=GFEz7FFMbZJH zh$S73?kbpK_vF=!R|W9v^|sik3l}e7XJ<>SDGx>0_D0swN+zPxx);t4&C9e5$b7x5 zL@N6cHg@P>Q3f%Vbe5&j@_6Y{~mMKR<^v=gwi}#BnW9S{)D&)5bu1kj$2MZUyhCA%}<4oVL}% zpxc%|RDvZuTY1tDg_I?q%iz9a^Z1FUPT`^Z=aF10SZz$A^tSIuzoXN8(-Tb7_c>)8 zS{zk=8=+AHKKZRSo^K@3Yc-MWR53H|p+>8UtzDeF_Yv$PiN#_bKl#ui-ZIxlp~ySI zF1Jb7p#W4Uy}KqeN_4^qBk8Ns7>(0d-|gYkFYe&Ww_B(V5&}aVj=E|z6a&fBu++x4 z$&OHIj%Y5bq_HpNNcJOOIWVOJMqPjeuL4t+>pk+=qd0TstbF^b)jBR+zNC`6^i=7z zmEt`Y3kIH+gnEL_;qQq!vZ*90;}K3KdML%Lfu=tkqr<`4j03|l`lFckVsA7?cffr) zMtcCX$uxRrC(jiAE`gY4b7nGjE(pX;7|SDO>WGgaY`$d-yo<#P%M^(tqOjd1qV34HL!eiVQB$A5&aodd)ZX&hTw zMXoS|cBe0ICXI_wi@nbjQyG!vt1y1S2m87^GD`;iP6x^HSYS#5^H8?pfyQC1*%Y2W zw}791`a#UD-uJiRbt6a+5%4BrmUKtEDz<-gO?(1X&s~EHSsaF_WE; zMglRU+`z9~Eb8X-;1v58OCX!e;n61^M|pM@`!ro016QwJlOwxKI{9wAvoD!SN0u33 zW*kS=h^Zn-hye@95$?&1v63AlAE#Evvs-50`X(kILk86QzK5A{I(T zBt|jp)*2Yblh~-%Q0Ly@Se_}uhwJ5ux86Nw>R|5xFMRVw8K_>rc2jQV^=3`1f*9mb zozvb66)0ouoQ5=VMgM2}k&IF?ci=;2G7BbBI|yIZJa($Y^c z5jcMOJod*lUrphiXP59;sf9E1F_dRUNG5GeOH_W3_UZJzt^o1^p-l}SEf zePaz@yVbgWtltr&G-puo zD)AArghVXmv0=fx8QFQrZ#J&%w1&8R(7;ZsgN0%aOT|2rv6#xHOz7%^5qjw?;#vBw zxhUNeV1lXN`TgI!D`({Q@=4wZTlBqr%$xb_N6eIiDQR}pu@OeVOgwoMlig%-;zJe5 zMm=CtglZjIOyoPg0eTv-Vr&4xQkbM}1g~c<9-9IKWCBC}y9GIU2@Or)N|2YzWu&EI zCO70Hc{&dFy2zEwNS6xQ@kA%B0=XY1-qvonh1Wlb z(q$5*Qb%jMiZ6cg75qQn*u_RKrRy`6gZGpVZ;d z&6(Ni-V4O8UjP6g07*naRPL^VHyIFSx=Y87$qbQ)JsC)@HyVl3q;bDmHKmCR1lh$z zQ83%MDULPgY-X#$u{xcIVr5&qd%a_?nswFzNlUq=uyyYLMttra5s_ol#6|)>Ltm{>? zAbo_(fF_MTYK1_G;&-}`H+y~RqmfC(FdG|UHa5m)tA(wetz}~>tX-afj-vAJpf3PL zMygUSi)A7(CrGm4;9(4ti;j87ayT~2%I%KW;dqROp9#!YD%jcHRx^Y|1k_6zl9bUc z#pXZxw$u2)`yWDlfuo7WK)YcbbyKXc>5~Gu@?+!>Ys+7C<0diVEMaEwSFaB7$tyj? za(V1-teclouZLGJT#(I5H_k|rzyrtT@kpVE)l3g377|#RW9Q&Bm@+tGF63d)1`Xu| z^J$L`6X^9)_|}aU{^*%&cz&mY+K{o=21*m;P@Bdw_Rj8(VpJxTMZ48fIW~YCmCF)I z96Pq6QtOSY*VHJ$5*oiaaQf8AQ!2d{3I!}KFXGx&^SZmuwJ8?Nl5DbF+~B-~Y6u8= zNN4r3c3X}^u@jfSiz9%6Eni6c&+#ZvMp zhFgsm)~GAZ=dE-fj7G-*O*?<*_l|s~j=K5Y3>^F}9~+pd!(hriXrkw~jWwBz=Uz|R zL#DCP*NA$i5$dfDTAi-MqE^Q?pC1jURSP=1O@?k~Kyj$qAf#y0s1Ys+C!%d66- zWoyR<@T!eIh245h;?jIPruOI7Xn_3OEYgL70&c5j9xjhP`Y;}Q;$eL53tvL6P{DAV zM7`dSJ%R+vfr=Jk6SC8(wt1TU^*VarOUv_e7k}c3$MLz(eI9F9uOda~WCxmTG3IQ) znOq7_pI^p5e(E$9R&t2NTR>_k6|B5?x_u0q9Sj>i^gCnpIxI0!*qy|1oDg_2)+8p{ zo4O)qYSbz5XIs5AzP{bTMzbaDLAz<@f9*yCEAw;8M#rfPPNsVJwI5l2uxA4p!RGpVaC(ID1rL5+xX}wpT}o!#IfCviN&G66u~F8 zHMv68Of#zufhl$GsD$AfF^TgNm|vLJA-}!7DUB5!mML_V+jKmEg{38|9$!VFSW>pl za_q*&x;ndP_{!&%Q#NNM(plX#Rpv#;@}G;=S&m?prrSZH(?n+6!+a)<`D_9+*)+0= z6sk=EseNn@d7qbYW+sjEGkN6Vrllg^(dq-wymkXOsQ*c&9Zdb*2+%KHxQO5VKYmxP z*<8;)Iydx9MPS%$3tSVYO4L-BofY-;|0~B)KvY`pM z2VIOuJ%KBl%kn$LQnpwhu1>CbFVV2nHcVizKg3?MD@JCSCBi`$x4Q%E4Y+nm{#Yk0 z-zldF&=j|_xPVhGlURuX%wE=2spdk}% zosrbNcDfy{lUz23TD2A>wE=XKwd9x{cHXVuTG!{2RgIfxvRqim<;o-5Y5ssLtBM0>F5+1#| zUysUs(cG;tp*-wd@7U0A+Mug4mch11=$W<>5^L`Cg6X#ENQ?*CJY;rit+tHqvdJV) z%$BfJqCDSp~H19hfKbRWT}i{wv13=2RdV_CI}5omEB$Y;Z2+}YXZkx5&@;oAMa^mV;vQ)^S}E|ax^xhx+g;<)GB8RWYiEGCAS zq3D_*IhI7N-NCokwy>W_VaPIHG&9Vu&)sCEp8w|a_|5AK*`Hv%QX46S5CdYCl-|VwlA+97K2=@8DDwPV(oI8tC zXU`&*WCv|i-G3bGVm@xBeX&H0b1Uf|*0W*bbTD_l7BxHf-}e^m@9!xA+uPd}7!xZ= zAmvsrh1du`bZ-$q{(<|EI}oR~(o1oxR@SuEPR#7=8(``cys_$3fNQL zP?iRpsMrMNlR?Fn?}qIbbTy{kU?6Pm?c%<<0_Jl-Hl09cFv2qzu3)n{KqkSinngT$ zdKsq{bI9hCD%HeNX)u4P_hQ&zhn)S!VXs5A-aqol zqgY;D!Azx$kALh>aBB4gUb*nfWE6_p>to2p#&}{WgI{>pJveuI9)nI5LzX4F1JDkr zr!or5N@ST#6wNl@VJVHxT;E)WTSFw+-9FSZth~U z-oinxhJ%AW^U_JiF<&X;#Ia?(|DIWV@Uaqd{XUQ>1LZ|vSf$_#7^TcCkkz})2*{Lx z0Y?h$dWp}kh1Jw1%wr-0BnngrWRs7A?P~`>LB=}eiGDXz3Fl*(Am%#R` zh#@m{E6os0aZVt09RvZTV$t*$YI(OVE_R4!vUyZy=fJ_o9NbK%ie6$IokA8&8a=K^ z*HfuPNKi$iP7175{xfR?w#_$cHPmZWGxkiTP{&KmT8U-3)YNCZskupy?yd2`aaEa1(1EFdYJe zB|5t9jXLJ~O_f$s2{ts0@Y-$*yPc7M=7aMUJWx(ywGfkU7!ShkV2CFD#ySIRw@27& z4Y1uCsvDCYMReyT+p5`iNnk#m#9Y!mpSF8r)JA4~VSZgP6iP*$JAWRh&z+T1f0JF8 zZJS15CbI6L&fgi(4{m^NyRG}u?{*`75t)+Z{eE6k>7A zW^;)5+bH)tIF zQ!M|n6Op3o$Qvp2oX0{ zDnVw;5#aV+EZ0}mdVcHWJF$!`W?9BHP0{v)VUfPN>K@=hSR+&Wk= zP&Ms=JYl6m7R=DUf9(o>_NfPPqBvp=5A^}?nQvXevp2RdKms%AEKU}4c;fsrR#)aF zrrzlcaJ$yRMzw{#S_jou8;wQ_?M~Zfg^6Xi!-Q?{DYo58S3OWCQod3_TwrRf%{)6h zkHw{Bw7Oj}QX^U|2fALZ@D|`L%=m~;9pdz|VUO1kGv$)XBky|GyA>E;c2t| zg;X&QGzUnx$B4I+*srCr(@o3#b2c?byi`Uzo<(^z9hc|BA5GyBZ3roSpQl;F%*|b;ARLKOE zFz9-Zh`YsT}7*jy4W zT!UsKomX3e3X-W{!p7#ipQ{!F?+?`-Uu}$Y=$Gd_zDFL z`aN~#jLNcPlnI2@#_#j=iz*b?WP!6 z)9ewO=5XKQ z9L^QvD8+`z#(*3<=wd*zGeW5c6tZJfmXerROe0k&SlKVNZOoKxP5jM;?--4RXqbo1IR`)!-~eU7P6_X|~EW z!TYMA)%48r*vwTG;(`glgG*dRlE9wid^>*I_58`)^1n4-@OuZR6_+38s7k`dm z>R{rf6CHgMos<%RfSZC*X9)D#dFF~su_H6+{k0qT!L!S_cOj!8x3`-EJimE>uU))} zVJwb9wt#WJj~qL$Dl;n69dz1ga)gU_jfBwwHk)ZWMxc$y{! zF{E<^EG{mK31YXATDh6EDs#1NpD5iUreK#BOKE%@OAE1~#F+1S|GNdII-Mb2eBmY0 z+08~%!;jOsocysut3Kb)sbmj7bS8_3PnOZHw=q`RHA`UDIi}ghii?C(_L>4y*#xQ? z9wc$3dqApBeHDf0add}CwdW@(xM!I)o>2L*-yLX#%vW#jr zif@G=OxZBS);@bNWbh32@;sx4O@P@3L-T$I(YeN8_?L~7`R(s=H`=d1|4jo^Q>VLk z%to+uvLhmsP6ty011z=JJVbu+{kAtZ@Ms=5SzzgSh->u$Uf%Cwt2@Lfk-)k0_h9SR zZ6pWmis*}Z(p)#Tth>{67}KNjjrRJ)I)&^Oox~Q>N#qk_G{!&`#!9ENS)4k54yR9_ z63FF&sj(xxuQc7|qyaf&lW87l6im0-La$8?7t7LIuQ4pl&0%R}MXblx=7v5SnJdPF z%4|i4Yw)t;`dLVi@Pns@c=XXZBu<>S29VaifvJ8|V`e4|7}H^9EDEGI>Z;5a>v2?+ zoGmfvr?gM0#iI6el+22SO~m^cr;E5$oy8yi$7}fVw=UtJ(bT#-zA%r+mP%Mkbdia3 zasahwe2x@S;}jBO0{StsDPX>w!SZ|>nM@PObW1FvjY10d*DC>`en+s{rvYaS2kivD zb+d^-eQph})`#d3#AH&sreyV5Chc~aOu0oyk}9~dbZlg284H3Q%6qn>^<%@!O}A>} zuvqfszUT|w77IlsuXzI2;Sd-9fA-!ySg!NF4m`KJZ}0o-w_{%jfZ$GvGDV7#waaqk z#PJ`t6k2d%bF;*Y;9iR#I`KU+C_=lsD&iBfgnK; zJKp|Y?|b*1I_LM@eh-u^gEI)rRR&ZLNuXc%?R&rFeCKz5=REhEbX1#UfL)ij02f(Z z=`gQO%aFB+I)K^9+|*&rqGLiPEwt@1aX!~uekOlUnlatl%AYxU^Ue6c4FUQMFm+v4 zW@ zv|}z0kexI1Pr7d*kJlY8p^%ON)Budy2*xZWSVTj(Fz5=j7+M*`1m+R7kq?IqO|_h} z&{D!!IV-&xn`I(fdLy0M9OBzoYG`pmjz&?=#BuLp0XJo-q4H3uB;>)x2RIt}7zQzn z##TC{(4VLJCY@wIR?Ln%5WSFF^_cORw9<`s$ikOls1`ERA~>$+9y_N}y9Be>3hS zm||PxRNP0w_YfqKX!!|c!p-g4g*^xN3o!TEZ3)h0ui(r#d5Gc0OaRW(4r539?T$H_ zvk#7%o?;P;bMrc|v9+IC!CbMRO_hxpv^X&>4n@#(;`eY{C4!&6e;VbR7J$M6Fzf-1 zb)ZvqJq9BUdLKeF-F{J5gCSy*sVF|`u$EYi_ZdX3Nm^VT>4HVK5;@jZ&_c~mBZ$Y*Y_`y1SbKjcwx7Sup`0;R zIb^Z~QlS}gAf`(GVs6ow=FNeruSzov~KfPCY8bQKUZIFn@D;L9PJ7evM)zv3>MO8doTpreW2PMVY59z ztvg1GK!kP!VF^$bH)FNreI;Xb{qCF35_iMU02 zaPtz=VhdOz5tI0rci#6sq!JO75)oALaV*a8cM^-UIh4vNBvJs^YF^A}t&8@02gzN# z5KG1J?Bl2L;m;kj!KSqR8g)7oQRTocfn+E{8;d&)94Y zl>6p#`z+VZ#K<&CW%pvERzttj)8;-qJ1ZR(*-1WPmY_B^HnG0WklBH0{sf*FJ!9-t z$W+l>mCxLKj4UtAE^bE_7#DTkFbR3>1(p{U2K(BNTyHS-YybYe&Kr7LofuBMtF(j=807m7&aivnu#R9qm59eD(=X2i*eI}@3!RNJOmXLDly zNsSvnm(0oWn~zJ6LyaKkKMy;Hjvka7x4_lbrp5#}_))KiWUq-IJDkKDe)Iq$GjkXP z33#0vqC;9DG-M~D&OMG$0wP+fG=^B;>|kZBgQblQR_g;)JDjJqkKloaL&G{##g7Em z9K!i3!M8ebqtc2s^m;2lvD8mPQI+IeXLB&N@~f652jtmwYrK;ysnNYzQkLxjdyzK6;6f z!RMS?-`K>t^XIX)v8lr{4>){(b5M7a&UJ-L?5;V=L(h)#W+-WORwU|h73wmtKGUB% zgbTAqxWP=_=;pgd7<7GJ7J?~`OOD+MkWwdxi`XD&aNQqf8fa5K6uoZmLbgk@9B}5$ z3vMAM+Y+|;+A)M6DWQ$klFzA$;$~_c9=?DS%{d8h!nR(yU`L{gnP6OnJg7z^BqK4D zre_dM(i}6P5F8Mm>H#)xBtyQVXE>uvjxPWZUA#?x;D`^#~}Bj!LJ zf+*S`RNF&bsrK;v<`B!RA?iZ{P8V1jUamlwMV074tVKUiP%yW8mYjGWDc&c`7cL|! zS5a%gxQ#yDvI9i9=+oJli?;|z%K;2yfUMEL7>)!jDxw~8i73jcDE3uSxZ_{}$8IX1 zGM7MtF7E9y>d!ABQJO(~aaNn*cfa-&KKAtsI9c=2>;*FNG{EE`nav=X$zh~e5tsZ< z7J-I;zOR;TejhSrVL5}>C>G8IxP~1@WGW~|Zr7V=>y&Ma^YrYDe2Vt$*^O?ej~8Az zi_KcqoZ02{&GMo7QE7aMsfr^Wr%0Uuj~XpAmK2jIw`tdl-Pkj$TfO zv3?P6KbpY8ExR!oB~e|fAsy`^Qy>jaYE`Xy==X-GZgp|?LJiMcXyWur2TQdcYCXE+ z$Hb;M`dasitg$w7jf05Ta62>riBuM&F}q6@@*|C>%tjp;7b7PCHP$?^by2D|0T`<(Ez1n6#FY_+&-Vh?R(PLQ)Yf?fJ>__tk#AoWHKmcreX=dOW+U8DSamf+*@gq|CJhV}`MKlPNc>Rte!nVAWeWoffYAa21@cIP4%W5ldP z=4o1IlRLE!p=Z5SkxSG9yHnz*ty{` z1I)yX6b?(&>}vj;i0u5a)3OOt%Y_2cv{9fQA{tk@hoWWLCuqUcQsAMlUHIPj9>LQmPazshAQtCuUy=)IY&y+`wQlo$hhvnZ zBfR~VeYpF;47QpbJbz^k$#EYy&-zFROqusdqX)dO-oxWp>UeImhbr63Dd3H{SP#d1 zg!HzIFGH`L9eIgda%Sh|kjbXq>CTp9ZMt0e*cDl;q1k8}yFsu2;rW`KaZcpPE;}E%Z83*8y=oq}9nB+^7^A;Z!>|<~HZ_g-Oc}ju6<_}HNqqdf z>p0(vsEwWrB(vCZrLsjv@cZyI%LR|jp1j2@%A%0ZBgJx`YkV-XPg}ov-R4jqc6*Iw zdP*l?VrYSu#xADMRM#KN4T{sS&n7#@&4YhSJ(@ZC zE0r&7?A}q{GZxDjs%<^rb!Da=J%Ru5E1_meT#}p2+d7k-vs)UN$ulIg7iMg3ANW`O#LMQ;ZnoKDbvRjpw%qLk6Ey@r}lvc()@#ZtxKKsbiOR!aAec}JA;3G&o1mMm=($LW*^no0JG%`(tZ># zZ1nN@7n*pX;o(ZHgRb_Z@fQ)1UflT)KQkY&VIb>=%W=7IEku@CBhe`~Sk6pWVV^RQ1~YYSDCj!9iURcd7K4sC zVJ)zCa{Arr!{o|hVdA`A6_!QZwS=rICq6qdnA;}PPNv&C`qo<18LwczO4VA;PQWae zDMZ#LtT7TsIZuA^6zDcGUPmGpLusmvOs=3<-L?z~`vMQzd|k^kCzz>(%&&=FOVTI! zQ5-pXRNwj5<2NG~k7&Vp=&RqdwGv+lc7d~ zCCZ&Q*pP(;?C^9lFII}qtj=}DNEk|rK8|{$E;nPI*ab)=!ne+)P{+jQEH=``idct~ zTeMvb*Gj(u@_q!bJDA7MJ}`^9U2&bt2b)858)IblE+CrnP+P9yufB2ypL%i~m)qtC zR;EBSmPFH|cZ|8)Z+B&qflTQ1Nh8N}DhWSkQ4|E*6Je=-Zmfi3*}OJ~Fi2PBD2+L`P+LBvG$C?rc3LhPj?z8RF)?Oh81#EL(|%^ zFAf%@t?=5`ejiJ9~d3Ay>BKjrt8#d51&8N zz?18JY&5zmm1h|yUM%7ESKN(%@t$|#H-G)N@XV>xXf#?X^^s-bSmHs)W`Rq^(A;os zbNcR@5qh4SmvYSKGagdp&UJ-Ma}4tf^H^Kk&_UNK96ZFvE#y9)(C6^3(Yl7?h3^v{ z>d8#%utP1CN_kf^RCZ9cEJizkSvm5^%{RLFZdfB+m*x1{-{jrS8o`zg(~Vfk=S8Pr zr=tqnYPS{XJF$*iery*KAQBrwFe3v+mRZ8r(5$V8^K5MwMeo{t#TeP?-$cMyZzN_y zV2l}0E~Tkyq;q*0dUja5rx-~k8gAM~9jg>X-oXhP{YZdxDuqLb4&eCln~~0B#GpO> z%+ok`?jp{ey(CSCm=UMBVP_Xv7J4Hw(6rxT7g!Hd3E)jP@4{_+DrmQA*yIVYJHSFN zhHR`O!D)XK!8OWS@6O`qADG9Uy)m{JVbqJEzSKf2l}2WMO7FjVsfAB`;UpeBTSaF$##Abe)&OYw zY4pO}LuYfrQzw0$cwboxO2i4EMk+TDfD!_mjYVyaPE+L;YMEA5 zTyc!B=}VT$kV5=5$0~S&VRHkw&L%(i+ z3a|N*y@-_a7}UGyuWTU_w2>-se071|09%(E_|T_M;^8Yp)W<%0Vbh0WmUQPsW7dgA zGCV+mN3J0PmDY~-B-ruZ2LG_B7`}#ac+hV_Mr^{O)VXm z(o)1O*NA{a0zqEXyDU?Ovs?;~ zF`5F3d{R6VJKGVy&RC;RZ)&km61tNeCiCxtx(Un_DHL|{IsGgRb_p_f{tAIr2&O_- zimxG4r4!A$*K>*jU+`)x2~Ck~ERZKUpGyHo5c21Da{`|n?TG4^^peT0KO)M2@* zjct6Mb=zHDTGj$@VnPc=4fFXX9#=2=5WWvj)ATu+nx2#JoNnOUe676a1jTGYb{hqS zsp{5?Mle+_qFBh|EpK@f{1|mJF`Rhf37mT7Su8EDY4=r5nM9@LT|^cunMjIu?ll^S z3=} z;-V9R1A$mM&GWYjGzDqo@M~@VTs&xgIJYpb&58h0-dnzpWSqbxWj<6VpRrBMiT)Ya z!_%%=5HOUQB%PJx=ps#uz9%O}b3o?3k_Q*X>QN6z3NgI<-WmMJ9Tj-Y6r;Fxl}39B zc=0GQ(?z+gKlbP){Mq*|;PhHkU5?G(5cOzAt=a=IQwC1>d&gywUbTR^!(@qkG%jzzYj==Nj}VOyfKeYoyNC8>A0PVcv-tAa zE*j&QzL#~%+Ow5*T=U;`NrphiDd{E+2x7|(tP?4NzG z=5;5zfEn1kyhUSzt~$`FO5nyhyWTwD*7+2E;YSy7^k4;Ev#Cx#2BklDehtG>6w~D# zD!CXs{Q##{M)>^G%UEuX&=2CMN8*?|un)iRKmJentzUmX&YwSzdWYT5)``2*X?NQK z#QB-I>(zN%x-h3MoB$vL;RJ^)rE4m2?Q-Qf>uDk*Y8|}^vQxA#p_D?*BLkcJ&R)fy zLDDw|_7HSUO8$CtEdHxECV zRu&*zsza@jKpgYLlxQANIf1R$>>wc+`pKXA37Y028BbwmdJfM%`wYJM&4;ys(_l`n z&8~G@OSflbp=82D%iUTPsbGYel!yC{?Zc7TB1ZitR;w*+);ri!$)e~po3Jl1htH&SAizq-;@Z5{*Ej40={5*?a1p$+ z#XAMO{iYOt`hoq(RFYzmhHbJ9acr(tk*^eyDrC{z9O9uT*YL%YOQ>=)9gVOxOrRZ0 zSST_}cHOo)+N)GUkYn4r*f0l>OfScfYdhr%V1^s{j^St57ZHdo7mMh$yV$DM#C(S0 zVAHx-8I&D`x|h5+Vg~69Z9d~HQxQyMGZ~j`7n&Tp-PV0>xR{5L8P_*X#(}9Fnk>U_ zu57fU+txuvegANdzPQ`ZF4-0ALILrlWNhMTcb3t!r;|0E>GgTET;k@9Kpmq)G9`Kj z+wZDUP{dPs^-V{QNRPvE5pysJ9th0%n+#QpzHd&uqcVN~l!^t+&P|&TK4NB!r%#_2 zs3wp~q*Lhh%uc~l5DW;K-qJvBX*9&Ec4hIv?bEpBmHXl6(-^e}SbP35;*khSGd{ea ziGZzdK?Kd^IzIR}r|{6l5o%*{TO1DrMmEM|cIoc7WC$+rQGRqBm*I-#BK`RH^wCmE zrND(}hdUkw$b3elSX*7wTIY_NPLCHBQf29DRRNc?I4Lns#vFzD&Lb)k!AvfOcil6K zAG>n~NgD8WC~yZF?J<@&+GzEGeY1Jw6Z8y=;N(&tpL=2j8~rG1K@8F98Qgm7?fC3x zzXBFv zn&B$jld)pCtQhqTcI0;H9mkkxChhS3*k!owpJrIv%Hg)|+chyx=7u%G4QA?Pgi^pu z0aJo8ZXo~Q1v{j{Lps(@U^}%{;hBv8T;E_FoiPFigw*2dN;h0lOmEIC69f5gw0+r2Ty~)|s(3K%r7bJQ2f%OC5abu_c^1&-)r!Oil%4IFayg~HVVZ;T?oiwSOFbOi_ zu5D7XlD0q7oAoc?N&?Od;|n6Cz%BWuy^ln89#Ck*QzyCH#fwR zhE^7gBnitz((I^w#-qsXp4L?Eu5V%a>S7yc&^}0Y&FV#F?g32g*qaE*x#)ecA>N8VmZth?*aIqrLz_IzvFv z7pSB|Iy+bEOe*Npu7f?PJKoa?v_ha{`aE5w>tq&U!Wc}hQo^mB>VxoqXhoqJ6G`RS`W3rM=cV^MyrErtz}6QoDVx1 z5_W0=!|^|!PD$!OfF#MdJ8_cZ)ktR<^n%K54x1hl8+oYEGvwM z9{egUUtZFIk?SAV2m&fbKv~({Mda)NQ?fY$aQp_C!VS&T%L=6cb3oq;&#l|$d|XW2 zwP=gk0iv#&P*W8KD#07~C0t*sc9D*G*j;3n-Uz)x zPp#e5GCg-;3xE3EvjS6HvFL%a{nB)8jzkpfX>G%<{Gzr z7*r|^0^IdVYNoEEHNr2ycgO5;Wow6?Y_m1sX9o_UsU7B>JG|h+>vZKjy;OQ1cba!) zPi zb@v`dajpd4AESDC1+{7$GqV|_Qyq-k9UzewP`dcc5`O1%XK-RGipI!8-?1u_j$>C7 zrAeqeb+|ieJ)R*86EcHjy9$MZ=5euHLa{W32DM`SKI+v?txtV+x-l!$F>7J7gX~Kj zfSVYj8hYL?p@l4^J7Dmz$T@syI*Wh#>M7iPAcr^)2C|J2SBqL>B+CSLBF`35$R<2o zu8;6n-&?}jW`Omfhox2*^;XxSTgW`R5^8v$3-^F+Hp=NJ9h5RiH5rWtk<`$_@NsGs z-QT%}4jl*;jJ^X8 z$0Hjk!e?UVjvLHW^G49|%M7ImrrwR_)|Q=Ytz+7j)lifg0;(OXKzNbge+mvYCO;TZ zg(oi4ng`mrnNm(Fmq3bE1}6HpE-TU8j6LDMX?Bz4NnvJo9_f5RW^`<=?x{)*j@JEQ-u+aBAK$X+Ue7m@!Ow!4$rlHbd;=4 zRw|*=BiBa?FBJ|ipDruyS%xgZ6hm8W^A1IxGOA>)(({nbmyk%LbQ)&1#PZ4&SvNEr zEtS3)!;y&jxP0*b90v*VG28Ru8pC51&7A8ILZvFf&y`wcW-Omo~A^#1fr= z9Uz&sg@=r$jj#!rclHfVqM@X3|c zzIg_^Is~T@XIpNffE;Z-IR0`O9J%?p%I@s+Ti@6ch^1aiZsue?=rXSZ1cx&>!l43* z2}`M&o1LFiS&$%1C0X}*7~Z( zVPz_YWUQrp&M1R%`#qd_>JonYi|6oU-A8liv{FKvp{|U8z;Y%Xu5l4Mb}y~683HRS zJ(Bt6okI!H>P=t$6y0C-IdBAHo(7M9vZ?WU>2wg1~{+WwP$-*md)P)(AJs zd^gH`FDsxTm}-%k3Ky@5ADd&QLT!WtQxn0H!%Jou7@ppCxJYZ=4!eGwO2EArPbH-B zS5{WFfLgmP5rhlIrmf00UJQ_hJ6_;@xJA(!Ti;@v&lUuPf)pH{DutS847rVVOsRVk>8g44)@tOk_ z+;MOU=~NW!)iz?jhq*Z)xvU4T*M^rNLt`d&E2l2wm;Uk`PHcE+vo$|zEx$A=<=!!n zMr)`nG`bn^p1NiwF#%+USoR?BQ|oXjQkU6c4(V)B3sE#O#_HOVI;E)D$RtwOH9s%$ z@0qhNh!xU?s8;&G{DTPWXkra{-lLl24A2piP~zI}ETv(sfvvi?_hIt-F(RSYzgSu<;Wo95K!^HOL%N0 zM{QVfUk>XDKd$Hu<^WQkN9NByKcP+V?t5N^_r3r9*JbXW5SaSaZ8RA|%dix>!$5a( zzg)D@RWRh(0YFXyc3;Z#0#EQZQ7?jUCl48~kKTFA&y@;Dk9)Xu{xW6?Y21Eb7xq+gC?x|VV?)dqV<@pNqPK}?Y07-rx?Mc^$T|G( zgO_o#5kq@qu}-#>?F5{reNuF@T4CuuX3Zef+L_6w)B1@uF-!Q;%rt)HUGLJt<%ts~ zaQ@6`R5vyypqEC_SyJ$mR6?h2FJz=0J1EfQz?3?CwLXL)IkBUTHYnF zIz1QWaez*-%~f77iE~RnVM3IGBsUvdt`udpWSXf<;BU&lIiK$0^-@cz)&(C#roPR z>b0tb!x;+oE7KDCFD)-)%#I*=eOcK|+kq-|=CIBZDFGyzGIet)H_UZSIU~NssWRrh z2JYXN!Tq-`VAo|6yt9?Ks*CKQN;I7UdA7O^)yaw4AFDK z-;j5a&{xzz2#VY|bekzfytGoVw0d8qTW(-hvJy|@fPFZI9f%jz2WjVOTU%nPx}%{C z7uj&YGAB>d%w!9T7SfgpP|-2nbZv=*X*Jl;KphN00XvW=n7&y+0w@3gAOJ~3K~(qt z`|%sU`@w6QbbrUI1g3uJS6}oh3gxfoqIVQ-s&P-Qu;J`sl&CF{fURhnm7R&b%pHu5%b|0L> zN*-{I_O#pJ9OYR_PffOB#&od_M)Sw2mk#8F{~eJxS-CQW=}H9)aSvtm@ZG1M*W7;P z(fufAW5~xnR5D}iCMy+Zc`u4cj?C>CL9>HzeEl^3@Y|a>)%4IIGZl^?8v2S6cJ(4L zEyjA#Z%)RgI_x>)PKT|$fMt3D^a%Fs-Glf1^Y`H7sb}%bQ_o;|=@K^9H#Db|W5_Wj zkm%;1Fc{x6%tPfIq#qg&S$*lvdYzudacNz(d!iDT@1s&EV2)XrohlB^PvOW+1~aJu zm8_3aCXQI#!%DS_<<%y3&lWI~?JNFfsS(5JYJhLOu!d)sYS`>S0oTk5Wl2q`6BE~e z``#0LEtLNnAt2)$41KtuKfy*_hZQC3z(gr!du_+ zX1wCgyYY!X`V%~N`gt^4ZM5WN#Y%*goOv)9G8~&t3Zt>gfOp(=CqDG?k6oAf_;S7p zEkmw{*6Dh^&rA94Ua(VT_fmdx$7`?U!v8R&X!~=P1wHJgT?8NuTTlE{t%-|+~Y zdK2IM_Bs6LNBg4I8Nf?0#XW}Y|0=IgL_Z!Op3K1aQ(BmLf3vwX=H{ohAyRiiqKn{* z3`wiq(kZM|nMFL477IYpJ%K>8T2*$Tb-~23RjtZ}IvS5Veb^}r0WX};e8%ywQ~A7ZoKMv04hc?dt_ z1AY#@u7^jSx`K~?^BkVq7@|3*Erfw+bC2HkRN~1~VY*smtu;EI%c@&Z!g!s6HEP@@ zvkj)gRC*J!kE9b~*>c$Jqg|_^(P*H-E;Ih5B8`6r+8oNbIh&X>@gD3OtBMf z&^1jA!Ti0ic?~}Jhktlo=Ie<^AH%Qx(oW5kgO}TB-M00IhaLA%b3y-p+Y*AI5G3lL z$j)``(82d$*W>W6}mzW~ZeOOpFJp z1U)Pk)4060g^eqhaD4v)vPln>LI$No54$Ry;~hjRq^FFf+_eCcw4OYI># zgV5fWrAq@-c7Ls8W&U_E%*;+BowXROL^7(wjKZ=R2F(VN;Yh*J*=!bXeEsY2o$q{4 zb}4FfaOEsAsXPcxO_kid+>(1b!GLum+jEs>(}5a-+^x+`9ik@BZ)6>=@njscGmLZ^ zqOrM-WOR(fl|1fREa5M*v^39Z1VwOnAzqQj)u^Xy3*FdWMtj+P8$#HE#s zaed67Sj=N_VIJ@N*`HNO`7?j>Sv>#3S=8uHCUa5C?9?^st;Py2AM|^;<+fY#kw5z{ z*JVDwoNsb1SmNb;%}e?2H^5W~rozQ}QnfRBdqR6p7VH;$-h?i{2AaZOlQN5Q$mL0% zr&h89TzDoJ*8L18nMyRYGjO79TU_i^%aGjpg+;{TNz_{%G+08Q?SR-6S^}_p#26PY zn2dcHbb5$7p)EING8?609))~Xo3nKcnlUDU1Uu>|zHKukc{oBMl}0L^QE6Zyo5E{m zqj>F+0(`HIZf_0cxeEG?5$YR5^oPLw{t`UD=hg|+r8KrWc=(a?cx2hbLl-*e2G-ik zMT1^QWJ9J^x7&v9XWoB9H%KFrP!SM zu+8-~Ezo=&R~mxF<&|aJdFP$Dc<}LWEOLk1mckZgU%3*W>@1UpB=)Fb;W2Pn!%tS z$CJ-*;E%p>4v(&OQ5^(|)iF;m_e|ueW7;_}ZUixYTxBadV}Dz*X`hr zSG)or{K$0#Q@{8t+oei3sU|UTJ65=zWl;k_JG$-M>$bs^6U;L#yxUcG8AZO_r1>3v z&zRd-*iEK`Pz13=62)2OUnV6EXE~5Ynsc+W*t=&R%9UvaXp{L|-&jYZSr?G9@#RW+ zGIAWlleW=1(-e*3N@Zk0!e$T6NwHsHm@>0G6R1p2DV&%2ftgei$yOB$=?JEB3H0k* zXl^WFy3BHS0;zZe)9EqFxiKR7G$N@4f>D62wK^Vr=ox(Gi7lKPCD7;%(H~exqctE{ ztydkUj*$wzknX(ecI1m`0l`d`%@;$3`S!X4ZSDkK*+K!`!9e$snm$@|@aGlPqd@62 zE?&HdqepJidbzwxsY4x0m#Ag>Ri@jmn+`oaVIRnnbqQDU*&En9{)~WE(vdnRTCKGhvI5sulwt0Lc`y zb2^nmsg%co0|)SqAA38x-5wr#=z*NaqppbTS2P+|S4wo)$3MRNFz%@guvqNE z^EQEK9YL&w#;S*QCjvha!PI;PU>2WLwghw|eC=y5;4e>XB7e&(ac*S`TbngAFdUBs z*oJ+^Cz$X)mWZQNsUV#r*fUL0n4!lGJ9GRFw3zl7x;z{Tm=#K8%*@S6KXl~CG1*O! z{mW#s(pZrN<8FE3!Ug>JkN-H%pF1br!gHsdL$$hTCq~3ujqtfE3P)^~DOYH75wfBt zG7rVFcHac7_~;q9-0h;VRmDcVE^&3B&$Z4=*-)rSz}n-(ldr0RE>lorj$y3I6ZCNF z9k=7RKlGno%G&d{zV^f;kKuj4`0rJ|;ARzWus;Y)g_<%kJufoboyH~cxBE(c7(dAWC~NWb4X;;*8MmhtNWE;YR~T7n3TWv8b-W!@v*M~yveG|1<3V#4<9Swt!w6LR3;jZCGqOvACt^aT6N25fe_YTqYw zb@9R_`7N0ikKxWd2(<;O(wVd@2{>O_dY<^}xdVZ^>*Q6%@oQ)=JXBH4-s!e59P~5> zIcB-uO5jZ=`UtQ;m&CpM=P;e-x@cX}7Y$oNB~-R}$!D6s_UeIMUBU&ZH7t>8jy zjE;P_c)oH?Id*C>Kdi9aDRy|f6l>ZjJ8;{f$Ml)x84c*0(X0O7xvR^3)qyJBvtbZH z#E+?SmiMSsF5%W=NAda}eVwG4U-;rz@cfw<6jw(7u`t(9!S=G-@NnyGx8V0aaih$4 zLo;<Ih-5mUg@+xAWYf6#ki{}>8J(bec1op1pvt2jGU=??n<%>j!v#zwig44X zP}>X<%TrS-HBh_OXg0vwAs2iC5c4|?#9S;dEy-Gfixq|ZJQasvg*E|pLM5Q0*(k6p z6UQ5mE#jVCMa<=W6mmY|k-jq15aX)crV`jx=k$3BQaE#Qgg-xV1t+RNJ4z??Fvi9{ z$@Y-2Mch_xeXc#iiGy^wc!$>~^F`NXK!q`m6jFHL$X=u)Tr2HaaGjF~p6uYLhg5WkTq=q}CW*jL z;j!~IeEQ@v&NPP(P}%2;O=1V9Tk6F+i9xhk6^7i0HacO5x|PbEeoFU{Y_WkUF_JEg zK#f2Sa0@Km>?Y0g>AZwy2a2uNI7GlAOi$|;3lD7&ypoa7l3Qza0 zRn`jJjv9_e6d+6u0a+t)#_DJ>#zvxGI#>HCAVM=h8UeB;wx>7Xs|k?U#m7lI=ylO+ zwT)vpQ+>NEua=e(02xv+g?7-1zx9J zw{SaH$IWBAxE#i^hL9;NKe)NzyoB_(1hmx1wOi`6+G3OrH!J$xM9p_=lKD4j#Mquw zVgUF&`FcN&`|iIVzxBc2xwc97cY>)$@!ntjC0)GYxm_oj0mkibYmFHWK1%3ij8e$% zsLaWdcejmZtuCDy%WulebY+q7QpE5&K`~jnbT*4}rGj`W<;tZ7I0yvR*VZvLRl!tc zMnH=tM}6#0^zhnaWz5VZ;q}&m_7dRr0KY8OQ(7ZtXLA0R`DYyGF?{B49>X7g z;|ey0N%T0k6!k>5$K~wtGvYp`E7Le|_#mdID^}7=CG^jYwGGXeBpun?UAunSNwhVe z`rrYHnnCkyQ^%sdzeyE%FdML>?iy^AbigqrwuZMkY=B`RLdZ%{3~ntNWOro8;e6NP z@u-CCwR+u^>8&%_y_o=Z&Ku)_L%VTwDuWnnKgJU+-HxhiYL@%*^$a=ZFP3;N1E@!4o z!%?o6u_S%u@|c>M!fWoo7ytApe*#Mvm+;9?{xu$d@@Z75(PK4%Q8?031-Rw5Tkr>e zbc30?0j93Yl6-A%^0$Gh?GlOWqH(NK2&QcEyKWnTgTVl`W>X6)^-&anhx(Hp%fD@W zu8WMPqf9P~sY*o#i3CGVO6-VWF2-a_A{Yiyw7Ube_Vi5D;W%M*Nl&!e8oJbO98wg z-MnkYvLuT@EMsLWvKU+$l4)DWFvjJx>v-QEoy3{ZG-_SOX|%Oavr~olMJelpkr=gN z+06c^)fx>w6ys^U>cFiSk34++)OXQA*GxWRzDfikBVjQht|Q2q;*l|snPJqD?5Q`R z4^yd7z~cP87_s&GmJCHLAJ13-mQ(otWT!~V^UsFPs)B^ypxamK{p!k+SPlbIwz-qo z)4O;;IUd71?zjoJPN(Hll!%Ox^#c^s9x_=U@e~208wA{NxtR?ET-g}m%g@&F*k*u@ zQPeWvTqlu8O~+1YGcftGorcwQ8IE-)_JfAHO zHgp|tQp3c^CWUvKkI_~6Yc`6-RUoij+VX;7AN^`gK#E{RU}_k_um7jd;wx8DXmNZE zhv<=6GJU+(8`?AM+Pxsd$8xEN>ed!EH@7fmL&|U{6H+?5b6#-nl9f{Q)MzY_l-*NA zeOSj}ZHP$MV};wIkeF=<4+SrVtzduw<(g!uVz7BfP-Uap4v<_MSc(=fvIY(Q9htmr zG9w0x^Op~ef+&Zo4C;Gq9f+X(iy~+x&(#o(z4^H+yXBlxw9z=jZme+4ZF0}E$G6LCs}}Y zAL7(hsl>^)QUWRp{*xLP1lMnW`G!v!`b-I%rjLs}hJq;K7-3Ha z_=(%6amT(SB7p-^^r=Z?0WxJCJHP_=+yjgrQAx&5aNqsL)A)~H+`@8DK(pOe$&O%( z%m+6hD`gIm&Bn3+z!Y)?AE%zXf<_gXPtM?NH~)yrkN@S{pF`X4sRf_9v2*9oTS-#g zX|7|&nRkYI3DcjLe@|55#?+HBvyb9!cJ8r6X@-F&X>ozUG7t6S%uc<6M<;oj=rQ=$ zkE7S`;L7C-Di!IZ9D4F_*Kh!tPx8L~b9l?m`w$NZYFXClBM})P7xyqdl|?3(Fdwln zkayHW&>v!TbA+#)YvJLQ5jIBv<*^pkVZR8RCcw%K5{nrLLDKhwDe;h#a+nhtJM&Y4 zAvQ4dyQpn$VX0O_o2*fRG)&8p*w=xz9E_m4`;kW^B`!hrVKJap%~!O-fyj&V^s>7E3DX3`jHThdOfW_(TN0z%=(aG9nqQijIIW8|r&SgVnI{C8O~>$~ z2Xv5zI2Ffi-`)wR~r_LMyY? z8qL(z4jks7?s5-ZhoJ7EYiYBFcka9O+C--Movt=JAvNvT2{>3M8?&2jh+Z};j0_B^J9k~IfZn|OGd0iIdYkiX+%uKm*f^flhcSh(L zvJ*^k)-PYVEHR4? z+9b<0b5LomVn%)Qr+dtM>voVt1eHVtd!`ELL_G9lQ(z00B3jhFXD2`dB`z$J*G|fN z6v0e#j5pp?!0T=;BOBQ;Mv7Tf_F$Qp3-nVL%C_S-AC>z=)M_**aFJKw&7=pc?~9Y&?R+nLJ9x zG+F#@6Ee0q_q*6?_VLi^79P4Xz#@;ctU0dBLAJnoHn1fV`@BVfyP5Mfuu0T zzI;a6bxWNg1_DtmMf-A@ugpxNRL)EA%|GWoPsO9wZOS;P@c?%ehq(7h4w-zw;63X! z7LZDtQ4~vY-<9aZL%`+*cA+{=lR%Ol)yTrg71d&1 zQ7W~{=#zlbsNJ#3`BHQ`wv5D#oKU8E0#?3f691g#pPnpVjCQ>cJFO6d=K|5sc94_0ZASiz&Y^lg$Y1-gIa` ze)?yA7JGN^#i#$`ukg7qK8Tf#O|7-PK^He4JBkl~;-lAPKE9l9@^Z3H*Ya5}<-6Zt zrhXtZHR;icYBgk$I);wC-~IpOt~4p2eH+^jj!|H9~t{p`MDK zM??PRX)8dxKafb2U1_1RLA@XmD+^Gdtx!^y$(l{XFhXiH#_nPU*+K?gF3b{1Mzq(; z2+wJPLb{uaqC$m7jsSNprtpqCE7(OL+6KSK-XcMSSn#GZ^@`RFb9QX2oa1#m~$$P1L$86~oWJ?jGd4 zft=9=rg%;2N*c@evL6PFT_oldN8M`~Nh6%T_EiopQgdJWI6RyT9|opIJ*;0@ zmM~WZ(J;Tyfhld2PB838E!3Iz1~G<2yKXGgt67F7F-I(xL@Je0S&DifdPylNhD?BS zI2Skz6>KUaaeR#6j|1c*!0uue%dIBrpw28I@G>Ry&1ocQ|3Tmt@zmjJLEJ-uwDGW~ zCXlz^HifxqKIfWgEBy@M#SKIc`v}O6H5-Vf(^_j}$`+E9BOm|w?|lvrUW}kQq@Nft zj{54L<+$(nhe#&lx&{Iof{5{8jC?$UTs)1fP7B>}A3@BV+=DT5Gq;&i9XcbvK#qU| zuiusLcz7|BT&^<&O9ZFJircd_t)JqLIR|81>LPXcb6nrZ&N1GHbJwE^tMFT}6NYGF@<{|HUNHIC0 z*20zc7=5m{bU2U4kmWw>~ZjvmMd6`F$JY+y$(NU0;brJ!hl+K#0=1()`+dL(hgY2rFu%7 zi6e~`x#;p2h37O;On3n@!4UhVOEMblc+?b_7Aw>V*rM;~ab-l=qQJ?{)6l_u4DYye z4!7?15RWz-@0_5(!2v*XdFM$O+Qv-d?Zp_#3|nAsg;Ycb=1X1W8Aa%kjzO>u3f<>#u6O$9=t~^-CbArj*==W`q=j?_v$GXcDrF3YUG&-w4C`&oC#SGn ztzo%S$4~*zeSxVUFp#FS8Tu1NSROUe>$@Jf2h+rPYI$b;#ffVrydTQ@X1I3=RKU%LvWP@l02$2) z3(BUG1cSK;eGKV~hB5pMwTzq`ydQ4s4x;$f7oNf&eDxx>MhOhY)~)EpqRRH{Gm?s7 z-YL^xwrJ$r?IRY@F2Xmk&e)fTapPiU9J?o56E?Sa)I&O_Z)%fV_aT`nn>HuT&fdGl+#aHj0 z!EMtSMAfb6>k^%Qw<_j36 zNAMnn(L?rqD8TofJ99D?K{_5mE*?W63gnVe`jp+T%cQ=> zH+eaM(zSfnHD0zYQUA~#(Es^6--FI3H8A$evi4j_j+1)gOm3wly~effN~04YlRvCnb(tOFPFVswnR z-!g>V_9ANx8Ux(qZ12?T8W z_nC{u@8ij2ZxoD_G*4sBdZVS%0q+k*A8mpMymz2ih%nMaCn{Kh& zsX36tu%TUb>V?AT&{bZhnPL08Z8U*5Kq{X`uAIT)gA3TVr;Mq148fT9mf)_5_Mnfo ztr|cLQ7}S-<(*bj;${X-ce`ViYi7#Rm`)ck*s9{r#W~DScf`}TJ5{r@Oq9ULx;10L z5amolWxrf536I(fgE+|;0 zld?BPChAGAQ;J7WjS2qn1Cr3CU^YWQDO|sx*GpG>V3L{o+nes&6QP*`c%5u5S&2wWGUF%@R)$?j1;KbEVK7~t-Thu7XQ3qMH@H)ALi zjo{*r2&9637yYd*_{F?Q@hk|?-5V9aar*f!{OZTQjtiZP#uCj)`JK7WC`yXg8Yk-$ zMR&*~1X_`@+s^DMa_JNju^1ZdrskK~92g_aMh|MIM)YcPIxvADb-J>oXU_U!;8oh1 zSi9RnF-px8S*yOl6W0XVlkom+xsK*dn1eqsOUMRFlieL zEWO{gFojnw6jdseA*%Cx3J(P;4{BaoPNp4P3Cta^4%nbGMt2;+#r6o7I|15cw50EH zLCj1AaOTG>>nq4wrCblWL=v;v6e?*SNk70;GKz9yj3QYmmi2t|q+&^!{~V7QL*-$q z*2ja-Uct!*8&k&8zEaOfeIK3XXJ=>ewzs_%Z+PSD@!f~MjlcNwPvPv9i`aK?A3pfu z54{vD@b}`i*8*@}&eyz@oAM7HO#S>j--GTBFf}w1|E0>6w*-ldvPGVPII*T{I^=)|a)N}aKgAX|eWoxGn4g6#S z5V3`e3yd*m)CdgGYqdmS`@fuVtDxC*G}U@UpkLwtPDSu z#lqfw*sNBuy0WGi4>D8JGc(cwT)MKP!z;hr?A#2pxg0J$e+E;DtkULt-a3B%e>j9h zVuauS=u^17nnN&-f$qo-Pdd$%MX#v56P7^T_vgY!@vHP3Y)_AS$QI%_eCsTZy`*u+1}@01hu!kjt`c;efAph_(W;Pp*ye*)u(y?YAO6fVx^aeoN5wwUN65gG9cIX2G8Tnp zX*D>EhB%lH@YY+WFf|n+t*BC(K9FwV0_xNR4A5R#Mx5^dEE`Wkc!^}(0v3s4bG?K2 zf9$JxcnRnRaSASFIKZYEb#A({oz6p{jfT7DJX(~}S;QkzG`k%Hu`%Lt58c6t`QGpo zzSu2-09%)=JVzE-2Tr+y~j7kKIi?l{@i2EnzKf&S$AE!T|tPCl89G$N}n2JNs1`I z*we%r%@G9FOnwh^olxNj(rZ#zZ*rngadp3oA>(fTGpI3TzpHBz2xWk7rorBktU{|a zJvFtR_uiP-SDzKTtMYkYd(+MofP344ef@##w_R)))Pr5?_s_>xrk&<}UWqqGS_$XARsCY={RIun4N+r-zkYso5N5$LfJRT9| zb-`KqN9MjRz#DF%KD_1kMO*%IxnfUqOJ?B4YM&m6GxP9AaJa`hPspANi>IK*NPMJo zavV+>^$fl!unPhgeu<8MG~9*C{In!jXCUCsfl85S^XFdcdZOtwpj zdd^&kR#Pw>+qV*~9$0vI_@`q@p)jRsfDHQA!G0HCsHt&atzT%W7UQPwHU-NMs(5+|W`V5XP4GEx-(P^P*HY#lK2Y;sN-blY7MA1YofvYdS#~D$ zfryQGsX(j}sM4I00R#jHMjm}?SBF})SuJZYJ>;T8n2;Bc_j|$NYQZ;7rsdyvgWSA8 zW5!Oat$~72FzNQD-1K*gUsm9C{Oq zfRwW6;{x=bQYOde-0Eo>^)_2Xu9*zJA9H!bDxXX~SD>~!-YL-jeAxu{-Ao(Ud{pJd z>X!4YqG-}2{hokw+>miL6J#6(>NN_JX&fE*6dQgHsH}>5xr8cE1krvN6q4_jp%Mi; zrxfJ_XZ}1JzJFINO3SZwJ_R3}=_@uF$_?Dq@=E=GKW=nPBYl2+-UpoNY-yj}P*MD4 zYW8!sHCk;vX!CXICMdk6JY|KNc-MB2bJXK{2f)WZOHz@lQaXs; zAh14%(pMVA!zTiWdMb0?BRSh1eHJCIo*LF!r{n=J_{;%b?@;j`ADIQ2igp)vXQ%6y ze#5YA!QN(_bDj@YWT@1%Y+AXi`>j0iaEXH7f&Nrn5!e!%XNM3i%NcqxPZVjy^QtdE zwc^+*o60O)L{zAB%S;rT+@;Q_p=vJ*$vK+aKmb1gI7d)~RjO2Ve47C!(9{>TFu~^Q z5Od}8(`|2vv=48Y>o*cj#Yn^jtMS!Z;ih;^K9hVLYc?LrN7VT)Ut&hI?^3S;@$=?N)%mdYw+<%z18V~+xZlb}oT zW=M#wnP>KRw7FrpdS#?%VEBEx(M~(_Cz{KAED%FrJJcP1PiA@#S@225^CQDT&B{C5 zE8P@grh(7b0k!LWn;xv!vFmS`vInHwlGgNaVT9RDasC{sULC(Wz_97GMK z9~KFF!oqSi6P+as%B{RFoM0=8ACj*-!oMe(fVyLy@L}0>u83`2{{!+(Pi1&CIWw&D zsY{(FFbuY*lzNgycdm)ov(4EJyXTEhVb|7^PU1(zxDGy!!ZKJGyL;>oHS26y<;{R` zVDvcrQ>ufPB3=se=b{6=Dw@Y1sT5|3R5|7dzhs;9KHyghBiE6p(Ci(f?xA*`>KP~! zLDs-(xfwx+8zhxO!I92@ZuG*Q9{CQ2B?UM;UIH3cqwxR~T}2}pC$#wC%#9ZWMgn@; zp8<_nf=*L_lLPc7g@kZL?n~4KPS?2K_cUNc3%PZu2r7n8v6j++F5r6y1c8p7iB(N( z;Eo!sHTeUmNH$oSckkYka#b9UF)6Jev%yWBDw9z?L4I}|>S016iYDDyKknUWJFE@^ z3pS>BWVMPaNCJNLeW(hlNO#)ufJL`AY{1>ZEjODK^SOETR|NJ2$gWbiqE*1 zLm$&ez*hEo0o}AfhytcJvZM%X6>oLkVzCY0xJ4Nw(@tt@H+buYTUsxo7z0GCZc;^_ zL<~N@MrnCJ*+j+LE%GOn;JajxgBcy|w?QHsAFqf85G5#xdo25&BSHGAs_o6M+)<{F zQsmt~?YGuGqP=3~KZ?KW-djVW4%wzNYiZL=;V}&fK&REapV=L2SR0cJhmfA8G;Az+ zR*~h|@}<~_F$|DQ?lYO8AkhBqmt^>QI)d8 z(ltx&{&B4F(>I$FW2qti_=aW8D>=gokYNZVYmmSca2IZOXUK8r!}`uY5^NJ{?xr?P zG29g7aH=aIb?Tz!gWl$>=6^IB?AK4%2~Kn4CdUZ@;S;AaHz`bc!)ZOvSUDH4!(yC< z?$!{QG&}8ahJmFMdI_axC?RIQXM~ycoRt>k0%w#`!+DJV6V+tGxDs)kc^&P%8dT zu(_~M)W0`8-THVZ?ps@1T&fyzE}T>j?86N#l!rN^SkS*Ur|*2usW3?XBWCtnNC0aI zHz(S8B&z90)E+R7wC9Z;D&R%rJo~+YU)Z`HSRQV)Ta@?G#yM4gSxchH6C|1E3x&U? zBYj~$tKgD9QiH=+3^y{bT}B@?XRegTempSEs@jO-QQegAOv93Rohh-64ErG;-?;pJs*jd6(8r;ltM|friKf7Kfi`{7WDIKEEQCaf3C>?G* z9|+PM_TY=(npd&CU4Sz=jAc!64f$Qu-Z986A5r$;?l9=XGMGJ1sZuF_+%8Gzn+k_; zs>crc@*w#yetQCvte-d!0=D{Ja-^hMwVN#Cs8L=`B-n`Dqu`Z}3bv*+H=)_t z%&y$h^J^Cq-o$zS4`8|Lr$*5iA~5E6o7`Mr6jd|RC{g4t#NKoqDq9513qn44X@W0# z7rA;BU3Sx0+XzuF0@+*9@Rok#9g2Da!M5zd8r2mDp_()cUqn(~kyft3w?Bp6ivk}B z27SfTeqb(r5aW}I-k8>YWT~>_K^J8|Z&UWD33+3=I!`9s>e_?iJ{~0N8@p))(3}0d zjDHi*WuAi7LZ**tX3-?6Th~K$p2Q}VRS|sOqKk~#SXoDjCj>yLGi-2Fd`lX0{gfyU z?pVX^{;Za)b2aU=1$6RHq0+VHCmV$2c9j)EP z7Ied1N~}o4OJA^T9?OOorJTdO*8^o>p&}8%GJ7;lF&_OPtN7DR6k0hUt)n?B z8^(u@;7)dj;}I>Y+ujnCvjd?ZO>&4riWct%gDh6$YU7Lu-J}k8{q!=L54eU-~5Z-(umYbNoC5b zm6Z@d{53O=K2pSRq3W+M57ax%00qzmUx2@>J{tZjM1Fo^Hn%Ya2h^e~Hl_Gm=cC?L z|7*`}$Mt&S^tR6C`^CRY9%6fa!sLOCy4IWd-X-AkYFE#0&39g9bXwO6OQ$N7Vgz2g zZ1Y{Bsr#PKbg}4?vSK`(S*s_asqqBQ$$X@phk@YxdoSMK7#Ey?-LxG8Z&71&SlJlp zG(A(fqVXaSWQXa!+brBEeeJY@5{)tdL+jxPQ9O}(#4wy|CQ=l(-0@0mIGk|vEd+8l zcZ5xq4Cdl?xFFs_Vs7~6-A~*AxafLySxA3P@r6gH&V=pvNBZsg0@nTt^cq$yCC_H{ zze@;hQ94TBuQ*Y7zK)C)BMJ_(4{=;2pBCbLL3S~pW7r>R8`$+9rC zsjA%{`CN72du;h23*G?pdRH2;_q%T8>dMboT(FxGW-6-}@To%=2Nc9keJq<#=dQF= z>-8Os>_0#%QYfL6VmB#=B_2pPC98!#ylX_1CbTDtKP>AlKyy z{?&-svxqXs<#|3GAEQZ=r}mrt{HGd$_w@!EN8ab$mbm+Ym#T++5w5%}NIfS6mV{GhBr!{BQDmD3(QMu<|loyHmIFghp z)tyZ+NF#@-IoflhW{C1a1D8_7nK7y#laVB!8Wn`14LtYpY9!Q5jc^l$S;paJXqPk9 zu`FB_uPFOaT?c*BA`ps`U3SixP9EPo_*O+$&~b>Z}C(3&R~-0YaO9 zQ+0kRHKAn1jZWbd=b&aDAZdpm1+E$ap=Gtl|@$(e5{qBAO>b~QB}GpomKMKN8cCz znxS}pW7j-)YYnf}-x!RhPh*y5rX2b8!3ML>E-lpD`Sa?tyCJwmG^o@?ZM>AMM8J(uR$^@wImr3@mRoUIg@ z#bV!?qVBb@urw5F7V9-ZH=77{f|^+?$PBXeOF>i?J*Vu$45Rd&QD5c|^^r?zvb;}~ zg@zs89*Ul3R8YNlI@4Lh4o=;|>H!<^GbtA~ZzwV9gj=s&Th$)dSv}82%?3=<)5<)!8 zu2*V8k{l<6Y7S(?c9lMXX7e{Ih>pV|;CZ^Wd$$|Bn-ATOh3zx_wQpm!JF6*`W4lS3 zd?rs}7c%ro;~#Bc@kp{tcUvQD{GP^`$QzAe_p=~b?>HTMI2-=KKhL$x0oI}U-Bm5h z9-A&qc+F_B2l#Ep?T9@;nDv|h7-GH<)(Pp-^~zr-g3WMX4a%VdCS}s!NVAn#-IK)T ziMMyAy8{j0q7kd85P!yCx!))QYW|xG@FH-3tTLdd!6{lGu%wo+UR$7E3vbB`am4$U zuU$DRe-ZSf^6g?f-DYkS;Q*!BI`BmlGCF*qR=NM7Z^o=x1^Sg$eiiQkhQ|n&jX464B^!jLw|~EgTXdIL{h^(!=T~x zdNn0*;n zFYc~troZgiN#C(rrsi~aZS*#S{LZZZ+0uIXznlG@mz_`8%C$5l8jbpyG7}4CiL9(! zWx|jhoaky^Jj_LF>5R9+{g%SU&U<~@P98?yKc9LK&&#wIP^mveL#l%vjlJocz9W~W zso%^VnY`^pgI9UPaAZ=TQ!s`ogp!C`+xvSjlGCt7L(7)SX~`KEnP8-DW@2X))0y_(3M(ES zQ}N5rVUYFUycS%0_XFPRT3_qblzlK<=tcbPB~4-(343sG7Jt8a1ugCb69JkLzCl#q6IO{cCwWl>EKYF=eXc~!)5v_p8M)lb-ZSFhL|#w#JM0##x7 z`OFRLblH!S_hS1KyS52+Ub^jdlePQc0}ZK}lKQA7JRL8?8P+}ih;O73H1P-KQ7!$> zUVty=v;a`CsJ4ZGlxzYT70FYN03l5C0jlD*__vf3K*BFrMFx?cQ#X}(1v1QSPg6_P zY8Zjm{G+abo~|B0oi>Vc_2aama9`|4S)K`u4Zh&&50FBAYLy)c>eePYYr*jw+Jqm7pQc zs8ZH&$PrmlDSZ}>m$k_pl`-vLO!`O(+v%#1)8v46MhR^WzhWx6pY_L2VcZ~DpW40F z+`N3JQx4B*k1v;G-vb)o^GBiBoE$pvLUJNtIV|FAN)!sxkwT|RI}js!MnWHGTD~7#$*1Y7HfLH&<8mS#p(mQi znAT2kw%e^*zeW3+L`on*!|3YW#toR=%STsK5>hKK)UPbka@f}Cxv+bh{oEtI`rkVM z;&=Q{!q~f3$LZOD;DRXN+9zy?zO3k1B?IE<9?L{Yw)% zYDihR)_4Ldtv|1%nxVdBo6>)c)9Xc99DDD$ZgCa}H*T+uYoiR_`Z>EhvkJKItcoaZ zHepS$r!pv;tLnuWT}r|NNev{YF=;Sp2Fp_;KHy?mlD@ zWXjzu>Ho;`_JSS0e2ooRBDI*--|)Q}BE{TR*7D`z%9k%Tk3UvH@Qs-$V3)>C6j?^F z;vy3^%7>i2(#4V^t*&cMtUY-rmrudS${&f|RI=dSo=G%d+bHp8I)vKOJrBfv39P9a zW&eT+nj%LR8nCr%dv9&4BXG?D*RY@|l$XoEZp?IupFhC<=d>^9aE6RbL?_&3$JT&> z7dgJG4^1J>O)j##=I_bJqW|5ioUw5Cp$%P0&%sMv2}7mO_{g9aeht* z=kjd6r9$6~_qs|&cWNanX7MJ9O`^H`fd3S1 z#9h(Mw2eH0g``L#O8oGG(68bc8QVK>M*qeE)#9j`s{P{krEaB~_PBnoM$>;>bQpSf zX!~->zKGk7juQ<1$Pc$srwt`!rUp@9Ct4(@)LfK|oL$SJU#13pet@`uZ3L{V=A!n=zWmLbYK%Pk4oa^EcWuz6u<9quV=M zbp3Qv^xl-__2t>#kLAo?gvv18z4pcx07P%LPPBrc9@yE6>3gKHt>=f>NhVYx1LWKY&ZyhokyD{ zWoc*tD1rG3(qY`Xj^-G?IQF5xchIQTDU_!%h2o)R3yNobcS|F5J0?sLPa77zZR;^j z39wR5jlXNYsEsb(d>Fy03q!e_5k%g>Wm{>`1m-mMb{f~4e8{^TREJKcl@`s-DAXA~rA1P;a~n280)y3sGZaZ6@=SQp~ieu~`8RQEY% zPa~4VL$!WZKjpU4X|TF}l{J;k4$0-p@oznqaP7)D_=7NYKamMOk1FhpEy&^0d$&c) z+-mA+4L`dap}b()rM|t*HivN6)diB!lirKs(!xy?wE_66NOg6?4D3dde(fY3O&od9 zt`-9E?=7QcNH^~ZWw^aMqlc8S-NMo!N?~Y?efN>4_MWkkjgp(bG7Hxq@rX;2O4BQy zkK}LOZc(Rnuj^gQ!W?`oA;YmX>%9Q{7CXZbT}p@sz64K$R9~j)C!|n14*OELsZlG& zl%gB>+ls|;3ojtIIEI2*`8$%DWe40XsuFqy+#DNqbyT>B-b1n`9^$Ii2k_+qrQck# zCS^L-blRr-;nb-l5iorcen2PD&K4Z2NKoFY7_J!0X^e`EQ{m|y3VcMdU+={h^#fdv7HsIg%s?=OmzdTw? zyg3FRNJQCB_e{IuW{R*4hJ0;ACR`FT9zs2N5tQx5@SR{kpJk4i%LscP{kIInEoKHB z{Eu55KhD1afZ*SRG%GP#jdYQQSu~+)G3znK(o4(Caf!6E2DZGH1i0H|x3|Zr+ayL3 zzgx4pL+Xx3HJx2+rsi%(VtB5w2O5`X9;_FaAaZdj>S_M0{f$zCALI&E62mH5T*hQ3 zu6KKb(~-t?L#1H9E2dz#r;K5&e0;pG3Sod31S?BpQU5nGw{BnXXxz5$w#Q! zUV^( z$}h&y-PQ-OlSXIJ1RhgWMO80$E>ARgCA6b;aU|80elW56b*#_g_K?8a#~k)f+M(lP zAJ6^(QfzI@PKuxJ+bnk7axReXQeQY=et_8TgNNVom9Xt~nV`nL$|UhQeUK=YzS+^T zJxs;~Ip8~o16$jWd)s?J?@9e{-gQ}j3l2O;& z3F4hsn*(iE^VxvtX2&{rxH(sbNXhmDD05f60R^)H7JcQWpEo(?(b8A-#=%fcQB~j8 zM0BB=;E~&u5i@-!+UTH1B+%a;uKZDZzU1*~A>x$hIyZvey+QT1>vvbbU+sODJh}|B z28iEhsjfqTxijXYKEKLt`8FTzeIGr#kcDp9ghJr4YmYM)7Z)AR7=SG2$g{+Ngg^Nj zrz2go{nGHoi(r4O^^CqZa9gXMapInYJ}qsq<;)y_f9pK!s?^juGok^^2*XrVSPquc zJoh&Wd|@-a!|E#d^}=YB##FGLjoB&NmDCF+od+>QA7k%s$tzh3T{o{mTj?D&CqC=KIchao4|qe-UZ_tm*c=oKNZwsm zMu$Ee^YjO?ognUew&{2}3)p+TxeecbDX8s=%{Ihcs z=00vJbPaL-o2q+w7Bcv$R5bplFtv3*R^dix$aas(`;0PJSrM}zBUTF6cPmJOcRpFm zgcC*jYeTI8I*<-swUNE#&^>8N_$7W%7$rUozR$AodGEpDrMadDFDOaWE$RYID(6<| zzbyCt2&^dD+=`>b4p8Oip)_p@7V2s7R?gnBrp!fHcs`RztyU1m z@W9+;mvKu=3h=*0Q1<>5o|8lWX7`({@RWD^!_H-7lcmR1!bJD{&dCj)7zc_JpTte#9)pf6lIb`p~wALDROD8x4%O~%Z zV{_K=F7?+hK(+j3&1~(43iwz7*7@7%$)egkVr)!RN7b1v%!HJXBxp0(B~I+Rhzn#W z8$7bExBuzyvVqsMox{QEs*5T&40bb#rJpyk|K*bB*@;u$|Mc5me?7)(L=T?8BlxTv z!{}#!1ojfS#%_6!rGyOyf*)Q=tu`OVqSojw@*gAUqxrC$J=mc?RDBJo_gL3^3L&SS!6hE9mTmz;dgFAs3&NypSV@3YyDwpX z6){zuG*qzi;J8JIN#6<+3wSTk%-ruEHjg@z2Ohi194B%pX~qzhvcx=aYUWW(u0^wG z5EWq!m-(R2qZl=x24$MkNg2#@G?dgYnoKmrmY`}p@~VE0bXhN@jX;85tds`nGh%dv{V+2wPeE`r_ro^mZV4q+?>c;;&i@Gq{rpr){M74jJ8j@i-}wAuA%FI^xJiTU zDIkPwlm4gE07L{fT<1^BvSWNiv;#bM!= zvuhDzkG!%%Z9I}kUiC(~31%MSk|j-<%xNJvL<=U31k);tt%0nqnc;dfUQWt@)`hVs zBlLxh!o7LirkhPYK&OuPzDDb^mjA%GLNkMM1?w44Bj#tIQyR}>3L`fi0eSPCnW*xRvChE)lpLHAqQY6d>2*(;0X7Yx{(*Oy7i zhaa>8Ga+Hf3D$_39@9I{2KH}j;5CMuzB+9=8JiQ+YYSmc&iqf|wi#|v7HqQpzV@rv z$p5nfAC#NxHvOG{A3^rQqRAXM^*=ZGKbN|00QCO5+xQO^F(BDlUK9RA&QK)}Y}$<` z7XLkj{~D{Omc+I>STTP4;(w};0GXQPHy1+Y0atm&tzN1BuV?(9r|G08cVr9t6QgVM zpDM^fj?9S~^TM-(%HIKt=ga^9*JTT#pNiV{FSzm_D*h!}iB0v+`%Bokpa0Jg{_D*% zjl-_}u@Uv41a>W(HyZ53A!pRr~`2-^R0jP5$iv zo_tm?E_CXRk>-d0RPj&e=r!`yIeMSZ)`Ady&VBaX-Vyff1PCJmfF{ZPD8r&9)9b2F%fDu+GlC+V&e+ygeI(i447lPmRu5Iy_)^# z@_-)laL4q3zHIw^QD0Z`ilv{9w;1Y@BR2Lv-0gI)ykv~}aUfsSk)c06_t+WEEgyfx z)6ZN-UK_ya_p2@L>~h9WJzN2rHP652G2^Ue6x{2bUoz2r#~yML z#PaVjuFg+CgGafGqwq9F-62QjKWlY1pd#CAt8bZB`hcLADYx4`$^yTz+lLpS%M{t^ zgYH>pkLec~W*9Rko>t?j=&;7P<{=_j{+ z-gqSMdx)Zq-N{f_SP%tF(zOKe z;@42UW}+iNgC~z;B0&2kkDINS)@)cebLxf8nN63vAm`uz-vPJKS~tV}ofh!gnyyCOsW zRzR!tT;CG+4auCb{$%H7@9dT&|GpO!==NE3JDq}!wmc<}=r z%kEOzYZP6NZ41W0=(%6mo(C(-`oPO`?hY^7dXl;#e<~<2= zBg;M=9M4-XsN~n4?@j ztQ*q^eG7Cab_xCr%b3}l3UzB3mkVz~{&a4b6mOxXz$pK{yRl_Z5u3M9zI3Hc6t@60LllHvEsQFP-f z0%K|dU!5lxBpUtsi0j*W>AKqn!x(Ct^8st-BvuO-C$rF!1kGK%DXe;`#sfjje0E>? zZJ_K~m#6zm1%G(n!QW`xT*r@@6-S^G$ogZ0h6>8TIqDSy8`TdNE#N7BHJki7h1~g( zZkkmryG(+4q_E2v$Mn{b@K~)?*b>wHwb19*=Ptf}G}kM{e}9BOaMNGnzLvnak70#j zrlldG;_L(3`FT(^m@F=L+Z5Zv%~S`i;Muw|(=~JCaKp=;FHD6qum7CDe2!$q7_L?; zERICdn$hDx%!)_;D@3a zrGCE>j|uJ7JSd9C$`6d433#UMyT<9FrIUPB+M=}$@k9z^wybKX?t422Ngt;^9J+n5 zdY`>RO@5@%vN5pr*?g?wWquX^?k#dD_?fb$?VEPf<&7{>-GjgsQo*BVf5hm)yj7%D zAS=(daL8od>+hDJa`}KjX&MZ+p{`J2E*WLNZ~17#XOGt}CNiE^Td%`?^Fy~9H$dW7 zKp5G94_SJ}!afAXnR4Sq(Vhv?wCj{r?8Rhs8n>Xf285|SUD~v;BoKXh+w(@-DOLUm zv9A#17dX<=ExT`cr(jNsuQbO&%db+T6wsD@O^Zv77d^4088Q59naThzE9H z=*DHrlEnyn8ai#y6qmR*T#zc}=&nq#OR!g=(;2(_qeV~kc`sZ4Hk1GEdj5-mKK%*& z43 z6>pN4_8^KAc>pOxI1ZNNG?a24j=~=4F=9JWe<}F+`xo&AtjCu4(r4vj^hjZK2d)`F|FIj^+{lP!{!(T z$UsF?o|mpzVH&NmS&Cs51;I!vA|F{&)jX)BaY$b7uwrM}7izirULAHf?r zdUh?*@X;_3NC2Llj+xi=Fo=iVWQ58U7Xdac#$bsc(gY18S5%16g60_8(-8~Ya4jK~ zWll6XeqNZ+uSomD%hm_=D?0>S~brAG*kzc|QtZz>8*u7(UI(~owc zTi|uGSpt=h(e6{nBvDQK>uLa5WK7x1!y^8~w5{9t{Oi$APqWUkJ1V}Xx;hxMM8^;$ zZep_#9i!!MU<&7q)Ss#}i5r zz4?VZnIr0~t(7gEnx8dbe5HS5m6P0#^sJ&2pvztF2Tmm$bTF>#1#(SkNn*CYQs??P z?8u3IMR#tjwl-JY(AKC-h=2_z8;&i~0M+(nk0flIkY#hYy%2<6k^&t5Igpdw_bUtiDGvU16SMH)biCBcl{MhggGuzy8BWJRQn z`5~;$lVdrF;yB{tw!;YqP%aLpm{w#=X#%B)gnYo+YL#P=RD^>-c)D_?VPCY8##{r7 zPSVU%NK)NOqy2W$Gg64MfBfu=+-0u;Y|3P?wY8lo{>sT>?PnFU;15$mHyLVMZV#N! zhJZB(I#?>SE~^oa#FR^k2#%#>|*7QcK__wQo{QR-JTrVd7?;Xb6Hhb%Nv>dWEDdwSj^X`J6>9nvH0uy!1%o4)^VIS1Lw4%jeg|Q3^ z)9kS=AEolqfexUU&Ve(v9Eyla?c9JV+7GswDh=_XxY0M5 zc{5gR2zCfD2*sDZWgKsxyWmN~HFNdqC1xBX04a%FEJ6|m`bZI%6$wcShz~c;sm1N> z?W$^9L9ywB^N1K1CFO$OU&!MXHfZyMax_zGkJ%FJWHACkCj#Uz7XPv9OIu5K(3*W0 z?^3D*uzv)1k&d6PMv9jf~84QMhhBrA09F8jUY6tajM17DT--)zWK^D&n3N0PTPDK~jH#QVKDXC&*f2fKIZkR50V~hw zx?HI&WAx0^Ah?_`TpP9rAKS&3VP335>~2cakrN{q9ite1=vsk>Cpl1+qc3^`L-hIkYiJ?Kf?ZUU?H3mr|;U^oX@`YF z*cTY^&UB86Rd^b-!?lZi!L~vXFS0|$R4r%V>ZmP96r6Uy*3z=VNA3SbL%{U;JiS{^ z)eZ1&ro38Wdd2~e0mA&?y+$XL4EfOv3lAgkSyzyP3*~Ez#1}1_n(7m8aK*_(gTaRP zB*pCBnyux4aT4UX4xyM3jw1+OQ5$n}vd3WwDSrj#Gu;Mh`e4LR+J)i7!++hD14+AN zK$IL7S@2@a?mT0yizq{S)>cyd`*lUZ*vs8Y3ZP&ua$+M%q*B+PciAssL5r~?-pRP7 z*ru16SX9`RvEX(O`{K25oac7p%0zAyk^HQf1_9i)y4qm462a6RLjN>iaJhyL4!+Sd&`YU=&!dk6nFq7M z^9r}h`+g_`3Spc?yL2&s;K8H7QF{`pt7|yj4bp_>%O;tPLL+oZwM`v42BzgYHR=PC zzBYlpkVD3awk{UwZK@R!h$fm-rBUjt74+ ztBAPsJ-VR>36l1fL#x(?-ff~ir{msc{LiPC1ReWpq@rq@TYNg+{6zkwd2dh;*A*|TV>?rrUtMoUj3fwqT63? zA7SJ>^{t@>>WSgax&;uJTDcNfnDF8QOAnUGC^mx<`)%WxpJI(o;UP5O#1msaXR#jK z+_}A^cQn~Xg~g}9!iASIcTU$Rk_i!HynK=wCl)fhY>0ed!sgQ6p@<-vJ-6B&zdF=Q z=CVC@h@(l?(Hxvx_%52c3|!>_fMxG7f2H3R05=R% zf0U+mpwtv)Zx5GH*)F<4G=%8THC?hk>G6Pt-p~GnQQL%zpdmNF% z+~Ou`KN%tLERn$GHXKo%`kWJ<_>taZwv9;fPb4hQv)htI$3`iJex97Ng9r}9KG2&+ z?w5BsqGU8Wv8zTT=+g-0zsjQFdPLIk&>LAwaFc{s^s9%W!Z9I43Xabdgo70K_M?E32Qu=vfMrHK#xDi5yZ!{XXjxs-X;pA4I3XjI}1QeMoM0oJgweeHV^o z9JC#s5k>Qh>uIem=pFX;v_mPZOz}8 z1QpArV@7Ee7YUz-@yG;t`m}lL*&@}NOievF1N#jTc;F1S9^4HGSdxEcR~f);^FF}* zZQ?QL)xl(7M~Rn&b^(Gou3-(mc)fF6`6GYhU+JZr=OC2g#%;AXs)d(k0LejudvaWP zxnX-_6I;beqPD)(`eJ{)AXAjFZ-=srwE<*|WGng+)UjG5{w@)ira)@)L{Lo#XXTD| zHx_KEg$^aWoIEi6YJVMZ1~{H-klHY{igE`Ej(Ic57an3l8)1aHQCk$6W9dbd|0aVx zxI>h_`E2>VU#0(CUi$if->e~i94Z_PFEXSX>O2`T@B}BN;U74#A`zzB%oeCuPq@!% zIxi--GNg_VP*q+CoBL0tm;`e6j}tl&WdbcT>sk&Oht_4Mi71LHQq=M=LWKJVIRpwz z(sPQFg7J!O>wM&8MFlX0W@0hZPTnY>fZ}ZhL-~UhN5%&RUxVWsiPOVPq@F9l@R!c< z3=V~`njS(Gb|wB4n9SH^Oei|6pe>-p1vje?ksa7U2y9`2p z@;xfnURX~tDlYG!_13WW&XVIUC14R~$q>waG2*|LVfaoo9V>L zVeU8^jatg$%d!m3S>dRG*;}u(16>~mJ6R#@!TGU}Ags`)4UrUSwJ9o_fZN?IhiX>H zWYxN!o)R0BY)K8$t6ZzjL#un6-k?6)+Wo_tQbolk6bxR$Ucu-x&h{ms)uH zFHmBP1y+5G3}+(7GA-u$Km8kPE=QSlqH*2I_!uaM9aQJESY$@ggUK$8rGsr|ql#^x zvs~0q^e|`WyAqN5e*OR*9jxe4^+icvbYPP}eGAxC`n4VOx+eTzi6 z6O^1XOT2<%+x>XwW#PA`Y8Mbv@V}jInTnJ7O|G>ao;Y8D8RW1R7rsy{`<8*0C{gVi zEw}+Jb|MMxND!5?68R>9O{#r1tT<4~iF@RLNjOR1p1!2+WB07S&hj$zYwdC3hBR{p zbPx*=z#9IxPdKQXtmh=r@1d!5%E@cYt4vaZpKM1fMA zp6)yNrle5?ykUipB5W2mP?cRm!HwC`@AbHElWZQJjjpwe=*lrqNT_bSn>-O4zXt(#>|{CIj#~6WAw<{mD{{^-AJUz z1l%$>8G%$X)EsH-Ik_$=U}(73Rvu40p}iKR-e@VwO-AC`EuO9;!Kaxm#z+b0#AR z6EROevwXrDsXV^DDwrS`_NNf0Sx6YF)do}#1|TPu`5#E?8R^1!f^(Q3YdT z`cE)BN)C{fJ}=^J5e8O?bLimIVg>@)l|SAzpS3JgS?sKXk|VlOyfnGHQ9-oCC6SQZBujq%HAZ zZPQikuZBk=Mm0sLSOX=qL}43ssEuEfigoSc%35}`+|Xjv%(3fl$K)-4xKE!#!=Y2r zaA?L;MNR!Wvcf|<1yQILhNttg9RHM&m`A!!jroohK+9MzWno2YuAwCoBumTQa`44V zOU_}_sL4v|SFiEXrJ%8!UUBqXh=QRy-eVI#~_ ztH5fCUjmbG(=|gJV`4Dkk81N&n}ZhB1N$}1CbJ?9Ir@6tg6UjjSx(OuF>%CwS%!y{ zcw9cYJ@6ke4W6{`7N893O z$fm7ZyKUi-aOEX~ijthoLS>(-y5p~FaR-(%w@IPa)Xx?HsHL@K z!HUqLDBJl@$T}BP2#d<+zR&lF_AqYGi^@=55169# ztT(^Qmust3%;T);wj~V(l@XG{^{6k!zS{>m-Y;%*{qqNNGHUY4167FV86GGlk{OA< zYkV$4IDNq?Jzpg{!X%NlC_Wl4K&ooard>{D1{QUVT>BN=63s{x6vyci}3&qGsK6JYFXC1zOGSRXrI4k@6}EQD-$>_NN| z1F`mG2njuY$P_#}XCNHMuNV<}yXInoLZ-5K7=|SZO-(z^m~BY{J^sPuEsUs=Rkw}F zArcz`E%R$Q@A&kg!_#~w%DkHRx<>%7aP#79$K3>swaa1>1a|J~sf3QGZ4YAPpbgr! zlc!uAYeHuJ;*qt~l+bcX#%vOaw4B(TEWN0uv>b|F=QJl6=>Un|CMTT0FG`+sf3?K>Zbd*59rs1!pB++Lr?GFm`xhT%~+nFRA1gH)wvT zas4iGxU!$bY+m#JSQL2?w3~hx<&)7~Dx0h@!3l#t#-{Rb)?~(km|Ut?u`}4f9_`Ku zPyoOflfi&92njk-ia-nP>@$t4C8c2na+L;~x`u+DccxysgnT8@ut<5&i&85=-mEqh zBvMFIEkR=)wx(0r|Es+A54}yY&YC(Ldt(B!Vb3;(jr`vc5x4oZ7mFEIQ*_2m<9f&;+9nP)G#m3B}!}#%2;jG9KiYwHYoAMzz*x`BmIpjlL zR;v_%+KII@dUi?!e~yYF%UmS2v))~|^Y%Qyy`6mrRCoZ3uerTF0ssKX%0RpM(SSIleT+qo{gr zdKA@eW@+kPLt-f&5q}gAun(>P#2CkUt)j7Fsq$}VMZmJ!pHiM!M)QrE{2(XI5nV5R zT#GCaFOYEHkVmv$PZ&O=8FVeT&K!P(s;aSY+h;c>BB)|F;+c|&zvMdv@JP;6SfTmm z;RE`yN*ONins!o9rC5<9L4r2}_l^e(k9VSMMu}3vM!gJkS)NqvZnZ|qj-SDhL6>7?&AP6x;#?gB8JXRAGlEH%137A zv}w`!N}^o#?Vg&sG81;%m~H<6kFrz-vqvA4vq4paL60(C&1d7`Sk;0IThK|-_#Zkp z&4z7x??L^NuR~RNQbV*jEV3MNsFa+a`QA(fbmX`!mje~z&NEqh8il+Ab`tPoT~kwZ zk&VPn$!M;k2h5CfED@V#GwmQ^&-K+yfZvq( z8F+!%t7}qWGzk!W-qiJS8yktL2guzN6RfrbY#rIFDX1Vylr^iB^V3VWL&K#kIkN^Q z@7HzdoJ%O7mN@+~K;o|@3P%!y?5t6DXH48UA2mXL-j>L1_izAi*2IR*baTv}p;Tf$ z`lT6Vbcs};b^af|Q#T|;$aEXEl5LuW8))U>Hl{;!5tTS?2;*L7BbU%g*tM^{ zy*^>2RyElE8!yW}R4Tcy29@|h4_VccP3l%cf)rara6yG7p3Rh|ol03l6nzds~~SX%uF@GQgPevOv3LY@WETpeWzC*7QmQbd=Pg^RvD$MOuIC zxsJGhP+lP#Uns&g`-VvhHDuZnnF5)uoK{375p?j+z@zj^I^3^sM$)b8N7hy@gW@z3 zVTF>)_CXUaNb%2HO% zBU-rPjZ8VE>eWa4v7!5v1$|G`=8~j3Mh`*rsdYath#7^Z?SX8j8l4)R$*-+R9MUA8 zmz&J&DPol zkxDm%O2OuxREUxzrO^aAIFE}&D=3OB=aN{5|DzjJ*|aZJGH5jLy|!VuNV7P}av zieDo=qq(E{M+OJg&LOgJa_yqMQ89@oq}Pm@d=?}eqY7zN*oxtfSKUZqEAKT@*$&Cd zrJm2>G0hE62jn$RP3n>faz1@%0p>+pc@zaW7b8qPzg>4ncfGH9Zh{0p6`oD}dj8d0 z$mb1)`9AiZeqm7)8>*_CN+WSP5~k(P{aY3MT{=f`kxoZT`*%g>_wva7*4fG2m235R z>-9ljK#(OnZkzWJHFtOJh)uz|dIr4tdCP_~r}Go-hBFO zyWu{FaxfydjMofVB#+XfO11NaSt*K=2GVx2D#h;uAsn8C*aM~FSHStQRh0wAMOA_l z5vcfIQi!C2{JP?~6w1A|2@ND97`$ZADTbK~97kg*=xi13q#73p8DL6eF>DXG19RgX zRlp=Lbqa9-XYPgov%^_N#_IpL08)joMt4jzL8AAuxO^OL7@elmoXp7}hgBXFUY2xW zq~RwMW2bfVz%*;*h}~b3gw=(wRvknjcpwPOA$XV}w>~oTO4}{U;idz_))^sFIJwat z_|CGX0u_xWEx(8EXqUiJ<~|1O_QujTCfUH@uQ zmkAxXa$a-Rc7R6SkH6jeLY1cf(oLSLdn6)XP8r;LcF`R=oX@qk^;Vt4aH2;E`q6l| zucB14uwsukY)gALWKz|9?IR$RjSs^ zg!R_gYGxm&+Z8Xr)~T3@V)@NasSozu);&P*J~9~AnlPmko<`8ovX2?+^%J*ixfJM6 z$La|?Po{wTBUgGVE6NsEaKR1hDmUo8WQPgY%O;xF;#a1+WW*k_=M2n6#Wy|GlrU2O z=Ba9sI~{KDWqDsH+DAxc0)or1^QM-i%KZ!VsAB+h-sde1rc3(*;@Z`niT!>Olr@yD zgn38g4lDDR5a;$Y(wk%>OKe%REdX`BX!(*(TjZ=a#S|QThM0uopYTV3PB_V=Y-3=C z{OP&nSfPlfxEywq|!u9Bv_qIu%?;Xuc z`}fJNjmYk~ODVqZyo{n4>F`R1ysW@8;Y!4MY}NX(;%Vb7UmR>2eR%x=R$X#%0h3mla)GdP@X z)Ec>qyo^92mBreG5LP)jkw4OZp@h|FC^Y|imJJSdNL(_ETWE}>{U{|WVS$94nRCkp zX&dKNYw3zj5-;$phd^;v7NP5mOJNKuh5gMc!R0B2{VvQ)el^h}WOC%z+PL!Q<%Ic< zpup2+#h;vH?`yTPx7M|_S<+G)_~*{zNu&DV0&3v2@b_5F;Q}^jSaK>8AwU)f=QXKh z(rqZo6+@*tZuFt!RS9T{^=pm&rS>>-XB*gJG90^alSu_vQk20IT9Q`}*Cs0B$rEsD z6+7t7u91zq8JHWVU5%uD8}s1vZ|P;1)KXts=@i_x>T zpO04-V^hq|-M?6_Y&L9mF)-EEe1yUS)+uHfxJ7X^0!)XQrr5b5w>KtD+pc@OZmz!% zW_<>2Zq4)l{+Ct$Q{^C4zVAl;KxTbkX*T|94ZpiSZ-=zmN- z#&}nlq2Mqh&VCS`)JzcKgfkcEjLmE_iS5(^dJ99YTwp@@{fWc@eu-2~iVtrpjk?hM z)dgjm$Rz}$E$f{7I-j2}3^;lvusW%E(0)<5>gG@xl!8R`qitFU4(Bh(F6=FgaY)a* zt{mcELpk)GTA?zy8guLV5`cbR-@c86qPCXiAj*2{iwEVDh!YglLsta=j8f?l3~EP* z+HgEo6Z^81nPd@>_$^R(KYMB#CgY__oVtdyNj=Yx0Xq%Y=-|*~a8$r6O-*Kr`8J$dl%!V zwKb2S4XqJ=^?N+OliD5vzYEZBZ-J+i3;g$iGnO9@)bCIn@jNasAtIRojS#|^VN#$y zXGYY?E|&%?{vV+i0=_7{Lzg;&9gmnq)Wt?I)M}1R6S zCv6Q69w80_I<-j$KQMJa`e+Xlzq35`ZScKF1i2ZLIvj38?iSj|O*dqKV8e2U({p*? zkbLKvHI7v`CK)VPC~aqwE#Y8NHa7@=tQOsh|HBWDTWJlJA{=8ZCAg1xdp`kouLW%3 ziKW&1Q7ogySVRkQI{mcJkY@d#b;|O%UV7#fZ3bgnQ<26#mc6_=*-e|*a+lFif9vrH z+Msi!4*PGdeD|Tk$)9zSNMmp`b>)=D09b;u*aAc-Q-+a@c><9|=soB2cq+^dH#X=l zpHRCtoLTO18Mp9U#FDFbz%`{2fX2dR+&0CgT=iW0gf}dmZ$qS|tgvR*0%~#Hk|S2V zYq77bFN4Nv@YVhMv$h}7?@^;?ui3p(;eSeu|BotymoR})i(Fsr$M6XuY{Z^_uAFX% z@#k_8Zf17GIFe~IepeH0wtDOS1X)j^ptKR`G{&%qB5}K5&wUvw$)NN^z-qiHA_IJ7L$6_y8EeaS9-$97-e zm)(%@B`2=G+3gEzO-Us)QAyKwwaY5G+9%xpS{a&mFrfTqir%-}(wc*){!c z{ot$-=V$+(zn;Swvc3MbpD3?MeIhQXD{)_3#G77dA$A~vasECwmi#qA!Ni{=l*R%o znNu%;TR6tQDAeZ59f0`WWnr3)Wi_rCi%S4F?ouAfi8?A!ZVHQUZ!F}%u0|syhH#(z zyQc$c=yo*0;&$*xC;kBdP+VTNv$#Fpv9u^xu1{=b)78|hEo#&%^KNQt)mhZ&mHJk$ zTd%)1o?zLLgfMXk{C?i{+Obxn6myv_P=lfgF^m-*mr)^7B#r@X4T(Tj;p@DL<#T>) z$l+>~&4H@KsV9;?jh1Gsi`r?O((4^|s|-QHwDXJs76sy*V4<<4eTu)sI~Ne02!U-( z?-*l7aSyRFT`^a;_QvcFjU_*0d%zE5+*RwRcj=H+p%T;m6?+Nz8tt|ByY}imp}d$a zsQru*_@;TUdG4826q`(@)QsHoAH?y*vSlp?F*Bp?FJynOyH3x^DWU_4#45GIB(_6h z^>3Q-|0SxW4(n7Yp_bmNd&eZnK&Bd|3{`{j=X^p_G9O~L3ms?%OwAb90q-MB7%mzU z=2UBZ-9l(||FSEklx8J8r!@=rqGi#3-Lzz?8R7}JY7V4Gw`T4QbOm0o*evXQ#d3+P z>CZ2WD10n*p_`Z{j49tEzc4O_S~egj4~7y9&3{+LS=aK4UG}vTt`N*!ah#|{nu98` z-gICuxy+zSqpM=qGsZ(=Y;sQFaqNr*zm7JJgoGc?qMP_ZxeR`n=Ce4-QJI36en6MH z&_g}6**oZgz0;2{3(BOUUAR`pLP(Bwso)S)Az6n!vW)UXS`o$<%fTqe-1QeS?)1Z+ zK+trVDFj7o*ICWwGxZgyEAuGHN^x$fm zE-T;+mnI>!3Q8n01{FRZ(hypSVIpMD8cq)6O?dD3*suf_9R~Chuqck5sh8n+yswZM zMsD3j1rTW=S>%GH7y%uVHHeK9cv`-u&*T>TrUWcG(L_Z%TteVTBrJ(!0I4Oa;xN=6 zM<2?9wWfQUVQ!k88&;Vlm8XzncFBwZWn>2p zj*L?hW~1}oIIP>%hHEY+UT!^fA+q!EwUCKhtl2S8t)=kRSxcSt1Ok({s6j1%8mO*V9Q?|<>C}2ZT@b7zC_U9Ea*gT~<1v*j5&b7vgk!jS~rQdtZ~bYiV)nONKwzeua}bZaIMF0Ikq zP$^q4@pzybwC}LaS|#?Mbev_7a+#N1lPr^y-Sf%WNJ`f?t7r<1r`d1I?;Dw2YlGMA zKeMtve-Xdec0ObMDl5srke4oiE-BF!x@F1+9b-Jg8%ycHm36?R4RM-@`a8g!fpAIJ zs7u+YL?QFVHYw3r|8|GpIP$eYLM4KwBQdIteF4cL^S-*Dc<+ex`_sa@BYFrtjRhL* z6jH~a7h3Y$iu0LwD>sfyFSEC{R)1Z@TCfFYMV`E@F!&NO&tD<|4oBBpG$RlcpX+D;nt_hGzUwqDVe(70kJxd} z&1CR==aLx~8+cVCP>5bvMnW!4UOH`k$h%_35hX9RtMx*&N>0YWvVy8Y;bF`5E7 zEeq}InVB0M$F?ioN0LHSwW1>lyN1u?$~$9^okX@7G2f&IHR`)mE0gAc9RqQn2V2Tu z1@ViVEwcg+n9%va_0-*(+%{(^Su}Xw2*WBbYCVm~;#lvvIHm&&zst=c29QSt;oymQ zQ8Qu&9EsHWjQQTK`W{hg{`I)sH~^FWbEhTIPQ~EP`1rf`$j9vpI++}BUL6S262e8J zQD7iEnVPWO=9aU}+`JxoRTNCH!}v+`zB8Wz_4#tTLsyODzW{|Wd}M`NkcTI|8YGt) z42dQKIWAa%hWi9nqc%{_+!hk7I*vc>P+hqm#fEmecx1uq0Sh%pd*>KzkSrcXVMto$mb8KOsE-r z>lF+9G0IfX1nfm}#}iu;6N)bV(YlEgFNcP#4UztaI}4xwHn{uk-+ck-)u&Rkv?@KS z4>AxO4fX?)-OC8*H^METSEe$CVA^RfW6FU<{wn7Au;~JJsOMttUVM9CDKwu7NLFTV z5bncV;8vmMOmnQb2xx;uoQB|IZrK|9g~Yh5mfOHD2odvZ7%sx5L_tD2AS5}xKQ^iY z_HVI=oEN%6Kk@ST14{<8-7#9~;*!gTIFS4emPtW4^==^~QH?Wei5rWye%Cxp#y=_u z8(#YdZkHmJ4Ot*XC`XF;!q7pV|jC4@{ zh+_{VIDil-v3NV^15FlUMEm*Qj0^QED3=WDsF}E7Ioc4Q!);=LktQyao{@nOu)SY3 z_d5Rdev@6IM|r@cJsm&A#&G*&jdY6m zSY8HwFAAU&P6OwkAfvz^IpDp?_s$Bvu2BuX3-^Y*f9$C7QW+zT-Wrd3&8i(tcU4_o z*d!AW${HMwmVA;~Av<(QUpfu_1H^p+I9uid^}@l%nVODn5%Iq1T-iAJd>s~$f<1#_yemtIZSqj5Y4WsM&=o4obU?Vqu6?qCB5VR2ljcL^55|5x zrBPstHjS>G4ts%mZ4azeo~Jtypv58eP&*AyRs+^7Y&yGZ^=AusSrjHjg0OKb|7tc= z;hw9O?H0ow9+#*W5f}-oW~U}NU4QSo8CG@p@5G_Exb_#u3_#d^8Cs*!4d#^%yn{fx zM#H;{1Q10~=7M;D(48&x4S;C|>VamA?8Tqe%j4pvxlmKu{v{DaySDR+FZEAL7hKIv zfdGA<_}+`Uyyk}laq+MC(|f?D&jmvcvPw9Dm=D6k%}PU5If`X5F{pC- zm%~D7>b%e2E++(_@D4i86qBpI_7V&=&en!#9Hz8_G@}spaq>M}2qRWa;^ItAqKgWj zDlr^rYOn&44v>s-=q^YB9!+620&Iyh+j3`OFA5gD;uGjPCh?o!AUAW@za%#$7$i!I zfQk!o1GssM_2Vu@&izA9C8&HrI?}U%Kn8tm>^PutHm3CeOV)004}6#R?e)!8Sv;MY zUZ;0`JHgbchT1H6v)wcy|6-!u9aB&MfbZf}n1K#}-r zgG|h$e}d93a2%$d#BcT#302Z;La8(^@u%tyXtW8a2(VFoW2t@{C4?Zr8c;%t2g9|1 zlJ(}S#6G_N+PwbL?nq20K@Nj%J)h1}SYO@+ZJQ__-@4)8CUq(w_z)i^BT}@MS)czb z0~^t{Mt*%h(|Lf*w95E<_ir^5+9P!N_+kZ;!bR?@l2xphAvZ6g_?0fJh$KM^%)Exu z$ymwUI|}piI20ywQ{~>@hUg{C1$M(Kpu)m!81JmQb=IuTElT-3ezDz>t1H*emxo2S z`(wIJH@of1<&LX3PxWe9t=83s>FU(w3!0Ytb}}P|K0wrDzpr7EW_n&37S0A`ii?6y z?Q$s)h7zrBX#e@ZKFH$u4a~;&PV;aH*@fFC7+VzVBv{fK5Jj1IOGksH!3|fQjat)8 zK>!(st!nWe8*@ep`Q$o;x5(koh>G6X(K3QY-j6xi+5F1v8hx@aY-~T`j^CZzeZ?ZM z-Se^8^Z1{MrjOtw!RM3bn~J7hQ)*J#g;B-Ol2knO8+j&6-ago_$dFK*SkO39ZXb6&3%%uWHy z63ZpA&?#|Livo@k(k9b+M^Gmr>VgP#>@+<{ez!)yW9pn643x5^|8X!00mN0ar>Uid zN-SRwA|2m_P*d0R_cRo1yD#Tvm9b16h$FcGspA|EPiV#*!b;wvSF@PP-A zR7*%@vZfu?P1L!@!_|=HR^yjG@D#ZN19n?E1tkrJmKm2Ic4=iL({Lt#+-5*=8IX2egfs?=3cUp1cPv>F!cHhSq-_v@t!w39* zIY8M5-qT7o-{6R)JKwW@D>b^>EC5xz-JA*R3S(lUJz_n)_~2Elz9KuwG~3uhjY32)lD@mWcp_u9Y^bOqd|V_J`} z{CQQ8N?{KT*FFaj;UJ)OvXb8g-}poOjFv;){x8ne6+e6Z zp5v;v*ITtsLZ@R}*;m)G+^j3@vv{)5vWWXxb!r!OVaQe#^tN}~||2<|n>8BeMiZ~HirH=FQxH=7g9dGW8h+(ZNRR`)(tv@}{ z`xI_$(|>v^e)V>>P1S=dy&lBznWr%b3?9z_X)vCcR+1{$<&qz{h2Qcs(_CGxr}^zz zZ0x?a{N|Z>yRR}l=evFrkJaqZiJLPop0t285so$~{ygmtZI|ZDXEl2ft^vU?Q(ULWW4ACu28ETf2m?!wh?z2fmL^EE#PpyQE2 zZ*dsPLBTj(EH5-|Ke8r!Aa%oG^0EoI+<5Dt zop=n)9dT$Y=`-VJsCWna`Vk~Tl3$nR(_KzeGJiPA5Td(>ilKw5K^9%#sqgxI5C}Lf ze@RL-B9T~;KHDCaHXF9Qyc-@oKV9{w2^b1|Bz^DKoa{Ri{N)T-$njqJ4_`X<+C?Q0BiW^1eqZnYcwKI_!#j|Of6yy6Ct!FF+p&_Iuq{ThzZ|kPA21MJ! z6gE|{^PzFcPu<0eUq~&@6=Rxqe{a^UHrSV$Rd3r}ux7EJHroYD6V)cFa5<@VTg@vc zMCFGlhxDWmLyb4Ou9rhAVgQI$LiJDkHM{x)>HSi~oKE}w%cQTv6{{l#yWg^f-SvL#)f(Amx17uZ` z3t|1cz^mk|4@Y>uTsSK09%{edfV16S7>?&DIMGnXzSrvetE85S6J*Q4qDEX^*t=T1 zes|a4vvcAbTTM^5v9BuvQAV$f7^8iv7Vl(y?n26Rd3;R%nK~yOq2^_HdCHEkC=1oR zOf9mUNkRh;`Gjup06rT5`bO}*m$$~z^Pbi2(P#{RHsl*81OnbB85AFpTn%dURgAkc zKoJED?Wz1`8LU(#@mVK8B@zZcYNaqf$p)4$y$z#y1qrHiS{$zpssbO11cwSzEcJn# zUjxRD(>Go%;r-b+Qu&%s8AK;_8gi%(OxbHemKoI)bTzz!t)9|fZgL|z5SJg$l(=L3J_g=Q#jRVi6}QG#OtL;KO*VPu0wUJk-wjKg4l z8<9+Xoye$v###+L{O%&L-+ea-Dj9N(F>(Yjc&Em7^K5aujm+V89KcA!uyyp^VXxV4 zYMz{3do*A4R6(^Zg@fo(&S=4qRiY>x!`c(5^OgM5xIFJNY;HdHZv^mQD5peMzh58R z^n%7)Ra(uivj4e8Ag}G*YN2zg629b$4GcwXH>_Wfh`9d;j7O6ozW~fV)QkI3LGq^X zZ}{a?9|YetDx>lgT)bWhiL~f}lGuR^ZIe&tvoYCnVdxZL9;7K0r+)aX-mD}e`Krs= z>eJPh&&d_v?w6cIKgev<>dt?+W~E&}DUWd{Oi{7Z<6izuC@y&Y{Ax3$ zV?(G3Wgi~IZ~5QIB!;y9BB@sc0k|Gs=k!S3sQ`B1m>E(^ACK*FkNRkej8qZ_>y5fa zGjzSOZktbha!zHJ8nM6a-1mp>M8u+c5%Rq0x%(%K@G&iH!wx^}zjX5RzFody?0m{! z0)_HDT{kTW$)sDeK`fDrDprm1YTtiZ{vHQXk02!jhhu!H7aUO6$Z4}`VWPbXKs$Y6 zg-yZq>_YR1x;emqHzN9QX2dC%!>wMohtkp2uGu@U%2(&^gUFveCCt}nF7pX?vp2~* zPvWqgI|*zs)C=9t$gg&E6IppMf?Ebhk6~Uyu#Z1J;<5`Ev}9d3ZV=~QT&XJIlbiP-uoafL(FzHAFtfLq=bvieT#DG6StG4TF zU-oBPzt6h=T>F3R34G=ItaA83_R|2a(|u7S4PEt`#ScUS?IQc0%}}CZV58CdFsRKx zc|b7E6-x=l!;bn$n@xelPz^sPRI<|+OK`BsZPS@s(FcQ7k-PvN3eu`o74D+icnBm4 zXC^A42%+G>LAfhHPg-C>YAsT2!Ct?4i@(TAO&PR|sru(8; z^IayB9*k>%GD_zIN@j)B)aBPdE_r#FTs(a)p1hup3~rCu+16SqzCK8vN>_VlAVnBLo(+dfTd@8ljJw+CfWIP@xCr z8n@anoLIY}@BJBipMTs}smCO^gK5?LD$TDMmD9^M`1vVlq9(fiwNZQo?{{_= z(9yubZcG>u(xVIeftli4qTtFSZ%Zuh%mKpXP)X+2Q5(beTxUFta%ft6>LNE|DAH+5L*MZBcKCQsA@Op6SDPzbRR< z;;{Q;vC97Ek6q_-lRUs?+jo~9vO?KTb?$_nF-9Ca>9S7cYMl4ye)( z#hy5{0ibG`x2>hOZF~-iQod3eb)yuliFWWlpepVw_C+bAx-d(>y2Ykhk3pL&yWN)< z2`xVapR2sDeuDMZo_oG?N=Ce5i2g`!Q%8Slejsh$AS)mtMsUetIk_YzAf%DmB@E@D z&=WA8#K^4yrHGJ=uxGSKC4I9=Ceq&wGmaQpZ8HgHTwn_SjNuiis(?jaKY?xl^A79M zY}*F@+^UP<2XIWx!y_W6sh%spIjUE!=H0-i{hyyb*+GK#xEZazC8=%X8~KVv$f^{o zP~Zw0SmdJ-Rk!!lj6vjOnc4+Vc9Yh1<2{J6q*?0bu1@`tAB!z8PDoD=9V7hgE3;+# zqd_X>IC6QLWvvEdE^wRDg$QOcUbWtvm)u+paKi}pIk3w_y z!nKe)l!-%4u3yrqn;b;RKz!n0z?e>ayJK8qb7BLd@mryDq*>WIk%ZO?KuP|zd!Yk7 z0mV;2j=iVf+hV@Dx^g%M_baT?2njzZ1H@2UTdO{+l^u(3h8-tbSjkR2MxtaY9E%F9 z*a2YHhADy?I6(k4zGup7*83esU>GOCUgvs0s$!vT=ja=7ISZj(9{qIH`#mt*Xl=IO z_Gf;k&_3_(Si#t!6=f^^ta+(LzR~O=YxC(RzX|f`W-yMa8wwsjq#qUaLH0e7!2^(^ ztzQ@mVT(9|r^&gc<8HJ3w?j{iMLoQ8-nv9W!roRBNUm*{5>#SWA~2oGKY*_Xg7z2d zkBoBjYeS^ArPcS-E4JYa?`=cit6QMy_t*I!Sg?XS1R*G8Is|!3%W;_Q$Y%mD%fS0y zS-bHM#+QmU)e`AAGB=p?^cElMSYjaHl2hW}weMxe^8BrpVDQ&0#cbQc#NGf+C7n#; z0Fa;Y||n3kvaU`gtn>q_UKVf&WiUQ^bk(Si8GRoSvGlhdiGt0kE%aHOE}hb*|g! z_?WHBXZMVn;{frfu-6MTWpS+7nt<}l@@1L{Lxu>447Yn^*-RzoRIUQtc3c@*%gSSZ%Mu`}L0LbFN;q)dcUBclt2BHT&0^iNd-8|3|T1^M*0s{QN# zA@njJZO7&@(w3?4JmD#9(5KVoERwI$Ehw}PYDtk(#N5-*l)>-k(DMEh^!v|~9{(9Q z_Q&;N+~U{IJr+zw;7!KumU?2%hMh~VB-Yq8-!iPq9r%E?pE??t1YOm`&`G{v8>(Mr z83NS|W?AV~;YuGvZBT=OXj7zlyQX7|lVRU5vwFvi-Gh;| zOs0d(Q*lZx?MF6BQgX>$u~=kRCTvqTH6`>si;vO=J+(=o)&%f|5U|%Ny|-1ud>#)d zEEJXN1oP#gkxDU1(PMC?Z{?Qej?C~f#3?)zS{x=JHN*Y=```rq6Wyf0I!udMXj^x^ zl>*;mvE9~&EFG^q%^3TNrdU|=&fP?!UWZG@S;ykXNMpz1DTnIkoo^H!eXS#N&w~;8a{&KqOrB}U9jRZa@4-jA zmu=}!1wnhT$hJ|nE7fj@(Ya`8X))@3>-`LE?kt~LI4vKLuqidq`%Im!8_vK!mzp?L z2xAxVs?<$(=F=V-!wkovMH9@Y-KF_e#EPFuV++D*z-`x=hdg}7!}GLpe{u=C`#Mup zB@ov0G)VBG^1k!?1tCxaYOX>dgBk#1-yw_vV;J!lT${l%BcH=~qly$4MPYODT`vSW zo9|y5v{6GN z9KJtVun-7;{1;0_TgMFBe!TTO+eb^!&%Y~=o;OgrmS>y z)0=S)vA$#(=?#mVug>8+U96^8?6(@GbL;|z%AUt0cbt!l`5eAIc-lM0{7dSJfNnV( zrl;+^_Qz@5ZYS6_*K{qkk!C|6x|7TS02;S%pXVR%AR60jxmSuLWW%KAOOrSOqn~w_ zEpDBbBLNrR74-WdNAGyg{rkTj+D0G&v0>+jZ3;9!u@mZ>o@%(u<64P zhalH;jAV*Vb9rRSurnFpn)`*7Xmb6suN0ms%D1n>Tr|qgnR>tDILHVv^gJv#Ve%;( zReb8-7|QF>*2Ba=l*5x&?5{S82t0z9I<>jc3@i~{?hdH~kTwK#yBvh%)XS9Yiq9E= zm`hE`DcT(ZE5b2I^S_jY!k#E^A_hV(FKstdqA<-KEKuEyAB*Ye816rR^uvy;z0W)M zU;!L82Cd5}sBXL6Cy6L#IDI|F>;gKC$4@mvU$+zlZ_b+=R!n9gJjykxr+SZ8c^_2j zfjy(}Tm^ANFA$W}1;S{KmsXgPU=9Mf#)P* zjQy>!lJ;@-%1Gnbz@**zm|t$L12ItO7unT}j9>y{Srq2xgswqbjD7>*CX&AkK6TLH zx^Oq)2)T-AirkPEd|=pysVL?t!vE zug*v=M6r=6yECj92w#XYiF8heRJnET_dEf{O{*+tm8}kEea_f9Oiv8Y#Y*j9YvvU? zzuI3+E7u6rK-D2@e;hv_SG#E9Zi#5o`PUByfh4QixPE-Wm^ZuSjF>k)oyF1C0b(ccZvb{xQGsGXKqH>wgR>x>T zp`La%^#iN7CFrMHQ$gwP4xfvb_m;+Po7I}#rXSyu%j0R+i@y8ls_A**L^*|S@4%_3|`~jyT1%1|CzA=&$3GI6MjnQndkL@Ti6f5~yZ+x0rDeBz zvuf{k@rMx@;#@@sE2}gDfsk?O@t#x+6|b&XzHdclKRW?hN05Li5mC+tIceuS$TcLQ zf54V7wDet_a=Yr5#|qyM{)_B1ud{gSa|^$hAIk<28VVlvidM>K!>W!;TqV75ld_bj z#<1TLvDgMY+<+TL)q|Jzila$FWsSg(aOirC3HJb`%paXg%_V8<}|OK<264V=t%=KYr|CL8|nrh?}hMG-ZT&K$DcL%-rCJ+ygu z(tXP#P#Yy~FPL3!r2kQs5JTpCsuAiz5)e1$M%n+HnT5Z^)Wn+j0lMB9auW5}`GXQd zeVJ?y*zSFRd3b4S@;et_blA3IqKlDf41;0b+&mS0Q){zk^bhmuJpGR}F%qvW1ZCtD zcfU@f@^U%1moZvhZM`eoV zA=h@aYW=U#qQiQf_l2N?@Ku4Z(|=aI|FfU6ANl%v-pg~Icy-%a>|QP9b*ffBOy?h@ z5;0>6(jY->{lT}n5%h^oi#EE>HtS8?_FB%~eO?s}rwKa>@0abSddJ0D^~NgU8=g8h zN!g=WFhObY=G#rxdy9o#nBB)1fwbSzJ^LeQ=5Y+*8i$mmhLA;mFzl3^Yrr$)n|EME z)v%0td>cJVHrqva!Ujf?(CA;=X}DYC=gDI z>D`ZEj&j+(RY#qGUB^3;BwLQfS-_~c!^-D2XJPW zPR6a5rqFY(mfTu+^crPSbO@fD%S8QcG#XbNT`9>8RpVViTUrJ(Th7@zI`(M(`2#nc zYgW-qfSO5AcB`YGepj{LZk3^1gB#BTzX&T#j~O^NKE5T3I?fH9=C@O`7;+;+|M27Er~yVZr2R(sv%LT@ohw%mFTr4QjJWA1y@*wY_i;vvkD zma%AN0+fq#l9c!qU62V4HT(EQJU_wmBbCUmhNGFGbo3G>=i-AY-f+DbH-{nSW6+Ev z1ER)B5sHX-u-K3+64)5kGyRXKXY$Wu#3AHWP?>QxqYdv>lX(Q&3o{MKqjtbw1QG_X zck5k9e>jAaphc_t&K_}?=`4pi3n(DNELiPY6naDTb zTK(QzlXJ_#QiG6X@{1aHYvngym-o@y6d}9SG$F5TwSxpJrP}{K(%AF(U;65q8orPG zxbj)7GH5iYw&QjX>^mWAImozwEUwhaX#6sQcv2-(+qt>@4*T_Bao-QewexHHNFZAB z^k#ayk}zLQQ0JzhV*TW&s6__hCS(td{2!{4wldABGN~~F?5m9fP{+=l)$3bz%d68_ z7>VDE-%hb#as~yrwB>78G3GdG`a1{z<0R{b5Wz7}v2EGN??w2-deuz0tQ2 zmU^3dh~+zN*)d!OG-+TDWuVjQi@v(d#Y*lhxk=B4?N&HoVg_VzM40^Qg0Rd%-M=R5 z_6?dgh~oWrYwe*WF(Bq3uscZ?%L4&Bu$p{sBsiiEyrwpeMg$`^s|cJ^!``HSS!rrh ze9jtZC=?bgouCP@<&jGAIhjMZ{u(Z(fBzG;}Zur}>9w;-_nC8$c%937v54P4_ z-=VE7y!+gmxGa<466N8CSf8yxR0VBQY%x)FjVvBMc&pYk4?pn~k9iFTz!?JcueyqR z8|EIXJQ`pq27$px#~dldb8H$l@-V7lziY{Rqtut4NYTg8_`-`?SioZFk~|c`H^qyS zqPCq`%P)wq#jL*jy#BlRqv~uetR-;@2{bC-GB2aOnB*#bS_4#(uOv}T$yQ1e@^QJw zF1kNqi=qT3>34$JpW8aC0oH%t+BNcPlu^84j#O;J?EQZ1LG@@*Dvf`H??1GJ zk-|i-37vVlT1psY2}3X1GF)bFkY`ez36?6NI|ngdGgxEZ4B$0WH^~ zXaZ0zR);4t1!OGT3q^rqunyU2QsW1;0gDzDI;GdX99O3FF<_xxz}^*04T;NQq0w5$ z3t%-VIx~_NX09*}@ML-@yUG8(zH4CXmzYz-*3Ucv7e(tB$k7n6Wm(wh(?-5YqGLY% zt=&XNdvoDpbr({}k|e{RWPHrJU4A<~UP1f_e@MTH(yy<2~3iUP3dz?(%*;Y0kYlB0-W(|blC|&=ANYrbred1 zXlX)IJJuR4*Y!el1wXLtRK68)43okuAij2^YLV{S%i|pI zfJCH&%P?k~ctwPW3wd@i3e`mpnga&rHsI4Akyf}e&d==R>wCWBcezK};)CJ8S>&@a zDae_z!8$TE2&1gIS7+&IH!3zOyu(+}h&+*=2bM_|-o}Xmc&w6a=3J-B;f@J-1a=MX zw#{aXT*0+;)~dHJntV^_4ecF#9~X(t-g)mDQT*?M-k+4dM${&&1PyT6(J_Bj7yyU1 znI^%E-Xr_?oH3YD^;obBGI0jUhJ+moFsUbqjCi7k3YlS(%xlZO(S_P1#`L0m~1eal2gcFBG zrf>xvs$(b?ZvAgZdUM!Pt)(1FaSMpILzbk()y}NEGp+#EX&yoxNebhp^>}l5My0KR zU!I{S^|axGDjXsdYMcXuID-@lPTN+4a}`1AttZ}X1ewePN|&Rinv!U;aKCH4{z>p$ z)E2_?P`BnMZaY2)RqG7Apq~CRg_T~0(CXQ>GjmMSaFO0+%%ApbRIJqK(5!bN!m2%5 z<^E>U;AhkKwO}z3mUBV2d`!1Ck5)G+vUQGWn%NOhkm-5osj~=wbSGWdY>J6N`htOL*4Op< zKWARgU;Xcf{!{o|KyDEp+WdBU|F6ga#pjO2*>;$)F=IH?bVy46_aAa9;DL2!N>~x~ z?sR%8it!&KzUPrq|y*--NPW2!TrPeF()IWZK*yH}I{HrXfSu>x+J?uv>HQh^2K>@KLX`cikLa}kP3 zt4Tj-ux6O7y1>Um_-h(uRwU3z_fU@n@? zh1x6MQNC&#+9M?^0zvdfYxP7U0gP7N`sRlQx-l*3{g_O_6_jh1YC)IIv*!)mn3?JTGoqv`H3~y0!oC;0c%nHd&{+9(Ha7JgE+?TbcEtY79mW+8B;Ja%WqC9+aY zsd55ag{RvEW+Nj4#o%#7yX|UHL4Uv}s+i?wVD;Gr$3Z{})mkqsFv*zG4~!_eCXTM| zkIW~1Gkp6OmQIa0FhQcA=<{{Pw#LSP`53s4`Ij4jT?-x1M2%vaZfZg7ysgQvsw0hI zd8xr%*mUZ@r4Duus}B=ZjVnjBC2nHV7qIgG)daSP0s6D7{#v{o~mqvR5Pqgz9BLIft9O95vAkhmplq|M$zrh z;9=J5+HTAqYVOD@d<475dc0%eA>x>rab0vzGnC9Jl~NFp2ql@A=uI0ayJKrh^B3mn zIa{sxT+QIqtNgE<#P2l>hFp>PuMBP;y(o3Y`R^nC&`GIe5`hJCg8C*7Zj%_PEDe9l zsOin++S&W`j(w81;Q#!3l>afnb1Fll zd)T`zq}tM55Q9f?gF2Ie_5J-Lc)$ntEb(X;C|R$-bL)tIDYDgrskRS;O9L~_=Tk#F zp~|P0R9v&R(*#gk&dR&42$r-CuLF{?PK?a0Go|&O`ewnSa8I6C#oX5R@D4dvJBIT@ ziL&3RJgM#%-i0>^0#1+XIcI*%Ndzhco&x|Zt4HCX&k8be>iz8?cIG?-{d^%Ny$ky+NQMbI}I}ylyJ9NG_ z-oM5tCzfqn%$?_dX>2JBBZ!c606XXT@xjo&;4Y9`7k-8N`dhxExoCkG%_gHW;vNuK z=OcHh6U`TGWD-CTA305}tv6<^gE)0rMnX;e7IXK+Uusx&3j(jsA6_R#n5yo@Gu@-t>+o^}KI)-CGwb0J`u#=elT~mm+sW9=QPEnA$V;+TwUwA7Us)D~ zcK?k~JU`oBMd0t8uJSU3uhqrzL)3a}OtM_GqmSD~8ux}mK5Tdg-b0A$#k}gWxrKS! zi_I4cfx@C*zAB`5(I%K7A;~aEe~|X$xc8tS7Jfd$SDd`MgWGff*t}?-2bEe5Jrlvs z&LxbX;u*|^?6NoHE7g|j7G}$a&*oq!?hWP8E<{f?9g(M5z6w$8(c(M4xb8dhj-j}4 z_yjcsmvpgL|NASd{8c1excl|trq0|&(PduidDqfxBInw}Ky@BLmM0eVz~cZmuZ+=R zsSl~*AmQ-hWP!A`YG{%q$g<=}p!I$n9US_7)L-8tCcnaOIZ8LVUMcZKobCegHJgE24v7`(Wzq%t=&g5W zv;|kM<3$;xydzX7jr;!D-7TX8ttQJ6Aqj=G(jl*9=RYa*cwg z6lT6{Q4Pg<=5sgi-2B!=!Csv5%w_538rJQO4Va~bV4(xj zW$eg_`xi)1dp_qLAT#kop=dSV*{uF#Zxu=~2X|h%{#ql{c4QU;JQ%LuoZF?{%2`E) z(KjEzt~i-&wgL)9(7W`&CH=T#kdJ%5&8{f;DOC(3_R3(*sMp~(|L(QWkDbUhGV*2W6Gq_V5QXhm6g zc9CP{%+tztWEsJg@d!tgx22|9gO5?fbgbh=K#cnir55igU@SkzQ|*`z;uTx)KRh8t&J_u15GW_*+VIOoqNBt`?Gi(B#H$V$h&h@}^yXTS$lkAi zV}U9vE!MJ^bgW61m&j}0Z0qYzde|ue-6Ys8%5?K>EhvObHN$bdbXuNxeJNu%^%`-N z>eyf^Q110Q$7)_y5Su z;%l*Pbeb=tfw90xBFLHH22z|9(KX^ppF^cuY_f7Z5hL1Kd~JG^B^&BZ&g}_|kuts_ zvXwax=C5@Q9|!!Yt|Xt7u|8*buZvw*hDVq&cSL2j#Zuw~F1k%^^;Z14r+2+#FUX|W z^Qrg__PeZHIbtyTV3P727K{lYYwroF@QmHjIb|GN@#K#~Shtj^6#~A0@L_NsAVMdG zrX2>yR8Lbh3isVjF}+hJq>wAP~PfYI~km(HU-VFz>u|zYQ6(Esa)X! zeR&Nz41(x!PAPwXHbl)4YH5#iAKlYvhE0DYpY1IGjB3NK!|cPM!VRj=Mv_gbTh>&)MWi68+qhXEZ7KuV$A9YZ1f_s zIX_!ss?Y*ft)5RkBA#KZ7EWoAQSxl2CJ%S&xo#oIhz+H;F_w={Eb(_S7h|NWcUVqqEBw`EACJZS}(JYProxBWoxNg^(Gc%@yZ zoJtH1BrkGV0_5I{N)*(J?2X5>Ginyj2~CUOcX4Y+vh7a{a+N!@V$dsO9mJUc?;XH`>VA9LN~^x15iUzTg8n@oX~#CF?D0i&R&D;3 zSp|5a3ywN=G!R`4Qg5K^I=3TP**HiE-gDB4om2Ddc>3e;0kx^ z#`#f7HHn$c+6#kmzx9Rm>NLv6Nl=WIqAQ4~xc1ZWazth^sof!6v&`U4jRz=*cd_#X z_Nf~21ZY;+G;=L1Te^AMjSGD$ICv;_&kbd_S_^;Ld=5};Q_S0ZbvFu835w-Ks$PH7 zsINT$woY;B^d`=AM-F&bT-mguk(&%Tr7Hmx<0qwNfrjrmhR+y^fUzFTd%?74v(AX2 zE|ZHw-aQdBAL6x%bcsc<3B=7YQO!`~$+oCs$a*ecC|O(x+608KII)h4EnRmp5xV{Z z%Ld(HbVxn3vJ4kRnz5^E>X zuln%2ub6d&sZ)UW?OzaW(V8l)5GcXmwjx)qqZ|i;Dy51%5n5lj%cyomDkSKibT*sXIsW{1P!kTT2cjwbU5~f{odSY2h zqNJ=8AoK*}*AwqspSe`A95rTwiYiDeXI8(vxr~Ru*@THB4{&-29-Fe8uY^KSi+(3B zQC%qqxF6#aJyMHo8T^>(=Y17pA=k%Xs-{^$o&6S(Xpj?W?y)m)&(a+%HL^@p=;7!A zI$8VJ>b4$elZA%UC@Fw@k?xt&#A=vOZh373V0Ek1UTobOS2?|zYj{B#nKtODB^Tkq zE%*ffqc1ZH3#{&a$Sc{oCuO=*`-i|FS+?_qkK5$g7sjkkL9zkxQq$iE&^iF8jr{Ep#c|EY_Mz%+@O-97k z<{e~bYrk^vz}17b0IRvRAltz1xleCsbm=p>Uf;i4zVrDhy#7B4l*lhm(D0qf`z}7# zX;yaCVFru0G4ne`RThoCljcWea7c77$`mGpW*m(q2gX*uR;P(*7mr1R5FMz;bza5M~_AH}9#hv!xV-;5{VWC-02``BkEEu)UZbE1y$fRBiIbiOT z9q*P|qhW0xWC`Edf<*sN*L61L0~}2CBWYLoI28Hq`a0#_+OUAcIRRbrcu5Q7&-r6RmuG@tktqet^%2M%q#`eLY@lgwK$JNXd>14NF!R`pP z4sL^^(IYXY3{j|>X#VBcmCQ_TQUfA)!OtY`iMOrLQ(+RR(b{KRw`;#2Af$XN=zv5w z`xkdlYZ`3&_?W-ylif)Vj#DL!C&y`z5r4W2dkx9e;Rluz>j*kj2C&2sXmEPlE0e>( ztkV+TTgxpmB`t$nrTbYPp};NPw=8?=rW@8J4@mMmf-_oU|I>23#64e~%MM_KP!$hY z%tIv_&vn>nwc>UF*R!j^$I14n_P8HChxwXC3QsFux4*vrZ#q5qs|ofx6!r`gd>JmF zRbD)x>>_58)+=5w(rv3{b{VL1ic4#a>5Uy=1jAOCD^YLD0^D@5Rx3-alL*tg0#g2V z$pW|`{l@$lT&n@KV7V-j;WAnzGY8Wnae(p`>K}f6(LE z{gj0oqzY$GD!~~y02}s!c(4@E@DxQD^yWtHR|hNeCST9eB?I0{=lp=RhWHDCn58Ay z^ZOnkY}>qj%(z1PcM>I*n3kl=aV6;*COOQ+@%u6-04rM1Q2<0shgGk*O8lkWn*1nh zt3G(W3i}xAeC^m|-b&DcI(oTpM|g#;&8ltLz8C7`kzzBEHJI)6`J0d12gkr+y};q_ z#*rf{$)Ya9wrXJBU;O?xO#{Eu6~R!d4`;SuQHBmJLvLUo5dVF8`Fz6#@VwPsVF9& zqH~ps2LrpbolqWbOh#+sR;~#V9Aq-a6tH9|tj&JJ`po{#dpA0<*dm#8@-htJ(QL~t zpmu=}30eoRe3@MQ1`E0i+LGvKRKC``{)4L~gX1oe82R{Tbe4->x6!M}G>fTB8Ag5* z1={<}GN6GkRgkBdnUP^7jlI~`bstiHP40*}JVh{Dh=FYDIyc}vvsM4=W{`{Ia(1MYbgv-O?`w1Z2BHc7(}ZNL1D<$3;st^2ikwuoI|upf)=TXM)ooy zdWI(inpE5d0hfHHwI>#X(RK!O7SDoxw4ZFo?|br1G`6edQs2pb@(MEmqqbE4ikQ|cv#=O_QkWrN71YMM|Z9b zqCBuE;iNQO6eIbC_YnWD+BMq>}4{G(`Q&O`wuns=(pzQvU zjtZm;LInRw^6DrIr5+!2qbZ%1LOg zm=rh{!f9TvS+2NrCO=&vtqgTk2xe?+=?~d=NW3#z@s&Z&KZSh!x;Ze+Wq0VtlI`v1Bf8T9hEr|6~ ze~Fqi#U%)T>4j6IHA|qSVMC0ApfdEUSLk>u#+ER2#)wj_(HiI-tz5rHdb^W`D&)wb zx*al!d*YTFRvF<(2C4HVAtghAf=M2iveEwyG@RRLykdy0ar+FDvvj&{*m-`sCs*LXUmls9(1IE`77#)dIpP4Fw7OO!p*U2 zslZmqn^%_NQe+%HH!07D3rL=t9A2dkEWKjCiIF_*+`tLaI%0~ev*9rRi*~F9Zt*su zpuzy7rUOihOSd7V4D<6h9!k=oo530oes6&)ac+a^Xj-!D#@${~t_|JQe0(^&-MsU9 zCD^>m{_g=YHt^)NbN5vPsFKv_lqnI(mhCLtX!ILA#JjX*Fqz%s*vccF8*UU~96iq| z9kp}YyGRRJv2*oRV6K%ifv9)BqOR}=;{(Q*#w z8DcO^GLlYrYp6)36Al_Q+M_<=Y)V_L7hJBc3(jVcZrIQmp&%8VCbGn1l7vzgOezVi zuJH_48sSFXpk-$MflVP-YIY`S=}$ghtbr&d&*S0_OFs9zx5FP6B=+dUb2@k`gc=VW zfPl?d#azXwUyz~%qZTQpX2{M^HYbAAf=Ujxbm3xU2$%|DGY=Q5rD3xhD$zZYnQ$z0xdGHFsGnII#Rj379Fx>Y(QvGIIck=4(d^3@=-)qG@ct&8=l4J z{h0?bBbCwZcqa4wE|GZn(cQVnE;Rpf(7fi$!N77a6a<&_jx#AGD$%3rfjfqZya3L9>Mfb81MUym5_nr>^>MF4^vRTCKI=|G%;!^Z>Fp|!S@wz4*y6zi4QO4e zmb_vdJpk^&$}s9s=+Tr6-8rLv%3wk&9fzPI7u<8|WVf-O!@x`Av%=#3v7wOYC3Nl< z_^y9uTBOPTsVM8idilr@kDno?0OkTLAxcDAZ!)<@#B)lmG4dEJgAvo}>6NR8;;0<^ z!wt-3PLG2H~4Oe zJ0enM?6-b+>|%z&Nu?T(%-T{Y_MQ9L&H!|eCvv6ct3dL5IFM{o6>WcYotSiVl*3&7 z_kR>?N$q6L0V#ym&}R80_qwtF6=%~4D7_3drz6NA9}G%%>@HB*>el;5 z9G?m<6$V}^ejpaT-+MgFDG@=&P?hZ5{VHiaNq-=nzAE%Ha+1Wt3L^DJo1YZLkPATD z!OUePh{4<9?Mk6S-hb;Ve` zCLop*O`FUcc@k;EX#^9AQt;KBuG5*2<%72dXF*vswQBj zwkL&bE!BC-Jcc#QmMn#;rM|^rDL1?i11VbcfL+U5U26b$A+G;2U#k}lR=@cm7U%2+!D#iys-4-(aCBOthicb z*fHqcQCn+IJ(1Z=@|m{T{@-uiUyK0f%xd0|`z~0JUO<)P;O=WuG_zOlerZYm6*V1C zNbw;31bm(sL*0xJrVhh)Tzb7vhr@i?fFqF zZq`wiGPM~AE@hTJrXkO1&MeBQR^XO7dxL=sn@Fyb7rKE3sGcK8k@PlOwC*0HPnQlu{7AnBe&vJFx-{8dxK5!$&$&!&qVVIu04g0^4VzEH88g>URpi zl>I$FypRstf4uCAs%j1l4ITSOUCaGio_!uj{exc(ENS4YJ8^XQI&+v!1&G6Sszg)K z%YW>>ZeO?7MS-s8s?w8iVCM{4C)ui$uX?4 zuCzsnsms#Ns@HK%2YA~Q+Yy{9eC2!U1W9q%w`$9LUQ%= zM^Ks;PsvrPle;PkD*_joy6K~d9U=@ zi1Gl!rGi>5f~~)r#m5Q6uFz@cULDp0GFKDAm|2nV13=(3rWDC%(}BOrW+gX?AlO|A zQo%iL$GN&Ix|2wjx{8Ti^-LvS4+$9Q2YnnFyVX14aK zoPJJrQMW|1qnT3ZRS>8MaFurWX5a(lI|jatUl+vkzDL0%O_whgo4X1TiBQ^JC9Scn zMmbROPf5>#!tsqn23_`@EFeMz;BmY$}AkLDI5;qh*(xS_QS|}tertf2_l35 zm}I-_Z&5q2M>dd0Y+q_7aS&>J%I(P)iy9ed52F^^E;8>7zD~y>%>^w0lht+Mkc$>` z%>$jR%Tc9~t~C5@;a}=0pMw>CRJHVOvAQRsceQHFGuBcIusBI7iWk#aQKtepR7agY zK+`i517>xS6?xZnr>d>PnL4FqNVpZpyvBX%wlc@sgCDZRa}SFdl^LldMRCfZ`%4k7 z` z-swVaI=8f)_NW21#i#3@q#2vq?ty$f1BTsJ%p!0KVj>O)?-0-VKxk$J%wK@S^6sPdmV1R2GyR zi5v#%5^7PC?whCgNDNRy*Z1V@AO1tT$R{-STe^`Pt4xoIo!rkfi{hlK{KA&_g5icJ z9=b*koff{Onn<3KX1mG`O=BBPrhh5*EUb^8x15o!t8N;9^^gq3Wkg#;#RmvN7=Tl} zoB{Y|Qe#eega0ANxh);wj2ZM&=MnI;Q0GgBSoI5R;{Nyp4?P!$`*n%=Bd&thW61Ih zagz6e!-b^k;G(LL-;Q;#0FM3-$aC@lpVIr-*W&zUKV#uoNsHjT#EXd4lr1ta+8Zh!`4UZ~LpM37?w*HAfBcYWpg2m%s!6RM~ZGv~Z_cx7Ty7I36cc5`1; zRkFyFV1u?Lg|o>ypSL6BR?>QKui4ib8Zo8BH^@3Y={H8X2+Wt*p!1o_NG_tk3x}%g zP%QTw4*u0csJ!)Pv}-{f5v+w4TG6}xQiT?H9pr-g8B6&PV37I;>zv`Ys=H><^WCX? zHoZ;X_`j!1fxGavZQ(Zp#1ZLKlQ%tT&~v#Y*oTFN4x!@!9_hao4Ec|$e{)!fx#Xm|_fZ7)pnw!2bNI%=je+b0L>Bl#f294>u zqRP(uXX+Do&?dN=8H`)B7)WZ=x=5)84= zlqNRL*~pia_;?13z#{;@>C0+gp1+W0T6pP|^*fjK4Fm|W#^O5fyj&~OZ}FOad6zl$ zs>ygeep~)EiB*BI6e)Yd06k(Wv+u?*aKcr`-M)?VK=64iO#FX|X~|Ptk>vNI%A0Kc zC>@{b155v&ONIeVF7p06Bnh^@F0PFKQhwxGG$)RIO+1yo7hD0{gclz!xj=Z2f1-d3aTPAw zmUg$3XU?;T!`??@fPHBog*A`#AIksJouuk_lEl`z3_23FifhONscpBI_MTl=8W9F~ zhGaWb!3~=(i!hw=x3x7jHWsn3hbiEe@A@cV6HXhy?VvhYWCr)}Ff6{m8EpK}$Hjh|kU{ZLW7k&_@6m)|okR)ytVC&f={ z`ra(k*_dq{N#0LWhpSAuDdDGLl7>gWS9eg7;x&&za(~OtA%>S==kQ^bn!NF1W|05@ zH4%FdBEOb245C1!Xpaas=}+b3=AGD?BNb!p@+XGUnA-w@GWP;RD*&jC zPZxwiC@!RGkK-hQ;kvYw6DiaS-s9cTH8}+E8wRQV7hS7rO zF%EEvcQ%#65IySn;zr61o=HXbF_iRbHh`AETvP!x`8*)xdGXb&W+GCHiJh-!0;E0!24oq+ZbYVbu6dhIjQ?RYOwMwl(~|I6X189=I~0R+cVe49y>dMGnOrZArP&Pf5Zzr>ig5mb>uC&R3Q2PPzv-5>hn#rngPA+mr zPx*Q%eT*e)CCcb`{#6h3+g*pCNqP0?c*&bGsn34GiXsIeIWrT-4ICF`i zUPEf0T>VIxGvlKcN*w@9T36~{!}pc-CV*u(_7^8Bd=laB{um1xFyj}=(lUUth?J>ztgOI@8*YH?2O^oIBC zP7PVC)vw4Uf|7om5)w(?UWelXZ(BSU-Zb$syM~5TxJn`PJ1iIozScp{Hhv@X1m)b$ z;rZ^6X8cj~b;2K-rAUikVnn9vh}J2y9I>sy-DoG?hvy&ZpRI(kP_2j{$pyWGH>Ys} zzexcGa?3+Kvrj%28ZdM4c$ljjV9@XNneh-53=H*BXssYf1!nc1nalCx8ip--uN=2SMsMekWqr+b6=I5J|>h>A{FY>S9)JRZyascDd69~ zXl|4G-v`;~dP7cjW3}!tzJ5a?iN5F`1{^X6)FJkgtMYXFu{4QDmS3~}*;Jz(hQf4Z z+1OBoiuq?}i*rh5UWe1>h4bz2#Ab%ve(>&Sz6Q0FSXSj?iR!lSGt8Ls8$GK;u8w?V zGYK3w;z>eAn%O~z@aKQhcEB|@4q>eNQnTqwRpClUBjBV=_N~W3puDv7Iy5lqNpcfX z0nXk&FUX7)X=y~oOVT~2D}1KzDel}e!{0M{%B9QQm(Fn->S0CdA;ov9x(LmPfB?y) z$i-TBLlQoCPic*E4e)|xsVpqdtD^jaKtFYz{-R>FMokV9DdBd>zhsk>+AVD3F6aH0 z2}6Ic<|Ny`@^=C1s2or&`PW&2)YQ~>!!wtHzM1{v0~q_}SiY-&m-k973!kAMnwotE zogqL%Ph>%**WQ<07;9G?&ciXDd;;dGK^@3+8llJRl2rQ0H9iId?c+0MXTf+ek)>jD zuTvOkR?fJz$YE2&<`X-F9AF_+s08l>)6EkE#$g>2BWYG=+hV|m2msh7t60%BT;C5? zom6IC+`cX}QdYBMk*U8+1b?Jr5+O|Qspfc1Zi`Y91{eogi*P5?XzictOo8!HIl&@? zXCeU5!toT*n0jRWjT_r?SET3n-E6U@oju5YQoy-S=xWH{ zI7$BcHqH)Lt9ns^3rQ%`*1pPG?v_)xt;uM;gZ4x+d1N&6jTPBvO?Ij}2-9a^X(#np zo@1$m0>dCtYU$=n)@Elg(be;P!v9QC*RpT~*hAgeuF@hUzezInjQJ3SCp}u-Gpy3+3#Awgo0CO? zKG878XoC1TZ(FWv;WT4zVNt=#ZosmsS}@E< zBZ9|5-XGeRK1V)NNb?a)`4}t4P*LPiMC?)d6oG*3Ee;HdbWcLF6!TEM3WL1}NamhZ zVX_OoTeWKQiwoSy0Di$ValLG`&OV{hK1ug1v}130!|Uxo{`PO>xBkD0e;+4Mx|7d3%1wI_Og#&j3awKT zrRSQd%pWSSLLqWK~lW*EjB;j;HJBS4)2XQd+f0%Y)P;5tPj9gR2VwLmWW2L=3+!Iu{9Q3_7?Mv zP&z3^*LX%)Od&9T{P8Ea&_Uyc^j&Fc+Gc8XrV`fIH|3OW`)vC#+h`C>0W6_ea)4s3 zq*}D4vyq!R3JDr>4O^U_X9^d$2k8V{4}|U4uU)rWw{8^xGE#Q2N%;-p;b}A~jnp2+ zba@r%fXZkT4Rq^3Mc-N4ikYIbH>yVMUVCg$Jx0^4Ax32bxnc$I8_zHKUlHczwUu<8vYC&6|(YL{qJB#25mk z>boQY1v@xfuh`URU{7DXYTZ8At&uevHCvdUrJf49sZOuU`%#{rA}ci-4eaK6%li8x z8{!gq%ZsX9O-rqvsLlqX4M2tJ<~|y%!zLx!;}j{)*S-FA_M5-;pN@hBo)@pZ6M%D^ zuQ|$1c@a!yU@8HCB3vsh1P%z$4^rcYc}5-fAY$PQU^N`=TdUP#q|1ez(VUupauH1% zf9_oE@Fw*V#G<9etX!^Iy*@)-4PJ%l2*-Z#WiPSM`1Cj1U;gD^*$4mZFRa_{*!}mv zgh`C6SFe*T(WF(sumDV2K0PIg&D|;ZIDeir^Ywb&_?IuEz6dM5w{Q0}s`jb(p0sMU zWY=0fyWW|!^}bnmAAPP0f1X%G5)dMA0R7Cqu5lUb&d%zb)}Nc)T=f(58V{fol{I9;Iq)b3(w%`OIK2>9pCyA zn^tf){ujS2jKN?4g1vyeEKDYc6zN8@*P@4=bS2v40H(h5In+#r0G;Cf#5NY9V9&&* zHpgLM8>~n^elyG@sBGQ_FO zKN?p%>ja?0>P+1?u~HHj_xrLZ!OsLz(d=&Yd}J z>+9=G%OU-bch{>Wn{Sk9nXtXxu>p)g6H}}-A`59;MuGRh3SnV>K^4u@(`2D<+`MJ& zZd>ae&e3nu>s}9L>P0a1qGswSaPTf)o2U75FcnmLT9l6rreXm)056iLKnr-M-?dh= zQ(HDN6O-u~!1Aq8O z_QaEyD0E+5UbNGv&e+!WE~8{EO1DEIZM|BsL0hL3iMy6ZL_D^Eann-7tp!@Z0Q7pJ zh9;e5Mq+K~q(+lmco?ZW8-&dz(kQ%M{$GMsMaL1u#reiI;0VF94P5jx^GWFy6rlzi zK``Y&Hv5DAnb<3_1AHD?BuqAffOTM_;hwEsy~-$ecX!84`X&f;mX?>8vb%NjhIMtifbWnyc9h-8m)3d3`l9fwSw!Xe$ zeYCS7SS&WE|Bt=*evw~$Kv9kkAVB~G3BtQ>ba#1^S?PV|#yR)BFS8n?0v+hVDneCM zsnOM0X}<5h`_4W0+;jaAd4oJg_r}{%*k>^#{U zst1uyMFVafSkfWuN_hN}CBEqI&Qy}xMS`hz#~4e#0Wy;OCTL2hlSqaM3D&tDc)txy zO(g;j98BWWB&qU0n{?qi=EQ*ludp;D-^1D}fpx9vK*ORn&o0KbV0(^-yt+L(UqI!- zxWGMiUcCCrOvcUOqhlL&U#?O;4LENoCriubfH<{W8kX#q7L$|_HEE6&Vu_t=AS&`k zCBnlq@uIac)k$PykW8C4KR1innHh=Z32Mo}5!~gn9Mcl0Te#J-SR8%3gh5Hu4MUb4 z@#|uf?V~v3)Ub!jK~)}bjK$PA5qBBH-f3@;H5Ly z8AtleXi;_raad@(RjS0(}w;nfHp8S7`~jRVWF-SRtITB<4=a|PJ<~OxSSF% zF=QYLxRA>uOeRfe8pJU-SHdqp_9$L_@kRXPxu0TtyR5@MnFw(H;zjiPocY#|g2Lou z`GKx3(7F z$i2C!(4(JEmwgQMOlzp4BiO&N;S67om{f9o?(5kL$58m=%rbZ$Ms__2U=5f#W?(!< zv(Z4K-az%BqW@;5%NHo*a+od6;Gj}Lwbl?o;q_xyoN`(jIwafkI+3f>X7D8#IO7_e z%(7uxK{b&`SqpZTVrVjxfl3uDC5r8EpLYUhC#9?#vwX3Aj%_$(faqAj3E(nj(Cbqi zcPgK$&)-63>W{u^U@Fqs2nA0ugi$qV8ej?TyEQo}LHqUWh1k;pA~LH~Io(+WXr0Cc zbnm+79_i9Hwl}p;BX1;?_Kb=0WhD=w$UI8V;utCaCrh$z89JJ7h8#Qc)Kd(iy=Q6-}I7ITZQpdQGiQ{-KKspga zYcNK+ImBKshQ>HVK;W08BR_SFv{bP}o5Yv8(DZrzh#6zzjDhkN9FvYfVOVV$1MIH) zIstTwe>Avs$(7eLx@)RyE6_)Wc)rH;ezzo+&gA^!{u2wF&*AnvE~1#vqFQa>%G=ja zZ?x3F!9A7FXVGc5Wo2T*Zr_YC(Ytw2?^#@1pY}QUr|t&--*Aj>w+WV`QVH6cq%08} znKvBwW-gl$=;C|n4S2m`&ZO0K6uR+4KIt1d+Y;U@t__xgxn9^w*lV}2yGMqqYs^$E zh6f*f;7Bud)XjHOSm-@J_!kM#ebQ=e(~ht4dM9_tPQUo!xqLpr`@)K8BPK#x3x+Hg zRI62Gql_*x;`0Z&3#3lPVY}3|;5#H>TNcYrnn|aS%jF%S063E6Lk~ZQ)sx5Y z?eBgcZ@qCD?G^>JeU;44oIR)Pn1{R9Q*c9?rH<*ftmHsoWXzcYyo)4iD;7<}qu6yw zaiDQLL_D5Ezzo}U9+~FIjnhz&ou26KTi_?8y}4go#F~I9Ki^EbT6Ew}Uz15a;4mZM z9_-3S5u!T0h7R32W2~Ydx%Okv7|5PM?ebIC#Q_ZpPMPJhU7ABqDRM34^B8pd*xcTM zN^2}P$jCFP5~0?CXUM#M$CXG0rl_ZrE-oqa&SWB`cSjIL*24tAV`+A%ukc?}vh7HG zV^3?J%(tCKU}~y-XVjJHKdkf0bT{6V&|V`zyw{Zg{Z?tF{_raVQ-`~;y!OYzq=^kc?^*_YQ99(rXrqQ{roEzxqiFKQYRE-va?Y;A3-A?L*EaV#v%B9#u2&E&AQv5Cu9uBwSwj1Py5p#T5?AOJ~3 zK~(KV0F~niW+Q(vSK^-B%PIdUua|Ql)F&K_)1zS@omNW{1ZwWQp(vj>Oa#cJ5&~PT zW>*ZoY0xG)p4lL1VLPdpTW3bCt2u{jh=bn=Ybh0>K9*~ZU-v)w0KW0~Q8(XFneXs^ z|8M%Ye+o=Z4mMlV#=^KzKGluq%Rz4GPanTNoJ@f!@5CIS(P~+VPYjatuu&Pw>3CdC z#`GWtSfuICwAtGI8c z)^&0v027D%a)sAGxiI2NRTCD;E^Rc5g*`DYh>BMck>-bRIE`7<^6uCxU-NSZmE`D= z|BnG@&j#L@!Q1_HCBjIrX2F<@qF4^cZs_msxqAH`I<2M|9rgyecI`SE?Y6RN9&o&8 z6r@YzF&gQ)?3bNxgz^&|u%@RYn?Zl6WJtd)b5G~}(ED>fMbuYVImg=I?Z2i#$JCJH z$V$O8Q#XPsS9EqGFFwj~GVgsh-?L9Yi$4@Iir zyU|qk=iIP}MVM+DIm|xWo({ctlxs65V|ekli|F?I*xuR^U==In&NyphcWc^}`KV9y z2fJ_8mv(A6Lbubiks`9dV1g1yCYi+I;=B&Ua-}RLlb%5f3-d^&Gb;BB%R1fDVbG|t zkow{^(LJ6*N`6mGN~D$q-FS)kd)e3+A6}ioLnn)H5t=+#@E|Y7{Ih|E(<3lSMp}% zLR*W@M0Pxqwvf-q7?%nYIKH}qMx%yQCW%WIE-2Z1@#R<0sI^qG6_o;`VR*l`6Voh&%=FGE0{|`{1a+HQ`4l0L^77EIlPc zr(;MZkxpk63<#Q5k1yd@fAzEY!81?ec?OSzI#RI!cieFYD%Bbar5PlWDLH4WEt||n zpHt3lIOkAeTI)_S0M!#qWZgt$tl|h$DdY>(@#J(cNT;RWF(yjE?gp7C!IYit6CD)) z9(4n`zu2L~U_>2-jj*8jTcaAHR%YwC6MyJkLY*Ptgje#H&FQZ^P!WA@>=He|%n*?s zR-rOw>Xdv_fEOwI`{+BX=y~N09oY%MgL%3X8guNNuESuUfz1ciD(bZcdhG5Atc=H{ z!wlaXuKf^ayGHaG@?K(Q%$m}*7VxDRqcl6_RmFSA4nnR8T@$AdiWo&+iYbc+H;UO+ z1t*4uo*D9BR@{_t+jeCxZ-N@{cJPHqAGsxij-Mfz`pW;Q8y2;@>kR#;!Iak06qPt> zV3@2mzvgW5nFfyE(@x-AgbUOYt{%tk9>v6U0bxH6Qk5JT;2OB_Wj=oZdw@X@#K&ls zVyolI`3897u{dT5dCbqxX+6-di6vUDUy7DjS62l>3`|XREIPfPZlNPyy>FYB5=_MP z{&$_HlqUIM3~15>`V$)8aQVo3uB8!J&7jnHEp9-6+<_NI-PQ4;1H z=8t@)j!Zk>UnB+K7lNs&!Jm9n6c&n|@yyf>$(GL&qc-5Fp{th8PQGKYk-E3aWp;L% zpxWGxEn~H^_ayW7CAA2iDZ{Z#B^Ha~b1w=dm`Wx^!Sml9dhj0HfB!vr{O|q&*ETlM zs@5^?4shb+NhDHfWD7-b8hMalsn8BzX5ssleYBe`Ii<7n&pKUt2sm4cj@)TZKA%CF zhjuzGHj3}r>qu1okiV662m1Hxj|Eq~iVjS%9)1EmvqH9(tHs;{sJ;N5X;hpDUH8QI zjnmU*GQZGXFDf+H#S%F+q3Lx-IW2+@>y|y5HcDoR9M3}+ax#Bpph6Fp;sT&{AgljN z!cqb>REQp&(-O4(P}nS4(xW@uG_1xV5~BaC9>{$%+kS|_NfcZ z`4B~#9ey^qE@->J14N+JyU_cxk$Yah**uss@G|ihia@*rz7ZSY9_LvYUelmUX6h0A zn_Iw4J@cby@YOH>k$Za+mvtRXk}yfm8=q)piT zFhHl>mEMjllo!!UyzP9roFBcdOVd8MZ8a&;`S7XDO}>t1=fI$%7q+p`9ylytaoD~~;lq@7~PoprsXr8#`~BMlRH)!I#Ou-wC>N;50pqeyX7q0bixVSFod0H44pz8O#y4FK^OS!~UMF%ID zaLkll9gFSR4CAZYpDHgJBTdKjo;>i(=+_(0KKRgs_^;nQ8Ygp9=6fF@)h_~5Q5Tx; z=;DDi1*Uu$@eFp8A7%u!6FqCHy_0UM8LOu#!H zaD+l1U3R0e=HDA&K))AP7PPt^pO57`L3U7%?WQl| z9eVQIQ5n#WB;jE;R;iQ+Hihf;dIRk?$Nvm&&}!L1X!^Cdc@w#ktk=Ydp>oaz z`CL|AKL)0zT(aE}Hg&wYZbyGIPBb>Z2u%57(1TwE@@^Mj_@$5E5-{~N!PFo4a-nCH zJUihkpg!S<<~vT_xACA;SlY!COH!157@&%rFzo?KV>l@w9%6NM1)W|8wR%I{us(O< zVZ}pJjFSUXVgp=R$U0A*euv&c{Q){1CL^Y2;XNaeqA+=JaY_HSx4$c(Yd$U>j1|u`R%SqbBgeq-@dQ)GFHYQ79KiI}3v52&eG~BY zY7;V>PA^Ks-$CDL*33?U4}9>!2l4n3m^$j_dmpjX&t;}OGo)pGs6F0hAWgo!{z)Ou z&ioq~EC1NTIt?gDlj>FQRizf-YrChpn zo0VMJZOqKf=x2N_`fzP;ZOgxj*Yx0^f`$17j0R(LIJA_9sjlh7j=|>GS#TSVjis{t z5J#MyHY^>u>lDUqmLNMWWv=SnrwPJ5z+$5SficHU@H6qf$$w0OWfRqUmcfSI8mO9H zZXQf=+3^0(&CS`ryNULOFFXe~^_z#5^gj)z{Cf5yLA+}<%Y2{zIA`;{cg@t(KYDr! zOik%$T&YL9ZK`ynlFAfV|3&dbtdQGRe(s+)N7b?D)-6H!{NkLnGwi^hHis4{sVQ%cU4f_7`Wx8?KZjbUF1i)$?pGxUtyLwYMSN&Vk;W>$)|kx9@+~AeMo)h(Tt(n)lkrRNp0gSm$MB z!0A-LWtHw-n%La~@F@`L7&?nfV-$-yoLF5!yV1n<&YtcIflWG{Qu5er)Sc<7W1ZxN z?x!I*hjIceePEa7xze76X)A~FbFzMn_wEqSf?(~$Gsyw=Tps3X(PUo=j}ACyy~bMqLQ z4%?HVsq_bOvG^APs!3D=4k}f&TWvG4a~>j5X=qy8;04kC$)_0}1wFDP)~Q2ADwRwa zKpV%fJYU3TKl>^C_U@ zmguCq!{U5y9uQ6kVou2B1a9Z?;Z7>a<{ecoy_En|8@+a00BT6Toq;pxqtA?3s6elE z^2})@b7_3h%qtz2qUhOctSoK671cep$vkZ81~-`paLrnfUW_AM3%Cy{`#_H1YRxT01+FT|>f+pJVdW zmeKp?@rSQpu~Vf@cTAJjOJ`DO(V&y_4}DVQMu_;4FxF5p=_2z0%4_L3JC9(>p2swO zvLOfp%+Jqj-|g+~%jA`7fMA{QIYY^{-DCg4gUn=c@h$_TJfo7t?l(Q3A&iIkqv8DZKv?M*UWc})bmb#Qv~R_jM5 zkaFHl&hg!vRZM)(&uCs{Q8b+FlW6?*WW8C_hI0rLgXOxX)ihzRXqGDzP-U}At(2+z z@4Bt0^>v4nSkaMI`gG-Y=^<%NlFH~>Fv+1gE#qgu+d+e1$^lf}S86pqnDYKvDuHUi zrz`PU477pT1I1CsghV`0Oj5iYm;*jLHyLA<$WHsXOdS%Y*PRBAPGIj@S*^>cfI6}0 z03a~+H%DOVsLc1C!|}U+0$=7cmchb?`%eoZQ;XFHbMH#4jUN5`Wcs>4c&EYBBwHeW z7~!B?6ALk-qc>kV($hE!UqNJYK=>_nD07Jp2@0m|n_e)ca{$htI*yNj{KNR}51+zw zKY3ZSJ_BKbzDI?EJM5YH0*z)J$y7$)DjU$byHJ!iDxFFz*sH9;@|zoz;quFgj>VZg zsu(BGMoPPfe!GQUn=DjUW_&yp)PclrSH{zIASessD#v}~k&h#uPT}(9EBN?FKZ+kc z^^^{X>l+*R=tn++mtT1m$BrGt`q~<@*)(QmOIY9BMlN5l!=_f1z?aXtv9X3~t%}<& z-R4*t0#B9z&6S!)ryHA_SXn)#vJ1Ut&YeGxo$YOGtgX2+j|pyBLK3?sP~{9mSwfJG z#EQFX2uwZm zG&NISiw?_a{mt~wj*e?rDnG>jPCd{cN{5<6A|}9>wv5o>eaL6C0wC1QkU=m>jxSlc za*=DtH-=?0Alh_g2JpBZcyM;q#b@jmfdLQlW6Q?`gvf#_A{%3N zXTTJLqUf!4V^^s`q%gc%t?PLSTBzyczNag8ac)LQ2fG1d0S7V<#f;HF(waA15!8X5 z38b_OMm?ud>|XqD?P_Ly;4Dy>fJo!W?lJ=zQEAY#pN_WW^N*aQ&|N_*M|%4MQLgsd zN><05T4!2FPPIHF4%P1wVp;iIAj_)&T-oc8{?CDN_sR4Jl||}m{+`Hd$f%x0xKlfRwj&F_7fPSXp*;XKIc%8mpioD?MjL)Ez*oHlgU|U zUa^35*7;Sbd&yji)xG6)6;q`=%UIdPM^Pk2tZnq${B98uAkOYW_j?3T)*WfQ9Cbe4 zl#W1-0PcYgd;o(nu(`E~+sgQ#gu zh4zPI=H0?DD|lLFY?R{yC++i2#IWr6yxbe96(+jFH^V*|8~01jnu<<8dr4Ez1sp z<3;r8bl|20gl6Yv)aAFZw1gNzHDW4Hvu&TH34$M4+7F(7c+WTz#pVm7$%L;cxbeQ|d$p0RWw3lOH zOn`yrl>!(V?B3Nb4pV+CjCz$eFM7EJIV~yjR6{v$+Oa2G>1|41QT(-=?i&TjR}q#YG@l0 zv!&qUH}*qK}4h+lBVY49CxyP(YHz!(mdp=1b|#O&N0X6I%#RF~ER0tnH3EBD&oBg#IwF?cj4(_6)bIsrWwP{)CF!)J)nHh!K>FQ*k}O*I=Ndlg2x*BpWHW}ai|hXhhknDb$0vc(0^-SAW@z$j^PyT z&qK!gqYYTGqcWRCHkZ?kJ~39xk{wGWQ0;`q&f|asPOAq8sMqQmkW4Vg&u3y}Kg%z! znQ8ePN7eY1=k!ohv(5Y(HDKY2&Qsvz5L-3X3F*O%F)<@Kpc72}<}CtKfB2O@vW`dx z_Uv^`hcwL+=|J)C*BQ)C1H^X#LkY;O#ATns>w~Q0jcc9zNN(oT0y^=&=@5;9^3L8` zNB-OGC6myYD>t=-8lcO4?ifRUo@^>D&EC%5t_{Ox30(~efk1^==0u1rhuUV-n46s! z04I}428E?ZS&q1QfAqp4d(8LN=}_=aOM|Y;Pr{x~Qzn*OYuIMKiDz}zB|6aQBh~L> zMDXQoAGlYID;lf(9tPB2(eo@O;6p~1;EiScY(9%-hgKhf^o&=oT)|y;-zBXe8MyQ3 z&tYSIO~3cn+gCJx>EVYzgsWHI#?sOvu3ulrxpNn=zOkle6bivFUc9IhKg;seY4US1 zkq~J0jWXpGx4 zb6f*eWYQ;y-ZPRaiu!qsF3xeiCPLoZ&|s(Yi860I1LA&dndz(Zsd9TO+MAA*@(n%_ zkec#^Ge{T10}nlPG@I|pXX@Ppp>&goEBnDyf!d|7}Z zXk~1Eg1Z4nu{7+)Yq!v8)-Y~$5RCdr5*Wos_ARXlkc`KW4LPurT}9MJQS2TnYvVU9 z9Wvg5P_tkk*O_7n#Xg-c^y@wZ`dmE4cYy&%kEJiHV@sJC~ zNXLL|5JNIH#JEqi)koZAlx-Sx_J^pp`>3=BsC5Xg2n8+3%cIBvNU~@IR|HG4smSG! z&FAHJ!zKWg9vry#Wk6%E>^{=6f__yj|1iMwAm)7))5U9<$skE^-5&@*OSd8LVS{E( zG;IgZWX{|~mtmQ=pN$t4)%4o_F!N;xcJr~!cPqe@Ogq2!N1jiMwz&sWKaZKxesOx3 zUj(KMctP42+t)^N8ECU^L9;LL-FSAW*%%>ftngrpe-Voi&53i@Ct@bdQ%p@3?9|hn zvi9|vLQy5(oxL3~U>a;rp|X-3JH&O5+-y<-$v%Q0@ z%}qCoiU|wvft4@$F=;iRa=To`4b(CdQhcSxP?H&~vvy*OL2&6i4!w!6(<`z2GBiyi z<07@56#R>A^Z?qeP}@tqynax!v0F+KLs~B+%{V(dYsV)H-ajgGR9CIkKo?i4 z3C`_x>^|G5C7X3<@B6+79>Aaf2zGcR0}@?F|7)CxQB5(`q2+#X10L8_{M)lwcM1Hls{)VfQLhvj3ZYpYPL)O8tdB~+)H4m(N!39x>?6evx~%h$b=kL3^aQ~9JGh1w0mgu z2k4RQ6R4tByOl+hNxPYR27*|w$qQWZ+L*VLnM=yL!ijImW-x$K6T=QgvLMzKMh%St zD+-qRcLFVbdy>ikmCuMxYvBdFe%_oHr1)_){Jhf62vs<9Pj?{LY`$9qrk;7`S^Uvg z{?N_{&8C~MNK<5h&v+&poQSD?X9%2VnP@vn^H0wJ`|6ObZ61_%9o(?zDNB^;!_GX2 zCS8Qldvu*{)`m}JidrS}0g~zDIEID!c{y3{?eCfH&dp#Hs8X59*{8YkFah@B;(|Qk zR#sPaZ|R`lBMZt-K?>Zv#(wD?Ire(eDr4-S%2s4n_}%MZNKKF|8ODgSRLevw;@a)A zd2LfBo58Pt;q$nB{kq~2JAyA>xPb3H@k7iI?4@(MU0?tJAOJ~3K~$2OF}S_6EyK&D zdv<%hiTjGuQ& zih)AkEaGFY2U}63^7q(n4Mq~Lm*Vf-cmMtP&wu{sH-iQKSv>ar1WNDbwQlC39D%9d z{e6}Bd}LPem>`^p=8v4UCz8l1apXj}?l+{L#b=w-HmL7dCYa((J{wPA8MW`uVnFrU z8G4?m1i%*hgpCprMa}G*CVSlunyn^!ovwvlwcQg;aW-3sPd@rF1-ZZY`ZqL>kHLU! zg|tJX5ehR!lxAn7)fllO&08GEMc8Wq9B~}^I_ z!!ec%A>{1cA8ES=+h^ImXNoN!q@#|B9Q^$%}DTXeWL-bl>{LS~* z@qvDf9qY_5fOgraLjm`jOhNwVpUWNIp3|F$T37 z%@1u|_!7k}1yfElCHyf3rd*}%P<)#%1x~i@4Z5$W6z9a%GFG)xj@Fhl`QbhCI!2%I zQ@i5*<)Tuf8(R|Lay#iFJkGz`h#!`Q*l=OZ6}}`++XHs^RcdC5z;|H`kaNA4L%K`e zVlm{4MVvTs0+~VyNqVJ?#%Pi8>h;wj>$N=7Wv7VgP|N&4z-dT9eXpbU6Ccum*It`< zo%_}rLhMkt!k&v+v`fik@Ttch!)uo>E9q+2o0usTv9r6UC*ay(oZ{#tmf~2FqyCC} zrPpQN)1tYl(1yHvuU-$JMakp51LYoT;tsca6-b_bjqKyBE}>>?`F27+W7_1*yW zR!5!3_T?-A{9HgMn(xxcQe|3dynNT~1SsiO-FPOxF8%e$0-L$10b1WhXRh}u20NKY zfTXh~(RCUQjeV5e0n5UU$(0Y4%?{)fF!4#J(`quY(J~I|x<%xHZ)Ee~8W|=a>V}zs zUhNS9FJCdR#}Q2Zr$76%o52GAEFSxA0M7gQn47sM|Kh>a@3YMJ@+(t{)=7K6=@z}n zd@`5o#tS?x2De}FGRet^5>d?pP86W`q-!v$*-BnID9I@BPiiBSof@zro1~cU4oYy(W$3RSxCI6cmr)(I*xw#BJerXB!-oA+9QVxmv z0s`uHWEkk{D~>VJMPpR4GNOx<4%iqALNL|bAKf)zs zJGl2_kDwJ~u$qnGw?1_inS2#t+NJp}7+MPIsPPGGcCYEdlyA)$VcZX}d3hUu`@_rl z(Rv&Eoj6)N#QN;AYoke<2RCJ2hK`D`R$@^XPXNrM;#kb4kxeDg<8bQ^wN*oOsWTf{ zsn5nn1hT52XqTgA+O$K62kLIj7fJ$Fym!*B2u!&F%Z|O{dLh$6pk8H{SgVdw0vd|U z=b`siY!pW#ofYFp5=8=G-dlDXs@%%46+BP^6fzu|oz;5fzo%1K0ks!jen~UWl<~Wf z79j=b9CZBU_wF<01?YY+dDh2u!XE}xF8MjskTE61HKu0r9hJ``%M(A&$N&MqO;m4i zLh#ZH^j+(ix;dQ_yUL*U|J=H=x5q=4V2bO+u91@g(2#Rs0af{kwIb^Q-_t^d()Kz# zGULeR@>pD2!qW0G#<958g#4i#8{%0)mb*+y?oL^0Z~Exd*QndZu-`>67`kK!D!*&r zS__E#Z|+MgC3!uje;>(I3ackpWv!4STZ$1fsW_5x4oVJC>riYzKq(ud)g`+Zpwp-- zx!J4_u+?ZI2!{CFT?_bkzxE*n=o)0xmb0=It7i1A>(jqZxO`?x<0L0@KoJy4jV~?@?~MRSEM!+U7i4hx{;Z5>_B8~JyoLmjY=*H;K&JzYIzS!c>$Fr+m~t~J z{TlLGDPQh3R?fh@XR_|S?>_v;|MFjM1`GVNcl>(7571?Bbr}d*|e@5`e*)8zBlLb52+Qy*WMoPfR0=QT)H?xhI*Fr9hkDXh%R$9Mum{x?~%bP|iRGnkv3Rcn5>SVEyRi$pqu_03JZ z^2Y0vnQ^j4=-~?lQ@6mhQ?vQL`iIfIiNMs%W`x z7>}_OKSm}DkV}q{O9mQ>p5&id`pU5^%=Zy$t!2{*6bfmS3ON+B8Dx^wJ_5-g#Ln&j zPhPH}(P-no#ZY6Ywi>|Y>uZQ-3wUMY0B=_sNX3Wvyc5%!f87zMHsS_FktpTv# z8RE@y4F~-`7P4t9=dwtKNmSciG*~tXQy63l2#a|G9lm*j<)K~|Uwq`3{(k{ezT?lz zfD_Lr+ticWES5>_>83&S?31ngm_8GkH@^f9fhlL$X?i63p-sw!dQAt!?O?Qdk~~-k z!@fH23|Ehl=1}l_9+hfUj@VJmah`H?K__Fpw0sQ3nHjN!Y%~yH9}mT@@U=`X%|q2C zdSp3SR_xNxt&I`qXc9!RtjliN*cd5x-~~W75nwhKVx^G8v6&Q(&1JDLn?W|0)ORMI zlstfIjb&v47O|ic8x7G&qX8PVF~0fZ8lG>YF=|xsV4;r!y0}^$;>TCZNY5|h+V&3W ztu_{u1N`1&=ke&nrvaE&%f6=ez1@tc)6%*&$T-E&sE_f)%e(l-&(?9dJ_5xJ(i~DJ zC9fy*0HYNP8+B4_a0vpW<8h?pR>~wx)#7vY2Ix}1=&q!iFkFnL=`O*Q_n!&`s%$!h ziC2wL@(dpTTas2Ly(|~T;z*_vvL)fq*daU^kSXM!)T9m~W?6{O4O_S8WP<8-Z+36Z z0M(T=snZllr(J_*w^%i?Yblm$G{O;>Is#L-1R&kall=bgehII6KUU(kpLbVQB@WnUW4#>lU#t zB{548V`e80OFG3u9{GF*d%Jts+1j!)VIst-<14uG=9?IIyM!2S`~yd*BoRv_kO~vH zeJ+dNxOW-1pUWaXmjH5U)|1TlWg3SHIZhY<9oX@#6up}oeN@(J*w`Club0G|)iGYH z^--zS(I}S%>c#`}wYvBI`_YTV(HoC&dv1h(|7)iaB->)_yqJ2zOql}|uXFU}ftgezxy-%$@kvCo3%I&xIQq?;8aJ9T6*K!Jy9Jf>y=UYE`wz+PvB%Lgr7Yc!Eg#Bt|R2}`LE zam3N+4N>opu-WWkJ(faZe$GKtH#&%3I=v3QaH|F#Km817jS!u)jwyWyjpJ@y)DR-U zuYD$+(|*5dqfKlUqU6VW138|D+LugN6rF4K(^I4obIfn};X0bA#K{3a%Qvp&* zmbZ+Fwoo>mCb_-fH;UiGV_;`zi2v~90k%>L7#-~5&TJ3GVH4N(>Ue&)i*R8Tl~xNE z=X3bzN`Q~uk;CFVbyC{+{tmi7Cx)Ss0L>+r2B_jFAB^$smv-?tuk7OO<`7*bTLhBy z1!KIR?S;mwSQlNA2`29&#z@D<$RrZT#6u;jUFsf3OeS0zn9+cHmSD;ymqF4xZTT7m zQjER6PI2g*(MPe01LH6?itIjS0?aNxzW?$*eZrdVo-ua%1f4o6*IDZEzjt+K(}JJf zN2ZNy+r=De;mjt(VwjcsOu&8wrjEeW&ETM0^4P;*%4>LhAhFGUqaI^A&X}m&P3r)& zKuo{ZvgZI@>zX0^W6r^rsdBk9Q%nRyYn5fNlk4u-4z~bE$7mm5S_D2f%QEY=9%?-X zi?KS&nB~kB^6C_-(~`gi0O_yjA2l3erdYr)KlTZ{{>GcwtJKxCCxEB%Ev7dhJ+Alf z#K-(y2K1Gc6^&wf{k2!sp3H;b{(J9HsevHit=Hec!R{_X7Kix0Ig5_WQzC)+IPkHP zMLc@P92S=2h|MH885vL~8Nt*vOXOK9hg{r2X#LH=pfNyoy@t)bKC1mBnu9pjTQR(} z-;_?OS}scfPp4u6%}bXqik)NlIT`QZOJ6vTM7Bq|42UtH5#&1N$pfc=1CH5kMF7ML zvB*E$K*`qX#yv`z@9RN9g6lMBp_vGC<#X1BRi z8ii~YjaEa4r8~W4>c{m!W|L)}g}HeYN=0*nPNd}a&O_p$R#$c^0GG|7P%O&%org4k zm(~|1n)Ytb^igP|d$5OIrHs^|gF+&PQYwagJV3oW!u93=+ub3WYBTG3_=Qli~fJ zCQTr2)|<2|lP{IE9atjsBUUjUS80Ws9nHU!JH0v4OVjAZ{@z|gWpP%~`kLX#(NG$h z#16S$7ft6@FZ%@7ZN^{7vqLkP6qq8@BwLI`LTuy8@#FG%~uz0YYlL{ zImSU}go9=qH0TTZ1I!fYU_MYsSwDzjFfw+->hfbT91lM95Dw~fG$mN&5Mer_yHbZ3 zDWmS$IYb(tZp3HLpOfL<6Hj~}8`n1!Cgw^-eDRB)!*kC)hs}+3q{AdO*Va@$%Vbj~ zT4rf87Q?yJ5dZ4VMcjENkJM}&$g{mIP1|)~%+uM;me7IVn4u(RX337+;hGT!%^~)$ zcd)(FL$x33Fz*cmREBZ9yi>D zyFfStBxeBGH}IQ+cG`&Y!UsS|wvZia9RpT!T=a>v?*MavY6R?G*}*ry`8@vSl`^h2 z269gqXcmAnWu0%;=FbgsxK6zwh76sqb2&6xO*c}=n1E31qK&yAs3OZp0eCDC$NaHl zy3TBY-`U;8ex+!f1yv_r6l2Qw=aGcp{ZRw-j^V*{;54e@ao*&skN zoy9PjMSCzrvtGq)I)U?r6i#K+V5yK@n%&_TZya<`EzR+!Pj-r{$k1o%)`F?8x$ddy z-Rv@X*I^|<5g8U5s1v(<$Un+hCeygsj5L-;$t)3cdOah7sSY=%i=oC)Ns=rhZ1$Rs zQL-|M&0&PP>ge^QEC);V{>P7= z#Kn6S5SuO1qzq`)fo>fbl8qyfGWO*iUy*f)`xm4Av}O;=Dg5yhb-d7LNjQ#tr-4Fj zfbz~3*7j?dJADZo%^vb$5+6TV!d>|)&Mn2Tu)uCr0xIsk=!Q*&U~?h&I#NT+ph*}8 z-2~RkaXkLoKAzd>qc$L@Wtp>!a^*nGu<6)FN;r7m{WutcEk8N%NVXEDHo za{)ec_Yzi)B@qxvW$D(LbRuxlZLS$RN_Gbr&j;wGo4_zYqMtx-zmM%VTex-|*lVW* z6xrrK2-Bz`#7?<_wY>`VstvVf*A5Qk;7;3zQ)kcM;;}h=;RDOK{Zt;YdLKy70L47e z-DArZFyOqp07%411u8QIng*!EQh6X{28WSYoeWnzAwl|;=P%>`{)=buQPMT1RHk>SsL?>JhB!+J*r#xg3_3jv<*y>CNr# z@2afSXtu?K@qYwc`C=Z$(yYp~oIe;(m`I&pY<*|O&e?+;0D4d?uKae>6aA3}ly%ApI{u|gD2*2Hf&)r-NEW?fa6OnRkO>K>z@mX$ySuXzOzZh6WKj7 zcLCno8Q|+Ll=0)u7OJBF-F_FfX2S*-(~2OIR>DEBVlyfsgIl5{{<~s$9Qe&Ieje5R z3Z8xHX^paxxvGm(ANc4;aq`5f)!ij7ga|!GA)xFYuPmAMBrkjHi)@mKRv3G!Kw}sP73z((p=QzN6 zrG{Y`qS76p#@~~C!kqoR@8CW6-iQD6XGh(9M}v-U2~2u-Phwz-0(4*Ed*|m zC=feYfwxHV8PuSDfJYW`cwixc!LWf7G+}h3B?d9-2Aq?2GKF+HE4@uBn^DGN zbHSWO%70RplgNIg5?ESZ(%1%?;l2FgOZtxj?|UW=oTbhi7g7s{Lv8O`4~ExI%1wQqzd&kAI_|^MY@YxT|$+;M8 z8VZsCo!z@V#JY@ld{5Q}4jCo#4IKdEru}S66Jqb#ooEd9iL`|DgIW_m`u6kqf4=z> zyje@2K8mY5PA(44Ox1>=T9=>7ZURVjeP?%68f`KQEI+uCoN0V)gppJm*1>JvoUuS) zF`uRQob%VrVxwBEq1Ech1zTNS6x(Jp(#I8wWU44qr`x@~KA)2&hxDV`-rAO#;@tck zss~jx>NV5mxDgxzbkvE^mx`_M*)-;tmc-^v$_n-w zRV*wmYQ4~AW1ytRu`y21W+RLY_<5^?UWbD8KEjYm2Iu@OV)NP>Xs0HxH?Co)Nn#m( zAratzdh|RV{qzN3epUbswJo4q14gdI7cF|Nk|~DBcfPuN>P$)fo*4AA`1(_A{NuC? zc!N;Oy*{TV^PcsAb~A>byxqm0K6@3<@3l~u4T5RQ$o|oSqTXuCuZmuJj3aD^w~<6{ z{%IWe^)c0VN&bNTf2i1u2(yFZNGu-b_YwP zH10mOfTBw4V;r=5=pw}BN()!m@Iuqkv8^+?zGIAg?z<2F>Bt)4Xg1$_3&l70+rR%i zU&6~Ty*M%OoBH+X@}3Rm^@2eMtAxLIhAvI;21E2TBhI>j*b!#_E6zFD(drD2d@spF zT)|u2S;+*r0r{WBVhM{2i*iZkp~)a@Expcw&t={`+|$VfjvrsfnX_lGc5MxBy?GhU zMnf8rlP6d4@sEE*qUYCNc@68=*3fD;P2?=+V3rh9?GU|Ti0&{UA-`ao+LuQNhCS3; zeO#@y@U!&;yuEjTQ4qu8{2U&>?G*m)$Chz=#qNzS%Md_~1{?yNm0yqUnrd>)NA|RI5UeZJM)sEo=bK-Y!`2}vAw+|6GYy3f-_@etnq%*q+sRX`T1GQ z&dwQwaD#tS*ze(sk3Ncj^VM4crl^^sU)7X$(R)W}j-z#*3Z(e0=!Qaj(CUA#Jy9s2 zR4A$=lI1wf%wu_+K$d%iEUQ?cfqd!1V2Bj;E*P1!y}Xoc9FodsYPBDr)*Ycf3Q_J2 zQE4?%N~W-yi6iKDu-P7Bi?bdbv8j$Pf+jI>H zkZe?^V`EIDr5fYZsZ}LfbEOh4zxkFlQ~ccWd=uMAO(t;PTpa(~Z$5H2B2j^ zeFNYqB%+c-ovkiVkQR-sLj0cfZl128Lx+0?KX_q)KmKtY?Ih>t#n5b2<%dOEk8HlE z2 z(-h#lua)taFRbH@Iy?1j;5fgSv~)G4psyr`&%ygY!Hx9t3h}XrKcv})KYZ#b>8_#) zUZjjiw3JDxOn2e@SzNeyNzYF(#m-Nb)SvvplS+Jf!D%Tm=4?mBZey#hOV1^f6c^Br zBA!%9Ha_Yh(d!_eh+!rXARmvT(eC1nN(0+n14g$m&*Ee*jZAEaBrPt&n7VIY*=ymg z?!e-Xm?;}^#Mh&f{E^Spr6VwPb8zUrJ^D+(^Lu#Zr58;=c!OTxkXC96Oj!hXp12WR zW&3^D>0wkmKt2_s+3l%($BwTK4_698ISY?sZDudd(2vO;#p;nzRSdgt-S;AKD*;j4 zBmh9-C!Ik&5u&uPsNuSt`9~ndz@RY)%)q?4;2|(&BIo6$IUHYI!P{3ZV{?5I{oVkD zd=86C^LXHa`_z8_+AFW&N2I@*eUZh9k&0&aMiM8G&WDH0iF^W&-8PFyE*3B|3&b*G zAUy`y$s#Z{HTc=bM-3bvpwA4xJ;45E3s8fqwoG4_bdqda9K|BP zGngr5Q7Y1~GKoZrZsfk?!Ma;0KsFkOh!-;G?3M8!|MU0oy=wz>GV>URF}%HbWpDB>rYx>@Oimzh+zHf zFMbZLJC=?)$I(h^-oe7wY1r%Gi=QBvx<#g)PJnK^+p>FkJWX;J_jB)1&W<>*mzvDo z1WlJB!Zx5 z$g-CnZ@Y=>o{6e`*&1f~@7}xb)Lwl4g%^}$D35T_Gqr2+74I$FR^nYQ=V0LZ}E2mGR(dmkv;HGErB`YPtsy8!sr;xH=KcWN`)yp?ZDFek zbVd|nQZMZeB4>!Hku5xMMk9$dnK-tQ)PXp3QW_?&Yk;BPUFZZEVz}9PY)??+2K=(LZXkM?ILDPKKP@xSO-acbw{W zaBn`2)eH?#W2klecz&~jx9gM{$8mn9h&ziRF3iM{3kd_l z?+j=JIYw_xEtOrXWEh~72yl!R0~lkgJHYn@7%=;@)4ueg;+9gd*Egx zDyB$OZ{qqvw`1Sz5|m{MWZJsy%B^H8seQ|&sNHcTFj;U=k2Au>0`OapF5}DxPXoC{ zW2KtAK(`8vdS=ryt(%sLe~j^^Ijq;#u~?i#yg3FAx(FIsTz`9nHcD73a%9vHwZuvE zhau|q1AP72xAE#hfW5r~&FCXL$}(87G>7?I1{deDI8J%NkllrO#D)!&dL85jWC6!W zB*!SthgdjWLY7*pOcgOUhj`Q7skNs!Jqi>km^Zw&JHlW6bQ|BfypIFArV~tY|2a?; z*~dx4XlvL?z;Rr>a9)D%Yirjc-!2o6a}J-eOS~^shw?L}(g}g7lP6B7X@_HCI38$y zV-r{2z9#LK?s;fNooYdmmy{*R^uUtgfrcn2kO%@bgf!btv0f}obK6Tl$C9O_9UQDq zs|T~Wpc!eG3^L^w&d1Q!j8!P^zL(6@pWf72_|M_N@5Yt<{d~;LT$6wC4(MO{ZGtIh z+UWq1XQ-x`DSuHXKeO^#WXkM?=ws+0Z8qwTc6B3J9Mx+!1RNn_#-4IPb}q}Nl{KFr zm707OE*iiX3iBY&IdewFfGf*Oxa+Rl@!cn$z?*Mg(E&~O?N+C)fYI-?29w8zZi6zFWskef7&$E;M$`5fW47sHjuXc}dx7 zcL$dD_3}5I2V1?0$5slsPy|M?A-3BCJhNHDs|S7b5MuTCaSY14IGu~5kf4ESU*$Vm zk~DhsBN}N)H9=jVL^5;{ozyo-!elK@2q^u| z@ES_SC(SdY6xB?Xy(#o0R*pdd`XB%4pWF-<_-FCh_Y)|+o7cLTi*f{}e*5tQDqaLIb*2Vw$K{!63QRJN#gYL^*BhqyCi^T3HgQcgZjrxIyCTsAaz zrfoXFTwz05QV_?53+M1lk3NDIUVRPKdNUfXD&P>!9y35f9R&|>29I{LiDtcFv*S`p zl?FL{m16VC{yyrBI$nL_4P-Jo6lZ3UOs7Rz^RR8!su-|ihMDrPkHmO{2ba?L?;l#m z?W;5+>|m$X#Mv`Nh4?2RNo2pZ@SUmM_eXeZZBzP| zY$}a(Hm~s)%qHzHCYTCj1~@xEhcl;7;oR9X>d;K_=PDbP9HzJ~qEzUHslnvJWRNAu8Y>uVB~8~sLieDgqK*C5;RSst99U(mRiTsEW6tnNT* zr#d!_)s-B4&^J>+&rW%OV>jqlmieCk(KG7i;|=p{%tYv7hpKma_lv{MoEt{OczW3dkYySqZ%{@^Nt*#)3K z09rdhw*qkFitgvM{lHY`YKD^pIL|M@xX+Tf19{`Pz>qAG2;*W&j7Llw1{lXuxU!$c z|NG=NzW3S|YOSt7#Mz~J+&P!RO1y&$CrbMK%e4{u0x34cn9Mp2GkI-T zVw1ahFh(Yq7Q5f4j~~19=pW{-G@N^six$@8;Hr!Sy(3z!j0R#HIqHe`haP>rGC%pr zPnE24D0o*487E^TZ7{i{SZdmGN$mZGL?e4}lWx>k;_?~$0Y44$Y z(`guuN`^F3|KU%Lz|>Kh?`GiOdwlGde%l1-(N_dQrXA7UAv~#YL=UG=h;{c(T&~F= zuyiI*6LnG90d0rAe3)+gs!2$taNVAdENuNv|#?#jP;&5Y@z&L||vb70ky zRTKI0iW4k0noTR2L}OhX)8+17B=n{fO7jn0>C%h7-RK}?`5|!MN&)}=Qx|dZYzDD( z7OjIm+N~Z+r%oWAPodXn<0sF&fj|4fRs3wj1{E(CXVB(Mu+Zk-sRep86iY>*lrI)k zwwakJVQzK?nPgIp0bzomDnyck_Yo8{scWJLxn8Z|XD_`djYgYnp~TDL>EzIy%49U= zhT5s=lC|%6V_@fhCzA=W9LJ9>tNce`t$W<4qQ_yijyZ|IloNgX!^Ie?Y0cCpZi!~< z=^s6fulyfhcD^~b68x}X@9SnshZ$#@e#>{kX$4L8r&D70c#zg>$Rq=dVq}_tHm%Jh zn;U9$%k1KU?#;C;Z>bc`wt5Y*R%yl!DtD!GwiEFG40O|eB8G9VkNI>8rF4ivGKpr8 zL^l@T)TvXLSzJJ)UPqf&76X=?O+YV=3t29LDRvDyeG~=h)cnN8BQYMwjxDR4%fq%> zJ;1?14fD(M0>g zlN=?3)9Q@SY7WqB_0j3ln06wl7S$%8YmE#VOT_EMLCpOGp1j(}53e=Q9I$|DvpSd4 zKyKW_TrtG3KgNEmk0!0}{FI0&fwfUN)T?EaBdp{DJaB3T=av&#Dkf0O#*j|%UN8w| za0$?Ajj*xTMv%%OOr-Jcmv->YD-CcyLM%*bjW9{j=qLIP#5j8|L@vhx;(2xAxw+AH zPo4jmk}prqI!0EX+XI(=S4=&1SX={~#rM!d4@t|&`?SBmFMq1_jV#((?xGkBqv zL7P`gqrAS2#8GkjtT0k%qD5ncIBBbzIi87-BTUWAAe$@L$T-^~&ZdTp9R=AuxOR3) z+fQ11ZrjlL2dOe#=;Mi1%|LwtLJaErEf*k$dbEt2%G_6$H zH;Ys@z^FUIUw!HX{^av#aJkXLLS-5oG#3qX7?PfsAa$htF46Sa4AQx*e6%<*#5SY+ z!-jo*R)gM9orCEfNZ5sa$_y2A!Dd8!R_kGidsH) zkeSDnvB4a;Fg=n@hnbd)-&dSTG{RIigXuyJ-E@c`SH$$}oUA9PV{12C8o~GNdduIm z&r@x^UJpb5>GKdJfHntvPGa7E`)#;#xZ6bv(zvtN(#w`Vb20qMWmAj&WFvpu3+o-}R()zWw zR-~blN|?Z0A%&agvbc4rfa6O!9GFg`M3<5vK(`B=zSKY`PT|me8C%T({_=DKkFO80 z8}Z6;!mw@00sVpUL(9|C0zJ~DiG8&Fnk{Z#a|+URcljQlW3~DB5o}7D>=ge#H6o;?f!&K*Nl7gAjJ(Q#jnEf>Jse)w^~KXpy+bcT}(!pz}cF!OIObUn*!ey>mYvzO#aSeuT{{TgaBn$WEn^%8$&$ zDGq^D4$nP(3jfdVeG$*rD(H$)pliFk5^k)Q$GbKtm#97wq&Y)!cS(5N*d9w~=mO75 z)3FA$jSzjGK)czNxZZ=QYpf33ony`erk#@W`1okHO_RE-+PTwn zPcV~&Nx-q#yJQ0SOh!>bF+tVbJZ9$R1lE|@IPC3>hw)~h=2yj*Fk5@{wc=y(HPHTo zF-cs%hYz!uxhPP;_Hcnt>P$_@Wu$>jr@1HOkjsWB=0n_4i13cXJrobmp}p3_>V-8d zP6xm!B#D^Q zZiT!+rFWe7X#mt_@k-jYx2;WkBiU4Ws`+(j?NhB`0aeD~P{&B-EkHV%)PTt0Y8v-0 zXL0|LX&jkNX~Or?S_^CS7}a79Q^gRMwukuSsRo|j8K9j=q1_o`TZQ6K6SXr7^J4ti zawou&0c*c!zHf1)Ye|O6RS~w&I~IsdJ5A;J*RHT-OK_lxD<6}szp2WUrZ+k9_m`ji zG|peVC_t(y!Z3|&K95wG(eH`@bB_1c!VTP6;q@^5^c8(``N zn0ieB()B!u1n4K9b7DY4Exx7TH&Z)s%_qpAC)fFy$aDGMWtzsY&7o@#ICDU&>Yd(X zQcLUKxT#Q!#OI+uAY*J?S&hRT;zS`|>GIxQii71$KA+9Ky;abk-Oz|0M6 z)OHc|nJJaP8}7Xuci(k8&Ye4_$KVF?%rnno^~#!@p$Vc|ownW|wKeqTIe2Ip-}W8f zF4yLd|9_7l-rB%Y(8j?+AK&#&$1yvjC5)BxyGR#vm^oZQBA`!92n=c5nZ`4ZKZpPD zv8V9d4#8hi7EkiDbO*awDK}x~*#r-!bfmc{6`!qFnVQz2A}dpQL$TdrP?UO_Zo4CG zkq5gTh`gMsvIr4s?M1vtSKQ?bKkDMz=XY zw!#RVw0u8zRvY;2=T738v)i~*A7OPApq>l`r09CC6nW<(=38YG8qMxBW5vu|&{yu3 zDaQkB(k`}ErU~e&d&}nv*xjaHqb}bvZT{}owR_t?y1$*R#Yy1Ji9hN-cvv$$TA<9a zp5v3y!;C$fe?Tzx_SX?*lKW&*t&V`SeD%PY6@kv!8(uss2= zV%-F)9rNqfpxT_S;Nj2H0~~F0x>BHfI1bnHejr z$k2>5$w&5&mIh?bsF~tt$*E87A&dJK^;&t@w`o4v>uQY>;E>%Rb3@>grDHuqsgnt0 z^I7blF5(C8DB}37c_3dvacDtkfkn52qp9I%Zs_tp^ z5#Vvpwc!>k{J8Jhn~u~TZ?~G-lS+l6*3y0V-itr`v%gRtqkk|KJoKnyOP<{W-WQzi zl$Oq|Pfi;8|3;R|vrc=g4c%!nF;?|IbLZW6-Ox)o_T^y8Hd=S`xH$>? zyLVQ06GJRZ#zg^d=7gqixCxr!=0vwK22@S5<8S@K^@-v~Evxag6d*`Ag5?*Z=q=p4%y@Enu6fjR*7HNgqOiw1!+<`_BUa z=V~obOMz_^Nk0;185a@h;4hSlqU>wCJJOwS!`av{FlE=!_W{#BqpLi_sc=6sLW3lp+YUVJT|G7(=iJj7MYOOevr952HRi~TVHL2imBa>`*p34>kq%VdmT!Z5vjC$Iu&;)c%Or9QFIs7s&3`%Z0K0&(gZT_`l~ z2Oeshn_F)3%hq{Xhj>!aO#%c#YZH2oK^9vb z4Ke6+(WB3lY!6(3ZZe5`?zsmmYpZI{^BV8$)X?s=kt>zN{CEigo!EK(IW9k!&nWPi zV(a@BviPUpeH{6NRSX+l)Gn+E5YI0akVv%w`cmx<@!$T(bNJM$9#;Ax8282%C?{=q zA6mgPDbP%G?wsbu+8T3XwoeJrtPhV)d_3vzAp0()(fbgN!-Db1$$J9EXWIuYD^T?fKh zGVpz;gOscfsB2qW-&7mef6*#~#VT8ZSq=teETW6AL2SFTA>sX$$z(C;alpt8(fG>9 zpFjFpJ8#BqzPsU#Iqku-N{#n+@$ioN)TH{OrUtE7?g;PYQPjo<$46}(VOndo;69ITWzoM^yhPZLI)8e>4R`JAY6`o7fa zb;YC<$`$2fQQJlE$QR7_%n;^?2WP$J9@oJSokG^);&h`X_+*wj*~%?%ZUPdFwXjc$ zhwtH1fOp(n#&>=5tynl%p(G4wlf}rOu}e4W82w}sFJ0co`ITKfbM7jxG}`DVfO>~9 zK_dYwyT)G3>NiDmIercH4bP8`p*g_-wHf=CmXKFwqnorE#S*J;u5V~u zd*D7_yMGPD8qoBND_Ku&-WkkRt75sR?H~YY)#|#}!Zd~Ra%^-Agk7uG8chAd2Yz19 zAu#2Dub7dsh{dx~lcHv_aIM|D_jC1!lW&Vo-oLvy^e}cH@pHL)^@^q%b-2@~%C-1p zk06k?x9GBG=5tceeB}5sRI9TJvZi?}Lyx`KoCoG`(38NJV2W*2vK+h@%Y`DUGc%~p z&RD$6V1Uhy4V85Ha#8N~ovvvk)e>^;;A9YECJaytA_P$fKl1QlyyaVtBau#`b!8KS zdIMo{ghG{{+YoW5kFCoM{Q6(KgfCu>&{Px>=kZwNOq$(hEnwG|?gW+&;I*4H@U>BY z=^fqJtp^8k_9qB&j1oT!25j^Fdn_<6S@*EgT$?Ih90RKY&*eb!`!qr!z$u0)y!-Yl z-gCTw12ZLLlZ@91P;19Hd#R3vsR96Iov{`@AMxzf^r24(TxFoW{a0_LkT zxP1O9Hg|W?)G!AbphyEa3JaIE&fXGtg9KlTpZ)0{|HpX##PfgaLwQ!nvs0|VOw!~uQ52Q)kNknI{kqnR=h{tw-1hSe zP>apPsLFQp`BDBXk?56iF;kdZTpC9Qh>aT2h%hP9z{D zE_$sNnwvcgq7-J93rH10MC}ney#yLNO{}gq@rfrd;4>H6xYD%^$Br)FR<*;)p3$>X zG#6#2+O#wd+?;uUblNR}DaM-2?X%F`AeoZsD1jm0=l13nR#&cKbA3%Z6%p`ktJvs} zHfwrG(Sy?_(k71HQX~16qK7LsE~bNIHkZO17xVazH|)n7?pa2rk}-oz=Bf>oXx4^k z_LDLoy>Mk4XIFM`cDsRAB0xV1u(nl0lX;8Yu~^UV?;XdIIcCb9(*pXu_Bk9Ag7AL3 zqc%-{&=uICQ6WK<*2QZKrXGLvG5q4s{rni{S-Z`S4gck*_`Z7K8j$+h?A2KH=nkO? zQnP59iR}YJpLwwHFijywHkCA^P99vIF?Jx&>m_+j4jej&eFqPyjmwxG9*WdN@$uQN zV>^%8dZWG>c8Xa_B~hK3MkY*aOrNbn3gEXkHgu3q%~a9obmSw~>zTGjS3^|^5A_&j z3~{`Y!r`eQzVAEk#oVDPM!g=k&#WR9M<~zIh2L~NQD=na_5lC>&z{5QF2`t$QW(b6 zNEusfolo;7PH@e2SiFZr?Hn%S7Y^2DE|TdLsY~LW`UtQ*LoCroG!c zDYtj(bgY?lAFkqpoxO_}|I;sTxtPSmODWuUa1P~6gsF0fTrR}rwH6Siuu#onuAD); zH^7OjUHs*Vb*!~wH2Od-NFlSZfMTwIs~1+VRog{J!$3@`Fe6i~j&TRg-Ftr8+g%g; zfl08rfo6g)yVnS&6g2Mk6u-u#!liXXIurxR;`oj`?!f-VC4A|NU%=|xh6+V?Ii#^l za$+m!z5Lx7$|1l4()^C^PxeV$z7ts6$Yzam4X@6WbdHHnAwk z7jg=@C8hcKrHp=lPPKC}5^tZesjb)$jvm)3B#K0rInAX}QnGpEnu^5!nO zqmg5Z2wrWnPN|FjAoC2AcfuE-vg|&Y2BuPC+T*$;o}HVU z#q8{iu^P_$gC1f8S_HIg0X5ofwU}7A@qQ7RsFzILPK-)ogol?xy!{(yaL4^ekqm)B zt%cRoE6C>3m|Y^L(?QfD3zoH8(#x}M$chDVl6>>~~JK7^kvWC0I=6?EjGB{!%glB}TD`5TGe_i_t0K- zV$XkrnR=~Sf!Bj2zV6$6|K$BYiIdNrFzb}P8|2HbqD|~sHO9CAZYsV{Z8{u3<6@is zgx9f(&8e+1ZMWZo zAN|oE#?I~zKK$X|!TRQw4nB@rCs^Ik5YT(_xG`rP0*=bC%G~V>c1#!@ol2opDaxm+ z$YvI&yPDhh(YM};hrVG3!+3y=l`d+n7}e<#2A!4+`Fg{o%<6a@R@UqI)Uy}x%tl*| z(jG9GPRBMY)Aa0NAh=o5G9XQhh7hA+5AAkWGLZlVD5%dMZJ#aVbf{MEN5NQC`9{x&L%;ddm!IGRSyrZlKm~$<>=vSd6>j zh&kUR&u2ef#m$>jqtt9rJ4d%=nR^ZfXxD4s?Bv@Wb!@R{YQ}{nGX9KVS1_ zpLpzX15V(%k@M~Li3U4cW zlEKD3PNDIB-J@CYtR9V0j~zdX>DgIydPAA3@-gIO-R(=*On}e##G+(4=sGZ!z@fv3 zNqjvW5UAlhfc`&10Gri-aVPg(mvk-%&!#&;ge;=S)UhQeGPiKvg( z>Nc)k-p2gW6s9W7^y?xXrsT(T^`%Yx+Mhm;r?=8*#wiRK&60%L=L}&!c<7)~5$J!` z>U6NNv4xW-Ph#cDRZZoY|CWIW13TVlFTm7vMJATqe`MLhb{7pMnJ-r?s8z@5;;o%s zrw?*_9KnU!c+Pij-0-*0jA90F8)GRE0gg_k@YaJ<*grk(T7!c8;nsr{ zOy_{^Aca5p%nLZZ8)I`A;9`4#?N(QQY8|-41xkBaPibf+W{k=OpP}cin}beE&bhAARhP@R=`u5%pF}T0a%TEOO{W zMN0~Tae{AuKDb-_2AHzX;|7>|)!Xp(Kfo&mQ(WY%T*&BfBM}I4C5vS(O@!jMx!7G! z#!4H2)5usvfc?H}vg`qIT!o~6t@6=`yhA{_e8EKLsTBHNC-S_Uj{=xP{w;7IsR03hvoU(J&E5#A2h_F}) z5x3UyL+`l<2lpjWuXS^f03fXw5N-9dG<;DQsKq0?Oz{oK56E9uHQ*rymaOiRSR7W6 zi?j1+Y;7PNccr0v-vfv6jrSixsX}j>1mZ>yjoJw7wH}6p4i?M2mV6-4f+GzE;OWdUArcDElQ#l<}Diln=GB%iXZ68;vdX~>xc+3}b z%nmnSnnKp<*xA~^R-=J7PsAiEUOTjT@Oj=v0`Me-vLUkc#3D#_Ek4e*(Lj`~Lo!vF z!2mz;gWrcA`&Yku{fqErzwyMQ1XE|sJh2#y2ig?K;3>s ztILma7`8je$_8PC<}i{OZ8T=SyyPsF=zICV0Ra4R6(tgK&R#yaAGKOtV1+(XTC0AD#b?v0X7l<@8yFz7!Dy3x zY2bmy5D(n3jOl5*un*90b z`gV3((qi#5Dr7U5$`=v!dRVVfSl_kwpj;SuZFtWb59w3~x*xqSnsi#!f2z%$#9S_k zZ(7RZ*8Q`}uM2|EeitzYy#adN82MZZH_vCWluKZxHo%`ha~0>B5zg(lu;aY{3`|)O z>*^ObMeFT2Ok{6Xu{I@YtI7`=dCL)Nv&qa=gAJxD^X#eJdget)-K`!|_b&^j9Ez1P zZoB0;7Uvf5^wZB^eQOJCNigip(2z(bBL=P4@3^=b#`D&?`5Mk=d=RJB&MsgT4?Mlk}Bup5O9#anJSlY`i zXSZW97nKwbw4q)X_l$0TgcmMs;E6L=aIrN+jqbw)3N`_){~NbAS$Pw{D4-b{P3CLN zgaPt7Ge~T<`{?!PO%tFL<}q8YqSk3+t6LK_&$eAU%!r+unVrGh?5wiT7MB*0FXpkj zx`MSUmvQdwX?Z9q0`eZB8Z|c7r5Kh!PdNaQZ4f`swHJrHgfJcO&#THt&Ee zry3PRzYX_!G-0Tml zy>`^su5xKo9IK{l;?;O#Ldpu8uZpG--RQ2PG)N<{M`YcY?U-R$uo6s$XpUlZ)sEg1 zsO)~7=8wm2xka9DWKWy*hFW}_qLhDBj|Qxol~ZI0Th=tZ<)_BOS=zwrv}`Eat(J?f zp`pK_zsdBay&=CxS&NA6tprNZ2uryDH_uOFUp0qPs*h43f!Rt5OYqEhX3%XD|o(^${%{PKv0%yuO{S0wQ@DF3gZuVXP%UNNwt9K`_h=@Cl70MD=P z;<=p&tNj31cI#-dz;(gW;?jMcED$?s>1q$~?3C`C37Fz*^_oxKfdW#Fb-z|S%Qs`z z3RX~)ak5AqYCdU|K$epOAY|ZoYjwqY(ZtuLwF$nGNQcaIrImvXNl=q!JAv(01XI6# zW13F`Nq^hdD`Bs$2T$B+^HG5Q-1F9E8TZQlLb1)uJV5%gEbxrd-Vt%N!}d&sX&V>^ zAIBQiXJu+^)uh)wHd^;YutesTI?tb?LlFOk8F{m_^GMRbkDy5U9!QJ8gN=vlRHcko zyD9NCv-f&!Ce057rV=uOq_Ew%57k#gM;sPqAJWf7;LP5b>>)X<9u$@WfuJ`qRKDU9VOo5mgbjzM&t1cOls{PgDd>D5k2A%gZ`pZgyVnzqPaH@ZN{tj355xU%sCG=WG5f zHB-O%bHCs!?a6ek?uR|?cri+vF7sYo{^6Vk&1n`V4(=XZxqo`S6DQdQmV4M~HGyFt zAzM>yt-2-Kh?w=3vP0VcI_Q+0#^IZ8!qUF|7{)-Y*09)^c3aE=*FM9?H3=!Ef3k4kA zm%;3Ggt*^8vRbt@-yPudU$}t(^o4DlX@%%V#2+a<@J$b5tG0uc^$m=ACL@p)fb-k( zNe;r~;}##^n`=FqeZQ_zCY?g4T+RTU_CSnp5=m6D1@mYMMhMbL^l1^nmZ5~!uGKD< z*a}IL8?epi|C{Z77POv35QaEZE#kIPQt!K(OKUiS|Bc%x+xLvMsdWi=hN#Be7n@k= zCs7Zl@Y2-{T->UmO>aOl((XAOY8_9!s<82GWZweRz3BJz$@HjaO1*7}*YEkePpp)n zVvN9<^lGSqZCe7@T-LOp1irDkw|BZNT_-DujJYTKPmsj|fJ~J|8ySeZ`<{F8;Xk-x zjc@}@z3T1wl|O)(spn2QoztZ6Z;xQrL$BL+&bannPXn80k2C#q-)D8N=!7_yvw5Fw zFI5!d=865J7NVEdQWKS$7zc`7u>TPxOi$0ET$wh*K*dk+`|QqyVvfj6Q2@*7q1yJ2 zS`2LGP~=MV!D^5Tk*t;<3D>^hLzKBWXuQ5CElwtz*56q{SHmRUFcaV{M+zvWft8h2 zY;Eo$nXRCknL=&AMV&;L7>Pw9i^X@fy4Aubo;-z@wmTS*(a7g?7}H-xBkxI8R~cPT zR`B)uu1xb3(?D$iC&k$A^qMkO^Sp*}0;y4?QT1LT5<4~`;o~w86=CR#cx!px? zXB+D~+t^?$ii{2j4i{@k)txlY%nHYwGXqk4h z%}gs3r)Sgs9*~)(ixq)}&+>G!QUv4jSTm1;Og^u?%u=y{Y4maPbPi9xcn+x;xNUJ3 zmGlVHg%J+UWN>Ubjcl@mpqNL3g${-oH3s<8PrQhazA(bsR-htfcD9PSg?X%PY@$Cj z+XYR)y8J-3CS5C>46azdF{-pSv|FB58tV0$7E!r_WZ;m(;khLYMgwfOcM)b&3gGV1 z<(pGEt(ilvic^6Cf*)#w2->)j^H8ABI;Lappf9};D>ZJIWTyOpp*^>4O4Mkv zU05iUm>uDe001BWNkl!*(KZJ5UW^ zQLhxRCD837mkF`k@1Q4#t%*CmDPic<6eB1lF?Gv48qGEe>k(!v6&yOejD>{-iK?^3 zqDHmPoOwxFm7VQPbQ!|Twv3B+Fqz6^q=3hpxiJUYtjU^@RUlT%CnMZDpTP%y{992h zX;;vD#0f?}iYhZ&UEK8>6PHa>=eG zLy7nLki8sC`Jo5{Ar5qnhaIR3gN$59^*TB`8@Rf)i5<>FB-64+n2f61Jz@*QvhN7C z2zGg2k)1kz%Pn~OgAXF#>)X9Lk3{I9pV<=FZv`ELY3OB}Z78$z!QJ!l9)M7c!EiqOKd6vh$}m@LxWD22bo3 zvDvqP@!M{@4V&BB=ncpK^Zu~cX?86xy@B_O_7P)=_E2;_^vG^+&ppeTmq3v|R$P|> zW{PFqN9|z;LFn6IY#S0#(Cf~AM<7m<&em#Eex7uUUfXH9OS1Dz`}eCo+S%DrK=RGi z0`6R@VyTpqH39wj8vOw_J0lF@0L7?>a=>AfH0U^78z%6~cJF08)Y;qOxykO`^7a3@g5G@w-60Af`BT=xEv(Vrk;`eAkPs^RB~@GA)m`* z&>f)JVR6n0a%1vLw`)Zn*QD+*8uShaxPuPp|NXze>b3ZKKfvn=lwQemUC;Z!0jA#n z6B1SW4cb>A{5ubLwf8tp;io#raWmHI_F_a*_}rAZk&<$?y~Z{pd+ z_c3WMlR#tDcwq2g4l``enRdb|exTBC;f)JL94H6qcbaI`w++;k%E%N77=aG#3Av}! zgNh592VT85z$czKg|DnMFbXqjOYvILw}+$QE|tRm>4*l;H<(y+d|W!<80bA#%4PIh zZG^)SGAV+oHrhO_Y_`db3EQSkfQaM>Nv3bGf*Y9eT_$H!k^7gIQ7n}ezcDwzPoml< z9)Aq0E9x@| z*QAEeTH8-ZiA)vmtpN1~@F$;o7XRbKCRV!iq_Rm!fhmGT0k@>s2!biLdAx>0+wvGF zJ8sIyq&U5a{fui#=(*i(IUFL@s9|$$6_@JNPqEcULHfkZRKtpI`CGx%zf_!z`5yT%-TRuFcfMc_++Ayfu=gRUf3dsXzkkC8 zCYt5}+-C z%SySLGiNW&Xc&tb5D*9mn1&kiu~;kz*hVT}#0d6B9Nuy0+B%48JI~C{ng(*v*XPK6 zZ@HAgefwvzTrKIfuzla6u%CJ(dc6-jh}bn?OFc-VJp@j!ZR5GM9n|_z%a+e%t_Hpr z;lPx)DG|_h?LBYmZe8>})*E~GGG_#bQ@TSC4;I=at3Ec*@ulzp6IrbL6Kz_Do{9 zC5$kYMx`=^si~?~G)0<}C>zUVRkQp_ax^)LErX9E)zkp>y9i@$sDVbgIsQ(yxu(Kc z;i_d6N?6K6nI?e*Pv&@RlT8c{J&UeNf}G=-DWvvAROQ$YerUPcViP7 zZnTVLVJ)AeFBi{4+o-tt@%^!FYD!Yu3Io#LVG^m3qsR>Q&0~IkMnR<0({m_Rrc@bk ztgPYe*_W_-bw$EYUUxI{G{#FssADa7K=RTm0GA`q6y7FdeAn$|{P>T&%k(K^64}(&EnzFX?V#7Dt^1F9 zv7|sQ*{S_AGx+{*c?aJ4Ge2`Z`_C%?QyvVt=hpbVwWy6N``f>a({Nx+KOAWqx7}`{ z$MJqLxN7CP7N%Nz#uAwDJBeg2htgC<=8EIzBd8cf$QMeOn_tvnyHnfM{ldvTPC2qA zWni4G9MjN=r5X~IjMU!APbSC2vrgYy|8SI_S>NBA*{-#QZHy+I6 z=yDPHUKZG}CX*Z5wW8@rbTSk#K0 zMC$na(H8(;B|3M2Y^qzeR+Mh;9Ti+Q?uE!+zskCGq^pY#&7;K%^grck|M$Yex ztzq}s_~&HtbN9XX;J^Ov@4V`@_j{)z$#Y%L`~SKJQ~&h+KY`~RGqrbf=2^r= zEptm%Ws|U2ze)2DC77bce}CB5G?-=1anyZc{x}vXx~*Mol%g3X(J9tXw>C;T%qpmu zRSCt%K1L&Ag09QE;$#)Qlqf`|-k@Husa=s64iI-c3O;4^+~elsGOi@{&Su0WFfcVq zK;-}(^$n_y2?`KlIx)oUr3B`3Bv4vNkdBrxy@V*>w2Vy^cDrmPvc|RzPGG9l!zZ4- zgtOai#Hmm$PKR+dI3Pn@9~zVQgkSWBiOMP-|@R1{xRfX~10Y;DWYosCjvzE&zJ zG+P7InkLRAklH)hGL8e*W6`H2Kr*E1C9gljoI^}cRWUm^FAIoVHlxtfo$YO0U0KEE z#+G^IIEQRM>t+=xbC3z5%=D6#HaGDH7E}0zpL!qC8P^IS`=kpNA*KWLD1ih)umF|2 z0B-8CR_o!5C$Hj@&#vOkZiM>4S{^(M`S~%3m>`??h4(n(wfEW<4?XrWI{IvEm-qjo z0>CTwlA{>eejCk=b(~`>cgRDJ;G2NWWfShnxidhO(3rnkewj38@&)|xd)|%j{UFetNI1XSLO$thOY#_P7)8Z)Q$f!ZW&WjQ#;N0orrW%}{M zP3Q6`%~X+O1c{4q@z;<=NVPhLY_5O?S>eX6Kond2G^aGH0GrX}W3r9MKb)i_f1A%T z_J?dU`5J3WkNu;Zku77KIGIXAUTWlIt{TPI7shzkokiSv+blvfk?33o`ny0Xk2ubw z+hXH8iMZE6I9)^#+7##WC)V(P|IrCN-!7vadzLN2@}UEYpdx5nT3Q5x6drr*37k1| zMuRhc(#?R3zwT_qd0)6|KW_rSJcmj;J(Ova5+u+ZbkHPI=iKQz)tFL5jcKinrDs@k zN(RC`rUY=Z)`q9`@6<5by>9j;;*8whMpeKV^sA_f!PRxNQpUr_mr+QWIkLE*kqxQv z_ZjU&Z7Id}VuHgwPHi>u)a6a=b}gwupO2G%XzzEXqIwM8m)fr;*Fs9mmk)wi8Dhn- z_aziIbN6>lr~L$S$)p&%7F(XlP%LD&Xr6L~d=Z&+7Tr!yrm~cF@LrRa%(eaeXLQef z_u{vI|94;ALi}Iw+ph%Ryq-UEJ(u7Hn0o(D;Dr+>4Gj1;i1T$}a542#%-<6`;VCI6 zwRi&`mKAtX4#H|z=|w7WfPQ?N~t&d89D8FxICWlrce1s&&P(43&OfFX_+ zlDMf9BROno43`H>B4l+=sFlzL%c((g__bDr9q1#uoD)o)S*xR;2r+WLS~^-BB|^vE zp?B}KZPCQXu;dLJ)wO|VQoZ1EDN@=VI;@I)Ui&wC^vT6*Y2ZDN~+`VnnmJnTx zh9%nHQBC3(|IxQ$dWr&jzKDUQ|7=#9Em&hHf_y<9Pu5Ftwgoy!BAmL|#-~oz@yuoy zTaAuJ?U_Bscpb88e(c&Wc5A^8V$ruOMIWo;p}D;&#r7? zv(ppvEvC}lSCk+c1LpkEB}lgnLB6^PM0cgq%YYRJ7xa^RoYpmWz}O;MN2CI@I$bo_ zjo{wP>DfXNg?s_ULP=ePPN$1@yQR(vC!s0r;Jxj^6s-|{=VLe8d^e`~t_Kdj%Aft; z-_LA5(@goQ%UAq7oOH8tV{lcC5eZiR%i>=PiB+0aF?)?Cuc3Nff8BfHsKOf8#kTw@ zGG}}QL6V|k2n?G7SJ&QZ)#$q({^RkysMudMdi3oXW;?fC}!WgqT zU?xq8S%fb>eGXq(Y2s2ZLXX?Kyr;Y_WCG53UHG1P@bR831OeXv-QS5H{pDYIl`9f> z{Lx48FMrk;F7v&z!)*NQd;Jl{?|JgHto#Y0s4eMHv@14{+7cdf6K2DT9_RPtY)Q!2 z=1WE7OC!vDR;*H<640zSnrOD0CODTc*jR$`WSVO+2k{V@IKp%$)RfzH zr;j1mpc5{0A0a5Emzdf*#gg=V1iWNXxyO_T|XCbn_< z1A<pG)Dwpf-wADQg?++LYNseLBFd! zwO$+{%w~~et{NE|EoyUAC!p{Sz80NgM!q2;EQBK*n@(dY-A5*EZNWr>Y?QJO%q4g@ zM6cVEg@XUGOfj1fB&hkyg-v|wW(S>?|6#p{s_Vp&Jz!axIr z1bC%X0@ZYcN;<}Lm_Rudp_pV_G8VIH_i%u->mB^bm(SuWI|FPD5*QG<>O#5C?V7da zm{w*MCKC8Z-}Bx0v0wSnb*#Rx{iBb6=~4V51?YR?j%+Di3#e55$dK`6_Y%k9IWgL9 zncV;nRR^5;lNu6pW~~A>J?hVV>-eI~}_hG9m`3-9+(V9enP(_^iza2Yr1no`-r%s>N6r+i&O>W@7tbI;>4~++mv8Ep$AD?TY zIu&55oWkXm2D&|JIL+2W?Q!+`5=f+C#9thEQ|J3y@{ zn=w;r(hPCmj-eat%KTFHfP4?Iy0$FQ4Q97E_xvEhOgdCoWVhRwzZv&94inKbfuM>^ z70&>+yjbWBRP?)+Ulilcd+)|aZum^y08_7eH@=Ps_-8cjJaKYNIM^Y%=K&mbD^o{> z3!5&A)wnHa15=vN@f*Gulyj3-)dOj&L{)PWcaN_vK9NANP{do`@-}pa13doJ6K0mj zacUlj*__12n&?Sq1#VdRal@wdLYIb%^0jFrG3+6Wk%C4?)I^bqq3*@eKRORx)PWJr z^nr09%W;h9WQ3#TB$kUnJ`-p>*Mi?XBW3TMphB+L+z4Gj?%qpIfVNia;E%raJg#(N zX{@NvqFUQq4*2+*NvqR`hfXHPcwP1{@0T8IXLm~gj{HiVx+b+A?11%5p5Nf@^4go` zr>FE-t%LTbPudi?6!lf(dP#jCmlM|!M zBrjp+47?@;SLIZI@4D|G{@&Z}LMBT?8@KBVBw6URULNm<{!n82fQ$uwxBS#6?LVOySWpYxv6-S8=*A#O^3it9U&6?K+a49OAX*HOL{xKmOkD z!QcPTzq*dq_qBi2gQ>l7N4B)=lO5kP3IjK-(U@^^?b7DXE(X1h7-+>1ndKjH<8-MZ0 zBhqrVnk~n2L`ouHP9GWim(HGbiByvoANM5&Z4-o&rK3)h{(98X(PN6E|CLgJY&O95 zE}MO1I&E@T-EH1{oFb<1T+@2y?WO>3`MTM%)%2PgXvR!=O`x{`wt~ot5f7&LPZqhe znKa&VWIvV*d977rr<~n`w4zoVj{%(SkwDfL)U@&QdSRo1mDT_q&n^q1$~eK@f0J=O zGT&PA9=Ba1VxQde*8(cLmsLOjm`MdF2LZO4ZS1lJqe*8vBfv_q&29sSQF!lhio4zF zNKntSgYWr{dv1WKGur)4mvYlNV{xW8#0wJGzi+>^DOavsLbuP5SQ0xv zbcNfPwLh&Wq&c8(X}QmY+Y+ZH-6W%o7M*BSCY%zzQnXG`W$Z+l53qb_2Djg`4@>hU zRLf-&e%PruarW{>ym;;cn$5nhX(Fa0HuqCzsqx?>cuAp@4)D;?C4Arg$1znY>H6pl z@R}tZ_&OmRn=nGu?IKB^E&^EBloN~9XD(Na=CFVlHWE0~Nn&Rhh)Ecdog)(&4Y5=R z1cIl6K1!*9fhPOF5ydIBDafV>^pUXeZEe>^VSJ9YCz9Ch0-t*30zP|w1Lrz1I%6%N zV^bXEVpG^Q?w*T*pZfmq#XoorviTnW(qs6g4}9<%gU-E6dT;w=Y?H7zC_9SKVSXIl z%$We-MCfD^J?I*@>d8oziYQVa74V+7kH+LTt_4WuEnh&G&7nh|v}RLGfE7J%JYAX| z=iIF*Am?(;9Jx5cR5HT;sRFLlTIeLwVvS3s0xHzNWTwbS zhe^yXF5>V_N3ehYGR~hnhsAySapL*sv2t}qOb4X`d=0nXdMhqmxPV%{?sRANiBK5L zp$KYtYK^*vVc2pbd(vvRBpr}M)WY{{!dV5K$rQMrwQQ-Yia0&!Tf5fom(w}HmYDyc zbc@C+`ij)nv;l7eQ@(94U1&7IR62!+4)4Q}sgfMrY{N3z$ObWNn8pJt?H&TC32837 zqX=7_5zf`SSnmzdVV)m{Qk>3I?SF5F5Xah66<}`5Z*qc6$UK*~Ir-0Ih_htHnK7D9 zVkVP9IT7RhRs-i6U3B9VVge)Qx2*N3ov_B4hB7Y-CroM~Y!z3DKP_vbL^v=Bx`^lHSQ zJsiDj9y@~$cIvF$$qFUVXtuDuxr6PkI_kBSUgK@c%eZT94)enViiuFug{g>v!+xU3 zm93ts;y%vyN}EQ8Y4&&QpyZ>`R-xC>;n^D&aB;hfEA1hoVT5qlMJW|wCL5v_@gM*4Dr#{a0c%_6^{gw$f|r_|qnkwzWyEl8M31W!<(Y%bpu!5N}mM8x~z>W2VLv zg%;=M^iFmko8HwlRGyJ6Bm=zp&?0V~sYo+8ZqvDh06n{#PWG%A?{P7VCsdurRC!8;`j$eGTVhOayWcA3k~%sm?BXpZ{HSPyP*hnih%B8qh~1!ftPfoz?)ScLJ;ii`eW(SY;*_LpK!( zK)q5{V2XbzOlL*Hb|I@kw%Vvo=ujKd?I1B4q7aNQTPa~k;k2ey$ky2ArKu)?Cu5?# z8#>=_B^BeoeN#9vokfmOGEP))!}C6rn4(aly~#>(1K@x2B4llzj#cup6HmTy27mtC z8k(8_B-TmV!N|!Z32h0g@&cZmh+^B)Ls+p1E@#R*U!3IOcFC3}1=}2q^P8({%($$x z3Bm3{m4&Nps*x?hkXo=JjTlpyS;%8{xrF_PW^w%Z0&Y3BfNCLyWWY^+h!KNlw|k0w z$j^od%5!X(8Ec_eWdN06h0{u!lH&nUYoN8-K->xt43d}`Mkw(hVFm2n^z9V3m&=`- zlYYIv@@Y&%W$zQCKG1E;Trfh2K|eybX*vlVXgY*VTVq-d-x4z>)d~aNt4R!a_9{@? zm{d+m@^dp>LPN>~TD<}4tsy@5+*y3)^ktlDw9tyk3j{I|wUgQ#G+L{MZN8uR!5_f; zUn4N}%OCjp@u50qqOPrP>=1P=F=GK-UK`ohC_<~Yi$S+z*Te%awU+3ennk8WU6H+i zbGf$TSN|W=cB6tfz4<|$dg-iy1;fKTEe4i%%#>4tUk3!lN|B|qwvXCQ)N_p}JRjoL z#Tmr84Enhu()of(1r&s9aVwGz1vEkp5Dy3PE@J^V6-IdTzBKN?qljeCF~e6)VDMgY zQAK3PI$eyqJ%kmuvK+N0Q%pB{h9pkCRL8IU)?>KXEuou8V*kxIsrAl%#P%JE-7}c3 zRJ1OyuC1vk+T7fbCXfu&+WM*kE!VbPEl1OY*mkMSVAZ$UHG}8cY1YOxO95HVxKM8v zIeZ8MmrhhJt)mx+)0^BgQ+z6yb};sxvQN*hzbBw#QG*f+MqJ}$(9>xZ z0W7i?<`)FaH`g|>v9%!peCzGE;lnq4rfz_#>%c;<`bRJRrw^fj<*Y?^cxi~w#?sV@ zIcleGI*#H)--$$V8d0l-pfrVeX9a`xi+T;JKEf2D>Jn1Z3rG$-=s)r2NSyi%Qr#U@ z^3>({z7+p$5Qq5hCp-A`YKV)C9y(oy?nYv0$ovpYQE*O6gPECWF;w+t)4)`>r->OR z+;dY;4*OUvq>(G+&@x)dM6uLHI3U4xp==Tgc^w{_z8Us0pXlOfHH%U{L?EYR=7!np z@Kq+?BL$HJBYHgPjm-PT>&iVjCmlo_;rW*?;t#)k5w%#J!(u%oMpt{tsz@GcWUAP* ztTh_fe4hMFI8jH#Lh3LY^*VxtiC4LSabl6#UN*JE$uhDFHVh!(B`uBlKM73H$$B=A zL&s-u{O$$ZbbJbj4_7c(&7+vhXuLm_NQ+TOj5>%=LlAX=Az7RNF>N5iqcRfkUk0gI zm9qt5`Wz+(Mo|adt#u??L-Yq3qy}9~5iGKY)@9ks1H$xl`qKD3by5+cUf)_=VyG<3 z5QDBJH7x`=K%W{3ZQ6Di_z6a4G@4&hXrX~l^JZ-)XMi{|!8+r7be)_R7)Q1TY-uz) z=tN0e-mK#b&z-@^s~fn=`%MD~f%HCN5F9(j$H>GZ{L>%!0lfcT|C?96CZBxtF?{If z2&U}7Gn}_agyOYtp5W6N9!s2i;NT(ITyQ-SNKs2>ziK1(8YmeIFtf0rqUZdD3%ZV; zX0zE6g3}}(c<{}*?@e#S?|$@SvIiiTV&>k+#SJOHPGHJS@yZ9u>0WqwMneRnAu1{0 zo+F3RPN&gHrpNa$9r+0$=zMM9$t)14h0BsH!VtGj1Mj@Iib}ByPo){stC#my;>y`m8gcd^8joq?S~XGs?&`3j+^V$<1DJFO6f|Hdn?2 z`{z)mJ~F}UJlVJS#>_mEZ9!hvuI@Qa`iaRU;~2{}p~W^|B8e;Q5!O4A1__341GIq% zi@hOJSO^1Db4gS}AWs>93}O{dCC_y|@Bi!G zXX?zae+cz+rFRH^yNr~vgr0l)UC3wXMgR>dQK8il4&bZXgWbT}s~H9I$> zK0Oyo&$-~XTMcE4agpYuA?{e5LcW-jV3B5;94#Jjk|@pCkG!V(2xu6}$_R`!!+M)r zm_;3PdFDZxZz1b4i7~E@rf+P0~esSe}+c2HZ5_7-ueC!5=(!4qM1z z#NVaPilNJ#j${SsDp^HLDDuIX^0}B03QB1(IyXNr`g(hN(+uxibP8FnFdZVB&LN~< zQ^K@lq`4IcO$Cgb)JbJBnBF&yhu?cA-t&;kHRn@;y?kfLng;;2|J_-sQ4#}G3*)B8AUX8wQ63mZmNbY5=N|) zm?>wc;M7AD2J`31PO_!Pb5HFUXAsLnW4kj%y%%G3yM<3a`V^kusbjM@WFyf4o%1N8 z*(8~rO!V4;sS{5+SAVhg-0q^?G@4%bxe^BPD!l!#b zC0@SKP+Fk*g*oZXKK45w!KWX2M7foGGV_Sj-7izyJMX$%Yvsjr=TWcix zwYN5&TGWoAu%d~+R59XV51D9)gXJP_I=CM@i4;a*+FAEf+-*6S;>4V#0^5fSDo;iO z94yB8?g#ea*x{nOdipG-4WOpdIqQ!`=+&AwjhJT+A9YerJUE`hG~HCYF~W!c^cg(z zQUXzF9-ZL`Q`H&VcE@elZPf7Om%ogDr!NmC0!8KNacIO%L|TF3W3eJE?OT-h)yBq_ zCjIDtMAvSuKeBerpwwFC{o;I;+()RjAZWp2&rerc;c6_hc}H2xG}hnq`4Cf685D9B zWyIHVVPyr4)&PTk0>Ow;H3Wm+G}G^82`m@Vc;~StEa%cHROu1OT7z~deEu}Soc1z1 z1IRLR{izjBY!m^#VI-->W~+(;d@M^G+9ck1Wr58&&=Y$fdkmx zuHpQpi#T}GVf^NY|MT@=fxi-jU+b5XwT!PFoB+&{;~lP9n+RX}$Tp_~nI ze0f$zn8i#I1^O3zb9*)p7}uDT)nDsmwDUAy)I; zP}SaZd4iLD+VxF1?WhfbEeLBhy?Eg&{^0SKutAf+L`n<@?G%#o(PH(>9I=k7epS7y zrfs?>8CV6cfY&gTsUEMN`2yJ{OCU8tz_e?1 zS>LHY+(oUmid?pYe0mWEA;yDk&{I2*X0mJ&7|Xnd;i6U$By#~zG#;ND=)NlWW zYZp1r$g#!~otCXTT6AUS7P0T)cVYjLaP;}law%?_8ZbU4F=L*iSgoVCo>U6mnXDjE znt6b9HiM(bkBc#W>aizfy+N=|J*9zCKVU;9T4pdnOpiH&2#b``_oT_Q$ve|`dobm+ zXmWXX11oArCnc0;Solao9F~!2Q?(8laT+y~z|?#mciedxhZaky zE8S-I0`u~9A*FtL)vRPJ+ttuLV~~b8zuUxxW*a-wnOVUU@|@r_Ws&an`!HXf!PP6P zD9udcKmO+bdp%g-@5Il(o`i&ce|w95UiavLuGKY*~O}C|(c) zwk0@lYzRsmUnLg-a^d(QiJV*nNPq|s0?`f_#D?JjK^RGnBtii!i3~~5vL$gD&T!Fe zXJ2}&?yjn?>frnS>chEklq%?Sb9~NAV!&no={o<@)m`uZE$`PaqbtRWaZ9V#eTc(( zQR?viP$@TH z*(J2x5w?3H3`SW*Rt|QdpkGFIPNGJ_&2%2w_82Em0zd!B6*TP))Jof$x&w-^u`K9p2w{&-R!vccz(j_5X(yWB!(xG$+NJ>kCbbt5Ww|dXH z-hbeG&S%g3v~%V)&&NDt=JkBd%){G*j^`0<-$|p#PnaG&-&pSFZrGrNrR~Xo@gip&NbUyz%_}^;LV4$qN{maI6t*W zQ?7n3)o$Y^cf!}&kZ-$Y?lQe874DbyJuJ$(S=SyVr#wlBQlu8?9=7xO5yfq>_L#Z- z6x!kTmZ^}1ME-Z?p*ajXIk`Ug-q1ZFJXE=Rw+Hlxx5bojv2HC!bXw$nI*` zf~21mPETID)*BeEZ2F65D$_#Q8LwpgbW&u0ScC*$yoFt4$DvMS5t`~(ASbK~s!h3^ zK-c9(Y>Q=)3yq-;)JP;Z0Ba&&N5`g4x%>QZKzv88+b4<1t>(&%bdT*v!W!O6hWmw* z_(;FET53&3O9-7$tOiCi=mhZB4?y=@6T%c)c36{uAhpiQSdyCbK`8omUg(n~M{(J@ zGYIfLIk&PZQ~s3h0R`eeg~osqzkejm%beho#=cNT!z+EcS+@ZO=)M9DokLbI$9Ln$ zFN>wbiG>xpj9MSpz7^;ly(9}RHyb#*pj6IU?pD*|vEDHdYu@zFOE?UXz z@32PXX z*6i6zQL{8=tkW);uQmLfWFZJT{z*I&!H?eiR=zJ~8pEPqU-GV)1|+!hzURwsG(L~h z(Y_6&(J%V!cHWT(10h8cQza*B;H$PzeM$P-!X%8OVtoAK&$&>6{f0#a6E%a``}Q<`{QfhxWSg zpa%dnm}FJx#=LAQ>BSEVW|cda_zstIf5koA4K%8n39_ny+S3m_@5bj>#sz5k5A;q@ z8VxE;EiE+#b)Px`;tlvBl83;0Vob)N*C3*HQ+%hDF6ee10snD!TU;M@|5}e_cSN#F zE4D^lvNUX;zH`79Rrw6@miz*t{i6oCE_1Khm-pSg-hx*bLs@fk?k*PwWB}j#@IJfG zMWrc;P20}!>xLEu@NYEFmKc}Y>Y~I7s50Q~^1M_tplQT&ap2fo|8<5f_##}-pPc=ixQBa~D?TCdDEwXaZoI9Nvh3_s5I(=*l6TJgd zhTNdsO%I3$>lKENWE-~m-9P8rb@$onBhdVg*QdgC>^Y{+M#JsXt;KAiIQyQTdGPpD zZoQ5ITU@7t$Hdo46+-&`=>wdTF$NwEf3i(NSwzy0l4q*1Hv}B?!@4?wO(6>L+5MXe zrR*#8CZ3S$Zy_LMp+%uNx4fTEpIsPAIRU5z#SS-cLJUyyQ`{6n4Ic2Z>5yYpTh^!! zjN%&oe{?`1#211W++4{;$eFh5n|pmodS4=4-qw63-`K~wjQt>2ner;!{Olh4F0qJ$ ztX;)YKwN}cGVO?Ilz@^pLZ;i!ILoBW5*f z95WcYU9PjZj{y-rTb1)rprsl_3Q?C<;J0faW;JXJRd~m?TGw&9U|Zjb2=PjjVEEiH zDaL&#(uc#7dUL7ZhPDi zaw}vd*Q@Sw`{=XUkME_Ac()cY+CzSMe79$>W2n=atepmF{S=Xt+o#nUk>t2KaXK`2 zN(Hh;^Rab~0W7u^ml~F-sj{0Y%q>mBLQ#LzS3Kt4!q;AxUaJc2DSPGV(c#rV`m{Q1 zk-$wPtxU_QFdR|RGjU1?I?MPBDitRLMh%ffA5@jl1(FO03=w4RcyVUrH}Uji=1C*z z2?1mjY5S^N36vL+EDr_Gt%(qykaR7xK78(YK!x(^bW&&lA?o6-Q(wm$MX=UQ3z6&4 zxw9FK=go{5s#bY+-4(>DV@4kYsA^(m1s0e!UbA_!sJAU2TtZ%H_ax7fPf0ARx5KyU z^lbq#Zw=85SAySF+1)3<%#LehfcpyfXwg~eg^?KmKJ_S^=-LjvM`gSq-n}+tuFcSE};i@s`k4Bd++rf9Md(n1D-R4s4^0k!-z6N`Wld<`O`$ZgPMP-AM?`Z zO#1y9_&nt}4*V_kws*p)9*SFHf6)4nq|xM2p%e;kTe>%m+=hC;2&&$JQnuJxno>pl z+?H0nFEkb;W&av@DqwV9SbAptS?)|j*vG;t1LBg&u zoNSW9HuygsYCx!d?Z@|ZznrPb%i~MFOrY&aoK&eIcKqyKccR(tdyvUd-Gk_lsOJ03(Hg-3+L80{5=93OMi5$|KK%vxQ99IDCF4eW24rOenS`PPPY%|j^6l@4l5J{`_gh3}79<@mK}{TvVy(7H z!R>KUNvBDc7_wB|64%RM2}i8v1y2Ya(evwlt3EsN_t#8}!vqBQ$7LP240rw8B3VE* zAuRjkXYX~ZQ_oewz^KPDcb(BLJJ z;|cenrdpjh<}yAfBaUs*iGg*3(L7wQlldh>AGN1JM^OrVnrU6-lr#SLIld>32Q=4L z5v*%gbP^|!_*K#S%NiT;%Cgf}0#eH5No&a(z(Tcwp6xOFQ2E7(%RZ6L)9>do=^sPj zIj8~e>@Wg1uRF$x4nkgv7e_d0>2&lnsnp_~@5CsK_H2VwrVTSb}?& z+t~YI1kn&mh5^byQXuP{Qd!&o-g=o$&J7=Aj`nzV*%5u@KlG#UO))Gh1BI3uS|o8K z%+r>A!U75$N+YFt2!8YBY@s&p`mzIdiGUA3#CV$hJX9P&q)-sjpYR&h84SCP4|Kq& z%r;!O;H8#f9I9FQy+2Fvhp%tU$Cq=PPy2NtwAoiC1C1CreXO=3rq;`dCnIIA^{=v5 zd_;FgpMGf$u%KW7@(1H5NW*7WM_A`B^p5CzUTGmJPxK%I#?}k989&Uey<#PlE{c4! zL)}eY0714l2on{EwT7P1I>|mtSfhUulSe??PB?%fKO z`HCb^sCVr}C83afz1nk{mn?;t-pO7Zn$nP?I3WC5OBv$Zo;eh~sQ}uqFRRvq=Y)Q| zl`vAs3F{Yia4!Ydv>yk6yv+f7U9y`w(F{?FvB5!C6&)cfcX!)UpvSug`&pwPys^L& zv=6C6^wxDvQ@aJaqvmBPJzG#PCz__^A_=-0(>Av{gJ=)~T^;u3D!EMU#!?(8#?O9G zFK5}<@7kn~01ggYMovonwSUE40Ct?=I57BC$_nSf&5?)W9qb+w7bY;FP9hIT*0F#q zK-Mw&N-HC{wZG`JQ&5hI+3K!=eTDRi4hvlF^`I_j_bpxGh-{IR`Y`3iQ=&G|J-MB` zXTa`7z|KD2yJI2N+{(2(yQgv7a7EW*!eT{3P8=`>%jhT76-zmBF&>jyELsSzQd6N| z4885wioR9w(3@^Uq5F4amHz5A8y`@L8XpvBWP0C{670IqA5R>4D=j5+#mmmKlC#hx z+EQzIZupXF#GU!?PD@&kJ2gzqe*c!Cg!oXzUe+GV^I)KNs98|xd)$u$J0gygk(iO{>kMjC4R{ko zl`jZ9&7V^NWQ4!>k!5W4$302(LG3T=X_`>+9kO=7ih(SlL1u_eKC!(dG~ao`le;pv zpe_0i`}^)$SfZDibNzhN?BztN{hm%vo0l>E<~KFw)z5T~Jb_1-L3g%Dq8AbTn`p!8 z^e>yWG69dU*uhoXl!hd0a)ad5al@Dsbfdtx^uf&WQ*5?rWbz2{(|dBKgL9YjX+~fV z^u|=!t32uxuNN1dn`d(z&`6!ltcZ_;TcitX^Mw3o2GmP>UKw5)io~QJxve4JtJYgH zUAA#zJ?njvosH1nhtqd)uoi zh>m{w(7hGzvKJ@Av|GA$~ z7=_50P5GDUc|u|S>r$O!sUJ=aCz}MbCj&KSwX1R|axn@cin3830#fE zwZt7#ve;*QYF>tndLA%^P_y$AjcNt0zLkrO}!6IDbH|E z$TTR93*qI?X~3sKwF*1UEmGwcF(q7&4#tu39f<7eOHL!>7tv@@ z$NSkNMkX?d%%&JSFmPnpn8ZkIs+y{=mxyS6VOqO!CDVhQt|&qu`Hsj*pemKg<=>Qp z&WQIF0iX^lR1x#=Mw5CA_JAw6hkJsK zSNE8El*W`%of(^%TnmNi@{(YCxi?59$|eUldp;*SrC8x2JQs%V4Gp`LTdU}fi}m0I zvnl=VDanN)p~(&CIRTqILK`knwHXi9!W7BE%%1ZGL-Yvvz+Di^dLnqwo)te!!N;aJ zd?paNF!TLM-AjM+`F@0`Db zu;V+F`Ntq+CtlZC6JH?%I%0}jiux4uTYz=16EaW`U&J%A?|Im1>P(6Vu`l4Ba3oDg zLrPQd^CJlB_2`Fr&1-6!ZaEK|ILlUbWczZoZ;T}YS>Bf?!``1xM4ixUH$M+cPq3Ek zX$W30lQhU{w2Ce)1uT^^I3_`Oa8k1gyOlRS-zPF8dvS|s^ozonu^!qDxbw_n>vMWUTzT3a9(&?T1+z|H3e3x{$2T z@aK#l12E71S(xiVxb5uk6N&LY;Nnwq5f42mo@plzP#4rAs@a*D?>%d0;R>+~cij^j zlSdSCHu_n(VFR>#slDBT@>Rc1wnoYi#m;pOPLQw?dB&TKDQDVnDICs@Xk1x)D z)(BO>vBmX1vj?<=vk9FSmj!8I-XhfD%F9)!S_R>1*xIy z4sW)_W-U09of+0kE-raP7H!rh!l;0RYZ)CaVd}o*+q)QBsGaKVMI%(AI(uu2u*H`q zbz4Jwy#K8v=;u8_tq!T#*ttvT=6Zv^U{jMpPq8~)?ap+td;I#&Hhvf9vdf3 z1J;5hR}vREN!B`YwE*na`yDO?vDRBOS2X}&%v6w zH&F*KxauseJifg0vbFMkOhs$DIp&w5CUT$ZG@|S694h3josc$CQj}3vp3->ot#uB* zm$qJ@j4}>GZn_lG6xH!KL{O_b4=k*YVlH~BK&)xU0YXcnSU8A18F4;XZ4I)des=0} zWd`UtLsNP!UoxZ@$iI$_dXG_=1~%gD7Hs7?bds|1HxwFa5JGXC}wTr$^HpK2qYDvY3vj^N^L9fn&a&D~8YuOT{ zz7M-8W!|eP7U%ah(1;;u(2WP&3bgPVb1EU&3DWj8mjqf)7HfXyr?-;0iaegzLsqVi z)QCkO=HE#JAKw5;nn5TPU*G%P4R+4G7!hFQK^wHDDS&UQ6YN}AV1*?iCiSHKuh9k6 z@I`$Np0n^AH5)c$kFzTxH>g9lCxai8uCHVG-&k}MDcgqvN4t|T+13J>CUMOiBsbW~ z!ifCf-Qv=<vIidj(xJMaXi$^o@6%CgG)DaS)56?2%h^{?q4^6_iis&v3-KP+{ z@WSU-c2~nb>HCkO(+XtlBksd$~Nb{qPJ?oPUh(W1k2Y$_+L?}Ne z4_t%rr>IpsW9wo|=kYFJ+hqvE|O-!W)+ngZiI>0l3mOO>sU~B*ygP-iw z<5M2yA+_Lz|F~~_cQ`Ft5fKoqi&{)GD_>BI zKiLt7Bs0e6EY&an=>i@n9W|H+!8*-;@_$tP0`j-K{|Dr6RsEkv{)YwqGOeGgebccd zyfChsf32B*ImGujoqb>eNMqy0BaIt#?{s_%pnsj+U{<ZxV^VB<^fsXe9BsAu49U z^-b5KoSy%2q&P14=rZd23pe*aE;B_d#?I~74GQ=p8nx0Jvt8Ma_C?a)u15kVn<1PF>q@4bXjL{t>?RYavDHI#r5I)oww zL7G4UgeoF6B$OnSl)1d$H*5ZY`DND3+_hK<_vW6n&p!L^v-h)~b6=X>yD11c3IPB> z@b;~14*-BC3II4?9N-1d{K&KK1wRh@+EX#|w@NiTu_ za622C7y>{=5DDg<*$w$%W55<(7IKO`A zdLK9C0OT6tk9Dv~jPx@6wsqXi*e_Yf&TZeyDeM0H3?bSo#s%?>d+WpPJE_KXuI#ad(Ua=tBO`%<5|f)trgzwLQ}4K14aO-`y+=LtQmT;VOw`k>9Vm3>)cGe} zQ)kBR<_}(2xP_bGC5M&;n`Fjv0ErJP>9V!GY6WAqbXPJq$;9*Xc)n-qM|GH-p8zo6 z-Z)?tO%5RIFD@L~;sk(zCO=Z1pCi%G`c_vo>az|;!(h>i@J9cbLelrm|HyCkUN|50DOG=?u#@fSecfnwFhsz+{Y z^8;Lc7ltJKiiKtU@1;z$3&Ex@dQ3MnPZ0vQPjUf(gUF939<0LqU(3|C>SJ+f;qN7? zH+Lie-s6PNY=R0sg~_@J4(epcEcuu!Bi$7gPBP%K!NlU=apxmpz0=Zuea8qDpLqev zDqDg$wt7Crsfm3E;4(O*qM~CJ&VJ~58N5Z{sYzhq*Hcnqt1}nmHuTuq`%3OE-$17# zwJ^g*TcA{&7CXkExPaNAqcz^sbzK9;QH+xeo~TzB=jGYh$&URtV`OxKetso^VjIl+ z*ahcHa85s2{1_{|GjL^G4?O4F$PSXb@;5DqjI4?Rq9j3q(|gA`_kZ8<<7uUptdD_A z=6wB3%Y}u$zE3?`Tv6RY^KcFJ#dYjFcMBl$EpP?@{BC{_hVIzJ0Z!gOo;^=tr{#QF zIC`J|yNtW%UHGHAG)P*H&1n!v#4iuuovLo^K+o>~ChWS*md3)*fS*SNfVbl2 zLf~9Y?a8Ug11&LlVHE2m0Q!wv2Qe{{$QBMhk4t~nVfux;DS#yK>nUs{LuRhV6E?Qa zy2*1M2yt_BdwO_ZirhO*bY)d&3(s)<*w`~H@b(TBbM@xUseKbLqe^ZI0)RZGkn>(k zi#PB#?46Q>QWQsvTfXG1DyXfa_j%H?@=HA-;D5O`xsXqQq`^qflZ%`CVi)~E;8Q(c zbW3I;Ipj&wHFL})@G_KGAGjhK#@_GRhKVoL$(M}alVfC`*#f5;Wrn1T3Y!cHgIY$} zoHD;O1h(_mZ)}M-Gj-p13L$0gtUWo7^HEAET9fo{YALaE0S*)%E4|kn0uIKa;>(TwnNKeK z{1{qxirBq>@uHfir}+W!;)N997O)X$Y=30p5pW<`<4-1Ta5@0c;`~$ojr)^-M^n&p z-qwGc!4E(?FBC-YtH96B{XBS=Mcmy^tzW1#M=#KYp||kN;2UfdSCrda2%B_ze^U34s1GPL@Z-dIjdvz#vZ0@?k=lEd z7yaeSQMP)-wvXV3D-g9cj@&*kb-_Uq8S%}&yWNrP z&$nyp2akKKRLew)luQdN9pM0nXz)UBf;3vuE`0d@XWHtRV`*ury4$d#kppOlOge+o zF1&vA2(YNiH=Oisww+#?0-t&?sBj)B#|Ho+IoF$CBA3~WOFK~+w%KC@JDS2Sm zyWf!SP4%69mkbP)m8uvM<3;bEEZ^1O0+fhv71XK_!1*k{-RR*hq(puDKw?97$2vog09uLbqwy#*1n?Rc0 zmw7jgM~11b%oUqtm(H zrocJS&Hi`;P45$hskDN}sUJ%PdYCf(xuCabetzj;aZ?)CQ^ax;a zENoxHS+E<4(uY3FUU;0#0hk?3)Z0A|Yji2Ii&*DNc#id39F1N5QkPlY5&V6P-F0hfP&)dMbQ2yc>_6UTi{>HWt!@+`b0u^o8FI z7#k@jj5(vN9RO5+JvDjkaGLD@%*5i?=?9eN{QQFBL(7}RBDKE+|57A?sB%+#Mr$L5 zo{_2hICx?`i!{3P^hq;sRKr5X&DB@RtQraKV42ue-zLZ8c?Xip`?$B;DshquysCS)s`0aUJfJv*K&wHgJXUJ`}XL zk<>V_Uh4pZv>B810YEoGVa@S#leh1#88*0JSU4p#?I#lgdnSk!aICZK59R z7?3fc*^2!6?BLCSGV%z4;Sd^VzK+WXTlQ6-UF^fDz-S+^sw_l-v@^ z*zRMG9?2$=H!>3(*!Ofu+lh1L11vtWxPJ4tpLUJ#xjoOZ1;f4bvy1J=R|Z0@v8?&; zq_`zUdRX^*D6SwdLzi@oJt4c?G_|%f24UANDV5&DNknF}FDOK^{v=)(zLt-Xn_Z^P zsEMZ4%p|<^4ndQ%mUWwjTPwJ`L(^|D7=>-k1M;udS1vMa4y3UwiewfH1F#2PX2Uv~6&Tf`ctsXU3Izz83O&>~@s>)uG0~?{WqHB9SsHj6PbQ38UviTDw4ICM>AyyK!41GA#$P* z6{VQQk8(3Uh=R1&+AVZ2v^UH;^x=eZBPn8#*Pyeep1d~w)(pAI_{KDqDV zU{+@uS-sw}-9&cQu669+xS9gWZl4ahsz2iI5HDchz0RJ{SN~*dh2nxL6j_RND1Lab zC|aneDe~9@lzxtq<3n~;}tiuISk+Y@|8@r!C8*U^mn2@)T z&MSEDt(bw?pw=DdYvVkkHm30VlHs(my7QptSYpJr4?5I=Yehm8pJFxJ?WBmXAtnQt z8PXZF8ZtCBOAlU~D6_w0(`=n8azFg_gJ{1qVa%WDsrs5eWu>jktp0J0^!ODtcA_3- zv8{Z2)_ut!BMOMp<=60>V9+2XEB@aui$7QGkj}3{~IwT_rIv1MLy5R za@PG*%s4q>q4QR4@xWzUtzr@Sf2-C6nh)R25mjQ@qx!Gx34z9nLpVYW}+Srw{KO4vTv~ zYo_Xo9WJ)?6pIOT)kS5T9l4WT^9SW&N4_#KJZNdO7s1p}P2#4v`aVl}Pif{`F^7** z3=k0Oetmtc_ZlhqipXa?t(iTkC6oPaT=)uY`_gqjCVv||9i2H@nd4~CTK23B;xgBR zqpL2ZeK1CA>C%^X_R=I2-Q_S%4shrZ8DS*4fpssO(%Pqb=il+GTl5s39Oi4daL$5T z&|;4e39XcGYzH5S5*GmjgxFye)bz&qB}EbDIN|R+l%^zVNuDSVC)?RrD#wLvE7#dK z4pOY4o$K8*4}Q<0X>4$Le_O-O-2Se=9orJ8yZ-$>XnOGF-WDZEYn8LI-@1!Q9JYTd zB1c@;@dA*w-;b=kqUw=UGJgX3W}~*H*!$b1suuI8^80)AjynB~tFx?ty&S&d*=5tG z$N0nMM7?m~!Yfx+J%lfE#dnUMD6H3z_Cax8kuKv6i2N;vElBrEOa4X)XaA+APaYai zlBqx_otg?#aAn8%f2-tQ5#(;g_Su!gXPNv;fP^hj_NPqEO*hr8Z6-g-1b8{gO9l<&}>+^^NOxUN^v8i zMS^iMKSl_VJ#pdnvVHo0)2EHl3ZDA*OetYxI}s@#G+k7XEYuZlUa?}R;B!Sjsm8wO z2AFN`kL7o4-5E)hzq#-4z1ku|k&|>Rma=g=GvYz(o@fhd0gZawV+a4lxwt*!x2`n3 zjp$h8102rlJT+ng{vB6nA?CS+)$Dk2xhrR7W1bhq`&>w>iT`YPvK*zL2BaIgkqVUT ztu#tk2>P?857we0QXy#xGAC*J_D2v~gYkPcejkobl#XtiCvG>FBE1|3H?tS2(lVL{ z1DkDWv;;)-yDEfWc_9IcY;qh z^fwwo;&#o$^1kb`jd^&9{Bq4QGt315K&ZHiD8_}&KTpj2&i)=@{*v0+-u<;7Z3r!l6@HFLizDvO634Ak=^)lf*{u@8_J96+JyZIZyLyP7}4 zjIF|7dxc@VW4;@0Ij<8Cn|(R0Rh;*z+0a1BY3IPwdeNq0Y;lD#Gz%vffC;gx(f701 ziCxbV6Keq{O6)N%F+CJo_h?>V7oR*ory^Y+;|2#>9CBK2={{~pitE*_e~Mu~nH#=D z@A3aC_VsAU*}`Y5Zt`mC;Pl;Xa)>e>N^+l`2ZGneXwk+bh=n4_CgNG6UaI!J3p z3FlfM&bo{8(PoXSsF^)hlm8!wq(_OSU(Xk#pkAr}0Aoe>CpIJXc_>ee9uNBVe)e@E z-#^-mfC`@LnGPra`i^qMfPJ0gq za!%ZZYoBO37Z_;_T?~SH0WFI(eXW(%?@k!gbwHc7i}XTV_8AFf{pr|2(>tExq8aBNZlFU)S}#5Q zKu_r2552u*bch6vUwdyGfAGI&!|m19_omtQE2yN%fO?75DdM2JHF1Zrfc|D0@mo%Z zhAmoh-J2EmPULQfpaa1ysL3R`tROusqRK9oUdgLxeoNHicj8gC3G|7(5MxZ@c4h+~ z)2}_7EM~><*53|u81rVTA2w8!MxU|_v0Uw62)~oup#3+h?Pq`FTK=sS{UWOoRSP2-9tEo$!(q9|DxTB5vztkeg_MeIu`&;^|JYs2OV5(ptqLrhux8 zpX$DfeiZj}T~+S)o@FVBbAY&SMKPKcV;8woa9m+oP$QyY(ea+%j;<3=wT;&ZYI-*s z?G>l^mf3Yv&%-XyV8doFVwF>-cJ^*uL_Xwgn!1!CWw`r`I-J~UB=-}X2((nBb z=3T9>B~!`_N?Eec60=9QO(h&wlH-E(uPK%{Pi<6YmX-@=ARgcB%8$C+nq#A{7%{{G zQ-sKlGTu6Ve$=(Okpk4rYb)QWwYWc-Y0&Ljz8E7TOr2Rru)%^6nn#e54{@QQWW@N7 zGov7EQS?51W5QLi6s>OzkHc7OaR#$d~V`NVTewOMk!b+}<07;c^D7 zW_`5?1QH?w0fm4#Du^LGcElxCqPPcFAU0}YlgeW7bSxWTCuAztmnfry_db3| z{qgq$I`bdiuY%A@z}T#(!uV-YCJj4a5L6FO#;!-tf!P&5#9i#EQq%(~iZ}Vr?xlb@ z+u-m=L*Mv%+=sH9^mZ%2c7uy z?A`wR7a%5TS@6*x1(BU$scj2iPfOzuO`+VHbkK*Fez;$cm3*!|0v(jyDiosK-|Fbg zw}O+0W`gZBl8{;dWtL`-L_aO#Q$<^7R#X*eGZ58UcxlweyD3iTKKNQ&n> zO5Vl2lkygSN9<#@glj9= z@l&}h4X%XKKp!?7#HILrKT_L2ByW`+cJRt5u_bDERZL@S(#dkut))J0 zdQYQ)naC%g7zc3x@h+uxFjpJhb9&^A+xm3D5iA`5vAAIDo;R&B+;X(2K-Re+eSDG5 z7%>@!JZAc<66Gw>m8WHqopM0w(ZY_7u6KLEcfG@?YF7!GyZ{uH=M?V_h-~bxzyz24 zXQKHefm?Qyg(#NH_RNI^i$4p~j;Ex(fb)_i#REZ7|Han(Lx}qDKhSQ<56YmTCs^nZ z0L;c{nCgAxS2vtyllQwu8vIqz)p(%`xyGI<{~^QaIzdw4^~rGB!~aEwHJ)^tU9A_8 z)0+UnVb2Ar1_6L~+#T&%^S`*VSJzt`qBr)@^MC>W+c06EFrp!dR8a~G2K)H{eptJ^ zr$UwV4uQ|~v%<$8nk$k``xQpO0*frVskteK%{Xc>{|gzuHJ$Z8n61cf&BQmdy07lc zK=K#v^=D@o0|wepDj$aL%wx?C3S_~HHt6#yH6d(4ztVsI1C@`7O0QwrEc>^$nWS+{ z58EGIUER%mk9Nzl6h8Xh6p=R4%>}&GgG9482%goYPVq7UGcHov9)%>0*BrJSTV;qn z8|KuUPVgEHHjvAa3D#}_h*_Z~=w3jfV{y$0&uZ6AOR#fjVu0nByai{r*kSt zQ?65rBi6>;(X`Rb(cQkNLJ%f{lm*?VWMI3URB)90dm;Bq^F+5wVH1zd1&&3Tu}8-} z$j=U!22NZfYCLUpx|wt#7<&k8UaMic{3or~vSH`C)VD{af_Cf=PPE2HiltlLluSP< zkIdfn$S;O7{1yiY;zW@KeB__YQV=)Su~zRp*F8ceE99=|4M%S5*>J+aK(7v~|0ol& zgb4SXh>mDHlfPfUd^EUIdceqA_8Hl*dXj??r&q=A+?EtT0ASPwzXJIXmraxz@>ldNuQeyM?>u zw#9nG%7+97MZ&;ooUBi-VP@7Qyqe+scbee`#VR+3O9>b_`InA8AGJV5Zyo{`%ty$4 z$XYBLEC(0fofG;w&XqZJUCjq9fN;)eLYdXJ0qIUFosv=AA6>^D2L|`%9n~~srB3I0 zeRU#9yqxteBP<$`3z98Y;_h(YX=zDa!iN*S?)sV1^ZS&2Nb0aoJ&zh~ljlO*E%)8+ ze~eD6%H9J@IN%bY~%IEj?1%Ff;|GI`G_c>LPg(56c*!9!TJ*?;AZy(`2 z>CjSSgZ2CwLcBD4ji@s_`I1mpHZn-JcgDc%F9*D8-VsAFpdo)o&o=ZvbOm^85+*-S zQMFaqwe$bci~(v7Cu6}XvT$RwQM zuPgR1hyFHmcJ3;;{O1yc<)qqDnhbO>kuR(uyr5Q;Qp#p$r!dmh#0Gp|@9_gs^f5-) z#6;%Hehnbml<=)=sT@(E8exVhJirNLX)|UnOl@+6ZvJt(p2fPGMv=J1hmAAt`P zhw4M)@nC3FCTCA76&-269asC4Agh$I&;A_^)nvN#i~q zjk;`e+PhC07Ya3g5+=!U{_UNs>SZtQlBF(9q0)Jy-Cz84 z#hl`Lt5;ePJ@b2C(&wdH9Na+G7s^zU8^JR8)|2|Dn+d$~h~cS|XJHzhsC3SmMFTSd z7H{s*;{q-9c*7Z#G*>G~A+QSpN9IpY5aRBb@ix#N`OfK(VmQP2KSM&`tp)J-=^zSczfWQq$5iLK-nc4XyAQ=62ZSAOt+HdSg?iR-UFBmc2uO8sNWa_A!Xki7+?QvCRL zM`6rWTw*n*zu8UIGXx~MAQHg2;~i)h*7tJ9Git!1)Qm7<@oehlC9;6lJU2G3&@FiV ztSYx&O@N5Bg?PV~vdt3gTwG`UA&@r!hz9>|NUCy7)cekUs6cT{()V7;AU+17ny&)3 zrGIOw)sy+K&Mzc&=R6Kc5s)kL@-BPXN_dZL>3(3Mr5qAC)3wE&tIy#NCS0YxWKdFMdJrBZB-lgECId)hhF(4faXy8^|Il-L`xa zok1I$pz&{Tc3+g60dN*_HQ2`S$GkN0Dd^rUm(B%BdB&Gg+NQ&hyZ;0?OK`&7T}6>z zLmSe^)P`w~ChH}RZKAZeGuR5MuXV?EpT*3`XOY~;KaQKdK*j9o0G5S_dWqa5I_H|U z>Zn)f&}s+v@9uH)blWk;6ro+GAQfJ~rv_wwyRx@hj6c8D(sjjXrde%$bX~pP>)Ma` z>YBz!?wN=|rLo%MLKW>vnz@eJk$3BnOHG8aLpNWq7g*`mb><`g95w#By~*0>RH=S+ zoM4SP27I(NsLlD~S9a#?h^cZDC7>cWd>CBNVR^ou84}O%@qd5Td|oqxt$I{muKS+8 zz%%K847VKCpFU>6#rx8CPH2;;$DQq+HLe_Od_N2IQ3zE&S*!DY^gw2=CkR6iQqNcD>cU{XK}GT8Q)U9o2D}&{7Ru;_|It$m9g5c z%M1liHcga$YC7+S+_p`N_;o@bj96xL?kdoOCHiPdDy#lep`$bD!WO4FXVyMHen`eY z?G5^@GwtR3(fXt>>7=Ttps7ZI5~JyR`fn!LWUBOnUm6JgK5Kl|(y{Ys)!TnIFEY{G zpdlb|&6y{Avu_Ec5m8mQ^rTcmG?6evOrBCWM%7K_!hm7t|Ri8q$o&+K5Qh=llPhmXHxnJ7?Fuzsm|KWHTH zKfUg^KUo!>!>-!u19H0c0Ua7Behwc~P5cZ`YeG{?MRtyjV$~QY`Lq6%=#z&08TuXL zSlfp9(A^(VkgEr5tt-w~i^Nsd2dW*ge9;&JJ?C=H8HUPFuPeNCV6As~uFTrUkZ{!n zdQkO?t2&kVgN|$elq`M0GRK zq?P<;y17R^KTD-8_vIXE1>SH1y)1D649KXd8+u-0jA)s6cx_KCNh=Bn z$G=5>EBqcL5@$Qd zGfv1=9L}Ic2NTm1hQ@G`P4R%{OI}Dr`$OBADXpLiogvs$`?DSv2N;DCoam}M@2WGf zvkS*181_V2R^O#8Ba83@B?Av?rt%$Xu)L4WrCw!;T}NuFsy{1gbAeJjuWrsrD_RK9 z-=*IMt|%7mYDlwqvm>v3=L5M$hdAl_)CRj`kwv}jmFXQ%xsOwOCi)^milX<-fi(5Q zr<+e+ER7}&lj+R^4#5D2Pq3nN#!^|;QP?5=XtB#>XLmxVg@K;+P7KuJ$`VY-ijAF* znHF>z-#LD?YCI-~V=d4A7U>4(pah9Vv+qc$f5W1^UsJB`Pn=fIxv*86au-KT9)Nis ztqvy!HBz4?!B^@gAG$TQV)F1$t#*_9QffB^3(s3{epUX>)vOXx7}8NS?)r>thB8Op z-0J*;>(#3CZ!%H6d39}P;aZ9y?@9BMRn>ui4C~xh9wz)tkg>R{k+_mZsA^pu9GD58 zH*-KS3BJRa_ySameba@SG9zZ<^}Vr>kcF+^(|z9fu0yb9)3H(dr1%niEpvYOM7TFz@OWtYOASX0wD%lEFQ z(X8&%d($s2r{nPKT>2;ZG(2KR&*w2tJCho-;skmTL0y-zESj*yGgR6LuMrORI+5JQ z-(TgJBr|=%6i1&yH&`A)Jgf1fS|*|k(l#v;v+_E6PbTt>yaZ|+{AP2WcRf7xMW;h= zUj4-L+JE^YsVm;G`kJ4KdT@PbqIXIyf1?k59Hb9qs`@&I>jzd}?9%n$EPd-?AGh%{ zF>{Z|*@p90C&EqN z1R~9J1)qWlUX$1fF0L0MwU>Fk43+urw~Sipy6ySHbn_6(H=r$Z*bfnzF+-sXr=~Ub zO8PQKERRbAIJvKYwc$Ktlo0~hR^dpu)Aw}Teb*`Y>3DxXE~1$G=PahB>RfK13BCDu zny=qN6{o%K0_syDJrG}KX1bhZW9NB!I9|(@sLhA!I)`E3?$!+gfL~D}Ar!L%()lyr z-ad{^T+*Wwn1iKs34w=VEPEM9s`qw~*PgL>zsaie-W#;tudl630cU4Pu51V?HD=m7 zg86S_wPf_nwim^SkU7;f0lB}(n2f9Br!5HL{Znd$cxopPSupdnGcWA&g6^+ygZht^ zp{MhC;<6R~To;V?k5%*vgH~SoNz49#_TuOoa>$;AsJLAn_Hw3Pxr1;#!9>9z`JY6;} zahqF`TWV;o8K2H`sxkvfGglU;b19awl|^|s9vH~NO-1eot8rU)cn8NiS_pH_WcYc$ zl(6kv`_zZI{h}M=_(?82EvEZqB=*s!+$G(rL|*deojBL5YJ*}G>fbo7nKL|mzWz*c z{zuA0zDVUvCFJ||>Ex-#zckuE=Evwynr8OQy&|O&j3-jh+D1#4;4lTuOuvP*jpwN5 zUh76P4EZL>Hh8Xxf=^GCOpTX>1h+%iLgG4!+c&iYeru}GC^n0b~SdQ(O`4i3h z-cUWFr>@ORAi(cW|>DGbe?g^#Ew4IS|YIdND8AkZ#F7q$h zzlp9XW3^B*zbn}Pk~Dp`K~24Ds$)&MXVfHHYqOE6dTLl^qItW+yWX<349g0){P9bc zlMh;JC_<2dI0q_=aR;B=Hpz)Hg=V3`NMw2I>>Q&miWY=+QzI_hjX>Gz{FU52%dt8E z`$|V_^Ud=uji)#ae3Lg5%Ct%^ps?J=ws&K*)DL)5L#PTuyZn4TKed$WJ$V||yB{|3 zipQY>Mow>cGZW%VAimTqeRU1~TAs#xq7+!{Y9=;~_Hd+q)=|&fkHF~wNR}uuH_h{q zk)=V;S`en$f9F$fV0+d^A3 z`-`YO=bw$|E}BgqB8k<_mRqb?Wlj9*;V3j34cV5`*CX|(+t*47^-yblpx-z*C}E;e zrtGeXTdBM}quOOYExlRci~L8fl3!Wo!xSbK(jWJp0#mn5s+_)uNp zW{cJ(xDut%Kv^r>WTGlhc9ZYDg!?B;XlD)}W0|7qU$flQt<}%i;v=Y7!T735M-D`} zOk6WzDw99${rD*t`w(55c-q(D3qNf|5ox=u&US=~gb?z&!fu<(U}R<{$lXVEyd>-W z8rTzcQ3|oGh%mI@-Wh6;dwCbvJ}m_ixRP(*Gz+nV_SyS9TK{+`$MR6|V~)ie`d8jm zM<@m(?D9|(<+*c1tcb^WjpMWajY`(ZjgW{~igk9-gQO{#*N)Q@8_(lWQ#W{gOr03f zIEcTaA<8k1Pt&{w6+NKMHRp2DyI4Y&a0B&3YIEG6>bcGBKh@Z(9%$8i;3u`vZ0f%; zdl5wqqmY-pKZviY16?Y4rq;#03pnH-kCs3BcxpYmHVjs)dky}erEtcoW;@CiVW^Nh zeq8apH z;+S-?kiM!WpD5a`!``mio=bg=wBuuR}M-S(u;j#GwLCJUp?h5P8Pq_w4DvN z_dvvPEwuesIq^zZKDhY(6^2O}^J<7LvC%Qpbw2em@JgFH9Q+V-(8!RQAV|*>4BPlP zq+DxjxW|n&r~@-vh|#UM!dX2`Y;=s(B!g0SfxxaFm~nA)&N^=?R@EfKsozvVLEPTE zw3*x1BX^{D*z-zb$l^+klVk?*9>rD$d5uuq(4%`A7JLLO&E71w^1i&4q~;DU2kX#B zJ{R1X4Kc9sXsNEfUBPPeUEYKJ1heFG-;=;?~DYH?XJjd?!;y{0n^0wdj0mOI;(a}?? z`|#w#Yqf{LwH4IDZ(|kLpAT>2YyN6mwt{K7#Wmqt=Zqci@R{iN&A-UStIp6~d7m5u zuh|XTdAA3e1?R0bpc6_!(-LDXz7iq{l}Q!7>_+?|H(|8~1TxP|^jMV&iEd>OK20YY z&AK$Ay}U;)Pl)R3i35CMKj!a1{9A%rm$tzSRSYUJqbj6>O7S9n@C^4;&+>bftOs#h#B zr8KrY+0HViqtD;yPG_KAsn*WiRV~T*M6l;tRON2bl|X+)jE9*QPYdN}T`pA@*)9IH zOCy~D`k*t_^U$AVRnZpp+D8ozKEtL%YmFmek}aRw<|_*}TsKUInD zWVRIT`+N6|w&_;+sdL#iapBuE-nhASf2o>BbAP*Lf(+pDz}i9T^qZP9J|5QxaZfxy z23}XUyr1UIHTYy!T_mN}oMGSSg|0$&Nud9zSVbcLoFa#a+tlTd&PSol-^_Y%uGGy~ zishO}{ag#L_d$;OaT}J$^mqDBAvKeJU_=kZ7{q;5@&2n6Kk^{ww1SJsHxwtdRH0KY ztvG1JS3tZq%T+b9*x&xVyp6d&Ps_T0i9gLnf|H&<07vk~u5}R5PF440yv>f383G4E z(uw560pwo%xZ?M{RaDB_ceC*4#aN&FQ(5l6er-JU*cC*+t(NwX#eVNVDR~BOK&;1<10lqI%yreS-EbdjC3THdXOi& zo=SD__=h`@X*kmB-?yCB+#i1WlYj6!ZhPT3dQizB?l%+Dui7M@j+b|XL^oWGor+tM z+|4NfNs5c%&#+v^3SOGeEHWoul6opl5 zc)rF&e7an*7yHvL(sipHwaar_P*J1o8cZNdgTl8v8TeVJeQ$c_U1*sKO*x=F&02oq zD8%*sPhVpzV)d?Ws7}rMip`Q!Xl6SCZ#QPW^1`;oHUxXlcd|>Rd{nr;CJsL|LqBsa zKW&chL1MMAqE%0s?OUmdVWDh`YA!HGY z2XLSqW5|RQXV|Vx;;;R+qf?DHKbm)tJIxkR8Fi=AFAu(2x&!0k>F@ZcPvp;Q$Cs&0 zU8*g%EVYsPoDs4LV=ONkSzc)zV0~L+CBn)}WF^M>o#D3xka_6hFB}TMni9{4lv<5Y zg{9wJ5zvY1o#Z;-_4%g~0)}eH0#8rj2Uf(>lkgMg3f_(hVuF2`ts{T0e{`+n!P`BA zxrw`C&8DY7HjL=AdM0*wEsnHJZ*Y6^5C1Z3 z3Z|mH5QjEg)7@6iH(dxG3gYcCa5Q$j8sG-^uFs-u)Uzena2CT4g_IKdW`D>Vlg;|s z5q25PdPTSNb1#dF-Ia*%M?_>o1obpFPk^Bjz^e>CjK^io+*+!On?cL<({I{)*R?fr zu!nn?bG9xpcx-dZv!k7#QGFmUqNXLwZ~R__2!;>I{6Ia$gK;M`i+r|n$qe+EedQE4 zm&aRS>^CBD?s67-kn`BfuqpfHbKR*6HeV&o)KBPjRy-t$q3^rYgX4d?(u5We zA1}T4Ue2;+mza4tv_y)(QS2Jw3o0+RdunMaOngj4^{lYXBSnkprP3ZxbYT#~Nh)0Q zF_+j2N{uE@$fc?GQllmc4%r5(i)>VMZ#_}px-|#oDkd#1HEa^wv7_rjpq5zq2A{b# zqW6r;LSKZQPlly8nD#8%y4pX8E2rrfxv5W`GHTsO*6-DgoUdQ2c{ng99;Uh(nvH$2 z*WvuLtZABgSLC!R^F9@Bo)zs={Sjuu|q;hwEPiA5Hv$R z^waOl2+Gk98Mg~oCA<9asjF!UG3N1H`Eid;~iq$#zrv{z{)iWVU^cVKES0pIBF%;N}+1nB--^#%l zA8B75on-i1c0eMQdw5nOmWzg51l3P;jCV?ElNFJP?XJw(=o=YIh*~92Y#4p zh5n076fFzRGvOVOsft?soNRwfXN+GdMcnR=SY@IKmFw4eoG?OaT-jb{zHM4K<$g!Q zd0#JB3E3yO5K=n=F1OIGM|FsdFCo)1iJVJ}^E#TW2xVf8paoCc^b^Ph=wOjPli&cK zJV+Kju)Ln|biQrUC?M0wf+ubMId&Z}Qe7nkO%*Rby5d)0GlhtAWNS(ch6Ukht;SF^^Cn<#g`nCbfTL+d(@(!_t?3atA zgk7PbQo@QOyuW+kbt>d_$mNlIklmMlVI|e_RofuAle74bUuJ4kIbo08NkI0L&c87$ zMOaG8$Qj&Qc_I9uz(?o6`&deF=g;PY-=fcR&XjfW)I!417#k_?8ZGl4FHDw5ZLe^2 z${(KA^p)wqXjt~fvR?Ut2VJ=2yMBI@EQ4MR_3(rgDR92GXM&W z=zQqE!THOmYATmvVFA@)9``r4{D=PBy)jBh;xhJa2)6H?($|6vEu9Om@$2{4U1~gZ zHO-HLP8kwer=^iC73JW&69(vDL5SJh_7KY%k}6n{pO{e_3-u;#-nEMDR;#8%E#b3I zRi(X-ZISqF$@{Mmu$6MqXRS9?KWbNg7s?c4;SrIPH|h-``4XQpY*`zS?U;-Tgk7K% z_iIRQ!#{V51+O=%dcyg6%QoqOAzm3qmT_g1OOsM1rd5f}F8gn@;|JJk6B{nx=r3bjN2RO zCBlNnpQqFW6me>?w$=KZt%Kwf*Ji_#a`-3)bt7lcm^O!Bu)Q??Fsq}0l*U^5E#Pkd z^e>A;^#Pc%f2VJ>x60>QV7$GdlWsc8mx|>tG?r%dM%h?wIXA@n@g!Hq1|n`V9Cp-J z-Zf9%1otHSqnpS7IT%&MFiCa1r}ldl}l+v?@w@Q!V^d!6ahQCkDORGJ&Kjz-g3OdS2g}|ck-O| z6h@qHR^B?=-+SvHaQn}#;-+vIsp52o24KKe0QvUv>J*R-!I#qkJ@KZ$3EvAZvLk# ze$jo_Qgr_`AaHp}jDJ$cO@6? z$H+Yn%1}k9xq!iLt-7xI&u8osKUi2@{8MGPc&Ko$4}~m zHWMsK7e8W>D?%#;4UVQuq}sa{x)n%|xPd#?!_vY;InJYqAfe;mn<+K!RxDpJowIsKe2}o{vYhUXH-*P z*X|uaItVHVf;1b7QWWVO1Z))P9Te$=fb`x3R0M1kL7IqQD4`|P5IQ2g1`-HFdI_D- zl5jTv`@Y9{#yIE08RLD&`{8{~K5a^}la;;KnrqJAb~ z`~5aaQA?Q{_aIAk1;rQ#_wveKE6ej=S25pTQ{{n-zRTg@-{67&Yyx1RMp7}T@Dp7q zaJ?1Mg@?B&Hy&t?4y)=PmssvxY!SBeh571EY>BzYCA!F+U{KL{ zPqmk&BD8Myk>?`*R1Mds>=cE=q?&fV4ikZ4d5986Chdo)5|8_juMSVtX*4t~U7^uG z^b174YB=&gG4{U{1qvu1b}touKPA&C=EWEp`8cIMcJaZ&vISa-Eue#M2~(hlbpn9| zk;=13^s16Tgt<=lMP7d9NPpChRq)PBb-SET%RIQfK4)73Q--U;NqG33&1n=9q4~K)w9ABh|L0P5MG2lFgpyX;WucqCp7mU|H6aIya6kKfV)+0 z03K%{RwuU6-yS`16L*`tX{K`H&0EB5bmaxuY+e0=0h#yH$%6kcth4#CrcJ=LS|M~ABzO!C==QhzBzY&MrtnM0!1j)Mgp1fS!*x=S> zU^xZSNaTNjw6fyd3joRGX@(V=Et$XSz0-2_S;T!GvZ1v5l%YxGye8d8YP!g^B@L1| zgqV;qR~_uR-whi_!xfHjtHopW9)q_Idtv(5B_jT4%tO@9G#wV60R%(a&kijCW{Aqu zD)+G+C^_!Wbj!WB-kcopiMiL2c#zR~>(;sy#_(r1$lnjz7N=j@$$~&4U+6-D|L(j- zsn&9E@Rd31;+i}`BJp$~MYi`dHmf6sro$GXk&D4k`XoTn*>0}A6>ZF6TQ>C3HXe9BbS8{ot_H#dz36qd`R74{0Hk7wGXi+KAw(_gWJ zE`U<6D!9KUC@nk)kGQqR=uyP``QK--9Ilwy*s!ek0^rMi4svaG8)Op%y$FEbAXQ%> z(5X+8>la}6|Ib5Jt$T)FS3b9(tgWZAJgBAFIm5?US@rPUM zSzqwMAXwVXL`4sF%9=$f7}ZRiC%7s2IpI~=(q#q}>)S$>;vLhF)054+zi z1m-~0EzaB=|DFC=j9a%WV+fF)n>(A1=%@IN*{E=9J^x4YqR|VaR`Ik3ZE5(p@j&e? zw+*GWe=uRi-9N96yS)7;7OX897ULV&<-%e$*xP|#mK$-`a(Kg zRnSw=W#G>c^^vkcB-dL_70mhA$D31+Jmi)f;ki4}$yC{Dp1m z>r7CTxK)yJ^Abnk&TWH3?6+P_@qVeV2~UI?`0$$lPk)F0%GaxDk7sUD&*&Nf23sGL zji`Z-eFJos3moj?xzG;BIkBq<@fGmld|*TZt6d}Z#UbS^k)NKvbkSb!U5-OU7mqVeO_tP|2F7WDGYO){ruaYHT}Ki?x?b?Va$JfdlAZ?&aGRg;#bTdw4^ z6k5lZT3fe1hi;!7ypCs)3j?iHhe>2yXw*nXZG?7wg@8m-N}pSIfBc%*J17N-n72@I zZ*&6G*?>vacBK#{SUJM#CI^gzMI@ZcNbGd+YW*n?SQ_4&rv&ogeX(P|lQBwc1{pOF z-D>3&VPNN7W&tDEiTMLfb|Cb$>+TQer+)z0u^dTywb%;sg^@_sI4Pvuy^V&e{Zau` zWkE6WiM?-n?gvq*U2@&bqh(_k%aMO5y6q%$La*CThVgaW8bF za0`f%6U{XOw7?}&z-hNi2@9J(B#idnMCDuM2mnj|j0E2Jp9H?JhcAy}2;w{uyAu^| z0HfTqc^7ypPV^o-M>L9RdCnT!TW-!mZ931*KnHx}7T|=LL6Na{4|qT5X4q4Cl1}Mo zU_Sik@#FmIdi$?KAQJy?c4$-r7-b2$YJcSmDm5oFI_BZhGsblMPLd|XHV`}gj^TlA z?$~gPq!HBc8l+ExcNy$-Fr7}=ug=_e;l+&EA_?x~{z(MY>9BFX2ezwrAOa5A8Fq4f z16zjYRKUO1Qdmf<=H9;bp6|q^k_KlU@Rf|wun_fb>-5fDi&wcHycf25p0>xn|2DuG zx73k)M<%NfTPvYTY?;8T4tXpMSY!mO<@zm+4fawn#1?^CTE|}Hmf;oojYMK*%eLYFXB}@jjg6< zEC8WxHYc?T@n8qBUMmW0`xVYK8875&`9JO`7OKRW{IiUK=ti=Xg0Bptjz(K4s8Jqj zdd`Nc(Y&YQaK$JPQG9-MxLHB zQ6!>OS7GnwiLJWbF8tJ>4pVgj+}hDgocrv?T6n{l4+IOyzz)=9OMS8E+Y9p#xBWc) zlGCHzYrVmJY+-eAO}{cuxK=>fEunJ6z)>^WGP|UD8CNd-(n?{-wgZFyf> z?lvp;ga1Mz^Pk)jS5@l&uO#wsRiiWX_`|TcK*;XZUJL)A+}+!b3Y4eZ)?K^TV=#$l z2)Y3_RG{Rg2`5{4tQWo30zfV%eAZ1j8+(Pd#FYWKw{x=l-||_o&(xd5DWSY<=Xb_BskGcC(%B>Kza5~Inx)Zj0;(PX}v_sBOOrj3|b58ej;0Gl0Epe z^EkXy#cwCeO)04tM>SPrpQ-YjN4G~r{`M4 zg*tSH(A%*RkZE!&&w)-0GWJ-ccwH<88+W4N5z(MthvmIQqYc|&H03(kj#}gd>EE)M zs+!^tCCMp}M}VXmV`MP;oc84x`%}lg6{)5VYyL1ZLP$hw&PyC&Kml>QOIT+mjWW3w zgTSxP^9`rkUL*_p?k$QxHU@=Ma1m|yV&bnX3a%I64hu&XxsT zQjblBg^MUhLnwq;G0g8 zX&pcI7D_!Om5&g3>7 zv@rMWLR^Xyr?{DwED@;ZF1en^ytef}=3WJP6ok$^5Wj3|*BwSy(D3czuG4rv8-F{| z+sTZ!3xT<_k?lxct3y=$?8w%Qp~i1Wck^u^8t7%E7lp)s%h-L;|6TNWMmDCYS(4Vff`~(tWaZJBFt38q-Jg)Q8~WmMH`5P~FLKQSH3(t;uBY-p^O9 z(-QEv`gUe-)CrpYlE%!}hSS8F<;tej2H zlG5GcTP5!$j>5m{_%(0Dy z2D^F8RAUASSZo&W4^ii>fhlFE8v7l3y$4O$HnkiL32~(DoPE40npY5i6i#YwZS-h-S|iCs898pW6pB@TAFZiH5;u zDpfpR097ijDWg3fxcwM%AuUF50@KJ+RLTEcN;rFM;95r6RQ=^I&3t4>FST$h-C zLM#EBj^MC#n-*L6bw0 zj0};-NkOCzOQD-L8xB*B2`l1ObNe4yZ(eJdX^}KUGhNZa!;UEYUTtZ=8bVe z)W7Z-z+V2g^Wq833)(kaK|)*Qx${xYb6G6LIX9jeubj)3K2!VQ)sw&S@KRx$&HdH&5#>z@eO3R zH~#O4^hvy~%qe=WxSWU+@b)M>S`;|XJ(7#q=R6&E_Uq)Ih2;aR1)-H7DpL2Lgb#zc z(m7yN%!BnpZes4*4O~4VrbA_3BVM9j)_C-Jp919clQH77sVnB+9#9ox=&v#ECmWA* zGe+1aG17I$_b1UeH8(lXHw-fwcpgtX?7kX9R3)_saneUKoW3uwn!hI4(Yn6`&Ij0M z+(qxK26Li2tuhL-sV=LA^}kUCMU87%-kAbp>K*gY7=?TumX)= z+kV2#s_yks;DOCfvL$nDF(8J}dTGg|u~&376b$Pwaz*}Tj)yl2Oa+Bk-~Mz8aYH>D zyP3Z+6R`i$dQ^lzw@4!Hznfr=j~!wPLsfhF;kJB4LbKkvxCFLNC#nAOb%#t`VvNv6 zCrF&4#~y`U<00Z{nSANSCmCARTcJ9KR15EBr!>vc5J~-~(f;*a%tlFy-U;3g5{7CE zS3gfCm)aZ3r}P}Cz@Az>TGdyXAfDP|tQsGWSNZxG43O1NSb+!dkrj$PJP{~5GQjQ`JD z^)kM2X{?X!^1J>QQLcSQ7hd6C8k80MF#zJeR!UYVnhq|M3@PVqoYTc0oBqc z8t9i%kW)Tg>hNJWTB(*Dt}j)#E^uga+YMEv41ao)Gi_xrKdb8zO!65+v9CKBIe|sl zgeb}Py+T~NShal<9TwNle*&0s>U#kyh7{^{0}dwPm?|%*7}9%7%CFZHa{G1_-(tze zv1W@wiC*;Zt)_-8tiQSKGlz=9(m0I8eYUm!e54z7=W7$zhCJ5`Q3U{X*Ro9k=yZ7Qsgev-R zRSInv&D9x-Hqn6LW#TlpQyV!|yzj9Xvw_YDLIu_z`}m7QcH^t@zrm7KpSzyROPH}! zFP@2fkt-pVBe50X?`QJmV$s2!-2mFce33^EFN3?O2^nKB0?UJbWB66>OK$(-z$+oz zPHENxMSqMHqU}`c`L1K`ePIgUQ-oGX+ZdPF57v&5>AwvehPcVa6hf^M;|ed7_OXRm zla=>rBM!i#eQ!K0lb#uS-JPZ6B7NHvt8H2*=tN#Mrb?L^aVPFMVZA?5I$l5O~M zr}79;JiDPj6DheoK4jk^4p7|UKL8%wg5~D7OliVYSQ@XsbCDl&z6IY+304br=Ro-F zf!&&MMAQm4t4jCg1H7NXK|K^ne!b3SN?W7{d}kEc1+llgL!+;@Hcj_Wb_=@6;l3yg z_;peVjDE_njIWep4e-soCnfjJG)>K=3%ro_d8#m|Tty&oFT^dvYo%91-M&ZnTxYo> z1JTT@mvy$+&nR!7aG#^ZIwW|sR{eBtFF_%lC5oyJo~?=qW7J!Qzjcj|{K_S?@0)Y} zVbk#`cx`ETfcL*o8Vyobl(P7!sI3$)nTz0rOHqQlOP2_r1}T0#QIBE<^MeHQ0NbLi zj8fyWRoF?EaYa>JlN#sxxf6Z)1JMUb=n^CL$>bTCM+1LUo1Mbxo0&LA>jXm*qsW6g zYD=~PT``D!k>pmI@ysos-A1Rdg54xhi=WXdUn=5RE1rojZ za8ah=X^m72X^`1Zro9gZ*cTT07^^jg8Ew6@qU{XgA6*bKTi;Atv`{(|H72+qKT^=oLoQ^#fQOA)%O=H(&JJH1?#tuQc-iXu}=JcQKJ;rT&h@b+$+x*3ZGbN@}wNaJ!rL! z$uP|LBk)7Vi0pQlOBgu_I!~OqCzXkeA(P9U=e>`Ewnc)a3at+gIBwjYLD-D(KkR4h zFZxw(PG?l}AHY1QQ`f@IZ>Yj5-_aikfMc30rsuHUtGma;VIupL3z@_R9(4+Mh#7l> zYp6V3$qwXb;daScCcgN+G-HRt#2r3D=P&YVg15!ffkwg0vh;XoeO6u@X?_ab&Zwm9 z<)IFmBRd7?g0Vy~yPu)@L1`d-iS@UH(M6`#DxMG9^$)<1LHFiX=|j z?=m=U@L|p#-?JPQFMl0HqG+H}I9z3G7P}PJGU%Pp-~L=?ItbO97MK~%KjLWFli{6Y07>CXpgwe{XUkJ*U{y?z?-7#7_7$bb=vpx z7pMNx{M@6B`QVx~6BoJ2c~&MGx{|{esXpAut+*C*Wi=r?d~ZOM!^VwIJ{(HoB%nmR zTbnDw#ALUf&gHjI)ce08xWW?F4-B`OBS|>@Y=@jrnL#V{#h5d> zIn?s-vkWcOIl>#3%2UCdr7PF#9W=#u4GVvQX@!2MymYkDVv2?q3k)S zS8tIY~P$iuiqjW_fP*2aWkR^qMtuCelG)>;Kf*T zDy;m-isYbCb@LNGF7v|{e7OKZIpkY?8+LLn5j=-^a3JJpnW5vQe*8CmN(LT0TJn)l z2cHsw{;^Ej?7y~LP7$*w-HGp(sP=m#Prz)7 zo1QolAh9ooUOJ=8QMKH^VqBZfQFqH{M29MkdcZztKv}(cgIVSASsqI){bS~J!|(|l zOJ=Y}O)8A|gr@G0vum)0PK7&Rf0V%5u0Hsz95AVPC}wK#fp?dF?Ct_>&n=^yBm!aa z9O%>kF%XZ`8_i`3`;4KvtZ$-)s^Gx-NzceX(Veqxzzjui#S!^GE zHXQ*8hO$RC47>tnrQ+u(S5Cv3Ks-bvpsoWxIu^XLgGhzv>;9AkCBh@$ye^V*M3vbL zj3H4_!YE*z;kt3CprV+x$(0Pyq?JrExK4PQAjp_qab4gQm2)jtgadFkAP<2h=$gO( znYR;wLsn=3KHix6wwXZT4iCpXJn+#6|l6>+jJBz@Hz2wjW)% zDpVTP8ZbTG{5_wGdg8^(3b7jZz05Myzm>}Uyb_mh-f<&AgPj5urG;_Av4}roqel1vw9b4YL73x_IFuhVR{YV4|6G^X*It zT3l^>C6L`~R=Eeliw}M0X`QyVF*{7veib>DsIsU&nYAm)3T#ZWpe)ASG-Sn>KF36x zF7T7&R@YmDpV{v-n8W#K`*?PrjFu`;+@rN5oYU#rn9tCBC#)5aC%F_lT^9$Fo0LM7 z;nR?lpxv;OLy}=BJuJ~*JJ_Knv37{Y4ydN6V$M;BqI*NErV*48W)Z0aOLldrRI@{B zW(L5x|BX(Yr#m0q_6KNzP`O0jyDk#6x^jewLgdfuDEwtuky<_8 z!J0vMD~!g><7yj^n7Pa$LL|+*K>VZs8J^J+E^|R(u1DclZ+RAC&#Bbwq9t1(mZdtf z5CVp4iN8lYgZ`wcHuuZ)P^JCkUitQgWEh8uC`CjBC3uvBy*1((WlaZ+K4YcHAn` zUWB^^kx)TPP}?@ioCOjyhQ;ykUZW&g3k6@J<{2>;3rC~W^~gn*wy#4h3NZ2q(SDo8f7;p?zU282>YfGFE>$+b#{PvBf`(M;+bOq*vp9sP)^F9CLjQ^_w42 zna5}zB*XH+2rer+yfYFSFPRx#Kfje?{dYJ|YJ^y)xa1f;-)!?2!MzSv zIqe>9IP;5Aiw7AW7wa3V716;B`=^9(wNMoyIR;}k+>e?20HaS+Qc^EeEyf4&FN)oh zRg%H$8|GF~_nK}r>ZSC>9 zt^S=Pz&J!LVbkAJpR=q5?KxT+G*b@T7tE2fwll0q~d3?6O`)$WHZoq9yTcrqHcqca}Sa$+v&V^ zqUPIe$`r+y8>I`JXnGIpmttTZVAZ+|a%t)o9WhysKX3fCvK zTG(9TFeL3n?+k1K?_Vt14(#;rZ}B|SpC?}-O`xkJ(WjC5N0ZQLu$=KXrnA1o+e{ps zcT#x!L>?N?_%$hXTiSFl|J=LHLHL6RipTIb%o0gijbY(4NnGK@#JzUv&{QdI+Zt3^ z-!H_~70JoZp3jn4qe2)(Qhk~GYz;Ok>cuO@Y8BKtRrWA92{qari|{gj9a9TVPaw?a z(;FhmW@-bpYLlJTfkMDdQo~k9{S{7_@G;fj2f_D78dXbJ{tEqydNC#KF}bEE9Fr~+ z(Cqaq3&|uZtP}D?%uZCF@eY##L{APxTGt8=z8tfcclFtwsmoH|Bm_ zkNR_(zjmH@U2n9EWzYWQcV5b-&|T9xBQe8l8B1!sQP53;xL$%P8J&(>c$FePW^YR1 zvg&5b_g(Xd+)Q<~GP(*t|7rvIDr8f*y?=`WZB!6xIuscIq_hhFwWw@2YxwLj6ui8J zhmKNma`b4jeWe0Sd_BuMZ*hzH*y>r@-F$B?DQw!zn>vzb#vu=R$9l0~W$^&?DyTS1 zgSNFf$mb4O>NkM1-vqAq&Dsf=!PMoi{=VwsGj5HqG6aC4#+#>1SB;f|?Jq?VM5`$k zb2+b=^heQ%YWfJ~n+&F--Xuki?*sBS6UDw(UYZmE-`o1A-^`z)H%&WV*$dE4sGg^u z8M>clS;^HWwx>IGS^R(x_Q8O&abD4^d*v?EV`kAjs4ZklvfpC%si+eYNF8xyr^2&< zn+CV9UGQkMmvB7!t?GS?Yk2mP-SNHF=V-@T4?K~hPCNtt>ouxSYjq5%dcgageQ%>N zg&7=to^+$c6kj|h=c4ApTerM8oV66T$;)Mg14wY|qCJ72(mgp^xSnpeG0klbQLScJ z%5m%Ub`ATODyBEKNb!@#XOK$%VMKU%n1`(&rHg4jnz*mhCvMdXO<{`>f$as*cJ6kc zYRqI`O-8;(MUQZnOBm)l80;0P+tFrkMdDk0vRg3X;d|1zQ^&q?yn`B;;5}_)QB)-- z;hCPlP~tIBc7!D2&il%RYwP{dC?I76a_>S$`ra|@|7KmLA~C>qnYEEK%WFY0(SAvi zXQoG?br1Kbw7+g_664xCOc{Zv(3Afu2S`ed&CH3URuiyJI#UyioCzLC|AvI-t!lXW z@Q2(nE046qtl6L>z)%s70Ud88ZNPzT_}iXU*yg^99-m8eg1Y%0PBfLeF~`Z>)^v)F zDvx@(^z{&vK2QQ1gGEKI?rwY_h8n{O>nF=L8#uer@4ma58Sy#W{sG53Hz#U=9beMQ^iH=+gJn3QIbSHli|D$kG1 z`VX~jh24%G^u0=^8kBY)e}R3nyJWn9@r2mYma5Tumgznlx9B@M`qM_VH}u^hreq=( zCb;T3)Qccx80DqOr7gfI!LKPXALEJC9;B(scFB<{l7KQ0Da#4O^Gtv)AmZ$72j4}; zh~-1ebP@IH;@@x@hPY_8hrixoOJDzPC+(f9WL4>-eTxU*Dl{5DNYUGeoQeaYTUp2U zt}{l>XN6oHM;`;#y`c3`Q_Cw<63M7!o#zWs{p^|My1sRbdSd&G@aox^_E2j$%a`bX zT*(-P??cZ|0PWvqPl{E!yEsUVn|Uolw(JHgKeJ%20)tb6v_uIe~B9M!?Hf(EMp#X3|^OQ2S`x;R##D(>YoGHw4`377qUC}u}R7+hz)))PjaKk$pl@3uKJ3ZfcxOxWF=vq6U_=BHG3Z9>+9%f%)le>G5OiJV` z!8lw-n`k+v^-6<&&8B5?W%ad{h8krLezpWGs*RGKeLltfvjRiGFN2OgE&}*dAVB+R z|3tT)QdeCg;|B3W>XLBh?+WdpA069|)}L-<$NuhlKjl>Dx>tZ0WM&7fuU|F&I@46> zftuPj`oUFr^jcTm^E=hUq{_1j!yPOF7ryRed-crW-A}=<5P>L)_}iYI@qg(BayVIW z@U`)V-%mR)u3}_P1q1YYc}(1(2v^U6s?dcSA$2J# zVY@LO1M3#1ogLU^_dtmB_o8olA-@sr)K@{tE>+>8GOwK+F4vEN`h^xZqyTHdu<+o! z8;22-`$Oc9%XeGZ%9HeJeuIn}lLSJa+3aoTWz}~N@PqWguhNklQCwQn@xMZt-&O@PdBh5@j(mQq9t zVbGRnp!IJReUriG@$REsqDS?lARIk#%EaP zQ`JEr0~de^<$Js*&b~FfxUsFC+xsz)DM{?O{y)NjR3zb3gSZz53AbHSLa0n6veMj=5c5cqr734$KTqL0fK+zg4p-_Wpk>)}!y+JLT*m7rK%DTtWx6^H zk~%tc%=JcJd`6toDHVA7bX54ZdN}(nQ1rAHz3y)51Z`k43TRe%AmGiK`R(BSG?2k7 z{sp%+D|T|Oca(A4uZ1J3{4%6;z>e&<>~chb+rbsN3YT^(sE%uV#CgmVuCf+7IQ(*H zV5lN`I#wNLm0iBLaJCwm0T^+Cl6CMKgXj$eIjN6FesnYey22(;pCkt~GZp#|lxowj z|14q`xOgTEEwd^Xt5LrN4VnaVvZm^EK{fG%4bonjZ+?H;s(gP$Fw=+{nMlbxvMqS8#L;ELEg?YKxsAsmT)_vTu zvr-6q-vok%?JRvOSi$8S6{tz|*-TN6|0%6~#0NIzT7=w5H(PBjHPkaOArY8wt4(DL}ie)a=u z&c6kE)e{Lx@QIF#8s}(F;ulOwXL+UjFFPet6+SJkY$C4JrTpVC-et6~8H(j!sR5ljhF^moAdhx=R7kY?Up)@3Go}EqPC$w9BxI-Cn2cfC=%l03 zUrz7+FIoa}cu4KP%*O!@93dg;ANuv*!VLzDP1`%+*cCyEj&|&*w7F48syRGE6P#0k-p!HZvEZkFhpQr|hBGfk8T$krwr?v@E52cD&Q zNR_OKF5c-6&&qR?^)roTm2MU3+1qtS2!IwXRAjxs``0pOhEs+^X!OfTZn8FvYc<{^H~z9o z@feNp@YGWg!B8-Acw2=|5PgKN@YmE3G6w9qfWSu+?b&etpu!)0fL4rRvg=&vT#&)8 zEA6nV&SPh7yMai;hQU3;X?(UCn4TY^o`>L>4@%z|pMfrJuqF*|Q$3`KY2tlBBW*(w zgGO8*#oNT=M{>Di@TDR@c^bp-m6OLT zs!Z)cR2i8bg|2X33IHUk?iEgK($hdE9%*X<4i9_TjNy^@>kd`Eqlu5S&x4$Le3O!T zyfX9Y1QSfOeqJsBe97-+oVWuUm!J`Mb0<})3|VO&kV;J=5OwDni)&)*NGF7;@GnMt zp(k7WnNsVYZr1aAe8!snr*iHaqG=gfnes3MeNh zKc{s?fle={^~u9YfyzpSh6UtC|NGCy^MU6Apb8apOEYI_K0FBhXu0fDotvLecNX{t zo%w!6lIf}{Zey^53VOV*UQoMx$ot`GAG!YcJM-lmk#1gn z&u&CffpU^17%y8)wIw=(LJkV49_ED741&x;BP{vO$^LuUzV<&w3;zudN4)4js+CJ= z&cyOVN2icU_wDQ*r8yt9yvxeaSrur*~+gy1eKY&0y#7Qc#`R_CBQX@~awTencm`#rgF z{%Aa^C+0L0kyH3YOnIvB=<{dNDpO?m_V7uW5-OwHhZOOeDe<;Lj& z3k!LW-$vS);n+KEdVg8BlQK5=k@2Z@XFWhg zJXouAoHa|jMPjY#dwM)TFTP)@t^kVXrW`ORcesCt1LCGB7|CkaZU)?WX!23RA9C zd}FUcq)?{z{HEZhDM(6RCS+VAi8Ro7a*|!`DA~#!E~D%OTFpV~?^aAtdySse{boLADqG|at8)CL zyI-^|^Vck>>HHM~{8~-B2?6nChjl}a^q%#s*uxjJ_tW**x6f0j0&avvSZ zjSv2TSY~J2-p1#~5=E|mU8C*5ZmYA7D#42Vhzh&~J7Tobwbp9oxgx|o@c3L+o4!6N zQ=H>0^9iYOiJ(*D-A~)m(J=p&GLj#1M}3%;-Z$ZA4nQ}bO~DCVjV{GL;bCKbf6S& z?VlO0L14d^+=EO3ecY5WwI!ZM+Y>IV-_23GIcI#`^PBpN-KUzAdk`{EQQv+9)W3A=+OEc-Ek*svD@7mWoCU<%<$`;Tzp#@p6$L*KR7&h=fa$h8=eD1n2c{aCEkP14iH zAgIVj2mojLPB%seS_a=-LhTM+iXBs@^)&lq{=!AZf^!x6ePl!=SGaESs|z0=4n+hb zq!F>7unM0$xLO9@>C`W@+3E!juM5QPUjt|ULzr)i?+rs z&HM1iz9TC~C141+lbh_d!znQK`%i^7@>8>%ycccU4RsX)18Sj>kjBGdxmB4;DO~x| z_eV2lWxPz7}lnW&n8lKqgRUDd`TXgs0FmK-uC*Jl(o?cmG@bmGxi zH;g$tcBFo=|HzwU!XC-LPpnKG(DR$L=C4imgT$){Pb~UI*1M;R!~|=tKU|illHk$m zj%$K8j^>YXq$G?!aCg<%TH!X~c$&25XUI+d-7-0#C`+FmEOEhro`e59NaiQ=qBexS zAN);uZb@E>=b|m*1F*>+;9!XCjE!n8DStaSHz7ctt*A-R;JR0;4@`XY z$rv-Bl z9|ra_4%ii*(bCjS2vuLam&-2Nx)&c93k{4Em!;HVIu4!lgh zj+xrwjU7hGzMk0~!M@&(4F`zXRhRlaM)d6G!{yrB5B6hd>?{Ct@^l8F%>&G$X+mlI znb%M;V}&=Nnn6@HBJ#h;vmhf6FXX zsvJ2%dNQSfKHVf2)R9aM&`ZrDxRxjn;oi}lr1K`gA=-{)3wqS6b^#^?8*dmSs` z5UF!(l`?O*(#42To62w-PZI*pPV;4y?a4tsxihxYtI~Eot#K@o-`u?Swfltkg4yU~ z+tb%^FNMyCMN?NNUeNMjqaeaQe@U1}XstecOExI1bJV3AbI5jBo;@SR4D^_8caa4p zs@zDsEZ(Td4=QSpJYtW-8q8s*Uj@mz1w(^GFNV-v*q`TpLgiVL97}Bz^E-UcZvADH zJQtHyw5zZ2ijB7u1-yE>(6u_9GLYT_ROc_MF(@|rEih6u(>5`=jA~0?zR_`O0D1f* zX@S*TYMqeV2zS-X-DB2q{JBY-Sfore?#^o$oqY+{Xm7iF z)L-j&dKVXEp_t5NF(q%cDuI%`id;|7WS%F&PJcx{dn;=BBlgzfqayvcjH4}eNRU60 z>x{nwu#)vCj8(WWeKR$?l~~_)qiS{B(ewhfY1>fgFa&9R`ud{m6SVUoPxn zLyzH42TY-VE7Nk)4V!<69Y!hbp{E2eV*zjXxwGbD5@3{?09EUat`(nkCfY74W8UfA zfaS-=nJ41PUm2fGi%AImEzxuAxLs?@d~Y^%r!t?0B(^sVlsfmn7GAMQdSJ#N6swm?hMlk30Mc)0D+SKtt z$-bMx4X(d9V~O?Lw5{@N(3g$ATXo-#;a0O8%)e>m^`K`>RB%BE`vK*ceeM2z=OXB! z6+=W3z782E;+e37)sEiHy``Knugfc5@=dde?^ zlG=La%mFolW@Mfi6Q>kqfxfdKb-lEA(1Z$8Ag=suic$zx8@MfJlU$^_^{|lk!Cli7 zhJT3(LJ~P&uA2FX`Jxa4iqjT)LMvqNR~kk-VHW|fZl&x|iz}1c>h^t>CN+GTs#LHs z)*DPC%5z54;+KE%oE`fduu7+-JKfrDA^Sd7nfq<_PWGsaB?vTf37CD-yw)#WM}G|- zZI=@&QGa5*2sH@kc>l|9&p4H3y5R9Nq}0;tRmEMfC6$8&4v4{CrUXYqoC=w$C%2$` za9EhKFo`u$PxLOwNbK>o+YQFte6W^Lxp#3W=&Q3q5}o~qNZ~1F>Sc+&P%SqhP-*Pv zce*?avet6RwTS{@eo2#l{sGM!)J}U3GvX94bo)9T@0N03njGzXgdbyN%0OH8DNlSK zS2q5p{!#XXAvTFQUO7^7wrSKvf(( z=R|aVM0f2kCrfH=kT~6OtPu)?f+D_%H4RtoDT_@KMQGli;ipf7+&uRvmP2$pa^fr_ z4lA$b^s-6L@j@g*;6;kgpY8FMeh&Fw-kRcEPT|BdoA~wjdBf6B-|7HJp6bV3W+BsZ zA9Xo-_YSWQb;cbIMwo>RJALBy`Pd$I7^3~gVcvskD4}4*o***qC=WCpsWi(pXM8^N zoR?O19~=FIXsDXSwFfgX3C@q)h&)!AoY?4lH1F9)mD`kiO4%pl@5rr{_-^vTIn#X6xmqsJx~ktcn`dn<6e>t_+udY=wB*mtZ77orMz{3 z@Uypwg4bJ{fB7oKHfXn*F>Eb*exiy4vh`RB_Qp-Tvkmpat)EG0$$0P8C=0AFPaEJ7 ztDk2dt;rCO`Jv5r;sg7cg&aipJ0FJRg86D&$QpsRWD?Z>O|87haNG*geqi{IbM5)U zw>cQ^g>e<+0 zcE8H&*L(NjGm#8bUx{3EBC_n4?aN_g*oQ`BSa`61Oa^m(Opfj7@_8edHK=R{7WF_q z*n&H`##`Xlz*Ui3E6tw*Xe~TyP@O97?If;{)=Ju`0>`MR_A7UzFV;gjQp?Hj;_eN+ zF^%qNjs&w-rOoi2@iJ^Qba}fc%i7ET*pE&<{PSM^#@2ZOV}IFNKvk9{ekjh$xADUmx>o^fmBz zQx?i?Yi6$Ku4jMyp1ocuL$dk4YXy5!`ra1tN8kEjxM8#K1fg<7VqcpamVs; zw4TS-&K7Bh;u#RYkkjSyxOBfyFeyLtR{30Kc=?<+)}$ta|BOXR3Et6JC1H<^off+r z`WR*~v7Nm8HpWXhe%f;NuOw{syAu1kQ>Mw))_NtdDi{Y#`XAPkqRNM~o`YoE^HLzZ zlAc-<8LMgW#mBuTEgunyk*SkZpcIKzE%f;%1C~qJzyKcuCogkWN->PXvVaAo&x^;z zl$OWx>0j&EaqK+2Ax9Xu^<}Ey%U?9>-t??=tFLK;Y>Mphvx*|Oh8?0fvfhhz%!69L zhv!&H3)$87?0*7w5S_0~yNRCk%RW*O)Yybs)BW{N0x|bfzwSbq-2gWktqs%la6}^Z&$3yNTXVd8Nha zcC|hvHB}KO+Tf+(ceF1qi@~@emvzKtdr-6yM_Nwt?ZS+bNK5U!;2OKx2UIElGn{8S z@O(OR^vzkvCijx5qNZpX}Jn{>) zXHL^48#ADJNWa(Y+y9)YCVjfkm>8u$}+5%M)3)9cOYp(uZzE*7c9OIXLQ zC;l^ji?^CNr=j|(%~BOq%;PtrEZxRcJVI@}QD4W&WSrgLLd~_x$Eb1g=r=O0z0T$I z#9IKDfcTovQ4d3;IXOW=1bq}EPmjWGq1S}HJADE^cO%n zsFNsp;06MzaP-U`M!4Y!MS2HzULRHX7`-kw1N1pffAuQ2c?_~Z!n{uSD@5*oiPam! z7G+C)*kIY=w*F?%eWcw}I}_s1s?5(ApRW4!m0}=dh~U!pb-lyel}wewz0Fe+0yrMY zjX5Zt(d3W+^odAK>UK|MZ|1|$mrN#M)THb=rKRY8>M?sp>S$KeX!ZPkC!c?oY|*+L zmeMQdNK)ED^xgTJEs#h??Ey%a_FtftmJLw9!=No)_qc4rSn;YYTFUih8UN?|;2#29 zM|=ECFu-EJ|451e_8I#hN4J0u z(8mfNAQ(N@_EnobTAO#aGa!z=$Khw3z824IZg=@#V%VOnL-1|lVQFcER-twn`zZ3Uak{mV6k)N^IB)ObX;&0B3#xM>%f@omeRup7m~riMB|a`j8=Nd8AHX8}4CPOOo^nDqmmTes2R`2!}6SMxjBV z%k1-{eJ~S3CbrjxN&AXrRIJ zNoiVG;c#!d;AQz}ezY5`E{cEts;L!R>Hv>08Mtt~pI3^WX}7u0e6A+kR&h(ujtPh5 zd|Fdiz`P!}jWT0rf*`Be?~vmr>>Sod2W?$t?ia?oEx*|`^LvrjANpCQVB(iEp|OWZ zyib?0%n8xp9~7@2y&M)>lL=O=V*3_+buq*8bzP+Vc#i>ZVX;u8Xy2(h!PU9qNKDDe+vxUrnK+gc_mVK)eME6mJfMkDFn@TMhEC;0z>dfx;j>;F} zrhynb(h9SeQ}{cjUr1IAIaXaFTUTp$_$_9y zZ{8BE6lV?#{zl1#8_A~DVwu0_!e_LG31HW$SGSaLtgbKy%X`_xJ@BX-VP{rh+Fw(jr& z{@bHym&4fnuu9b{#k|FdaWZlI3H~wBi`uLEl-&_m_x*_v43Ogf-ihe%>CS_@#Ep6d z9i^X8!wYM(i&cFP4+n4Vh!uT22dZ~urz$~>wbT9E>veHh_(L`GA^}~?Hc^b8lPRb9 zU#Mng-iE5m-CC(zhx_Xy^zdEHs4bIYpV`5ZAkpU~O+-Zdm_PDtMM>AcVc4vf`0B2Z z--tpsxZV8=CM>u}mnx`Uu=~K4m0PWVS-l$hO9&cop@||JXvV*C9@eu#Fn18JpM+v66kdz%m=;qU&?Ye*QNZv4hp%$C((9+N$W0Cx*%|6sf z@}~`}t)F_$x+Bxe&oWlM3G0wdL<90~--&ca%jAT42^(CoZmk%o-`8>&RJT#;--j zxmb$n$2`eI)KZ=A+9Pd@0HC%9n)hD-e~H*c+TE0NZJ*(gUV-n`e~Cn0b6iPnHn?5g z71-+Ud-1CUKNf=m*~?kDjwfg73q+F4Cj{98R(4%Hd@d>$mK>Lb zQ>ei@iSUWpx1XkWWVa1(Tb|;R^w^XGIt$THdx%+^eJ&S^%xnPYiXQ?+% ze)85EoCxeyj2QKdpnKF_hrzyZ#W`+vZ~ke*PBgjOf4G%HX}-Q6($3&(B;e4wA~3VBY32g4oja^XiLN6-JL|j2QlaBdic_g8&+0XWL2;T|F<(>J;KDDe z4Hk4t$uzX%t~vW zzlV#2g7@Md^A-_5b`f>FoaY>H{ZnC`)Fd?7R;5*_W;^Uxbw=&H^s6D}{3~E}=drg(mie3~8`X75g29#3T2z(=7c`xki{opMRaNqLI|*Hfj~7e?O= z{zdr64xjx*-T$)r60=w068v2Nr3_=JO`o(2-IRZ@Q={9xju0L>WLI2pO=ldBY>t*r ztq#EsZVmPg^ZKmRt98KJ(F=BRd8PwGvC*I6_dQOpSPC$8E<|t*@FFPEk)Y@0K0l`1 z%`XeT-h*=T)tswGLbuewmev)~Du02-cTs1mSs_;*h4(138Gd#C-2xp6Jz_(JnxOcb z&x144Kl)I>*EYSY?#}IqD3n5zUXuv}w?<_K*g&`6(Wor{5;cZ=FOU56L@J#FWTyE3 z_|4pCTM*h@s2P=B;m%A3UXS&U8Vd~BTxk^5iTvJKuP?}S`eiLYduPH6rTdoiK1hRx ze(;1}xxUpPWU3~kW%R?pnvRK62kQ)g++?V?9%iT$bF9w~FFp3I$ji zOsiPDYJ?p?(-3EBJ`P{G%~R_&W5rO{LRN4rYv0`YDs!*bprQJ?_oyiVwvZ?%M3G+8 z7Tu3sKye?90Mv$uNR*R`)-R@ywBww7K{-NXxfP(!#{O8!QknQWVUBG|3^VVWxd-fb zPS_gP$!~zY4BMs=#|gf~gZ*?DD6YR8gmeVh8su|+#=r|+5U5N2KZXrmuYaIOqOe^u ziE~y={YdK+*a^7e-;W@#e+0w!sdA8@KJESg~@+MfZ`8S!?Q#f`EYv?>oroEE1(V{z1z=J{?6y&2i|N@IBNqni%1 zMEuW#(ZVe*BU97TXh736Zt{BY*aHBzRm}1RD((ahR0k@ezn$bIs98Kq^YFzJp4l=Gj&^RGdZ8VJO^I4^ zy*|eBBd`s4Z$cJ~>kG&;hdtWayJo^%s?^-<>h546?hFD!zkF0yP%F#PK}m_OovPI> z&np3rOWdiaj@wwkNh^+0APWs|0JNfpzR>vnTiXN)7S8WBrT4>NG?j#Lk~0@h`k z9_Fw>CqSFt`jKRw-B817SMbE=q0I3pLf@(H>>G#OK|aV0gIfn@P3ql!-=cI zr$6n4P3;NL>rLT+&3UJrr^*Wz{06IpPLJ6C5z3;FWA|5#=-y&pdoPxb^TSOBLIc}zG)Rc2W4d9f>9X3$H z;53J6y+BC@NPoa#AK_Agrz08gdH>|GndUDyi{NBEz+L%-&5tfxhkI2c|4eU z1eah0s(ib5w)2Pu5PiOdjuVKcz82?6uKEjj!7siol@07S9~W=!Bc=f4hU0=@_U>Bc zfA48x$A0B>osS_1S>_Xcn%^dBePCzqFBRAiEp$X=Ic%YCCB}MpbAEHpZW(uOp2)H@Go16S?sG5;+f0n7;DX;YdSh^sAz3BUacoi?d)&?+T80+?Jv*U8#+3Vj`aWG z7?p>!o+GeOiC#VLCNf=pg`OEO;54NiUR> zyS)UudH+&NsR!wJt#V`47{~knC>r5wQuvLwU4Y@Ck{EA*!yGpf;c+MK4^y2-|AEc5 zPrKGfVFWmX1y)tro#n1>BZEsdvJR;j=fp(e6B-4;(@;+&O$Q#+6GSP?rjwxo&ovws zH$-9pB3aiyc#arq(Ng{r+vr*e|CUu8p~3qft_Ck&v@oj0waLPA>Y24tcYr&K{KdGP ziY_|?(s1Hq{NdQ%25}ub^c?wQoA-?V;6)Gs*Y%J;!G?oI()ZheU;ln?OEWtE?^gf~ z{r|HbQMn>(PqWUSs-QP;?G=Q@@*?R1@chMqEMd$ z|H^|;L}Vm@G^nxWCdN~K_&vK22>N1Il0h*pS5@Ve-vJ!JQG%Me!cvi%sXQVeXclox z0>nJhBSJs>?=7dNv+#cM*K#a&=>j0=Gom{FB*TVsM*wZDZz?DhNpkZJB%wrSy@B#5 zEjFV!1VPOW@$tP;Lq&ck=OlcJDK6%%6x!gn#5_iLPx^x5`gUUp6dI*l+~Pf>puVYT z(cTS>m)#B2O1WKvOAO93_vNL=Brc%)jfW87c2fVnPaKGw>zdh^PSx$~m%8W~kvyOwNBDlqcj~sTrCWKA zGBSeFS2whG7)dPa%qN!^SuH65kpH8@;!1^pe~a|iddXj79sy8__1S=qCs0*d!~o!v z%RLCp)4JaY2*OnJm;b)+YkS;J|>saUdOu6#c9Cm|)jexZoe>W88bP=i+lnMVZeh267`qp+Kl u*jsxM?Yob^-swETh|a=>`uuYC#VdPTx3a<#0b?@|=#H_)&3Z%Ug#QBT0my6s literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/QuixStreamsMetadata.png b/temp_dir/client-library/images/QuixStreamsMetadata.png new file mode 100644 index 0000000000000000000000000000000000000000..0776ff655293f1550fd766f96631729114adc134 GIT binary patch literal 47302 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 C4d=fA literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/QuixStreamsScaling.png b/temp_dir/client-library/images/QuixStreamsScaling.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd23eac7a014742afaf3e9e332b16c9a55846e1 GIT binary patch literal 33214 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 literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/images/QuixStreamsSplitting.png b/temp_dir/client-library/images/QuixStreamsSplitting.png new file mode 100644 index 0000000000000000000000000000000000000000..b3fe984749dc47b3e9d85060accb9a8423bf722b GIT binary patch literal 44612 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

7dm&`Yib%7=w7igrG%K#{qSu{{DHF z`zQW8kqROf?Lup7AT+a=khTo+ANCYr9*z%T2l^@uBMzlzMJx-fp4L{Vcc zv%)VxX2%YDhFA>=^l%%Cr3+!ZmZHAy!-xl(qyrfVhh@Q=S={HxHt9aHgPMinG(VPy_F}6YwMsAQArlk}CmT51oPa zBSyK0sg)DtqZ!q?{9VtcwHR*QNPu*OeL*KM={o?Wc(gHFv2lQPVsZ&6jVKn^+PDBK zRq*2g!i8g{K+$OW^?b&pD~axRIcbta)C$1iWrD`TFd)IJuxT&qaJW< zhe{LbB`;$^nYU*%U(-X4AX5HT`K=&uJPIfjFAwRAAgh*d$riOIYM9E*!M~8E0X}~r>~-O$83r& zsU$v)0Q+=b0P=HAq74{STJdren>)FCq%2ck~kyr5c>%nn0E8e?vrd{NEs=^q;-t zy_)aox&4JU7RYbC_`P^}17+0NAP+#j z-|{Rh&P%Dxtyg?nk0&SFrQCyHUM<1v(8V6a@(8%J&$CjR^PG(~mdTP~i-L@2J9r;@ z(*;xETm5*6To@)<6u-K7AhOH5`uf@7*wKNWT9mCziQ^J>y{3jSTUo zUDG!^@QWv+FGYC>UwlVGSSL;ALwQhvb<62(LsM2X1?3bFSGH;`iRMK|+uof}YG3WN zC}*X^TQ3uMmU9T>Q~Jyt;5Im(`m&F4{y=IWg~YEu?VOayM}Q18)4t^aj?h^HMeZv0 z$sIh=LxP@#_DwbAsfW0B$DkU@6uh|8h`0V8sR4< zHRQ?tTljta+%l|6P~<+PLC=StK8F2N(7R0utv7GRPG8S}xr1O3Ah ziyOnymjfVurw4m^hsc(b?28rtiBtK>l`N#{7N4&xB!~%qC+@(l)1`qjSjqJ-;z?%8 zlg_z*=6Fv>{LsN4KO@^k6>v5tB0Io#da%hC6zOU%g$^CENu?LS{|s{zVjJw^>hZff&W_ifKHUC?*g| z;{q{E3-$Pka+h_T4Hj>itYB-XUIwJeW==Z6x5$ne8ma;ZV4@Y#1zA|QEOIdNd zwEy7#_oh3%Y%20&cg!i{CT{57u+RbrMr?t)P_O>+Am#-3f{_5?Nx;W2#FFW5t#>QL zDJux`LJkc8WIVdMe-TEgatt%jwLq8?BN+?Rs%w|yA2E(%*BK0$OohR=Dt!2XN*fP6 zt_h~=(8&o>R>0teW?LQLvLivPpA(-2r<1gy_Y zVmjadU4?qEw>9MQyk`XX6rM>TQ1xfPdgA8|en|8eY4ty`S%U33>AVCR)ze`>^jt3# zEeWyuG}FEbXb*faS1$d}Ij-+y&+0>uO^+hw1wXzv!?%(!wm*GS1`r&bRo`y&02Qx! z?Zh88x|4Ds$F*>h z&Zmb{YlQ!6=D?t<4Y=>!vM}Vt_mAGuMCifs$ctB5#uqIhxDk|R1y-vCIhk!;02!-2ZgeXUu6(eBR^`lGqr7#o!Qiyk^UY7?0$h>wm-Zb&mY|UmQBsBbH)6E&#(OCc}Q-Fo-bX* zW<#ll%S&F6_1*{1V`?Ggzo!$q0_2L*}6hkkm9 z0U546#uaKp&OpEQ`aV6>lD{rhq{M+t*^NtCQN~R#43BLplvkEde#8S1hRQHDpgCIA zs~k0NE<6QHBwxRU2mn@-w<9$Xx%I%Hu=ykMYC;HohiC%^1mrLP% z!m*uiyw)M*?n6zjW3|sMnw$TFwhDOUR`$)E_!G`%t<5f^=Fe*mHhL_I9@`U&95`90 zTr3~xoW=qdU%4w0yGpGcAlC>^W2%p$pCXpe@0J545kU0(OYj3&s=LN^z+iT>M&6yq z`THrz(0|(Sgl^CSsrp4TqRZ?&e+xv>ltO?ufc#96)i-n^FKPDiCbJW%Q39#=j@btG zQNrH`#hoKw=t=M#OSgMumF_vo(ZyU)EZ*fML6S=Z^C7kGZeWVKyrI z!J2jJ9583h04TX40U(P9mn%SIWNV~WA)bW>zCUU@3o)Qt1&3h!+Vmoxt|r|Q9{X=F z1kcH`=#(if#)|?8^#lXi|}Ux_|sp)>sW|DdSed4uZvo^8# zB`%j%uEqgRJ0MUQ@?@%TbLm@;d3q+tpRT09rBQ}PW*SQ01sO7Xp92}F@_a4_vuc#R zvn7WUUw!D9lwy@`DNH0C%#wZ~feD?ydxcjk!h(ehSjvgA+#*__Wn;Vlu@wI;GfG@lNmDcMibm zd>{E++A5sy;kjc`j>pm77(e9Qx083Y%b|77Kd3iLP3!Rr7S(Z;;E6MD9T5T8xpt)H zZ(CR)QrMm*u;25PP#*;c54A0njM?O(7X|HmRn;(_r@aGSS9L4gtCXo@VEcz#`O%K* zs!O|VS~vh5)3rbjoTulU4up0%?BMGLV`mGe3XC6e%P=J#wt1K#&*>y#_#R?(gm zH8L*=7a(gdwvu7PGq3&?^{kZBgo91$gm1aLU}g7w2`b^7-#7ExG<%{byxPPl5kx() z0~L3<4g))A5tyB?nsGz$l}%Uw6p%olvPAU5ejc(10Lrc4AKOP*UD75y99Ty0*X!-S zYTHewJ;>Mr1SI@bJ*ZAGx&5YQLOEgg%>j);80i=B`cPfeu`1{_EhWdVOxRzau7esg zTu~;&>1O7HLJ!S~`;RW;YW1CI?s%j};F)&B!>cxn^4>{BGHDpCO?w?qQ=d)>!5iJKc~p*% zcst%6B_<9{sXH#K6S>@mue*@QM)y@sAVg3k+>RYK&tH4R;a>X}^}r&O@qL1wSkVNT zGEOces9!y=5y8n<80jo>d_)1ktH_f5}xcOB{mr}IxMoE{`F#HW>gHntM#H{^kwt6Tk9kb7X5V(BWdT@3>RR z)B0_7o8p_=+fNZA9QDauUB0%3kZ?d|H&u&!;uTN$3g?GdY_kH+I|KW1+luHZ9 z5B#fSDr(UE5d}8hp$cwcFo@*@U=U}fMX*ABSv6@7%;{9piBG^EKK14~t`uhItc2I0 zw-I!U6E652k0SKDx66*SGysxgw3B?AYnh#&TxnhX_t`B*}%b*0KGzF$ZwKg5JA{X_qO+10It1>}pT)QC>%$Fp}5h^E|J^<}u-l zeEvxw1J~(WEh>bj6=nyA0Us35b*ML6skvhyU&;~8Qc*78`TQvSUz{0DX?oFGeK=pu z=Rf(%0P?ZHYEe^CP>Q(+mKH_^>v8}#jhYbtoKyVDOnbYPpbMmkZ^Cnzx9MUKtYPlJ z%Vq5d1*Tw$G9bZ5j>x`5wiF`7v7B^)h8`R{-NLCsj_0lP5KH%-u=6}AjKE6b?zPYF zMGjZOE?pz@1f;mE&P}X(9f3U?Xi|>kP(c7?h!1GL5nT!lP{_V04yzhNSPd{;5My zY@!i2VCQ7i9kew9d>uz%T;cUT*Jv0BTYR@pR~tPGjyAHO@%D_T#!mT)uP%8V?ZF@(vn)lINZqB;<(sQtA0R#TLILn#RV*N#X7DU`xhIZZzgC24?H3Wo_t$HY@Ior8 zTq+eTosYbi!vP8$VFBb=w>~SM&Li!c{r=MxVeGjAtu!bjy{>^pX2iOC+1C)l6l>uA zav`!0dWrpt4N_okO{nC1`UT(sz4?NELrD%!R>N(uuAYds6dGfo+?FaHC^&6OV|C$U zVTlyiiR-*B_l#==sLeD7n$m>C`B`QfiN@`gp8)ptpo?;1&$DCQbBrXysjJdtBY<_9 z3Vgnc&J-5B2s7DAx|a%u&MTih8Af$h4Pju{k8P5`6F;Z-4uYa;#usB)fvC+1R|G6( zRD>F9`Dm4UA57$|_a=XOCNLpLiJgE0)KCb~L!7U*5iSo73Zn3JX`PKoZzHgfc|Fl-c#6(3Vh z-CnUE=^D)8HL$k01fB!jEMY?(B>U=uNxrBRcc#P8*haE$kg;WX`FyE4XCT%^vqZCNY-89?mZ8^hP&S^-W=>NsaEmiGmciIxZOmYwYE!u;P{siaVLaRVeuz z`DLib)1HQDV_POdEMK`14rbAvS7pJ0XdiAt2>sB@ZJO9h(y?;IZuVmBg-74&KR%L_ zzV81Z_VulTN1~@Lq`eTTm1-KQs^W85<(vq4^ZAh?>CFHZIdVqthnHRv-@>X~q)WV* zSmCv>;-%N{^PT->tZmzT_E@+gfzuN2*zSU`)zT7HU^@7%mXvm$rrxuh)DrJAre=g2 z`suCm_R4WYIE|PDp@u%z!0=F%QyW&Dfc-RcLWoi|EMUD$aAkuwEkcpN_v+#-Oy$;`$!Tnl%&R-a<}; zJ5I=IV1H+t?$aV_(FhS$1pXtD>wi%=kjB(ZL)>;kD}I@jKmiA3kBFk}(*99rMB)Hf zVX#+!AY6kD)~04qcshzHjmNR~ZXA$c=lAieVIY7m$V^}NTVG#^ad!MN;<(k78T#q7+FuVT>FyG1RTZ;RWd)b7cuF*AylxDG!ZP3B3~SPK z!qk@w|1|Xe`rdoZj=1+&uc!?sW>d2XlYk`2&Y#AAjLsJ$>ufinh6W>R?VpG4Q zFbtu}>Z41z;|fnTwluZ`FdBX39nI}cMC4#3{4g3%I;nP|n1%2@lYcip9tnBGT?}F2 zMSTP(?4n1j{D%n1Oj7VC4wkzWL<6UF#K_)#xiGr_-Pmm6)y-ABY079P#Gt)C;XjXv zZr7u|{Qp!tD=_Z}SrcjW5fZvlU?ivmML@5(#heLP18Xku@!R7XjF^o~gAUF^e+Yck znLJ~Fh*DjbsG1}s@m|J@z>J?cMR1>v{O;YmF_+Goni=myqic%)>(SBSc+2C`daOTo z1RfB}4&O=L{sQ-+@jCv>OU#wBR#F;V(&shj@!0jMv{SvhM6RzA5r<12X)Z>_P;-jm z;F31sO^LLdUZ=x3MevaBDX5ZF$pgpLZh&w{6$snIUOzJneM$gZ_X`NKLENuk#ogQ6 z+dvDsxw+AgEd<0L6__$wLchJQe-3w+=ckO`t`hZbq908rP;A|8FrlC&Ck~=blEO1Y zFx6JP4|)%hjC_LN^r??s4fh6byB>Bn#JST$_rCsgb)tC=Aen;GcT)J&)^ret zknb{-?Hiog2Y<@?&l@p*6KQMOk%WzSixs{L!x+>ZCDcHs4B+eQ>GyK}^Xm-X9Am@R z?%Dl#xDn>H&xl8S*N1ZI$8`bBO^G6^^IkwP*CR0v$^PE*9d_z=u7&Z9PJpH3KHUZH zs_x*{?+HiyW^b#I*8O@<2R6uxC;c$_E1DkjP};Jnb7v*YOFK2ht59uyKRJYd=K**i z{txuKEhJ1|2g`E{q4!^WVGmpUG|UP6Qkqk&w%+EszOM$eBO?ZPz`>;=gyQ~QVCt?{ z0(oF$8a0Nhs^#hCEP^tSIUpDF^Kd$Fz$YGNf#b#?_3eMCRqv{LWUfINK$_~vJa1-4 zlFD}V6%HO9sdo*i0afujt+m@ZRfthIO6izMp}izG#dMHiz8g}x?%0ENFF)-^fEtNs zG;M6R?iKbtnAhuYaq>qr8)y777>}ezp&|GV zz@-!{tN90{RFg5k@1}2OUFXVPc9bAIh z24tN9NieUBgv=UL2e&2N#5?W{I!AIqU(GmPC^PJ`M+&O`mmA`s zUSa|Sx42-nl81mU$qJF*Wk399V#LG7AloIVmYCS9av!LoGLO7mJwUbeM&&lhz4sg) zfwP!;p~(aZqFtA3@!eASjZ!3*s`hLgj}ErfY^x6tBg_Yyu7P&o6l=Z9$%Q&|Z+O@1 zzj_aGp>xMfzsYAWT^-ux6;L0XnlIT&KZ4FkP=O*tN1#xp{o2YpI1K2cwmA?B=MGI) zBY}WU(0)pGX`phYfvQ)>X+#xnxz)rN)>E_tY!d7h^m418fz740{cHNCICpvA6OhaJ z4SJ=ikc~8M+5bG+rLr}+?dLcu%;uPH43ZtyX>wP3$no8$3Q=3su<6%l)o=;p42+bk zbY7?RkO}Ef8E=SOG{$1J^=Fi!a}4rg`W5>{f!2+F8E6DGmarSDp_mnL4zPLk!Gf(- zGURfT{`<|^r~onIRb37g@>z_Mq1WQec@)mZQVmx{`s8Xq8>$enxf+xvbrT+)8}68z zm*KTg)Sn4ks#x=l^iA8Ga*XZoXjlYLer(+0Nq>Oy80Dn;?9zg#$IhEVc>GME!sBPd zQ-lg`Lc788-PrXjb?>eC#1{|(o8Vx*J{Lj$E%&M2c?M{k&9-U?O{YNJp&1gFIE1V= zsE`?^%&vz)@87^!Gs_I_0X6PHljh#zG-H*nWQB!D7Ux@4hn<+WwTuhV;Nv^m>F}CsJls7e4l7B+ z?0i+LdbX`@*gq?i5MVKl>Cd$Y9SZASScX5aWF)Hr`@KZ0W)@KpMq}i)#fvr5Bgjtd zt-L_e$-J6wFDWAgD!*#oqd=Fz4`aZ^YGc|lSG!DU@>aOeLS@sTYFYi4G|4y6&bgo;=R0x z&YixJs(d2>gwCGCz?16o8CTCanuK75!zy}r;muGFqW zwG)9@kSs39mrBd_P>Q5!vx*lfrvu)QF`r*pHE(JZLp#=D zn*Ok)7rWlp5usdJHqF-$P9Fd}wb>5J;p(dxq{Us1sawELjn*AwwD?4;0gmBP2va;$c7pzL?GVKD` z=8WJDkPQ3Z#TYbVp(7$?r+?q_N1=v12MH?D9)7R5xADVB?h@6|v!gVNf%SJtL_5ac zITpET282tKQB+lU^j286^^V!v~iOsM)xF>7flIiz9Nvdhq@9d9OV#J_S^_Q$cr?gqFKC4^lm8=G&K`2;tGsd_m|x*A5vM5 znB4(24BAx4bruP3k!Dit(o+A?9so(bVLjL`fMd`+QC6*~aD>SA_m^L2aoU*AEO49} z*xci7Blneqqt7W`{?fB(pRlLx!QFLuP2OhgFmu}a7T>|PMSs7+R)|5gz`&-!`-@o~ zA;p;4J2!^p^NSDKStN8`=IGG;1*R5*sN!7 zXRP@ORwwJN!mV!}ZJH^TS2=%Z5wf=IKRjCiq!YS+#dK3RCI|&vC)p$lpff z#mf`&=5=peNzLtOwT7)o8@+3UD6*)w%8Jn4Ts$Zeou7=xYOS1x*>SGTH@ZW zv3$n1e(~taVv3BUF&kPRtXD?9w_V?7Mp|p11G_H{h@y@c=DLU4&k0)FanBl96Sj4S z>@1r9%O)^5V~vhs3o1MQ{IugWo9RgE8U;) z7~X-hJh1+=+CFJdCP3XG+0w|1mFMpY3rIT(*#w9g+u z#N$u^n9zc;dT{QJ6ohA?4ntR_qdC{e3{URIj&yB%%{UrfB zvu$mr{I@y(ziA|6hzl;dufMj|Tf?=`9T3u53rkCJ0&Iz2Mn`quu50ObuF6?AVYtPn zY+=T_X1$$rY7-U7BmJGLsfZ4}pq#(n4C=VDwaVYTX@oWpGAndXW~1v|HL2yHs5rx; zM$u}%L4^83rAkz4QX)<1s({jki=#8niZx;)@Jt&Yw0z^^h!>NWIu~sR&oqCsTh3%a zkY?Uq?+_T*^SY}cEzmSIFWS@Unks5=EVDnkGE-w=Df}g`ub*iuh5CkT(bhLC*_Yc1 zU3W80!*-N1d$W*98ng4MV^<}6vo}lTHq7%ZpX|9!=!bBnnzn{II{Y=1b*5~YJGbp( zo3vj4^>eis+muIBeBW@w&g0HeemtmbXuELyQ}YeW`9zJ6XLMcEe>$6Q`Wy6u_=?x9 z^)fHMm6tfGt3R_l>$o*<{cePUR@rvW^&+I(VyN>TTh%`%T76W&=c~$d+he+kS4X*1 zXi{#jUa~WLeWS}ZBpEbGYs0lrjW_E+_}Qn14Y)hR&19pzT;LJ?SFX zB4u!a%5|-u8L_>GPbz5^RNE}Q!med=rS$}3@oyd$GU)$3g{8^YKPC9sIcxm4^-#r1-7El1vgcsEv5nCEuU2V3lFC9s^e?Uw^bs;D7F zJO-^YQu(b42$m{_cyH@T=IF?oL%UW1ytRAmZBZ$;9@rn)K8}2p8`BhaD9D0tRo=b3 z4uq04hs}GQPr#k{L*Dksx7h1yO;eaQN@stn)O_7-5=$iMmJdA0HKGav6hY7T_#Ww; zDJ=6=BFav}B!9BLI>yC!9&Dtxdr`A3a_`VOC8=P;8td!f6Wm#f_l35*MyxjDH?;)e zM$M0UM(>cDR8Kow<*OQ_Ra%6WW_jX09A$OF;)=w;H#u@fPJXg9H0Zim#t8#Z@D+`r zB1+&IvYfQ&a!WC$d5L@CC>|&jo+t8u09#WWev!_@p?dqFv7AV;&TNV(_|G^ZS&mxp!zvVs=cm&8Tf;FXvaGVsZO}d#{cKV5 zi}bXu9t>cJYMJP*cp`xM%WQ~wf=ma$r?tVmu{>i}Y^#)GF83r-Ntlp5-sM}93aSI< zjhdCf=F?B|=g^@@VG~R2+s_4X_qe5a-bU`r@rg^sw`1Q{Ev(EAZcoZ}0a|8i^KKk8 zuB|YR7+~Ohn5Y4#(hQT_R%x?5lH2-0xsx{UV*bQZ6gDl?H(Tv?FBVe~qwT)&i)wZ>g=H}M$#n5nD<%Du}wu6w&-11)44wL{PRofRX zEJa9#g5VM7NnB1iC z$(dg}H?(MFweuLfCS&O(g`pa2s{AjEtatf6xL&4@Kc4HSblLKt;LvI5Ue0iF>sU!E z^8hF5W<@e9_;SKzJghsinAUrfOsTit_s>}^fXmrbwgCbP|-IYy~Z*qU~fZp8Ua zmH4m(eFSf75T@*K!lu8iJxwm$u&f2?b)lBRndKx?CJ55WfX=SN%n_n5sJR_iI8Hur|dYSQlh6ic8yG6g) ze|rob^s~5{%J>S#oP9H@BPKu&>ziybJ{)cBa_FFaL&~G zA7Gi!$(zrwd=!?S>QuGHj5TjxeVqOQm=Sg>0r*X}$_{O9) zCQ@Tld!g8}J<7@m!CH6@UP;lB+xB!UPsPk723g>()X-#g3bP(#*gvhwu3f5l{$NEa z^^@~toMaj@uB7uZKfx%GX*;^|@$xVpJJ)n>$E~*`$jO{HF2a3j_v+!c5f#T9%+v^< zkW9-EI*QlK5)T!*3J=TQqPj9Cydcovah3+9ted>2nfcTD@pDZ6H}1j>b^mkG_7=y{ zp+7C@!%nP*EdC?f9&xY;P+#v$j06*9>GcZ%AMmd&1@>F57)pugniA#3&tfRaV9_71 zJAh~@)C-1im$!l|45%2B6kTyr5p!+Aet?zR?U-igTh`$e5-RLZPIL?<~A&sz=r3m zCX#BW0__$mS!yuo5;E1i$02C%e5WqhqPLoAuNpyJnxDB?tVZ-~+(bL>CfKWTr6^zA zj7_hQI)BpuaTTwJOKHz7B<`Q+wGSG%iq%gID^N_GsRhro+>GI{BS3X(27qKHg&e5=X%VZGGhcmmzHB1WoeU#LmJ zrf2DtJ*cB8$O%hL30~-VVO{ZF#vYot;``6(0;kN09u>N4a2m12NV8EYx@wn0bklf5 zFui}KfF?K_grf-dWPzQHItHnv)PS%Q<rr>&SrQcL^(mgOl&fjlb$hXc@b~I>_-Qp88A4Ge8JsW*&B9~;`yamc zi5LzF6`S~g<#)Q4PM;oH@srs8`0&$JK-l)4yY%39x);{2I*hFeRzsM9k9);#{#dv*<$dcY+oExGhVS*ivLi^(3NT);D9cQYyI(|J})4g zv##9o`JJxD!KDCMX(G14KR?U@UC?M#q`&w(lT7*vv`gK*lj4sL)z6=5ZMXFOEAe+G z`uX!$H~?@4760*JjV0*9lRGK|e~uz6XxIO9LrY);n!xZMO&BJ)cI{ee{nZOIO|`>+ z`DUb%{PFN`yxBk-Wy$^=PiBx)L_AZM`siBKncnpJOo11~+d0@pBy1 zmur6~4NiD|LJ_)n)X+W;E>O&{=`^X_)-4`5j0cR4DbZeB))?%?=TNz1yzmx2J zx`ag@jv|%rJLMPww@quuiKg(m@87?_mRvi^+puk`g-_Rv<&ycg-{3NDcbhu1mb4zP zZlyE)W(?1YBl>s%y#omL_r{KLbv-tE+q2l()@2P5n_FAV4?0Z#7)kFkLiedV2_KI| zV#*%`^de)B0^}2ezjx{Rb6RgXW*Gm7gYrTBnc0LJ?&2FWri~=G!~gSA4j!gv7EH`{ zK*CR0t5oFoUO##8;Q($e!z&Pjd@IXh{QK0>zlpc{vAs(Un6Ul=lz&46D^9iNrte=a9V z;8P`~!k2%%El;>fc1|nD1uy~vUDKg_jWz6$%LjYueSf6(^eY1{?byN#DBc~ z>X*Q3km*a5|Hl>XgG?aEtPG0&@gipd;fF@=Q~E#G6P6p#!R{yy`=jUjs?geXmA&rw zvBbem1)rv-nB)KP-e(7bX{7q)mHHo7`0xe?Z21=#{(Ow8AhnilSxO2?+5Td-6goYLvVL@_u%dUf?ITn!kF75<(3+^r#nVawZ^WI-IHS%h@ z>J<0%>Akyq@7A>!k;;lvNbvaZU|?WKGScFzU|F6#ciA^3SJB2qVfRkBS(|(7Z z0f(LrQ|Zs(U)mn zJA-}MeNKsN#eUinO~J_Rg9d|__0y?dSd8yJk2rKEpXNg8^HspWW&i4HCsLj5M?f{k4aJQ-Y%-9Gj0OQZyI! zI$-xQCF_9NBtYMIhT)cnT`-bYO}v&^u&y|NRxzytifp5to@ij$~|p_o{>zLq0&Bzs6H}N zX&KiouGeXaeq46dxf25{xotuPp9P(E1qCSig!L1dN8FO;aS9>jZuZnVDSae0OU>=6 zd{zz?q2;=j(8syGQa+(Tf?*q54IP?C5qKzJRASz=My4Zb-3<<~r};IPu>$%h`Vqmd zftk;~TXTV(^brB>igK6Wz13h?ZLatTT`(m%pS}QjN^H8sYKA<(6d&s(`YZ8}DBk

vR{4uuoFA96SJR#5o1))gc;Dx0Vj2P(z@wzE|558Th6 z(8%o)zzY$}Br<*=7s9lKB9hf4Oyd%Ug_#)3vmoP=$n%87$_!TyVw%vg+^1d|BB}CE#69^fI9f%o|Oi5XCd(z~j3~3x0 z6q(CW^Lnb4xX!c*iW=(Fr1%8pr0~&PS{F>QD1HlC3Go%lvH~}i3zbc^GIfJ;1kSJw znGH$%UpXa0#Q}-=GU>9cMLepfg>*%_MGmrE2~@JD(jBtQsZ+^JNkU})VlPdIDw0}5 z24R#9n#HOIKPP@od}mNt)aR1s(rA``s6E44!Ey28HQ-g^jnmIr|I~KtLc#I9Si-fW z&L-0u#s#oux%(K>0>pR&zCPzW7cWui$HGr#7#i zckYeE{?hIKA^(KcG;>;@-@8AS_MkGQxJB~Vr{q&QjB?xZ&2sPs!SX{5ql(!D{rSXs z*@dan*s{6#?0N5#q7$nHBQ{Lj>KIH(-aT+LeK84ulvtrk!E6O0q&TRs= z%(y1KNQHWZo}Ip)0sj}@CXa##f1>=jD#iRMhiu|(83Vx$=?%tq`*!9#%=4%msh8uIrk55ZC+KGAQD|SJ7eo^=dVn}U7C<0bo6v+dZC#_%!@9UUmFB2#Ctxkg z>dZOHX2XHURh0RX>A+#n?%(jmS7aiX2*C&2kGp|Qj+Ni~p;v!ueaWxDJN%g+K@6c; zqG-@wuDmF9pKsh_yagc^dx&|x<*FKMlCIY_TBBuw+m664&pqirEw)*qQXzTrS5>Ed zt$o6|1%G9B<_2GfV#oBu;zRnw@cD-ei?g%`&)Jn}!e;)H1Po3rk1bz4p&em(7OrBQ zA}~8Fi!)1Ss%c6|zfqruDO^9N1HYB3jo8_L&+>rE&CWT~t;N%5Z*xD$%gYzj>&|D) zJIq(pOX%VE-L4O(Ppq$=cg@YkP2bDY^Vt=ic{$t41oS~`P3$H97D51Kk8%%u5A}Q4 zyXZ$87*8*^u~jeNOZJxlV?9(@Q|NOtc!DRY@W%JadcoGMHC$pzlC=d4d@5ouzq7;*xs zXS!_d^R_nczk@7%#$8ejbgDZAES`_Ce$#8yD-M{NQJA3&2UtMW+3H|8Pqdb|IydwC zas#o3L)FIcqCI1nBLj1`)07jhf=@>_Mv3Iy6dC0FCS4CTt~RNjKWk7cP{B|xQ7V;) z7ju-LtD31PUGG1Qz9QJz+VI-Efm4Wd8`EqE`D?wj&M0}&K#Xap%;wO><7c0e`_Ed= zI;E&-S}c~FMVw*q*7Lq*ozf#|IT$<(EYUxvYNTnLX>3$*YC38Qb`H5KOzK+OudiOX z>z>{$##TQX8ubJv)J zqom-6@Mun9lSPmfKGUr`m0jttKiMeU$lnm#f8Rg%ZG8N?b=yQ#1N@x$hy|Xny1pGwH3_)lQWJ;$EWbJba?iGDycZb(#Lg&)k)s%Y`>+@Y_&@06iO=eqac`&d~;v({R* zj*(rLgL~J$XT_GDPnEBp;_-l{O-yESn=F`wWWtKXZ=>%%3^6lhB{ii}RlELup00V)Lkn_c?XkXlb}$NNNjy zORoM4orWDz(R$oOG-Rkhc#^%y=^ zHa7>J^5Y%=PkQtX10Bpu3kHl6{~o#2k%}?>dRQ1d4Tc40;zUQ(e;y5a2HL%qT>>Y~35o(-cH<1!_x`lI+)^P;`Lmv41d`hNA zCIAEblx?G~?WV0D&u8Xn&tzimXllXaW$y$k4F)FQ#RvLnZ{cP_>Sh1c!IjTTko=z# ze4yWdvzf_B|0&{TCrGZXpiC;}=wd<2$;83LLM{YPN=ho=Vs6Q&DlYjianPF}xwV^{ z6CX3Pr>7^ACp(j)ixo2~FE1}M3mY>V8zZO$qpP=rn~4{rgDb^IR7l{LST4 zw(+v~sx59~Z{gqyszZpIl||s6^8d@1|ElrdBz68xl85)-CI9Wqza#~i|90TtI`kjb z`X?7;E+KdU=KnOk5d7N&rXd*EExnAmh`N{I*#?ZC!V(0`m5~RzIW;7nXmCW8<~*!z zldWb&)o)FA>*q|O(tLnzRk=zLAEt(FMU`nIELI&lMdW94be;O758lU(RLZ39I00Mn zr(OJ8zK`9Vo&lFxt~EKCdT$IrMZcag9vvUkifL-5xKt#cR*Ozhk(2-CO-V`F1u|$7 zQIL}xXq?odQfT11e6ifCwRYPPx_#_>sti?^Q$0iud6B@($;zb5jx zqN1T4(}iJ?=SStun@|e9H{)w^kWqSmG0`Ri<$W^=jVLvp(Q>?urfU3yC@wCJ^{J;J zB7!aqrd$WD;_$h5NfA`-Z;Qpn#fZpAmEnj8X)Qc$y)`9`%T#GwTh;XMSRVb<p#LTYumGP*kidk4#7#f%f$;o|OMo8M( z*nTG@CdPDlV*JR-DW9SxA|N0Tmy)V56BjS6Am*uDC(yo$8)wEwKp>zj9brzryFdtj+P68g1j7ejI(m&m#LkehF=?Q z6!XsxL>h5%bxU(6R&H)7NlAQ%t#0q>M->(A22pW!R)Lw7-YD{rsG_1ObaixebX@g_ zh*J5{%jBmguYF(1fUR2Q&uFuICF}iB2?>$E@8lLsLAFiCc^0JTas2a$jD{v?I7V4H zV$?#X!6s#E3vc&Vf&S=a`ux25zHfLFy|{RMs!N3qD;Jjr-y8-=w&m{54fG`B@XAIe{5bq) z$E)x_n$eD#@YG{sC-KxHN~LeuMFTWPremanI6)1*(>9)zJ;udLw}8RYTeB@y9aKHz zeh(|FsIUJcp={<1^!UyfdbE?s$zWq6bFvHoC{cnsK&^c7%hbeV@>l-epX-ES8Di#q zsU4Mt{+p!8h=?ONDm(Sk-RPp`nauaVOkY5FhxZ0&g^Z zg?mmG4A3wz3gST0$;@_kcHct{)GlxyHVQ4w%tDTitliH>&24S-))&h)jN1I42xl6_ z3~<9gV)s(#WmIFstPgGC2ELhHb>t~xlyll3DUFLm5(-4ay6d)G9RI>_hWov!LYIZ#!f$F?5`d+Kl!rek+#$WH|8W zlCR)*deM{hD4e_Q=&`6a9uQ#aruYicCG>=)V{21*{O6LTBLsrnqbEem^5CbX6vHzS z#C`Lx(=}mBX1#};p?S`NS#+Fhr7twqjz%%b)C)R%e*yqwH~Z1i$mHcK4LwYLZFy?7 z>m3;&qd09nvRG)Sz#LilHCN*8F2(}Z1)-Q9CzjiAkI;kfNhSbBCym20036|=D@9I| zFpk2aPm)xUUsP!xYM#J*a#V2INem>--boR%{Os^GQ|Gou3SjBKLW34Wb?g9?0Y)+3 zd7BmDwgT0+IEPXb+_>>I@WGa9vI&I=lR`frK3(X~jy!7T8}TWpgWocQUEVN5oOXRu z9eLIFJGS=UWjRlczwyDno%FV;;$P@vi3~QO;dhkJxl1?MA|EYQCGn*geSR>A{I24T za;I4`0=Bnz@N2!|U{S1X;V5=h;~v$|n_AgHM4~>d4G-1%#!NoDI#XmnV4>v(sZ|Q|saoRMLPzSTzeU z!0Z-dHq#`S!Z1t_ge?{ymSm?EBS{}yY=dm;8f`<4n??Vg*oi^}HuBu*?+o8REu8hH)Tpk!< zd6F1`9-wC+&TY>JBt<7j!GfP5;4r!eP|R3yeQV0PA%zh)b8o=#WGK)LOTUmYJ&dvy zeO|6qG2;%I%WAY8UKTQF78sPv{TfDD047*h^=$fP;?k8|QRffv)MlxJDPK4WdOVyM zZdWknzm?qcMscS=Nnp^%;l$LU*C9t%GTAPTXSH9{XGr6OBI#ZuLR!#SL0mO^8aURj zwPxym{UeC@)uv*KCIW-6i&ep$t(Picrsfup8q!z~EvM)rpbuFf|~ z*^bC$^_WGTC|ER9y;$#nYe_9CC)JW}ucjJM7@TMqUI<1>CgIn5y+^JJnZoQ70cI zY#(_bILTwGzk#CZWlmD7{RSamNMZ0x-FmL`H`j4XTy3$2oI97t2W#V>5rNZ@3Gcba z-LOa(Wm;F$J8G>C`Zy5O0b%hL%aPdezPy;TWnV<+H6RVKMPx6g{Z1i^+jpMh4~;zn zCs~`T3^ArAefRbchFagJSqXb!&2=J_k5^Hrdp7Zha1?i(NR>-Y?X<5Z!8jDUqUNNS z$rtWzIzMJRtjoXd@BC;2uQxWBS5}@BIc^+;*$dxEUk!`6`G6UI-7`L3AOH-zsT|6M zIUR2jxJx*{Rptu!$F5&Z%sjFb*75Pjx8t(86GC%yiOov{W+BN2TilA^3fFN*UHGdt zn}5OMc4&m%zID1bRiv(Sl>MVC9|$y%2P$OG z?F-6d=1uS#G{gtbNf;BnvkuvMn(d`t_sv|CI%4OgGe4+pT_~DPA0#>wj0FUkafIQt z=DOqj-SJd(o^KI@)#&<~WVnm2Hj0bbE7icSw=(+G#P3VAc7{os0H*S1R7>lT^gCs> z<(rTXKG{1bzrwG2i+D&pa2^z^B>Zd;ebIvZgCFVEcy4dy<&BzgLdAn!DD32iVtr96 zv}y*80?&ufR&r^BB%rZ$3fMf(FgtI?_+^c0mup~Q$3;0)r^b}}g<`XndC4(>am0Xo zYgZnw`B&nt`eKORqD+y-(E6Ko5IvO{;Y-4XF`?1eX0O3Xuq{qva(G|6`J=wg>sr4g za&g>CRjf)zw6@{|=pcLb*r}*Al2_CfD462RG&(f_cTbLL(g_YQjs5i`^HSgJ2Vf$96fjhq|tOz&BqWE`_Ccxf7( z_Aof0b3I4f z(^0CcblENDi%LIzKsY_C!Dns z6-~qVX59H=J$;PyG8KorMfd4$PO0|mN{e?`ksQuWEO%Hx=zM8#Bhvx}!#tFqXlLfO zWEaa-tts6V08J28dfj?Ijn1G`P885RcPpy4Uh#V}1drY{zE5^P-|2#+xQ)YmSPhAJ@ks)&p#pGqP@37c z@J6cad#`_S@Nnb)vVnh)b)9GJj@ql3j?(D(rRXjwZpCA~3|V&}&Wk9?xyOOK)`q1D zn1!11@PX}a1xH&MWLeCZb1+a-5Q)2!2FsJ*C!pu(0ArL}-G)eWPlL z^}=mA^mrl1uR#_>oHeyDpJegorf*dp#U2%%qpMVScLDL0`xt4EMmU36uFqcH0}pvfn)XA0%m)m>YoPfIvURP`=NqSQMw zj%J4;rY!SXJ0-ARiCC^GF0XI1u5p*!u}{=x#kWUM{|GrQFb5ia304#9+$8jB3nhrD zG3dRN{ZT7w!TzhhNqbt*%4woCa=TPqo8In_dP!#Be8%tX#gUq{uNO9XVKz$qp^e72 zw!ybo2npGM#be4XhG-KDDLYGdgr9T{n6`q`HU=xfkm)z9L7VDB;^1FgSom7qG+THnf zdY{MhC@!WGNYLFUhCw|oBg&B?8Ii#sC=|a~b^F03gR-zCg-U1!d8m1B;?9jq&4pv| zi;c}DmdoBX4Ez3^lbt-COrRWHU!TF5`VS-%P3B6pT|$P9Cji_@U1tUvJ2}SK+6JZ~ z{7S5$QYB%s(;PQp=QB6&`GVHg;Mq#_JT0Y@D%W#;u-RpplOmEtFSPqhc{D6nb!2gN z1)T!mVe1F~FBrcJZ3?Hkjw9e0O{dU{tDiFm>t$IC_iL={Eb`UaL-B7&hO4_r+o}PzzDJugBI3_WCNvtg@v;uUImp@=RR z9#?a9Z!UJ&X*>1#$#Tl?wbNR_MNwacq-N?FtHa~#;AO6Gg<^-2f61PwJ3mTEVnRfz z`JdGNQkBb{GaVi6^$-s4`~Zz)I*siMLp>s27PXS8UOmSytrL^`6Qg-XfwDN0;eBab z0)idIZIv?yzKY)N{WULN@u@4x%Y&20Deo-UWMSbgiRI_L6J}tG6Nfn0o2*!xKy1yf zK){nZPguOc_kuwIO`RXv`xdwfVj@fYw4H&nChtS(+mJjx%IlJm+slci~+A((Pcn8jyH>%Wl>*hvCZVjx4v| z9FSUV@b@`A@m|2 zT8I7Nivu;8%obuwzHycHI*R|#)!@!Ee3X8t`w4Z$={QL#Zo%(a(-&7sW`{PAdDwih z$JIHXCa|kE(}D-(N{k~i*>>_0fL8ls3uE>U^)*V@A`4sV!YNEja0+hDtXkcMmmRUqL~@ddj=G~fRYsO1L_Z3#7|f>3ZmYq>p&15Kd%pJ{ zw_QKI?3q{>2fPmuWyTgWANu`C&hR1>zUDz)vw0XB0~h{*z+n#o{?bl%bM(~>KfyJD zo;<()N5}C}EP=_>af#7vtqFv{tvn7cKK{;Xlbv?c3HA5z)Je{6Vc=IbLL!77F#UjV z6cTT9lTfW%=4`1zl@a~0fH?b_dB9}$AEf4RVDur`aFOp)+XoPBc+m5;m$!m7e+rA?oE__wlOF6%cyP$m zmg1^oX~6Y2Cgjlj6@N~gVQlvvx7`@@TZ!o$|Kd}}IL(Ac3QZfZji#{j6RvPT44)=X z+j=;OB6eRfB++?tG%6pNm;D8TfRD))HDG3RLEh4~u4mV2M-~61ZC#W3rqmGg#tW8E z&&N80;<$wDWCDA_pi%0$AmJnbhX+ykPDp@~NSjkYu|63b8Boh~)$!e>uwTV+`gZsJ zkF8Xi+n&)^{Z4dXLqj(XbR5xlMe-Tk(WOe10qBdqc=iuvVA=9+dP2dh6eO;N&_KXD zH8@ihqZ2tW|Hq>P#rXs8*OwQ)SB=#zO!dxSf0>E(sNPQw5z`pt#U@tUV67!#yGMOq z9A1)sS3>2rZ@nLDoR$=S9 zSHbCj5Dd%Rgm?sS;^$|VVEvYD=&q0BMTdy%yUdxoLs@z=>@$Q;AZLD}`B@qE3sS#x zW(*CM{~*^@Fu|86&%}zEew&L%wyMWpGhp#o3angk zSE34*N}*}esplr^?Qo-_Q=ms-dLoeJnd-|VsIksR0+myS(Yh z2f55D1f%06y~s<}%0H*-MV2u)iGq-#I<@lN+jJG}S0GIhk;Pe6soyj+e8QLwLbOq8 zL@A2|6xOqttgS6wVq)SvEePj}kB7(7?Djv@apU(BJEp<$bVh1_^uxYnN^HVL`LzM` zYHJEz-gfp|X~N=r@WLj_?2a{X*0>2xrm9uKA=^9C?3}G6Xph`)Z!-K=KyIADVH>YC zfSxIgS1BMYbNdRtR}g!%g4M%>rXmuBKxeTb1wtOBQ`LJLf;PevZj;%+@8c~hN;$5` z{_3F48aS^C|Iqm)sm9IqClB!1KStcx}`B9(7DU9N1ev2as2sfa9 zMa9JY#yD=dlc@v)nA6YJiGk5cjmQx|qyrg4Nme`kH%Sgs<^d63XKd~t?(VTdRr>p! zu`gWd0# zajIcDdfZK{2~<=Rw`q?&%zE876fJkY@rbe@DxQRfMcuPAA99oI5T6&RiropEKh zvqG{po%5Z0EixgoT25Sv0~*T*v%dZ({g?_=-=2gLei#;Ef7&d96DbE2Hu3rONvn$2 zJ?-|*GJY49I=ZvD`ilNfD`gsf-M#CM4h?BF6j#Ha9PbD>q{T zV|z?a=yVFmL&nb6Ui*THV`E}K*redAozLIP+i}Ee-xnNPbt;7y)Tt@T4!0`5ZWz$E zmBD#BPm6*BkUc&+CFosFD=GS%pD3fCAZ}?H#`kb_MU6>LPE<&*(DQI947xH4#F`>} z&b?fySQ6LfEmR~kphh67zak4{q$H<{d5!T>7m+ZX{5!U=|Hd-zo=pC}{NK>>zwHC1 z1jT>A!v7E0{lBM3kh|qY=j07tMmi!aCnv|nXw&xcP^+t*-qh4|zOLTH-o9${Z;Yc_ zpqrw>-+{1Hc14TLZ z#L?07^GZre)>B(nfzKK>7g1?xxbBq?S;Dj~zRw{}^q{gepeSkNK4 zcyDUtJ)+wmKkiU;!6wwnI`+!PqxOynTCZpCWZ+e(@8ARamtuD+T4Nn;P9__i-qeGX zy*s|D1KCl}hW7i)*RS2xied_P@8;;6r)%(vrBOmr$hUMS1>xIY>&uzxZ+d~ntHgb#Q=5*-4hg!aD>Dm~=?`r( zWA%*Z)BQQLaXr;Qq_Q=O7$z{g0qzY9l4#^^NaM6E!B;y5g74Uyp-TfSyX`2ycC7dC0xk0h>c*aVxnBo1>Bawu6I z)zg{V<9rP7;X|vp^JCX!%LlhxmyO6i`LZv=>oyhX>EK?I1&*(f!If@`n8+wM?$WAR zD-dqsD^f9@^6GA&u576s4&u)^U$fNh9eSYB z{Hn>t(AaO4+a1}ix$7{7L}>UzEqg!l{WZNQaWTl~0H4UKZC@;5?bI38u`Sg#prn zqV>nAvlYVSW}$O6bHwQ-+!1Cqg0T3ToA$GHW>O4>owx+t4&Qrvg!A+Bf25}e_4bkq zJg&RqvhFfc&dX=q!TCI1#Ok$>JD+D1dw=uO{C zK`(FbzR^)Q6BCo=F5ecm59b*wPK`FfF;vMrX^k`Fhr^tZHF7k_*SNmBY3Q-Hvz?U)&L;rANPcH^o_BSXL>*N%absIFX5R$wZ5Yw!@}*nxXnr6SG;W zH`j(#SSjFA50O#{;T_!b_m@Oc++FGq7uBk3F9pIA>Dk)ypSb%$Pugiox@eO!Nqkz! zY!vh5wn(w$H*`04I^`q(U8V9^W;N3XfK6BuLvz%{nAGE%%L41IBI1iUr=UZ9UrI9B z_{G@Hq0ALDkY-+}(HvIn&V^=ix(ju9CX2;Be<}z+eU=@rV#gc_-V96kH|T00xwqnD zdBSE&i^J^3cqcYZ&_oo2>N|=PC{dnN$ewwYcY-uA~G0HW$_-(7VrxQ2(Y*w zXpNoc2EN15)6206VVtivsTKR*FQh(B+&(;L29M=SME}Ik>Un=bxIbMAkB*MMSr!+! zs4@*t#=k{fv!lOQoDq9b)B6cr0jN>ThsqXDeFKApvI(zxQq5-4S`x?IYgWMs8k)uHMCPxgG#U}Vd&6du2zbmN9IPeYk zA+@kb7Y+P@uy3Eg*vWnti@AFS$3Mp=T9PT__B&KIZ(J(}DdPoCTuy65=9oI^@zAHU zYr(jr!yw5f`vlZh6yJB=_;D*_v#lbYG_A*Pud8iN{W!qK%YhyCpjN*VqxDX^FuI2f zdubW8z-aG7XBQ)$T_iO$_g$8Egsb7a@sMR7PC!5$#%qF)!`Le8u#8Y_v0;}MZ+2;6sk42$pn9!{ zv)jN9Jp9<54_!NHwN-}UXo~9Hk}Edpi?Vn+0d&ERRYryh+LOJ{)Y$;0pDq9^PY#1E zX)bhxI*SX+-25~}Waf`JPu3?Kek~f=;-SAiikTyWQ#M*0g}a}25tdh1O(!#qoG-G3 zQpfj{#2*bXV7nj-5ZLPGBqX7@qf@k#AN{kZ5XN<@uS{m!*OD^w&m#Ne*|1z zUFFkQSbYt3b@6>3&d3(eq5S;?<+ESXVTD|i*D|@Awpc)ZKds|&cP`eEyAJHm#Z+KW z&R_~4Tch3%+-n3>3S@7b3wGq|akDm7pa3JPo{q9f^Wa=868kOu;<5uq zugv)wxrR%J+ zJLv!>2EZ2G+xJ30y(QUG)E6APDI}o5Nuqy78S-Pl+4gZ}*UlA6^SX3jF1I$YecN zTm?%fH{0rLRy0)TVLy3nVtziJ&Mqq@U(^hu@_>7Ic+}R_Nls>PUV~7P?cG6y<$8+- zRXuWGj`iUvSYbAGrq8H1Ha4~_2A`3Ukws=b#m7d6XEN|#vy7m?r0rZs9a#Vw5SXiR zVTBTIbr{bqA=}o0mC0=zE;jSPkO1DoAr=y*!0P_NXx_#l(!!Tv-T3^KMwMGuDEcj?i zTZ2w3pXIZwq@%<{dT^|>#Jn(#wJIR+%hfpA&Car()424%|IiOk{QV=@1uH!89Z$F% z@Cb@3E^rAiBN2u5G1{ZKzoPi{7_)@|C4ZiTla0yco&_I4IM31P}6Bu$6Q@G zUB7Ebc;6n-TS?l@OS?8&d=N@WN$q!oXiMd8BdOH}9bwpvIiefw_dojv2Q|w46RhqM zZ!@?Zou>t4Kwj~dm)RV11`*4Y>x2#PzxE|3d}`fjnSR{Nvl;rJF=%Sk+a33H|k?tAjM$a_}^l<-R|1Pfh>qX|wg5 z$iyQML9Ib4P~Rohaj?I)-_WL*5+IvRWj|YA=K26dK55WtY?brf%O1n+*{U5Tf zwmx)>!hAao^);@|=%Yplh?};y7r%W*Ql8{wa_jfH;LUL`UTjn^lh#S|C&zo)hm5-V zv%%x=g{bfylj$BAn#0%3?WV|(nX)>JEOYATG6R(wSwhkGYqiw52tFSy6)H}Znjl!F z;dcq;VjLf&i+Dwc7L^Vc%9Uo!J|Ob$Jd_loM?K>LirCN8&Nx{aiWkx&+#xL^ z|4`7QftT91b6m1UtI!-A!bv^T($u7qlJv)=$#x;Q=Yuy(@Dv3BK@JpJrymm_$yHqL z_9u{x!OfdUy=`1ezV$d;uAWFb9aR(V0bX>B3AD+_;&cA|pVMe&!%3hKD;dyW?B|o| zBJ6u5T*agwRy{quv=(A~#tUZDdHlKi7s^h-&P@h=$`O}?P{3v*x)HJsRFYiJE+FB# zri`3u_~k=X;#*|@?7iHAO_AFLbUtF`PQII4PjJ$E-bm#t{&d$bo1uIC(~J>B!T6*T znV_jqiN0Sib6(eN&9=Rx^xJ8|O~=BS>YoRz%%4HG+b6R_UCApA~#Ct~P3YF$)*qyl&BE3YJyO z^+nT8VIJxQoxjj{SUr^zglELhGs5>fn8+rJAfV%4VbvrbB;_)-UmGOlg$tMpv1-xn z9wd9q_gVaCi4Vtjl=@DJN#0kPga#kp3hs=&EnoZ?4EYF=Dhey;XWxF{`2Ac`p^ek0 zqJP;mYSpaP4+XI{jQhV|xB5LNx>O}06Y*`Ad^Oq1(8tH;p;OTJVY{j&jQ%zZB@jbI zL}bhi#5HV+@>Lo6PG9Ol_v^^$PS#Cjq+XST$XA!t8t8m)`eT2%vkawubz^8}!%Dn# z<_At-Ba5uqdXv-ol3|PU_h=oq>aCF$4+|Kc6+F_NfR>8HX{DS^p2Mhn2kWg8+8AcX zUSj)jU-Gen31;}R`idpYIGF$*y|3rhj3-S_(7|s`WRE%nkR?Opz3a~{kZWFEIrGt? zvi0d&<0*`To^Id|7n5z}hfmjgGoT&VnV*=7Y6upoiws2WuHeZ~xU-q+ffH&%B6Q9#>+ z{!&DV5fJIsQ$R#eH;8FYX%ImA-{y|~8Aa;*?={uXf~vjXB{n6odVSq5sAcj#um@_S8of@3MAg1-`|v*sL*2`3l9Raq@lxI52t8z z-Juc`dd5z}@t;F}t_y*H#OhKf6Nv|v*-(69&|Z@Wy3+eCVu?SfBm@-;jGWh_kb>yD ziSUnA>N!U9Af?~(frk2S?9dd#Z|B{fEHApSGr#`OtSK zBsXsRwJ7^ZU#Htxs36tkFcNI?#p-ddq|AT2a%xV&5SPyp=5@->@bWnX^gnP)D}sA@ z6>-}~<#{JU41$M3NwqJ(+J&cqCQGk**4k&ymd1w?&RGK?2S#p3vPS#Qn1zSGDPX(m zG1O%5%(G`bPizT!DlS?u`0I}D!%p@TnD4GH<;+O#&QFTsFn?7nOTlmerM-#8^yl#s zy>g7+%ZRtY2%p|V1c1}tBmHNO6)tBTd&bndG7R*IYqD$8K)yEraTiJR@enPjpN$x&DE5 zcumvX4V)zzZ7xsTb!O(ik;gEzKWFyR*XcnE^e`0&n3BZf!SQM;(^kM;3+<~7^vba@ z)e_7p?-RBOB2}2w)L2ZQ{b$Py>7eP7iaMVk43*gLPmlXequLzDobI1{Qfqw^MbM0%cc>F1D2T#Tx>X4I~E9BHRUC(0D@^;cix?R0Gy#|#i4qoD0t(kwEC}1hAuoo-n(sn^|Z+6?~h6C zN?EL;kb@8ne1JQqD1RlMo(6oW_l)SN;<|4Z)&9IkQk4N8wBO&!AAxRXoM%C_^p??9 zdblK%S6_*DV&={3h|a@Sr-x3;1dW}2BA4U5&fgU?9{sCcYnTqbGe2YBbQ(|_@B9j5 z;j9ae4B}(V4UPjSRT!#5tie`dUEYR~Rj~MN--1BGOlu)OrW7P|{l8@2Na}Jt?VCx3 z=`CeOKJ zTpm@qv3aqVJ<4;HDT3ghk9~#7z*@&gDh4lC^noo#P?hOO3snG(Z)rL-ryg?cO98=(h|MENFGw5W{ z`xwk6|Fj+QY?u7zZoKCr&+sSJ`Oq`P z4xC#5zE6TYNdBDB{jr^+`;8bWE5YSP3el)l?5u@oSGy-(XWVax`M@SO`}h>$y2Q_6 z?RG&ka*z8O7#zO^GtO-?#cyilfHSRdW*1`^2XQ{w9%nFc6KFaG=HB-;$B6}HK&USM zf#`ZLWAxVfsTo5cW7K=<=~oht!v%5t&en6k=lSP5Lw|Jas+?gx7pbRK!0sYkW%><) zU;G)yZ~zQbCV!rZTwArEL$*$cH~Wy;BwFB8lvC}sJa!gAPtgScytNx87n-~7v0z8L zTp;zZ?nD@&5tnr7Iw&=gq!{ULC}Z2)J+%LMp1rTECP!**D>xyGo zwzXuu9;2h}dXU1CA8LaTKCs2oY(Eup?ca9=YqvJAA7gRLHeGUYt|Tohs&b7LXor25vb7~Y>8D1tYnj4$d( zGm1GEr<^W1FbnXv2AUNPjc3iE7cbMmF0am?_CC*;K9xNA{aDXOIe6v40j!hP?WM-@ z*lj}Pe!LP${$W-~RhD*x&szHk!(+D2JdFrm`!1vH1FMY%!Erec;h%h5(^rxNlhJZX zX&R;d``-Jhu}OR^&~))?tJdyC&Z(Ud{=6p(l}rq?S<6Oj3Zm5u!IO@2K<;)kxCQ?t zSZlg>q-HU~cQdWQlULF=bN8(H`H7+xSrSv3;?Lcb<1)uP?SOr5ki|y?1;x7#$0f|= zk^hsKCn-ZtdeHt>dC&N`nevhj?GxX;i_~F@WFP$w;VXpW{%6$Wz&}LVUR@CqmtGZQ zY`7IdB$4TMO$bre zxVyW%5aRCc?k>dLh=;hJc&6ch-#hQDnKg1hO+KF0r%$@Os=8`Fd;f~FKH2>lzD+Nj z&-;k+QTA+N`aFQ38lF3(PIX`>SU1?m^q0^jRYRr3=+mUR)k$OLgSsIqz@6excsTB`x%_&IZ zk_&%t?OZ%2%x*D+etw&a6oi*aRv9&-UJ(~dxcU%9+M4l0`9ssK2s7=C-f==qJ*~-_rQ|it z7l95C)cIsnS(ONmk%zmJI0M{cM^MuHyF<{PY@kk@*E{?9ujM@NebRUisk5H$F>Slf zkbFXT4oTtEMDTj~w?BHLLClu#pv4i8(?I+>TqNKg$|tDKFEljIuJRl4;$7xTPQ zg>4s9i^y9v_K9goxo+jS_|miVv>%aD|Mg>Dr<5&8AMn157`eLVe%xvM*~dOqb^h5h z!YU$XM-*I1wew+7%Jua$?tYh7zFC_Wj+Ai|MeY$*JbDxc3F5lP5(QOTmcHj^bI%o@ zOKnZ`!rr)$206}7#r7~a+Po#Ydqr-A*m;&tT9MK$)Ypp?U7`y=ywp@hf5B6RDz%3G zVgr=ic8?bdKd4~LKmYK#Uwt(KeAtwr{By>6vZ9phN6|whXoP`Exm9AP1L1K2rJFn;@fSCUhOV;x>&X~@?yeYt zlY94dzJ&|L?sLtEGL=JdRIm=huf2KrjHersgI4=oRt-MT`(#2z-kE4na6zqYk3u}$ zH^+U;_h@)Fp5F4BYFg0@i0(`^$k$gG;|rb%vmld`q1hUvEFRJruM~lPsM~e(+|^L> zrL>t3q@AzwvjMw|@m{aux+gYh%ULvPN& zZ3e7{uu|H$X$@*QecGWNi4N?o`<|Rzh`j4pq<`vNq9~I})KPTdtwrvHR6_MpEttDk zE22e+#gk(`k@`a69%YQ~JvrT13FE^nq=_&UU*Uzh9PUv4=JcHze6 zG`clIrOIIs_=uG;)6a?S;(2IBvag1W*jl;ZLjdi^@MG>@*dr!fDcrZ8ZaoQJ;1GIx0!b$&fPTJ9lmu-G#yZ0OnA7iX_ zPetrkvDh0_x+X>&fXI63l;EZa2|R-!+*414?ad&{_$fg|$6J31tJHphvQ3`YJq>(T zY7@t;4mls+QU1jpJ`rV_QeZz=8tuS5VjV=si%# zm@oK~a3oCgOX_!DZXX0Yg)I581%h$ybf9#6J|R294i_E~W44-Mk^XHMhBhXi+XOG7 z`$*!#`iKg*?kDSX{Ov>1M=kT*os@D9Sd-T_hsO=eXD=wvb80@19@9@TClo5LZF`I_ zlZGD6yc&G8Mc{^cUFB{mzRpex$W*I$S@7Z+`(sn>vV0#v_cVf(AZ-DtybhAfp}DO? zs;tT2vC+G5M-$!3gGQLum^IB$F4n802XtzSo;CZlH7^h$aeI5Du>A=&p5}sTnOeah z$nYV@G>A<;;|Z=4d|rG?t&r`ZmJGPJpqEarzNck@3$t<@IDuM7*3FYZx1qYJDG9Qc zZG!PBX-nd)n5fBZ6}pQF5~l( zxX^pdi|IpCn%F^&choQ5u+EC$_jLV178@?%J9fio?-l()N{xdg!vtB;90ct0B7w|J z3kk87hW@`CQcbK$F;BZIZPVxVyZOInP0f?h|4`Y4}>BcIk50&I5=Qq2ayN3aE>iTTP^c7Y{~g6d-vy{8gao zr!RmhGu|5{S$2}bicn1ZsXYeJ#c~^d^FUHdY(%bL(=`kJ;+4*x^ZAv=TTc)Z!+mrv zm#u#)=DYsS{LbZ~e5W(k_Y)Qy!l9PtjQ5rNA!$xxJ!?0ph&IS#V={itzkdf{j+oZG zxXApN?wJ9nCZ?>`E32Y%ci(cTLY*s56a^twU#xPc%!odXwqFP>23Ny(MS4~HhK=BB z>C{Ma!}wn#+cY1PsH42Mn`MdAyl4FQ$k@Nqq;(MJ;8zJfb;boe+M1P z$7aDIB5mY`hv{^eIj=b@UbBuI?oPA<`m5^HF;#W#!{ISwM{}+T{pP0%KeRD z3OW=B=PCifYzz*4*?jKaH)_LMNQ<-|fYT;A9M{0yVHz4s`dwc8x~I5hjM*jr4kO%a za}B4^U^7Bht$Oo&FXtTGi%Ho;ZEN_@Z6n}3VGZA)ByWV_{kbNbQ3*G#`g?~|=gE?g zOCtD_S6i}HM^4Js3k#h>8iIRNW|R)%>r&B2NSir3m*BcO5oh1##h4Thb24$+sfFG0 z-jOA)^k@C_eRzMl#o#t*%Af4Jn6Ltf$whNJzg}@E7=J{Kc+G=~EeLNaY+^L^z3t1_ zo`J9qP^PvrhDJh?u(YHDj3b#W0yZ0bPSk+Jv_4d=K+>c3*!!erzkw*ybvqD6E7V-0 zjqWQQqqmQ@ljB&SeSzmmd)p(=d_J1=g00LCb2-{tK$KQh9vuMU)0N4J2}qbetYqY< zY|py-g)5!f1U4ea*dIsqaBPbl{qx)}G2{AjM8hdgr0f?VVm^3gKg$DjNFyoJf?DL$ zHs>wMcZSX2vC_9ANOi^OHMqjO&rpWtteUS5kncfTC{X z`NF%~tTYClGLuV>FujB_Ow*n7xX-AHd&}UUF;-}TRNu4A%tQX$)>=oup)DUcwxKQ1 z2+1L3ALWycJ4$Q+OXzP!$(K@K9LW6aZf$)lrM&R@j~8ymTljyp!d>6YR#ba{tesBe zVuKww#^!p({3O4KYSz|#L9Fj1k(C9B{2$c(^M_niA-!#0#| z-R|~i1uXgd*kwZ)C{XSe`NSi;i}=gO5L0@T`|1rrF@lhpHyM}H6%3y@FD?8r`IX5} zZbt@aXoe^2ZAgHb@Mx|VvAbuR~y`$z8peu1MHaH=M2v8}sP-fxSQ8CL_6qBmTz z#A3n756cvSJG-XZLX`lps8qQu`S(GVr)3L2AjbYnN7e4p8T)tnm{0BAExO6{Oc@Vu0LJq`tw8)kS-LTnTO|FY*Ed2F(l}Jww@=1v1X4op`y(1 zos^Fn+S=M|(LQb$NO-;6rcdV{?u`^#z5hrtqf9lWn&>EEEv?3HkNKMcYk>X6t zt0G^3+yYAy9K*^{SfpUZ)moAX$G2v3F;ZLA`nXt8P*f*>P5riY($P6P^~fm+DB&rT zY=P;b53y6nrsIZCYp+Ce zL-4i-#+vS3AWx#-N*UykW?2mn^z=F;kJR+zZS_yp#@F+rF$?Tm+OI7o=3LkUh-Xmn zwqv@yHN#%6>ME~2?sIL}MJ>}KAw1Y4RN4M13?0gEGf&FfrTG=C`~SYh8`bVRM$<=4 zV{{lG2vK)U=TS%m@;xD64z*5n*@&xP7W%#fbH!q7K6U7h^XouP~T*^%sG%$>HB zSKl#1eaLZZnBM|Cj`guST=?h_ORHPW;ibi@W2lb@l|;g#m>`OZsqzxaqqh0L1|d4@ zwS|wYlSN)%$JRbHq_GFJS^NHRPlysYTMG@=S}7<%!d)@$Zq$)t z133m|yyEvORYq`B^w&0&<=8)3iS`##uZkI)vYF3+q{p2LN~^=TG3-OmAS0~e)vA!z zQyGD&lm!CasF0VTwr2O}0Q)XmbaHYf4`PMG23!uwREhnI_(jEsl^*Unaj+1_z!xuq z#VCCF#Q}Jimxd==#x{*x`3WY-&bLg76a1RDUF7efY)^yVHgg0lQ7egsy`ZlLPcNkT zE&8>(!rFq`#j^!goa}7(I?dU|K zG1cjwU$t)oeX&7D%{&e7ZyS=gTIXdNM`m8xf?E4{N6wOq)yMXT3J=EE)Bm8pc4r&3 z9HyI7kDM2h{eNput(($iv1GRG*JEQw=zYXty*%EU<#M{hz6<8gwptZ0Hbx2Ua9Nuc z@zm+he3H5j2>ma)Q$?Qjzj{jy3~kDvVX4-Ue3y|_cx9p`BbCz39}pOZdWTUYQ~KNu z5uKWtyY9xl_0PCH^mXcyJ`Q$ZGFP1k| zF+}BAhC}P|lA7K41zq-~6P5Ug?00wXh^xz*WjWje8yYRUlp%HzdEW42exjpMvCHwl z+djj-&F15;w3+QI|I0BNzC*zHL3lm-aAOTYSwYy2`t$Rpl1(JyQLjl7y?jSB7vh(k zW?Vz~qC$gZam3Gv9nqTA66=LB@|x;1DD=F15TMZ!XqeV$Y!L~z^C^_u{&aK{f3z9D zxi;p|PPD4P?4ycIaats}y$9_M!@whhHUXz3g!QNAwUrzZGzp@A^Oa7~r41ECH2*Mw z0ug9W53Qo$EHZ8pI;n((O~so0@=a~not%#6#+@rie3`Qq#kj=Xvrleh__nJb_?h`U z*;|>-Tzl!5Q)1THo;R%7T>x1glHnVJe@mhImKfO@yT6#SsqsnYymd^oq=9bc`nx{5 zTYMJ_>JwEt-vOsn-V5Y$*{qPTOgvOPPWdAFmj9Zqb(mMnfgc46&e>_x#LkJ(0|{#^czw3hcm-=lYy z3e{a3a(Hy*A*=+rL%Oryfm8RXc&g_Xq6U?#&VQgFQ4qCO!kTUM{@BKGHYmUB-46dd zjk|9^8S!@dXBkbTAt|xXN&ElOAnKH#j|Wvf1mcp-#41ROc-y}416#Ul5@gWj3EDv! zVXBCC7_Es+DO)@-H_c)AT)Y0k{l(e=)GB{ZnvO;hyHKd;(0YUKI+Nqx-$6L z#MSM4h;8?7l#|suB#Frqxc#`u!+SDpbqx{AkD9PHibe9v5RCALz%5$rj84H0d$S(s zS!+zD;8VI5Rz{)8tqebq@3&AoBqu%T)_2;#Krt!p?rF$gJcqWBN0bR|4)nF~<7#<& z=Zw$IP-xL#kl)kIRFv&5$Wpo>8Xl@@qS{!h7)a9*dw;`3rn%?t0|gPbT??&*sLj5k z^lGjmf9J-*iUgl7r~yMqSS)1RLlomVrk0)R4$@KnIs)FDc2UJs>7?n2_#B~#b@k%T zSqzq{A@=K>e70I|fW`B6O9$L|L9{P(o00nnoWtrKXVZ%dZ?obaQ&ARxZnWYanRFS? zAlE*@d9pd-c8=XH0E?Pd!kB@Q2-XRW@VDzAD6|OFMcKe-7L;`j*IehUrpsGK?@%W< zOhwho{f89`&#YAP*sB z3FW36o56uh)~AcQs6xA@@EIO>YK=^&rAp}Zj;GN(GSAD*9H@Ap`467s#KiaXRWk@2M8@OwL;RBo1>W5NhdK{ zPI7|vJe{HFZ$|hrz7BCrwwCZ&kNc7m?lRESpL(6jpS(ows`tKTvvA9o6B=4WxybXB zYm6b9)NI`|3XfCWv6~Q)wmE6A%*-Gdg9<-@Z};AEDcv20V?7Fn=x85_bUxdgYM{AT z%uATxspABeqi61DVTE?joUuWe_)FHr$7WIsAV|-Zju_O}Hu+|Hv)6mO2w*bC zi+~Q*5t$hv^xlzUO^s>*_p`>W6?G zRCN&93wQOpEOLKW*EDT)Y1gmrk!x5<8r5maYo?H&5Yt! z5DTSE3RDb@#CU3L#9OnJLBVsAM|)SG&@tE>l(7mz%)YK%5yYdu_L)> z;%iDb;uq@yw)4`Rl6H=S;p;>1HHbEKid>$# z^i2(lMRK0R*g$gliAhrZ+~eV|E)ikmTLh`!sDwnfbY9BP>`9-mH~sa`ZICbncjjy=(eV{lGYZ(O*M_vFs^5r64qaQ4c$T= zo(tGhwMC7?e#8;8pxTfUktv{SRZO=R2f;b;Lx$};e=Ds>D$&9c=xEK03Nb;y`mSpz z;UwCL>9EA^6l`MVFn7F!-=Tq}1-3nxOPhIp>F?&q#gN4vP~8lVou*do&=4P+Y7Oqd zJHgQxoz>eQ>X4GwPkbcsQ|tr_6{5~ON`9RUa;s>rSYgeAPBL>*m+&+T>v;Zi|3vKd zJ>@Tsc!a2&ksJ~-WftM1b*T2&FH^*7YY+x_QNrRmm(Bd~sdEyNqZlc=25FfgCNYBk z12xm1dxIvfFI5kwQy9~{M=12Ka$`OA^^b$no8ukV3ESXael>?ig@`uSSotqfAPN@^ z%G$=rqTbH_H*a* zy7L{lRciD`bd&9`H2Hf4ZP7-MHIFA|=Z^$d&l^eE(-6hUwQG}K9Y2pEg%{xlK#Va% zpf`#>hhehvrTX`@gZywIp%p1SmLKlE7l)|}k=X62kkFNJD8k)~wS>aue5tm`=TJS` zeJ8TaQ-O@d5KOdOS!1${#gm&VBy`#yj$-$blCdb){8%UT^u`?ixc;-2>LjKk105{n zeAeI}-%Nxny~N9hxT7h+JWE7ahn2cyLPV1P3pY0QV)b*woznMHM37{Y-GlI}aln=f z1Nsl;hSd{j&OB_vN3iTX?w__M$rK_>;fsv0Uc zT^}YAL-=2FvX&y&z?8~tnG&oR4DMRAUu$e0{>QY3S#sY+ zfonQrh#*8+n)kg0udU~%pyXSUY2oD1c0u2CwPb56D$sS8%bKx*q?`TCi#~+EidE%f z1u4ymre(_Lp?Kl8Me~o-I*$!GiJaWUbJEkM;;ry&5^{ARgapie5i2=)N68CDmUtL` zxLI?GCbUCORcnwg;hrUdV%FXmRdyPcf0S}zSpKLqzR z`HUU2)OW{lqny@VIi|0tf*b$rT=%CKaRM^Z*gHX`Q7`$=3FvB>8Xs2kq~`a2>(g9E z2$!B5u?HE(6aK{XU_sKHv)H1u?<8c{6^KarHKzui!uyu2hlhm32>Zo23@a%AuM7tP zPy3IcBxc z62U-GiZobO-HXHJ!5KUI-Cv2}*A*fsQi)k6#}fMnKZG>?P1WdOjYmaM1_yfV+=UCX7UG|H|4pFY9|9!s_g`hH{?Ec+{=vSApj3x0 z2@K5i)a9v*_1n1Lay3U%dMql-aR^6E4|@!^|0207ID026WUcH>O_N*6x`6j z{y(L^RW1QDZuj~xsUz&9kUxR%(?#V{swO}r1|@|2QAFWs8_c=;78YPtE45H`rS*^I zh9nj%wa;N_+g#37hKlKc^jIh;7GZ5|4H+*jv`jT%o_iocsKCxpPOHrs0dQ^~%|RIg z|LUtrY2W-jhUrgmrfTGMsDFPNw#ulr;$o0VeIZDK$wEN{(UFnxqT(C9U2mDb1qCfv zoix<{SZF0BB^4U~(?ct&^u90rugDuZ>JLwU^+L9(N=}~Uouv9TxgpN}kInY)At!kX znO^#bBMwi_^?%Ly>cw_L*XqH+c(c6CN2Tt~=HVSj)`EYWBMhYxGWHlZ<)pM(vS^JG zbD-APGS&K8i+ zXKZ=Qk0W@t5#rUw*nLrQU9)9GWz% z@Albx+fmA3C<GV_kB)nCYeom@8ql9icoT!$U%k4sHtocCWQH7c13Po{&R7Hkb#POZhWs)92gftC>=Xg4mCRCL2O7Zf@$?1`65qP|$`4 zmY<&=m-jPa`}38a=iRbW!Nbx_fz(vd=D8+h3KurG8mdK%xG*sk59 z2O4)94?)z~oR45Pbr%EmKl|zqtmH1myGjf^c60-qmQjEd41Ib~96#3f1^$o7(ZxR< z3m6R^Z;y*2UC!3jTef|SjPh9+o~j(rHxO2vY=#b}-}-qhY%~38>`8JbZ15H26 z^ld6)^z`QUEDAn8f~x97biAtDW|vP_?a!z4t{98O%AVQT>r4TbJ+s+DnbB+dNFc`k z_X@+$M}F&ddGG`~-UI@M#P$|fB!$$-?lp|MX<5xFM5LZOi_|t>#-G6hJ)=EvwvE1F zQJex@*rBwN2hV$l+u2ZPa5X8;nJn6@RdpT1{Pvl7DOfm>#-n%n?9Dhu8}t%6IXQo5 z?aWMut@+x;-15fOc>HeICt zQrh4U5G5ABlb`*9*#DqyL}RijNz3Q(!l|W94efQYWSCHTa?TG;Y&$Xh6%C}#(v7E) zGdAV(#1@wir{6VudL~g}WQo{DnWW4Osn=B=LznYc6GrGP25e**=uDWT(Ct(Aw>v@Y z@!9FBPeRpgE|edvnWCn)l{RqgSswh%_$(!*_*j-M=tJ;ycZ$^`ISW3qxQMm2wRHgm zh|SgWxgAV)nl=}xWcrQhKYjY-TdVc<`ts}7uWY)!hv zL;(LlB8EVIP$CL93P`Ay{r4MR>x{Z@BjY#8rwcx^ub~>PCqJola&N-2P#omizwXzk z`NTfa(s>S*AX3L`x$1J`7Ac1jg5F;j zSCRep3C$OHFA7-wp9zF{nYMtTb(9Efbfe>`HXwWf2tn%^8wd4;ybbP+eV?i`m3zLP z?7H8Hi2}w6t_}BN`U1D5U4RJ3_B12Ll3y+U$E0$2`S*oy^Q93Rc;PSOm+o2VXOxxw z>viu8yx8aYCsHMU!U=#Kb+d3FStCDtbktAK4tB(t^I?b@W-b}JV;BxJrsjCR6-IQQe#E{VQ=D$>@r?6bb1VP5*D z{M^#Nb>{DL%rr=b+dE0CRr7Tg0+M_ias&j|ALV4BJc0!8UOK65zK#s}xCrTs!Umr& zJf*lyV694_C=nFS7EP|9DdkIjXV5=hsF0KXN-gK@?S23Hgh7t@w}B?^z`)T4H8&Ib zSgug!!vA>}qWp#p#`ry@;7P)WToV1Ks{w3&pnmT@3P7uZeTysfD36Hp= zkI`p4+v*`jxrR@cmLvdxMBxCvsvV3qE&tES&6JuWgjZHqdj<*~4ZYUG{TYDisubi0 z98cpYNi+ZOxokhEv$ZgxuU}(%3Qp!KweeI`7PwrZvHVGB=z)OOC@L_&{Zn|4hQ(6J z*Jw!Bx3DPCs;}mQjf}yq(yLshQRN5;k)Q|Q(RJe+KDC8~?zcy_PEG?qSl@4-M|yn= zm5k628U={`{E~e8+&5Z$tI0IwWMUBfSJfmVxR??WP)a2Rh+Z#4=X~$sXLhaJBDGrwJD1ip*# zN)XI1sCZ_o!yi0{0X7gxcc^YA42QBV_|G|>vJaNt4ce54beg&lkrSA8b%xbrfW_%Y<# z$uRk@mMel8&`&Xy<}MR)7@RqCfY6lt)bqD_D?#@WD6+jM{X7>QjKermB5_yy=SN|) zO?7#nj&6Rh3Zf~7pA`v<8pr%|0q-EsG7>cl9#o~P?XyA&82-5{p73icR7JEu!?}EP zC%RY?>-=gcf)9oMc}{y2!r{PRKDu6Sl@O)j@*f8nEZxamX2H~+ z1zxyQi^ix0AX2!X-_Zk#_$gRdVvtuRFZ>@=zBRxd1E5CrXnH}yoV zqfc{8SSSrefr{9ja$ExqbIzX&QTp3-OUaVZF~IrxWmcu!$~v-iZ;vYf?u0TLOm~BW zm)5(oLXbrBBVx#ewsEbtmc0+I;@IuB{Bghk_A_3oB zt~fQ(9u3Qc(dbM=umZP?OT6PGA?fMy>>(8hSX%XR6e@^`&e1no0nk>S!o?*KF!1S5 zDc#Y&XNl%>t$H$MI`GuAcPj6_I(<^$N~$SeeJ zj$MEbo32r`7JmlpFan9bTtv058azse-Iyc;Qfs^7ntiD5<#$ZL__6m&&r?76h~?dQP>n_3DlsHd=&_{a_nT&!(I1=m+K+W# zx&G~3xlfe-;e5Oa`jeB{=gT4)YIfM87G=;s-j^#+8@pGgDq@)GaObW`s(&$0;J+lu zANq@ZM_K0-$zq;zxKTJeRxPVqQz2W%KYm%N(fN+!I!dAEJ`8;?wPyb4ZEm4b+B49FqPrCG9T3y|)o1~xt4MjbnyPQ+x7>}6%sjIDKFJ9a{37_2b=@RWW z71#5Q#jSIn_o`Kpd2(3fl%YCuo_}U9a_#k&*keHsz(Rw`!gOJt3ik z#2r#l#$6-Z6H~2*MY@%M4nCN4LhjV|umsbWXn?$3sX)%!e!GBNZ}pUTwX(gvUE^|2 zT&~q3{zK5!_Koj}jQNs5HcKD^SkPfKS+A=U&R3oLsp{ZB%gG@f9v_qPJyX0sJ3s-M z`?B%xt5n}MeV$IG_wG7C6v>Bn^}Ea#Yie~qyPe_T;e%U!Lx~4`M#FH2>utQRkH_zl z=`}0pNTUb^71||I4PG86)SAxZoXmUbheT*j&VxhGvi>DqL_Fcu{pHqOW*N7Z#@9ie zLFy_D5#aBoVx6C&>*~Pxe!r}D@rFHw||+gw8bQ8EI=s=w%R+|F=*+Mj^?P|d-NBC( z?49j_Pxp_n3H(~E=w$nNRL8nq1i8{}o)568>=tzX)6nE6DL;PvnG?Ug9)IuHn9idF z`dEp8!o!6P2Zh|%xcG?^+vaO~@_uwcQjrtHk2zcCjqpV&;XBCBCu_eq(3MWV@2r)6 z^&$!QJQTfw&3ngh+zB71SQr`bU6ntbA1}Mzo0k_a68jQ2(?j-}R&DEPLkTB;n}Cwj zZM^>JaX8K=shcDq+H>RS4j*%i98y3)F3)T>c=RfRr$MoIslkGHsa5%PMnv?+XjgzZI)+0PDml%x^`%Z7t0=OqgR`ke^k`n9!skthWtU2_45QRr72!M7S!x;XaR3 zafl#uh@pJg{{|xlYo59LbjD^hoBRMnc_~?6=r#O&f4?-ct(l9uYwAZzO80V0Axnk3 zlZ5=etO{&5c@nUf6u@Bt7H$yBeE@cSzU3=yyZy=#p-(gzlxI>m8QhVAq-3cA_Ch6S zf>SC{V&fdE#FF za99kqepMnNjidH0ppg{j1TiXZ#=ACF01i?Pj*4^F`SxmxqG4h%7+J+^u|QI=U!q!7 z$;8R{Kqw_2lc0O%)nPC&Ick?I#LmVh{jthx+m3c?*_2(^n%~_~#k$F6GjFaJ7&E^l zM*lX5#m}6LDgUIRU>S6LSgso*(@g_zm4$vuFh)-+g1``y{q7}yy3Deug&;1VO(E}= ziC;yZe0>U@*m@EG_9cuB8^e)U@EW~uP@y+12=1Pr#{pzK)l}w|wl?YpdOd^<1qFyj8c)H+5=FS*zkf@f1}4*uk9E&9om-If?>a`)hGt|` zpu!u|4=2-ecR9aYPg0YAQ>rkJ!K7zn*9DPMQ;WgmKUf%DB}{-KBO`0mBCOV$5xl)$ zzb%xE^u@3+yIhG{M9v-Fw1gH*O*%pw~+v{Ywp)CQg^NIYy2hFB4VSq@Z z(1wbSAJAaIS?T~-oIftBda7C|+bf!D(!4u`fONxT!Z$U7d~acqcoOH0@wETyi+8t*>a^?UM3NX_>FT4 zE6B@j0921)*q=y;eU}a!&}c*AGype>G3b=R$Lz}&p?(zZxBWn%T(nOWfq3_`0k>yx zEwV_5-2Gk5{AP?F6;~RC#J_qhX`26++R4wtz1rk@!>^dYzB^6U`29nap+s>GD$F<^ z3=DSw4|~rEF}w2VO~Ghaq$N+{lcmzr-AmL)hpv2YtR!AJb_iz#dO9s?j2TVj?3``fW4QT(hr~4A3q5G;N~fVS(HRIMn9X!lHr#TGMG< zwnLeMs@U?0_$Spni1?>M@hJ1rAB*)yXzjrAl!~2W#cFs3XF2P$6vz7P;-u#1xS{QX zti?R3@2@0A?V&E48Mbm?N8|)L`QTDKKR&d7{AfAP{WUsot?)z;csbkmv7bNLTB5ue69LFDYe7xGrxzT3BxJhdbH1S%6 z)&7lSK3m_3#qQE#O@G6}z$pGi#=yg?x>1djsh6B>(TVT6GD{;dgHmUjlylxr4$|Y+ zT@BN^tD0Ik85YV6lFT$|;Tv8lJR(k21hW{a^WUpfjw|wW?o4$NJfM&pp_@#kupkUZ zz$<4vk8hF_T-PXJAKhG(xHDa@JBUT)X?41mFC4j`un^gB-7y9L_7e4Gv%)3QvFwB_ z&{wFeCXkqLNft~ z0u^#v3elDZr9R4GzVG7X`r03sy@rNDdYnI;!nlF9-^6iILM@<-^|rr~O$LU24{n~vCl)k~7lhEKe| zq-}Iv968@P<)0 z$~{RP0rzcCT(lJk>-`ZMTnjN%XEES@9Gvs7+XT6OIUri&|0LRtbT$zRDUJU(KTa&hF z&y9kKgogL8dZAR$C)4dr(}WSnC*)gxGZGG6{B<#i*ggL5@?Jj9p7VX#aFC}=MK}RV zl~Uv@yC~VKfz!*}Ks?`G<;Q*pjF=%$WmI+bAIdaJNnStUC6D2dlUePbHHTw>O4{JzJ8(8C0>ms zhxa24TA&6_@C1HlT(S9A5c7+^(>@g4s)awI$m5Qgs>ATWtRaIwh|y=e`HE5vZ#@Jg z+*T^T#J!{XF*!jAKR8Ax;$Dy$#F_ncygrp%*!o)WR(;l{-3(64=3YtY&ejlQk8?VX z9{6C@S8LUhCE@)*C|4J?VSs19`nfAA!ROhR9^%C3SbUx7epy(@A*vDkO2ML8nFYCo z3+&Rb^M31KhpL{;au&9#>onj9<%wx0WXC`lMpx==2xZ1F!1h;>psm`8)Uh+;uiI#b z;#~CWeuw5O6KtMPpNcr{L{H#x+D0@dpREe06LZ*B7_^YfY zoe{MugU8LJ5~EzCywSTqOd0h*4%A*1w#(p(RRTiZ}*lgUHm+?FV#1Y zg>Syd7_-xgrS!|o2kU}@vTLOYjhtk8D%rCRuo$eTyo6i!@`N#2&FG0O_Nm*wOk1=F zC;Ur3TvM`NnKNNBoUYs(Jq2CFLa+jOEpuIfCHbY+NE-_{fZ4f4LD@)flL(p zaHEL*r0S*QM^iTz^Un?Jr7!Ar?^F(XsxeB*C`xz!+`GIYtvKf^tO*taU4l@TAQ!oZ zPV4B-(=uYqy2oeCQ{j|6&d1T~FNrtoN5!x=Xl(?!xg?3Y#UlUez#E<)EGRuQN1UUqSKX{_0wMbrYo_ptj!Ilrs-&A1lOl&dU4zsRv#y9mT{l&9fju_bdc`vzvO=H0lAVxjIntJF z3=ITVxP-aitODNnlkBzeto?mRgZVgy7aOsQ1JBI4Q}n_kTs7nUSfc17rz8vG54hKi zWW_uFR3CWpj-9_9eK`NswJAq3 zK7&yqO0n8;V=?|rOrnZBV|%QCx3Gm(O^yrwVE99AAG$Y*o73)Dg=L&Z6^%7oZ{kS% zUao?yfrI0nLVVoukByzoA%_NkdC^z}R$}eP9e97*`LCIHd>#gK_dSP1ru9{DLziHPSzMfn4#&BzP9OZeRV{>aV+?l+jFdoM7eqt!3H6k^T1UM`Dq@y~3jLN) z;*XWTUo<>7{Z=hs_EE%V6*5k6B%>TI$c-i9P#sthWgQzwRlXT`jNA5>ud4Y_{PomN zK{3JZ<&nI9U|rv@?VWwruoo#PZcP>9Um9PiW5#|f*{8u0|1=+E^p#hd)O}r^Dbb23 z+K-Wb7h|h-Vj20Norug&vtr{mqrTL$9Bp=sj7)yfV)sdNJakdNeQY zqUz8exW_lP&)6OmMi?`+wBZcB(#9{RSZko&7Eo{QG@TP{GFPK$wFC&A<)zp#OVJN? zJ_AB_O&K!AWNQL>ba@zPalVdarQgUtXsbyZ&k;<$Td)t70dsU>3&|;Isa@+yf@6A% zi5T^oI}STIqS(2YTe(P99npzE(#g7iPa)%lAEhX(H%8HtRb{xo!ur|fnx{|}H=u-6 zgY;z%vOM9bqj*v6y;7(EZG7XTn7cbJ3kwUtfX<0jM0BIOxkb>^(|ac(lIIbP1lsCT zUb`g9tsM}c-Rm<_@SO>yak5S`sJgdi(H_To5-^TWz@Du*|2_juyGA=ECDVFR=EfkH zB|7_?%sFHEj3y*mf9>WQFXcy1BJWV{HrsC^zj<|FA15~1(YC+VAgxI&BBP;(OT9wX z>>bM7xV@3qGr@MRRlUuDXRo|4Ijd>sXWgS-lMd{F%7d#jbaz7H6VHrg#uZ%vmWXq` zhZlUSYDD)Lp_tHXFx@j^4<3C&jp05|I(kHF#{~nVX69hzp1mNbzxay^*N-Ye$t-!o zoI&GLi^- z!pXcv*TZXmKMep9U6lkH8Qrt@^UfjLK-Cc{jy96pY1&X^BcMUGZDHc3v zQrrm+Aq3v^`JZ#W=bZ1E$=)-2_RL!MZ>_sf+5H2ZD&2U+i}AQ9Wa6RoJ2TJ9RvOM5 zUm(gJ9I>_UY+t+cOBXUiyDTeIgRt2D`sn;k)*n)HCr|r~HRv-2dDnT8{bmxb%#}F=#k9f{v;42w}%hIk4T2{C) z)ZFkc>A{XOm9nZ}+Uszj6afVZTr};OZ^NZnsM26CXZ;Y zR$m#SbXkK=^Nu;%;AjcZjFZl5nY@+zV>+fnDN6H%E|BDRBR^&AJ2%;9L}bdA4=Z6j z=HYHtrRCi$e;ns@h)_+vPWqY?5?=g>722ZS5@)XYJPx=$4Ns&*S%sUF)S4cf*ka$_ zD1daj9J*9Zo}WLzzW1frzmDa)Mea@)D4;hTEaMeIsN!gm(tpI?Jz=hsIqr3yE>jVB zd0D3oW<|L`cRqMvEz)QAb3q*=|L}&I)BpWErBbxw_t(2EmcjXK<^pJ*6HGvYSAMvy zSIAG^y6rHj6Uq7r`IzWwd0Adc*5aZ^F+Y3qame7%^h#aqO!!sa%s9I0Mx8vBci!;} zJnL2LSWI5It8|s+uFgXRG0$6EF7#-Ed9!qXPTzTR)X2rL8?8ZBCk+iNd;Pqz23H*shy}b%S5#!AS!a_!7Dw zDXiA8wM&U7r)+<$!bcWwVufV{NO>uq14?&BL_5eb=wF&TYigye6f!tOY`-fancA3` zE+`48b>kvY-LObSUv=y#G~c`{J9NVME&_JHUNnDpH`qHck9#G$I-MVfdje6#x32UG zJr;?=xytGv#?M4}NU;N_r`B+q;dA43cb>1({eOkl3nr{8dO4;DD zew!Ea8NsI^?&%PDeUgG70%y8UR%~qdvmZda^;>#7eM32?m_+FTC;ubpb>HB(LE^sB z$tCQ4_%!btVt1SzhJz5W1jSbDA&q&8;MIN9Dly7~&X1q1=AC15LB64C5j$=Io#AUe zC(@s<^YTRuTLffo3mVI=oCLHx>d_r12P-bV>_RA`ORn!W@LI^peNJWNg#2`Szfwgc z>@RAI;?dNba8-9RyF7G|ID&@Is4y)pXawHVkkCr4sm5gw?Wf* z=?A|aHA_4CEOE)4PAwF3r~r1~j>E|GK8`ZY8L;H5ml^*dD_*cu+{=hG4TmSCmw+g)0=B;~uybK#h1aF_mvE;&nKq zdW3Zr#PhV?wg1zqe0%ioABJ`u3$O)^D(DO@rXJqru8P1<<2lDFG#2H&f4()p>OhK1 zJQ?^Et0m*7AEpQ2dILd<_J~S(yhCBu_!JwC&lY;09vaC(G0)e*c3s)~9afyaJd`k_Uy=uxe}17lnbZcwho$^3xrs$4%VN zSrV6=vsVZ6&jtS{1`D)Py~44=OzyM}Tu{Mxdgd%Rg|WQ*O9ZS}5V0{tmR ze?ix@SQClwIFpRCv~Hpyx}`%w+x!#EQH7_MKZ)2yL@vCL(nKn4VMPAOR{(&`zYc^U z=ZJ7{EQ?gU#%%dfW{R6iH6Fgs2kTshrX2F^Fs$vtQ`Cq@v+lbSpdy;?IfvzbcP^PR zBBHNUN-rz?Sy~M6;i_~>(nOMNI)L|#|JAThOPSl*ZDrdiK28og4hXd4!c zE7WIE#y>2X9yqKhvFi80KzffGif?L5gz_*jFpS>3O2KuWE&qXS+SoUFB~4`37M5~( zsr{Z|sDE|U_#acDeZ6&~EGe0N-X&!%706H*4Kb5JC1Q*!&)pEb);7d$XGHH=&8SmY^=xbdQ4`fV50nY+8G(_(0foqu0<1ztoLdV47O-CVUux^!yOj+w z1!=q*V}j6v0@`v1h} zvQxXt@|Rht&_3d+5*wYoqFo2O9bT(gRcuOogXSE5Us$(EEVS!r@7hLMC}ivO+@= zVE-F9{nl^$`oF#nzupr~Zz%Q1(rxo!426syBc}xTWo#T8gs;=NxW9LQ7ik!PdMr#J zI-)HNjx0?s>f+jR7jFVKNUdZ|@I#o2_ik)8$?kkyMidpKb+vyA*9Rp#>L)aPrRU)x zAR{9iWdnt&NlV`-1%pP&iT#HZoC!AXp<;vP`pns9i*!?sKC%ZbYY9XrwW@4nD6y3D ze`QL-T(>T`S!9s{KEgM)CjhrG()`ChyhQs`dVm z8`PVRD7N+liwF1s3v4Y+@0OoXU8~2n@w*k#)3G)r=P}}ORf#s4!j?Z5l5O>ma*)2F z6mNq-IR@yPS~nNaRQhckZZwqK5*wr>Z-R>=88 z*Q}cH|99Y5DFsXxv*pRF_zmqIYqniOE+WL`SiH!RndDjeT%ILq*@bvWZs%2HLfwgx-Qotv@dxY-30hC|3-yHo~+P0V#@v_o1_U( zt!-@;W?xoqjGhD%T<@7i00BCyU35>mP>=;Ws+}`x#~ZHj>?(mx6ylo54lx{vy$g8# zU&`khfUoLroM_+z@{i_SxYd)A)XW$0@;w}|>RR0a4Ov@=x?s5Y|Lt7~`LMfm!c!GC-WKMw8}Ctz zcQb7Nols2>^~ITcw25!Hj&s}Y_WviK)C8TMNU+L=reN26P$m2*-Ttp12@1O}HJi}7 zuZ^gxlpAm!>}HS5U4Hq2HQc<|IH>h00`IstoFnk=l8?bOkT*qi6${#>pFsVvQr@CbZ25;s>~wD|@+C#}xu zMU2Sn{$`qa1w1koo1lSVJD=*@LWPL}&(OT{hF55I?wwZ_hb?E*aO#oKT&swep?U)W zLE<4CH5A}ad0;uFG2Se0B3E8?)oO!CkZsk#nev%_UTo`4eVMYeSqS;M!TgldXW!!c zJ4H}Q-KS^wEw{`U=no>XQdwJE29YWx(lz^!#6v`c`Z!nI46%XK^R6eqvEdJkgfEB1 zEze{?eOd7+GS35^2Ux7P#A=3}%5W-waWiu_i-Y~{p0#*_PN1J*)I0Ez-T5hjCxJfi z;n%a{i*BY}d$GSJI^!*b-?Q_pu%6L?omg-98_)TMQ&xBtF7?ucz6#2@{Y*KUnP=>M_exf{>}<2hbV2}vH2QLi|P?<|9Ng=YyOz{VsG0Ai*al7sOM$U zj?@`E6-Ziunc4}GqPj+Gcwo3nC`((*h5tlh{FRn6Nn=EM{qMdNNTV*iGYdn2{sB%I5jOGhiFLIeVb|b|bI$tluoe;yPhW9v@@fvQf_* z6ppHEXCD<|$ON@aQomaz)ss5ZgA6k!g|F|E4{_Ekp^4$J&1hx_))PDkG<=?Ijff=T zD2(l>XR4wZjwZ-lsx}ghW#{-~c`hE%9_e2v18g3ZlmF8>MLL->aHF+G?I+bOaToZj z;VZ7O5uXl8E0_+CwHvB3G@?N__%|kN|D$42t+4nT9&iQDcG}5Hn1I8MJ!~H+aVU?h(F^*~>&QcZeJ4Gy+ymDA*E&1GtdL^gEdZ z*nHN|^A^RkRi*~xQI~h8FU(@qjt-NZi7x+G{Q8-~wNnfj-=6(8cNkF!1^G|Xu!V6n zV&j)vp-mI-ZEkM5A1<(=nl7@bM07(lxVayBn#Oh>jXX zz&ur=FAs-;!qy68-C!5Il=Jp8tpb7lR8JOpAC-c{9XV=BD|ob-_wh4D&Y0zitbucV z?TTx{ar8U`{7wCAl^>5RuHq`NdwY*KOJAs?><5M;N z#^dm&^5;zOJJYap!?Js-VG`)c0Put52z2p6@sp&edbK;cU}kxeqIvD3_ZjUhAwXE0 zfF^iyPt@;iCd0$`v4bEMiOjg`p;IT8Zwh@vl%vpkalR)n%EC*oDz|ZH4SQR2&{}zO zqV;n9sS6o^Zqqyn3G#y)#r+bRb-MUTvBM_<)XFRO3F;+u^Q zYewLCvYGADhlYn+N$g%6%57B}qI`H$UlO%tDcB>j7k%-@?83t2 z85v}p{M{{fQt{!rK*Pp!K`(iM`MDD@;@aY0r#UfU9W~qVFywAe99>@#vuVa9zNs_q zXveR=hK8lxch8i93N_k}IfJ+lta%%`-eiOUmZ@I>3%gz)_uvWP<^=b?f<7k|2q4P~ zdLI|n{gMsCAl{7smUg*-3X*;)-cBm})-Z=|Hx{v>W-Li{Np^(~*)zb^`B6!$M{*Ll z*VZ=AF%M$;r%IZop7Y<3lqQFCZpnUj{%yr8EI@UI#jaEOq943*KNl`2GEczq0o8k3 zAb{4x0iE*1pNxRY$6|`rm(%`HJ^f)lmQQtsYjBKa_5iO>)4OX73iy#iGUrVDDlLTM zlN{A-CgAO}?~cXM9EMyLc25bue|Dn0dME2L69n&Rx+Apll^-fsDMi6El!ljIS|(m7 zUj*SRH8ybWer7W5BcI#jq=qzJZ`Ei6 zt4lM!B#6!S0Zoa~S1{CZL8sZW6&)7R$cAXCPOj5h43@@Kk-n5p0^;lH>fQuRGSJgA zfBHQ=t?>c}MY8-5@jXF#0?OuSayknpe2oK0v1e(oGs%oO`E+Hx1Xs)=<$&8#7w&*f-!ntQ7%=zgS2bczS!Y$aH$GpIp#s@KjhF~(B{%7VP_UWbD!3qmkkOv$Xv^yOl2?q0nHitS%u z{|@65@k6xIZO{2AkFJrtCz-7PO!ecbiTy=a7tguJnS7r^}|?t=TH-JeEZ1#UM|QoC;vMLFz$ zwt-Y9C^k**1KZ$kN?4d?$2&(&t4I_m-f%5d!|`1SMLltkkiTiGx*j*jm>8o6ig!1cL>eslkx zoB1&b3N#>v$3AB~C?mXIiy>{h<+LD={Mq1u(yKGS7I?!xLyz>%98MZ@+pd528H0SM zkMO1n_ZXF>)m|GU6;zufOjKGi`a09#qk;t>)d7%?1_cu`p}G>TW*?Dq)Hc3Dk9bMl z5S8rH{gU$B$;{*D%{G5bW?B|yT7g{nJO6q`GMgq)9<|u9K?k=d_*74Qsgy15xjL%O z;w)bZpqooM=^XeQXLoTRCh|n-aWC#my&arohmHAerHXC((#O_l7wH_^5F?6*l1^8ox^pzHT&W5`UFF@ zqW$mVt*;G<5556AOMV~r^Y`rsg__JOW}dNxtb?6;Eamdzw3*o2-!lJdean2B@`c>G3Hi=E9(aW;nn-FNTH{yxRFTXpR?n!FF`@yy6E@k#3%-yT2OMS6(ZPOjQcnukCy zI;iX}IeuebQEhynqtF!`3#~(%eW-nuALVr7`kC^a742uQlU6OC2G8x0aoyA>e=QCYrodr29(lU@zzOS8a$Z_2qi-Mm?fpp6;i9x3n4yrZmf=0@Ci;F zf5pnz%gRNC*#C_841MA^8k${9duv!gI2-0`E7UP)%lUQCQY%Md<@`N0%(jThtB=jJ zRcL5am~H*USx?3LiP4{P_F<#Oqplgwrb;5=$Ay}cH)>93O`radHVc}NHj|E+{?D28 zOD_rI7E?YHu*osx#ix!nQnGo0lKUiIxp7su4D#NYK>@@3zjV3iLw@SmzE>>a0m^M?bl)+^-GDZ zuddtZ1z3lTE0kb*DQ)kws%ae_k%Q4LCbgr1YFEw8)E8A~y{{wdxZVDKyoe~Q6u&=} zLhedr>6n;+H1M8jtE$Gm5-Q397IsK8q>If!)lV~}UHSMiWvQ@_7EO|b z)#HJ08QhrkYaKi6@vLl_10K5+99Pl9uZr*ytGG{_xJtK>Vdp~Jm(CtI2?X4026BjS zAt!zxEtwgW-65c94znd{%-Xb@i-3ib4j-CkM8jI?Y?LK-2D{y`Hh+cKoU09q`Wons zCNHZnI7CiI3c-9MV5a%N5tH(G45EX) zvny@@%^|0P=07S}z`UgLeUEoKcm2`MB^ICu&3ws{Mnv6O+Oc?!D(dIEN|@UTTt}=bJL7o-Q?5h0b%t7O96=fEV;y~ z5D1$xX&^#^c3f_}J5>;>xA7j2y0(E-_IRw#VqMN9Pp!~9I933{If5lWRld0?TNh>u z>86T|DeuHP=;mOc2HB%Kc`l{RwL`D-3h*)EB=4fRqar#^eX?+HG|#<$SueYAR7>2o zIap4|OkBUMv2!^+?K=I?a{L-pc{dJXy>Dtk3c$)MwisHdkJArz%58Iw{o@}#O&20x zqrd<5;*VYi=RLBrxJOk-HLRsA)j|gk*(q7<%WAy#@z^C^iio*W5NST>bHDwPvmtCP zZFVgq#}a$#{d3fv8;cgw?Sxw-6A?%TSDjY&&#l*Ej8+RvBG~U@uXEv4F#Zb|q9TpR zXViNq771NI0hpPZ&=_{_`cr;*aK zs$SALJbA`m^7A$;%ZY>99xO5cP;Xwpa!zv>=hOpuOYijBbXGwJ$of2%PTRz<=pA~k zZx)m3J%&!6TNg{jVz2ndkx~BX^5B1424!uYTnR|&&B5}@J*Y~%mCo0?vvWoJ3aAi$ zx3rZnMYz@>My&G=eNua%%_H>PFpVX)2Zwwfn}$oNg$~ua%8wvNOL;-vJ`8{Gf;;$2+XM@L;oR_-QpERf9T0Rdl#Rx5^HrxE-`*5)0QC z0{Kr699#E7lP_w`%8`i}kmFo};PQ&Xm=~;HU{g|f^IXG}n@;EgpWCv$y&nm)%08*X@IJO%8Bb~9PNx2{bT5T z$I>0ewzyHr-qOX|aL{aMk^_bKLru0!i2Chf$Lg_OUah=K;I99rs}|=R+yx6!3DVm8 z9=~?{ku}Ve2XXqv{Y3l*nxqXpz~APr1nv)3bX#@5!^)b+gCvPdMAbdL?Y=DL*pHB) zgqf^BQAUB;2sAtLxbiQG9#5bP&(a^2;5lo!3R@uK+Ug~4Ph=o=7ohz7o@bH=B(P3j zqw<*h$KfV&Nxa|qfp>7lE{I>_IQUp>2b?xHKGtyfXx`jHJ`LYu^Zr*G*bEr=SHL9KPRze=KW`T$1 zzU>11D%RV%iv#gd>4fKdh4DV&CC_FCbC-|@dOZ%I4%1wjewbcU4r$NHKs9A(ADcj+PS=&1FJ zT9Dw7AQT5^L@C91aHhAq3ycQ@Nh+*bQs6&!Tk;tJ%?^PW1m2&%V{8odr1i1d?qNJ$ zbUzfi&_LAB&e8H<16-NMfNmnCy!o~Mc!%X(r3RO^S7!?|n^j}orDNS2CJObxvUU#m zE&{twwS1vI8J5mI2qWSp{^T7yP%i+!E6Mhg8>MoFn_I;M4Gytkn4R*NH z=e*&2Nb7YC2f**k`)P^vy1w`lZlrF(8k0(0ObH^J4roxY<8HQM&pa$?Cn*cg*t8Ydq04 zhpTse#h6PqbCFa#M+6O#ue^($;@E-1e3Eyd5|T38p1kK97v9IN0td+nH}(sIC<_d6 z+%DKg;Evsfe-7|64V(enp=A>Z3O&ioQ5#0(J?lD|g z34$23cjbQ5*vx}@h>6=~cQ+yJ*KE48upZpY*n6O>J+78{>428@$4RN{iYh*A1WBu@Esmf!rolPZ#QP zN5;omUZ-C>s%NrE?mu{j`(>*Q?cyT#wr$MFDj!=4yP?2!aNST2_s6UUWYws5#twu> z5*-pEPdDMY3M`YfU4y5eh^=+ytx3Q-E;-q9Y_2QY5v53h{NBxa{Tp#^4cqO9+7oj3 z?wWMtl54ZPGJ_VrU}e7B?uq)-MXKG3Mj>KZ;bF;I%(yVg*vv-hkPMI1b6+Ks@g4(j zqPU!rv3MR(7qo{@{Gw|CuBv#FU08103hVS6wQNUHVC>xT_aumQ$GgSDN-(*aoF77e zE^$U#l*I@{>kz-}eVHGefv?-WD7BK?DPx-l)ILMUCWHzrqeHSv4~IY+`!U7syXWPZ z2JMQ%OC8_cb)nRTS0%@xx@8oTA7)BOhWFbe9x56b8TUHdlypu9FT8V@+mk7iN(DlE zx>W-$s;{%`E`Ghcf?RdyhRi2VC}NiVoh{DvMG&wUX;#>S*=H)^y1eg6#*ufc`H7qS z2gNk8bK~^ZnF41)6L4Eb-0nT$3yuorr&r8VB?7rqq0p4_qd|M}HoKJbJL+1kBggcc z&I+%R5@RkI4y0#>VhFzhN41zXy3;-|;i#ZPK4h&Uu-hpd zGb_=uFwb?%4fo`>WGBe-+fD||W(T-=*+UVp^#?cXD%)GNi-`518lSFvrD*JYo3&F8 z2x*QVyIP{Qze)7~G+h&9jFc19cKvylOxJXEoYu5e=p%fVNaJwd7SV<$pKjp|B#?2_=VzTjYJ z&gKPV#)O2#(G+faQ-5~%WB$?+>mWyhU8lO1-p6>EQwQXGo(CcKOAG|#jGr9`G0sl7 zTEzohIXvQE6nB(Nk;SU*am-C@!B_}onr~zu`?=|=l&Q;=PK?VuU=^;nTw#VC4mmYh zJ^Hm>-O?PQ5Hr>g@lQO^^OL{XPuRgCo=10_L_W|0ppx_YNSj7xyXJO|a_>r=lETYppC<^6beQXsh^ZL`jkc`+v{_9)je5zMhdac`RaR>PzKnOlCtdGW|CW|?aX z`Br*W0#}a(boc#&u-sY|pSZhnk6!L9AMg0z*SCJ}ZO)-VmH8hfI@O9_{aje7J3o^O zusgA+o)Wl>1^Md1H&%F&`ITnFekfn3$f0y5zJ^b$l114$s_N2VAUVUG;5_!`jV@9fpdc9!)6xa1Sp% z=Osc?9_|7=R#fJM@p(vg@lpwS%=1%3CXoAh&fpf7bB?; z5UM_QmO+j8cX2RYK1L_yig;#9{Z?4{BzNXIAL|1pE2=)~OI7L;)sg2!-h=B8oj(xG ziEN;H7V13$h*zoJXXH93#9ajHTB{Zm_Oz2YX~X*`*>drk>;p->T`%#13SP*FHC?X- zU<(3d?H@udoQ(u!e3uT<+bch7waspQ*nws>bsd^l7`^8}^|V|w?bK0w3`%SnhN-zqq~y&F}si%ulXo_rg2AKut9njMp{#N zbmKPMBs|=wzpHOIH^SV0mJH0~u{j84G;^RyJ6nZqm9G8{iQhNTAuM#Y3u2+W?N#jpc&FP_D5fxP~x_EMDK_S%jg9md=2M! z9q%CXCn_X_c*&hSzh_F9QOg&*=g|0!(ivOQ29@|a1*;Fr== zk1*!;bDP>P=YM>3yjZK&%$s{&aIUnl29FaN{S3K|7(UD?*V|tp>5A=MN;_CI?ee;A zg*vY6CtWRynK@|ils8Nh@Ocgvke_|dSU|xtlWW%vkkwk|IPWj8?Rg5Xl_OuT#TJ`A z;FXdWRA}XL26_PaMT&qEKb(dd=D9BIRI}{qcA$xDoKjaTK9n0cYD{y*0JRXex@PwJMj8UBeSW!91%3(%YBzwGH*mOTiwB)doaaQIXAj495any}&>&Emc)9YW?$*&xevM9AxGFnEnF= z3^@kyDqiTVGOdMFv1gc6E!Bc_;-NIv7bVLp;f^Opv-6v3W-~$r5*{(bY2qa{jZLBdTh75xLhnx1J=mc26Nvd?7E)<12@5i-jJtwNd5@jQ;9jRPaLo5lHd32WH7JtLzE=RnR{Vn3YU_W6YKEb?1t%aP@MBlDTM7GKw*shhuf>3QuB*1QYST>I&=zXneMS~@ zIWZ-f!xLbW1M>Y258@DtcUx`KKLkOGjMUm^91nEM{%|DkI|74yE=dJkvKyfgPmmb7 zL~xLkyv|s2X)UUs)s;O&oXrGqLz&Zh7Q7}n5vL#|5ACq+R9(FfJ!!SA=ih&3f}ExB zTAq~HYwvhmEYb(Bf_rXKyvgrvTyy-Dw5M?bgQ$^QW4}`m)4E(%R3pMZUN)08rB8x+FKwc zYBvu_7@}#D_66(;Pec*zAd#Mtlev3TWC*GjT*`PKyRBY-mJpPG2eDoY+YDBkGq{L= zz0zKIA<_^!@nVP6`AGkE&;p=^DpQ1k=c?l}A8TB&Rc7nc(l0H_y2}joYEtNNCi7Q1?VnZ1HgA0droe53gIu9im-MBXGG)OIr zr$SSfZ!6C|6k49t=ro?|;949Pj2`19528y+vIGe~v5WfginUAS)Bg4t%hliQe!gQG zjg(criU^Lfx$HMuZ(DAFA)U_atASo;Ke)yGhlEvxL4u!kGHM5$6B38v%Ln1d zCt8bS!U{1o_o?S3X13VQ?il`Km^oMo$Nd|QS#O*%qGKN8*$^HRGea>`Ml-kw)lJGe z%j#8Xu33ZGCca)y-9~6pVcK2=$J%GeraL*$qk;)^oht_!%gjP!Z|Yd(UmYcN)USOX zLmzN{3A_s7NE0n-DSfHF1eD@kzE_qJ5G%(hJm<4rgtyzO)R%OB#*Ru++snRS*e|S| z3+m=^^)FXNBP*1s>eRph#q#EL&6NWT?)xQEObx0iEHD->BRQC;Je5@nM(=KV9*?W% z<-K|j>S7r7YCI8#`D{v8Q*1oSoUM`)WZtQFTPIq@%L*%x#ig(|vlxDVJi#xzVMHSB zV5217zmG!)4OzL*NbwJr%BQUwIgeWpJ6%0`7aei@ zJ(ab(`dlJw=Z`g0&j{RdeSF?%F+E;M#?o{u-UuQ-A9wYllCKjF{$PP|uC^gu2EJiu zRDdqsbvpgr{u(YE*nmqaLw<3YL>_X=L+)`ceX$gNL}PPMcD0snxn3QJX&3dvK;T}e zV$&s{j}nKB)7U&XPjqvv1su{grWIhc+L|H2-^@BbpA2ONOc!pdK?%@mBuh2 zwqyk6JI^tGxLs*)G0Ui7qIT}ffE(lN9Nygv?FeSSsRSsLqS7!b)4KhN4LG-P_fNM~ z{PdPPq==H%{M8d_3HqWry!NKCx4pHu8u5y;MfiL#LRWTKH4Q*tsGg7nMBjP$2SYEC0I;i?5xICi#N{vm@d!%nx zMY~iBgiY%)Z&GzrGQMSmkc{o{Gkh#;JmYARFTK{|U?SZRCcB8&s9JeMiQ z@%A&v7vl)lh4hXR$JJBd4qkiL#n*`rKxS@yZeg3_k*!Hp7B+MaT_8Q*!ZjOEtV+Iz zNi@dKY=0W)@9~S;_(KljRM@sVf@J7&Va8q{y)WZJK2{7Nh|3+uWArilG3an%9v+lg zGA+TO1vzb-yy(2{Cus6H8EC>vX?Oa>@{ov~C(dU8HWQQ7TgtZ(xZiYNb4Na3dx(+a zy?Cf6_g9+zu6Q^xo3goUzcRINc>Z+_kMZCZ=;;;nf&~~Ck#66<{9B_A?QV^ZEn#Ud`uKBkbIKd{>KM>l6l-9o+FpI;bI{M@_W_Q8wd2s3-Xd-i3VsC+_)=Ec-Z&# zH${_u!ICM?QmuCUwX6Z3@7Ha|-FA{n+;ElUipG2eqXp~^KE>&SWIij^7Zlo*Y|mMk zlYHwMBXy5FQZqjEJLr;Y79|#F+E@998_{uFT*&9}v$zn_LZj$~TQ(86V9i^n*=Py8 zxnCe$uoy05W&jZ`Rmo%}v40LCt5AK=OhVO=_;Im5;JORvfH%wjS4psLQ7{Os&tW?P(SRpDrC~i%c1;wa>T{w+g+vx(kz1oI`BRWFn^|s4;VC1S+y>%X=zU zyd3^|BE28x-k*$lAAy}lnS#rdJ>!FPk)W)Zkry#{?+^6lzvu=r{z-l@tZh_nVDCGj zHEH)bCEhrDZu<8*Lp2cNsgAOnNH3#Qha)jcddq}=NJ|Gb46I}d&Q&#;R$*Ff_7qoa zVWuX}SEYjp`14pD#MS14Yl!6)CZb=ku1g_=%<1ozupmPNN-`6Qsi7%IlZXC4Ec%)} zPWCa`;)=d_OEoVfveF=pkENiQM67eZtK`Z{WgaPlSL4LV?Y>BU`dwI0$Le&l{sS4fnj0W=v*Xc4mqEwnWWLC&Uxtux_;msmuH@O^`;>z0kiy%f%5Y= zc^?=kZJZ~tf3h1GH9jqR!N-blL|twut=ReX(_;h@ue173!civC%1sH9O)0x^hA7F2 z@nIm($4+%(^lOt3=a?V%1Gl7}uhEgZKY~V1{|Q_@J{lHuz~hV|T&y7@n(_iwAY-#-gI?;`Jg>3VLDZnE63`2LM~!+R^-|66eU zt{;+uJJ$HCC)()sD}N00fLvN{Ns~A)y{EyHVF3Zd_l#twh;*nB(%gEb`B-@CrwfGd zZQ~MP>11|)fGf=DO{gUc#lVhU0gtfe`-LOUC@HH_sgYWPKbNn6(jG;nHbta(A1+jw z^#o_XkRAGe)!2qlRSK%n*!t74V>!iUg-Lb={c9kCrMfl!*;CG2b!1 zrT=>Dn08$d1Ngrr{W~O`=i>Ecb4Iinf}%*0Xqb>&hb6AOncvI3!lveCew;lo8{F7W z9MMk9;4CR0QxIds$p6It4I^f3T696o+IspfYr`GxF%P0SYU~7eVlLS{$LJz!_hp-I z+b*PFWJS#$3UlQ*N(9$d?&$ZtXa3H-h-Bh4$3Xj{O(u zqpTuo#h{V(!$gl>_Gi5}V{R7>+R~;4_+SgrQ z54_vwvJ*sy1M$EAoMDfZQ$hqbx^x?4^F2B1q!i%@{C@-dkm{`BVbKVN75^snGq|RJ zOMSrtgf=b?q!@6&p+Nlt&FaVE(bZ(eOH!=M##z~oOqsvzeVHp(Ca8LXw_tSNIIkC7eE=8r-TnmaZ48`_ zN2b|on6u=0vr|qNB+o9PTN4OZLH3!NHAqK6{bufcc{Bo%V)xXcM81AYZ|_F}y;ro%_vlZm%}x@QXiZyNX> z*$nLCrtwHPfH6@+D?wob&k|kT>aK1Y@_L*2f9@-rt)ZjBdN!9`Zl*Ya0k0v&1fJF; zUXIWIy8JT%C447GOh3!HZBE{-c#XcI$g%!6ueSyFjR#RKiAm=PaZ^tJ(KAcDv{vEc zCT}QC1aRWw7lWI;ss1etw5WBkq*YK}l;DH0%(Rn(BAJ`21Z_X2^naMmbAzQv%-&s$ zx)H_`xBeIFe9SR?TuNWmBaWPW6#iSww2rdEqnfHbMIW-8c*y!`5mIkERL0-*=io3D z?H$nDWV97-4?5^{A|p|kQa)pC*yPv5?!?T{A!KS;AY{wM#q$%B?*3MmJ%WPq}LWKIRY1>cT6acjvYbjzm9~ z6RucXH^ovn`o@_45*sz}x8=<#tJ}};8S^Q>bj5eo0$#p(8?zG;8S8b)rSkh5%Mnu6 zV7?6!_t93;gW*S=4v&Ds0mRYj`|&Wrm8l5VCIbSI0IiLvn^^$%80#=fl$(%rR^?1u z*I#FgswP}Rj?tDo^g7hg) zgJxwHTnnUp-mc5D8*`B=zk#v2~E}G@$>bwlfR!LXD}IHb9+3 z=bD8ZBa~~I^A6pagL-?7dqX?yU-MJXD7h_XfydxWpJD;S z!@3Ee_1t%*Pvmb^Jq*jKt>lM=iG z(b|xD5Ul(9jTp7>dHvqOzI!cDI>gT{Gec?dJ5D-V$g zm#fPNVae{<)zG=V`{oJcYkusZ@prU4A}ts1 zO;#D5WLs7dq6)vh(Ge7+RRl#u5D=t9N$Cr=~x&5hXc5GS5-zYR-HpF-IH@ZBF|joTaiZ~g{R zsdq%b62%sA37-BQy64q;!wB0MIcnR55jgoCB@1P*u38Z*TIoc*xUC9TwCf#OGRO4zefjW6oAT{6PEUVb9F_8Hzrs zSaKT1;e-EM;qo? zv#LD1K-xNSg(Kg;lD=$21hgHdM=wlC{G?+0VRspnJC?68^={+2wvXYJDvH>bpXs+#8`->AWHpzJt}4`YR@k`4T9oi}7aTy^ zq?@AzHpmIt>D)|?_ZBu1*CPaS1jFps1vAqYvA(5xO%dX+bh*E9+M!~ccKBgB+t{#s z-&wYyY5PJ|T4x8HW8%{ob?iy!8qm3CJ0i8Z-U|E1by{bpvSa@1nJ%l6+E4PSBGCfd*CAGKKpF-qUyJ92Ho=cX7w3#QkFnq;3Wbj6 z3{@_rqnU~{!O12x(nNWp*)28W%Bmf&wZ@1s&ZX?qW0~pvYIGPX<|($)0n&iqe|mnO zD9Rc&z9A=+Jo97=H}GKc4Yw}}96y288@Z*1sAT$1Mt2Vr^4d;50nnP$^hZ_=Xq{xg z`SJ$O*{K3UcBx|R*`W1ikvWVz(@VFB2bDIMz3)>G3ozW)0%c82ke7uikq&3Qn%Zhf zpRPE(TFP*oGXQ$c9nx$0i@r9thw~AF5DQdWeq2%`BD+hxLudOO#@7D! z@ivl~CRNfPAROaSTD${c=n6G=pVllK^;&y@U|jd#h+CfmPe(q;cr8ofM|*I=^Mm&4 zs~ci%+rrP}%8&#(JpL9V*{PGqiG1pyUp>qBbleh1?rVIc21RIM3bqR#-z_SgwQzg_ z1uwH*zYU#+tR0T(rNYJ&Pxq-&woYyhLX-EHebV#l25RhfT+>|BV+)>MX-6|+iVcw9 zm#`h1S)KY(VwKV*#xEchaAsr5iUd^%ofh_LUi&A`V2H zLhBQ0W6(Ld!D5e44{#CwR!0x2B3YPCZi2^=XtS0`(@oLOThTaZZ;^Y_syt6nsdzWs zuY9Up{xD9L_gQbBgy|A&^^JAKE8Ww!o~{GITAv?tDTYP-4xqAl{+v8}&9spIyDUwj z@~(0Ax(gH5Yg91`c}wlgv2P{xVRsK6xnH>D(@NS&4i;)2A)_5uBu6%9a`mny$8FHL zrq{2WTcpj+=;u{Bre^%ACGho)T&Vx^JxM7zm6>VhB)zE+?X#QSGT5l|#<9-0eiBQL zc9}#S^*76=y1Xi%g(dy|Fn4ae8A#`SVukfmIzp;7V#hQ}8cLG$g%3#GewKu#$8y4w zwFEO>&=B7hRQA%W@-b`TG%Kx-}S%iN4U6kd^3SPQEJ( zd#iUg-%%@uc*Jg`p^Sgbiy$capik;#sA3%^FC|$@1O{{>1vLei>tgL-Gs{V*60p%E zf>al%3i!59-8m=L6C*tUE_w&PZ<2PvgYX*j;e;UUd7!)nzj%#*M6>0_)=tz9`xG-$ zPQ003lyZ_7R~}kRk6-_p?zXHHpw<0M!h_6iwxov4V)TePl|GEoqlre4xZf%*3MfjWn||u%&ySOJ+4o3 zNgr24A9Plhj)AAs4wAASg$Z*kb+a`&LN$Y))XLONFaCbBDK6vFyl3RFo|sG7YgN#@ z_zIXL1gdyxuhC`o45sn@jeH>|9Gi{eoXQNXX|nt!CS1^2s;YWCALlq*Z+oyZF6ge5 zi_dhNyha(cZC#hyE=?@$+7PZneXV_m)?{+3FuYrs@P|@l<{n(Cv%^a16IsMjtyd6z z*beGjLM!u>QKhu$fe0sKT|3vAkdY<~<<`Sfr!TUiVdULX(D#VJW#By6CGc%l!757Y zC_1RAm?wT~U=;amcxHZPz6E{mn9baK$ICEgAWhK*)_Y67rbu%c>d~Jt&X5dXCT|+Z zP`XRo*QPL7#@gwWOY1O~SP9RJsKIa8Dus%4sWfQu3u2nWw<14Q*UEHt@}aF9Qvxo* zLJ=p@hNT}2lb!T(DOg%^d1kpr*C{@c4#vUfcd3?JFzg34xhI0$na&YYutV4!JWlL5 zHr*Q{?U7;o=9U*+H1jF~^>?6)5eGO}eOgN!9k&SIO@wLjZ9YK@I8c+lW{5D zr`Egh&8bJ+E!_EGDf-@_&c)MS8|&UXdUCmvx60f9Cijvh59E+a!A;zOSSOGywvB9t!H?V9NssAf+Pl(ySZ7?L zD*J>c#ciz%2tjr%MOE&x2j8&cKQ@m05=D`9DOr?G%IdYuzTPSz2mM;JhJD@mjXyss zwRShuw0C=E!@Q4I_4t$Y*l39`BM0Ma1DSCDs6nd+6cio%Pld0Mw}t)YJu(B-L_)oxJf6jiq2%aMlwM5n=msW^9z+q#AU# zf1Ba7vMn{#sAhW00WFDczDm=6Fi@>i>N~5?{2sX1Z}+f%n~M*OhS7I*&N6EaMVS2f zZ}?H@yo2AI^v4B!BvMsKB}d1SDL7;mi1k`hqX?L;Ydmubn=kE6hd03&*){sKGCw%w z?bfc?15vT`>q%*i`D@Zv`+%pO!=|}&qn>;t%Ffq0l<_ex7?+Og3493SfyJTh@2@}R zde74Q2;Qwlt>x1uheZ%ghd37#_@b|I;euEF0(4Xh9XIt$OId~9Y+sEX)`ZM3DUP8V zxPO8SxW`*qLRa);$f`UtKrMlJ{nA(PQMo{Qjt$T99lx`$F*lxc68$-L8E!o&VMd*9vV|h`5{I2Ug_jo1~TlJj&t#F^-F!~(9I8t zqlZuDB_7_85`HCw>x2QZ>W?}xFAFF3Fh9(->iF=RdtGyhxW^*Wab;p^3F)OVXu`vd zkIi}Tk+(h{hiQR=u#$Svv3fkqY%DpW=u~OI5yTRTTks9NNl9+5PwXRsXK3Q*&RB9w zMjV0HxjprCSd@Y+5kyA_(KJfmO3oJ74@w>VyVOyH9|2B+{AkIJ!b;Cyvq*8nU9QiD znMpyqxGPPn#9L4?Vt3^!@OOCv%VuHoe-Uy_Et>;*{AZ;rZfO6$uWPmF!O;yIbZXK; zYCbvaMNh|K7(~!7fLjo#O0kQwfu7IQ1upi?L`ZRL&A`_+*FMoFcZ~X{5FSyv)$df@ z!TP03pxjF*TD)F|d1Vf$xFGRrJI}Fx>bJHrkz!f9%49vMu^^c%s&sks0sm&4Z?;sr zbFs^i_b6)GuuN&Jo{`JoFo=)K82wjRMa?|jYQ$&iO_o@B#1tPM++gayB}l9|SbOlt zpMak#f{`z!S-?S>`>o~AF3WH`i|bZ68l@{Ht?a88KUyh#jC&_2e=#^mC+VVZF87og zN8rG6ziBuza=|FlKm^pC6(t=IkYs-9x!cmWvZ`oALN$Tdg*Si^mq$wOy z1hSDd)N?dpZc$#klTg`|!#t8LQ51IUo+znz@=>yAb^n(df}td>a6;$F&|lqYAGL8Z zD{Kgm&V7Rw45rUwpXZD80V=|gh5dgweEOqg-5-dZsG&M%t?P_^fI2OxWhShU7D(_u z_n8Mm{4sraT00cnk9EIo+x|K92u+F+(QPzKN9D0rEfRti#oF+wF z*<4L{q1AE!_MD({heY3YDx$;D`2l-u%YvltnXAI4fDe2iu?CXpna&5Df|e=Fh$z)y z-Z{EEd8UmvIki5EhwKwRdY73CzygTm(uN?+V2*D3_z2k@Tida{m6H{l4LbNdKfpM> zyh7oiPFhhhmJ?Zq84(?g?$Qq1?%fVkm~21y+Q=C4!!w}E$g(9VZ%8;oD4x%uD4J6! z)@$PBW*U2w*qAophCq0Q)B74q%))s%3fQk}CH(v&sf%zG+BJ6sug_X%_czpOEqeuU z-rJbfiT6qmXk)iM9X$Qs`8f3md~NEYCdjQH^Lu0bU6y-?KGnJ!Dc*fq!+IWN59EJEh(V;WW5i}ka;Al_@A8m#i$r?t$#>LkK6$yDoJ zyLN(0n60M;j4-kMg8LsInd?dvr`uvrf>P+%-z>h^oe7Il z=?>45k<+7#Wy@K5y9^GU%ibm|_fXh^QPozyeiFLCbK1AsZfhwQzF%fq@6^9MCj_o@ zY;gRPravqHNLYD{Y(+$u+o*_6ml1rq2@q_-(Os_yA3`(6-yI%4Rft;MI)0cGEui8+98gy*x#j!LLkZz8}Q!i34$B11%W z!gJ}lERkD3SVDQnid}W{cc)_nv8pXGP>BoA6gF|VMrx4i=-Jmfq4^}BXmY%K<)nXz zMk+b$$26&XYc~7QlHw^|%_|jkXUv~8(w+ITkSh*}zrjKif4SF|ipkixinI>jj>@7? zZcj`!?MS$Iktp;)yXcuG&F1kSU#tpmsqiRjwpM*Wd>Q;2-Zwp$A&4ujmN`F)5vO?m zuC}J!*YfX6oBjqb&IbpAN4wRp;vr|B`2{XC8k&`VjIghTRQ4S>a1HJ~Vo6~n1cB}+ zfREpi%7H30?>J@n5fKe{AllxODk#^#0gJw!LNikP-P8WBI7MrOXX7ai6@AGYb1R5ed2u4g@G{lgg4R?nt&5!$ zZ$iKdOgD;$ca{Ld9 z>Slan#lStjr{tltt2R+$L#A*b76wdEh^h2q z+4EBhJDn4+)qX@y87dCFJq*T-HOfr!YA08dBHCTsnvDG48XsoX=>=bQbJoi^% zihgky4^+;ZG>cab-kM3OZ3JQ+!YI_Y5!jFf5FGV2w6RzvCgPl@X31(fLCJmnynycx zSkw0)2?P18>a7;Es>1iN+rlrdF+Szt1Se)jOsi?>jkW|Vs0OY;G*NUFd=f419hd?5 zM3pC5B7&pqv^FDWUizFf>Z#oT+)N_)oLUNJI<5{}5uGJC+DmrsICT|xlM`SLTdL^l zixdqFM1NxTX%;hA9Z3SW1Tn|(7 z;-MXg)Elgm)S{6b6gmG1mlndMk3RQ%Ky(cTU*taQcMVWpNE@0m_%TKQOBBEw&s!?z z#)16lLMy$EDn7^ZY9ajxdcc6?C}jm~Jbw#zHQ)cbOOPAv`TUAU#Q;Br=-9s#TY)npem?(xMjs{esRqzQDXTFl% zyXp(gx!#aK-JkLj^|e?-w@m}<;6FHH?)N8iH{nKR?NH*aNpkL`bIC=_t59TiJl&ji z7YaLyR6fJAjN1}R_#$So^x@1{U`Et;LwmhfmxFZ<5fhA^=NJ45cXH^HgQZ4G=QFIf zO~pJNbsjH8=$OP`)R*oY zS3_p&;Zs2JwT4Fe`~SOw4j)(IqC|j({Qa+?G)D>yuYps{l4H%EjQzkA_PkBXniW(N zQArp+nsb_4NLz1ei4oR#Lr`^ywb?)!#TUP_#dSOv`L>-racHgHZ*C{|7)+WMnlz|D zEva}w9&@s>`ldzwMqarwmHbzr;?#YcA2mVcOMHqLIr60+9zJh9KRZZ;3S1m?lD*KQ zd+wZZ(l(@xJ5>4NARSRqQi67r;hc2V5H4y5zuZ__T3U;etIr4W(mB#_c`jX{%gEb) zfj4zDK9^}2_OylQ-Y7EO&jUi*zxGO63qpgY%hQq1+XPYAS$GIHc+0`ztti>0V5vj$ zIK%TIWRB*xlNW+csD6L0R`QkYx4yDyG$*-Xmf7c?`O9XlWFhEl^(*8)_kn8O2Y1lN zWt}9Tsz<(^yKYxw?H4HN7^2Z^rtObg=rjmj&9h^qt~!oK_|h(!W+mryK+}gG=-7|& z8fM8VUO`(&lKFf<{=EuH;+hE}fJN1^B+Hw#q&`Z$^Emq1cLV#hNVN)+G%6Iv7xJlW6^Y5Mh?=n^pIFDl^ikbLyT=T5OF}I4R05BFm#vALzvZtg#e0- z>9sVF`BOI&Bp4;C3Sp>5+HqO`;g6j^syP+3bNPEWld)~>H(EeEb*Q@(hu*DbAkX&>>xr|4sE z>2HW$Z%#eneCz+R-LdQ;^tgzqW*dWkHbL{}(h6*hg|JmK0arW*3hDY1v-l}7CF83Z zGWGWTyn+|@x5xm;x;hvYdi(Z}gz;q}D|yaW5!2=Nn@M}aEkYIB7SHIo zjc_-eMbtSgyEL8mSr`p=HniS-W*v;JMOp?wXc7JPXC~fWC@&?GCHXLiYPfv9-cYy3 z13*nIL7%! zBewO-VH?6M5#o_CDG7-uc^`_Fdp&(N1wDAdrjC0Inf$(@vP(d4oAYkf_-Vj1>z!*= z{$gg|IIg~DQ8=0ZaXDKZIN#0+>T z;wzv*tCKA5N3MZhMAC|3$S`aW8f) zwzt8w1#4djVoQ@YW=8flG>T{EhNA#UJ|$|)K<4deBnYex@}pW zjvc#Jb&+v9s_Pe-{)OfDMr^Ll_KM09mb}}4JM4xMleRW;&mw~DH>MfuWVoUdO7HmU z6{&=#4QWt}=ZUdxy7+WTQVU`)Zr)SB2zzk0t+5P)R-`5D{U|Ctp#wU3&IuXYjkcgb zN}m%I<}TFtbpGwdb<2h3oiCQe!{2fgUoDUMcC4t`DhH~VBwnYxrPCu|IVJ8uFAlVI zf^#Q)-+dJ2_EMx?na+9JHrg~z>0n^GLkpP@)Lc#`9fkTCl@8{NEl)KcFi1$u-p=5P znD~Na9BBe0QY5+B>fI+%O}~lb^wdSrOsMgDMwBAchDvE6mTGHfdm{qdzu6BlMqUO- zSkrrA&?H9*jGDn%Q;ll5Cntx7sdn9K#?&0^2dNnc&8`s&zL%vTRvLzlYAos7 zY7yhMFVVxccck)S*&{~GF-ZP{-YN$}cHxBf*M}@x$YR-Psq#%%fzug&_c= zzve$5&K1wVPb5E4_F3(h>drK?Gex$UpVb;l5h3c`xpwnk1>WEy%9lY zOhNS)#gLok#onw;j0b^r-q;^>ocfwMtGSV5gi6Bs(2wWD%t|963&gaafWnAaGX&(Z zAEO@V)UQ2BOvp4Mx*GX{kN;PXCiUT;U!1!_ahDh zdq2|+x6b)T(hrPgWCgB;B){AY;rGs;&)2nEvAg^n3t90D9Yck233`u;h`J1l)Njk9 z*s|RAPei-DwiHvLqeG$&?aI(^rj|=DVTT3dopT2_MXS>!If)s>x@H!!dZlMJs>78( z`;;O^GD5ArOZhe90YmsCahtfc{B-}T^@dJEy;V-h^RW+@dAef5W?1tng}7!`dS6kU zBM8K?C>%pNNIv`J?|@SDwUzbjpRKEvOxI= ziaQ_t2wc^Vp|a7>oMqK5_4I5v?M=L7j}Eg+%Y6dU?(Y4SCIb9=N>(8ky$(uG64sb` ziwJ|pQOKe+wSR0_r5@(3l&r4N*w5utpQ(8^PLALP(0UA7@6)q(P2m2|k^yc_dUtEosSu=rUbZeT&yd$cDg@eUn*UTlh zO&{F~e$39^*+7)>9K;27) zwFlB9#tLEvLgwV z|2z2vM4|Z;J4v}Il#@VMJCjX0iD-gV%rv&~Y|YPelwWK2nBabzj;gYPHs_qpHBYr* zf!vhJGhU|(u@J3}t2HN@O0@$mKgBOMu@bN-fn{hl7TrclCHfNU3#(*y8o*TNyhQlI zf=9rG&GX_nTflr{Thlw%HeoI43c^L|%VCv>xIj$SPh9+@5l|K_>K_Z>lKDg5Fq0S9 zP#V!j#n_hTV%w?XRCjgu$-W7<79&XQ_4eB4Q3{+DAAmthzTw-s?r#DBS2Q{|v8^bO z3bWGD6&;My*p`lAs-~N}7(vcF%1kqksU}||yajpS^01UnbrB-*Npd1+U>l1d}Jgz#F9-gSy&%$yd2 zZU&EL`?2LqOuT%W>?bI1kDSTyUnKOu0b{#R&bww8GWD5WpqcR|4oPNeS4jF!qNj1J z@+HL}KCs9+TtS#h3CR_9;lwPC5 zX;B-jS(f3ewopQGSiT4O^yw+PGV^h#H#J)=D-LeTRxF~f@XQhaYca^ZF(fhPb7)l% zxhh;p+9OTr82*Zd#q3CAOy5e0zYOVj1*qh{iwF4q%XIxn+QSy}bX`dkWtK;)+#Wl# z^^?C&k5zyuFS4JKJ1e>o+E=y8P#A>ZV)p195&of|yCg+pX4Zd3p1)Kv5x4;|`&dX) z`I}fKr*ZxZcyq*`Euwt#*p`S0@WMIjJ2$h20PTHMql2ocyv|3w`@vkD{F!XSMBkG% z@ZSU;m7hf`eedM(Nd6yBZ%0)Ja*aX}>-NvTO3M!d8h3BuaxO$4HEo3Jx{Kw@9h&WG zO?&+dg{H)#@$f=NX}HY6F*O65Yn*G#D-E`kWha}2`6wytS2+U0he_J<71_4wBe@-@ z&m&iHQg-8d;`?#QnByxfLQyhtkUTbKp@$Yf33S~I&lfnS6$lPqT0`s@@Bib@N|kx% zg)9Rag;Ecd>QqX#dNbL-&ATjA{91lnQ)x`NB}y}fW)PFiiMw-@K-g>T>Neu>C#!WSB9kNqrlA`p#0;&$HR7aykH8FDOG1d`_gY^%+n3t2>azG0-Ks zivUy1;UgtBOlL5KUsS90$!zy?l?+$X%T`jiYO5cPGV@IjG%Qrmqebn$gt-HQA7O;J zg(`}+n0tISb1ky))O(c^CCue((d%tZQYq!2XAD_eOuD)HiT_r@K(Tu$S7Wj{v-q05 zwP3}E@=E(qJovFqiJT`OUh%x|lqEMa&R%cr!+qTls2UaRWfCe3fvF9(si_0ljoG+t zNMqB_*@Q=DKlNtY?}_3c-7s~|wEU4f$ z%+bjmHA;lv1}=i{B(GIP&>y3DGuU5mCyw%G?`}o4xTxeJ`!=c3cutDjY9>1sn$)qkWwHTSq)A!k%^}Y4>2!FRV41X}?f--EaR| zb??R|vDuu@_KEf@ zHuLd(@kr+VXZ@4FK(b~Z%8+oyJ4S6YQtQLfIrv)T3Uya@W2N9HJA?H{`Li$BLr+Y( z9sLVlD0cWq`I<_NByEVO#O#ZSxyB(Ww`8{7Mgjl`Fy2lU4qU|_IIL2iBq{YOMT%7} zd1Eqh%vH7dd3D60Z8sA>a}=dTOsbst^tI+-z}eTId4fo_qmVnwgBwdlx;*8s@mDKd zp+b4KD{Fz#^)oW}`da70WbWZ}K8bx1Za~tk8*SyrW6~1yg@oI~MZP(m^&m;)w?afA ziwR2VgJQdj)No4=dg?09jveD(Q& zIs51A--PQcln{nu;V)tjMJ#kUJ!*y)w(FBRcTcXBvzd%J@i@o5`a4F@VHePIU2mLrpdXn8cATadec@R$dZY{jCxG;Tsz5_43Aa<9*}s1{tobT zy;2>^Iub7O?oiOKSpS6ZVv1Cmoa>5SIezm!l7$8#FB^2lFT%zhSDi^`R4mDS1+)An zABHA(IXO=B^`HB{76>k0;17D&#L|Dl@=?&05m$Zhw*<*hdu>Qxja;A^H*+{PWLm9) zr2a^aZ4y!WdA8z#U=W&2|C(~Mb5O(734OYv%8743cr~G({!KZJrs>BSLCbVt%Qa=^ zE|E!wYejb5ZT+{dH_{Rr<7uSQe7~0*>ioNT{nvTm^Z8W%n%Den6NDPT-09*+;iXLn z5cO@z>9_bj^x=qHcjJx~vqL_K9>G$3AXl|(VYb3njh&1swZk{v7_$J;+Jlm+rR=MC zb87?@1o`G}uTWY}jR$zwJ6y8lr@RWF2@z|gE(&P_!QKvxQNXJ z-ahfK1diuPR!L(sxy}S@IfQ5yAfjhFOuH)JN;ufVQt9Ng`uwu zpU~}RQ8sgHZoUp7ZH(0kRwe*O_6416_^{a(N?-VJ_p@P>>zn(2QZw&DiCK3~DNp2X z3de%EXjLpn_${(+B;;(dZL~E@dh9rke{)r+;+ryCJ=JrDw2E_GIClzMkyDpHvohH; zory4>__ffD?_yZrNc&19rt(vEZfn!6#Hm1U`qDdT?8?W*fIYpD4q766JcsF8{@i+S zsBPU{)`3_OCM=vTdJ=4gIGP%4PqnG5XJ*$t6|qx(aW#x6kTvAPTWV!9IfokO^hW@RQQ^abZ`Y*l`J-k=O5Pl2ho=B z)P;Ut=XmK`kIZab@c${$-g2fztXrT4bcd4I1bJ>22AFCnW?#Xrm#M?-K>a=S6QU$t zvY3sitN2_AXf$%gOp*UTw-u{@sqx(H-Ik!?vwX(Edw8v={DNb`64ZN31N0YAK@^1FS&?m>>5I7`*V7+Xl!Mp>gXMR4mz5dH~f z#i__=kA`nV`PJhs2vRLVxJ}|*J4zK#o}bc^@;*>0o?@8?al*o^o8HW=nM#Y|=^=RX zmB0Jt`OlG#z}Ucm#v~e`=tlG(QQSfw%7g`+Zv^a%c|oM{xOA87e`dY1NnO7Sdu#%; z`2!+7I#eLcvbtvb0?-LeWC4wAlEF4Y{)evE_|Ze*SEBUalLk|-DGK5FKj^-`%x!kA z65W?>{s>4?Sd(Ov;a*$@#a^;|0FHT^)Ek47My9M!v+3|}l;XQFjJbuDMe&z}L+9lU zVE*7Xo<`dnN7!_M%ou0^vGR5IqomXm!Yd$KS)5+F{=DTgw1-G}m&oRedgUhp{L9Rs zt)WY39h~@&AkhDf++QBh0EarnjX!+Hzd~4y7fnTCr@Lk_)s(;&RO_fGnq%Mq)6knt zcrFU;LU?`|Tce4V-Q8%*DNkO}lBtm!hJkSE4aD@D0{6k>KOaz?c)yrn9mf;U^)j0Q zYQ&{n2$0}+R0LhtxojkM%%zV6^dDU(z_aC^R;e#SKk$_DU7XAUMn9A8?k9Zk0tyswRLV5j=L0L1~gYG@I3nYJ$0t+*3pXPE1<|kz*;pns?srl zs)m0esPTgHjWzv$-?nQyAx_z9sY-`1fTFSM088$23|-AI7i_%^h~#m3M)JtD!-JD zk@x^A^<@-ZwuYDd;CGF@MM7JBtBHO* zxKRJ~`j4VXvmU62*ZGO5lMohY+)U3T20$L;|QQ`^ArNLH>fP2cAB?1Fo! z0An57lfGP$!KFQ!dXE`?u#ih7@5!p_l~c=>c*X^5oo6!aaTV-llyY{GaA}N1zf5tE zR{ys^*7{SBO34}Ba?B99eYlu-xn^NBIHPNt>~6)~k9gPrdY-eISXSd#e-R+b#5cXw z>rqwuqzR1my(DZHYr1*;`adF;kvTp`<*D=G*@ybi(C26a?Kz)<0%g4`pYYyJ6x&yY zz$YFn(jnffLziKfc(->%;io0v8Y zkc(|-ES8?e6Qh`ABf;_sC^5=PZ-iW;iU=KW4T>P9a9|l+08-PivM)B#V0z7_;onoM zJb}vWCf=Ee?NW^<+-9xP{Oti+|3&E~&(uVSQDUWh)dDzbd0iA2t z0{rNwzQ2$6xwa1PGbPc9EC>8nyee&ftE)LzMCr5;guh=^!5HtOmY>^i!R4PXIQ{!_!8S_2Wj&EYIa=k_QPgi2i-QGu3-0mAys__&G{c zOs@DX0lIn%cPju=_@DW4${o`U0#Uzt^+HDLzpW6UQuIvEnhqDw6G-Ra8%Q01*e7%i z*Axum!{dVgV~P5I64HZOD%qOdd2)qG4)>2PzRa{vk=`|Sl&BJbo8m+cs7u7FX3!1A z|M4H0LjCK}LYFb$4JW(|LI0$ziw&n&*Jyu{`t{-Jg8|^=e?B4qwa5xZ)%lS=ygf9F z1I!c1f)lrkL4MMBp9plF_5b^$KI;;>5w|w3)|o(>4X;-I_t#C@Y>GNv1M%I#@7P;A zt_780j{2M2SD0e{o6!8%cI~1)xu&5QG7P>Z9fz~!QIBMU7+1No3;~5$LHOVHb(fG& zjTbQKe-fuDErQGD$+u!Ww=YxOL0$Mc`xP&`Jj!Y$wt$1;ai*q=5AeU51VLT6GHOu8 zi#(KVKVN<9A3MDkVCZMr4`Onhw@2aX`E>9>vT>oBRkE-`_=<>3dEjxCyRG6%*#V?Ghwkr39PR z#fSoRQzQQiaTX~kEF8P|ls^ae-kL7#xpUFUjd@Q$s8O>swa$&&eqUC3HR=JdRO#fH zeA5n3^#$qeCt#rckZ-2ZJgBmv1bvfW)wTcJ^nWh_q(_^=k2i{iyZcjR4;mXFC)t- z;rmQPD$S&BCcLFd*D$VmX=eOyVf^Oqfr98JP4f7d_eDL?jJOH|mPTY#yP^)j!w`VVahL6sJ9WH!B~UG+U)d`p)@#``%;JS^8pB1mPDY@`fc$! z?BwHRH*WQGh@)^M^3p#ODnYNcwb|q|-LY~~oxIxA+AzkmbR5806>-jRp0QB*Fl%6p zdgGj7vtpW3Y%{uc9d(;u-NJI49V>Vci~Ga5$uGNLi`$7>h8*Im+f>|Ln7w^f8aysT8JALUd`(>D-Qlh8o^Mc+UeWsRl?AFxsoDLjMUqisgWza z=>HqC_0A^3G^}j}tL6nf&Kf$8Wl?u^ zSvudtauuv6j~C!}8vHoV-;Xs9SqmJwbk~}chhiZ9&mHb9x`P?j*~a3Mv$O!xngLhR zZ`CJ?%PT6Xno*5u&>6Aza!fe}9%&m!{mGlk*-p2>!(J!bEYfvlLP%3)bCQ1=z2$Cx z56gh>;g4LtEb$6DbS}Z#UoSUhMGXS|tnkV0Y7=Z7W4{~e?`r9{@jSb<_c0ybaui89 z9Gz<0=8c6l@aj`^^2+_oJv+v~hK5)%zR#=je03EsGPlSBQnAruU$K|MDf{nOP&o0I|^= z;*Ff|M?r3s?j*WnlPBkYRNM8>mUB`DfO^r)3YrVd!_! zxmKzC@OYp<(dSaRd09v$c}+aX(D0zylPoD~5LJxo%zhm~c+TLsx_6SINuQ$ibrj)^Pe%6})^1Y&uZ9Nr2{aQHv) z#1I4=?9)rg85cU&+ono-dBk~=MI!>E1S3^FPSfvuVm`P(5gikeb4>OY>`Z#;yST+( zT{d~n6<;^7km6oi?5HwN#dB`M;C zYvdj<{|~jr@VBzb&<<&3ix%d6EQ*+pro$=J>;#GA4bKmA4GSzz5C?ejseg*<2s*40 z+;ucCIMo}0ne(U?WNmh?Um1Eer~e^4gpp~>3GUcDJ&++uV+Ag2DW8^^bLd|VQg5OC zE!l}3adfY)@prgoh1ExbDt%ksR+}E~^{ifS@7#4VehQ~_JDad1HYxk;HG2OqHj-Sg z!B!uS{6)#`G1#B8F(-q;OScuazsUH$v^D%vrQ+s7wX>Ka2)F)yuG)b1@R2gyJxu=S z0K-tMK0}NA6+=!>WI88FqA_%CSaV}`ZyBg?pszVNIy7|`T9n}0fazG4Iu0p)M?IG~Ecf5}wukN8i4zRx}4Qd2) z%Ky%vheJe>!0y_^GW>;On&eWT1N+Het?MfLw zmSuvj2 zaVNB6;>)q=vv(F>-jp+|?L3~UH9vDg?8KW10?Zy8eC9~JjofV{;WVOhN3&y5@@#=x zYynq6RU-LGw{ImD{)mw!P~^750aX8|G08KxXP^v(>6#g+i+mJ^YyAH)>;GpzcF+^J z=P-N?G>j_%mZsMd_HQSSISwt|aR(`0!&!X?W$44~OeNM^!Nr~Pj3AAN_>$c7&`Q@; zs{q-D*0cZmL;;#qY8+>)ybi2T2Gh3~Mb9kd=lQjtIVYfxPCpfh-Qi3cFs zf`iXPM7b}UelWW$G(b_?i+Wt8N8xN9((mW9F@!bXq%2)&wz=Sq|By^PA~QnfTFnn zIZR*llRNbJL9|wl{VAG3bv@FAW(Jh+$j(@D?{IRP2(gDr9o_FH^#y=a$A&jcE%%9R>OIzK+=3m zZrk3-)H&}MEuEeGqe#tJSjI6i8R&)^gQ(kJnuJdyBzUOYoSmA}r3r$tzWfl_W(q*F zzos>^-~$c;Z4b4zwq|+r+}?^B8eL#s_FVpf#a6n0mKEZbXCc+yQE#|x%%wz~w{q*+ zfd{CoN+<4ULw6VKYWBdSs9BvtaS*6m8bJ!k$}0uL>-Z_R=6%iUCNmE}!5uA}K!4TGk8SM_94^+N#lbE1$P!MJPGRP%4fJ}& z#}0=JIL5#C_WH0PLwvtR(DHx)N1ooc{s*9pV zVB*SPvxJ6YGrcPF3O_QGf*TZNg1e8#_s{hVV_;~bQsk4lm8nS~_xOCN8AZ;ZV~m-l}$*;dvo*OnB@Yq!(B&JDVS&j~}eZBq!EGCFe3|%D!GZXEauSCD_we ziTX1s$buR7Bf7#YO0gYQXo>EK=udx)z0PBe{Eg2ITuIZrVMpP?5<+%n3E-^Zsf8X; z2EK=l@2%r%bNE$SG4`Znc9)BTW?33Bcqw)-WXTil==1=K%!3xCiVu648GZw-rXnTo zA>9=|pT|2^wDn6AJA<&i z6q;Tw$wN9^)M#QOp3Bpm2ZK zvw;oF9yC+qRO+#XTq#0HF57LNF51Y8GL%FpS+D>3!B3xx@I?)Q$I!fL>e>^&J%%Uj z?x(#L%Z}%HI$l7L$j2mnU>BAYyRq?Qss?3pLFrAO)II)TYYN`Rz0Dd5hokF?k5?Tr zd())y==_Z`bL~k?Z^4>t4l^;s_b3v9g&qddL}5*+vzqpygr-=tfQ}e3IQL6k8YYc| zv$R&GBLuIc)GG-y(RL`B{e97zOW9 z@MQz)FG|8s%LGXYoQ;=IpP5yz^!$FrKg;u97Rv2-V$=A8dnutbCoYz^Xco&5d6$BJi1q8&O1_Z0s?}b z42?HC2m%6IU@k1IASoVl!qI8#3LXy z#!Adw3Zq3FIZJS%FwTy!cyVYZ~OaLQal@q znRUecdDHfMd>XhOZ62l|;+;Z+F|OF#(4BB%u*5D}vL zpXp&0fy{4#6hVo1+fPAqcXQdnXn*nALUaWQ?xJ*s80Z#fgb+j~$Q5FhfKdu@BqA9C zs|m^=k{=?3^~=rC2!*@)hEj*K0*)a>rU0Sxg-xJSsPLD=6h;wY3lxH|;S|piTx1uz z27y|T(>6pE-6`x#xBew_3S41tvmHSj0)2?(Hi;dLCt?TWreDaG`Xx9RGP964D>7Oi zroFg-EH)`93bADz*l+k^(X?2^-%!m#@ZT!qCb98?gZ1@f7!k1vWjKSQBnQj-(eo)#gqJW+MNjchDep-TL-KZS?bta9 zwOQ$58e!D~S0gM3oVK6sNt$4I2`U3QdU$pME@?f<0fe1UKHxr>K4|>mA0k9(b1<0T z3_|dJ@=FqwBzWW*-_}TZDP&NLL%Bsf43Oi5wIylE2}qrhZIQ*plu0$?35Mg)#iWR> ziGC)eNnlALNnQ*a)sQbox224cR8k}-#KbWqgbZg>{XiEE=P{-d6&sN&C|`G%(2Y#t~uTK+zLG7J#$_apLCz>A-IBqU{PSXV1L3EVgw&S>m*P7 zE}V)u9z6bX%W$J|*gO%D-RPt{+m?Pqj&VrSLODQ#Ny$#Lq4=8Hr*N$zrM8kYS8yxw zHP5Q3O@m9zE&Ez@fAMDjkY~(vk|D*%^W6(WqhEnc#Q5h3=+6^sv=WPwjS{eVzLG;# zVCnR{_FVj&)cizIRPpRw=A7G~{6D7iKxTC8ib!-Zu3a!gZDG+~apB*JdDEp#`Nf4_ zE1DH+HE-fDB}dh01WQ#)wJf!@ba(_j>YelMz3_9R%jI$>Y%&QlC3X1LCD!R$tXmjv z(eF~+o86<_k?xA0C!UX=>z^AD>>wK;hao)>p5gU{X?jI^rFwD2s^aQVCe11pJDC=i zCQ@v*EqTp^nC#hxnax?hvgfBir`xbvvv}1CcnFU9gVA2Xne+70AZ{b~Q4|U*iqnF- z2G0^NBm-NnTJ9w?ID;)ibE1AiUb{}4lRiW{s}-k-yqUn>YuDs}+|klL-LcUHxVy3M z=j!T#?t1G!;uh?o<_friWIOGqAD3G%U|t34!^>gTbOg1zk!hmcIZ*A1H9Cqo2KMlDZh+pBu!^g z#o%O~5PMCVOxqi>@U;y% z$&P_PcLZM58@!JAd_gXyUItzBEBi8uD28|X)PJ8G zEIbkdi{w?hyNEC!G6yuPGB@Ka`_a^dVuQ{Wjj!qc`=V%Y`kp+YAkD9;MYQ_H>FL(6t)&FrG~GFv=53zign*9%K@!iIB)SY%61mwGkG50-Xy%Mbm^k##l2 z--F}JJtrNKN3cS8NBJ_96Tl3S+0RZn2GNz26n}LwBvDnDQY0PbuKB+-KcwM{@c<2{QWDZv8(xi^o~*`?oP}1#?$pD@_q|YhxRSPtgDz9PGURbo0N|{Fk8r zjZ@>lI5}BZ|2yY@tNCx7e`&Cyn2?=Mzo-n7%XkZ41g~8fE6Mudk`tEjSR zC?qRE`x9Nqr>0H_;i&xP{D%tzo&KDS)lqT{4P24*6~B8E!>F6$lWYXPW-A%d$?43> z-qykb#>-1s&DJQdw8+SK7=@59qNvD@Du`$V%bn+M*CG%UjZGYkjO6yf?(K(=O$zT$ z=pAbT+s}5O{fkKLM)?%oe!Ymc(MfEf{Us;!qkZ@Z*8=QY_0Qt{OY@gZD7Ncw$Dc(>wRgeu)nP(M*MH|5|)(YS5>B%7hOf`L%TIy!Oq(A-n$>7 zgj(p%SLZx0n!8E%$eS>OorI9qJI{#XZF)hZEu{=Qv3~WIyuS528T#YP=58UMk~_rC zaDvCo_hUvjHow%=RCJn@p&GnplE2ORXc`>Vq&p`h~tRY1${jcu! zC$z900}2dPv4kJrxW0~lB+PI+@ej)DM#b9O15AQ%yL-CTpjVl`e(=1bm{eNB(G;in zYjoCLvY3ZpHu;*fa0tx_v@;n?63&GJ!Wc|!F_e5C7!6g$kJi2iT&MvPW~Agqksr}G z%0veHe5M^<`G-bOmHAA{dU~8Oq50n-02$eNAcJKaVcj)vN3TzW%f_Qw>?!reU}-y` z6^}tgms3(!ZS=;fM7ru*m0FE8W>@spcH1AY3>*gJ3-vXL#FeNAe3&d87)}9zt{6*P zVw)FIT7aTmGd&uXVU-u7b0pB;Q0cpB?uN&vp(7No843RJv2RNOcPyU&?1@hgf8%eV zO5s8n4emLRMgH`taj8e#Z&>)BuglK5VIjY6QEG3oxz?VI?wt8W=pPGxSI4RBH=zg6rnvNbE>yQ^{@mt}f;{ZjPvcbQ^ z#X<7JJffK#>-{cIHVqdt!l}-I$t(4l5Yz8xjk6K(nq_w?zkmA7T167PY z`>ZaV*5&ql?T7e449kxujpx_zFr9FN=JBWr@044o@D0ELqi=eSnpf>eI&ionQ+(+~ zSIIZ1NiShOXNya0dD9y!zL;~=H2I5o3s=jcfj`?GO7th{5R2Y|Q@VH%$d9z%%a_gA zrotBB-1)?uk0J$|ZZ0uQG+2byyQ59sC|`bI*Dwpfj|(2PO*VsUk3W&i`>=1E+$ocq>Xg{%mm$fmvQW| z0R3oyqh_le!{@PJ*c(6m_$x@G>|#!IiP04MdMUZpD=fcLz89N=$>R8l>7ZOYi0_4C zxAG_Ly0VqRubX6zdmbJD+GA2wl0ol_}J)af7H2JT}+PZ`vff3WWLiWH;sX$RQ`1@yq zS}fXu8VHuFv*dLJ`H>N^dO9)r%m8B=%-utCL#C$U;zUK{hNH{jy^J@nndtmP{`dcvny3A=$Gr8T7vSX0Q zY&BQ>RJOAK26QJ*CsOXB8dLcZWra0>)R%v3+fJs@VY$HXuUt7nJ@AV)WT%nK7Y}cp zr0VIYKe~}}!nmuPZ3eun#;1D*@XWgx?HLA;7YNq!3lMQualp3Um%^kuUET;@ZGpXK zje5NMn9q<1Yg75sP#T*1(7>z-y2tJ9NfeYTA*u1fD+*}&8ebg`IK>orN8fx4XaZ|k z!KMZT?H8E*t?4yLa+vNWH)6PT(~rOls2`heC!B6O+_{ms`g^}MvByTvqQ0D_vG;BL z*>TQ5YN;31xf9WDA0_@$s85BqQa?kmJMx4JJy#Uft?bkH(B_9c9{oZIK5Z@_w1@V{ zZxDr~oBh;qCGQ}zd4Z+BEpSDU{(ZHpLXpsOO5%&3I{o(b7ot&Lwm!T+ITu9-Q%yc! z4&OivCkPFfD+9LT?!h@200L>kxSn_G$(P9YN&veP7OXtcAb;Aq{5-M&d4e!{wt3`Z z4~S&XUA?0PsJzZ&(tU?Hz0GnY3zjgC!9gtjKha0b2DHJg(#vi|QQNiT`YEmK#DtGK zastfoxCs4w#a;@Iw*ECi5zmqdKi4H!j%5!x!D4PZvnf^NGP<;tZq9ka#zyptw(?c0 z9zq|=9x0i#kw#wsL49+^8XFJ?O>s_*A>@Nj$OoYWJ)6}GNpF{w+F)U`DM@|8#`m-s zE=&1b3n`!k_<+bx4!Z853w491@SiDdr`$d8 zc+-g-kZL-C!0!mIZIxzb@FKNof1rKrPyw2lk0rHGw}j^bi;Hkqv#(?+_s68CUKV}} z!cbs~5Bg89JfR~-VElG4qaRQqZv1{(1dLwp#2)FIXdS(X{7$a7S0iK-!gkjuk|_h% z90YOkzx;lo0S#cKU(Ej?aT4Z2CL|wT4zqS#xM4fdgEQ6&ekpczQ$WSa92%l5zCA&W zoGpyen|xl@7|4q7VQ1(jY|Q;-eG-gkO6OF>#~%SasO)dK!>zVj5L*ka7rC)n|NW|6 z_b2dqe%CJGBIc(~qsh09mlt}a%(P#fr7B{>=;Y@Zi5h#09DxuEjI=j03H&vZN=w+^amwXiZwWkEEK*;!+%ll|7>ORI*`p$Z7V@uOh8&%n)<1t zme7>2PiU|kf8FTQ5OhPE`!!aTLXSR2(3DoYM-f|f0SK!vCwv)=QZ;*PTlvQ3g}PbE z5&2<7(?k&*@wUKe=CPpLH8$b_Q1s``a1*(rolJh6nJ}*`O-?8D@2?K34NZqvJ4+{o zU`|@5@Irib<@$j~6v`alFvMjNn>k7Eie z>_af+4RWP@kJX@2(BrC79tp?Urz(^T)~v1T10JhcIlG#qZ``wBB!yMhh1ZPmNjS$- zj1IJY@f$GCCd}Y`8Znor9*=mq7ePd$Gmx_R=tks3+>4?7#O4xF>W*JsqgA*pIr|QA zJV`IfQ0tto3huAN#Tn1>uEl)aIpAN6NC)II!}ROn178wI0DhN)FAkd3UiQ11v~%N@ zxv7b{UH#*z!NbP_yK&g#_Y~k*_zMKAzUFjSG~qSdKsMLiq2=bJ#A|Ba>|~F}%eX`( z>_1auPgAPU<$Bg*ICt`mhb4KGr`~woI6-Qs4EgM*k@G0HI{`dO6|ol&k$g_D-@7M- zf;F0{o@xG^B>)(eHb-jM?mS1px}?7yuA3nUEbB8Kh>JZPGVkfdh@`{ zm$Ll)iF97MTBeCctJT2SdV0A{DA9aDepms%lOK(S<1>SLKX43v&8J}0IdwZH-Q+5W zQn8)Yv*fiyC8RpGwX%l89hcMe=zq2k^a=FKXJZTzlfkZld0xf~C@AkMNxjHv8|d8z z^S;_y_HW{MzpaZMD8F3`pX4#Wu8R-#kb68fg#P=6}Y1U}y+5&nH0wc%`?QU@FW+VeY?)3HuF7_`z&Plo(2*lXH0A{DqQH2lH z%E+5yQ?rn_k;~5YKm1iq!2OBQ^l7a!2|HwobA_(&&Z49Q{7blRf14TmzrJ->ockjmh`JMS8igp@eihNd%w#mPmR25zLGBj)_t+rJt3S8jJyr6;&PYs*N(-t~&+{Q3&-IG1B$2ATJR(d@@4 zpG)^PSQgy#+GSk~;29MTt0GoOs>|s-+7P@HaHp4y3D&8j^jrW1JyYc;K4{^;I&o~; z2G-JB>&Nu^;2HK#=&nB(==OMQV6dUj;_?>KI*n;}_FTM`wd-@^GW`4wu2?PL|8eoS zr`%wD&Zti&2ZMWfh}e_sqz|mDUlJGS=}pa4K9zoyz8V2*WOT^+u0rYPIu<{Z17mSg z`@&{O+>y?P+ey0~iW{b+%f7$U0yb>g)h zy_5cXc&D0-m|VyO_oLY~Kd1X6i1Wk=S$;eD+o4`zUH0`8hzK&cBJ(3sWb&fMT5~VN z0?h9lzeKXzyF0~FHCd{Ald&{5tZXm#hB^J4gU)=uwo>h$ZSl#RoSbOvj|fhsx{eUH z*~zP?l#ENsY_XY(2|jJOZIcPoz>QW~%~;@;0i(;Pq&OuZv(gp;y9{pBG@AOB0n;Eg zoNI_C{gxZ08Sit?+Zo(0{~D~6uTCb;6ttIbloGWac8rkI_V+;{$5oW*JJhRT->lSH zRwX&%$fqWPvg=oc?7m?rrYfs-mhW?i;(IQ6Y!GyNAyi9v2J^U(4bal{mIu1 zKkl1r!u!oIU;8}4x~Ul1bqNK zqR_~{F*pFA=jEg5Sb4|_c!+=Xzc6;u8`>U{1^)%f?Kvxp!!?LL4oD6AX=!56lozXD zbNRg7WM5k~hH%lU(AIRw+jXF`0nK9LKV2)98==5ZV0X-oTFY+^l6OhN>FT@qp_*|Y z6PRQ9aLUbW80D{jUJ#1V1h!EIaAW{KZYXE0PS&6?@IJR0G_^k!G|F-h_TrFvbs|gJ zKfcudk;pSWPq~1au>c>;aG}4c$j|$r6_EXb=x2Q~{OGhI;VKav(dses|f(z#vhB0)ib9r(RdWeOU+nbUR#`8IaNBq}pxF)lLb|(2h1l!%6rt_sK zii(SOk7o;)>W<|DgMN-{XY;>veo<2klDA06zBy!QWAl?|Sx$;>G|s(9muXO!m5{uv`gR}6Ay(Vw9Hx+nsqKm-p8I-E;}|S zoJR-afKO&yl?J8a4_(t-8XNO0-X~ltHO{uR#?1-6C_hxk1`Kkw8qukSwFI?hee797 ze7rh0p2T@|ymNk;kO;3tR{Ni<)ARd!8f;FOI-)8wC~lVgn3bI09y1QJk4DPgBq9l? zz|9ZiJM`O*Ck)!R$ z{{iv}#YGH=xy*_pc@I#ap##U79LTf5y03B90?W<>g7ENfbWzSbf5J%pv07_1Lv+`f z85x(8{92N?bkT?}k&Q)RUX$d82d$$fTd*?;b)R_39P^Otp(#IVA=lecc9 zLRPN#olI-?ciM*}%dp96MUp{0I9O}JgczO^i~yXBXOG%I0^G z?asPOdu7zbq?E)l>!+s_p(KOm744t!aw0)zdjH}(iT5~^vRjiYy8+)O(x&$43sZ|F zWFf$uIYhEk`3+t=SYMy!wNFn{NXDe;FRd@9bMvuRr%@m+1T2Q^UoU_To;TLsen2R~ z@l1cDRyJQc{*XvlaP4Q@h)#_F7TV|O6~o7hdfAE_55EYw)*a=A$PsE2txp6Xmr`Pl zMj`ZdFeY1q$`}gfwM2R!^YMbclI9X-M^+&X={=xw@Og^%JK!e3ZJ+pK)7Zwnx^ z)~Qz72buj|k5>D<=+|t6lU3_A@cq8W#ZWtL)+wrY)ViJ?)@djlu_UN5CmYp zgrTF^Trr-!ZGiVnvy%>BM0PKWOP)a}&fBT~Xv4wZ`fuN%JAGc7FQ4$`r&}#Z>4u)U zsJEu1Ztq^e(>G3f1&W<8@7vK<0XNQgQZrtLpIF z3uSN5_fLE)Nkis$#2iSsl1A=pg$?ugM3r)L6|TTLf)K2%OAZl|4rKILj4R18!@N>$ z8RwVgJi!RfKF+A|+7AMJLHJLBtstH6jPMmLN+wKg!wukqZ62{re^E_pR1Ep8Nj&I9 zcLF!z*2yc1kDrNCbLQmblF-V!hq-s2ub1XLoX2gSPOJ3QojS>MM*&Sk#9MRtfouaA z^iF0#AKxcjt2kZc3f4(U&;gQtwAk>@Scjzy4zRvRTXZU@JsLstGy?-X+auiLw?yhi z29~p)d&m7Ngz|rcApR-6WxEu}BEMW&AZz;S?#gE3#ROUV&KYdWdz%l2${~E|k5OyQ zkIxT(2)NbNaC>y98@dqq5U^szZbIz4fGgacU7%H(v4-(?E&OIL--b|A6R7zkR0?dJ zVaHmr85}UNoencPEvF|z7RfEF0OoLQk zgPWXOTsL0&1A671zhYuhnJE=F(w&>< zmX<`cw6LqF&IdUuD@!jlu^Qc}4O=;0Ag}$H?DtYZXS)t-6wb$Z{CtsY6J8Bkh&9d& zqN1dtiJ-_(@xm8qDa&iQFn^8W!jG`xbWbmtC74*i8*}_R; zdit1N1Ha1~uj@T3w8z8W=()Kh$)?0~bSSB*$4an*$bF@kF5o`uu@HY@07{o3|4;TD z-hWR2K=P{4sDFj{dng7G`F+;@-%_0V^QTi%ef<~R4o@nwp9lj312Z^(pJG{Yz*fZU zNLgQpJOO63hmna%(9y9Do#b<3gbSPh1BVd72K! zeBo^*3I%gD(idGMv7L%?1TVq<(u+2a6Ii~L1xQm z{oNtZb+)VVuq$*5mpG#r0GKT>wE8fqGLDL#Ycg%JH)Asy=keA123+er>-Cv(xfB97 zh6zJ8yj;wmoMyaZ_O^N8dQVh}5UKpu;>;qt7q{D#)rA(RSn6gtS8fA>;Ea$ujN*EF z@+Dh9krP+FF~Io;vJlO}1-3#vnLEdPSKhj*LePpXxMG20Y7=yTj^l3)ebU|chA<6J zp>WI~4-U`iQocVL=E4YHLlN%#tIKii(>f=)qx*BQa{S$4Jv0kym(|XI8o{?=KZzl2k%Z6uTCnZ?REzciUY5??6yE`)?31k zXHAJ{XinTWz=K71r z5a?g+^m95Kl&O5KmK-^r+Kw|o0h-IysuE02jI?UEL>6R^uPgfYO1~*tb8_;+nxF>l zZ_VU5y;^W3zKxes;J=%l* z*7R3kW72+g&+_{e1l<^0j(L}Vq8eU{6P;cLYRHR!6O=`Rb(EM|Ds+bf=pln{e>3l#%kBh5k1(Wbn8U6c)xJ4g1OI;L)j6Z2ErK{l8yT7CXXcDI zZe|W+7$!zPV*$JSEL||k4!@+Hf~3sbnskXLqMH#-ERH<1SRcN8t9=Rv3-?Rq3@Bl= zi)e`pzb9u<*rTCA)6w7!?^PVu^>wTQ&iWpS5NfU@ylJL?A!(vEm^PN8_WA# z(uO4NigQLOH-9a8(NSf(Mo5JSPT$%_G~~}TE0!S4(2T06`wwhd-j?oe3A7dN2D>UY zp_N?)72Dk~oEFHU<*6_AGP9SDnzWIbxOv8T&vs4?!fammw)@tQ69pLSRgRQB0>QtdUFnBfe>VH zJt4)nFSxg3Q5{SW&zZS`_D4Pr3?oVJ(ax-NfO`Y?bZNxoZcY`FaSz1@PWWcmQv6A~ zLg&-qEZiCDALMNWkzsNjV`QCz?TT)`xte@RZ?b zSXkw=nGCr*-k&WU&(|OrfMUs*)h2{<^z)6a545~s*aQ2LDLyynTk zOBV$5kd{WZBqBm$LX)rpY_hx%$ zwE2PE7b6I3NQdV_3~{lbzscG~9A$W$SQl9s0|H7BSW$sH#-6Z_Cv_pFUucT@z<2b` za3W7w1z!qsRoC;quvklqLlPBycq75faO=dh#J@?e#iXOD0KtiQd$H@&9R+zzop_Pp z1>2GkaM-LVoxz-~qMWThLT^KC^*5^zszoZ{HE zpIviChsiEi?qkE0$j=8Ex~t{Trbb1zsC%WBTXP(87~0i}%yXibLN++>wWW5}Rzmm} ztox!ru3tDB`>@c&bD>s!jO;jP#?lRz<}R30I&rl789)gRj-lbA{nNZ?;BjBRrd^HS zj_IqmL#{a5z~-zAqQgBjGf+|6wEwQhL$?tV4u(h3R^eRJIT$1~-M!i!EK(a6G6T7+ z^7-&CDk(9T&J{h{Xiq1yIGp?t)i_^o#S#+>rUej|Yc*odct7nQs$YMmnaDz4Flf}E zfv}%xn_zCIKV2Iex}5hXL>zM>QoZqBP#MH4b@jm#i?fPQSc767Lslh%^q{=-!Z+D()zQTyJi)XD@v#tG=0Z zn7hM^4`>t=l$i~fo%Os|aPK>^&@(p>$$8@;vl^hrB%(Iv&qJ7`M^?Cto7z;9oqlV$8#*t>;}$1RJ!fn9+PnTj1tD! zXp4%(v)_*Qd)dYJei*tv*uAM>@6692yPfgcygco!Ge=3n#DvoBe%JF$FyPnc7&qNtwuPZle50e2 zMgHKGS69bUE|3|Ykd~MKbTZbL8~Ac^iF?a5`D+Gx4D_GKdpLT->rLRSGY*1UuZ@Zi ze|~M7&dJXYs;bKHqv&|M*P_*FQGxc%Y`tW)UO_)uti;0M-yMt@^!dmXKb*)63Z8nr z(iIZkS_Jy^1AX425)+LUno!=fl$Di(xG%5MeDlO(V9mj==#|cUjYjIzYd&t;@mUdK zCuuq*{E=k47ZcF+1+x$<4=OUJ>uKQ1Pr7(tK{{Rx$my#x`Q?q6b!E{+eN+;MGD1iI zRCd-67~eT%#5s^;AAvf-i_;I(HEUmtg1Zk-QBGGn@WtCNNK|ZKlTECr>MnuqL$&B6 zi`c?i$`}K3>x@QI0^e>O*@MGN(kSuZWfe>HIc{->u7e!|=4^(@P5Coqeg{dHHeY%4 zObo-)xg+*r*-ej@DXS&*uqRwnO zKJ10f&cy|b_J++eTv)`8=A&FoXpmWOEI1?t&W47Ze4whjx|{#wH3|yp-0dAc zs@lAu7b>*afJuk*@aE%n{4>YYx+xHWIj(7_2lM)RZqOTiS5-Cil-pJQ@%8JTgcR~V z#bvgv?{>HD)J-RReQA5(-Km|oz9a$|Sg|Bjm2D$&MnI2p)^2C#w?7LvU1hTjvBsMq zI+=Y3eH}dCB<70)l7OqB5MV=QQ~d4vVQW=?>6f=cyiTpY1<=VsbjLhDuA}h z$b1ME8cC1S?I8d#WXSe|9^)CdWa%Z!XVN$N)5 zq%~m*G%yLpN}@~mz5EI^V0BrHtAU8$RZzgy+N19w2Cc<8Q;?TJISvksNHVxLBVThs ziOq;Eo1@_TSOh)_!**6~hRQ;D>9HG-2D7n=?(O?rz0`cgKEv0gHiV7C0-&2nQWaSR zK%O5h*M@8XCxXsvj7O`DhLr@z7AhGwtT#5hMnU9G3 zY%hp3o|=pH-J)>VyvbsE#f!HG_b$m|I_WL+%j^|;LL}&TQED6)zK=uL)&&Lz{?cuC zUp~A&F3e^I-Td0!-5nZ%CTre?!fZG&c6w5*ISYf&?FtK|9f-mm>}w|sM!*e@;V1A5 z4PEQ70vEI!k*}R!j~U#3Mc$vrqw>0dJz3VDnqmH!UVfkLyp*gH^r)1q+K2V&$2mm+ z;T5y(8e!nh6KyxazU~!!U0Fpb_I|nAJuhoJta3o3hfK>A5y8iRgiKHh#-ioYK!I{%k~zIP zi*GU&9Gr$17WdFs{YMt3hcg?ZlXQvw;Kd=p#u1xfy(MU>Nyf}fYLnM$nQ2B@_k;#g zP{myCk(hFoC@u2kC22=v5JqEU{YO(PV)oIWK2*G>Y?7;lFJAU-Q^^}&P62~B-~|Ym zS93W>TQ+c78;Z_qrk`&7x5w}p6*FkgD$-v8LaY7h-db`y+bGoKkaEPz~ zw)C_#=zY#M?av|II`P1AIe+Zw>Ov;;e$0s-T-QLv=MH5u9Dsh}m9GY7xjbHe`xaw6 zNVfy@e#(y>995~*)zR?5S20k|amq9D|NbJR;TPo>0EGl|SYI%_dBWwe=_*mBflw!%m@i$lyE&li{u%PJfd(Fze2w<_ZBXCo z9OSmA=9m4=uTQ_w(^e{IB(^L6aWeD4K6|Bxu-@U(hLsR)6Iq9Xt{>>ZzH_)e z{_E+I(36M$Bjq7ubjhA4usxmF-hL2=syuPcD_BC+a0xC`hj6#W7J6?!E$;z&y1&51 z0e49Fe7l7;Wng_uqUd{Lw@15{RFr?)qt3NxQvq6w)M{h>qJUKjKTj`I6Jb1j?X$si zEFz}DEQOA;Fkd%lGk% z$Q!qM--t6ZExK>=l#@Tk1}qPn5Ra#C!=SJN`u$PofVO{xEl*Lt^U{7eY-c+`VuGPpeb(#(E`aZP#e$afw%*f08J|d)i2$xt`L;QD2#IzLFq`@XI+4W}LLwf$^ZxeocwFe#bN9K|2TBSDB9@4nW1nSOwZ~9n zYXb8PDnl=@Z4wAehdqmIEZet2E);8MruSJC<=jPbDr3tE}f{aua638Tr7*+xz_whX1pswXyI~=;DUQOV-zj%j1E`6 zsx?UG=r0)4==4!%zC?s;lcsw0PNup12Np2*ir#IdXgc;y^J!XHXsD=m*G3aE#t9Vi zLLcv6mVPj^vaunfUPp#4wN(Jt(#Cm80B+a6RopxS@!#2eUv_SG4-Twl9P@o!=~8QU z4=O^|E>E^8pOGoIR<9~Sv~LeP2|hRc(qB@L*xX8pB)I~jR8le?@x&f}(p`ql=q+@i zmDBCoT@BTrPJ4Y~uf8ZORrf!m%V2x1HjkE5r=-O5dM?!%FD85>o2Bacj9$K09S^Nrql1a6Z~6kK0oEU z>h%w)3M$L*rIV|M^M_S(M`3mIa@R6`E?6VUIBEgWro&W|mC%&Uq;`dV*Uudk4h}3D znwkPYAQm-Pe?;15en?DB{5OE6$XUhv_~s^G3Zt4z|1 zM6q#1E>qu$@Zd{o;or?0j18?Vv#H2ynB#H6kN+<~H z5q8_4W{14aM&z%ULcc7Yczt%oz+ql{KGe`!mq_mUk_|>x*{OT@V!SpX!ZOeF`Ti6k ztCw(PYMnPX@%y~<{!KoWzz+`(_wbxO-<|aEM0cLR`fHt!Dy=y@RzJOehLIGf*`Khv zPmQ{yRI)*3yiH;D8&@ZB!hr!T?R>y)U_LYQeP;ikF%>PTZ&Cp}1jV8l)<4zZBC(Rb z-k&a$j3hd0eKD66DF(}K-T&O8|Cv8i4U9Nzb-94OXz|~&;TmDKxvZ@4`~X)()?Ra% z3kb*TUwg~XP55I4_Hz%uNQ`OXOxUGof+@Y)qrA2 z*CF6x&MlcJv_wWqD*Up72KwA#5*KvD_agb36(uN6QApacMOL>IC>p>a;A$vJN2z<9 z$vht*dh(-%PBU3rx<#koJ9+~GJ<1(I>di^vAO`nSN>SfHc14uo8C9&LwQC)0?J4RJ zRTc2YFJFIQrjq7UBBdJjCtIqYau?BL1G#JF`Y1X;^ccOwTep771 zDTbnemNw2s7WXt$%yqQ;unme(R-}C9MmClf1n&Ij3kQt6-+*b1_3!1_UqzBM9?b;$ zRzvv3VX+G1V?{HqMic!z`r`ii+#!@YxQC*pNgs}7%rQ{@)5m8MC`&lo6Z<~ac^ zUmUwUl+uCqJb9Lq`ybQL#y8UIqLWG)s3*C`zkx351A&7QTx5lQOI85}``XO;%m@;5 z6O_k4N+joe6ny2Q+tnT-&L~d_WXwWa*coEuw}0U&ygDrNu1dJ3Cbz+^-edGU4_oxO zI5inNRd+V!HJF9aUSkz1>76lLwB=^c{`u!73n`i&-_O1O+>$<;SMMPVpVddP{|Q|r zh7Ak(`VrbB>B#78%4fkOqnTuWwVp(SsU*v>jVp-Yqu%a8>EjKsGLYy5z zufrz4a~A)_&+|&ciB|wX{%sinnDy2M`_NIF*lmyPhY{kr#FDN2aNn;JE6hK(N@v}h z_2GoJc0K2(!>`8C_(keorpjxa&lM|%!FnK6J7|4rGezUV`;w~;j0Ep@B(YukB@}%X z_m}haimtucCa7As;VRG_?lE*}UGI|}!W9#7(>>W>aiO=T_u-BZ|e4cZ;k#bID zj4ZNGoChwh<_i=0fY6FHTzT0<8nhP^XhHjoYKh#r5P}&! zP-sYDFi%1e`MCLgjMmSL8YZnpjM2d9{xjAcTe?E70Z%Wh#XYDVNx_E_C7X62Q6K&20Z2Woy&|YmPu3IFl z_YxTYkAph^6vcdt;lXpzsTEwWvKi?qu3<#Dgj z?&Hso2`!fD*c;~*|9#;TLFrlOv=XK70N55J9~*a|#a?7L`+deD+(zJZz{}2TC&`rA ztw9+ssg)G+&+vFTJ=Hj`OJ&P+=yTzoJwDcJsi6G2-f&DdN17{>J!j+6Dtc}z6pt#? zLxR(!o?$Iz(bsMHBwGhlNGuamv(-k2Y$8xFYgZ>Dl>@68mV4z&yu;n zF-%?^uunQrA+pymzdkxVm~U%0GUy#nM6^+5uInYcBczKl4Cd?>+L`q_l3%O$zI5zF zorGOUH^SUGnLKdI(Di{?KJ-`sm=X07?R7F~3ARqfvUeSgoh_b5FaDyrB`NGBUCR(0J?_dupIjQLZzcx`Wd z1ILGRu#R@=wKxX_XTY_@gJlyxcwR}8oY_+3uZK9^} zH6(EOV5w6iR;CS{%t>*yjmK|pG9FnQS#s&c-%wP&==uRG0GdJqWw<{eWxG>5UANEZ zP-iL_*|pgR4Te7OWIO%2?LFk54RNVZiO#K_>M}e>S@X zl@9b%Lm~c7IOGV{o)Nt+zPmB~OcWl8%GB+u(NM8axUEq1h~C**^}lW44vcBWMUFUhzF$*Jrg`j4yzu zB351_@c`nV_PRw+<4w7k!T$E96Ppx2<@|85-cqoNc=NUr!~TeCjffbp9B!~$nI<5) zCEwdWnR2A#iner%Wj&WC@PvFs-d7*WNz`~YQYgfDG>xCljGE+=VG*|xQ{cK0X^(^5 z7HDJ!$V8k|iizkYz68RWx*c!5e#puDF^7S)B8a~eunbtxHJKT4Pn(uU_Pl2r=oV8Z z(CGOIzslNVI<-q1CBTJmTOH*&m^%Z}5F;EOnDE?}JEmXptW@`Y?W?+~jPVVR+a_~{#qU-r22wX(1!(QYyicr zd?LHLg6Rr}l)q<^1`U%^aF)~q&l#a>e}b9{nVd>CC)!I(r4E(6z~W}>lMz$Ig6Sez z;{#R_`^KPTC}jao z+}_!;5Sym;rT2}B;4WA_kC$&JUozOLqHda=L%64Ho=yLx2zaAAIq){UP24*Ny!d) zGCrTh)u9Y)CFnDtom3iZL60nOd>_$iawQzJ?~K6F<8{+`kt*5fO@-8`v3umRYb8Wh zdKWt6w;;q`TX&k?Bx#z^Nk=p!Fb2jgX9@ScppLQq9+D(c{2C1@((z=N<|*5TM(Ol! z%s`Dl2Im(M7qCxod4m}yxGy}>%CwbH)w|e_DD=>(;t;DF+;!RLBrd`tFFhwwdD*@+ z+ONOR#_(|aN@@Lm1ZB6vMw&b+#TLwzmWX^%()a0ZTs*jI;-CxQ%c(+D^aH;s2NlyV zIlLMg5bk3(%iDJ~liQWn;D?^-ZEqpIg67cbH{2-v4(;1rg&MdpOw{&~O)qf3z$mUt zQI+}Gf-8a?IV4L@gn^FrcZGiB)=n6lRDkz^(7lkNKx&NEPV<&21;}VKLaG2Kjz$?n zIpB$`nAHkY`fj5?RuR5X@P(s0P^(L4-nqf+{VAcZcPW*CJ(@eCFpfIDGodRdp|9by zB8G!rkaL3RlAK6CUo}au0b91tFp-wWX~)6ot}~qufh2`>RwBbz!hy4N%^{5xE?;bK z)7MJOb}L9r1v#n;wI?PR{6OMhn`R!9UiDf^c2Mqn`IHv(J@2I;0=V~0b1o#4S^LR% z5ZMgots~`zM3AK};TvtPWz=Aw4B&jmfyp>dZlbAzvcoKPY1nkiX)++@>c%SWkb+pH z0;4PT>J4XXhFyE-a_&1rTEp&Kd0dEKY;Qg*G4)|ibq(+b9E>eJ*a~nk46f~t=dZdpX zFSy&}fG6WcqORnENcinn>46r$g9GYJ?Iwg<#RT@*bPLF!wXL#INc84Z@3DruG?}u=q?5{=bA#9-d$}`5 zBm3Zs%Jo)28=hzON**5ei`lOQz|AwVGu;y2oiJQ6S6MhvFOV&r87WP=V1Fxi&g4oF zGYhwVxd|h=Zpxl&zk>O47o*{k(arWW=J+habY=6c=5PXLT_pc!OO~&vSLH5g&KDuU z><}&Q0KL;`vpPDI*Y|m(Cc0T68*&=pBO*2U3 zUtnr$_zK^VRj1So?R@)k5Z_B zYZpWnVBs;tcvg)8t1jL>;f_Ugg0?nyyU~+py7=1%dy$>Mx!i@?wu5}{lkaQ(p9`%R zW8YDi*hjLFS)O*bowQ@RMj0xyGj2%06KKc>P#7Q} z1L1G(tmUuaM*?i}oLRH6!q&Ui079^pS?XI;{y(bWdwLR0a~=XPw^oOf>fRm0t9Y{GxtSpE2d+RWuvq0~ z)7ie_c(QTZH%0oHcQ{Cd_7NGc{xr+I|2j^_9xi7Ii;kIL4bex`8qd=}gu=OvG2Y#Q zfVg%nLU@-`+1o-H69L(mhwFoKJ${~p;bwv=EbxLsRB5Zn#x0=gu z+r!6`6OV(f1hbB7kT_Vu7hBLB9hV;RC5k<3BJYR`$|@{^=b4xtryGI{Q+k6abPqnk z7}oX@*O&Z(Uak|T%JB5UX%&U36X%<59MW5zB*u@d>on3-3WUA*Ff?yD^Hom=Z&R)k!DWFJi@aCZsL}x+P^ZU$@f8>rqj_q46fGZrcvPWJLU zi~~>hPfbJQm{r-{__#x!B%WXW@@Hv}X;b&9sv2XDs$kD3VmPK0eM|oOohFW+I0@HpRmoWO@R5$4 zK^g~p>IZHfXUIY(AVGrJ9bFfFY2*D1+gfp#BbSUC3?XJeXZaS?N}%Q#nuiD8a{lw@ zw;sD{X98ZSs{v!|s-eNHrwF<2VLf}Bd_3%1kNHP3q%QOb-oj_q6SHxhP7KZ`g{e{r zk=tss_=7xNFU7Afj|VvfocpenVd3GFJUn>aZ*7uMtY7LR!NWjN315!&FVg$ZI9WJ< z6xhb;#Wc;!vU{v%Jth*XYo4+RrC;{rtP-FvPcg7jb@AEWlSeS@;>Vf*dL`s6bsa+q zDt%-8gr8pH6%ag`mq;SD6gs5H@9Q~LMMj9*dAs5xRzi*x(5Q}A4=!_*eonyS1aqFxR>lIN~eeuM=jI)elkw|DR_+fdZPl`ls zy)RyI)!38P*}L5ZonUN(x*)2{6*_fC^Budsb4Yop80eEWa&mNKi86gV z_~MxQ&B%9OWe8z`e#Xs*JVOF!^~prwg0ZLY;KjYGhQMFaE7f~lrKT(XQNxm=MztH? zF*c(SQOtp}-|7VfIW4F?-uUA?Gc}!wf+BncM%4k7WgD!?pOh^yt=j=;I@0k8S7>|B=0;z#EL5B^~M>Ybg=w?Op7|7wR8hNo(^*4fL0yBJ;# zzlZKgZDWoq*sZnl+_PR_m!x}qW{9n&BINdJbdtU^6)|u#yRO|lxo+|x8@)J~ji_>B zoas~0O^Mcy-ifkhWH_ag1j@S&{F5c%ISB4HrJ8<9xhEZt906y=*Prr$AMgB8TCFk@1d7S=*$zzp3VU5KLKwB#$Y2|FsOqj3+yJNxnzW|y=bSX zt@n>UsVJPXve>rYxB(m|{|$rp6N^K2-zN5Gla1m$jHJ)Xe@Zm@{f&v4yEL3mJXKw| zJ|}g6{WDhsg$iQ;Rd1R2*AqpD!e~Wm=F-7J(GUAda80Fr9TUEWI{sQ>r2v>vmZ$E6@~ z`ogHd*gXaJ@jGl=zK0-f)QkCVIdx%bM~Sq*ZxtK>55-x80OKOt1sD%?D6KV`|D6#M))+M3^A#2eLaMHs$5Ov0B}R4p`oFW09*{8?^{{X^;*OY(`ShU zH!yG*eIMQssYKF?w=b%IW=3dE&W;YcabS8xlOpBgWgj5B0310~j|IO2o8E!;f`S5Y zRX!>$O(zdB7sY0wf&tu8xK92`%kxp;*o<{iD|x{X-Jz8ZA>TAlGx&X5iY7nbbh^#m zc55gKe2R}f;X?T5FYAMw&MyYq7{S3)s+GEp9RBZDW;d^&`1lZ>>7trZznp{T<$0Rq zez5!dmNj*CL0w%ezL=`rhF~m)ca1yZZ}-99WZN(}JDcV7th{e{xJGd!@MY;AE<;?r zw@T~>%=duJ`(FW>p7 zZRJMP!B{sK)%bz@FN$#$pImfjNqq#S5o-V6G=iGc@GP!@o96e~@DJerA1zl5+F$D7 ze43trl=6RnrW&1a3J$GdhRmXx@=|p9964g*KSx3m%;wXMyU#&*!>Q*(IiDSRkhHSm zmLjBa0iLM^)p&1Midltdid)?VmLTs;COgx1qY>IXaERk~tMq(P9xW+i9qfBnl7CtA z`cbU#9fsgfc|Bqby>EOQ1MKKwuSt1( ztIoo0m=P-1<_8oGgKB?NC6>Z-t}@(KH{AaNUoPlBj_jEod7gp@2i+=AU%hC(JkR^y z-k~t69TQfnaKB=WuXqJ&3h4CrQ%T7~{xX>hYLgXiMyt1E?XSoJT~P@c!S6>*s7eUI zEUFClJaz^j8o%JIdM_`Z)Ua0Y^9N2t$5-eau={Uirw3^d@^Ty@@s<+^3gSVmLXvL9 zXXvonbrUYC;&(aNhN#c4dQ~ycbNX{7^Ymvm9VRt)2nzM{Z=-?<7UpONy(DJ`3tSC>MyIj7nO6d)f zB|gQfzRt++Oq<{8c`vrFuL5h`_W14Icp(Tb3HK*oQCO3L7Lh*PoNfQPU$C3)i>;?9PeZ>Br ztdss*BF%4V0^07&tq4THm2Kuv5e*g8&QMcrU& z^Vl0KfziF#54@i|LEv^1y(89NtD!^?xjyt}P4TeVSTPP8hWH7y z<%J4%#V3_%2dc?VIA(P=lF1D9GX*zn>*Ou2;iv3S%(*^jC&QJYzCcGx*^)LV2d6X0 z>XE+bc&mm=)D!&0S~2H|DHdb+a_n{=!Jm7CbQH!V<`W5BvFqp>#%D}+(H_)8eYT=! zR8!40KJ=w;C%QzG+1#`^cisUi5Z@~^r@urUOjlvr!U%PS*Q;m#_eg(+YmMIx&Cwq< z;b=^Q(7U?TMD>@BI~CC z?%6vWkp`Wkq9pmfGc{cZersnaw&pR0XiJxE52CHGgV;=lcitDq{;t<#HWqJY7bx}T z7xK7Q?t7sl+p900PAFCTR*#y_ri#;y5$e-Nc7(|tZdbyYs|YreU(LpAGi?z>Ayr0+ z+pWK&9njjm2!FYz#zpu={N7X<>=(8~;Pa-h_Em5ej1z0Kux}`5k*?&Q3u}$QYbdXc z+N5MMcu1f~)XO-e6h2N>mF^w8gfS=hEa6WJkT5#V+s|!d+b5)TpIMg2x6y4AZ>=Z( zX>!z!9_BttoW;81;DvHa`jp@0L>{NQnLN)fV0C4U1rUk~*$nPDc&Yl=XYHQ%>CQ`n5D~c+{T5s zSk7hw9-OFaeuYaqgj&=jVjs#w^!tIsc#dIO7f97db|M9OkiD3&Iy+Juhkk^t=&#>6 z^X8|mNCXycw+@3a!uADp3Je=f-e^I&G5`H;AnZ9`F=UrOX*Eh3-P$R}N-{bL$9|qm zY;H{oZm_%ZASBj$52gMof#GN!YAFNVVqC??U1CvgXNUHzktY4m@fk~24|BGT0)-|0|~!0f9I~HT6g=+Su zdE#hddL_5KdL1|V1_4c7D6{9TH#&8aT@6gFcW2(8v>f`?j-o(*(#t1AtL@(?NevHl z4mJ|qu>Y?Qo+rry?9ZY%Pir?@()ORJ5;NdB5ri-_iXXg$R78!Wqkt_g{Z#ScxcM-q zcTy^L-)t7GK-e0-KCHcE_Z5eA&qnnRgjoqxHxm#oR%`ttW3JJ@i;!u2?mA7rsQN3tsnIw1MMS~F z2$jBGmN|MS0gZY1e)z4z7*UyKaRfKg1oOIOImgWGOH$wF!*{nfrm@$5$$7H~O|P)P zqO)w^?jVis`h7Y-TqsDI!>EW3u(wOR2G%W28zX=y@^V=z{?iwhQkgFuBP%qPnwxx4 z^Xjl-UdZ$d^76NGBb$ToT%8LG@S`AmVBhoYCH_fHhvdL3(Y6@wW0&9X8B(W|N@4&7 zmH)msF}pF396#v9N>V$%kJl`3B5XHN>`Yag5$WgqE4~bp+iGbXXp=ky1n)VrIMM_G zb#MAUkJ8e~OIUBI9HFfzBq-<_E9dR&R%IWin$ziBae>}^4mkRWMgSO{{Pl^*zao3< zAyotRo*RSzU_&IM#LW5vy)Cy2(Y8U;Hp~Pdtn-l12=qicfWDpH$7Zlsb?@kK(Q;Gx z%8R1W`DEFSiW|>x%VbbDRoS@@eY!#a2s$`7C-%n^xL*(VSe@CfmF5v0j0;_2inca$ z_n$kb-$Qlj8RJ~7m9gnD_pD<+_PgnudM_s{Wt6(%M^0)FIg zVJM!VWTtgzMZYfg6fzFRm&fPg5^t<|uJvQ*_?t(ZC>Y)7M}0*6^4Fk;uuWRjP;iEU z#oJ`|b`s;Oe5>}t(~i!d)KFU zRoaEiLD5KmXPMv$W+~Kg;{f}mg25c(~ z|99b_2{~(j7gpq>n)$yU1+OSHDgP%-Lh(mYPse7h#H1Q=+aU6PUdA!*R@itg#lmXr z1pdGO*#Hspk@Cp&yM!OqSgDJ+!82^6e{@9P!--m}Iyz-3rfG^3@Y{+CF816ekNhx^ zLIdAQ5$blaC1J%aEiAGu?9YOJvW{3K{Edo{$Hv8B5*Wf`H&2xqz5Fbr}XYjXo`Y{f8~($mr+3Y#|qM6wJ`E zEPhv6i5NAIDVBvP)W#-CHOxyPHZ8cZvI55Tu>61FxQVdcc5;>WA>gHQuCE|Qgq}Qz zT33zv!Evlj0q^B|^0~22A#N+%aLBvmFzV7~l-!I_YYNll0fpt7sHDt#*!;R_SfrF| zSZiAEv@eaKKZ`;%tg0hHK-SHtmBqP8T5O))X3$Rc#liNJXezHCx3Y>ugpKKl-M?0e zO|#7`u^tEX+iV64dU}_3CiB|6`<+zN?dJ)#Kcbcgx)6CRyv=$^F)r)GGzQB|QfJ*wkS92yv;j|2hl>k_3Ynn^$-vWDbP zjIy~+eS;-l2RL+JGwWe&%(q><$#sudFLdlfGoYdQAlIfRE(kpvm_1}28(yOaEY z1D2Y&o59|(siFqnUO1QL`6%mysD?S&L-+?Vfsbfkq^o4zJR}9%{X)xKO*|gSe+#N* z|BLX(5D(B0f|`~3x3Se5=-1k}z8RjW4apPR42#;;u*Tc3NBwy*SafCzIChM_T<5Gg zE!63#6NBouQ$z53?R;Z`k^TK46ehq>7Wk6{>w#*I^JHcNx=jSY3baUDo$u_yCc3Hl?0iRn56U?Ni9mgL9j6SlJe5O&Uf z9r&@R1M!QyHg!iQwRzr<+G~Ob+o#u04UQ_oldXnqMk28DuRDoL=KNF{s3}bpqjCSg zBro)QhVfDu;-P8pwZ-xD{9LdPJ0Q)=Q`QwzU`Z>S{c=z7!MQBt(icB*b`JXLKKL~AiuNy1w@}e=Nl$_7l1}T1 zOLU;cb3J@f>~iCWR>4%<$crwjps`~S{KPm;hnEksHdzd4yfKdMmZ~7v!WK4;KqRvT z3&w!Xlgp(hq|1l)dqH;3K}5p{ANB{yjj#=?}wPeosXqPc0&Rfd^36e}yI z*4505FHKC38?{yp#!pQB~d1;&m?reP(PYdaZ}L_pFRZ5T3*PBIBg13yp)dKY=9l@OG^9ZIQmzqPAqr6q+i6D{>*J zjqUb8MNf|gT{o`ACc&h$4xF0wgNUvx04v-`A=Ea(G%yWQ1b!--dqmnThQJ^zBrVIJ zG5(AS|KnTtrLJFoqGuQb+*D>Xi=|49**O-8hTn@bd2~*<9hAOa%tf}F)pN5HhR6cq z8xxnMxE5LJSh(gi!A%-CMkqc=&XU19a_0T=D*#ZuZteEyP34 zYF84vM8Q)7?Zi%=i-b`d-(eB_A{P!96^VltfppDQPzzjyly7fQs*Pd>bpDb?s|l_N z!No$6Jz|VW^R6_8(jvX?t&Fw=1k@jHG0CK@dlnkuQ1bn2B60V{Te_S%@Tq*1iS7b$|lY zwyWIMmv!>oFL+8*udvde;D%A|d*8%`qj5f7ngru@uJkb-qpYSfelYM57E)vWHS`&| zbMW~k0HrZf%M^x8$UF`kUW@mM)j4^+TDw{VW?{XpR}C-37nGlCP)=s^HDdcVcr40T z#%{$Qp#qz=_6Z$p^03iqCERNLSoGutCv77|Gp&Mf_h~=z19=dWf#N6wZ|skDh7VZs z;hv?RqrB1ZZw(dGJTrqV{DYts*T~H*QfoQ#JFMuz1>x_9p^n;aq06svX${+DDTD0c z3T85gG=hVu83`_kFL)28Z;{rer11jHfIN+I78@c-;8I0SP2VZlRj`O;>8#>(poUek zb^`dgM;nk+hxZfrfLTS_T!$&7Dyc^sZ;$e_p!-@hCK9$nhV+NJ{A31_AItgY-7m5+ z7W^T^6J<%F4LUQcc!)O{W!4S6!^j%DA?wViz&Bayuy;PYh~pGc;=|uG^4uj{hTS{ z3J3pwW3hb;#}Zj0svu%jnmztg#c6v~=)u4zWEcgvUsx!fF#rtR>9B1#-loMG&s9Rh z-yy6C`aw36Uw7CdB@hTB*dF)G*$he^8!)3GK+~DOrPd&QS z2a;x^ezC=dh@~OGEb9C%7UpAEmJH@1J%xhUVfu~whFOQ^pU7|tu|-E%v*I-@06E~| zw@4MaNN54Rr1Mm?f>LCeZc~FVGe`L{1#Z%GK&C?Q5lGTBBT1Hh^v(|+27!uWKEIxT zE+ru@Al~V~TEOgb7V*%<1#u9c=KRwNTuq9WkrX-qFHv=I2k`k!FM`WkoJHhg6j1Ep z(F>ejntgauD~-MxbqPg7w4xs083&Fe{eL68A{<8u!f)7J8K1khv*~?zSB|H>a#17< zuE4cybrjp6q!zj;B#B2vKg3oKjr&01-pa444UGc$y@4uHi-T3A%NMRM7mnopDhPvXMSK*7`p?ET)&RE2!?Y2hTWX`f<^?OK zP?}rYm1`H%qQ_5X;?xtf^9I{(ae_q7;RnU0S~(+7PUEt(j)RQ4W@qZe)Z_SN$IjCy zhUJTD9T}k%cbngI{H9PHf2yqED{!>v6}4H~GZ=DBjH6O$)Jop4{xsb~BID1e^;M2j z{GxE@jfFz0YqC_$h%l7{e^Il zzc?RVteXZF(%QKlM2HFWVxE0C$8zjyl!7N3aIvcHdzNni84ZP$0sf$mx;_Qzlp_Po zu>*;qFLH25PlJT*LMgj4YX9AhOpX6Diy(`sj?yzv+?HiZ2pw;SbK=Fxk*%^`HUX7G zHNtAsj&U9|$p@+j*{ZtLW_%zEb4&T|3jyFwc#rd>FU0)ObcQ zX?Qh+oX&9Ee94p?--x71EuM?WNh83MsE*V-^0|d);^1*@5n&JWUy$~B;{OC`Z<`_? zNBhN&vD6_vG4T-7=B*I3b@Noe432Bn(u)Ked5VxF z+(@LzxE9`aGJ=OyF$IPD0<&ctgXe^vpXJi|;X>aQiKC3*d4t4k5YG3BV${d->3l#J z;lk?HIValc8gz7>D({oq0W{$2_Tuv5&Op{=aA10X-lwBW+VE})86Pl(6@xE^?@lD+nMn6$Skhy1Qz`jPl>60SiKc{VozyD72ZSX z$gP=5J%qTiu!!Q|lyVBfuY||b+}I#OpGUZC+GBBTPPC+I_VXeYCz=N4b(6|FEE8TD zZ=*GCJgMxH>d+?tWsiAmOiVv??U($-{9?%3vq2&}{$p7MpT4Uj=*eCR#Hh-P@Nw~s z6#JyLTr_nJatRRSqh1OzogZfZd7LcA`GwxchfUXa5Bu|~KDsvkS{V5A1KF2dQ6m!8 z+kq>H_NiL9;IGhrg6{PEEvtZ3&y=irLY60Rh;^I#2X=JF15DB{9;e@9WXTHJm=xeo zX97Lb%Z|i-=hnhX7^0jt5cjM_U}^j0117NnNlVLyhniy&r@kzJNawi424Hz%43x+^ z&%19Ln75LDM0`oysp0p8@Gi}(ud{6LyE~cjt(LSXR=gRx_kvt;@IqSy$nVF$aIqYI zm+aF^^#WlTml^V>`por#B*BOVP@^j$hl4)=y@oCq@x_1SM`0-JTufT$^INEKVOr}q zi^zt^BAZ^bLOi(#3;n>92%8DtnCGJ-w4K`ngp{Y~b=0`9GI!#R#r6-U%Z>WCS2Dk( zTyMz$3Cq~1ikz5a`ZYyDd`w7R2dmVV9ZHL^!(~7>KT$)b)-i_58Sa z{_s~Ut3y1+dtG!=eljukt;rEeYBz~W{Vl;wi_%>;!D ziUGiT7HbP+W%0+%9@8AQ-+5D!y)URIE}m_BRDtWGr)X@wwDk-foBsr2bKE z&mIIk=K|v-i||THrp^|~3f&)Y)q%~Jddd-frAM+aD zuBoPbzh+8HRQk}gV6pxJZvOaRcQb#9>kmB>YL-ni{dFM{?s3K_|KA+yY;+Zj-E_VT zG=b!1|BS-kCs#U=Dr!^oA8ThN)+94++N8h@u}s#H4jLc48g30K@n}owc`0r^jZ)gK zBXdnZ5k=*06fsG}uD9dA(lh~qEd>eo%aMGr(I|#_4D>aPEWcl_QQk8yT)pRY#(s%V zsB*_ii%9KYVmSTqBjFX>?M<-qd2|(*hKZLMw<2p*(kS+xT)K+e2b2A6$Z~V?HHIb$ z5ps*6_{KPYCnNTT;;>2q>{oVeg_?xxQ0WK39zL4Vn;!8{Ngv58whF3z!d0#^m*(p;B0Tr^ThE6ONpDU33bejY5iC z3exa)!#LP5M|pX%j+d0L50-VRh<7{Z$iPIO5G6n4bgm{-=mI(Z_&ArhC^;`N^0%$MO-ch=dYF~e9tuMdheUi?r2hTcz29#e?$4w4 zH{6{Me@l>>Le`Q(e~q2{{a9XcZ&(H16wWFsl>hX|KYU?tC(Yw3ev8*QP&QtiS}%f` zl(aMb`ur2k5><^W(g&XKeO{Hk>J?b#|Qw*92qKeUtaL>S=w9SnS%XQ^Zr2>&D6i#YG~&NP zEY^d$X2@MvT?RfQDq@TCEIgt#83DIHjbZK1W@mK9``N&3tBBbVi%71Ak)JSkNkM0{ zx8VIt2T3HEZLU^#uM_fSu(yH=m1-a2tF%9D%Oh9j6|^+>_pQOyy)<4=YL>C(TFV6Q zI~~b%7wdL(z!zp-k~O6kbaD?+5QD;%5Rm%C`*FQ1{QdsYw~oa3yuPWYXNs*=6SW$h z&CJC}M~Y<7=gsdFG30Z1^uuqN$Cms5+RO5yHul&~78C_n=VL!3ldl#VVXWs!W0!Zh z3MHeplxB)|;4go@k#_j3icw>;HQF$*(J4Rt7|;o{W5qMPlp(@S_=#uNA8jDg#~Ujr ztK`ftsbZxt%muci^i{LPaZ{~mE(S#?8QkKyAQm~FA^7FgN~igH(hi7-e$)NcQ!uvV zq+}<=>$pagwQ&I2WxTC90IlPsR)$r4XYVKVSn)%fIDZHeA%`}|E3tu!wDh*3*2ep< znvIqBU6RypEW>{DB^G4rk%-wwNHW4WZ?(CNbW00X&M1s9 za(JBG(>90Jl*O}Z*g)V;W{MO&GI>S!ZUU1%U4zanTowP951G+e^f%2T5&OMhEc|>9CZieLFF#UCWijKV^8gAUN6I zuoBn?n38)zO#etw)ewi-u=k}Wn_9qzUmWRHoy&=d31bTjNPmBW(o)S%o`JuSw}l`c zdn6*dA70qIE}yn{urcxONmvaf<$o6yaEOH7`Z4_E_3!%M$#c7_o9O?IJpYUi-t8=V z__tD$)+#~qO||%q*z!C)xH*)63{DRk6-1CKD#cwsT$$Z-p#M-WM*~Og0;GaS|3&~Y zErQF+KKe!|0uK+PmX;(1y|HNaQesD6P-bt6{5EzUx3@Re*Kt*Hgr!79X8@&z*0#3b z%oY(E8d{6{SoLU(AJ#(=9T==P`T9CC!$At4^Us)^Vl%p{rNL4$nImHKVL(Vt7_3U% ze!RhN0c#&nP~F21$_l4BWpRcw1dY~Qj8eC=lQT1!PA@h(eF1NOTUz-I^q+yQKM@?b zKSb39A+x^;Uj6%$l$1s9t`@!cI->ZO@{gM$Von?r{a5&(3%>siFO5c`$9-k_+4tjB zxItb;1|E;UxFj#R;WUvpf`#c;MPcA_PSY>-*LS*DWw~BiJg*H|Jo14B5hc0FYSj)!kBJRT*tQ=DCA*yf|Twj_B+dNGaM~= z4zccK#OOduZTSLT$Y@VR%BM@-mE{NOvAG`qKhrQF{6jMIu&vZ*b(>{XyevDgA!(NF zBa#+FbkyfX(LclZHL`Me{mnrQ!x5dunlPA?VM1f$-#7FGC>K3Bv;E- z^JUYSiRY9QmHuYGs-ikq8MZ=&NFCbp9Z^l9)ZmkzystZT9St$jB^uY+p_Ws^-TBq@ zeb$vC_&p*Kf-z7Q_~)hw?7R4hPIIXss5p{(&$ z034iOz2J1S^*vQ#4 zo#qTvH6NT<2eQ*55h-m_tEyJZA5Gep1Yu9ykCL0o|M~+w3Db97M2!%mJdx55sR{^nlmkl*4gv9cP3 zY8K4N0CO8yoQI2@DJ9n#xd4otAutcWSv^QSgsIcv0eAX?q6t|-LmT_oFZIG$HEr$C z_;@tk2J2w3)=K_2m5}d!P;xT%82*qT?FL%M6}QbCy?&P;;h$oqzL^4XIwXjtPZ@9rej^gq(2jXs1I-)R9+b&6}2bNslgITZcIR z)WIH3h5jQktzudbsX!C*BUne2>JqgLq-wDkOI>PnXDsilu5~?N(Yn|)8B1j@)t*9q zeFkBVHac#ifn7p$VCfLcoag!AiVV4b*n0arZr31_ehY?{mX`R_%i|5Z>pqIzW*2Jr z`86VI6CJ?v>V@l6E*L#d1q7PR? zUqaaQ>n*v#>XmQb@L9Ld4Mg(RTAaXv3Ybw{i{TFNu3W;NFve6O%|~Rs=l@X z4K4rCe&&ItkRgoesj0=6icL0m$9x^5g>^zksKh?GV6`ORG7&5p>0b@iJ3YCMMopjF z=>{||`B+GhsN|?c#g+y^1rk2Ru7?TiL$f&=v5{@w^v-OS?B4Y*q5$&HBh20+EYjuz zNzkNt#k)ro^%XAx5PisL>qngI)&E1}*2JW-kwK$$u($6Vo_0w5u4FUDTix6RP0K$+ zrCy$;vi7u)jX4WTe*!S_g6|~kfKzxB0*d}ti|o%0I8E96{iP3G z1Y!HTo+UAt6F$trblwHx*eBP0gpk=@u?l)&;sfwbFX8rGPsfac{!chnRaNr!1o-{g zLcU=)%qZDl@fsHs6H^%6QXDaF7~lKob@w~-;B1jX_=f~nTQ5aL6yY~7m{hQJ6BZe- z2dw!W)~mOyOne)m%Q0Q9+XHL4uujj;!u_57{QcSOmf*#q#lAQ(zJdjq;0>n_Bf+~0 zWbwP#RY&*z`Nd-&19pcaPl4r`JI-$%&20BiV5#PpHRQg?z*w+G6F2bnj@Oqb8F;F% zu*Ad7{kcUs;H+G`8gq7S-8B$PL-@ztBURLFzS9(V3C(&tlt~fwz0bgHyh!f%!^16} zU1wdd5$sC^aM!}PqMa>j6UwgB5kRTSSVhG|5ZV8zMzGO>O$1Mk z%-i!nRI3OXGO62QUUE3fFTY(@sq93SeRnP^d)RENf$MB|lgb*ANj%AZxpH~1r%4hc znpD6C>6}#1N#SGjxl4;)B-l%N`8CJ$cGqO71_VoPYhWPM8@^qVv%fW&wW`=+AOp7I zg`MHh-}gnw#o@lZjb#8Nb)@i&oSmIR657OTw7`2ZVGMzXZ3)o%x>|RDP+EFAqLEyc zLHoxwe3lUKj34%!uxIGw!_JoY26#_Wm~u~t-Mw3?R-e1FY2c1gM2m><`$y-a*}c!%UcjnP9heVyi`Zd&o_W+!-zgUHWSWyc>~;JphgncapVfSkh>Egzj9q&&$1$n>j$`+|&&tXK!l z?g%WrZFYY%Seq{lC-2s^{=;sKgW~*6qtGesQk0a3M`)$ONO3ubF^HIhh_uidsqAe5 zL5o&%=>_vTBS(o)kO~K@gaRR%--2jqFvBKMZIRlP#7B z`^~$UbD)5fyz`r`bVY&lj)djOx!a0y`q|l#Z3Vxbq|uq+zI9sbRr~RTkEug`{9U8e z$vZiXVNcdTyCLg^NRYP=g@)QOuDDp3^`2Vg`b|WgC-8#l6Z0b7!0-3_+5Of0kC3oB zZ?rGxI>b74g1j!TLJ7OsI0fFiTQmEzr>XA@K^5!+w|;IrEy%`oXA_oSL!w|C#_>kW za9le1fPGv3@tdXgx@<~pKL$JVVJ(wrd?)qpYYwNq&$DxLFtjIK-VYAP^G7y_m94F< zTg;QbnONB@IP_ZKV1?<==iC()6+sZY`>@FP#BC`mDww2IOyP{@=z}M&dn55dJv_e< z_qO|gf%VyNsubO@TkY1d&jSmbsaxl-kxO6s@V*|Bk&=Gmb~{CVR(GiXVB4}|dyPVM zpW7w_WpOwPjiCV?`^7CFJiNRRvTZ%Lgl%fHn$g?a+l6q?#oYeYqZ}S6+Ifyqp9e*` z_YwX}#RLo9>d*SUxkjMsH<(0#Mf*2I@#BgKP^g|?#pME5_In2Io>$}k+HlSCUtw1j zQS+9DAK^E`aHdSfvI#JBSBTIai7P#SePPm5h-}Hxo?%_=t)Mv45TVBTal}B;{qR?C>m9`K8WIG{m{o z&EqGvTZ#T{eRG4Tf>10Rs3@RZR1I4XO27dC=IgLOEik(OcCy~0c@)X*WXf%oK8d2d>m*9F!OYY0CulAXY1r87T4-f zG+D=ck;2O^znVLKcq8Rp~UC; z3{;+Xl{POv|Fe{b=3i+5i#VFqwq+&ZvwI*r1sPWHyAeGk&wedz-PvGgqAO>{+{o_e zznn4jFn`<rM=)bA{YgI^b*)LSavF{qs#wNy+gNIpX8Z9qi&Ga}7q;0>VHD`~t9Ya0fkVU*UM}J;IV6*HZG`GMe|YRy%);zxu2x|>z&HFXRyP7l1e_FDyJF}OtO+`jJk16E) z>NM_A22Es0xGr<)QsHLL!xrZOSd@~Inq?PV*>vVeJNb0amu{aaLv znia@}jGVqQVwi$Q0fKX+N&a@pUgc{^v+o;0LqzM1H%)5(j}>jCpJCR@{(SOxYePNg zH%*CrUX7pqj)2#35aAdlHo{UC(-aFtJU2LUi;?)amUsL*zV>}8)T)zrkJDJ~M?3M{ zDZC04L-@>Al)^#-_6PQ?d-#r?#wJAaAG#58dmGIZyge%`0TSa!b%Q|t&nR-co4loI zum4z?ecq9cFOF*9nybP$S6Ix7`JLk&SB$F0Wj3-y09#zvsRlO^%E&EqIPYvo3i^ub z32F6Q9cM@nSpMoIDRe}oVx$wNsPCk&Km-Hu#V}MIn{c}*La)xL(aGMxx+I5RTYkmIl{%EGqDm&En=TOFHs}54|8@X3?E=*s@fSOHCl1t^56HpHw!%R5C*}AY#_L`j&qd!$vQjot zEnDNXsUCz$I8%KT?gG-~ciCw}L3fQ+}9B3j@xC_BuH%V1+Opl4Dranwf z8G`o1o?kXD8BNJ4zU%cLw~2}k4$R8t=YIH@XT3D;hUBHmg~|0O-4+f`Srkzm=m1wI z|Ix;UU=o-Lsi)DWU+GpL+1}9;;Ccvp&IIF8G*~4i6ydS*Nk-6$Ez>ums8|83!lPdD zR9J=8$Ba=eYsn^S2Se791M%JxZB@kGy*pFONBGxA&F!qS% zv#PSM$WVch{DcekJ~k>WEk!g3;f05XQ#G1L`J>gfw1fo*L)oog3kwM?oMH%k>e&Nt zMR>!0V-n`Alr)wYaQiaeg(mUOCN2@BOo3@aGWqX8e^p(i&Evy}baW}4M|?Zc=KnCd zRa7eUdi2l@uyX%}K2+YA8zu6>){e}Yf=Yuq13 z+;SNYaar3>(Qu50Y`OCHD*phQ8>|%HDf^juqv5@0a5{*L~MGgn2p9~>qPh4(S0 zI9Ju=D6RI=k3vQu5k{5PD`-Npg zuFzlTp4tFRdMPVDMPXnl&@wkFX#N!N-OgnOa-J#oLcaP()Ab+z_&$0F zN_;v49efZKcUv24E;YubVWhQRxI%$1(X8Gn$HDv+X-oi zFJlzvoNHb{G}Epx=`cF~h1;`okgxUnw z6lF(+%w>1)HC?*H-&ZaK^qc?Ut3jlT@jjP{h(ya_#No4KU%L?NeAKZY%grTm@{;eY zp#H~QQkXsa5>l*X&s-;3!u`+2aDZEsoNYsxJSxIx)B=cO zr2g9Ze-ptqLGT35JDOrXzh8f7lw`uqGs9McdC$ZZq(!ER^FkbG;MLhBIDAvRb^onVk?ChEZ)o7{l z5TU0au=B~X=*ZlDoT&*3y)cF%?+sgw}mr0-+$S`_%)`uwpM87F^N>_R^f(<-9WgZDYdL@FA(z#>fmyK2jZ zH8{#t)PCW*Z~CjF*v}trOHY;K zdDx5t4J7}ul)T_*5K%NO1$;%6F5WGQ9cUA=z&h~UvkA25|GXsiS56r~uE&PeI4{Q& zIyv#;@VJ3ucD#TJqATg2hK{%rtkcCzUY8&a4;tY;kU>x$(b-F-OxKkO)Q(q3-U%&? zEP9a1cYNezaeAx1ya6GtexX+d{|4ixYWhx1HZD;AyTP9l&T=qx?tYEPyiLRBZ*r2D zsJT+8ra4^w5D7|*jvEp#DukW25giVl_`86{Rf&x#7tXe5awNo5S;ujhJ7GQeJ-lEm zfg@V`&&|q2@^7{s9p?O#Z1p%C5jF8|14AKwmo-Uoi0^NLDGBhJ?f7__S{^fG7p(tz z{K65!b+k`eDWxldkSX7TMD?alloe-v!_TI|q>WfJN0b_r7t35KBQ2iRbj=cvVTJ_b69h$C1=W5Po4u zI<3t5n~^04K+YsJaCxbpo>oOW=_8%9(lKP`^FN=9t2n{uN`eVu@RKOG11eY$? znSBE6p%zmzr?N-UC_fFp^rfP)nT0RJj4cAxpx`lV;!Q|Ir3F%W5F6-l8(2h%UQM#U zXy8x06wCh~&rn}Va*T|&5}!X%#lWOt@!_t3i_Uvv&kyXU>h(XLOTD$tyod<+g2KXL zjeX(aDO^cGlwyt1hzspR7|O$oJ982NDSB@=5mC}Pm2bA}U#RXiMqv(*4hX!64`X66 z$-*OnI|I;dre*=L>iz5OZ7@BFf%$RjxE!cBv@9|ni;#Zrsq^zcgvHfIl)>UEd^m*w zC=#U%FKSuMox41)e~Fv!zfSd^rK~o`YgJ~8Ozo1)dO<>x!or9{LkH7_)d=aoI|H2( zlgY)Elt?Qda3rLqsi%WPT{ZlY{#lBm8<->LVZ`SstWW!#71G!-M&ti5AD5kx*|<1U}vp1C`KBoe4aaAAjqq% zl<#YT@W{Sw-*z21q3PLAJFfGgJ_p|kOme|B+d*luGMR#A2O}<=k&-n|Wj;MmM}4Z8 za_N;~p+9!i%+ZSn`%l6bvBVYKRessW2A#wGQ}QRCQ^`uxBL`TyHIRq5!V}>)HuO<$ z$R>6BAV?KM018;{Ms%gZ6BIRc6$!ct$~M5>x~pK+v_X7E5vAf8+_EvSDl|WoEPZPJ zGnCQXyk`0iX7VHNdtk0;3P_3guj=~&&cgO;!Pd(^G0?AQH8Sz91&_k}XLsnUnt1K0 z8+~s(v|1S|%t)hhr2sR<$e{1Qu-U|(sWRkE29*!+Vq}%@B7==8;RfNQP06IOyn!XF z``Jj1-@%O$LZZoF1_=#HI^a8>exho_rjK0*aKvq9H2so>-IV5X)ck2OejF>&1p^Dx zs{}mrZ$%4iXenCkIf&q~5~D7-0CGp>VbKWwu)@;T=uaZWB%zkZp}~miy2+N%1jzi( zej7fc9V-aNJD@_DU!xQ2l1*ll?R{K|OrJiT2ccjMpUBl0art;tox}YKoA@5y@GEST z4*%SrsJo!B&JHZ?U#CLhlQuy|ajI>POWFpVKG{RM-zg>7Z{maxR&BP@B&ev^XQQMN z>}1P*O&g->+|{@cozy~7cUKSe4&=}x z8)5W8f}t-^SH3^RTC6DPq{pvmH^P+{10=O*nwa)4nOXY!+V8*>RrE(JXz<@Znl|}5 z5?eTO;Px*OSzD#5B|qDyFL^5tKbRP+a0*OGE)mJ3rIBz`+N%~4VD92P44=d-js*uN z&@^!^ME4yr_cav#kIqX2Nh4F`v`FU{J2plx112jj z=q&Lulc03aejlaFB2hMXy?I5e)Nwpi2gFk_MK|T)C4NdyQz1Evj;|?g^W9LH6Tr!u`DYk!(gQhjXN*k(^o;IGhvySm`b7Rt)Va`_C8GB zk8e8Y>>;k?R6DCIMbbo-TU7`K7gw6sg-p=ZQEF2GGsk>3*A~P=i@!^1N9tY#TG2(L zz@v{N2hbVx^x3ESn7 z(5ddGO?xRj0^^RpM$uC5&#`ao5=#re9+OJbnx0gDHo^1iW1?kM)Ij)wMw3^tR?8E4 zLLDPe(#8s20=+8WkJ-tq<$hqPGf6dlgf{~qarwhhCb`FCES>$S?K8XK(^~pe5{xrN zIlTrA&c=d93Hf-Vp=q^d7U)Kk{_$s99q5w6;0tZyfLtn~r!D}$6HbPeP@|m_(T6Cd zk1sI8=7UGY{OXuaHwp#``*q3fX^{7S#Bt)il>){NCWQmBL zG&9ou#ro;7oe%@m`9u%hV)rKqjdnOQyTqpa^MOq+wo;vuqc=rswkeH+v9voD7K@ps z?Q#Q#v~}-Fx9e=<5*v*TKht3&i(NWsc$c+!>KhSVI1<|VelI#MZdI=%yL1dA)7(Ia zkIHA9Y>r*6OG_>cT&q{7B}6JRctUlv{;hp753;Dvhp*6YoIhOak321D(sEY8i|p&`7Fmrbep zN>HR=u$Qnby}fzmMc1okU|1VgiYdv=PUq1H#36gk&(DqCF54r2{~mg}NeyuZ+Yx;Rdzgk94^J7K ztxO8xPVJ5EE-~)}5^&!ezT9^yS@p(6A%g)Dry1(3|8~9oUq9YR)v=KADcb#RGK9sk z@cSP6>>|ogOc~CYJSi zDB@R~T8Eo#S_WRBmn$t8B-fCr)Lw*vg?;w8r~873cN`S3KfY#RX(^qa=o84Fxa`?1+H(?7C>4{qh2SMEKuOTPw%*?%MKZy$6FKUF+`%d(vKWFX4B!2S) zV!HZn_o)i*-3&qUUnrMOG53C;=j7OKZ7a%CZRQJG=R@AyTK+)B=b$J;0~fkXOd?FV zgR8w_iIzT?OuTA^)!K+mvgX-v`!BXi3iTkY+O%LQnA0@pr2zITwGl9g2!H7@cDj59SGtgB;pqG1{?NJT>4)i8=Q z|FEZqU2`U)^&z4DVt3@`S{>bJ-nG4d*X1y!r#I*D@lKW>KVPFOov(Aw^>mPlD>Jfb zd}sGdEP4$F4fst0T)@S_c)t1Re*RHs(2KB*C=SfY&abRIL|5VwC7|R7oOr!G_k_Gm zd~+uu$v^eWHX2?K1lzoYG^}?-ktyMGxd=V32!m50#nC#f&{i*pWq3`^Xlx+?D;_3> zDseTZDuWqD`W2bXWEK;*M&Z8LQ})hc)4-=A&m@KR#rG-vjhR-cFYO z;_SdTW*~xqyd~GE^fX`9TWNoE6~F>YqaCt+G!^_TgZ(Zvg?Ntv4`Z3;x|zj9A@9?s zbPO1?W6w)GRQKh_777OMnb6((+vy{z@9hsf@2P+L-kVquru^6Q77ylHDKDAlo6t^| zv?H;Q8T-evp<64Q71ayFvJE2K9P0XahXaG6B&)Szf>hTxHpJ@g_1j%!S1OLUR+q=6_VMr$*Jzd;^&J|oQ zaPMmqQ%ryA7?}eaxc^qnhaOeB(y7|eD&Q3Ps?w0!Z<1%xYC&LI@N%rpp{~EK;SaNf5DWzS`e!DBF5aQ@Rmm&$T_5 z*Dc3B=pi56Hk8!va`fGMoYVDJurKm8x9hQlzE8dU!7ej0Ca3x<(BE&}ch(X=eoSHj}l2 zDWTiarW*i^n@eq@%=#vJ+I~_Ke-SN@!h0)>$9l{J;G>@;nalQgOO&6&fV^{g*%J?>q0?HyM5KY9{u^s<$lpcxm-y^rUn~h ziQ_z0BRFMSpNo@M?Rb#ZGow}%;wb#PmAwb)XMGHA_RE-Q)ul&}NuIv>illWT!mRi@ zeei1tXiMDs;hdLAVnLAW;TYT*oyz4tl?-@Vdl_$?!2`2l<(W%e4>3wZJg&QtN|$|} zkJMc0N0agj3dT)VM!?NfhvlUyV@;@2P_<nFALu+mk<#$e#_@u@A>8fMQA>zUchtbTF>U| z?k5NXbsebOD+BdP2m2gce0v8_?QkK^+Ss3&p9&8MWPe&4o1*NKr5i~~ywtGNO#wQC zNDz~X#`ikfxJm48tlWGAtbbz+>$Qy4uX2#C(zDC%-pUFRh9JA+>LB>5>%$tX<;$c4 zuWTP%0v!Z^9EUv42l%$DEy4$}+}Uz?TrQ~De7<2V_VzVH{em8uy5Vz6pDy- z8<;xGc4YR`!KYMn*MYO_S_X(GT6O9ZoZg@#wE%89=rJpR=2=>K7ln=8??>pT%j@MZsEOep`

  • 2mz5-9pClP@SqKiN#29`Q7O@9 zo>wtrfP8IzY!!T9s-SESNhy9s0TBwd@THKE%M@a{iOv19~`4h=5!0LT)$p$rR|NemQL< zV5$T0IMmoF>-kBjsg+l7(cfHf`ch;;woEX~isW*n-3>x(Vy!9JD2=OOlPF?BsorGqXI=ph*i|NWIyg5UR<4hzRW zc_{XyMCRe?D)yp~&(~`dvqHkd@9*mx42-X-r7UphD};cySxHNHz+NJ&8A=6;_ywAi zB}*EXc-5(-Yq{6^%zY6a)C3DDC}+#KkGP)ao6)s}B7zhn^EV`NZ(FA?xTK}Xo&)f{;MXI2w|^Q|l*h+HM1pC@19Jn*Ey*4q7V}DMc`Pve zx2pFDr>nh63elv5Wgbq4olbw*X{_kJ{kR#4PY-HjSWc7763n)?NI1D<1GwDcF{GjrBCn-e6Aejz7kV!182AX20UAo`i^4%bK=@p4doe^) zgFp3Uo$4yyg5O!52wglU_H2rl(kr_(kEm979MYW%Vcmz?Nm6LC&gRYSMZJ1W+*yV3NjQ< zLdnl<&gE=%J+$*w60Q-@&e*wM<-r{vO9{Fd07ifCtU2t8nvK`P}%>O+88( z=2WJss3sFM+VB>VXi5&}XgLfuR5I)yfg zwF?RDm0P_QH#=>aDY`3F3_>AB*1k~5BkrJfOIw)V%RibwSba^I47Y~+Af zgr!E70T-Ib6Z=e*lL3D{{nU6o6T^T%e)90UCyhV{m>B=M#ixa}Kh{*teEotB`{Gdc z{GfA>F0`0ddl12as!O((Pucoh#L4?>um~>KxS-LzI+v6~^~!wzoA?g148H#+9E1Rm zL$qy*BH?yyx9qHQ0b%D+{QY*i8^rxC@{bu*#3=8CdgplcnJX!vB2-%Q*W$ykE;|Eg zw*tQc_{rX@9+_{z6GHpsPXqyRg>e+yEthIRZ?6kG$>8XHPOk2M?gHQ=@c6EzE%hQ% zWZ@le>M7>9bN#y;vV@-jAlp9iGN908%AY8jcZ-kRi2wThthLhPPpPV&D-?GO=TGsv zd}%(Ao6P_CWtTGP0t({K`9%BGUd|~6{*mc{qOoo_W4z0ISNeV6>x)K23(m5_5of*{ zr_-^R0B8yN(d*Ls-@)rx*uaNBz8XGXSOrtlJt#UKfDVJFm5ogv_+;e7mAPkXF$7pg z7RLj(+beo`g>|0thC${U@-*N3LIgB}lSiRn$Y+Tl?bXHW>+7-t(#~|i+4n5V)AhO2 zO)SlJ;lHQ0OkKtA5wzOb4pi1TZF)ZU9~V8&Bd9%$`r01Bo0gAcXlE?1>HKTNpOSYoH_speg}ICRuv!GhXWI}3U76n{IL$*7b4E~_KAb{*n;8lj&q57ZI5bJI_&C` zY4}+W<~AvAJhuhQRM9S(5140eix~p3M5FG6XXZe0K_;R--~PPzTi{&}SRc)DMOz#9S^J(Nt5V{7>Al^AvbQ<> zy9PJctwD@|%<#|?VP)hY$*qs4kI1&mmzE;PnTQwu$32M|HCGO#m6#Z|soBn+=MJ!_ z*#JG)@Kr9~2mB1U9Vj$LtdLN}l)M_XSrVb*>N4xWR-@e$|4Q^Hk`M!=<52|bWlD1! zvW4MwG$)RWNO1#YjG4cw)A#&IgL#yJlm4918F~W?J21MZ{F(*@E<{K3sU zDK~!H!9!jI8&-};dPi5ET_dyI>}FN|Ga$Ap!5?U%0!*a7g60RWynd*M{T1xiHqGl5 ze_yf^KXu|pP_M7&UcodK=AIPVybw5zYt;g>IN1^>n|Eqs`cqq7Ef|0T0pS>*lSAR} z{s#~3p=1S#C}OMqSct`Sfz0hVK<6v?q(KgCcH3|suJ|0`?6kbJ$#V?V8~V?!1N_g| zaL2~RMC1`5AOh%T!sM(YTG&-l9;H>*-QB(9g1kaa+k?YXUC785Mp-aO zx=1^RT6%d$NOh91GU@UtW1T7-zu5{33)bj}r4TN7z4IzlbKSYzpITaNc6aH(gTEuh zS8nG6ndaAZNb5rcF1HFZba>~0Y7e5X2H$YFCPmW>eh{^pMlVjuScE>-8U%|VUX zHF+3%^iE&uWRaaRF|uAxQ~mY%Rg!bpG)Yp+DYBM>*W-P>ytoLs-NLP`rWEY#820x} zl*Png-yxtN1VlK>K$~dqyxW^t@4nlcxbIz%)=Ty5%_RKlY+SRR0!CjM;h}62gN6O& z*|N517C60b%!#ycH4Ei)yRWg^O*DmtgCBP@B?-8l;x_fN#N)u5v%R~CRgdeLvDn`&9@u=2jscxPUZSnAq4Yl+I04z8ch1+1zXDa{=S@ zr6&hZ&p$3Jx3l7J7{yx{Ac^hR&daA)b>4e(^QgUpp>)m|PI0)^Eou(uSZzCM&-W5y zwQAW6=(}z+6(}!bOm3~mX`gk?nnmcXCz2~(w&_ml=ryHy)x~Y~t$eY`UFf~-iAwqa zg+1s#u!zx-sbBfsaVLl_!^M?cx=j zJMC$t)*!wMYH|yGtPbUN&2+>ar*5ts=XtpY0A1oPT)4{1%Ox2UE5AZOkPZg&JnT6a zvt_^I+LfYxdi}#hv?d~!`l;e$;ckzsQ?(jN*6Ru?i9!wxJF@Iwyju%F`N+MDWOa%m z*V$_LMQJ30JuR!DAJJI*p#OiK^^#k*&F&t>3ZC;Q;TDmu3l^*EWPVQLMrqUT!DFaH z&&@7Bfhf`&x6%V3bFG+NcpKo`au3_}$!C(gEOv$x8Un&r!1)K!(ToA~BjkvlJ)a8E z3Q9L4H_W5Y_rO>x4t`Bxq*{LBzuzhDFTdm+hq*;ieU{sY;NLBwG>zMAvtwYj^%AT` zk`J>Oaio9nnu*&D+#bc=%1v`kpSXKC^+kE$j@@(3h~8S*<7&u0PQ6qN*>b<-&Pe(A z%%1y5@hXl>ndQ(2Pnjjee|7N-bOEnHJ7Y>-ZQ{Zvt(=i8h>o!)d~(YHPYWk>(z_Iq z#Y2P3G5=0@y!0z>Y~SNOa0q-Q`0`Q(IaF=009%@*WSg4(+_hr9#L&tvPV6B^h6$!< zY&nPG;tO_Vm470?^d<1irFQO?6e9IM(G$Y^r->+%wYPG09_839hIwdT6*9Wl#dncX zlAd54vn17VQ>s&qgawRJf~%9=ra~2-&wDjYu92}$&B%~^5D)_BQt1r|%YcLOa~4J0 zLr8PF!@$gi%5Vz%V*~!_3PTES$#->rys# z9D0hxIc|u27+-K*jt*T`A?1GpvkV>VlG#7;Gc4#4w)H^c)9sg4UGV=}M5A>@1MI`k z-bHLj&Wa>r{(A?eXSiIUiQ&6p@;O7D`J{My#&716kf~E{2M`k;VCBZ}oh|_n@D?VI zPXKB6nK0|W8f5;y{bRzbz)5)fPB=A#@o&N?IdnLY2rZh*V7QT5M$uZTL-Cs?zFZ$= zDRv!hX(*8}tqP82SopiRJn9w{1jKh-_sAHeIr25mp{yX(Ps4v`_t2@i?y+JaTWYdg zTp5_WIuKiL&6z&C2ha=u6Ri!Pw&y9_ztq_)RGp-kW`8zB%_p3&3P#{UO(Qh;W`%U0 zXH~h^H*)kn)r)N@EGWhax4gv8tODE!#-A9--G*{=2>)+F{q1uz8(=~cW5ezaCF(eVq5#MBj#}UzlEVSf*pW*|5DWdX3{0?{gPaOVR!L;Al62~D8RPw zE0p+XF$Ogk1jPM37@@-ZVE~cszTxRKnhM!xI^tt-6|C>6z>t`Zte0W4#GIw5N53i` z{bcLSAI$=OE(~4HX;ZgjTK{={p&IM9yX1qr_?5sss?qHqAE(y|j5l80gv2Ul5i(c7 z_H#|xx=4eHbI%5b1f5H!bb-hP9t!2VI)ywJHaNPjI2|*=n#^PJQS5X;Sksd5uZE@J z1DQEJy^6+u_SC)3L&q8iTk_AY)V}pMh%39GrYq16tb274ikn?Q>cx&Wur%7}?S2!O z{|>8v&yua?PkR2aEtN5Vv;X$WTOt?+^aXu5whr62%)p(f&64dR%r|R6PCl)h?>xI( zjxOx{oY%Tv;=0P%&=eUwZm{IDUE03!DJ-44@qZ0zsRTWZXFRc32DHm<4PW_GUk_Xi zKfpiU5$7l+i`+}QR(Amv)U zuFfgp*JWO!71{usP;QTUX;$Ke>FILe@{x41Pli{Z5e1|)usP?WP-18!#jucY_fvN9 zg}rZwHBu>gF&2LwgJ+c65XfO{q#Z6_{Brph*4D+dH+;2zPtMz1%r)1@4TyvU!lJwbci96G>LV{`$-X9hDInu^ zAH1m7G)?o?idCDE;|)=kyV2CctIBz#r2tD6A4y8b)n1n)_o%(Fs?kLj8&cl;Ci8In z?!RmKM6_Yc12Q;O2ho2-6c|%Md&?gn29m zPUTxZ$YPW#ana!UxeiM$>{~W%sk)NsN5iPNJcvBOjjD(+M{4^S?93c4y&M>`@|y)1 z0K7`uCkb5EAK5L`{~FM=mjiHm4)aOz)|!%~_-hJ-#?SMw^d=DnJMV)WZ!AYGT$iOG zCp{0jS&F)o2)pvr>_DJ&u9TXr_MEZn$itq480A)sfs?j}ckfL78~GF^>K$(g1rCcv z!AmeZ^axDI+;idDH`Ti~)dPaR5?0tYP-lI8JQz}r_7{(P_0mDT2B zC?rgk&+~ST|@x!k4=^$-C8;3DDr7DKMuqj?4#F>4BCp<%JvFEK`Sxg)P zY9Az4^ixcaKrXwS7OEdU`4Y}NuPPsob-x|%NLnu-Km`2pfUwod;K`x}v%>WlpunB4HC{LYOdO_qy{s2K zkCz)ueUP5ruDFCC@+A|G(Cf?d3cWF15d^E!FGM>LpY(|J@Lno0D-9QiP-YVH!aLsGzepe(i7A@&~O;1f5+qZ88uS9WKpzP#$p0}S3f zWLw_3Y=oX8Pw2qxf?o$cf*oGJ^C{KBPdZ&nb*{X%Rr8^qNHdxa+aWQ(BS z#@1^+Uoy%=$o@k7;Xr+mF`Rk2vH9@3xxmuDKP3RIo@{vdw<-SNy+2!ZkK?=q^XlFC zVISU|Q9hO%%}u8L!DQrRh>_9Jcu4QO6Q0~$pt`E+C@j=wO+i6W))d9q#Dq#~fC#gT z?5RrH9qTGjWD@!Xc?8ED@u7m5%wJ0tHX;LSEaWo4L(bgLBku|1SwulBu?UkG`Tel& zH_$W@e@$`U4z3D|1K+xXB-`1uMf~S_U)8x3bJdC{p2e@KFugqa~k8VG) z4hV|biP{ngy*4|ocA{~VVoR7RP8!m%`FTT*<>nP*)qYuT_U9RUc4jCln=cP(Dir02a1H@(^y-@Hm^f_ro}jV2%<0!pA9 zhopg9T$pRYz`%$1w--|{Wc`CIALMI*;h)&yUVap?I-HtXiiWvDhuhgFy`I~a(d6Q7c}Ppe z9sQ|y@YFXazU+rYbgmRVfz%k>qM9@bV}y=G624zLXmQR88-S+XD+`y_MUw4pe_`@(3H|{a4LT~p)D5ep)Rg?{n@nVeq%9v zC`5xliRE%$Sg^L+KG3i%P zR}1AL9M3HYaT3bHBv`OqG<-h!pt1B^Tc%so5|qxW-Yk1l5{xjrSEN zN)BB6aT7lH<-=R1_D~1c$9q>QmyO;^#>tVQY{4M`GRSt`zq`XPa!$tQyYlp#Fj(~5 z8DCS_3WJva14j7Xo=L6>&Sn}h-t=?~<$6$N5CJk|?0-~XvXd+nTKXJwI4c{fI2ku; zIXj$o-rtW9xZ>FY$i7^r&W519Sv=B9FPNGxL*s3@L$A00W}L{Y9lbFl^gU`KJzjh; zYJbDJxt`S)Q`p?b7$Aec_S0#fe7S9g8?g1|TgBBMFYQ(bDx`)y4Bp(b>yH=i0!zDv zhh~}i+_hYX$>;4y?rsnH3VzjK$DVom=btXav-E+UqzF5r#j+P;YdTF4WWk~i9&3s& zFUpgW!q<*IdbK|Mk3XRyiW?f3ET+#R?1x)X!n_y8$Hor9S~M=FOFthx&m9*Ro&ESg zM<+VIz9Pg+t~ng^Ah15k_0{vp0m7hqzgFm|0GW>Ib!ScLQu_Ly4}vuligBG`8xihO^a3=@0Y znGeqG9Am2%x8sEn`F(TB>3}kiF?I6frF+bTnZ;h~eekvoktP2Q-66LN3srjOQF0-$ zlipZ~S0T;_;7&Z%B2`9tWDTxt@fG3A!E%|E&q|cm?PEs6@8|f?vw>Ru_?{Zbp&|)% zfK9S~=8MVrJIp4^Ed~QV4+{Ktgy?a<(5n?}2FH@l?&chC2(vFL)X?HBi1m_J=fq)>^$wKd^W&~4xrsa2)H+X|I!ERJ&R zlcDYFFbRBPS!)&bE&vTL@r`yv0{Jk8MchI2SO{>Ll^FgoU>wU(t|l8?Sj#ZC(IZs` z)*Vlb#*KS$aJTn-zJwD^`eanxqBNBBKnt*6$X0uLC=p31Sb(xAiF!|eqT6G+%bxH@ASO2W{LRPjftIq}VYX@DlBvS6NS z3A6}GbMBkZQI2dA_&zh?jygV3Jgc{mrJ$xF<=vf81#$VT`a~NInvW5Cj6*85yk#7Y5 zlmh}L)5)0zQM$hfp(nAU2DKZSc}do(z&DDN7>n_TICQW`#Ow=S-!LU82&f21BPk%DbS;f^m$ZMn8-WFu66x+-y1P51 zyFnW1C0%NlTAo#}`}*AXo9F$WGqY#r%$(o1Cbv0IIz4$v0b{cL?sLMPYXg1_Y0MKQ z8vmg@6`B|B_~gVhuyj-xI%!tdJW=H&!qUqvs$sKjK_uIL=Rkt7{K-VeV7S9qk{^Nk z@1_tcpM;?Z)|;EK&yxl;9Q|B7?lGg~lgcAz)KUJ^$dWYN{wZX*R{YnJ*V(;kgDzQ0 zq9?qfCRdW-Z%K~g6#tr@Lz7fBmp-4UbKgrjfQ#9HhV$ZL$^ygTw8K~Jo=V(MnY;-L z`6yqyZI2wx7CF2jkuNmt03x$TZstnV+4#vVX+_T+1u``>H5IY&5@wNsKXc1{y~0n1 znJMoy3=JtYH8hIlhl>n)UI=J6svBUJTW@{fA66~W7B0H>U9MUPqdN50R@>X*K9BL~ zb*6m%=6dq0D5M{MDq0C#*xB|d2h#>AF`64NjBDiZ{1RaSG97NhWDaOR{WRudN?~)3BiTzKOTuhLdNs%bD_FSjQ;V^Ky;o-k=gk(`F@u z{j_7U86vynwXw{T@>Uot7%p_!zrX2uIp!|%>`D;d>~RFXjiezYn-6xJj?i^U z<0~YR#{{|$Zn%d=TliI>kIA5qO0XL;Ci^frT;6ev!)kTglcW2*T68KJh$m4Vk&vk_ zZitT*!RC>jsJtZdiZ5&wOTWq3XstF-z!zuHZ0&M*Gbh|9nK6deNYHiUyZJj*S8=p^ zlu44x>Q?NQe+Ua87P?z&uG zc#0eR>5T>5l7}Lk+Z8{f3KzX_WTy>yA@j8z_o8uZ#g*niaDc{t$v)V&O8Xp)!x(aQ zv6L#L5*#iO6rkumGgg3mrlu8k#wXQfup&Rtqn!-Bd4pV=Y-=o!c7;@ zhoToK`Dp7&p6N<-$LcY1$JNROxqGDWl^u>$$Yu@G$Sc1RIjrU-FnRpwXA0S8%-`ub z(1$lEJ;b#7rnxsIvax;^W)>%oE;t_I*enwmoOzTtlW7O%ia5W}@|z5NoSJ=F6410O ziEr62{G_B0?@ohRK9m$*n&r!(VIhlQaQ-pxy%RXPO|lqwH09R0k@ILOSeIsYEs#na zsPy4B1PQl)pdGZ;*KzuW;~R>knQhb!cQuP}KIk)P1F zRt0^O{Iodlj&U2M5f<`1AYLXLwk^9qE!ZnF=`{S^&ka3N@9uu>uJsA-3k-NnLaW;m zQk{#do~*ld1m{6{L3*ryy^}Q|LKv_$VeUr6avuKnldGRjd(p`bI~R;wrkw9pbHBS!evO_iX}3@q*0k?j#7rcY>6RYyd$3sc0K*&Tz75i zsuiD+gGIGWdMZZFYoGCyD{N<1r_THaK=S>qg9~gee){O?3yf=LbimKC93oZCBN+W~JAV!Ta?gw%!Mw``*KuSsLCzFHteJTKW z4V%fKuy{6Dc~iFXbKr=&LnKH9!ZFZ3ggO9y2Rmp@A z>Cz4lCS)f|H&5(*9q0iZx&}FGLh)HCyoqC=d^FO>x`s>WHGAJl)3lLciW2c5mNELk zw8>GQiBEGJLy6{crig(8rvuR>i@lNKpz(4wf49rIN&8KxN9Gnk;(?8|?NJ<}EWNv_IpF(hj)Sk3 zi#N`KtB|NBT99c)dslejEXNh1(E$`rNwz3b4(&{@4QQ^hpzeWZw4IClkFVffb|Ab4@irG8 z)~t_8*IP3OOZ77kZ^$f%DY7QtHBN%N=GzS#ej=mDqvI`y1sX(3VKW;S{ZD?K)j@%k z*>?fW74Vh%Uq(h#SS$>l-i^AbfO9V>9|*C~+yGY)649=y0(89Xdk{pt>QELtv^?IB z3mwFm(+(cW7njvi{+^Y|>%U@HCav;bX|PVXn+gEtvG)xJO%+91uUM!i=_;a|&t536 zN-mwT<+u6r1!O%;S(^E;?q?Q&Y} zR&}xXdgFkoL1T}X7=#v?G>1D-@|owP{F`r1fMpTIT^G0I6M zP(9c;fZ_V5g0f<3Af=(6qLhfPEDK`_?kf<2f03l#9zo%HhY!v(*jLOos+g(z%3J|* zenps6kml85_WXYu^{MS=!5nO0o;A8YJS-?!ShZc=kN_t&bz z+e&UUv{@R-qH#f6RoXK?#8laY_zF2~`;V!XW8}ImQ?@ke=3x)N-ks>OTw^Ut)>MpT zKk}WNdEwrZ+wK(vLVoT$sFJLGVj)(@?P&w&F>QUMG%%80obU;y>>6pOZ~!YS94MuO zU#=vcT@U-Bqn$=eUBb`#UF~kckZD;H$n{M@!c7JL<$Z4tti-QM?-+;u;S%$Z?mCFc z+30}yi_yF65*D6mBO*ijrTxAQZ7A=kc27h<7ZeTplNGUGx#e>Ao!#fxIAv2DM*=J|0o(YspDUb@ ztbN3%f~tu^GHv_9)zQHjz}9}J$7dqDoBq$O=ZVgxoM+3&d*UM^ZRrag?804JJqcdk zoE5+wLgqCM@yXSWtgj7|ML6sPO=OPjghq}D>o>!%bz4gkw8lx~SrALHpVqyj;R#Yd zKTsz}`CMX;BkY(GJ0G4a>U4$IVj9XMpSy%CwwIYQv9|lX?YNk%&^Qmjxm5DxCAFnQ z#eO$+MCso0Gz;Fr<|*yXv(%+cL>sN?%qi=aEL+V}r zjk5KQiCvWc|W@@gy^v%122g!CzfUz`xa3ckr#W?G!^DBS*W>HrvpUF zVlSp~is9>MA|2__CZD@~E~^=sgaA_XYp})w)C?X8iN?q(d!P5P8!XE;dyw09Ml9w- zC2%z?Sa0QvY2bPkZMA^AHZJ(NFa(%kAcY^*@}0-aEkdzqrE9sWG^*2lre{Ppb$ZCN(eT?n$;9>VItYKF_ym^TMP!d(et`V+=K@JNMK7na)*pJ)i&(1H#0B+9XYj2|uEQ`v%OH8c(6^pBiF*aAyEZNM=(F4L@QRKv7YQj}YQ-Dl7)m~#>u6STtzTMP{vu_m7E_4wbuwmIv%Ca2gzd7N^& zTphu!&+Js(K*-@Uul)YN3Ob>b}8Ey-J4F(+nY|mo0B@JROM>6 zVoZ$o$XW+F5cvFF*W;==B?MYd>$;)Wh(r+G_1Z(%!Y`f>hn!svDQz*-4_|oU{w6;z zC9_nyX1iTEYF`@9ISMvZ#t+ApwiiGTE1|ARiyFb>k3LbqSpBn68b=%a_Jez6Uk?U2 z)j_`hhk3&6)0x=iB4+3wT_KS{rwI+b_e9dm{j@}oq z6Fkhl#mTQI4VaC1IN5k6cZJQce)qbbEfuH{IDOO4cDWu*XHek8<;Hz6Rx!1lt>I2G z+_6W!t?`SydtqSJN|Fc{Eoy^$#TDvub3&q_uP2U_!paX$q)RHd*BA4jd5sis!EN~y zN2m_P=4fH>5<94?R6Dax<}*vAr>OeTreh9dcfmK$urU=1=Ig?Xtxv>(3GDc%Vl9Is zrUEf5`-8=;^6uxjCODwq%m6jluyy#ZP{XIxb7nh1M?W6KWtm3Te;-+aMi1S=RwoM_ zBkZ8>dl4t>hWmVJ7ZFd>=G^KXo&bOwLb@+U_G_;>nUAy;mY7vk9lN~UM@ z%H#RLSbHSB`^CDAv(LXW!5GvQH zEr}N}pf0FtTu<}@M*6wur`X&@w-&IoKS^C7x{E6oyHQB`!f<=k`c9vrN(1ec<;T`oqURq8LAdOlt-acATLbMby)^Up0zd zh>#Hom2wzx|K{bggm@R+Q~x}HcTM7afocR|(QDP`08SQ`*}eo|rq*1y1r+D^k_8L$ ztPLEi{%{<~^;t!(0eYwGqg%4)JUsWUWNA_C0iP!LME1!>GI7F%)NjYI(yyiAAmnkL zd&#q1Mry>|FBRHv2gqB0Uj(@hq8~~>IC9VL5_;gLkHXdCdz*!4sp%cR>ZN%jCMP9b}5Y)&#sx7{;2)6`LJ&#m{Ef z#q-e+=&{sQa_62rg@wgCO|YmvE$EBC{%Qx-bUkQv4)oPyQBt+fa-ZTYaaS%a6K0!` zdTn1&{e0wdZ0J{ZTWIlm`)eBZv1OxaqwnYW1@4ys+JQ-Nx+-)tdR#;_Y=F zi-V5L;}BSK6eP%9TmPYkea!Hh{qTCNzdjTe^l`r86la}bW`rst|2(;9CJzyX2R8#T z@RB&p)a!wZ9;~&Q9)2NLUr+ZMUx&CmSc*D5>a_!kL&;no>5((IB>RtA2a`OX+yq#- zDEZ_E@c6rZNc}*;p!Xb{>LQ2V^ok+#*4XINSIb>73Bo3nuGXmH!yPs^*`L}IgD=B<%Q1C328*;j_W7(x-6iW^j?)y)pRi< zf#x~d7cZ~1R5k4xNsp(?cx&7(pyH#&8XI1h;y_3ayXsA?mFrO*rH=J;0*t)0Iun$|*3f=55Xk#zIp;B9#K6RajRpn8hpC=zwKE6>P$-Odo75!Dk zjAH)q%&>yFqBvH1ly03W>f~!tmE?7Y^I-;Q{V7NpxsqNPw=(S;052y<=E!rKYJEls zQLm-hdLgPbO}4XYtribTBk$i6jVC;%@m?oJ2!lU8StbTGh@Ik~vZjdl1L~}PyUUxJ zWdKB&a#vSr()ts7;6NCt#3+5xg2RfTBX2eaW4-H<$2VaRVPJB)!R~>`L_=0euNg&6 zLK=nuEoI-}Oc$0(cdx~go>SKBuIR>b{UF75oiE(vhXXk(3T4PfT5SuY#}P91X*7fo zK7W)gqRp;)E0$eD;n35Lp?k6SpmQG5VG-w58=)`cxTiJYJnV7W&upw9g&eJ4R>fPT zHQ}Ex18ENLhXvAzckp}XMlsc|_K(ugU7fma$oiw%V8v^E8^~cd)RQZ~!iETj7pD2& zT0-@uG7q-hF2=h6dHd7fiyUaSE4&~BH^LnefsE6%^2E~_P8k*KA&Vj)4|f630fAEw zJ!on$NYnlP#|l+W;$zdd%EVarw~9t^#lst&XTwp8Ie}J=AmLru9*zy9NmpF7A zk5OAWTm(C6j$zQ76vGu!Jr>OAl%j!DLLKCuH5iU_@YB%c3(gt7CiqeH7=PrkvWWF0 z>>!IV%#3#O$P4$I`u@a8;ngXM0Y>fCb=`M|f+vrj(aK?AEj~n1dXnm9y-V(0xV0ju zEQNPjpFb&&ExhggiOMbTwfu8zAiEOQdLiawSFPPswHjzv*XEfI4md8-u z;B0{C*AhBHiG-?u0^ZdZ(2%Ao*O$%FJ~jA|&OrDzw_J<>nIGXS;PKm!&n|CX9X_I# z#^e4Zk#Hgh|Jqy3%dk1L_OUhQRFl6e+*~miN6>6~^BH@|UFhsr&6%@?rOQjI!-M4_ z-f3cFrosBFTi}&E*IBIQ))nFOr8M#Em{SfFw(ivsXZ?g5pkj6K%ng0bs5&TX#bk^0|q%R(zRan(9^B_ z1a~TkJosDwez4|e^>M~j^!zQW>#MNNg{L)5QKzLkf6!kK!CA-Kp9(?(Qa!Td0l;H? z`^l*e<%dX)!465IET6`yfK->hYvxn$(dWANvn91?8Zv#IzsE3% zBXzXcVAGMaIPKR#!JQw)PjM&*ciSK8zO8%P*1!DJR@rWfU8qMF>!l8wPn;i)NA ziDif7c^@y&K?sGuyOE9eFo(<^CXAs!i>N;swDgvWxr0gu?MJHZKNN`wti9VZoWqC> zH0bZN-u<#D`RwaADYIZ+PGsJEVbjL7q9nfdTf%4tX3w^k z_x*F+E0${guUnljIEVw+liMnQRlDn$lI z^C%mRuT`d-B*X2?_I)g-^aKZHYrMiNIs+v66>{faId)Tlmig~s{IMR#rd9sb9cQlHI(x)^(tM9Xu$gp zcdH>P%;}#}|M8suSW5Ew{j!>Ja6xTYWF9-`phZo03C2q5y8VMX(%ZLunfU#Sev4P~ z!_~^We|6pwn7#vIZ2@mxE8icWaQyL{6@xw#AGU5%Iak{Z>@1oRW+FXhef41z5mgGY z(yc^@Uh=oT2mMDowUY*9yBr#f=AlS5?&ivCB&GdRdooMER||KcG+p`Toi08rF*q3R zC;lKL{?O@@N$J(ehnpMaa6(kXPJ^ICgRXUYn+e1HZ8a7|oXo~9=F>&C_v}_+4^0dS zlffIxdx7badAro}A`_8gAGSGqHf+pJPmIq$StoDYx>FuMIQfD3JsY0>7Rkkg3dOc7 z89^ybS?sQ`Pj#-6crE)K?lEA;VEUW~YNF%98DgWHp#Lyownrsrs2_g2ibTUH%tC($je^H&M?7YR!Ny{ytL!w9AZ-h z1Lw+XyvQIuX{L0Lmd}}BqVd?|Xl1R zhag%~Yd;!>7VL6+OYN39|4OHcjGXyYlQmO0|AWnSKsMLH9FLvHbN%^v=^#!)Tbotf zr|Cr$so=o3!o)|Id@D$~F4LV{Nnc@yYsqF`D8c0qoKZ8N=)0l@o5hhkQRkK0#)l}n zzwIXQtSX3vm{~{7yJod!<;%wR(C(x3vv?>t3rt0_%+H<(nQjPO$sBa^moELMx!rwX zDM1$y=|2^(&(8v|kcq(i=h*v*85K8Lc(Sl#G$`SMvK_w_pW9%`mLoKYJsnPeJC z&w^%=xxVdL|MrzwnF7SWn~2g%^smO5Q{ZvEh0zIJ%`MBNUX9yBfd`fBi@1F9g7b z+Y&q8D~^Rk$e0dSQh71K!ERy0(q?lIX_aHa!J0#gT9FDi^~K7C`UBKgk^j$)hQ~6+ ze;qO;hmyuD>rP>m6nSO^^hMqby=wxsg`44eyC>#7HTQ`Mu132@3hN;47ZVcEv~+;= z@1A;lb^@{0%3`I}qr!<}uFGP;wjO7as`C{7qUaH`dQLY?<4c}dkqo53fgZj;^3ekS z>s*SoimOCfO&0)Nri@=>o;pij3~wZgXn$j}|FDpmYu6%|b+= zLzk+0(}uN<=F5n$j*^u#1$N_l{heB4g!n{K)SosdPb>L9y=Icpg8nR89#LonnvWq0 z)OV;?K2Lrr0|*=l2+S7v5oP{l1}jfClUNR@`+A6;{-I|H@ZI!&yEiQKafXs^L65+1 zq$=g^l4F(FL4L?0xnxJy`gPHQx!)BbM4>T@Gw)m_$kE~}F2he)Z|z=U_&!gueWQ*W z!-BVn$v8l;;`TXONi)p2w4)hom-Qy0R)i;7^rqJO>*oung(1r8@4LKZ4eOlf?j?|g zLwCx9j)KV6^ce>@6TgUOB+@SS@nEL^f;M87p1s`!n+f=>pZTmO%X;j!l)$bAPP2fmU`gF7N-EE2=}sK250e z+QzcI#LJx6CKGM7sHsq#z!rdRX^KhjTKsjPeGeEaBeMb;zw@p8*}8NfXkBrc|Gt39 z6axZnQa8&UsATRIQ9VL{xM8OHL|saMy%3v3!`~zXG6#A6TqliLylev_(rmX)MQuWS zOB)3^C(=4*C%#S>_|*>_7;8<0YU?aCtC|_*WqnZcVf*yeb|Al*al6*TSn%Jy3K_`* zc*LKi2-q>ix}H2*4yRoSdH)E|;LU7(T^71&{6|29;-_f3Ks;n7bdfVlYQ3ulqtks> z_fwqD)zIr*fYvI+mNK#0t2CYRoBh@M#^?Vo$ZwgWUg6u5Xe#4j#C9&$z#R`;Ju?OO zCl!FX1_}Fs3@e|V@y~b29jOGg0a=kFmd#ktv4*?cqaQ-v0zT0soQOxOJ}W{cVExz4 zAS|!%@plvljWr{BQH+2}QG5->Pmu=W-}5%a8kw~X_S06xsl)?JuWFBiC5jw`1YSth+!tZb-19816uGv4RRGdO8pUAX0^?s^s-7s4ESTmL*im8vXEZ7!%RP`YZ`x&OA^oXDj+jR&$pFz<+Ya+exe-uh6?cZJrHOOglIQ_De z`~k^Bfe@~5lu0Cm6dVIN$gg_GWGe$|fN?B~v3AZ79cFdq+5$!x- zrJg!ad}0#MACH=UI|Q1Im^H5kPMN6WzWz5e`1Gws%>v|!3eTFVOXbLIZW+r&`Il>m zM#+C$Vz2;~tZx?h3co|nMpG$-GAgO83kl6miji8b|9Ov%Wk}9~y!v&?b+~S^ zkt%hvEJ)6_=J?EFi@ogNb&TUofp<$ZUh&|$sq3jtR?Re>cFsi4W-8tuQ&PjO55yBk zpWnY1A`0$mleCJs#{V}jlj{tQ=usq6b+}R?uJnLZZ6V0(7)xOjPa_FHl5%^QR~vzI z-#fp{_=;pp+=WqxArzzbB0etN%RYOzj=G&0s*bfj!3XSrK>wL0Cm$Xpy>hEjQHDTb$qPYqeqUhMC z6}apMd2U^_M^y#R4TvR_`5bxfE3S>9eitx6{jpzJTgwU3)Jj8EvMk-of=*ExsOG`* z@p8k!8`Ng9Bq6XExoIhsdH>T@lDzUfLGUoOh>Nt@5UzRI-_?_yyxoP`*Lo~oLvRPv zdgO!!#5%JRI(Z?`8RZZtx*-5jT-%vp1C)|iYb)GwPynH=*?(M@!z*6Mm{UUW!vJkb z|DUtcpD+DX+O|oIJ-=M!?6NjBY`aJgpD)QyLY0ld{5;a4w)yMuJFAu;2B2b)>S56 zFLykgwV(2TyUdV8w&*>pOMWQGpLmA^7wtYaFCuM7NtjzgW7oIZMm9R> z4t-PFKGV`X89G&GCO-t%yIa);f_}y>#5A z)}?jNlj)H8uZznTgv0JxA3bsT`;ID%KxHGnO+>)o@#3i5KD!2`DUBgfgv8TJAV5ip zfko+=wv1-~EM%yjy|~q~w3QX5Uh}G>Q^A7m@$EdZzU;*HTJO`-P|{YsNWNwZ3-*@q z34?BtVie=q@NH9xn$1;<>r&tZ?hBS4x!A+34N-o`umY_1=;l><3`oMZj?olBE&{zz^tu1a1kyll~KCPsPOAW-*aX~ZTF1JBemNf z`%YJ(R2$x>ikIgG=X+|u48j3fHUtl+5Lt}_D2PfAh7_t;yd*3eWw-#?-?#h%jUz%g zJ3Y`Tx_}?}qwR9+S*nUC!=+V4F)Vl^`wjxOu6Ig&f) z=gs15CfslMYEgW!r zkfyjD+M#`*&ALbQ{wvhS@e8X+kFMJmc*hQ2x=b|Sgk&rI>?6zX)u(Ys0m;SZar$y1 z%~|Il!6c4oJNiSRz(Y12@yN`6mdZ3`{znIFw-qD#hM-xRgon*MU|zumlt#$4B%2_H z-lcgaXW>VE4_8(_WyTG_dmt3P=(~2u4HrgSl6_J;tx;oMOO{HG%3`IxpRw34Mn26v zW20h%MK3@nBNX%?yhwWSAj~7S78N?k{Dv2t6rq(Y!I5Y!jazto%W>EY!sgGgcI$Z~ zpd%DDfxFP-{mcw;ihKB3+4VLobuNDaO?0K3ANC(?)ywj5)hILE@Z@*RAvs<6<$%CN zM35%n(l%EMOE)wd%k}V8Uihl1>q~P7R~$Da{bV8I?p( z&gzGtUPI8=Moq>L`+g0U#`*FG8b6VOg&JQ%b@1Sw>Zu5#Q0u81XUW=x zZf=Hn=|z?$E{YmCesN^TaksmwdTWs-sMK9oMj^L+abo60S!GeZ6F+x#Ekn zfk`{ci`Gb8c30ANqy>w9p{w10omAx8p$L0{_G)6hbBX0Cs(^7XEDmH+;Gx#oDmN9xi7|1HrRxv(AZ(Y5!DQ)_7qklaune+>|i*gGXDEo7Yp z79Nb{5gJ#N^>2gE_MtcjHL5{dZYPn3|9TfMOLuOX=J%GMR`CvKJ{e`vegg%S(k*Ui@d zgroz4)SPHI6e{=V$54D}BAJfa0$g+TNw|ze0iYE7a%9MVS8qR9+zJ*jaMT! zoR-H8i&Kk+OJWU`)&c{X;cy11-cPoPPeY zJeb_$2$l<$Pj|*Oc-L50JDF5UI4)Ni?~dFVdb8rHn94Ge1GUr90brZ z>N#=?tAUt4WA6rYBz?LrE@EW~KOn_RyK%h|X9grm1!*fY0)5|B{M1lY|InTTp*F(yH~ z?hwA;>i(?b4y9}3mF`FFwF!9=0B}-mIWAGY0?$G~ReVWPGBPl{q%zT3Frgu40{5jL zbg3dC@!lj2h59*!(Y?&&mx}Mf^FVTosFZ!y7?5$W02a#E?6L!Rx)pcg8-5x5%hy_d zB0gg>hpzT44>wMe*8|MDO;>zo29D?ej_in}b&kj+djY8+nqrXW8YWN&0~%x@Z`lJo z%ikE0=-J|FT0eT^i9dZ2y*Jn?RsS1bkm({IwEm#WwINu)^%85m<;oklqlBp7pn7bX z89|9QlH_EkdQW*_q6_T=zH4+Kv0ML@8!&p7zZFC49lhTw0a%P4RDEQ=c)0apx7`p= zyB<}u?vOiD8(FUp=P2=Gb}(GHPfe~Us-(AJ+V?Y5SGeK@1uI!Bs19~@iCeWU%7(cF|bMyOE1;|SK$Xbg^sL5*x>?oxk)_rI0f!V~=L-xJwP3H@vg#0#M>gUX(j&-f{|2MB zl0}0sM--=Y$$njO%*%<-g)jc4v$$HxguWi(x<;bJ2glKfcp%aVz+%Jo9##w?H?dL5 z%J$WNGywvS^-I(3lA0ngwVw`WwClD;rD&88Q2iTNTYw}&j<&p2h^_BZ*t|)V} z)zdCS0QluI*JD6d>Y}GN2*1Y^*EBby!-@#gk;rQh7cG3(M z7dUgLb@NHEbqR02Ia6(p4hFf?Y`)N05m!48>8f9QYU5}}w#oW+ONWa`g5h?|ijsRQ zNn$P>Vt!zSLv7XDL4x9k^hFgc&(n1(QXOCm;1`vX|llgR}JE~t)%=>q)%$^uMKCf(iZ&N%AT`rjfPW3Hy#29a8T<&ET z>z4NPW>?5dFXPRtKqeql7tMo37Nf3x?brZ<*wmFw4`o@Emf??^*ewyeHd24U4GzA2 z^?i4$9K0^DQdH@JMZnI=Z@U}eTLj7%ip<7%TWP#k;zhS~v#U5Cy(|7y+oCgKz~GZA z)g}w+u+0a1)11mjcP6(xDTjYm_BOH;FINK@O*Y@P*e>7Y z=!-j^3f;J@d!Eome%A+>*w^cG*8q$I|6GK&MZLc9 z4CT1$U-S$&Ry>fVRzuFhX{c1Rgu7Z$_b=FB+x?5{D2MUxI2YJBX4+KZ!sr)b`ao94JEC}Kyll42T27>R7iTE%mEnDPyy33oh()jJh* z+fkp9&$s?^0{--~&G;_H?6iBho`2C6lxLerS6@xmOH)6)y(qbs`clj;K_ftr^`?aU z-)@LHPl}T~qyCG)+_xXH06YH2t)%>4#U;z6Mnc~M&xjp>g zTw;M9nNay5mnDjhrD#mqJr!L|>O(nJ$)Q-;@Q)=W&FPX*qh}M}WD4u6ZR=j1l!}Gn zA^R=5+Kl|(Rk8?;{hVB5`|bn!#^uAfw8rzLK=v#_sR5ak$Pb7KV?oQ$R1`AX0@t!A ze<2=GG&qY1iA(A9mJs<$Xwnvgp{DDT#DkkW8>oBrob{g*0Q)BIt_7q$@Ta`Sg(M@R!1|zdoA-I3r@l({v z1Up=w3ys8yw)*Fg1=*o?X=gnZ!qY7L3yu46y9T{ba3*{Oc*>J^AEAGncX4qP>=rvJ z!)I;G8M26XNvB=ICTJDpp_MBB7w$`P#QIRe;m0|!BdHzW#KVK?@t{(tN^LQs=!E=X zs_oy~qST{eCVOy6_8OlBTPvQ2Yip9a*keGwOWzl*{l$+gw`a(Xb~tnbl09Y#q#&Vr z-NLJGzfJTL2f|ujj*;GCwp`o48vTj)^e@IZHPBEdY@HSAY|PlEVOf)w^-gYoOs_vN zo-Mf~gO*C&&dSd|<=_9Icf|w!V5z4I{f<^A_PUDvMkBqb8?Z+kq!v~F7q>;}4%Fmc zJ`pV<{^*j0*2{D8`k-4s3fB^S6*rDg)DxbpEY?3L+kSW=%w{^sfD}wD|heLCZse5eL|L;HbEADrB z1=gVU`ic9p`|Jg(ce?<1p87B$wTK#(psWQePMSI^aO&@%BUcZrtk101k#dXc_&aJM z7Ic?B+aI6)^==|38uq`w#pIIjr`a3}V(KGP)6@p$40hiQ)cs_j{rhIv=_i#QzEsqa zK_;3}2o-8A5dmH%W~Gc^U-h;QnJw%y?#@`>LODn7cf3~2Vk*)ow6uGlrIVVH9qHIs zY${FizXC(?|Gq-Yd=#5{YD64QSkg=#OJv2A6`m|i`M0!@DlyMS#-_o!D*ugiz5w0_ z+!}>gjzXYwxyMxqV>*(ilkH+FVE+md^SaOALFlh;RwiEdO#DGKypL|`Rm(RJcl>i; z-goS?R#%K$AgaoIS#Q<#$qf@yQ~0Vog38@%)ttk+MQ^+ z!4TiLlkEmrAf9%4iFs?ZT4!YjtL!l<-nQNu? z>T-i#5&5z%;38?vA)E1|-N3Y_aSEQ;JrT|0X_eod<8zv2kQyfdi`I3bNgA3Pq6*J@@#Xr{%qY_I;XDxfm4nK90;uIg8hHlNOB$tGk zza~c3r-za;cEVa0Cde?yQuopog&Z=fcR97?Xw2jll^67e7Cp_L^&a(Ijy}u=cf0zf zh&vb82jB7RU~{Fsl`5YoM00TQZ2utxvaeGD^AZp>bjJ8h7qBOtR8asOi*)3Ys0??M z;hvx4;<}f23uz;rv>gaBRT}bwqJ!LVBQa;Y3B(n{np4XAoHSC zdB=prV>(5+oloBieWWtgyDNINoQ6!3x|l{I+4?`ZFS6mU^Z)PI7h2J@vFy-8o^;FM z=85{NhJ8pXY~GDEBbVf2BRg|#aEgG1q0~*61mHbs3v_X?VD5B(Y4wS?K~Gar7S2b9G@IWZFGd)UY|(&gfmP@u(+%C z!1iWqTY%XWRK8iVbw(?)nV%+e=GEr}>^88|zMedVdMwVKbbS^}FT=LHZ`X#*GY$11 zIaR-(mWN5S$ySV81e+_df|>I8qPT$*fey&Las7a%pIGo8TiS9E%SW0tgyl;EOWT5( zezQYThX(1zne-}%`ZGJtBlKl$xw1VWMPI=TsX%tpBCT6(0h?F<8)Z`JCP`qmFe`7l zfFazKC`W`mIID^QunNKO6Ur^F&og_F+ zIk5ze0oRbL^44Y8+TGT;J={X^cVRQQ4WzH%f$YuFx~E+o>%I9f;FCUh`i|~)9~Y zFlnAnvub_&UycUP zJu*iF)@kr~VFkyngN*x}>$VmeT|DgARb{=M;1!Wss@rq%IYD*v+~vAm{ta^7WmUIa zo_pq6;L*;)$Xf6qJc)y3zFBaeT(h@fg~or))nX&N4eHF~dhMDp`h5O_tWE>eCgpJ8 zTcwqQh0|eAQ&+9x5oBECH-;f{;Gw%?!z%l6@s$BvVd}SHwPjQbQb;$e<6OStl-tG8 z*5c29pAplLa&t)E`^NvAGB{@~mYLn7nDl% zzMIW+h7A9DId@dbTcVU4b!j_Q|A}hNkwKm?)7B-sv21|6nd0AePR%S!>_{&&u8lm~ z;+k=A$f;2^3%2vdBM5F(04mOYaeq*Lw3$3gU;piIJGp^=EOZu~>qcxViIj2jM&IQM z{`+-ld1rlGg?V0@hxh#!^mId6yqWPlZ2Qf>C~uUH1M@D;-t@_pV~BiYa1$rcK$H#V zygrj3;#@L_%h&4I+e58Qj|GP^%|4}^gQHzsMC1PnXZ_E2wgY&T3wk&&Q7_VW=9~H? zlhCvQ(#xbJ1pw;>u%LU$sM6BXG(7TmMYPgU#SJK565HE_N{fqClH-*BO80DwT6Z== zQ(G<$++&Z(jwhchS*t=2a6f)0kO)W3KG6cDzSR3GEKd=47mTxiK9)M{QVT z|GuFynsMvuJH;kG35Vo;&51ZN79}U1k);@!!fJpH?L+Nw@H_J)*<$>^Ll55m2|f5t z<&5$aAMGCb>YRb+Q4!FVJX3bidK^-6ww(lkoBwW3OXKN~vC3l@brYagfS^2jjsAbt zeRoilOSI<@WKhXolnerjfCR~z0VD~6BoQQC$w}gnGYTqEat@L~avt&(B*``E)i;$sSIrK8FhC~(oGTzgs<&#`KtbTqz$o|EJHl}gT_}8 z-f0@WUU5{o6GzdS0vo>TYq}UE)s6Fh-Tkm%)7=1c06IzBSxV&jeI0=l?Q-h@z%(F? zN{Pb(UF~1Bo!(r~PZr z_|KA+**B)#M>r*svv_9;vW2K9=H)=Xjw zblzTaSM-m>F;nT5P-)GPRo-C{ml+(|VmV@qBl&#ei?q**4?3g-NhXdFZ!yMC(bGrw zLh7DB4sliG`XHZ&r}Gs?jyan$IC_BcHlcWSBKnW5hhh@pT7%XslXoh~!pL zWGyc=(q;>!=%S-;8Qz(RCSB;9)CX)mSJPh$$nB?8S!UUIfVLVN9pit?dGx*F zs!NlGl-M4~dHw179p?=WmQSBox({c-Ns(t!$W;}!N^S9pWD=D2+s%1bGh68`z~Jz; z*Uf$-(Z-r;nT)K{$wpSJ<8fDT>bI@zI>qBI`Z^)L*`z+PD z6xAhgKKlnnc7a5cQ@X%#uPdbisP5mCH1I(0%zk!6@ zH8zn<)^Crl1=CB!QF!8By>DRWg7O<9tg1sjx7ifZ_sEJHuZuLBTm*heY*ELloI&tkqb*GPyf*X8%$d8~1zhH}*8mCRKN~f8c5bG)l z=c7Ru(s#hbCe)-}rjuVzmHC@{yj90X)yP$AFI|9Pt#2#p2g>plVpZXC zwgv?tp|5kb#R4vzW(+dvpT2=0d|h4_lX?)}M}^vcko0NO)jeKvKz8*~uX7<9WtDc> zvI88PELLEy8(e5!RA=6h_OryQ?U&_Osf1O!d=h7!$2ou-JE=QCTMLw+_85&#z+ahLgp@&dNX)gXT?9Ax#9lUk(-qp9Dt=w z6fw*b>R!>JJ(G`f`-n7HvxX#LR<$Mj1ZmP9G-L7(O?dq$GIZ%x`<)KuY`e z`mt^9SH7dXLrcba`&Js=<7H+lz2nE?m&yGxm&K>Zo~Y8?S<)bfrJtwt7uybtGr+cN zk9pCd_%YG!M-KbB5MENOkFN0zs7G;3xn}c8NJFzX_wAGzc04Q}Rt_&Sa;>lwRcd0o z3}PStG)Dn(`ATi4q<)IcudYeqw%UTRaq3g$dYjJ@2I0fyO{SXOtMka8??{~|^cAAh zygt)i%N;B)M09V>E>?Tso$fC9Jn!Ae6?JV=NexMb6_*Z8>I@F?qMD?yg_30(4CrNe z?@P)M|JswE9%oADT%jg^pe|)h8QXY5&~&13ByNCP!KueFQtNBTItG|G&KP!WZj3FD6;#kTR2|3mzSr41-s*x z&ZhG>Zl3DsK#19h(%m|+8@rYkRI{y7;Pah>&HOX&bVI4p_jN(<8@&a@50mgkIwNxC zcd4GkeOyycUpJ6y59=SyqBhth+q~b6sqL^rCq_e*Ho|`0;yZFR96Ihtj39P7 za_LwnJWFrgIRJvi5V4QZ$E55cMt3~1>1pkACK+bz)t`McHBI$!9Z!ok8>b@(P)T_{ zv0V$KHfuir2))h~TrJ7raVWPLWlU0Y{D7w~@mg>Cxfn^KhFv25J1Xu^A}g;o#toWZ zDRc-v=pCcepp4bl(r`Ja+pM@OE)^Po2jR|JnRQ>g9{LSP)!=}LvShtel(tH<%jU8i zlymsS`fqB0d9DbN0XCdgcHU6-_#L*vDvCcT*aa9p5UAq&!|ROTs4ssrh3P|e26XHB zz?)QsSn;#Li>6B&?TnwhEL8<2z$b4bhRa<}oihhg>AAzrLZ4=gcDjVzuK-0({V?ufv4#yp1fV@vfA!M72=Ibv!jm@2dJE?>Prd_ z_Xyz!ZFjY`ho{%fzlgKBH-A*HH@X=$gP6$2M|03-jUW-}1|u?;YIhk^U!6| z`4GOOFltAR0F{8hMbdC_82r~EHZj-FS+rz$8b>7l4NL!ABOtu`l&o1|&FL>Mxp@&S)!o%mQ7YzEGV&pe zA3>720z(1x%HKp01omfb*t!vufLKMvQX$vHKE&KM97rJm=z$Ugjd8xH4Q&d+GX@?J zGqIesj<05s-kzP4zDPq_ztrrY{}Ygpdcn%~bp*Od+Y~S;ypZ;R!(aSFuf^Do2p${SU* zw6xqL1Dz~h2BLsEB__*-YT{Wi9u;;nVGZ-by&3l60qUuKUYfjAZu4B*%{Y#D+px4{ zHl3fI3HL%Dl>n>>eueB7mzwoRhZmTL}8bbYQs;oX&8kJr)W9 z0)M}WaH@txCqy3pvrD6aJM5@4wZ* zN+lHrR1LJO?`645)@y}J?$<_`13Y!4KkR*d_wTFS+(M9W;qMvW#qu$7xwAJ&ew3pT zeYZe=Lu#{8Z13q|0o8)}l|2q+)7^qAZFuyS{X6q1JAO=B!EA4O9fU09BA8SQU0*TI8HVLcJ_I6XyANrqbU$hM!s?X!}-8q3f?HPJPaL zsmOKR?aYxG)r{$b*&l)(3>2tSqx&pq0JW{y_y1*#x&uX$T1Kr()Y>VwNBnFLQkT`29Q@8V&mG zl(&{`?^o(!1!agobFN@Wx@<}_*R?2|IBxZ}! ztzU2Nd4Dbyk#?9znAJ~RRTt_$+v7g4MAQO>{YO1UblJ10FEUzp$~*eL2`m%U^ezf! zefKm%)XO<-q`l;KXJL#MKNGHZrs9Vh&fCu_Eh-#Q z$lL`Q?7#1l@HJ4gKJ25j2D`X7{kiWO&rdn@&srv9FmRR`9)6p%^rZaBBP#x1yrt?H zVjE0vKLbVB&`lX^JQj?FnyyGv`S{&qOQ49}@i|W$zpu8rw*iVrX1&#~nPx$EPEv0; zQE9st^sD&$<~$Hsq-Hp>dRs?15p+fc1iQP3MJhnHfyd*KDxyq_ zrcfk|XaUD^o2}%*e8H{*s7v1LaVzJOBHQG~9Z5IY5bT7Dwmc#?cAMfa?{dkcND z4I(S7cjN7RQ1^~!T_~z8>-G3pEtBs|nrH5t@yT*>NqHI?E4?pM>o2$cfZ{8F_$_p# z`rPx|EpVPPSK64Tf%EK$$<;q>WszNBDHY0{V9n>_R$-_c%FN}d2x39SlJpXJ+ zxpTO$7f%=kFw+5j*vJtN5Gdq?ohWJe4N+LR=-p6-5(LvJZxxkW1L!}1qKq2ITQD%? zNoMDt$_oh3jo7XG?EMcA%W$8lw++;LOorJCN=2tj48jAq6bps}f|nKS&>hv0ayM&RgE@l!9+2($W6=T4Uvfb6ft#cU0$?~D1*z^A!v z^N=}!;Td2#Jmq)zqC0Wn=;(6}vb1`7`pD3F?ukG8vJ1jXnhh}miU6%tyjMum zJ6r18mn4m4sr)*|lTY~A+jo6F3>8{<++#?rpiM+p`fGsPnQyJr%&y7dBz>&PQh1yL zriXiF>Ztz>6S@>!%bdVb5gp)6a&~5W;pdKvY*&?gpr!azCW9ySNT#9d5q!%v9$sa9 zD+x5~zOz{E32&)2$H^&QRxC{Z6+zQ-P0C+#ZrO_9A;pZ(t)idCtM45(r7Jlj<xTGbtIje8oF~vvR^_<>aQ{Xk~?x z5cW&w9LcxB`FsRAqHOJ{V;}!wcG~GUcS2I_mMkw%2iH?FqM-x~Z6iR^y7{)IT27_T z&tZB5^7CIm2`Py3#n~D@{4+K1U4uSf&y+b@@1qj9%WPWdAd-K%QnWkiKt;RuaCe4u5A>q2*8^g}qMVv=tuzwP`J zDi$;29EW@GIMv@N*%X*KGzrcI%VqYu{YQ$_KzgY!8WrHZ;@^YqtN~tW+-xfvt?w`? zGasIYdF~mfNT#t}tSpEI8FIy!OJFb3;d}QytxZ&>@^KObxJ;QGh-S32G1sDRy2wqw z6;&Pf;YB%}q{Mqks{@fY}qnW=g!@qi62 zteAvPO4!IPiVFECSIn1r5`w&VCyzUUO;GRr{yJI@?;Fk`WaWi-y3Al2bq|A)f;UFA zO@gREQ?KjBLMvdJxegNq8CyY#u@Tq~+LikY6b?;ZG-(TLBWY0iu*5(v@HjRuCZa5D zhE%^tlKJ89S66sHa`kQEd~MF$s!t>yLeG51G{z6MTs$F!tr)*9}I! zwDJMp$f^4$#i94UZ0iAq$VNM@mwCv-lki$>1B1K{@dIfli^2u!A|xQmnCtS{faAWR zDcjWG>G!AqKq^PApiMlcObWy<LNP^R%(dVSD_KCRDyZ@niIGhD1p7-??Z;mt>D7z1W7>V@~y6p3_BH+gHfsK~IaJV$?aYe;Xc4{QzeHpKJWj*6fQ@|-xBvzT%}!-W67bbJ#*ti&0a^XqpCmYA*c zMCZ1gMF@_~uQ1vOk(11k9R3;IEPOIz^yYK}N-jXVkTf#=|4i3_Cxc{AXXi@p*qNN_chfGX{FxJYVjbK&3;tl~gjE0+WoVi)AdNs5j zwr#2)QdGr2!*4N)))>rhJTwIBonL#v1yrB#xALOdyaQ7lzdg=g`@l5aR-!VVF_I&I zCH?W{f(EU3drZYNgmr)1?~k%!UR zVkGarI< zk}=Lw>${+|Q-Lr3qaxSo6;Az+AfGTg5?8}jm-8P=i>>u3+} zu%}bM=T)GXZS(TzxU=DJtYZv*hk=|S7W@}_?m_o?H48&|!%caPKyTOPh*!v_IWhlu zt+B$U&p-T}Ts(ExZh6v^j1>pRMhbIl zNb+H;Oh>kJm>qdLj|QhCQptP1u9e~KE6l*#U)Zj*3Jm}Av?c>%$jgeD6^XGuG0y@o z$p&xCwDWV|+hEkY-$#?e(1+MNLKCg=06vLkG@vyNv*@p6u<+!jQ`5fpPzb%?e4A4= z^+9csNB6e1rXL5oYXt^#l^_wY3;B+Tmcv&+xm%MD&}-z!9RJuH#vkcRj1e->T^-@9 z@0ACBdQ|!cr@rnIPqd)mX@Nh}!~>j1o+heIcT&ixfZk548f4s#DTBCh~qf z-O1%R?qcrE`Ge?m` z^H);;u4b`)!9FRhc2JMm$>Gf~w0Z1bwi$hF@ zZxo0t!e%lowV3AJ-IDdNG4EG+XZ9uBkEbZ(&v2gU)5;IN-ukE!R@%`BGH(d<1@h%?tg-HOW5Hm=z z$Hso0ERnOG=ntkZYQ+6?fN5rh%d@6#=F8T)Qc?u@7Kh2>?R-4(B4*60-ycjjZ!8JT-^>%`mNWvmTf5REYMNN}ITM?!8Y=n+Mw4nLYFfE5EpF^c2v4rYOgpmaDkZJ4mo?Xg#ptts#Em5Q2HQqKV! zFmi^ZnU@PRK7j($l2mi8`1D!p{YK1e;rkcK9c4SIHqpau9_hT1l6MlMs&HEA&NQor z?v}s*si#1T`Ivt)JvP0CVS8s3vBjEUcq*fc^iaWcrnTd+T_i0?72SyJNrO-Ri6O4_ z6KDdGfO4VJEUGA1T#vO=HvIQ|1|Q|ZJ^uH)oN%m@KVBd>hwb1DFN~Do%TU2H zP{H8VJFh2NQDb|_4Fy;G?D=YdAh-Q#;m@m(sH~GUM{+$tqh$>u1EaMn1YeI|Yg122 zj*I{H_~&1%WDJ-i2k1FqB@YpVxF<$;G2@WV#2ZYyr~lb#E>L;+_sUn_FW1jb$jQ)Y zsvrpdY@qp3Xf+)TPG6$wa3HY@#%40y@$ln_FXP)BEUX57#`t3l&p9Pyospoo@ZW<)S^Tp=TDGyCkm6Mei`99-otynk_Gb%y(nSIZ zWH7)W1Gq&phG9%U&$}Gvp42;kL($owQ?EggPf5;P-YzA2LLLPd=S|7&WPqg5{dsA( zc=>oM`wH19$_P_o5+uDGYo4BJO;lDa8g}7XMvhSize%vfoz~_NzmYVc^FJCKZ!L4s zWXH1;q%!y{e+e$xy6A8BdL;UQERq`V@WN=5*e;rcj6#DD&?FpI(x=4?&`5*@}g zVang75aN?}G1`^een1?ID$xMvmoLX#ark-vSv+}L{&B9B*v)t^89fNlocN}>9{^Wg zR{#=``|jrT^gm+0rE^~c_YCBMhEgy{r3h2T43BB0xoSE3Ma&t2KGC7y0rL9`W6*#~ z8kpWe3J)ho(k-Ug9im>X^{ zTBT=**-aTI-eNN^?|&k*LIWy8%bOpCFyQT1dG12$kz!iP=M{|-Yj(lF%l^z4S;pne zIjgn&Ez-vow?HA3Kv20O{XPg(R*c5lkoen2S!r{B7>M1`jMwc+(&qFDBP>i#<>KtP zW^wQDzL&!BT+nsLti&(B>eyRmvwX=lobLY<876CAkK(#wa!eJ;0H)|U+N+0rbKYfn zaKo?qul#^Otp5iA0D-cB3J^E@@xMhAW`*fi_Ks^bgkC9L5B%>A{I85Yk|F46wBlG5 zO6ErRvHvexiEL*K3yKF~@IdcCvi6%)8fUFIKri@_qh5ubI#>?9KVh~ z+hh0~8+eKlK;v0s49~xMk*uKRMJg7k3|(Hy57&PEuhbvu`_~6z|8~#p*A{5w9>W3p zx39>`gNz#u0hmu<@opOtG^%sz=W&N{fZm|(C4@1PNCNccPheH(22x-00=arGh|jdV!QUuB!?_ zZ`)$XDU>+t0AU)j8rXJh8fLgl|tr==He?Sr<9_i&1nFyF4>qB?jyxomypBW|?o+HR6USi%NM62Am3wKfI%-Zl|AK!-v;e_@ z>gikom8>O*E=L@N8!G2i9oO?29WX7@(Y*FtT3e#`@o65UYnBx=sCJw69IrMr%D^H0 zMC2PGA_N!WrniUNw9IF58Ne^6--y}@s^AVOGjSfzSoVkC((&;nG3tFovl&J z4rD2P*jN9D^JzG0&61_1tn;!>@9Q)gf7ZZBDti{dX%2!3Rlw&lQ0{>j?Hc~}KlU}` zK<%?tM^GO;b1SH&zPiG(6)Z+O^0rjh_@2i}?mZlh(#K_5b~DQ6F5WK)V>=5j{eJV1 zEYqKHT{<>hV6Ap`ZR$Y6%vIE6#uW?a&NAH^^?GQZMTvyhDN9Uj*!spdIYZ@pmu;QS z2%}K!dV9G9Vkg0=o;bn@OOGUpB-7ky+71L@aN=)2=2Pu5Iz06y!d|F zJd^L*4|*L|Rj)MozJP|SNje-geLC{4e47g>IDIvjI7cK_OC2{}Bq_YLm4B>|*!bNc zaQ*wa0UxtDlLh6d`4@lS_b?%7-mqV}t;=<^tW zIdNY$+WPKbAioVAR?_ObYZ zh)T!84EJS|8FYu0%bKRn36wrwT&uej26y5XLUt;da(7E*a}kj_an;S*$$+Hq^;|7A zMYyV2H=WMB|7Yr2+#RtLYgIf&@f+a@zc-jcy+?;ud{QyR7azAfmJHz2Oy}dec5{{#K{P_$;!YymW8(f^B27#8>N!d1G74~D z-dqD3O&ug$BI~P&%~q>{Z<>!gP%V!GqFru|E zC!F64NgW5({zr|d{XHtD@70&{@%0gFp4&?t>{jl1mme^m2`DXa8~OYE3o*PG6wYqD z-WEmU=5Y4hBY2>~HQdwas8zf<&91X8NoBYIsLJY24`6SlYA(dYBJX4AzuQCcUVM!o zgXr?g=4Bq>YIz}9p!$alZ!3eVU--bi5?ee|rGE&IiIqjQ7^++vbt)M|D*=x;&--?g z8h%w$*;?GH|8i%E2~wOBAZ3D$SYl}`x%+tX%Fd^=KhOqeXX&a&JXho5A50VyM6?Yg z9QFP{rMz$Rch8`i_3ou7ziu$G0)x%YI+JmDIUVvfoZU$1Q50uC$i*p81gLam83Ctr z27Y-bVeJ=U!7ipJ7vcwyPKZ2Etwy}g?DI*3Ole}4OqKx=zxL+8* zf$K%;ct!kGuhJapOqbwnTVvvN`Xjr}8G5_BY2&V~RDgzS2~IU1#NN4X#@<;Hv%l^V zA)R&IcuXI7ZSZ`w?8kF$;M(7MKWV+N*sAxQK2|mxVC!$p>3`0@Gv&bowNAWxd=CIL z0pYNl4*uVs+!z$=^hzRCKtnZXhp0?=zV#Px0!qxXIUXy+7OlmNjIXd!5SF~r4GDz1 zC&=RMjlq652n=opC|8fR*9Erw1Y<`P?-%$r1x*O}kqx0qBIJ?m9MLrVR*DDsFM%CW81t8Mbpf^tL$WBy~{5cXB=i&o>JlOL)UZ>>}wejT`b|(_S{Tv*`^;P7%*jK1Y}Bmm4fD>H`Ck zuO`x5S+m};P<~Sz8fylRqbL>mf4t9z1u#0ALbJc8`eujwCaP}a9rt$1MiLLXWJ9+T zM72|aStv_QNuen$C{T<4KHTgrPx>jZNa^Eg2WW281R2`kdBML7bed9Dy)VAqfJ!dH1|spD25e6M$MXjwMLA4LQ4nLxV-{772Gk`zux1>XpoLMoNIlje#jl_31R z(;;jyYIn{P_Y_osX2OHebT3>%GBl}G`kyV?4K%o#LNh{*uj2wunA%YMC(S9YT=bKy z6O3hG1t|K+k@C{vwr3z1HJ2jnzU*kCKAmV>@s}C%EQ)_584T{4^8_iF-ZaeU7j-=_ ztSWBgF;ekr*nKd1>s0>Wk=^}$E}t&Q2Z1C?ys<`#S`?+3x5-3lb5= z!6AX3KHD&u(_#zn*wC7KAvK@wM5XFl6)n-k+u@;e#=_=R--7Zjl5a_Dl~>+!arnEk zOmcXqi~Zfsv>*jpxpWC{H7+3E%!ZwdD}s%U4S1#V`p{<{p@lGM85!DC;n4~S@2ZIY zdj|Y`VPN{DZj@v2PbopU$xJ@)tENJi!KMA|iB;nlQ_)wUy@>COcc^rF}6 zg=Dp%0L>dGHlW-kTGInM=Nq`Cpj$C9QJ54}Uwuz@FGvK1%O%eu@zqI6O53$@F3faUnkjZNi2^rQdK;xk^SFlm=yel>^A{v=R#yku?4 zR-eaD(zCb`9;2{z)Spuun`Cw6D8X}bY;0zA%>y0?Ju6p4>y{Aywrv`X_HE7OPNYoy| rYG5iT!xoeI_HS71KWQ}s*ROHL8Dy3O-CmO1SWHD(mFFeWMgji=`lIAj literal 0 HcmV?d00001 diff --git a/temp_dir/client-library/introduction.md b/temp_dir/client-library/introduction.md new file mode 100644 index 00000000..0790c220 --- /dev/null +++ b/temp_dir/client-library/introduction.md @@ -0,0 +1,75 @@ +# Introduction + +Quix Streams helps simplify the process of developing streaming applications. It’s designed to be used for high-performance telemetry services where you need to process high volumes of data with quick response times in a scalable way. + +Quix Streams is available for Python and C\#. + +Using Quix Streams, you can: + +* [Publish time-series data](publish.md) to a Kafka topic. + +* [Subscribe to time-series data](subscribe.md) from a Kafka topic. + +* [Process data](process.md) by [subscribing](subscribe.md) to it from one topic and [publishing](publish.md) the results to another topic. + +To support these operations, Quix Streams provides several useful features, and solves common problems you may face when developing streaming applications: + +## Streaming context + +Quix Streams handles [stream contexts](features/streaming-context.md) for you, so all the data from one data source is bundled in the same scope. This enables you to attach metadata to streams. + +Stream context simplifies processing streams by providing callbacks on the subscribing side. You can keep working with each context (stream) separately or together, depending on your needs. + +Refer to the [Streaming context](features/streaming-context.md) section of this documentation for more information. + +## Built-in buffers + +If you’re sending data at high frequency, processing each message can be costly. Quix Streams provides built-in buffers for reading and writing, to give you freedom in how you balance latency and cost. + +Refer to the [Built-in buffers](features/builtin-buffers.md) section of this documentation for more information. + +## Support for data frames + +In many use cases, multiple parameters are emitted at the same time, so they share one timestamp. Publishing these parameters independently is wasteful. Quix Streams uses a rows system and can work directly with [pandas DataFrame](https://pandas.pydata.org/docs/user_guide/dsintro.html#dataframe). Each row has a timestamp and user-defined tags as indexes. + +Refer to the [Support for Data Frames](features/data-frames.md) section of this documentation for more information. + +## Message splitting + +Quix Streams automatically handles large messages on the producer side, splitting them up when required. On the consumer side, those messages are automatically merged back and processed as one. + +Refer to the [Message splitting](features/message-splitting.md) section of this documentation for more information. + +## Data serialization and deserialization + +Quix Streams automatically serializes data from types provided in your programming language. You can work with familiar data types, such as [pandas DataFrame](https://pandas.pydata.org/docs/user_guide/dsintro.html#dataframe). + +Serialization can be difficult, especially if it is done with performance in mind, but Quix Streams serializes your language types, for you, using built in codecs. + +Refer to the [Data serialization](features/data-serialization.md) section of this documentation for more information. + +## Multiple data types + +Quix Streams enables you to attach different types of data to your timestamps, such as numbers, string and binary data. This gives Quix Streams the ability to adapt to any streaming application use case. + +Refer to the [Multiple data types](features/multiple-data-types.md) section of this documentation for more information. + +## Checkpointing + +Quix Streams enables you to do manual checkpointing when you subscribe to data from a topic. This provides the ability to inform the message broker that you have already processed messages up to one point, called a **checkpoint**. + +This is a very important concept when you are developing high-performance streaming applications. + +Refer to the [Checkpointing](features/checkpointing.md) section of this documentation for more information. + +## Horizontal scaling + +Quix Streams provides horizontal scaling using the [streaming context](features/streaming-context.md) feature. Data scientists or engineers do not have to implement horizontal scaling for stream processing themselves. You can scale the processing models, from one replica to many, to ensure that your data is distributed between your model replicas. + +Refer to the [Horizontal scaling](features/horizontal-scaling.md) section of this documentation for more information. + +## Raw messages + +Quix Streams uses an internal protocol which is both data and speed optimized for maximum performance. However, you do need to use Quix Streams on both producer and consumer side to take advantage of this. + +Custom formats can be handled by writing dedicated code. For this, the library provides a way to [publish](publish.md#write-raw-kafka-messages) and [subscribe](subscribe.md#read-raw-kafka-messages) to the raw, unformatted messages, and work with them as bytes. This gives you the ability to implement the protocol as needed and convert between formats. diff --git a/temp_dir/client-library/kafka.md b/temp_dir/client-library/kafka.md new file mode 100644 index 00000000..6cffbfaf --- /dev/null +++ b/temp_dir/client-library/kafka.md @@ -0,0 +1,93 @@ +# Kafka and Quix Streams + +Quix Streams helps you to leverage Kafka’s powerful features with ease. + +## Why this is important + +Kafka is a powerful but complex technology. Using Quix Streams, you can leverage the power of Kafka without needing to know its internal details. Quix Streams provides abstractions to make working with Kafka much simpler. + +## Concepts + +### Topic replica + +Each topic can be set to replicate over the Kafka cluster for increased resilience, so a failure of a node will not cause downtime of your processing pipeline. For example, if you set the number of replicas to two, every message you send to the topic will be replicated twice in the cluster. + +### Topic retention + +Each topic has temporary storage. Every message sent to the topic will remain in Kafka for a configured amount of time or size. That means that a consumer can join the topic later and still consume messages. If your processing pipeline has downtime, no data is lost. + +### Topic partitions + +Each Kafka topic is created with a number of partitions. You can add more partitions later, but you can’t remove them. Each partition is an independent queue that preserves the order of messages. + +!!! note + + Quix Streams restricts all messages inside one stream to the same single partition. This means that inside one stream, a consumer can rely on the order of messages. + +Partitions are spread across your Kafka cluster, over different Kafka nodes, for improved performance. + +#### Redistribution of load + +Streams are redistributed over available partitions. With an increasing number of streams, each partition will end up with approximately the same number of streams. + +!!! warning + + The number of partitions sets the limit for how many replicas of one model can process the topic. For example, a topic with three partitions can be processed with up to three instances of a model. The fourth instance remains idle. + +### Consumer group + +The **Consumer group** is provided to enable you to horizontally scale your topic processing. Each consumer group has an ID, which you set when opening a connection to the topic: + +``` python +topic_consumer = client.get_topic_consumer("{topic}","{your-consumer-group-id}") +``` + +If you deploy this model with three instances, the partitions are shared across the three instances, to distribute the load. + +* If you increase the instance count, some partitions will get reassigned to new instances of the model. + +* If you decrease the instance count, partitions left by leaving instances get reassigned to remaining instances in the consumer group. + +### Checkpointing + +You can think of Kafka temporary storage as a processing queue for each partition. Consumer groups read from this queue and regularly commit offsets to track which messages were already processed. By default, this is done by Quix Streams automatically, but you can override that by manually committing an offset when you are done processing a set of rows: + +``` python +from quixstreams import CommitMode + +topic_consumer = client.get_topic_consumer("{topic}","{your-consumer-group-id}", commit_settings=CommitMode.Manual) +topic_consumer.commit() +``` + +The consumer group plays an important role here, as offset commits are associated with the consumer group ID. That means that if you connect to the same topic with a different consumer group ID, the model will start reading from the offset specified, which is latest by default. + +!!! note + + When you open a topic you can also choose where to start reading data from. Either read all the data from the start or only read the new data as it arrives. Read more [here](subscribe.md#_open_a_topic_for_reading). + +!!! note + + You can use Kafka without specifying a consumer group. If not using a consumer group, you must specify an offset such as `Latest` (default), or `Earliest`, in order to read from Kafka, as Kafka won't have any previously stored value available. Commit and checkpointing features are only available with consumer groups. + +!!! tip + + If you want to consume data from the topic locally for debugging purposes, and the model is running elsewhere at the same time, make sure that you change the consumer group ID to prevent clashing with the other deployment. + +### Data grouping + +Topics group data streams from a single type of source. The rule for maximum performance is to always maintain one schema per topic. + +For example: + +- For connected car data you could create individual topics to group data from different systems like the engine, transmission, electronics, chassis, infotainment systems. +- For games you might create individual topics to separate player, game and machine data. +- For consumer apps you could create a topic each source i.e one for your IOS app, one for your Android app, and one for your web app. +- For live ML pipelines you’ll want to create a topic for each stage of the pipeline, such as: raw-data-topic → cleaning model → clean-data-topic → ML model → results topic. + +### Data governance + +Topics are key to good data governance. Use them to organize your data in the following ways: + +- Group data streams by type or source. +- Use separate topics for raw, clean, or processed data. +- Create prototyping topics to publish results of models in development. diff --git a/temp_dir/client-library/mkdocs.yml b/temp_dir/client-library/mkdocs.yml new file mode 100644 index 00000000..3b03b7af --- /dev/null +++ b/temp_dir/client-library/mkdocs.yml @@ -0,0 +1,43 @@ +site_name: 'Quix Docs' +site_description: 'Quix Streams Documentation' +repo_url: https://github.com/quixio/quix-streams/docs +edit_uri: tree/master/docs + +theme: + name: 'material' + +markdown_extensions: + - attr_list + - admonition + - pymdownx.snippets + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + +nav: + - 'Introduction': '../client-library-intro.html' + - 'Quickstart': 'quickstart.md' + - 'Using Quix Streams': 'using.md' + - 'Kafka and Quix Streams': 'kafka.md' + - 'Features overview': + - 'Streaming context': 'features/streaming-context.md' + - 'Built-in buffers': 'features/builtin-buffers.md' + - 'Support for Data Frames': 'features/data-frames.md' + - 'Message splitting': 'features/message-splitting.md' + - 'Data serialization': 'features/data-serialization.md' + - 'Multiple data types': 'features/multiple-data-types.md' + - 'Checkpointing': 'features/checkpointing.md' + - 'Horizontal scaling': 'features/horizontal-scaling.md' + - 'Connecting to a broker': 'connect.md' + - 'App management': 'app-management.md' + - 'Publishing data': 'publish.md' + - 'Subscribing to data': 'subscribe.md' + - 'Processing data': 'process.md' + - 'State management': 'state-management.md' + - 'Migration guide': 'versionmigration.md' + - 'API Reference': + - 'Python': 'api-reference/python/quixstreams.md' + - 'C#': 'api-reference/csharp/QuixStreams.Streaming.md' + # - 'Local environment': + # - 'Set up local environment': 'python-setup.md' + # - 'Set up docker environment': 'docker-setup.md' diff --git a/temp_dir/client-library/process.md b/temp_dir/client-library/process.md new file mode 100644 index 00000000..2bb5f885 --- /dev/null +++ b/temp_dir/client-library/process.md @@ -0,0 +1,129 @@ +# Processing data + +With Quix Streams, the main operations you need to learn are how to [subscribe](subscribe.md) to topics and how to [publish](publish.md) data. + +The typical pattern for creating a service is to [subscribe](subscribe.md) to data in a topic, process it, and then [publish](publish.md) it to a topic. A series of such services can be connected together into a stream processing pipeline. + +If using Quix Streams with Python, you also have the option of using Pandas data frames, which enables a familiar approach to processing time-series data. You can also process time-series data in other formats, and it is also possible to process event data. + +The following examples show how to process data in the Pandas data frame format, the format defined by the `TimeseriesData` class, and the event data format: + +=== "Python - Data Frame" + + ``` python + import quixstreams as qx + using pandas as pd + + client = qx.QuixStreamingClient() + + topic_consumer = client.get_topic_consumer("input-topic") + topic_producer = client.get_topic_producer("output-topic") + + # Callback triggered for each new data frame + def on_dataframe_received_handler(stream_consumer: qx.StreamConsumer, df: pd.DataFrame): + output_df = pd.DataFrame() + output_df["time"] = df["timestamp"] + output_df["TAG__LapNumber"] = df["TAG__LapNumber"] + + # If braking force applied is more than 50%, mark HardBraking with True + output_df["HardBraking"] = df.apply(lambda row: "True" if row.Brake > 0.5 else "False", axis=1) + + topic_producer.get_or_create_stream(stream_consumer.stream_id).timeseries.publish(output_df) # Send data to the output stream + + def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.timeseries.on_dataframe_received = on_dataframe_received_handler + + # subscribe to new streams being received + topic_consumer.on_stream_received = on_stream_received_handler + + print("Listening to streams. Press CTRL-C to exit.") + + # Handle termination signals and provide a graceful exit + qx.App.run() + ``` + +=== "Python - Plain" + + ``` python + import quixstreams as qx + + client = qx.QuixStreamingClient() + + topic_consumer = client.get_topic_consumer("input-topic") + topic_producer = client.get_topic_producer("output-topic") + + # Callback triggered for each new data + def on_data_received_handler(stream_consumer: qx.StreamConsumer, data: qx.TimeseriesData): + with data: + for row in data.timestamps: + # If braking force applied is more than 50%, mark HardBraking with True + hard_braking = row.parameters["Brake"].numeric_value > 0.5 + + topic_producer.get_or_create_stream(stream_consumer.stream_id).timeseries \ + .add_timestamp(row.timestamp) \ + .add_tag("LapNumber", row.tags["LapNumber"]) \ + .add_value("HardBraking", hard_braking) \ + .publish() + + def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.timeseries.on_data_received = on_data_received_handler + + # subscribe to new streams being received + topic_consumer.on_stream_received = on_stream_received_handler + + print("Listening to streams. Press CTRL-C to exit.") + + # Handle termination signals and provide a graceful exit + qx.App.run() + ``` + +=== "Python - Event data" + + ``` python + import quixstreams as qx + + client = qx.QuixStreamingClient() + + topic_consumer = client.get_topic_consumer("input-topic") + topic_producer = client.get_topic_producer("output-topic") + + # Callback triggered for each new event data + def on_event_data_received_handler(stream: qx.StreamConsumer, data: qx.EventData): + with data: + # process as required and then write out to the output topic + topic_producer.get_or_create_stream(stream_consumer.stream_id).events.publish(data) + + def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.event.on_data_received = on_event_data_received_handler + + # subscribe to new streams being received + topic_consumer.on_stream_received = on_stream_received_handler + + print("Listening to streams. Press CTRL-C to exit.") + + # Handle termination signals and provide a graceful exit + qx.App.run() + ``` + +=== "C\#" + + ``` cs + streamConsumer.timeseries.OnDataReceived += (stream, args) => + { + var outputData = new TimeseriesData(); + + // Calculate mean value for each second of data to effectively down-sample source topic to 1Hz. + outputData.AddTimestamp(args.Data.Timestamps.First().Timestamp) + .AddValue("ParameterA 10Hz", args.Data.Timestamps.Average(s => s.Parameters["ParameterA"].NumericValue.GetValueOrDefault())) + .AddValue("ParameterA source frequency", args.Data.Timestamps.Count); + + // Send data back to the stream + streamProducer.Timeseries.Publish(outputData); + }; + ``` + +Your code can use any convenient libraries. If working in the Quix Platform, your code can include these libraries by adding them to the `requirements.txt` file for Python, or `nuget.config` for C#. + +!!! tip + + The [Quix Portal](https://portal.platform.quix.ai/self-sign-up) provides easy-to-use [open source samples](https://github.com/quixio/quix-samples) for reading, writing, and processing data. These samples work directly with your workspace topics. You can configure and deploy these samples in the Quix serverless environment using the Quix Portal UI. While the samples provide ready-made connectors and transforms you can use in your pipeline, you can also explore their code to see how they work, and adapt them to make your own custom connectors and transforms. diff --git a/temp_dir/client-library/publish.md b/temp_dir/client-library/publish.md new file mode 100644 index 00000000..0bbbed7a --- /dev/null +++ b/temp_dir/client-library/publish.md @@ -0,0 +1,1004 @@ +# Publishing data + +Quix Streams enables you use stream context to publish data to your topic. You can create new streams, append data to existing streams, organize streams in folders, and add context to the streams. + +## Connect to Quix + +In order to start publishing data to Quix you first need an instance of `KafkaStreamingClient` (or `QuixStreamingClient` if using the Quix Platform). To create an instance, use the following code: + +=== "Python" + + ``` python + from quixstreams import KafkaStreamingClient + + client = KafkaStreamingClient('127.0.0.1:9092') + ``` + +=== "C\#" + + ``` cs + var client = new QuixStreams.Streaming.KafkaStreamingClient("127.0.0.1:9092"); + ``` + +You can read about other ways to connect to your message broker in the [Connecting to a broker](connect.md) section of this documentation. + +## Create a topic producer + +To publish data to a topic you need an instance of `TopicProducer`. This instance enables you to publish data and additional context for streams using the provided topic. You can create an instance using the client’s `get_topic_producer` method, passing the `TOPIC` as the parameter. + +=== "Python" + + ``` python + topic_producer = client.get_topic_producer(TOPIC) + ``` + +=== "C\#" + + ``` cs + var topicProducer = client.GetTopicProducer(TOPIC); + ``` + +## Create / reopen a stream + +[Streams](features/streaming-context.md) are the central context of data in Quix Streams. Streams make it easy to manage, discover, and work with your data. You can create as many streams as you want using the `create_stream` method of your `TopicProducer` instance: + +=== "Python" + + ``` python + stream = topic_producer.create_stream() + ``` + +=== "C\#" + + ``` cs + var stream = topicProducer.CreateStream(); + ``` + +A stream ID is auto-generated, but you can also pass a `StreamId` to the method to append data to an existing stream. This is also useful when you want to have a consistent `StreamId` so you can continue using the same stream in the future. + +=== "Python" + + ``` python + stream = topic_producer.create_stream("existing-stream-id") + ``` + +=== "C\#" + + ``` cs + var stream = topicProducer.CreateStream("existing-stream-id"); + ``` + +## Stream properties + +You can add optional context to your streams by adding a name, some metadata, or a default location. + +You can add these using the `Properties` options of the generated `stream` instance: + +=== "Python" + + ``` python + stream.properties.name = "Hello World Python stream" + stream.properties.location = "/test/location" + stream.properties.metadata["metakey"] = "value" + stream.properties.metadata["metakey2"] = "value2" + ``` + +=== "C\#" + + ``` cs + stream.Properties.Name = "Hello World C# stream"; + stream.Properties.Location = "/test/location"; + stream.Properties.Metadata["metakey"] = "value1"; + stream.Properties.Metadata["metakey2"] = "value2"; + ``` + +### Stream name + +When using Quix Platform, the stream name is the display name of your stream in the platform. If you specify one, Quix Platform uses it instead of the Stream ID to represent your stream inside the platform. For example, the following name: + +=== "Python" + + ``` python + stream.properties.name = "Hello World my first stream" + ``` + +=== "C\#" + + ``` cs + stream.Properties.Name = "Hello World my first stream"; + ``` + +Would result in this visualization in the list of streams of your workspace: + +![hierarchy](images/NameProperty.png) + +### Stream location + +The stream location property defines a default folder for the stream in the folder structure of your persisted streams. + +For example, the following location: + +=== "Python" + + ``` python + stream.properties.location = "/Game/Codemasters/F1-2019/{track}" + ``` + +=== "C\#" + + ``` cs + stream.Properties.Location = $"/Game/Codemasters/F1-2019/{track}" + ``` + +Would result in this hierarchy: + +![hierarchy](images/LocationProperties.png) + +Any streams sent without a location property will be located under the "Root" level by default. + +## Stream exception handler + +An exception can occur on writing to a stream. This is handled for you by the default exception handler. + +You can create a custom exception handler should you require functionality different to that provided by the default exception handler. The following code demonstrates how to create and register a custom exception handler: + +``` python +topic_producer = client.get_topic_producer(topic_id_or_name = os.environ["output"]) +stream = topic_producer.create_stream() + +# custom exception handler +def my_on_write_exception_handler(stream: qx.StreamProducer, ex: BaseException): + # your code here + print('Custom exception handler') + print('Stream: ', stream.stream_id) + print('Exception: ', ex.args[0]) + return + +# register the exception handler +stream.on_write_exception = my_on_write_exception_handler +``` + +## Close a stream + +Streams can be left open 24/7 if you aren’t sure when the next data will arrive, but they can and should be closed when you know that you won't be publishing any more data to signal to consumers that the stream is over. + +However, sometimes a stream can be closed for other reasons, such as if an error occurs in the publisher code, or something unexpected happens. + +These snippets show you how to close a stream and how to specify the `StreamEndType`: + +=== "Python" + + ``` python + stream.close() # same as when used with StreamEndType.Closed + stream.close(StreamEndType.Closed) + stream.close(StreamEndType.Aborted) + stream.close(StreamEndType.Terminated) + ``` + +=== "C\#" + + ``` cs + stream.Close(); // same as when used with StreamEndType.Closed + stream.Close(StreamEndType.Closed); + stream.Close(StreamEndType.Aborted); + stream.Close(StreamEndType.Terminated); + ``` + +The `StreamEndType` can be one of the following possible end types: + +| StreamEndType | Description | +| ------------- | ------------------------------------------------------------------- | +| Closed | The stream was closed normally | +| Aborted | The stream was aborted by your code for your own reasons | +| Terminated | The stream was terminated unexpectedly while data was being written | + +!!! note + + The `Terminated` state is also used when subscribing to a stream but the `StreamConsumer` is closed before the stream concluded for other reasons. This can happen when closing the `TopicConsumer` for example. + +## Publishing time-series data + +You can now start writing data to your stream. [TimeseriesData](#timeseriesdata-format) is the formal class in Quix Streams which represents a time-series data packet in memory. + +[TimeseriesData](#timeseriesdata-format) is for time-series data coming from sources that generate data at regular time intervals, and with a fixed number of Parameters. + +!!! tip + + If your data source generates data at irregular time intervals, and you don’t have a defined list of regular Parameters, the [EventData](#event-data-format) format is a better fit for your data. + +### TimeseriesData format + +`TimeseriesData` is the formal class in Quix Streams that represents a time-series data packet in memory. The format consists of a list of timestamps, with their corresponding parameter names and values for each timestamp. + +You can imagine a `TimeseriesData` as a table where the `Timestamp` is the first column of that table, and where the parameters are the columns for the values of that table. + +The following table shows an example: + +| Timestamp | Speed | Gear | +| --------- | ----- | ---- | +| 1 | 120 | 3 | +| 2 | 123 | 3 | +| 3 | 125 | 3 | +| 6 | 110 | 2 | + +!!! tip + + The Timestamp column plus the [Tags](#tags) assigned to it function as the index of the table. If you add values for the same Timestamp and Tags combination, only the last Values will be sent to the stream. + +The following code would generate the previous `TimeseriesData` and publish it to the stream: + +=== "Python" + + ``` python + from quixstreams import TimeseriesData + + data = TimeseriesData() + + data.add_timestamp_nanoseconds(1) \ + .add_value("Speed", 120) \ + .add_value("Gear", 3) + data.add_timestamp_nanoseconds(2) \ + .add_value("Speed", 123) \ + .add_value("Gear", 3) + data.add_timestamp_nanoseconds(3) \ + .add_value("Speed", 125) \ + .add_value("Gear", 3) + data.add_timestamp_nanoseconds(6) \ + .add_value("Speed", 110) \ + .add_value("Gear", 2) + + stream.timeseries.publish(data) + ``` + +=== "C\#" + + ``` cs + var data = new TimeseriesData(); + + data.AddTimestampNanoseconds(1) + .AddValue("Speed", 120) + .AddValue("Gear", 3); + data.AddTimestampNanoseconds(2) + .AddValue("Speed", 123) + .AddValue("Gear", 3); + data.AddTimestampNanoseconds(3) + .AddValue("Speed", 125) + .AddValue("Gear", 3); + data.AddTimestampNanoseconds(6) + .AddValue("Speed", 110) + .AddValue("Gear", 2); + + stream.Timeseries.Publish(data); + ``` + +Although Quix Streams enables you to publish `TimeseriesData` to a stream directly, without any buffering, Quix recommends you use the built-in [Buffer](#using-a-buffer) feature to achieve high throughput. The following code would publish the same `TimeseriesData` through a buffer: + +=== "Python" + + ``` python + stream.timeseries.buffer.publish(data) + ``` + +=== "C\#" + + ``` cs + stream.Timeseries.Buffer.Publish(data); + ``` + +Visit the [Buffer](#using-a-buffer) section of this documentation to find out more about the built-in buffer feature. + +Quix Streams enables you to attach numbers, strings, or binary data to your timestamps. The following code attaches one of each to the same timestamp: + +=== "Python" + + ``` python + from quixstreams import TimeseriesData + from datetime import datetime + + data = TimeseriesData() + + data.add_timestamp(datetime.utcnow()) \ + .add_value("ParameterA", 10) \ + .add_value("ParameterB", "hello") \ + .add_value("ParameterC", bytearray("hello, Quix!", 'utf-8')) # use bytearray to publish binary data to a stream. + ``` + +=== "C\#" + + ``` cs + var data = new TimeseriesData(); + + data.AddTimestamp(DateTime.UtcNow) + .AddValue("ParameterA", 10) + .AddValue("ParameterB", "hello") + .AddValue("ParameterC", Encoding.ASCII.GetBytes("Hello Quix!")); // Publish binary data as a byte array. + ``` + +### pandas DataFrame format + +If you use the Python version of Quix Streams you can use [pandas DataFrame](features/data-frames.md) for writing time-series data. You can use the `publish` methods of the `stream.timeseries` or `stream.timeseries.buffer`, passing the Data Frame instead of a [TimeseriesData](#timeseriesdata-format): + +``` python +df = data.to_dataframe() +stream.timeseries.buffer.publish(df) +``` + +Alternatively, you can convert a pandas `DataFrame` to a [TimeseriesData](#timeseriesdata-format) using the method `from_dataframe`: + +``` python +with (data := TimeseriesData.from_dataframe(df)): + stream.timeseries.buffer.publish(data) +``` + +!!! tip + + The conversions from pandas `DataFrame` to [TimeseriesData](#timeseriesdata-format) have an intrinsic cost overhead. For high-performance models using pandas `DataFrame`, you should use pandas `DataFrame` methods provided by Quix Streams that are optimized for doing as few conversions as possible. + + +### Timestamps + +Quix Streams supports common date and time formats for timestamps when adding data to a stream. + +There are several helper functions to add new timestamps to `Buffer`, `TimeseriesData`, and `EventData` instances with several types of date/time formats. + +These are the helper functions: + +=== "Python" + + - `add_timestamp(datetime: datetime)` : Add a new timestamp in `datetime` format. Default `epoch` will never be added to this. + - `add_timestamp(time: timedelta)` : Add a new timestamp in `timedelta` format since the default `epoch` determined in the stream. + - `add_timestamp_milliseconds(milliseconds: int)` : Add a new timestamp in milliseconds since the default `epoch` determined in the stream. + - `add_timestamp_nanoseconds(nanoseconds: int)` : Add a new timestamp in nanoseconds since the default `epoch` determined in the stream. + +=== "C\#" + + - `AddTimestamp(DateTime dateTime)` : Add a new timestamp in `DateTime` format. Default `Epoch` will never be added to this. + - `AddTimestamp(TimeSpan timeSpan)` : Add a new timestamp in `TimeSpan` format since the default `Epoch` determined in the stream. + - `AddTimestampMilliseconds(long timeMilliseconds)` : Add a new timestamp in milliseconds since the default `Epoch` determined in the stream. + - `AddTimestampNanoseconds(long timeNanoseconds)` : Add a new timestamp in nanoseconds since the default `Epoch` determined in the stream. + +#### Epoch + +There is a stream property called `epoch` (set to 0 by default, meaning 00:00:00 on 1 January 1970). This property provides a base value that is added to every timestamp (except for datetime formats) when it’s added to the stream. You can use any value you like to act as a base, from which point timestamps will be relative to the base. + +The following code indicates to Quix Streams to set the current date as `epoch` and add it to each timestamp added to the stream: + +=== "Python" + + ``` python + from datetime import date + + stream.epoch = date.today() + ``` + +=== "C\#" + + ``` cs + stream.Epoch = DateTime.Today; + ``` + +Adding data without using the `epoch` property: + +=== "Python" + + ``` python + stream.timeseries.buffer \ + .add_timestamp(datetime.datetime.utcnow()) \ + .add_value("ParameterA", 10) \ + .add_value("ParameterB", "hello") \ + .publish() + ``` + +=== "C\#" + + ``` cs + stream.Timeseries.Buffer + .AddTimestamp(DateTime.UtcNow) + .AddValue("ParameterA", 10) + .AddValue("ParameterB", "hello") + .Publish(); + ``` + +Or you can add a timestamp 1000ms from the epoch `Today`: + +=== "Python" + + ``` python + stream.epoch = date.today() + + stream.timeseries.buffer \ + .add_timestamp_milliseconds(1000) \ + .add_value("ParameterA", 10) \ + .add_value("ParameterB", "hello") \ + .publish() + ``` + +=== "C\#" + + ``` cs + stream.Epoch = DateTime.Today; + + stream.Timeseries.Buffer + .AddTimestampInMilliseconds(1000) + .AddValue("ParameterA", 10) + .AddValue("ParameterB", "hello") + .Publish(); + ``` + +### Using a Buffer + +Quix Streams provides you with an optional programmable buffer which you can configure to your needs. Using buffers to publish data enables you to achieve better compression and higher throughput. + +The following code configures the buffer to publish a packet when the size of the buffer reaches 100 timestamps: + +=== "Python" + You can use the `buffer` property embedded in the `parameters` property of your `stream`: + ``` python + stream.timeseries.buffer.packet_size = 100 + ``` + +=== "C\#" + You can use the `Buffer` property embedded in the `Parameters` property of your `stream`: + ``` cs + stream.Timeseries.Buffer.PacketSize = 100; + ``` +Once created, you can then write data to that buffer: + +=== "Python" + Writing a [TimeseriesData](#timeseriesdata-format) to that buffer is as simple as using the `publish` method of that built-in `buffer`: + ``` python + stream.timeseries.buffer.publish(data) + ``` + +=== "C\#" + Writing a [TimeseriesData](#timeseriesdata-format) to that buffer is as simple as using the `Publish` method of that built-in `Buffer`: + ``` cs + stream.Timeseries.Buffer.Publish(data); + ``` + +Quix Streams also enables you to publish data to the buffer without creating a `TimeseriesData` instance explicitly. To do so, you can use the same helper methods that are supported by the `TimeseriesData` class like `add_timestamp`, `add_value` or `add_tag`. Then use the `publish` method to publish that timestamp to the buffer. + +=== "Python" + + ``` python + stream.timeseries.buffer \ + .add_timestamp(datetime.utcnow()) \ + .add_value("ParameterA", 10) \ + .add_value("ParameterB", "hello") \ + .add_value("ParameterC", bytearray("hello, Quix!", 'utf-8')) \ + .publish() + ``` + +=== "C\#" + + ``` cs + stream.Timeseries.Buffer + .AddTimestamp(DateTime.UtcNow) + .AddValue("ParameterA", 10) + .AddValue("ParameterB", "hello") + .AddValue("ParameterC", Encoding.ASCII.GetBytes("Hello Quix!")) // Publish binary data as a byte array. + .Publish(); + ``` + +You can configure multiple conditions to determine when the buffer has to release data. If any of these conditions become true, the buffer releases a new packet of data and that data is cleared from the buffer: + +=== "Python" + + - `buffer.buffer_timeout`: The maximum duration in milliseconds for which the buffer will be held before releasing the data. A packet of data is released when the configured timeout value has elapsed from the last data received in the buffer. + - `buffer.packet_size`: The maximum packet size in terms of number of timestamps. Each time the buffer has this number of timestamps, the packet of data is released. + - `buffer.time_span_in_nanoseconds`: The maximum time between timestamps in nanoseconds. When the difference between the earliest and latest buffered timestamp surpasses this number, the packet of data is released. + - `buffer.time_span_in_milliseconds`: The maximum time between timestamps in milliseconds. When the difference between the earliest and latest buffered timestamp surpasses this number the packet of data is released. Note: This is a millisecond converter on top of `time_span_in_nanoseconds`. They both work with the same underlying value. + - `buffer.custom_trigger_before_enqueue`: A custom function which is invoked **before** adding a new timestamp to the buffer. If it returns true, the packet of data is released before adding the timestamp to it. + - `buffer.custom_trigger`: A custom function which is invoked **after** adding a new timestamp to the buffer. If it returns true, the packet of data is released with the entire buffer content. + - `buffer.filter`: A custom function to filter the incoming data before adding it to the buffer. If it returns true, data is added, otherwise it isn’t. + +=== "C\#" + + - `Buffer.BufferTimeout`: The maximum duration in milliseconds for which the buffer will be held before releasing the data. A packet of data is released when the configured timeout value has elapsed from the last data received in the buffer. + - `Buffer.PacketSize`: The maximum packet size in terms of number of timestamps. Each time the buffer has this number of timestamps, the packet of data is released. + - `Buffer.TimeSpanInNanoseconds`: The maximum time between timestamps in nanoseconds. When the difference between the earliest and latest buffered timestamp surpasses this number, the packet of data is released. + - `Buffer.TimeSpanInMilliseconds`: The maximum time between timestamps in milliseconds. When the difference between the earliest and latest buffered timestamp surpasses this number, the packet of data is released. Note: This is a millisecond converter on top of `TimeSpanInNanoseconds`. They both work with the same underlying value. + - `Buffer.CustomTriggerBeforeEnqueue`: A custom function which is invoked **before** adding a new timestamp to the buffer. If it returns true, the packet of data is released before adding the timestamp to it. + - `Buffer.CustomTrigger`: A custom function which is invoked **after** adding a new timestamp to the buffer. If it returns true, the packet of data is released with the entire buffer content. + - `Buffer.Filter`: A custom function to filter the incoming data before adding it to the buffer. If it returns true, data is added, otherwise it isn’t. + +#### Examples + +The following buffer configuration will publish data every 100ms or, if no data is buffered in the 1 second timeout period, it will flush and empty the buffer anyway: + +=== "Python" + + ``` python + stream.timeseries.buffer.time_span_in_milliseconds = 100 + stream.timeseries.buffer.buffer_timeout = 1000 + ``` + +=== "C\#" + + ``` cs + stream.Timeseries.Buffer.TimeSpanInMilliseconds = 100; + stream.Timeseries.Buffer.BufferTimeout = 1000; + ``` + +The following buffer configuration will publish data every 100ms window, or if critical data is added to it: + +=== "Python" + + ``` python + stream.timeseries.buffer.time_span_in_milliseconds = 100 + stream.timeseries.buffer.custom_trigger = lambda data: data.timestamps[0].tags["is_critical"] == 'True' + ``` + +=== "C\#" + + ``` cs + stream.Timeseries.Buffer.TimeSpanInMilliseconds = 100; + stream.Timeseries.Buffer.CustomTrigger = data => data.Timestamps[0].Tags["is_critical"] == "True"; + ``` + +### Parameter definitions + +Quix Streams enables you to define metadata for parameters and events to describe them. You can define things like human readable names, descriptions, acceptable ranges of values, and so on. Quix Platform uses some of this configuration when visualizing data on the platform, but you can also use them in your own models, bridges, or visualization implementations. + +=== "Python" + We call this parameter metadata `ParameterDefinitions`, and all you need to do is to use the `add_definition` helper function of the `stream.timeseries` property: + + ``` python + stream.timeseries.add_definition('ParameterIdForCode', 'DisplayNameForHumans', 'Additional Description') + ``` + +=== "C\#" + We call this parameter metadata `ParameterDefinitions`, and all you need to do is to use the `AddDefinition` helper function of the `stream.timeseries` property: + + ``` cs + stream.Timeseries.AddDefinition("ParameterIdForCode", "DisplayNameForHumans", "Additional Description") + ``` + +Once you have added a new definition, you can attach some additional properties to it. This is the list of visualization and metadata options you can attach to a `ParameterDefinition`: + +=== "Python" + + - `set_range(minimum_value: float, maximum_value: float)` : Set the minimum and maximum range of the parameter. + - `set_unit(unit: str)` : Set the unit of the parameter. + - `set_format(format: str)` : Set the format of the parameter. + - `set_custom_properties(custom_properties: str)` : Set the custom properties of the parameter for your own needs. + + Example: + + ``` python + stream.timeseries \ + .add_definition("vehicle-speed", "Vehicle speed", "Current vehicle speed measured using wheel sensor") \ + .set_unit("kmh") \ + .set_range(0, 400) + ``` + +=== "C\#" + + - `SetRange(double minimumValue, double maximumValue)` : Set the minimum and maximum range of the parameter. + - `SetUnit(string unit)` : Set the unit of the parameter. + - `SetFormat(string format)` : Set the format of the parameter. + - `SetCustomProperties(string customProperties)` : Set the custom properties of the parameter for your own needs + + Example: + + ``` cs + stream.Timeseries + .AddDefinition("vehicle-speed", "Vehicle speed", "Current vehicle speed measured using wheel sensor") + .SetUnit("kmh") + .SetRange(0, 400); + ``` + +The Min and Max range definition sets the Y axis range in the waveform visualisation view in Quix Platform. This definition: + +=== "Python" + + ``` python + .add_definition("Speed").set_range(0, 400) + ``` + +=== "C\#" + + ``` cs + .AddDefinition("Speed").SetRange(0, 400) + ``` + +Will set up this view in Data explorer: + +![Data explorer](images/visualisationdefinition.png) + +Adding `Definitions` for each parameter enables you to see data with different ranges on the same waveform view: + +![ranges](images/visualisationdefinitionrangeexample.png) + +You can also define a `Location` before adding parameter and event definitions. Locations are used to organize the parameters and events in hierarchy groups in the data catalogue. To add a Location you should use the `add_location` method before adding the definitions you want to include in that group. + +For example, setting this parameter location: + +=== "Python" + + ``` python + stream.timeseries \ + .add_location("/Player/Motion/Car") \ + .add_definition("Pitch") \ + .add_definition("Roll") \ + .add_definition("Yaw") + ``` + +=== "C\#" + + ``` cs + stream.Timeseries + .AddLocation("/Player/Motion/Car") + .AddDefinition("Pitch") + .AddDefinition("Roll") + .AddDefinition("Yaw"); + ``` + +Will result in this parameter hierarchy in the parameter selection dialogs. + +## Publishing events + +`EventData` is the formal class in Quix Streams which represents an Event data packet in memory. `EventData` is meant to be used when the data is intended to be consumed only as single unit, such as a JSON payload where properties can't be converted to individual parameters. `EventData` can also be better for non-standard changes, such as when a machine shutting down publishes an event named `ShutDown`. + +!!! tip + + If your data source generates data at regular time intervals, or the information can be organized in a fixed list of Parameters, the [TimeseriesData](#timeseriesdata-format) format is a better fit for your time-series data. + +### EventData format + +`EventData` consists of a record with a `Timestamp`, an `EventId` and an `EventValue`. + +You can imagine a list of `EventData` instances as a table of three columns where the `Timestamp` is the first column of that table and the `EventId` and `EventValue` are the second and third columns, as shown in the following table: + +| Timestamp | EventId | EventValue | +| --------- | ----------- | -------------------------- | +| 1 | failure23 | Gearbox has a failure | +| 2 | box-event2 | Car has entered to the box | +| 3 | motor-off | Motor has stopped | +| 6 | race-event3 | Race has finished | + +The following code would generate the list of `EventData` shown in the previous example and publish it to the stream: + +=== "Python" + + ``` python + from quixstreams import EventData + + stream.events.publish(EventData("failure23", 1, "Gearbox has a failure")) + stream.events.publish(EventData("box-event2", 2, "Car has entered to the box")) + stream.events.publish(EventData("motor-off", 3, "Motor has stopped")) + stream.events.publish(EventData("race-event3", 6, "Race has finished")) + ``` + +=== "C\#" + + ``` cs + stream.Events.Publish(new EventData("failure23", 1, "Gearbox has a failure")); + stream.Events.Publish(new EventData("box-event2", 2, "Car has entered to the box")); + stream.Events.Publish(new EventData("motor-off", 3, "Motor has stopped")); + stream.Events.Publish(new EventData("race-event3", 6, "Race has finished")); + ``` + +Quix Streams enables you publish events without creating `EventData` instances explicitly. To do so, you can use similar helpers to those present in [TimeseriesData](#timeseriesdata-format) format such as `add_timestamp`, `add_value` or `add_tag`. Then use the `publish` method to publish that timestamp to the stream. + +=== "Python" + + ``` python + stream.events \ + .add_timestamp(1) \ + .add_value("failure23", "Gearbox has a failure") \ + .publish() + stream.events \ + .add_timestamp(2) \ + .add_value("box-event2", "Car has entered to the box") \ + .publish() + stream.events \ + .add_timestamp(3) \ + .add_value("motor-off", "Motor has stopped") \ + .publish() + stream.events \ + .add_timestamp(6) \ + .add_value("race-event3", "Race has finished") \ + .publish() + ``` + +=== "C\#" + + ``` cs + stream.Events + .AddTimestamp(1) + .AddValue("failure23", "Gearbox has a failure") + .Publish(); + stream.Events + .AddTimestamp(2) + .AddValue("box-event2", "Car has entered to the box") + .Publish(); + stream.Events + .AddTimestamp(3) + .AddValue("motor-off", "Motor has stopped") + .Publish(); + stream.Events + .AddTimestamp(6) + .AddValue("race-event3", "Race has finished") + .Publish(); + ``` + +### Event definitions + +As with parameters, you can attach `Definitions` to each event. + +This is the list of visualization and metadata options you can attach to a `EventDefinition`: + + - `set_level(level: EventLevel)` : Set severity level of the event. + - `set_custom_properties(custom_properties: str)` : Set the custom properties of the event for your own needs. + +For example, the following code defines a human readable name and a Severity level for the `EventA`: + +=== "Python" + + ``` python + from quixstreams import EventLevel + stream.events \ + .add_definition("EventA", "The Event A") \ + .set_level(EventLevel.Critical) \ + .set_custom_properties("{this could be a json}") + ``` + +=== "C\#" + + ``` cs + stream.Events.AddDefinition("EventA", "The Event A").SetLevel(EventLevel.Critical).SetCustomProperties("{this could be a json}"); + ``` + +## Tags + +The library enables you to tag data for `TimeseriesData` and `EventData` packets. Using tags alongside parameters and events helps when indexing persisted data in the database. Tags enable you to filter and group data with fast queries. + +Tags work as a part of the primary key inside `TimeseriesData` and `EventData`, in combination with the default Timestamp key. If you add data values with the same Timestamps, but a different combination of Tags, the timestamp will be treated as a separate row. + +For example, the following code: + +=== "Python" + + ``` python + from quixstreams import TimeseriesData + + data = TimeseriesData() + + data.add_timestamp_nanoseconds(1) \ + .add_tag("CarId", "car1") \ + .add_value("Speed", 120) \ + .add_value("Gear", 3) + data.add_timestamp_nanoseconds(2) \ + .add_tag("CarId", "car1") \ + .add_value("Speed", 123) \ + .add_value("Gear", 3) + data.add_timestamp_nanoseconds(3) \ + .add_tag("CarId", "car1") \ + .add_value("Speed", 125) \ + .add_value("Gear", 3) + + data.add_timestamp_nanoseconds(1) \ + .add_tag("CarId", "car2") \ + .add_value("Speed", 95) \ + .add_value("Gear", 2) + data.add_timestamp_nanoseconds(2) \ + .add_tag("CarId", "car2") \ + .add_value("Speed", 98) \ + .add_value("Gear", 2) + data.add_timestamp_nanoseconds(3) \ + .add_tag("CarId", "car2") \ + .add_value("Speed", 105) \ + .add_value("Gear", 2) + ``` + +=== "C\#" + + ``` cs + var data = new TimeseriesData(); + + data.AddTimestampNanoseconds(1) + .AddTag("CarId", "car1") + .AddValue("Speed", 120) + .AddValue("Gear", 3); + data.AddTimestampNanoseconds(2) + .AddTag("CarId", "car1") + .AddValue("Speed", 123) + .AddValue("Gear", 3); + data.AddTimestampNanoseconds(3) + .AddTag("CarId", "car1") + .AddValue("Speed", 125) + .AddValue("Gear", 3); + + data.AddTimestampNanoseconds(1) + .AddTag("CarId", "car2") + .AddValue("Speed", 95) + .AddValue("Gear", 2); + data.AddTimestampNanoseconds(2) + .AddTag("CarId", "car2") + .AddValue("Speed", 98) + .AddValue("Gear", 2); + data.AddTimestampNanoseconds(3) + .AddTag("CarId", "car2") + .AddValue("Speed", 105) + .AddValue("Gear", 2); + ``` + +Will generate the following `TimeseriesData` packet with tagged data: + +| Timestamp | CarId | Speed | Gear | +| --------- | ----- | ----- | ---- | +| 1 | car1 | 120 | 3 | +| 1 | car2 | 95 | 2 | +| 2 | car1 | 123 | 3 | +| 2 | car2 | 98 | 2 | +| 3 | car1 | 125 | 3 | +| 3 | car2 | 105 | 2 | + +!!! warning + + Tags have to be chosen carefully as excessive cardinality leads to performance degradation in the database. You should use tags only for identifiers and not cardinal values. + +The following example of **good tagging practice** enables you to query the maximum speed for driver identifier "Peter": + +=== "Python" + + ``` python + stream.timeseries.buffer \ + .add_timestamp(datetime.datetime.utcnow()) \ + .add_tag("vehicle-plate", "SL96 XCX") \ + .add_tag("driver-id", "Peter") \ + .add_value("Speed", 53) \ + .add_value("Gear", 4) \ + .publish() + ``` + +=== "C\#" + + ``` cs + stream.Timeseries.Buffer + .AddTimestamp(DateTime.UtcNow) + .AddTag("vehicle-plate", "SL96 XCX") + .AddTag("driver-id", "Peter") + .AddValue("Speed", 53) + .AddValue("Gear", 4) + .Publish(); + ``` + +The following example of **bad tagging practice** will lead to excessive cardinality as there will be a large number of different values for the specified tag, Speed: + +=== "Python" + + ``` python + stream.timeseries.buffer \ + .add_timestamp(datetime.datetime.utcnow()) \ + .add_tag("Speed", 53) \ + .add_value("Gear", 4) \ + .publish() + ``` + +=== "C\#" + + ``` cs + stream.Timeseries.Buffer + .AddTimestamp(DateTime.UtcNow) + .AddTag("Speed", 53) + .AddValue("Gear", 4) + .Publish(); + ``` + +## Minimal example + +This is a minimal code example you can use to publish data to a topic using Quix Streams: + +=== "Python" + + ``` python + import time + import datetime + + from quixstreams import * + + client = KafkaStreamingClient('127.0.0.1:9092') + + with (topic_producer := client.get_topic_producer(TOPIC_ID)): + + stream = topic_producer.create_stream() + + stream.properties.name = "Hello World python stream" + + for index in range(0, 3000): + stream.timeseries \ + .buffer \ + .add_timestamp(datetime.datetime.utcnow()) \ + .add_value("ParameterA", index) \ + .publish() + time.sleep(0.01) + print("Closing stream") + stream.close() + ``` + +=== "C\#" + + ``` cs + using System; + using System.Threading; + + namespace WriteHelloWorld + { + class Program + { + /// + /// Main will be invoked when you run the application + /// + static void Main() + { + // Create a client which holds generic details for creating input and output topics + var client = new QuixStreams.Streaming.QuixStreamingClient(); + + using var topicProducer = client.GetTopicProducer(TOPIC_ID); + + var stream = topicProducer.CreateStream(); + + stream.Properties.Name = "Hello World stream"; + + Console.WriteLine("Publishing values for 30 seconds"); + for (var index = 0; index < 3000; index++) + { + stream.Timeseries.Buffer + .AddTimestamp(DateTime.UtcNow) + .AddValue("ParameterA", index) + .Publish(); + + Thread.Sleep(10); + } + + Console.WriteLine("Closing stream"); + stream.Close(); + Console.WriteLine("Done!"); + } + } + } + ``` + +## Publish raw Kafka messages + +Quix Streams uses an internal protocol which is both data and speed optimized, but this requires you to use Quix Streams on both the producer and consumer sides. Custom formats need to be handled manually. + +For this, Quix Streams provides a way to [publish](publish.md#publish-raw-kafka-messages) and [subscribe](subscribe.md#subscribe-raw-kafka-messages) to the raw, unformatted messages, and work with them as bytes. This gives you the ability to implement the protocol as needed and convert between formats. + +You can publish messages with or without a key. The following example demonstrates how to publish two messages to Kafka, one message with a key, and one without: + +=== "Python" + + ``` python + with (producer := client.create_raw_topic_producer(TOPIC_ID)): + data = bytearray(bytes("TEXT CONVERTED TO BYTES",'utf-8')) + + #publish value with KEY to kafka + message = RawMessage(data) + message.key = MESSAGE_KEY + producer.publish(message) + + #publish value without key into kafka + producer.publish(data) + ``` + +=== "C\#" + + ``` cs + using var producer = client.GetRawTopicProducer(TOPIC_ID); + + var data = new byte[]{1,3,5,7,1,43}; + + //Publish value with KEY to kafka + producer.Publish(new Streaming.Raw.RawMessage( + MESSAGE_KEY, + data + )); + + //Publish value withhout key to kafka + producer.Publish(new Streaming.Raw.RawMessage( + data + )); + ``` diff --git a/temp_dir/client-library/quickstart.md b/temp_dir/client-library/quickstart.md new file mode 100644 index 00000000..0acf1051 --- /dev/null +++ b/temp_dir/client-library/quickstart.md @@ -0,0 +1,416 @@ +# Quickstart + +Quix Streams provides you with a library for developing real-time streaming applications focused on time-series data. + +If you would like to know more about Quix Streams, you can view the [Quix Streams GitHub repository](https://github.com/quixio/quix-streams){target=_blank}. Quix Streams is open source under the Apache 2.0 license. + +In this quickstart guide you will learn how to start using Quix Streams as quickly as possible. This guide covers how to: + +* Create a consumer +* Create a producer +* Create a producer/consumer transform +* Connect to the Quix Platform + +The typical stream processing pipline you create with Quix Streams involves producers, consumers, and transforms. Producers publish information into a topic, consumers subscribe to read information from a topic. Transforms typically consume data, process it in some way, and then publish the transformed data to a topic, or stream within a topic. + +In this guide you'll learn how to create a producer that publishes data to a topic, a consumer that reads data from a topic, and a simple transform that consumes data from a topic, transforms it, and then publishes the new data to a topic. + +Initially you will work with your local Kafka installation, and then you'll learn how you can connect to Quix Platform. In Quix Platform you can build your stream processing pipelines graphically. + +## Prerequisites + +The prerequisites for this guide are as follows: + +* [Python 3.x](https://www.python.org/downloads/){target=_blank}. +* You have a local installation of [Kafka](https://kafka.apache.org/documentation/){target=_blank} up and running. You use this to test your code. + +Optionally: + +* Sign up for a free [Quix account](https://portal.platform.quix.ai/self-sign-up){target=_blank}. You may just want to connect to your own Kafka installation, but if you'd like to connect to the Quix Platform you'll need a free account. + +## Getting help + +If you need help with this guide, then please join our public Slack community [`The Stream`](https://quix.io/slack-invite){target=_blank}, and ask any questions you have there. + +## Install + +Make sure you have Python 3.x installed by running: + +```shell +python --version +``` + +Install Quix Streams for Python locally: + +```shell +pip install quixstreams +``` + +You can read information about installation for your platform on the [PyPi page](https://pypi.org/project/quixstreams/){target=_blank} for Quix Streams. + +The [README](https://github.com/quixio/quix-streams) for Quix Streams also has the latest information on installation. + +!!! note + + The following sections assume you have a local installation of [Kafka](https://kafka.apache.org/){target=_blank} running. + +## Create a Consumer + +To create a simple consumer, follow these steps: + +1. Create a directory for your project, you can call it anything you want, and change into the project directory. + +2. Create a file called `consumer.py` that contains the following code: + + ```python + import quixstreams as qx + import pandas as pd + + # Client connecting to Kafka instance locally without authentication. + client = qx.KafkaStreamingClient('127.0.0.1:9092') + + # Open the input topic where to consume data from. + # For testing purposes we remove consumer group and always read from latest data. + topic_consumer = client.get_topic_consumer("quickstart-topic", consumer_group=None, auto_offset_reset=qx.AutoOffsetReset.Latest) + + # consume streams + def on_stream_received_handler(stream_received: qx.StreamConsumer): + stream_received.timeseries.on_dataframe_received = on_dataframe_received_handler + + # consume data (as Pandas DataFrame) + def on_dataframe_received_handler(stream: qx.StreamConsumer, df: pd.DataFrame): + print(df.to_string()) + + # Hook up events before initiating read to avoid losing out on any data + topic_consumer.on_stream_received = on_stream_received_handler + + print("Listening to streams. Press CTRL-C to exit.") + # Handle graceful exit + qx.App.run() + ``` + +3. Run the code: + + ```shell + python consumer.py + ``` + +The code will wait for published messages and then print information about any messages received to the console. You'll next build a suitable producer than can publish messages to the example topic. + +??? example "Understand the code" + + Click on the annotations to understand the consumer code: + + ```python + import quixstreams as qx + import pandas as pd # (1) + + + # Client connecting to Kafka instance locally without authentication. + client = qx.KafkaStreamingClient('127.0.0.1:9092') # (2) + + # Open the input topic where to consume data from. + # For testing purposes we remove consumer group and always read from latest data. + input_topic = client.get_topic_consumer("quickstart-topic", consumer_group=None, auto_offset_reset=qx.AutoOffsetReset.Latest) # (3) + + # consume streams + def on_stream_received_handler(stream_received: qx.StreamConsumer): # (4) + stream_received.timeseries.on_dataframe_received = on_dataframe_received_handler # (5) + + # consume data (as Pandas DataFrame) + def on_dataframe_received_handler(stream: qx.StreamConsumer, df: pd.DataFrame): # (6) + print(df.to_string()) # (7) + + # Hook up events before initiating read to avoid losing out on any data + input_topic.on_stream_received = on_stream_received_handler # (8) + + print("Listening to streams. Press CTRL-C to exit.") + # Handle graceful exit + qx.App.run() # (9) + ``` + + 1. Imports the [Pandas library](https://pandas.pydata.org/){target=_blank} can be used to handle tabular data in Quix Streams. This library is supported because it is widely used. + 2. Connects to a Kafka server. In this case the Kafka server is running locally. + 3. Opens the specified topic for reading. + 4. A function definition for the stream callback. This stream event handler will be called for all stream events across all streams. + 5. Registers the Pandas data reader callback. This is registered for data events within a stream, not globally for all streams. This is efficient as you might not need to use this handler on many streams. + 6. This function defines a Pandas data event callback. + 7. The function simply prints a Pandas data frame in this example. + 8. Registers the stream callback. + 9. Runs the application, and registers code to monitor termination signals. On shutdown the code performs tasks such as closing open file handles, flushing buffers, shutting down threads, and freeing up allocated memory. It also closes input and output streams in the correct order, and creates topics that don't exist on startup. + +## Create a Producer + +To create a simple producer follow these steps: + +1. Start a new terminal tab. + +2. In your project directory, create a file called `producer.py` that contains the following code: + + ```python + import quixstreams as qx + import time + import datetime + import math + + + # Client connecting to Kafka instance locally without authentication. + client = qx.KafkaStreamingClient('127.0.0.1:9092') + + # Open the output topic where to produce data to. + topic_producer = client.get_topic_producer("quickstart-topic") + + stream = topic_producer.create_stream() + stream.properties.name = "Hello World python stream" + stream.properties.metadata["my-metadata"] = "my-metadata-value" + stream.timeseries.buffer.time_span_in_milliseconds = 100 # Send data in 100 ms chunks + + print("Sending values for 30 seconds.") + + for index in range(0, 3000): + stream.timeseries \ + .buffer \ + .add_timestamp(datetime.datetime.utcnow()) \ + .add_value("ParameterA", math.sin(index / 200.0)) \ + .add_value("ParameterB", "string value: " + str(index)) \ + .add_value("ParameterC", bytearray.fromhex("51 55 49 58")) \ + .publish() + time.sleep(0.01) + + print("Closing stream") + stream.close() + ``` + +3. Run the code: + + ```shell + python producer.py + ``` + +The code will publish a series of messages to the specified topic. + +4. Switch to the consumer terminal tab and view the messages being displayed. The following shows an example data frame: + + ``` + time ParameterA ParameterB ParameterC + 0 1675695013706982000 0.687444 string value: 2990 b'QUIX' + 1 1675695013719422000 0.683804 string value: 2991 b'QUIX' + 2 1675695013730504000 0.680147 string value: 2992 b'QUIX' + 3 1675695013745346000 0.676473 string value: 2993 b'QUIX' + 4 1675695013756586000 0.672782 string value: 2994 b'QUIX' + 5 1675695013769315000 0.669075 string value: 2995 b'QUIX' + 6 1675695013782740000 0.665351 string value: 2996 b'QUIX' + 7 1675695013796677000 0.661610 string value: 2997 b'QUIX' + ``` + +You've now created and tested both a producer and consumer that uses Quix Streams. + +??? example "Understand the code" + + Click on the annotations to understand the producer code: + + ```python + import quixstreams as qx + import time + import datetime + import math + + + # Client connecting to Kafka instance locally without authentication. + client = qx.KafkaStreamingClient('127.0.0.1:9092') # (1) + + # Open the output topic where to produce data to. + topic_producer = client.get_topic_producer("quickstart-topic") # (2) + + stream = topic_producer.create_stream() # (3) + stream.properties.name = "Quixstart Python stream" # (4) + stream.properties.metadata["my-metadata"] = "my-metadata-value" # (5) + stream.timeseries.buffer.time_span_in_milliseconds = 100 # (6) + + print("Sending values for 30 seconds.") + + for index in range(0, 3000): + stream.timeseries \ + .buffer \ + .add_timestamp(datetime.datetime.utcnow()) \ + .add_value("ParameterA", math.sin(index / 200.0)) \ + .add_value("ParameterB", "string value: " + str(index)) \ + .add_value("ParameterC", bytearray.fromhex("51 55 49 58")) \ + .publish() # (7) + time.sleep(0.01) + + print("Closing stream") + stream.close() # (8) + ``` + + 1. Opens a connection to the Kafka server. + 2. Opens a topic top write parameter data to. + 3. Creates the stream to write to. + 4. Sets a stream property, in this case `name`. + 5. Sets application-specific key-value metadata. + 6. Sets a stream buffer property. In this case `time_span_in_milliseconds` is set to 100. The data is then sent in 100ms chunks. + 7. Writes parameter data to the stream buffer. A time stamp is added. Also, data of different data types can be added, such as numbers, strings, and binary data. + 8. Closes the stream. + +## Consumer-producer transform + +Typically a transform block in Quix will receive some data on an input topic, perform some processing on the data, and then publish data to an output topic. Example code that does this is shown here: + +```python +import quixstreams as qx +import pandas as pd + + +client = qx.KafkaStreamingClient('127.0.0.1:9092') + +print("Opening consumer and producer topics") + +topic_consumer = client.get_topic_consumer("quickstart-topic") +topic_producer = client.get_topic_producer("output-topic") + +def on_dataframe_received_handler(stream_consumer: qx.StreamConsumer, df: pd.DataFrame): + print(df) + print('Data transformed') # Transform your data here + # write data to output topic + topic_producer.get_or_create_stream(stream_consumer.stream_id).timeseries.publish(df) + +# read streams +def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.timeseries.on_dataframe_received = on_dataframe_received_handler + +topic_consumer.on_stream_received = on_stream_received_handler + +# Hook up to termination signal (for docker image) and CTRL-C +print("Listening to streams. Press CTRL-C to exit.") + +# Handle graceful exit +qx.App.run() +``` + +This example reads data in from the `quickstart-topic` topic, and then writes the transformed data out to the `output-topic` topic. The approach is to use callbacks to make the code event driven. You register a callback to handle data on a stream, and then when data is received, the callback to handle data frames is registered and invoked. + +This approach of consuming, transforming, and producing data is a fundamental of building data processing pipelines in Quix. + +??? example "Understand the code" + + Click on the annotations to understand the producer/consumer code: + + ```python + import quixstreams as qx + import pandas as pd + + client = qx.KafkaStreamingClient('127.0.0.1:9092') # (1) + + print("Opening consumer and producer topics") + + topic_consumer = client.get_topic_consumer("quickstart-topic") # (2) + topic_producer = client.get_topic_producer("output-topic") # (3) + + def on_dataframe_received_handler(stream_consumer: qx.StreamConsumer, df: pd.DataFrame): # (4) + print(df) + print('Data transformed') # Transform your data here + # write data to output topic + topic_producer.get_or_create_stream(stream_consumer.stream_id).timeseries.publish(df) # (5) + + # read streams + def on_stream_received_handler(stream_consumer: qx.StreamConsumer): # (6) + stream_consumer.timeseries.on_dataframe_received = on_dataframe_received_handler # (7) + + topic_consumer.on_stream_received = on_stream_received_handler # (8) + + # Hook up to termination signal (for docker image) and CTRL-C + print("Listening to streams. Press CTRL-C to exit.") + + # Handle graceful exit + qx.App.run() # (9) + ``` + + 1. Opens a connection to the Kafka server. + 2. Opens the consumer topic, the topic is created if it does not exist. + 3. Opens the producer topic, the topic is created if it does not exist. + 4. Defines the data frame handler function. In this case it publishes data to the consumer stream. + 5. Gets a stream on the producer topic, creating the stream if it does not exist, and then publishes data to this stream. + 6. Defines the consumer stream data handler. It simply regsiters the data frame handler in this example. + 7. Registers the data frame handler for the consumer stream. + 8. Registers the consumer stream data handler. + 9. Runs the application, and registers code to monitor termination signals. On shutdown the code performs tasks such as closing open file handles, flushing buffers, shutting down threads, and freeing up allocated memory. It also closes input and output streams in the correct order, and creates topics that don't exist on startup. + +## Connecting to Quix Platform + +As well as being able to connect directly to a Kafka installation, either locally (for development purposes), on premise, or in the cloud, you can also connect to the Quix Platform, the SaaS for building real-time stream processing applications. Quix Platform provides the ability to build stream processing applications in a graphical environment, and deploy the applications to the Quix-hosted infrastructure. + +### Obtaining a token + +To connect to the Quix Platform using Quix Streams, you will need to provide a token for authentication. + +1. Sign up for a free [Quix account](https://portal.platform.quix.ai/self-sign-up){target=_blank}, and log in. + +2. In the Quix Platform, click on `Topics` on the left-hand navigation. + +3. Click on the gear icon. The `Broker Settings` dialog is displayed. + +4. Copy `token 1` to the clipboard. You will use that in the code that connects to the Quix platform. + +### Code to connect to Quix Platform + +The following code snippet shows you how to connect to the Quix Platform: + +```python +import quixstreams as qx + +# connect to Quix platform with token +client = qx.QuixStreamingClient('') # Token 1 from Topics in portal +``` + +This connects to the Quix Platform, rather than your local Kafka installation, which is the code you saw previously in this guide. + +A further example is to rewrite the consumer-producer program you created earlier in this Quickstart, to work with Quix Platform: + +```python +import quixstreams as qx +import pandas as pd + +client = qx.QuixStreamingClient('') + +print("Opening consumer and producer topics") + +topic_consumer = client.get_topic_consumer("quickstart-topic") +topic_producer = client.get_topic_producer("output-topic") + +def on_dataframe_received_handler(stream_consumer: qx.StreamConsumer, df: pd.DataFrame): + print(df) + # Transform your data here. + print('transformed') + # write data to output topic + topic_producer.get_or_create_stream(stream_consumer.stream_id).timeseries.publish(df) + +# read streams +def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.timeseries.on_dataframe_received = on_dataframe_received_handler + +topic_consumer.on_stream_received = on_stream_received_handler + +# Hook up to termination signal (for docker image) and CTRL-C +print("Listening to streams. Press CTRL-C to exit.") + +# Handle graceful exit +qx.App.run() +``` + +## Next steps + +Try one of the following resources to continue your Quix learning journey: + +* [Get a free Quix account](https://portal.platform.quix.ai/self-sign-up){target=_blank} + +* [Quix Streams GitHub](https://github.com/quixio/quix-streams){target=_blank} + +* [Quix definitions](../platform/definitions.html) + +* [The Stream community on Slack](https://quix.io/slack-invite){target=_blank} + +* [Stream processing glossary](https://quix.io/stream-processing-glossary/){target=_blank} + +* [Sentiment analysis tutorial](../platform/tutorials/sentiment-analysis/index.md) + +* [Kafka setup blog post](https://www.quix.io/blog/send-timeseries-data-to-kafka-python/?returnUrl=https://www.quix.io/blog/tutorial/){target=_blank} diff --git a/temp_dir/client-library/state-management.md b/temp_dir/client-library/state-management.md new file mode 100644 index 00000000..2cb66314 --- /dev/null +++ b/temp_dir/client-library/state-management.md @@ -0,0 +1,151 @@ +# State management + +Your code may get restarted multiple times. A user intervention (like manually stopping and starting) or runtime error could cause your application to terminate. + +!!! note + + When using the Quix Platform, the platform automatically detects the problem and restarts the underlying service in an attempt to recover from the fault. + +Due to the code being run in memory, each time a deployment restarts, internal variables will be reset. For example, if you were to calculate the count of the elements in the stream, this counter would get reset on each restart. The counter would then start at the default value not knowing what was the last known value in the state of the previous run before program terminated. + +Quix Streams has state management built in to enable values to be used and persisted across restarts of a given deployment. Quix Streams persists your state using your filesystem at the moment. + +!!! note + + When using the Quix Platform, the platform provides your replicas with a shared state store when enabled. + +## Usage + +To use the library’s state management feature, create an instance of `LocalFileStorage`, and then use the available methods on the instance to manipulate the state as needed. For example: + +=== "Python" + + ``` python + from quixstreams import LocalFileStorage + + storage = LocalFileStorage() + + #clear storage ( remove all keys ) + storage.clear() + + #storage class supports handling of + # `str`, `int`, `float`, `bool`, `bytes`, `bytearray` types. + + #set value + storage.set("KEY1", 12.51) + storage.set("KEY2", "str") + storage.set("KEY3", True) + storage.set("KEY4", False) + + #check if the storage contains key + storage.contains_key("KEY1") + + #get value + value = storage.get("KEY1") + ``` + +=== "C\#" + C\# supports two ways to call the Storage API. + + - Synchronous + + - Asynchronous ( methods are with Async suffix ) + + The Synchronous API. During a call to these synchronous methods, the + program thread execution is blocked. + + ``` cs + var storage = new LocalFileStorage(); + + //clear storage ( remove all keys ) + await storage.Clear(); + + //set value to specific key + await storage.Set("KEY1", 123); //long + await storage.Set("KEY2", 1.23); //double + await storage.Set("KEY3", "1.23"); //string + await storage.Set("KEY4", new byte[]{12,53,23}); //binary + await storage.Set("KEY5", false); //boolean + + //check if the key exists + await storage.ContainsKey("KEY1"); + + //retrieve value from key + await storage.GetLong("KEY1"); + await storage.GetDouble("KEY2"); + await storage.GetString("KEY3"); + await storage.GetBinary("KEY4"); + await storage.GetBinary("KEY5"); + + //list all keys in the storage + await storage.GetAllKeys(); + ``` + + The asynchronous API in which methods do contain Async suffix. These methods use the Task-Based Asynchronous Pattern (TAP) and returnTasks. TAP enables Quix to use async / await and avoid blocking the main thread on longer-running operations. In this case internal I/O. + + ``` cs + var storage = new LocalFileStorage(); + + //clear storage ( remove all keys ) + await storage.ClearAsync(); + + //set value to specific key + await storage.SetAsync("KEY1", 123); //long + await storage.SetAsync("KEY2", 1.23); //double + await storage.SetAsync("KEY3", "1.23"); //string + await storage.SetAsync("KEY4", new byte[]{12,53,23}); //binary + await storage.SetAsync("KEY5", false); //boolean + + //check if the key exists + await storage.ContainsKeyAsync("KEY1"); + + //retrieve value from key + await storage.GetLongAsync("KEY1"); + await storage.GetDoubleAsync("KEY2"); + await storage.GetStringAsync("KEY3"); + await storage.GetBinaryAsync("KEY4"); + await storage.GetBinaryAsync("KEY5"); + + //list all keys in the storage + await storage.GetAllKeysAsync(); + ``` + +## In memory storage + +In Python there is another storage option available as an experimental feature called `InMemoryStorage`. It works in a similar way to `LocalFileStorage` and also supports dictionary operations such as `del` or iteration. + +`InMemoryStorage` can be used on its own, as demonstrated in the following example: + +``` python +from quixstreams import InMemoryStorage + +storage = InMemoryStorage() +storage.clear() +storage.set("floatval", 12.51) +storage.set("stringval", "str") +storage.set("boolval", True) +storage.set("objval", {"dic": "tionary"}) +``` + +It can also be used in conjunction with `LocalFileStorage`, as shown in the following example: + +``` python +from quixstreams import InMemoryStorage, LocalFileStorage + +storage = InMemoryStorage(LocalFileStorage("state/test")) +storage.clear() +storage.set("floatval", 12.51) +storage.set("stringval", "str") +storage.set("boolval", True) +storage.set("objval", {"dic": "tionary"}) +storage.flush() # to write to backing storage + +# can be useful to hook it to consumer.on_committing +topic_consumer.on_committing = storage.flush +# or +def on_committing_handler(topic_consumer: qx.TopicConsumer): + print("Committing!") + storage.flush() # to write to backing storage + +topic_consumer.on_committing = on_committing_handler +``` \ No newline at end of file diff --git a/temp_dir/client-library/subscribe.md b/temp_dir/client-library/subscribe.md new file mode 100644 index 00000000..464a9ab7 --- /dev/null +++ b/temp_dir/client-library/subscribe.md @@ -0,0 +1,881 @@ +# Subscribing to data + +Quix Streams enables you to subscribe to the data in your topics in real time. This documentation explains in detail how to do this. + +## Connect to Quix + +To subscribe to data from your Kafka topics, you need an instance of `KafkaStreamingClient`. To create an instance, use the following code: + +=== "Python" + + ``` python + from quixstreams import KafkaStreamingClient + + client = KafkaStreamingClient('127.0.0.1:9092') + ``` + +=== "C\#" + + ``` cs + var client = new QuixStreams.Streaming.KafkaStreamingClient("127.0.0.1:9092"); + ``` + +You can read about other ways to connect to your message broker in the [Connecting to a broker](connect.md) section. + +## Create a topic consumer + +Topics are central to stream processing operations. To subscribe to data in a topic you need an instance of `TopicConsumer`. This instance enables you to receive all the incoming streams on the specified topic. You can create an instance using the client’s `get_topic_consumer` method, passing the `TOPIC` as the parameter. + +=== "Python" + + ``` python + topic_consumer = client.get_topic_consumer(TOPIC) + ``` + +=== "C\#" + + ``` cs + var topicConsumer = client.GetTopicConsumer(TOPIC); + ``` + +### Consumer group + +The [Consumer group](kafka.md#consumer-group) is a concept used when you want to [scale horizontally](features/horizontal-scaling.md). Each consumer group is identified using an ID, which you set optionally when opening a connection to the topic for reading: + +=== "Python" + + ``` python + topic_consumer = client.get_topic_consumer("{topic}","{your-consumer-group-id}") + ``` + +=== "C\#" + + ``` cs + var topicConsumer = client.GetTopicConsumer("{topic}","{your-consumer-group-id}"); + ``` + +This indicates to the message broker that all the replicas of your process will share the load of the incoming streams. Each replica only receives a subset of the streams coming into the Input Topic. + +!!! warning + + If you want to consume data from the topic locally for debugging purposes, and the model is also deployed elsewhere, make sure that you change the consumer group ID to prevent clashing with the other deployment. If the clash happens, only one instance will be able to receive data for a partition at the same time. + +## Subscribing to streams + +=== "Python" + Once you have the `TopicConsumer` instance you can start receiving streams. For each stream received by the specified topic, `TopicConsumer` will execute the callback `on_stream_received`. This callback will be invoked every time you receive a new Stream. For example, the following code prints the `StreamId` for each stream received by that topic: + + ``` python + from quixstreams import TopicConsumer, StreamConsumer + + def on_stream_received_handler(stream_received: StreamConsumer): + print("Stream received:" + stream_received.stream_id) + + topic_consumer.on_stream_received = on_stream_received_handler + topic_consumer.subscribe() + ``` + + !!! note + `subscribe()` method starts consuming streams and data from your topic. You should only do this after you’ve registered callbacks for all the events you want to listen to. `App.run()` can also be used for this and provides other benefits. Find out more about [App.run()](app-management.md). + + +=== "C\#" + Once you have the `TopicConsumer` instance you can start consuming streams. For each stream received by the specified topic, `TopicConsumer` will execute the event `OnStreamReceived`. You can attach a callback to this event to execute code that reacts when you receive a new stream. For example, the following code prints the `StreamId` for each stream received by that Topic: + + ``` cs + topicConsumer.OnStreamReceived += (topic, newStream) => + { + Console.WriteLine($"New stream read: {newStream.StreamId}"); + }; + + topicConsumer.Subscribe(); + ``` + + !!! tip + + The `Subscribe` method starts consuming streams and data from your topic. You should do this after you’ve registered callbacks for all the events you want to listen to. `App.run()` can also be used for this and provides other benefits. Find out more about [App.run()](app-management.md). + +## Subscribing to time-series data + +### TimeseriesData format + +`TimeseriesData` is the formal class in Quix Streams that represents a time-series data packet in memory. The format consists of a list of timestamps, with their corresponding parameter names and values for each timestamp. + +You can imagine a `TimeseriesData` as a table where the `Timestamp` is the first column of that table, and where the parameters are the columns for the values of that table. + +The following table shows an example: + +| Timestamp | Speed | Gear | +| --------- | ----- | ---- | +| 1 | 120 | 3 | +| 2 | 123 | 3 | +| 3 | 125 | 3 | +| 6 | 110 | 2 | + +=== "Python" + + You can subscribe to time-series data from streams using the `on_data_received` callback of the `StreamConsumer` instance. In the following example, you consume and print the first timestamp and value of the parameter `ParameterA` received in the [TimeseriesData](#timeseriesdata-format) packet: + + ``` python + from quixstreams import TopicConsumer, StreamConsumer, TimeseriesData + + def on_stream_received_handler(stream_received: StreamConsumer): + stream_received.timeseries.on_data_received = on_timeseries_data_received_handler + + def on_timeseries_data_received_handler(stream: StreamConsumer, data: TimeseriesData): + with data: + timestamp = data.timestamps[0].timestamp + num_value = data.timestamps[0].parameters['ParameterA'].numeric_value + print("ParameterA - " + str(timestamp) + ": " + str(num_value)) + + topic_consumer.on_stream_received = on_stream_received_handler + topic_consumer.subscribe() + ``` + +=== "C\#" + + You can subscribe to time-series data from streams using the `OnDataReceived` event of the `StreamConsumer` instance. For instance, in the following example we consume and print the first timestamp and value of the parameter `ParameterA` received in the [TimeseriesData](#timeseriesdata-format) packet: + + ``` cs + topicConsumer.OnStreamReceived += (topic, streamConsumer) => + { + streamConsumer.Timeseries.OnDataReceived += (sender, args) => + { + var timestamp = args.Data.Timestamps[0].Timestamp; + var numValue = args.Data.Timestamps[0].Parameters["ParameterA"].NumericValue; + Console.WriteLine($"ParameterA - {timestamp}: {numValue}"); + }; + }; + + topicConsumer.Subscribe(); + ``` + +!!! note + + `subscribe()` starts consuming from the topic however, `App.run()` can also be used for this and provides other benefits. + + Find out more about [App.run()](app-management.md). + +Quix Streams supports numeric, string, and binary value types. You should use the correct property depending of the value type of your parameter: + +=== "Python" + + - `numeric_value`: Returns the numeric value of the parameter, represented as a `float` type. + - `string_value`: Returns the string value of the parameter, represented as a `string` type. + - `binary_value`: Returns the binary value of the parameter, represented as a `bytearray` type. + +=== "C\#" + + - `NumericValue`: Returns the numeric value of the parameter, represented as a `double` type. + - `StringValue`: Returns the string value of the parameter, represented as a `string` type. + - `BinaryValue`: Returns the binary value of the parameter, represented as an array of `byte`. + +This is a simple example showing how to consume `Speed` values of the `TimeseriesData` used in the previous example: + +=== "Python" + + ``` python + for ts in data.timestamps: + timestamp = ts.timestamp_nanoseconds + numValue = ts.parameters['Speed'].numeric_value + print("Speed - " + str(timestamp) ": " + str(numValue)) + ``` + +=== "C\#" + + ``` cs + foreach (var timestamp in data.Timestamps) + { + var timestamp = timestamp.TimestampNanoseconds; + var numValue = timestamp.Parameters["Speed"].NumericValue; + Console.WriteLine($"Speed - {timestamp}: {numValue}"); + } + ``` + +The output from this code is as follows: + +``` console +Speed - 1: 120 +Speed - 2: 123 +Speed - 3: 125 +Speed - 6: 110 +``` + +### pandas DataFrame format + +If you use the Python version of Quix Streams you can use [pandas DataFrame](features/data-frames.md) for consuming and publishing time-series data. Use the callback `on_dataframe_received` instead of `on_data_received` when consuming from a stream: + +``` python +from quixstreams import TopicConsumer, StreamConsumer + +def on_stream_received_handler(stream_received: StreamConsumer): + stream_received.timeseries.on_dataframe_received = on_dataframe_received_handler + +def on_dataframe_received_handler(stream: StreamConsumer, df: pd.DataFrame): + print(df.to_string()) + +topic_consumer.on_stream_received = on_stream_received_handler +topic_consumer.subscribe() +``` + +Alternatively, you can always convert a [TimeseriesData](#timeseriesdata-format) to a pandas `DataFrame` using the method `to_dataframe`: + +``` python +from quixstreams import TopicConsumer, StreamConsumer, TimeseriesData + +def on_stream_received_handler(stream_received: StreamConsumer): + stream_received.timeseries.on_data_received = on_timeseries_data_received_handler + +def on_timeseries_data_received_handler(stream: StreamConsumer, data: TimeseriesData): + with data: + # consume from input stream + df = data.to_dataframe() + print(df.to_string()) + +topic_consumer.on_stream_received = on_stream_received_handler +topic_consumer.subscribe() +``` + +!!! tip + + The conversions from [TimeseriesData](#timeseriesdata-format) to pandas `DataFrame` have an intrinsic cost overhead. For high-performance models using pandas `DataFrame`, you should use the `on_dataframe_received` callback provided by the library, which is optimized to do as few conversions as possible. + +### Raw data format + +In addition to the `TimeseriesData` and pandas `DataFrame` formats (Python only), there is also the raw data format. You can use the `on_raw_received` callback (Python), or `OnRawRceived` event (C#) to handle this data format, as demonstrated in the following code: + +=== "Python" + + ``` python + from quixstreams import TopicConsumer, StreamConsumer, TimeseriesDataRaw + + def on_stream_received_handler(stream_received: StreamConsumer): + stream_received.timeseries.on_raw_received = on_timeseries_raw_received_handler + + def on_timeseries_raw_received_handler(stream: StreamConsumer, data: TimeseriesDataRaw): + with data: + # consume from input stream + print(data) + + topic_consumer.on_stream_received = on_stream_received_handler + topic_consumer.subscribe() + ``` + +=== "C\#" + + In C#, you typically use the raw format when you want to maximize performance: + + ``` cs + receivedStream.Timeseries.OnRawReceived += (sender, args) => + { + streamWriter.Timeseries.Publish(args.Data); + }; + ``` + +If you are developing in Python you will typically use either `TimeseriesData` or `DataFrame`. In C# `TimeseriesDataRaw` is mainly used for optimizing performance. + +### Using a Buffer + +Quix Streams provides you with an optional programmable buffer which you can configure to your needs. Using buffers to consume data enables you to process data in batches according to your needs. The buffer also helps you to develop models with a high-performance throughput. + +=== "Python" + You can use the `buffer` property embedded in the `timeseries` property of your `stream`, or create a separate instance of that buffer using the `create_buffer` method: + + ``` python + buffer = newStream.timeseries.create_buffer() + ``` + +=== "C\#" + You can use the `Buffer` property embedded in the `Timeseries` property of your `stream`, or create a separate instance of that buffer using the `CreateBuffer` method: + + ``` cs + var buffer = newStream.Timeseries.CreateBuffer(); + ``` + +You can configure a buffer’s input requirements using built-in properties. For example, the following configuration means that the Buffer will release a packet when the time span between first and last timestamp inside the buffer reaches 100 milliseconds: + +=== "Python" + + ``` python + buffer.time_span_in_milliseconds = 100 + ``` + +=== "C\#" + + ``` cs + buffer.TimeSpanInMilliseconds = 100; + ``` + +Consuming data from that buffer is achieved by using callbacks (Python) or events (C#). The buffer uses the same callbacks and events as when consuming without the buffer. For example, the following code prints the `ParameterA` value of the first timestamp of each packet released from the buffer: + +=== "Python" + + ``` python + from quixstreams import TopicConsumer, StreamConsumer, TimeseriesData + + def on_data_released_handler(stream: StreamConsumer, data: TimeseriesData): + with data: + timestamp = data.timestamps[0].timestamp + num_value = data.timestamps[0].parameters['ParameterA'].numeric_value + print("ParameterA - " + str(timestamp) + ": " + str(num_value)) + + buffer.on_data_released = on_data_released_handler + # buffer.on_dataframe_released and other callbacks are also available, check consuming without buffer for more info + ``` + +=== "C\#" + + ``` cs + buffer.OnDataReleased += (sender, args) => + { + var timestamp = ags.Data.Timestamps[0].Timestamp; + var numValue = ags.Data.Timestamps[0].Parameters["ParameterA"].NumericValue; + Console.WriteLine($"ParameterA - {timestamp}: {numValue}"); + }; + ``` + +Other callbacks are available in addition to `on_data_released` (for `TimeseriesData`), including `on_dataframe_released` (for pandas `DataFrame`) and `on_raw_released` (for `TimeseriesDataRaw`). You use the callback appropriate to your stream data format. + +You can configure multiple conditions to determine when the buffer has to release data, if any of these conditions become true, the buffer will release a new packet of data and that data is cleared from the buffer: + +=== "Python" + + - `buffer.buffer_timeout`: The maximum duration in milliseconds for which the buffer will be held before releasing the data. A packet of data is released when the configured timeout value has elapsed from the last data received in the buffer. + - `buffer.packet_size`: The maximum packet size in terms of number of timestamps. Each time the buffer has this amount of timestamps, the packet of data is released. + - `buffer.time_span_in_nanoseconds`: The maximum time between timestamps in nanoseconds. When the difference between the earliest and latest buffered timestamp surpasses this number, the packet of data is released. + - `buffer.time_span_in_milliseconds`: The maximum time between timestamps in milliseconds. When the difference between the earliest and latest buffered timestamp surpasses this number, the packet of data is released. Note: This is a millisecond converter on top of `time_span_in_nanoseconds`. They both work with the same underlying value. + - `buffer.custom_trigger_before_enqueue`: A custom function which is invoked **before** adding a new timestamp to the buffer. If it returns true, the packet of data is released before adding the timestamp to it. + - `buffer.custom_trigger`: A custom function which is invoked **after** adding a new timestamp to the buffer. If it returns true, the packet of data is released with the entire buffer content. + - `buffer.filter`: A custom function to filter the incoming data before adding it to the buffer. If it returns true, data is added, otherwise it isn’t. + +=== "C\#" + + - `Buffer.BufferTimeout`: The maximum duration in milliseconds for which the buffer will be held before releasing the data. A packet of data is released when the configured timeout value has elapsed from the last data received in the buffer. + - `Buffer.PacketSize`: The maximum packet size in terms of number of timestamps. Each time the buffer has this amount of timestamps, the packet of data is released. + - `Buffer.TimeSpanInNanoseconds`: The maximum time between timestamps in nanoseconds. When the difference between the earliest and latest buffered timestamp surpasses this number, the packet of data is released. + - `Buffer.TimeSpanInMilliseconds`: The maximum time between timestamps in milliseconds. When the difference between the earliest and latest buffered timestamp surpasses this number, the packet of data is released. Note: This is a millisecond converter on top of `TimeSpanInNanoseconds`. They both work with the same underlying value. + - `Buffer.CustomTriggerBeforeEnqueue`: A custom function which is invoked **before** adding a new timestamp to the buffer. If it returns true, the packet of data is released before adding the timestamp to it. + - `Buffer.CustomTrigger`: A custom function which is invoked **after** adding a new timestamp to the buffer. If it returns true, the packet of data is released with the entire buffer content. + - `Buffer.Filter`: A custom function to filter the incoming data before adding it to the buffer. If it returns true, data is added, otherwise it isn’t. + +#### Examples + +The following buffer configuration sends data every 100ms or, if no data is buffered in the 1 second timeout period, it will empty the buffer and send the pending data anyway: + +=== "Python" + + ``` python + stream.timeseries.buffer.packet_size = 100 + stream.timeseries.buffer.buffer_timeout = 1000 + ``` + +=== "C\#" + + ``` cs + stream.Timeseries.Buffer.PacketSize = 100; + stream.Timeseries.Buffer.BufferTimeout = 1000; + ``` + +The following buffer configuration sends data every 100ms window, or if critical data arrives: + +=== "Python" + + ``` python + buffer.time_span_in_milliseconds = 100 + buffer.custom_trigger = lambda data: data.timestamps[0].tags["is_critical"] == 'True' + ``` + +=== "C\#" + + ``` cs + stream.Timeseries.Buffer.TimeSpanInMilliseconds = 100; + stream.Timeseries.Buffer.CustomTrigger = data => data.Timestamps[0].Tags["is_critical"] == "True"; + ``` + +## Subscribing to events + +`EventData` is the formal class in Quix Streams which represents an Event data packet in memory. `EventData` is meant to be used when the data is intended to be consumed only as single unit, such as JSON payload where properties can't be converted to individual parameters. `EventData` can also be better for non-standard changes, such as when a machine shutting down publishes an event named `ShutDown`. + +!!! tip + + If your data source generates data at regular time intervals, or the information can be organized in a fixed list of Parameters, the [TimeseriesData](#timeseriesdata-format) format is a better fit for your time-series data. + +### EventData format + +`EventData` consists of a record with a `Timestamp`, an `EventId` and an `EventValue`. + +You can imagine a list of `EventData` instances as a table of three columns where the `Timestamp` is the first column of that table and the `EventId` and `EventValue` are the second and third columns, as shown in the following table: + +| Timestamp | EventId | EventValue | +| --------- | ----------- | -------------------------- | +| 1 | failure23 | Gearbox has a failure | +| 2 | box-event2 | Car has entered to the box | +| 3 | motor-off | Motor has stopped | +| 6 | race-event3 | Race has finished | + +Consuming events from a stream is similar to consuming timeseries data. In this case, the library does not use a buffer, but the way you consume Event Data from a stream is similar: + +=== "Python" + from quixstreams import TopicConsumer, StreamConsumer, EventData + + ``` python + def on_event_data_received_handler(stream: StreamConsumer, data: EventData): + with data: + print("Event consumed for stream. Event Id: " + data.id) + + stream_received.events.on_data_received = on_event_data_received_handler + ``` + +=== "C\#" + + ``` cs + newStream.Events.OnDataReceived += (stream, args) => + { + Console.WriteLine($"Event received for stream. Event Id: {args.Data.Id}"); + }; + ``` + +This generates the following output: + +``` console +Event consumed for stream. Event Id: failure23 +Event consumed for stream. Event Id: box-event2 +Event consumed for stream. Event Id: motor-off +Event consumed for stream. Event Id: race-event3 +``` + +## Responding to changes in stream properties + +If the properties of a stream are changed, the consumer can detect this and handle it using the `on_changed` method. + +You can write the handler as follows: + +=== "Python" + + ``` python + def on_stream_properties_changed_handler(stream_consumer: qx.StreamConsumer): + print('stream properties changed for stream: ', stream_consumer.stream_id) + ``` + +=== "C\#" + + ``` cs + streamConsumer.Properties.OnChanged += (sender, args) => + { + Console.WriteLine($"Properties changed for stream: {streamConsumer.StreamId}"); + } + ``` + +Then register the properties change handler: + +=== "Python" + + ``` python + def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.events.on_data_received = on_event_data_received_handler + stream_consumer.properties.on_changed = on_stream_properties_changed_handler + ``` + +=== "C\#" + + For C#, locate the properties changed handler inside the `OnStreamReceived` callback, for example: + + ``` cs + topicConsumer.OnStreamReceived += (topic, streamConsumer) => + { + streamConsumer.Timeseries.OnDataReceived += (sender, args) => + { + Console.WriteLine("Data received"); + }; + + streamConsumer.Properties.OnChanged += (sender, args) => + { + Console.WriteLine($"Properties changed for stream: {streamConsumer.StreamId}"); + } + + }; + + topicConsumer.Subscribe(); + ``` + +You can keep a copy of the properties if you need to find out which properties have changed. + +## Responding to changes in parameter definitions + +It is possible to handle changes in [parameter definitions](./publish.md#parameter-definitions). Parameter definitions are metadata attached to data in a stream. The `on_definitions_changed` event is linked to an appropriate event handler, as shown in the following example code: + +=== "Python" + + ``` python + def on_definitions_changed_handler(stream_consumer: qx.StreamConsumer): + # handle change in definitions + + + def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.events.on_data_received = on_event_data_received_handler + stream_consumer.events.on_definitions_changed = on_definitions_changed_handler + ``` + +=== "C\#" + + ``` cs + topicConsumer.OnStreamReceived += (topic, streamConsumer) => + { + streamConsumer.Events.OnDataReceived += (sender, args) => + { + Console.WriteLine("Data received"); + }; + + streamConsumer.Events.OnDefinitionsChanged += (sender, args) => + { + Console.WriteLine("Definitions changed"); + }; + + }; + + topicConsumer.Subscribe(); + ``` + +## Committing / checkpointing + +It is important to be aware of the commit concept when working with a broker. Committing enables you to mark how far data has been processed, also known as creating a [checkpoint](kafka.md#checkpointing). In the event of a restart or rebalance, the client only processes messages from the last committed position. Commits are completed for each consumer group, so if you have several consumer groups in use, they do not affect each another when committing. + +!!! tip + + Commits are done at a partition level when you use Kafka as a message broker. Streams that belong to the same partition are committed at the same time using the same position. Quix Streams currently does not expose the option to subscribe to only specific partitions of a topic, but commits will only ever affect partitions that are currently assigned to your client. + + Partitions and the Kafka rebalancing protocol are internal details of the Kafka implementation of Quix Streams. You can learn more about the Streaming Context feature of the library [here](features/streaming-context.md). + +### Automatic committing + +By default, Quix Streams automatically commits processed messages at a regular default interval, which is every 5 seconds or 5,000 messages, whichever happens sooner. However, this is subject to change. + +If you need to use different automatic commit intervals, use the following code: + +=== "Python" + + ``` python + from quixstreams import CommitOptions + + commit_settings = CommitOptions() + commit_settings.commit_every = 100 # note, you can set this to None + commit_settings.commit_interval = 500 # note, you can set this to None + commit_settings.auto_commit_enabled = True + topic_consumer = client.get_topic_consumer('yourtopic', commit_settings=commit_settings) + ``` + +=== "C\#" + + ``` cs + var topicConsumer = client.GetTopicConsumer(topic, consumerGroup, new CommitOptions() + { + CommitEvery = 100, + CommitInterval = 500, + AutoCommitEnabled = true // optional, defaults to true + }); + ``` + +The code above commits every 100 processed messages or 500 ms, whichever is sooner. + +### Manual committing + +Some use cases need manual committing to mark completion of work, for example when you wish to batch process data, so the frequency of commit depends on the data. This can be achieved by first enabling manual commit for the topic: + +=== "Python" + + ``` python + from quixstreams import CommitMode + + topic_consumer = client.get_topic_consumer('yourtopic', commit_settings=CommitMode.Manual) + ``` + +=== "C\#" + + ``` cs + client.GetTopicConsumer(topic, consumerGroup, CommitMode.Manual); + ``` + +Then, whenever your commit condition is fulfilled, call: + +=== "Python" + + ``` python + topic_consumer.commit() + ``` + +=== "C\#" + + ``` cs + topicConsumer.Commit(); + ``` + +The previous code commits parameters, events, or metadata that is consumed and served to you from the topic you subscribed to, up to this point. + +### Committed and committing events + +=== "Python" + + Whenever a commit completes, a callback is raised that can be connected to a handler. This callback is invoked for both manual and automatic commits. You can set the callback using the following code: + + ``` python + from quixstreams import TopicConsumer + + def on_committed_handler(topic_consumer: TopicConsumer): + # your code doing something when committed to broker + + topic_consumer.on_committed = on_committed_handler + ``` + +=== "C\#" + + Whenever a commit completes, an event is raised that can be connected to a handler. This event is raised for both manual and automatic commits. You can subscribe to this event using the following code: + + ``` cs + topicConsumer.OnCommitted += (sender, args) => + { + //... your code … + }; + ``` + +While the `on_committed` event is triggered once the data has been committed, there is also the `on_committing` event which is triggered at the beginning of the commit cycle, should you need to carry out other tasks before the data is committed. + +### Auto offset reset + +You can control the offset that data is received from by optionally specifying `AutoOffsetReset` when you open the topic. + +When setting the `AutoOffsetReset` you can specify one of three options: + +| Option | Description | +| -------- | ---------------------------------------------------------------- | +| Latest | Receive only the latest data as it arrives, dont include older data | +| Earliest | Receive from the beginning, that is, as much as possible | +| Error | Throws exception if no previous offset is found | + +The default option is `Latest`. + +=== "Python" + + ``` python + topic_consumer = client.get_topic_consumer(test_topic, auto_offset_reset=AutoOffsetReset.Latest) + or + topic_consumer = client.get_topic_consumer(test_topic, auto_offset_reset=AutoOffsetReset.Earliest) + ``` + +=== "C\#" + + ``` cs + var topicConsumer = client.GetTopicConsumer("MyTopic", autoOffset: AutoOffsetReset.Latest); + or + var topicConsumer = client.GetTopicConsumer("MyTopic", autoOffset: AutoOffsetReset.Earliest); + ``` + +## Revocation + +When working with a broker, you have a certain number of topic streams assigned to your consumer. Over the course of the client’s lifetime, there may be several events causing a stream to be revoked, like another client joining or leaving the consumer group, so your application should be prepared to handle these scenarios in order to avoid data loss and/or avoidable reprocessing of messages. + +!!! tip + + Kafka revokes entire partitions, but Quix Streams makes it easy to determine which streams are affected by providing two events you can listen to. + + Partitions and the Kafka rebalancing protocol are internal details of the Kafka implementation of Quix Streams. Quix Streams abstracts these details in the [Streaming Context](features/streaming-context.md) feature. + +### Streams revoking + +One or more streams are about to be revoked from your client, but you have a limited time frame, according to your broker configuration, to react to this and optionally commit to the broker: + +=== "Python" + + ``` python + def on_revoking_handler(topic_consumer: TopicConsumer): + # your code + + topic_consumer.on_revoking = on_revoking_handler + ``` + +=== "C\#" + + ``` cs + topicConsumer.OnRevoking += (sender, args) => + { + // ... your code ... + }; + ``` + +### Streams revoked + +One or more streams are revoked from your client. You can no longer commit to these streams, you can only handle the revocation in your client: + +=== "Python" + + ``` python + from quixstreams import StreamConsumer + + def on_streams_revoked_handler(topic_consumer: TopicConsumer, streams: [StreamConsumer]): + for stream in streams: + print("Stream " + stream.stream_id + " got revoked") + + topic_consumer.on_streams_revoked = on_streams_revoked_handler + ``` + +=== "C\#" + + ``` cs + topicConsumer.OnStreamsRevoked += (sender, revokedStreams) => + { + // revoked streams are provided to the handler + }; + ``` + +## Stream closure + +=== "Python" + + You can detect stream closure with the `on_stream_closed` callback which has the stream and the `StreamEndType` to help determine the closure reason if required. + + ``` python + def on_stream_closed_handler(stream: StreamConsumer, end_type: StreamEndType): + print("Stream closed with {}".format(end_type)) + + stream_received.on_stream_closed = on_stream_closed_handler + ``` + +=== "C\#" + + You can detect stream closure with the stream closed event which has the sender and the `StreamEndType` to help determine the closure reason if required. + + ``` cs + topicConsumer.OnStreamReceived += (topic, streamConsumer) => + { + streamConsumer.OnStreamClosed += (reader, args) => + { + Console.WriteLine("Stream closed with {0}", args.EndType); + }; + }; + ``` + +The `StreamEndType` can be one of: + +| StreamEndType | Description | +| ------------- | ------------------------------------------------------------------- | +| Closed | The stream was closed normally | +| Aborted | The stream was aborted by your code for your own reasons | +| Terminated | The stream was terminated unexpectedly while data was being written | + +## Minimal example + +This is a minimal code example you can use to receive data from a topic using Quix Streams: + +=== "Python" + + ``` python + from quixstreams import * + + client = KafkaStreamingClient('127.0.0.1:9092') + + topic_consumer = client.get_topic_consumer(TOPIC_ID) + + # Consume streams + def on_stream_received_handler(stream_received: StreamConsumer): + buffer = stream_received.timeseries.create_buffer() + buffer.on_data_released = on_data_released_handler + + def on_data_released_handler(stream: StreamConsumer, data: TimeseriesData): + with data: + df = data.to_dataframe() + print(df.to_string()) + + # Hook up events before subscribing to avoid losing out on any data + topic_consumer.on_stream_received = on_stream_received_handler + + # Hook up to termination signal (for docker image) and CTRL-C + print("Listening to streams. Press CTRL-C to exit.") + + # Handle graceful exit + App.run() + ``` + + Find out more about [App.run()](app-management.md) + +=== "C\#" + + ``` cs + using System; + using System.Linq; + using System.Threading; + using QuixStreams.Streaming; + using QuixStreams.Streaming.Configuration; + using QuixStreams.Streaming.Models; + + + namespace ReadHelloWorld + { + class Program + { + /// + /// Main will be invoked when you run the application + /// + static void Main() + { + // Create a client which holds generic details for creating input and output topics + var client = new KafkaStreamingClient("127.0.0.1:9092") + + using var topicConsumer = client.GetTopicConsumer(TOPIC_ID); + + // Hook up events before subscribing to avoid losing out on any data + topicConsumer.OnStreamReceived += (topic, streamConsumer) => + { + Console.WriteLine($"New stream received: {streamConsumer.StreamId}"); + + var buffer = streamConsumer.Timeseries.CreateBuffer(); + + buffer.OnDataReleased += (sender, args) => + { + Console.WriteLine($"ParameterA - {ags.Data.Timestamps[0].Timestamp}: {ags.Data.Timestamps.Average(a => a.Parameters["ParameterA"].NumericValue)}"); + }; + }; + + Console.WriteLine("Listening for streams"); + + // Hook up to termination signal (for docker image) and CTRL-C and open streams + App.Run(); + + Console.WriteLine("Exiting"); + } + } + } + ``` + +## Subscribing to raw Kafka messages + +Quix Streams uses an internal protocol which is both data and speed optimized, but you do need to use the library for both the producer and consumer. Custom formats need to be handled manually. To enable this, the library provides the ability to [publish](publish.md#publish-raw-kafka-messages) and [subscribe](subscribe.md#subscribe-raw-kafka-messages) to the raw, unformatted messages, and to work with them as bytes. This gives you the means to implement the protocol as needed and convert between formats. + +=== "Python" + + ``` python + from quixstreams import RawTopicConsumer, RawMessage + + raw_consumer = client.create_raw_topic_consumer(TOPIC_ID) + + def on_message_received_handler(topic: RawTopicConsumer, msg: RawMessage): + #bytearray containing bytes received from kafka + data = msg.value + + #broker metadata as dict + meta = msg.metadata + + raw_consumer.on_message_received = on_message_received_handler + raw_consumer.subscribe() # or use App.run() + ``` + +=== "C\#" + + ``` cs + var rawConsumer = client.GetRawTopicConsumer(TOPIC_ID) + + rawConsumer.OnMessageRead += (sender, message) => + { + var data = (byte[])message.Value; + }; + + rawConsumer.Subscribe() // or use App.Run() + ``` diff --git a/temp_dir/client-library/using.md b/temp_dir/client-library/using.md new file mode 100644 index 00000000..5e718c43 --- /dev/null +++ b/temp_dir/client-library/using.md @@ -0,0 +1,312 @@ +# Using Quix Streams + +In the following documentation you will learn how to use Quix Streams to perform two types of data processing: + +1. **Stateless processing** - Here one message is processed at a time, and the message received contains all required data for processing. No state needs to be preserved between messages, or between replicas. The data from the message is used to calculate new information, which is then published to the output stream. +2. **Stateful processing** - This is where you need to keep track of data between messages, such as keeping a running total of a variable. This is more complicated as state needs to be preserved between messages, and potentially between replicas, where multiple replicas are deployed. In addition, state may need to be preserved in the event of the failure of a deployment - Quix Streams supports checkpointing as a way to enable this. + +The following sections will explore these methods of data processing in more detail. + +## Topics, streams, partitions, replicas, and consumer groups + +The main structure used for data organization in Quix is the topic. For example, the topic might be `iot-telemetry`. To enable for horizontal scaling, a topic is typically divided into multiple streams. You may have multiple devices, or sources, writing data into a topic, so to ensure scaling and message ordering, each source writes into its own stream. Device 1 would write to stream 1, and device 2 to stream 2 and so on. This is the idea of [stream context](./features/streaming-context.md). + +In some use cases you may want to aggregate data beyond the stream context of a source. This can be done by writing data to new streams in the pipeline, based on a different key. For example, imagine a scenario where invoices are being streamed from stores, and where each stream is based on `StoreId`. Now, let's say you want to calculate totals of a specific item sold across all stores (streams). To do this, you can create a transform that first writes invoices into new streams based on `StockCode`, and then another transform can perform aggregation for each of these `StockCode` streams, in order to calculate how much of each item was sold. + +Quix Streams ensures that stream context is preserved, that is, messages inside one stream are always published to the same single partition. This means that inside one stream, a consumer can rely on the order of messages. A partition can contain multiple streams, but a stream is always confined to one partition. + +It is possible to organize the code that processes the streams in a topic using the idea of a consumer group. This indicates to the broker that you will process the topic with all available replicas in the consumer group, sharing the processing of all streams in the topic. Horizontal scaling occurs automatically, because when you deploy multiple replicas in a consumer group, a stream (or group of streams) is assigned to a replica. For example, if there are three streams and three replicas, each replica will process a single stream. This is illustrated in the following diagram: + +![Consumer group](./images/QuixStreamsConsumerGroup.png) + +If you had only one replica, it would need to process all streams in that topic. If you have three streams and two replicas, one replica would process two streams, and the other replica a single stream. If you don't specify a consumer group in your code, then all streams in a topic will be processed by all replicas. + +When you create the consumer you specify the consumer group as follows: + +```python +topic_consumer = client.get_topic_consumer(os.environ["input"], consumer_group = "empty-transformation") +``` + +Best practice is to make sure the consumer group name matches the name of the service. + +!!! warning + + If you don't specify a consumer group, then all messages in all streams in a topic will be processed by all replicas in the microservice deployment. + +For further information read about how [Quix Streams works with Kafka](kafka.md). + +## Stream data formats + +There are two main formats of stream data: + +1. **Event data** - in Quix Streams this is represented with the `qx.EventData` class. +2. **Time-series** - in Quix Streams this is represented with the `qx.TimeseriesData` class (and two other classes: one for Pandas data frame format, and one for raw Kafka data). + +Event data refers to data that is independent, whereas time-series data is a variable that changes over time. An example of event data is a financial transaction. It contains all data for the invoice, with a timestamp (the time of the transaction), but a financial transaction itself is not a variable you'd track over time. The invoice may itself contain time-series data though, such as the customer's account balance. + +Time-series data is a variable that is tracked over time, such as temperature from a sensor, or the g-forces in a racing car. + +Time-series data has three different representations in Quix Streams, to serve different use cases and developers. The underlying data that these three models represent is the same however. The three representations of that data are: + +1. Data (represented by the `qx.TimeseriesData` class) +2. Pandas Data Frame (represented by the `pd.DataFrame` class) +3. DataRaw (represented by the `qx.TimeseriesDataRaw` class) + +In the following sections of this documentation you'll learn about these formats. + +## Registering a callback for stream data + +When it comes to registering your callbacks, the first step is to register a stream callback that is invoked when data is first received on a stream. + +```python +topic_consumer.on_stream_received = on_stream_received_handler +``` + +The `on_stream_received_handler` is typically written to handle a specific data format on that stream. This is explained in the next section. + +!!! note + + This callback is invoked for each stream in a topic. This means you will have multiple instances of this callback invoked, if there are multiple streams. + +## Registering callbacks to handle data formats + +Specific callbacks are registered to handle each type of stream data. + +The following table documents which callbacks to register, depending on the type of stream data you need to handle: + +| Stream data format | Callback to register | +|----|----| +| Event data | `stream_consumer.events.on_data_received = on_event_data_received_handler` | +| Time-series data | `stream_consumer.timeseries.on_data_received = on_data_received_handler` | +| Time-series raw data | `stream_consumer.timeseries.on_raw_received = on_raw_received_handler` | +| Time-series data frame | `stream_consumer.timeseries.on_dataframe_received = on_dataframe_received_handler` | + +!!! note + + You can have multiple callbacks registered at the same time, but usually you would work with the data format most suited to your use case. For example, if the source was providing only event data, it only makes sense to register the event data callback. + +### Example of callback registration + +The following code sample demonstrates how to register a callback to handle data in the data frame format: + +```python +def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.timeseries.on_dataframe_received = on_dataframe_received_handler + +# subscribe to new streams being received. +# callback will only be registered for an active stream +topic_consumer.on_stream_received = on_stream_received_handler +``` + +In this example, when a stream becomes active, it registers a callback to handle time-series data in the data frame format. + +!!! note + + The callback is registered *only* for the specified stream, and only if that stream is active. + +## Converting time-series data + +Sometimes you need to convert time-series data into Panda data frames format for processing. That can be done using `to_dataframe`: + +```python +df = ts.to_dataframe() +``` + +## Stateless processing + +Now that you have learned about stream data formats and callbacks, the following example shows a simple data processor. This will be an example of stateless processing, where messages are processed one at a time, and contain all information required for that processing. + +This processor receives (consumes) data, processes it (transforms), and then publishes generated data (produces) on an output topic. This encapsulates the typical processing pipeline which consists of: + +1. Consumer (reads data) +2. Transformer (processes data) +3. Producer (writes data) + +The example code demonstrates this: + +```python +import quixstreams as qx +import pandas as pd + +client = qx.KafkaStreamingClient('127.0.0.1:9092') + +print("Opening consumer and producer topics") +topic_consumer = client.get_topic_consumer("quickstart-topic") +topic_producer = client.get_topic_producer("output-topic") + +def on_dataframe_received_handler(stream_consumer: qx.StreamConsumer, df: pd.DataFrame): + print(df) + # Calculate gForceTotal, the sum of vector absolute values + df["gForceTotal"] = df["gForceX"].abs() + df["gForceY"].abs() + df["gForceZ"].abs() + # write result data to output topic + topic_producer.get_or_create_stream(stream_consumer.stream_id).timeseries.publish(df) + +# read streams +def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.timeseries.on_dataframe_received = on_dataframe_received_handler + +topic_consumer.on_stream_received = on_stream_received_handler + +# Hook up to termination signal (for docker image) and CTRL-C +print("Listening to streams. Press CTRL-C to exit.") +# Handle graceful exit +qx.App.run() +``` + +In this example the stream data is inbound in Pandas `DataFrame` [format](https://pandas.pydata.org/docs/reference/frame.html){target=_blank}. + +Note that all information required to calculate `gForceTotal` is contained in the inbound data frame (the X, Y, and Z components of g-force). This is an example of stateless, or "one message at a time", processing: no state needs to be preserved between messages. + +Further, if multiple replicas were used here, it would require no changes to your code, as each replica, running its own instance of the callback for the target stream, would simply calculate a value for `gForceTotal` based on the data in the data frame it received. + +## Stateful processing + +With stateful processing, additional complexity is introduced, as data now needs to be preserved between messages, streams, and potentially replicas (where multiple replicas are deployed to handle multiple streams). + +## The problem of using global variables to track state + +There are problems with using global variables in your code to track state. The first is that callbacks are registered per-stream. This means that if you modify a global variable in a callback, it will be modified by all streams. + +For example, consider the following **problematic** code: + +```python +... + +gForceRunningTotal = 0.0 + +def on_dataframe_received_handler(stream_consumer: qx.StreamConsumer, df: pd.DataFrame): + print(df) + # Calculate gForceTotal, the sum of vector absolute values + df["gForceTotal"] = df["gForceX"].abs() + df["gForceY"].abs() + df["gForceZ"].abs() + + # Track running total of all g-forces + global gForceRunningTotal + gForceRunningTotal += df["gForceTotal"] + + # write result data to output topic + topic_producer.get_or_create_stream(stream_consumer.stream_id).timeseries.publish(df) +... +``` + +!!! warning + With the previous example code, all streams modify the global variable. + +You might think this would give you the running total for a stream, but because the callback is registered for each stream, you'd actually get all streams modifying the global. + +If you were running across multiple replicas, you'd get a running total for each replica, because each replica would have its own instance of the global variable. Again, the results would not be as you might expect. + +Let's say there were three streams and two replicas, you'd get the running total of two streams for one replica, and the running total for the third stream in the other replica. + +In most practical scenarios you'd want to track a running total per stream (say, total g-forces per race car), or perhaps for some variables a running total across all streams. Each of these scenarios is described in the followng sections. + +## Tracking running totals per stream + +Sometimes you might want to calculate a running total of a variable for a stream. For example, the total g-force a racing car is exposed to. If you use a global variable you'll lose the stream context. All streams will add to the value potentially, and each replica will also have its own instance of the global, further confusing matters. + +The solution is to use the stream context to preserve a running total for that stream only. To do this you can use the `stream_id` of a stream to identify its data. Consider the following example: + +```python +... +g_running_total_per_stream = {} + +def callback_handler (stream_consumer: qx.StreamConsumer, data: qx.TimeseriesData): + + if stream_consumer.stream_id not in g_running_total_per_stream: + g_running_total_per_stream[stream_consumer.stream_id] = 0 + + ... + + g_running_total_per_stream[stream_consumer.stream_id] += some_value + +... +``` + +!!! warning + With the previous example code, you should note that the running total will not be preserved in the event of system crashes or restarts. + +The key point here is that data is tracked per stream context. You keep running totals on a per-stream basis by using the stream ID, `stream_consumer.stream_id` to index a dictionary containing running totals for each stream. + +!!! note + + A stream will only ever be processed by one replica. + +## Handling system restarts and crashes + +One issue you may run into is that in-memory data is not persisted across instance restarts, shutdowns, and instance crashes. This can be mitigated by using the Quix Streams `LocalFileStorage` facility. This will ensure that specified variables are persisted on permanent storage, and this data is preserved across restarts, shutdowns, and system crashes. + +The following example code demonstrates a simple use of `LocalFileStorage` to **persist data across system restarts and crashes**: + +```python +... +g_running_total_per_stream = qx.InMemoryStorage(qx.LocalFileStorage()) + +def callback_handler (stream_consumer: qx.StreamConsumer, data: qx.TimeseriesData): + + if stream_consumer.stream_id not in g_running_total_per_stream: + g_running_total_per_stream[stream_consumer.stream_id] = 0 + + ... + + g_running_total_per_stream[stream_consumer.stream_id] += some_value + +# read streams +def on_stream_received_handler(stream_consumer: qx.StreamConsumer): + stream_consumer.timeseries.on_data_received = callback_handler + +topic_consumer.on_stream_received = on_stream_received_handler +topic_consumer.on_committed = g_running_total_per_stream.flush +... +``` + +This ensures that the variable `g_running_total_per_stream` is persisted, as periodically (default is 20 seconds) it is flushed to local file storage. + +If the system crashes (or is restarted), Kafka resumes message processing from the last committed message. This facility is built into Kafka. + +!!! tip + + For this facility to work in Quix Platform you need to enable the State Management feature. You can enable it in the `Deployment` dialog, where you can also specify the size of storage required. When using Quix Streams with a third-party broker such as Kafka, no configuration is required, and data is automatically stored on the local file system. + +## Tracking running totals across multiple streams + +Sometimes you want to track a running total across all streams in a topic. The problem is that when you scale using replicas, there is no way to share data between all replicas in a consumer group. + +The solution is to write the running total per stream (with stream ID) to an output topic. You can then have another processor in the pipeline to calculate total values from inbound messages. The following code demonstrates how to do this: + +```python +... +g_running_total_per_stream = qx.InMemoryStorage(qx.LocalFileStorage()) + +def callback_handler (stream_consumer: qx.StreamConsumer, data: qx.TimeseriesData): + + if stream_consumer.stream_id not in g_running_total_per_stream: + g_running_total_per_stream[stream_consumer.stream_id] = 0 + + ... + + g_running_total_per_stream[stream_consumer.stream_id] += some_value + data.add_value("RunningTotal", g_running_total_per_stream[stream_consumer.stream_id]) + + topic_producer.get_or_create_stream(stream_consumer.stream_id).timeseries.publish(data) +... +``` + +In this case the running total is published to its own stream in the output topic. The next service in the data processing pipeline would be able to sum all running totals across all streams in the output topic. + +Also, in this example, the running total is persisted in file storage, and so is preserved in the event of service restarts and system crashes. + +## Conclusion + +In this documentation you have learned: + +* How to perform stateless "one message at a time" processing. +* How to handle the situation where state needs to be preserved, and problems that can arise in naive code. +* How to persist state, so that your data is preserved in the event of restarts or crashes. + +## Next steps + +Continue your Quix Streams learning journey by reading the following more in-depth documentation: + +* [Publishing data](publish.md) +* [Subscribing to data](subscribe.md) +* [Processing data](process.md) +* [State management](state-management.md) diff --git a/temp_dir/client-library/versionmigration.md b/temp_dir/client-library/versionmigration.md new file mode 100644 index 00000000..70f1c9d3 --- /dev/null +++ b/temp_dir/client-library/versionmigration.md @@ -0,0 +1,496 @@ +# Migrating from previous versions + +Our goal is to minimize the occurrence of breaking changes, and if we do need to make them, we'll do so simultaneously. In cases where such changes are necessary, we'll provide migration steps from previous versions to assist in the transition. To prevent undue verbosity, we'll only show one difference unless it's language-specific, such as naming conventions (casing vs underscore). + +## 0.4.* -> 0.5.0 + +### The library is renamed + +For Python, the library is renamed to `quixstreams` from `quixstreaming`, while for C# the packages will be available under `QuixStreams.*` rather than `Quix.Sdk.*`. The latter also resulted in namespace changes. + +### Library availability + +Previously, the library was not open source and was distributed via our public feed. + +For Python it was done by using: + +``` +pip install quixstreaming --extra-index-url https://pkgs.dev.azure.com/quix-analytics/53f7fe95-59fe-4307-b479-2473b96de6d1/_packaging/public/pypi/simple/ +``` + +Now it should be installed from the official PyPi feed using: + +``` +pip install quixstreams +``` + +Quix currently publishes in-development versions to test PyPi, you can try these using: + +``` +pip install quixstreams --extra-index-url https://test.pypi.org/simple/ +``` + +**Note:** The original feed will be maintained for some time, but should be treated as deprecated. + +We are currently using our feed for C#, but we're in the process of developing our public NuGet packages, which will be made available shortly. + +``` +https://pkgs.dev.azure.com/quix-analytics/53f7fe95-59fe-4307-b479-2473b96de6d1/_packaging/public/nuget/v3/index.json +``` + +### StreamingClient renamed to KafkaStreamingClient + +We renamed the `StreamingClient` to be more specific to the technology it works with. + +### OutputTopic and InputTopic classes renamed to TopicProducer and TopicConsumer + +This also brought several other changes to the code, see them below: + +=== "Python before" + + ``` python + output_topic = client.open_output_topic(TOPIC) + input_topic = client.open_input_topic(TOPIC) + # !!! There was a significant modification made to `open_input_topic`, + # which changed its default behavior from using a consumer group named 'Default' + # with the `Earliest` offset to no consumer group and `Latest` offset. + ``` + +=== "Python after" + + ``` python + topic_producer = client.get_topic_producer(TOPIC) + topic_consumer = client.get_topic_consumer(TOPIC) + # !!! There was a significant modification made to `get_topic_consumer`, + # which changed its default behavior from using a consumer group named 'Default' + # with the `Earliest` offset to no consumer group and `Latest` offset. + ``` + +### Readers and Writers renamed to Consumers and Producers + +The modifications will have the most significant impact on Python code that includes type hints in functions or C# code that subscribes events using a method with a particular signature rather than a lambda expression. The alterations are as follows: + +- `StreamReader|Writer` -> `StreamConsumer|Producer` +- `StreamPropertiesReader|Writer` -> `StreamPropertiesConsumer|Producer` +- `StreamParametersReader|writer` -> `StreamTimeseriesConsumer|Producer` (see section below about `Parameters`->`TimeSeries` rename) +- `StreamEventsReader|Writer` -> `StreamEventsConsumer|Producer` +- `ParametersBufferReader|Writer` -> `TimeseriesConsumer|Producer` (see section below about `Parameters`->`TimeSeries` rename) + +### ParameterData renamed to TimeseriesData + +The class itself is renamed, see below for changes: + +=== "Python before" + + ``` python + from quixstreams import ParameterData + + data = ParameterData() + + data.add_timestamp_nanoseconds(1) \ + .add_value("Speed", 120) \ + .add_value("Gear", 3) + ``` + +=== "Python after" + + ``` python + from quixstreams import TimeseriesData + + data = TimeseriesData() + + data.add_timestamp_nanoseconds(1) \ + .add_value("Speed", 120) \ + .add_value("Gear", 3) + ``` + +And the property on streams is also renamed: + +=== "Python before" + + ``` python + stream.parameters.… + ``` + +=== "Python after" + + ``` python + stream.timeseries.… + ``` + +### pandas DataFrame changes + +All pandas DataFrames provided to you by callbacks or methods will expose the timestamp as 'timestamp' instead of 'time'. + +In addition `from|to_panda_frame` has been renamed to `from|to_dataframe`: + +=== "Python before" + + ``` python + data = ParameterData() + + data.add_timestamp_nanoseconds(1) \ + .add_value("Speed", 120) \ + .add_value("Gear", 3) + + df = data.to_panda_frame() + time_col = df['time'] + + ``` + +=== "Python after" + + ``` python + + data = TimeseriesData() + + data.add_timestamp_nanoseconds(1) \ + .add_value("Speed", 120) \ + .add_value("Gear", 3) + + df = data.to_dataframe() + timestamp_col = df['timestamp'] + ``` + +### .Write renamed to .Publish to be in sync with Producer + +=== "Python before" + + ``` python + stream.parameters.write(…) + + stream.parameters.buffer \ + .add_timestamp(datetime.utcnow()) \ + .add_value("parameter", 10) \ + .write() + + stream.events.write(…) + + raw_output_topic.write(…) + ``` + +=== "Python after" + + ``` python + stream.timeseries.publish(…) + + stream.timeseries.buffer \ + .add_timestamp(datetime.utcnow()) \ + .add_value("parameter", 10) \ + .publish() + + stream.events.publish(…) + + raw_topic_producer.publish(…) + ``` + +### .StartReading renamed to .Subscribe to be in sync with Producer + +=== "Python before" + + ``` python + input_topic.start_reading() + ``` + +=== "Python after" + + ``` python + topic_consumer.subscribe() + ``` + +### Event changes + +Certain callbacks have altered signatures, either in the name or number of arguments. In the case of C#, detecting these changes will be straightforward, and thus, the specifics will be omitted. + +Furthermore, in Python, event subscriptions (+=, -=) have been replaced with callback assignments. + +=== "Python before" + + ``` python + … the rest of your code, such as client and input/output creation + + def on_stream_received_handler(stream_read : StreamReader): + + buffer = stream_read.parameters.create_buffer() # or stream_read.parameters.buffer if don't want separate buffer with different filters and buffer condition + + # data event subscriptions + def on_parameter_pandas_dataframe_handler(data: pandas.DataFrame): + pass + + stream_read.parameters.on_read_pandas += on_parameters_pandas_dataframe_handler + buffer.on_read_pandas += on_parameters_pandas_dataframe_handler + + + def on_parameter_data_handler(data: ParameterData): + pass + + stream_read.parameters.on_read += on_parameter_data_handler + buffer.on_read += on_parameter_data_handler + + + def on_parameter_raw_data_handler(data: ParameterDataRaw): + pass + + stream_read.parameters.on_read_raw += on_parameter_raw_data_handler + buffer.on_read_raw += on_parameter_raw_data_handler + + def on_event_data_handler(data: EventData): + pass + + new_stream.events.on_read += on_event_data_handler + + + # metadata event subscriptions + def on_stream_closed_handler(end_type: StreamEndType): + pass + + stream_read.on_stream_closed += on_stream_closed_handler + + + def on_stream_properties_changed_handler(): + pass + + stream_read.properties.on_changed += on_stream_properties_changed_handler + + + def on_parameter_definitions_changed_handler(): + pass + + new_stream.parameters.on_definitions_changed += on_parameter_definitions_changed_handler + + + def on_event_definitions_changed_handler(): + pass + + new_stream.events.on_definitions_changed += on_event_definitions_changed_handler + + def on_package_received_handler(stream: StreamReader, package: StreamPackage): + pass + + new_stream.on_package_received += on_package_received_handler + + input_topic.on_stream_received += on_stream_received_handler + + … the rest of your code + ``` + +=== "Python after" + + ``` python + … the rest of your code, such as client and consumer/producer creation + + # Please note that in the new version, you'll have access to all the required scopes within the callback, + # eliminating the need to rely on the on_stream_received_handler's scope. This makes it simpler to define + # callbacks in other locations. Another example will be provided in a separate section, but here we'll + # maintain the previous structure for easier comprehension of the changes. + def on_stream_received_handler(stream_received : StreamConsumer): + + buffer = stream_received.timeseries.create_buffer() # or stream_received.timeseries.buffer if don't want separate buffer with different filters and buffer condition + + # data callback assignments + def on_dataframe_received_handler(stream: StreamConsumer, data: pandas.DataFrame): # Note the stream being available + pass + + stream_received.timeseries.on_dataframe_received = on_dataframe_received_handler # note the rename and it is no longer += + buffer.on_dataframe_released = on_dataframe_received_handler # note the rename and it is no longer += + + + def on_data_releasedorreceived_handler(stream: StreamConsumer, data: TimeseriesData): # Note the stream being available + pass + + stream_received.timeseries.on_data_received = on_data_releasedorreceived_handler # note the rename and it is no longer += + buffer.on_data_released = on_data_releasedorreceived_handler # note the rename and it is no longer += + + + def on_rawdata_releasedorreceived_handler(stream: StreamConsumer, data: TimeseriesDataRaw): # Note the stream being available + pass + + stream_received.timeseries.on_raw_received = on_rawdata_releasedorreceived_handler # note the rename and it is no longer += + buffer.on_raw_released = on_rawdata_releasedorreceived_handler # note the rename and it is no longer += + + def on_event_data_handler(stream: StreamConsumer, data: EventData): # Note the stream being available + pass + + new_stream.events.on_data_received = on_event_data_handler # note the rename and it is no longer += + + + # metadata callback assignments + def on_stream_closed_handler(stream: StreamConsumer, end_type: StreamEndType): # Note the stream being available + pass + + stream_received.on_stream_closed = on_stream_closed_handler # note it is no longer += + + + def on_stream_properties_changed_handler(stream: StreamConsumer): # Note the stream being available + pass + + stream_received.properties.on_changed = on_stream_properties_changed_handler # note it is no longer += + + + def on_parameter_definitions_changed_handler(stream: StreamConsumer): # Note the stream being available + pass + + new_stream.timeseries.on_definitions_changed = on_parameter_definitions_changed_handler # note it is no longer += + + + def on_event_definitions_changed_handler(stream: StreamConsumer): # Note the stream being available + pass + + new_stream.events.on_definitions_changed = on_event_definitions_changed_handler # note it is no longer += + + + def on_package_received_handler(stream: StreamConsumer, package: StreamPackage): + pass + + new_stream.on_package_received = on_package_received_handler # note it is no longer += + + input_topic.on_stream_received = on_stream_received_handler # note it is no longer += + + … the rest of your code + ``` + +### In Python topic is now available for the stream + +This, paired with the event changes (read above), enables you improve your callback setup. The code above can now be expressed as follows: + +``` python +… the rest of your code, such as client and consumer/producer creation + +def on_stream_received_handler(stream_received : StreamConsumer): + + buffer = stream_received.timeseries.create_buffer() # or stream_received.timeseries.buffer if don't want separate buffer with different filters and buffer condition + + # data callback assignments. + stream_received.timeseries.on_dataframe_received = on_dataframe_received_handler + buffer.on_dataframe_released = on_dataframe_received_handler + stream_received.timeseries.on_data_received = on_data_releasedorreceived_handler + buffer.on_data_released = on_data_releasedorreceived_handler + stream_received.timeseries.on_raw_received = on_rawdata_releasedorreceived_handler + buffer.on_raw_released = on_rawdata_releasedorreceived_handler + new_stream.events.on_data_received = on_event_data_handler + # metadata callback assignments + stream_received.on_stream_closed = on_stream_closed_handler + stream_received.properties.on_changed = on_stream_properties_changed_handler + new_stream.timeseries.on_definitions_changed = on_parameter_definitions_changed_handler + new_stream.events.on_definitions_changed = on_event_definitions_changed_handler + new_stream.on_package_received = on_package_received_handler + +input_topic.on_stream_received = on_stream_received_handler + +# Note that these could be in a different file completely, defined by other classes, having access to all context of the stream and topic it is for +def on_dataframe_received_handler(stream: StreamConsumer, data: pandas.DataFrame): + # do great things + stream.topic.commit() # or any other topic method/property + +def on_data_releasedorreceived_handler(stream: StreamConsumer, data: TimeseriesData): + pass + +def on_rawdata_releasedorreceived_handler(stream: StreamConsumer, data: TimeseriesDataRaw): + pass + +def on_event_data_handler(stream: StreamConsumer, data: EventData): + pass + +def on_stream_closed_handler(stream: StreamConsumer, end_type: StreamEndType): + pass + +def on_stream_properties_changed_handler(stream: StreamConsumer): + pass + +def on_parameter_definitions_changed_handler(stream: StreamConsumer): + pass + +def on_event_definitions_changed_handler(stream: StreamConsumer): + pass + +def on_package_received_handler(stream: StreamConsumer, package: StreamPackage): + pass + +… the rest of your code +``` + +### 'with' statement should be used with some classes in python + +Certain classes now use unmanaged resources, and to prevent memory leaks, we have incorporated the Python 'with' syntax for resource management. + +These are: + +- `EventData`: important to be disposed whenever manually created or received in callbacks. +- `TimeseriesData`: important to be disposed whenever manually created or received in callbacks. +- `TimeseriesDataRaw`: important to be disposed whenever manually created or received in callbacks. +- `StreamPackage`: important to be disposed whenever manually created or received in callbacks. +- `StreamConsumer`: also supports `dispose()` and automatically disposes when stream is closed. +- `StreamProducer`: also supports `dispose()` and automatically disposes when stream is closed. +- `TopicConsumer`: unless you're frequently subscribing to topics, this is not something you have to be too concerned about. +- `TopicProducer`: unless you're frequently subscribing to topics, this is not something you have to be too concerned about. + +Example code: + +``` python +… the rest of your code, such as client and consumer/producer creation + +def on_stream_received_handler(stream_received : StreamConsumer): + + # data callback assignments. + stream_received.timeseries.on_dataframe_received = on_dataframe_received_handler + stream_received.timeseries.on_data_received = on_data_releasedorreceived_handler + stream_received.timeseries.on_raw_received = on_rawdata_releasedorreceived_handler + new_stream.events.on_data_received = on_event_data_handler + # metadata callback assignments + stream_received.on_stream_closed = on_stream_closed_handler + stream_received.properties.on_changed = on_stream_properties_changed_handler + new_stream.timeseries.on_definitions_changed = on_parameter_definitions_changed_handler + new_stream.events.on_definitions_changed = on_event_definitions_changed_handler + new_stream.on_package_received = on_package_received_handler + +input_topic.on_stream_received = on_stream_received_handler + +# Please note that these could be defined in a separate file by other classes with access to the context of the stream and the associated topic. +def on_dataframe_received_handler(stream: StreamConsumer, data: pandas.DataFrame): + pfdata = TimeseriesData.from_panda_dataframe(data) + with pfdata: # should be used because TimeseriesData needs it + pass + +def on_data_releasedorreceived_handler(stream: StreamConsumer, data: TimeseriesData): + with data: + pass + +def on_rawdata_releasedorreceived_handler(stream: StreamConsumer, data: TimeseriesDataRaw): + with data: + pass + +def on_event_data_handler(stream: StreamConsumer, data: EventData): + with data: + pass + +… the rest of your code +``` + +### NumPy types no longer handled transparently + +Certain code may generate run-time errors such as: + +``` +Invalid type passed as parameter value +``` + +NumPy types such as `numpy.int64` and `numpy.float64` are no longer handled transparently. + +Where this occurs, the solution is to cast the type appropriately. For example, review the following example code snippet: + +```python +.add_value('num_docks_available', df_i_agg.loc[0, 'num_docks_available']) \ +``` + +This might generate the run-time error: + +``` +Invalid type passed as parameter value +``` + +Casting to `int` will prevent the run-time error: + +```python +.add_value('num_docks_available', int(df_i_agg.loc[0, 'num_docks_available'])) \ +``` +