From 83696c3a93974cf293d2edbd5737af29394c77f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Ole=20Sch=C3=BCmann?= Date: Tue, 15 Apr 2025 13:42:25 +0700 Subject: [PATCH 1/7] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 94aa692..afdfc26 100644 --- a/README.md +++ b/README.md @@ -1009,11 +1009,11 @@ Navigate to "MQTT Configuration" and change the "MQTT Nuki Hub Path" under "Basi ### The Nuki battery is draining quickly. -This often is a result of enabling "Register as app" when not using [Hybrid mode](/HYBRID.md) (Official MQTT / Nuki Hub co-existance).
+This often is a result of enabling "Nuki Bridge is running alongside Nuki Hub" when not using [Hybrid mode](/HYBRID.md) (Official MQTT / Nuki Hub co-existance).
Doing so will cause Nuki Hub to constantly query the lock and as such cause excessive battery drain.
-To prevent this behaviour, unpair Nuki Hub, disable "Register as app", and re-pair.
+To prevent this behaviour, unpair Nuki Hub, disable "Nuki Bridge is running alongside Nuki Hub", and re-pair.

-Never enable "Register as app" unless you intend to use a Nuki Bridge in addition to Nuki Hub or you are using Hybrid mode! +Never enable "Nuki Bridge is running alongside Nuki Hub" unless you intend to use a Nuki Bridge in addition to Nuki Hub or you are using Hybrid mode! ## Building from source Docker (Preferred)
From 7c7dd8a7a9cd6da913cec733d28f870b3ab99641 Mon Sep 17 00:00:00 2001 From: iranl Date: Tue, 15 Apr 2025 21:24:24 +0200 Subject: [PATCH 2/7] ArduinoJSON 7.4.1 --- lib/ArduinoJson/ArduinoJson.h | 2 +- lib/ArduinoJson/CHANGELOG.md | 17 +++ lib/ArduinoJson/CMakeLists.txt | 4 +- lib/ArduinoJson/LICENSE.txt | 2 +- lib/ArduinoJson/appveyor.yml | 2 +- .../JsonConfigFile/JsonConfigFile.ino | 2 +- .../JsonFilterExample/JsonFilterExample.ino | 2 +- .../JsonGeneratorExample.ino | 2 +- .../JsonHttpClient/JsonHttpClient.ino | 2 +- .../JsonParserExample/JsonParserExample.ino | 2 +- .../examples/JsonServer/JsonServer.ino | 2 +- .../examples/JsonUdpBeacon/JsonUdpBeacon.ino | 2 +- .../examples/MsgPackParser/MsgPackParser.ino | 2 +- .../ProgmemExample/ProgmemExample.ino | 2 +- .../examples/StringExample/StringExample.ino | 2 +- .../extras/ci/espidf/CMakeLists.txt | 2 +- .../extras/ci/espidf/main/CMakeLists.txt | 2 +- .../extras/ci/espidf/main/main.cpp | 2 +- lib/ArduinoJson/extras/fuzzing/CMakeLists.txt | 2 +- lib/ArduinoJson/extras/fuzzing/reproducer.cpp | 2 +- .../scripts/wandbox/JsonGeneratorExample.cpp | 2 +- .../scripts/wandbox/JsonParserExample.cpp | 2 +- .../scripts/wandbox/MsgPackParserExample.cpp | 2 +- lib/ArduinoJson/extras/tests/CMakeLists.txt | 2 +- .../extras/tests/Cpp17/CMakeLists.txt | 2 +- .../extras/tests/Cpp17/string_view.cpp | 2 +- .../extras/tests/Cpp20/CMakeLists.txt | 2 +- .../tests/Deprecated/BasicJsonDocument.cpp | 4 +- .../extras/tests/Deprecated/CMakeLists.txt | 2 +- .../tests/Deprecated/DynamicJsonDocument.cpp | 2 +- .../tests/Deprecated/StaticJsonDocument.cpp | 2 +- .../extras/tests/Deprecated/add.cpp | 2 +- .../extras/tests/Deprecated/containsKey.cpp | 2 +- .../tests/Deprecated/createNestedArray.cpp | 2 +- .../tests/Deprecated/createNestedObject.cpp | 2 +- .../extras/tests/Deprecated/macros.cpp | 2 +- .../extras/tests/Deprecated/memoryUsage.cpp | 2 +- .../extras/tests/Deprecated/shallowCopy.cpp | 2 +- .../extras/tests/FailingBuilds/CMakeLists.txt | 2 +- .../extras/tests/FailingBuilds/Issue978.cpp | 2 +- .../tests/FailingBuilds/assign_char.cpp | 2 +- .../FailingBuilds/deserialize_object.cpp | 2 +- .../tests/FailingBuilds/read_long_long.cpp | 2 +- .../tests/FailingBuilds/variant_as_char.cpp | 2 +- .../tests/FailingBuilds/write_long_long.cpp | 2 +- .../extras/tests/Helpers/Allocators.hpp | 2 +- .../extras/tests/Helpers/Arduino.h | 2 +- .../extras/tests/Helpers/CustomReader.hpp | 2 +- .../extras/tests/Helpers/Literals.hpp | 2 +- .../extras/tests/Helpers/api/Print.h | 14 +-- .../extras/tests/Helpers/api/Stream.h | 4 +- .../extras/tests/Helpers/api/String.h | 2 +- .../extras/tests/Helpers/avr/pgmspace.h | 2 +- .../tests/IntegrationTests/CMakeLists.txt | 2 +- .../tests/IntegrationTests/gbathree.cpp | 2 +- .../tests/IntegrationTests/issue772.cpp | 2 +- .../tests/IntegrationTests/openweathermap.cpp | 2 +- .../tests/IntegrationTests/round_trip.cpp | 2 +- .../extras/tests/JsonArray/CMakeLists.txt | 2 +- .../extras/tests/JsonArray/add.cpp | 2 +- .../extras/tests/JsonArray/clear.cpp | 2 +- .../extras/tests/JsonArray/compare.cpp | 2 +- .../extras/tests/JsonArray/copyArray.cpp | 2 +- .../extras/tests/JsonArray/equals.cpp | 2 +- .../extras/tests/JsonArray/isNull.cpp | 2 +- .../extras/tests/JsonArray/iterator.cpp | 2 +- .../extras/tests/JsonArray/nesting.cpp | 2 +- .../extras/tests/JsonArray/remove.cpp | 2 +- .../extras/tests/JsonArray/size.cpp | 2 +- .../extras/tests/JsonArray/subscript.cpp | 2 +- .../extras/tests/JsonArray/unbound.cpp | 2 +- .../tests/JsonArrayConst/CMakeLists.txt | 2 +- .../extras/tests/JsonArrayConst/equals.cpp | 2 +- .../extras/tests/JsonArrayConst/isNull.cpp | 2 +- .../extras/tests/JsonArrayConst/iterator.cpp | 2 +- .../extras/tests/JsonArrayConst/nesting.cpp | 2 +- .../extras/tests/JsonArrayConst/size.cpp | 2 +- .../extras/tests/JsonArrayConst/subscript.cpp | 2 +- .../tests/JsonDeserializer/CMakeLists.txt | 2 +- .../JsonDeserializer/DeserializationError.cpp | 2 +- .../extras/tests/JsonDeserializer/array.cpp | 2 +- .../JsonDeserializer/destination_types.cpp | 2 +- .../extras/tests/JsonDeserializer/errors.cpp | 2 +- .../extras/tests/JsonDeserializer/filter.cpp | 2 +- .../tests/JsonDeserializer/input_types.cpp | 4 +- .../extras/tests/JsonDeserializer/misc.cpp | 2 +- .../tests/JsonDeserializer/nestingLimit.cpp | 2 +- .../extras/tests/JsonDeserializer/number.cpp | 2 +- .../extras/tests/JsonDeserializer/object.cpp | 23 ++-- .../extras/tests/JsonDeserializer/string.cpp | 6 +- .../extras/tests/JsonDocument/CMakeLists.txt | 2 +- .../tests/JsonDocument/ElementProxy.cpp | 2 +- .../extras/tests/JsonDocument/MemberProxy.cpp | 2 +- .../extras/tests/JsonDocument/add.cpp | 2 +- .../extras/tests/JsonDocument/assignment.cpp | 2 +- .../extras/tests/JsonDocument/cast.cpp | 2 +- .../extras/tests/JsonDocument/clear.cpp | 2 +- .../extras/tests/JsonDocument/compare.cpp | 2 +- .../extras/tests/JsonDocument/constructor.cpp | 2 +- .../extras/tests/JsonDocument/isNull.cpp | 2 +- .../extras/tests/JsonDocument/nesting.cpp | 2 +- .../extras/tests/JsonDocument/overflowed.cpp | 2 +- .../extras/tests/JsonDocument/remove.cpp | 2 +- .../extras/tests/JsonDocument/set.cpp | 7 ++ .../extras/tests/JsonDocument/shrinkToFit.cpp | 2 +- .../extras/tests/JsonDocument/size.cpp | 2 +- .../extras/tests/JsonDocument/subscript.cpp | 2 +- .../extras/tests/JsonObject/CMakeLists.txt | 2 +- .../extras/tests/JsonObject/clear.cpp | 2 +- .../extras/tests/JsonObject/compare.cpp | 2 +- .../extras/tests/JsonObject/equals.cpp | 2 +- .../extras/tests/JsonObject/isNull.cpp | 2 +- .../extras/tests/JsonObject/iterator.cpp | 2 +- .../extras/tests/JsonObject/nesting.cpp | 2 +- .../extras/tests/JsonObject/remove.cpp | 2 +- .../extras/tests/JsonObject/set.cpp | 8 +- .../extras/tests/JsonObject/size.cpp | 2 +- .../extras/tests/JsonObject/std_string.cpp | 2 +- .../extras/tests/JsonObject/subscript.cpp | 2 +- .../extras/tests/JsonObject/unbound.cpp | 2 +- .../tests/JsonObjectConst/CMakeLists.txt | 2 +- .../extras/tests/JsonObjectConst/equals.cpp | 2 +- .../extras/tests/JsonObjectConst/isNull.cpp | 2 +- .../extras/tests/JsonObjectConst/iterator.cpp | 2 +- .../extras/tests/JsonObjectConst/nesting.cpp | 2 +- .../extras/tests/JsonObjectConst/size.cpp | 2 +- .../tests/JsonObjectConst/subscript.cpp | 2 +- .../tests/JsonSerializer/CMakeLists.txt | 2 +- .../tests/JsonSerializer/CustomWriter.cpp | 2 +- .../extras/tests/JsonSerializer/JsonArray.cpp | 2 +- .../tests/JsonSerializer/JsonArrayPretty.cpp | 2 +- .../tests/JsonSerializer/JsonObject.cpp | 2 +- .../tests/JsonSerializer/JsonObjectPretty.cpp | 2 +- .../tests/JsonSerializer/JsonVariant.cpp | 2 +- .../tests/JsonSerializer/std_stream.cpp | 2 +- .../tests/JsonSerializer/std_string.cpp | 2 +- .../extras/tests/JsonVariant/CMakeLists.txt | 2 +- .../extras/tests/JsonVariant/add.cpp | 2 +- .../extras/tests/JsonVariant/as.cpp | 17 ++- .../extras/tests/JsonVariant/clear.cpp | 2 +- .../extras/tests/JsonVariant/compare.cpp | 2 +- .../extras/tests/JsonVariant/converters.cpp | 2 +- .../extras/tests/JsonVariant/copy.cpp | 2 +- .../extras/tests/JsonVariant/is.cpp | 2 +- .../extras/tests/JsonVariant/isnull.cpp | 2 +- .../extras/tests/JsonVariant/misc.cpp | 2 +- .../extras/tests/JsonVariant/nesting.cpp | 2 +- .../extras/tests/JsonVariant/or.cpp | 2 +- .../extras/tests/JsonVariant/overflow.cpp | 2 +- .../extras/tests/JsonVariant/remove.cpp | 2 +- .../extras/tests/JsonVariant/set.cpp | 14 ++- .../extras/tests/JsonVariant/size.cpp | 2 +- .../tests/JsonVariant/stl_containers.cpp | 2 +- .../extras/tests/JsonVariant/subscript.cpp | 2 +- .../extras/tests/JsonVariant/types.cpp | 2 +- .../extras/tests/JsonVariant/unbound.cpp | 2 +- .../tests/JsonVariantConst/CMakeLists.txt | 2 +- .../extras/tests/JsonVariantConst/as.cpp | 2 +- .../extras/tests/JsonVariantConst/is.cpp | 2 +- .../extras/tests/JsonVariantConst/isnull.cpp | 2 +- .../extras/tests/JsonVariantConst/nesting.cpp | 2 +- .../extras/tests/JsonVariantConst/size.cpp | 2 +- .../tests/JsonVariantConst/subscript.cpp | 2 +- .../extras/tests/Misc/CMakeLists.txt | 3 +- .../extras/tests/Misc/JsonString.cpp | 2 +- .../extras/tests/Misc/NoArduinoHeader.cpp | 2 +- lib/ArduinoJson/extras/tests/Misc/Readers.cpp | 2 +- .../extras/tests/Misc/StringAdapters.cpp | 3 +- .../extras/tests/Misc/StringWriter.cpp | 2 +- .../extras/tests/Misc/TypeTraits.cpp | 2 +- lib/ArduinoJson/extras/tests/Misc/Utf16.cpp | 2 +- lib/ArduinoJson/extras/tests/Misc/Utf8.cpp | 2 +- .../extras/tests/Misc/arithmeticCompare.cpp | 2 +- .../extras/tests/Misc/conflicts.cpp | 2 +- .../extras/tests/Misc/custom_string.hpp | 2 +- .../extras/tests/Misc/issue1967.cpp | 2 +- .../extras/tests/Misc/issue2129.cpp | 2 +- .../extras/tests/Misc/issue2166.cpp | 22 ++++ .../extras/tests/Misc/printable.cpp | 2 +- .../extras/tests/Misc/unsigned_char.cpp | 2 +- lib/ArduinoJson/extras/tests/Misc/version.cpp | 2 +- .../extras/tests/Misc/weird_strcmp.hpp | 2 +- .../tests/MixedConfiguration/CMakeLists.txt | 2 +- .../MixedConfiguration/enable_comments_0.cpp | 2 +- .../MixedConfiguration/enable_comments_1.cpp | 2 +- .../MixedConfiguration/enable_progmem_1.cpp | 2 +- .../tests/MixedConfiguration/issue1707.cpp | 2 +- .../tests/MsgPackDeserializer/CMakeLists.txt | 2 +- .../MsgPackDeserializer/deserializeArray.cpp | 25 +++- .../MsgPackDeserializer/deserializeObject.cpp | 2 +- .../deserializeVariant.cpp | 35 +++--- .../MsgPackDeserializer/destination_types.cpp | 2 +- .../MsgPackDeserializer/doubleToFloat.cpp | 2 +- .../tests/MsgPackDeserializer/errors.cpp | 2 +- .../tests/MsgPackDeserializer/filter.cpp | 2 +- .../tests/MsgPackDeserializer/input_types.cpp | 2 +- .../MsgPackDeserializer/nestingLimit.cpp | 2 +- .../tests/MsgPackSerializer/CMakeLists.txt | 2 +- .../MsgPackSerializer/destination_types.cpp | 2 +- .../tests/MsgPackSerializer/measure.cpp | 2 +- .../MsgPackSerializer/serializeArray.cpp | 2 +- .../MsgPackSerializer/serializeObject.cpp | 2 +- .../MsgPackSerializer/serializeVariant.cpp | 2 +- .../extras/tests/Numbers/CMakeLists.txt | 2 +- .../extras/tests/Numbers/convertNumber.cpp | 2 +- .../extras/tests/Numbers/decomposeFloat.cpp | 2 +- .../extras/tests/Numbers/parseDouble.cpp | 2 +- .../extras/tests/Numbers/parseFloat.cpp | 2 +- .../extras/tests/Numbers/parseInteger.cpp | 2 +- .../extras/tests/Numbers/parseNumber.cpp | 2 +- .../tests/ResourceManager/CMakeLists.txt | 3 +- .../tests/ResourceManager/StringBuffer.cpp | 50 ++++++++ .../tests/ResourceManager/StringBuilder.cpp | 115 ++++++++++++------ .../tests/ResourceManager/allocVariant.cpp | 2 +- .../extras/tests/ResourceManager/clear.cpp | 2 +- .../tests/ResourceManager/saveString.cpp | 2 +- .../tests/ResourceManager/shrinkToFit.cpp | 2 +- .../extras/tests/ResourceManager/size.cpp | 2 +- .../extras/tests/ResourceManager/swap.cpp | 2 +- .../extras/tests/TextFormatter/CMakeLists.txt | 2 +- .../extras/tests/TextFormatter/writeFloat.cpp | 2 +- .../tests/TextFormatter/writeInteger.cpp | 2 +- .../tests/TextFormatter/writeString.cpp | 2 +- lib/ArduinoJson/idf_component.yml | 4 +- lib/ArduinoJson/library.json | 4 +- lib/ArduinoJson/library.properties | 4 +- lib/ArduinoJson/src/ArduinoJson.h | 2 +- lib/ArduinoJson/src/ArduinoJson.hpp | 2 +- .../src/ArduinoJson/Array/ArrayData.hpp | 2 +- .../src/ArduinoJson/Array/ArrayImpl.hpp | 2 +- .../src/ArduinoJson/Array/ElementProxy.hpp | 2 +- .../src/ArduinoJson/Array/JsonArray.hpp | 2 +- .../src/ArduinoJson/Array/JsonArrayConst.hpp | 2 +- .../ArduinoJson/Array/JsonArrayIterator.hpp | 2 +- .../src/ArduinoJson/Array/Utilities.hpp | 2 +- .../ArduinoJson/Collection/CollectionData.hpp | 2 +- .../ArduinoJson/Collection/CollectionImpl.hpp | 2 +- .../src/ArduinoJson/Configuration.hpp | 2 +- .../Deserialization/DeserializationError.hpp | 2 +- .../DeserializationOptions.hpp | 2 +- .../ArduinoJson/Deserialization/Filter.hpp | 2 +- .../Deserialization/NestingLimit.hpp | 2 +- .../ArduinoJson/Deserialization/Reader.hpp | 2 +- .../Readers/ArduinoStreamReader.hpp | 2 +- .../Readers/ArduinoStringReader.hpp | 2 +- .../Deserialization/Readers/FlashReader.hpp | 2 +- .../Readers/IteratorReader.hpp | 2 +- .../Deserialization/Readers/RamReader.hpp | 2 +- .../Readers/StdStreamReader.hpp | 2 +- .../Deserialization/Readers/VariantReader.hpp | 2 +- .../Deserialization/deserialize.hpp | 2 +- .../src/ArduinoJson/Document/JsonDocument.hpp | 2 +- .../src/ArduinoJson/Json/EscapeSequence.hpp | 2 +- .../src/ArduinoJson/Json/JsonDeserializer.hpp | 14 +-- .../src/ArduinoJson/Json/JsonSerializer.hpp | 2 +- .../src/ArduinoJson/Json/Latch.hpp | 2 +- .../ArduinoJson/Json/PrettyJsonSerializer.hpp | 2 +- .../src/ArduinoJson/Json/TextFormatter.hpp | 2 +- .../src/ArduinoJson/Json/Utf16.hpp | 2 +- lib/ArduinoJson/src/ArduinoJson/Json/Utf8.hpp | 2 +- .../src/ArduinoJson/Memory/Alignment.hpp | 2 +- .../src/ArduinoJson/Memory/Allocator.hpp | 2 +- .../src/ArduinoJson/Memory/MemoryPool.hpp | 2 +- .../src/ArduinoJson/Memory/MemoryPoolList.hpp | 2 +- .../ArduinoJson/Memory/ResourceManager.hpp | 2 +- .../Memory/ResourceManagerImpl.hpp | 2 +- .../src/ArduinoJson/Memory/StringBuffer.hpp | 30 +++-- .../src/ArduinoJson/Memory/StringBuilder.hpp | 18 ++- .../src/ArduinoJson/Memory/StringNode.hpp | 2 +- .../src/ArduinoJson/Memory/StringPool.hpp | 2 +- .../src/ArduinoJson/Misc/SerializedValue.hpp | 2 +- .../MsgPack/MsgPackDeserializer.hpp | 19 ++- .../ArduinoJson/MsgPack/MsgPackSerializer.hpp | 2 +- .../src/ArduinoJson/MsgPack/endianness.hpp | 2 +- .../src/ArduinoJson/MsgPack/ieee754.hpp | 2 +- lib/ArduinoJson/src/ArduinoJson/Namespace.hpp | 2 +- .../src/ArduinoJson/Numbers/FloatParts.hpp | 2 +- .../src/ArduinoJson/Numbers/FloatTraits.hpp | 2 +- .../src/ArduinoJson/Numbers/JsonFloat.hpp | 2 +- .../src/ArduinoJson/Numbers/JsonInteger.hpp | 2 +- .../ArduinoJson/Numbers/arithmeticCompare.hpp | 2 +- .../src/ArduinoJson/Numbers/convertNumber.hpp | 2 +- .../src/ArduinoJson/Numbers/parseNumber.hpp | 2 +- .../src/ArduinoJson/Object/JsonObject.hpp | 2 +- .../ArduinoJson/Object/JsonObjectConst.hpp | 2 +- .../ArduinoJson/Object/JsonObjectIterator.hpp | 2 +- .../src/ArduinoJson/Object/JsonPair.hpp | 2 +- .../src/ArduinoJson/Object/MemberProxy.hpp | 2 +- .../src/ArduinoJson/Object/ObjectData.hpp | 6 +- .../src/ArduinoJson/Object/ObjectImpl.hpp | 18 ++- .../src/ArduinoJson/Polyfills/alias_cast.hpp | 2 +- .../src/ArduinoJson/Polyfills/assert.hpp | 2 +- .../src/ArduinoJson/Polyfills/attributes.hpp | 2 +- .../src/ArduinoJson/Polyfills/ctype.hpp | 2 +- .../src/ArduinoJson/Polyfills/integer.hpp | 2 +- .../src/ArduinoJson/Polyfills/limits.hpp | 2 +- .../src/ArduinoJson/Polyfills/math.hpp | 2 +- .../src/ArduinoJson/Polyfills/mpl/max.hpp | 2 +- .../src/ArduinoJson/Polyfills/pgmspace.hpp | 2 +- .../Polyfills/pgmspace_generic.hpp | 2 +- .../ArduinoJson/Polyfills/preprocessor.hpp | 2 +- .../src/ArduinoJson/Polyfills/type_traits.hpp | 2 +- .../Polyfills/type_traits/conditional.hpp | 2 +- .../Polyfills/type_traits/decay.hpp | 2 +- .../Polyfills/type_traits/declval.hpp | 2 +- .../Polyfills/type_traits/enable_if.hpp | 2 +- .../Polyfills/type_traits/function_traits.hpp | 2 +- .../type_traits/integral_constant.hpp | 2 +- .../Polyfills/type_traits/is_array.hpp | 2 +- .../Polyfills/type_traits/is_base_of.hpp | 2 +- .../Polyfills/type_traits/is_class.hpp | 2 +- .../Polyfills/type_traits/is_const.hpp | 2 +- .../Polyfills/type_traits/is_convertible.hpp | 2 +- .../Polyfills/type_traits/is_enum.hpp | 2 +- .../type_traits/is_floating_point.hpp | 2 +- .../Polyfills/type_traits/is_integral.hpp | 2 +- .../Polyfills/type_traits/is_pointer.hpp | 2 +- .../Polyfills/type_traits/is_same.hpp | 2 +- .../Polyfills/type_traits/is_signed.hpp | 2 +- .../Polyfills/type_traits/is_unsigned.hpp | 2 +- .../Polyfills/type_traits/make_unsigned.hpp | 2 +- .../Polyfills/type_traits/remove_const.hpp | 2 +- .../Polyfills/type_traits/remove_cv.hpp | 2 +- .../type_traits/remove_reference.hpp | 2 +- .../Polyfills/type_traits/type_identity.hpp | 2 +- .../Polyfills/type_traits/void_t.hpp | 2 +- .../src/ArduinoJson/Polyfills/utility.hpp | 2 +- .../Serialization/CountingDecorator.hpp | 2 +- .../src/ArduinoJson/Serialization/Writer.hpp | 2 +- .../Writers/ArduinoStringWriter.hpp | 2 +- .../Serialization/Writers/DummyWriter.hpp | 2 +- .../Serialization/Writers/PrintWriter.hpp | 2 +- .../Writers/StaticStringWriter.hpp | 2 +- .../Serialization/Writers/StdStreamWriter.hpp | 2 +- .../Serialization/Writers/StdStringWriter.hpp | 2 +- .../src/ArduinoJson/Serialization/measure.hpp | 2 +- .../ArduinoJson/Serialization/serialize.hpp | 2 +- .../Strings/Adapters/FlashString.hpp | 2 +- .../Strings/Adapters/RamString.hpp | 15 ++- .../Strings/Adapters/StringObject.hpp | 2 +- .../src/ArduinoJson/Strings/IsString.hpp | 2 +- .../src/ArduinoJson/Strings/JsonString.hpp | 2 +- .../src/ArduinoJson/Strings/StringAdapter.hpp | 2 +- .../ArduinoJson/Strings/StringAdapters.hpp | 2 +- .../src/ArduinoJson/Strings/StringTraits.hpp | 2 +- .../src/ArduinoJson/Variant/Converter.hpp | 2 +- .../src/ArduinoJson/Variant/ConverterImpl.hpp | 8 +- .../src/ArduinoJson/Variant/JsonVariant.hpp | 2 +- .../ArduinoJson/Variant/JsonVariantConst.hpp | 2 +- .../ArduinoJson/Variant/JsonVariantCopier.hpp | 2 +- .../Variant/JsonVariantVisitor.hpp | 2 +- .../ArduinoJson/Variant/VariantAttorney.hpp | 2 +- .../ArduinoJson/Variant/VariantCompare.hpp | 2 +- .../ArduinoJson/Variant/VariantContent.hpp | 6 +- .../src/ArduinoJson/Variant/VariantData.hpp | 69 +++++++++-- .../Variant/VariantDataVisitor.hpp | 2 +- .../src/ArduinoJson/Variant/VariantImpl.hpp | 7 +- .../ArduinoJson/Variant/VariantOperators.hpp | 2 +- .../ArduinoJson/Variant/VariantRefBase.hpp | 2 +- .../Variant/VariantRefBaseImpl.hpp | 2 +- .../src/ArduinoJson/Variant/VariantTag.hpp | 2 +- .../src/ArduinoJson/Variant/VariantTo.hpp | 2 +- .../src/ArduinoJson/compatibility.hpp | 2 +- lib/ArduinoJson/src/ArduinoJson/version.hpp | 10 +- lib/ArduinoJson/src/CMakeLists.txt | 2 +- 365 files changed, 780 insertions(+), 490 deletions(-) create mode 100644 lib/ArduinoJson/extras/tests/Misc/issue2166.cpp create mode 100644 lib/ArduinoJson/extras/tests/ResourceManager/StringBuffer.cpp diff --git a/lib/ArduinoJson/ArduinoJson.h b/lib/ArduinoJson/ArduinoJson.h index 9939599..a0caed7 100644 --- a/lib/ArduinoJson/ArduinoJson.h +++ b/lib/ArduinoJson/ArduinoJson.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include "src/ArduinoJson.h" diff --git a/lib/ArduinoJson/CHANGELOG.md b/lib/ArduinoJson/CHANGELOG.md index c0a8b4b..10e4629 100644 --- a/lib/ArduinoJson/CHANGELOG.md +++ b/lib/ArduinoJson/CHANGELOG.md @@ -1,6 +1,23 @@ ArduinoJson: change log ======================= +v7.4.1 (2025-04-11) +------ + +* Fix crash with tiny Flash strings (issue #2170) + +v7.4.0 (2025-04-09) +------ + +* Optimize storage of tiny strings (up to 3 characters) +* Fix support for `const char[]` (issue #2166) + +v7.3.1 (2025-02-27) +------ + +* Fix conversion from static string to number +* Slightly reduce code size + v7.3.0 (2024-12-29) ------ diff --git a/lib/ArduinoJson/CMakeLists.txt b/lib/ArduinoJson/CMakeLists.txt index b607bdb..bdeb803 100644 --- a/lib/ArduinoJson/CMakeLists.txt +++ b/lib/ArduinoJson/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License cmake_minimum_required(VERSION 3.15) @@ -10,7 +10,7 @@ if(ESP_PLATFORM) return() endif() -project(ArduinoJson VERSION 7.3.0) +project(ArduinoJson VERSION 7.4.1) if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) include(CTest) diff --git a/lib/ArduinoJson/LICENSE.txt b/lib/ArduinoJson/LICENSE.txt index 56bb92b..782b05d 100644 --- a/lib/ArduinoJson/LICENSE.txt +++ b/lib/ArduinoJson/LICENSE.txt @@ -1,7 +1,7 @@ The MIT License (MIT) --------------------- -Copyright © 2014-2024, Benoit BLANCHON +Copyright © 2014-2025, Benoit BLANCHON Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/lib/ArduinoJson/appveyor.yml b/lib/ArduinoJson/appveyor.yml index cdcadc1..6802e15 100644 --- a/lib/ArduinoJson/appveyor.yml +++ b/lib/ArduinoJson/appveyor.yml @@ -1,4 +1,4 @@ -version: 7.3.0.{build} +version: 7.4.1.{build} environment: matrix: - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022 diff --git a/lib/ArduinoJson/examples/JsonConfigFile/JsonConfigFile.ino b/lib/ArduinoJson/examples/JsonConfigFile/JsonConfigFile.ino index cd94064..32ad3a5 100644 --- a/lib/ArduinoJson/examples/JsonConfigFile/JsonConfigFile.ino +++ b/lib/ArduinoJson/examples/JsonConfigFile/JsonConfigFile.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to store your project configuration in a file. diff --git a/lib/ArduinoJson/examples/JsonFilterExample/JsonFilterExample.ino b/lib/ArduinoJson/examples/JsonFilterExample/JsonFilterExample.ino index 1c20fe9..16e49dd 100644 --- a/lib/ArduinoJson/examples/JsonFilterExample/JsonFilterExample.ino +++ b/lib/ArduinoJson/examples/JsonFilterExample/JsonFilterExample.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to use DeserializationOption::Filter diff --git a/lib/ArduinoJson/examples/JsonGeneratorExample/JsonGeneratorExample.ino b/lib/ArduinoJson/examples/JsonGeneratorExample/JsonGeneratorExample.ino index d67b885..ffbc9a1 100644 --- a/lib/ArduinoJson/examples/JsonGeneratorExample/JsonGeneratorExample.ino +++ b/lib/ArduinoJson/examples/JsonGeneratorExample/JsonGeneratorExample.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to generate a JSON document with ArduinoJson. diff --git a/lib/ArduinoJson/examples/JsonHttpClient/JsonHttpClient.ino b/lib/ArduinoJson/examples/JsonHttpClient/JsonHttpClient.ino index 9315118..c2d3846 100644 --- a/lib/ArduinoJson/examples/JsonHttpClient/JsonHttpClient.ino +++ b/lib/ArduinoJson/examples/JsonHttpClient/JsonHttpClient.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to parse a JSON document in an HTTP response. diff --git a/lib/ArduinoJson/examples/JsonParserExample/JsonParserExample.ino b/lib/ArduinoJson/examples/JsonParserExample/JsonParserExample.ino index 7220dcf..7b32616 100644 --- a/lib/ArduinoJson/examples/JsonParserExample/JsonParserExample.ino +++ b/lib/ArduinoJson/examples/JsonParserExample/JsonParserExample.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to deserialize a JSON document with ArduinoJson. diff --git a/lib/ArduinoJson/examples/JsonServer/JsonServer.ino b/lib/ArduinoJson/examples/JsonServer/JsonServer.ino index d8b65c8..51fdf3c 100644 --- a/lib/ArduinoJson/examples/JsonServer/JsonServer.ino +++ b/lib/ArduinoJson/examples/JsonServer/JsonServer.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to implement an HTTP server that sends a JSON document diff --git a/lib/ArduinoJson/examples/JsonUdpBeacon/JsonUdpBeacon.ino b/lib/ArduinoJson/examples/JsonUdpBeacon/JsonUdpBeacon.ino index 6a4e08f..d6ecb55 100644 --- a/lib/ArduinoJson/examples/JsonUdpBeacon/JsonUdpBeacon.ino +++ b/lib/ArduinoJson/examples/JsonUdpBeacon/JsonUdpBeacon.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to send a JSON document to a UDP socket. diff --git a/lib/ArduinoJson/examples/MsgPackParser/MsgPackParser.ino b/lib/ArduinoJson/examples/MsgPackParser/MsgPackParser.ino index dd7d7b6..3649081 100644 --- a/lib/ArduinoJson/examples/MsgPackParser/MsgPackParser.ino +++ b/lib/ArduinoJson/examples/MsgPackParser/MsgPackParser.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to deserialize a MessagePack document with diff --git a/lib/ArduinoJson/examples/ProgmemExample/ProgmemExample.ino b/lib/ArduinoJson/examples/ProgmemExample/ProgmemExample.ino index ffeb79e..729cb8b 100644 --- a/lib/ArduinoJson/examples/ProgmemExample/ProgmemExample.ino +++ b/lib/ArduinoJson/examples/ProgmemExample/ProgmemExample.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows the different ways you can use Flash strings with diff --git a/lib/ArduinoJson/examples/StringExample/StringExample.ino b/lib/ArduinoJson/examples/StringExample/StringExample.ino index fb5f243..845df9d 100644 --- a/lib/ArduinoJson/examples/StringExample/StringExample.ino +++ b/lib/ArduinoJson/examples/StringExample/StringExample.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows the different ways you can use String with ArduinoJson. diff --git a/lib/ArduinoJson/extras/ci/espidf/CMakeLists.txt b/lib/ArduinoJson/extras/ci/espidf/CMakeLists.txt index 38d393d..6135701 100644 --- a/lib/ArduinoJson/extras/ci/espidf/CMakeLists.txt +++ b/lib/ArduinoJson/extras/ci/espidf/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License cmake_minimum_required(VERSION 3.5) diff --git a/lib/ArduinoJson/extras/ci/espidf/main/CMakeLists.txt b/lib/ArduinoJson/extras/ci/espidf/main/CMakeLists.txt index e32eb7c..bf22507 100644 --- a/lib/ArduinoJson/extras/ci/espidf/main/CMakeLists.txt +++ b/lib/ArduinoJson/extras/ci/espidf/main/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License idf_component_register( diff --git a/lib/ArduinoJson/extras/ci/espidf/main/main.cpp b/lib/ArduinoJson/extras/ci/espidf/main/main.cpp index f65aa39..436eb40 100644 --- a/lib/ArduinoJson/extras/ci/espidf/main/main.cpp +++ b/lib/ArduinoJson/extras/ci/espidf/main/main.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/fuzzing/CMakeLists.txt b/lib/ArduinoJson/extras/fuzzing/CMakeLists.txt index cc6e05d..42c9260 100644 --- a/lib/ArduinoJson/extras/fuzzing/CMakeLists.txt +++ b/lib/ArduinoJson/extras/fuzzing/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License set(CMAKE_CXX_STANDARD 11) diff --git a/lib/ArduinoJson/extras/fuzzing/reproducer.cpp b/lib/ArduinoJson/extras/fuzzing/reproducer.cpp index 1595a9a..beeb2df 100644 --- a/lib/ArduinoJson/extras/fuzzing/reproducer.cpp +++ b/lib/ArduinoJson/extras/fuzzing/reproducer.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // This file is NOT use by Google's OSS fuzz diff --git a/lib/ArduinoJson/extras/scripts/wandbox/JsonGeneratorExample.cpp b/lib/ArduinoJson/extras/scripts/wandbox/JsonGeneratorExample.cpp index 313f93b..2e08b4c 100644 --- a/lib/ArduinoJson/extras/scripts/wandbox/JsonGeneratorExample.cpp +++ b/lib/ArduinoJson/extras/scripts/wandbox/JsonGeneratorExample.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to generate a JSON document with ArduinoJson. diff --git a/lib/ArduinoJson/extras/scripts/wandbox/JsonParserExample.cpp b/lib/ArduinoJson/extras/scripts/wandbox/JsonParserExample.cpp index cf653a4..1969cf2 100644 --- a/lib/ArduinoJson/extras/scripts/wandbox/JsonParserExample.cpp +++ b/lib/ArduinoJson/extras/scripts/wandbox/JsonParserExample.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to deserialize a JSON document with ArduinoJson. diff --git a/lib/ArduinoJson/extras/scripts/wandbox/MsgPackParserExample.cpp b/lib/ArduinoJson/extras/scripts/wandbox/MsgPackParserExample.cpp index cb797aa..81e6822 100644 --- a/lib/ArduinoJson/extras/scripts/wandbox/MsgPackParserExample.cpp +++ b/lib/ArduinoJson/extras/scripts/wandbox/MsgPackParserExample.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // This example shows how to generate a JSON document with ArduinoJson. diff --git a/lib/ArduinoJson/extras/tests/CMakeLists.txt b/lib/ArduinoJson/extras/tests/CMakeLists.txt index 212e31e..1b1f872 100644 --- a/lib/ArduinoJson/extras/tests/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License set(CMAKE_CXX_STANDARD 11) diff --git a/lib/ArduinoJson/extras/tests/Cpp17/CMakeLists.txt b/lib/ArduinoJson/extras/tests/Cpp17/CMakeLists.txt index ff5cc0e..8c566de 100644 --- a/lib/ArduinoJson/extras/tests/Cpp17/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/Cpp17/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License if(MSVC_VERSION LESS 1910) diff --git a/lib/ArduinoJson/extras/tests/Cpp17/string_view.cpp b/lib/ArduinoJson/extras/tests/Cpp17/string_view.cpp index 92e0a62..fb31084 100644 --- a/lib/ArduinoJson/extras/tests/Cpp17/string_view.cpp +++ b/lib/ArduinoJson/extras/tests/Cpp17/string_view.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // we expect ArduinoJson.h to include diff --git a/lib/ArduinoJson/extras/tests/Cpp20/CMakeLists.txt b/lib/ArduinoJson/extras/tests/Cpp20/CMakeLists.txt index 637af5c..6346d4d 100644 --- a/lib/ArduinoJson/extras/tests/Cpp20/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/Cpp20/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License if(MSVC_VERSION LESS 1910) diff --git a/lib/ArduinoJson/extras/tests/Deprecated/BasicJsonDocument.cpp b/lib/ArduinoJson/extras/tests/Deprecated/BasicJsonDocument.cpp index 0b69aee..a350977 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/BasicJsonDocument.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/BasicJsonDocument.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include @@ -46,7 +46,7 @@ TEST_CASE("BasicJsonDocument") { deserializeJson(doc, "{\"hello\":\"world\"}"); REQUIRE(doc.as() == "{\"hello\":\"world\"}"); doc.clear(); - REQUIRE(allocatorLog == "ARAARDDD"); + REQUIRE(allocatorLog == "AARARDDD"); } SECTION("copy") { diff --git a/lib/ArduinoJson/extras/tests/Deprecated/CMakeLists.txt b/lib/ArduinoJson/extras/tests/Deprecated/CMakeLists.txt index c69fc44..bcf33e1 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/Deprecated/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") diff --git a/lib/ArduinoJson/extras/tests/Deprecated/DynamicJsonDocument.cpp b/lib/ArduinoJson/extras/tests/Deprecated/DynamicJsonDocument.cpp index df9634b..7c6d44b 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/DynamicJsonDocument.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/DynamicJsonDocument.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Deprecated/StaticJsonDocument.cpp b/lib/ArduinoJson/extras/tests/Deprecated/StaticJsonDocument.cpp index 60ca6f2..39a363b 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/StaticJsonDocument.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/StaticJsonDocument.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Deprecated/add.cpp b/lib/ArduinoJson/extras/tests/Deprecated/add.cpp index de961d1..586e22b 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/add.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/add.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Deprecated/containsKey.cpp b/lib/ArduinoJson/extras/tests/Deprecated/containsKey.cpp index 846e98f..d001d40 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/containsKey.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/containsKey.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Deprecated/createNestedArray.cpp b/lib/ArduinoJson/extras/tests/Deprecated/createNestedArray.cpp index 6efbd88..858c022 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/createNestedArray.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/createNestedArray.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Deprecated/createNestedObject.cpp b/lib/ArduinoJson/extras/tests/Deprecated/createNestedObject.cpp index 8b73c8b..c035eb8 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/createNestedObject.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/createNestedObject.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Deprecated/macros.cpp b/lib/ArduinoJson/extras/tests/Deprecated/macros.cpp index 36610c7..2e73d5b 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/macros.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/macros.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Deprecated/memoryUsage.cpp b/lib/ArduinoJson/extras/tests/Deprecated/memoryUsage.cpp index 00b5bbb..89258f0 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/memoryUsage.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/memoryUsage.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Deprecated/shallowCopy.cpp b/lib/ArduinoJson/extras/tests/Deprecated/shallowCopy.cpp index ab5d6c4..1f0d12e 100644 --- a/lib/ArduinoJson/extras/tests/Deprecated/shallowCopy.cpp +++ b/lib/ArduinoJson/extras/tests/Deprecated/shallowCopy.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/FailingBuilds/CMakeLists.txt b/lib/ArduinoJson/extras/tests/FailingBuilds/CMakeLists.txt index ebe15f8..08dbe52 100644 --- a/lib/ArduinoJson/extras/tests/FailingBuilds/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/FailingBuilds/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License macro(add_failing_build source_file) diff --git a/lib/ArduinoJson/extras/tests/FailingBuilds/Issue978.cpp b/lib/ArduinoJson/extras/tests/FailingBuilds/Issue978.cpp index 2ebbf94..3b9ec95 100644 --- a/lib/ArduinoJson/extras/tests/FailingBuilds/Issue978.cpp +++ b/lib/ArduinoJson/extras/tests/FailingBuilds/Issue978.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/FailingBuilds/assign_char.cpp b/lib/ArduinoJson/extras/tests/FailingBuilds/assign_char.cpp index b565376..888d23c 100644 --- a/lib/ArduinoJson/extras/tests/FailingBuilds/assign_char.cpp +++ b/lib/ArduinoJson/extras/tests/FailingBuilds/assign_char.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/FailingBuilds/deserialize_object.cpp b/lib/ArduinoJson/extras/tests/FailingBuilds/deserialize_object.cpp index 04845cd..b9313ed 100644 --- a/lib/ArduinoJson/extras/tests/FailingBuilds/deserialize_object.cpp +++ b/lib/ArduinoJson/extras/tests/FailingBuilds/deserialize_object.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/FailingBuilds/read_long_long.cpp b/lib/ArduinoJson/extras/tests/FailingBuilds/read_long_long.cpp index 7577698..daf1f40 100644 --- a/lib/ArduinoJson/extras/tests/FailingBuilds/read_long_long.cpp +++ b/lib/ArduinoJson/extras/tests/FailingBuilds/read_long_long.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_USE_LONG_LONG 0 diff --git a/lib/ArduinoJson/extras/tests/FailingBuilds/variant_as_char.cpp b/lib/ArduinoJson/extras/tests/FailingBuilds/variant_as_char.cpp index 37685a6..b1e86ee 100644 --- a/lib/ArduinoJson/extras/tests/FailingBuilds/variant_as_char.cpp +++ b/lib/ArduinoJson/extras/tests/FailingBuilds/variant_as_char.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/FailingBuilds/write_long_long.cpp b/lib/ArduinoJson/extras/tests/FailingBuilds/write_long_long.cpp index a8d1460..4aee656 100644 --- a/lib/ArduinoJson/extras/tests/FailingBuilds/write_long_long.cpp +++ b/lib/ArduinoJson/extras/tests/FailingBuilds/write_long_long.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_USE_LONG_LONG 0 diff --git a/lib/ArduinoJson/extras/tests/Helpers/Allocators.hpp b/lib/ArduinoJson/extras/tests/Helpers/Allocators.hpp index a551c31..17e05ca 100644 --- a/lib/ArduinoJson/extras/tests/Helpers/Allocators.hpp +++ b/lib/ArduinoJson/extras/tests/Helpers/Allocators.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/extras/tests/Helpers/Arduino.h b/lib/ArduinoJson/extras/tests/Helpers/Arduino.h index 4b8c27c..d12f872 100644 --- a/lib/ArduinoJson/extras/tests/Helpers/Arduino.h +++ b/lib/ArduinoJson/extras/tests/Helpers/Arduino.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/extras/tests/Helpers/CustomReader.hpp b/lib/ArduinoJson/extras/tests/Helpers/CustomReader.hpp index 66350a7..76a5138 100644 --- a/lib/ArduinoJson/extras/tests/Helpers/CustomReader.hpp +++ b/lib/ArduinoJson/extras/tests/Helpers/CustomReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/extras/tests/Helpers/Literals.hpp b/lib/ArduinoJson/extras/tests/Helpers/Literals.hpp index 59164cf..07c079d 100644 --- a/lib/ArduinoJson/extras/tests/Helpers/Literals.hpp +++ b/lib/ArduinoJson/extras/tests/Helpers/Literals.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/extras/tests/Helpers/api/Print.h b/lib/ArduinoJson/extras/tests/Helpers/api/Print.h index c9ec191..cdf05bb 100644 --- a/lib/ArduinoJson/extras/tests/Helpers/api/Print.h +++ b/lib/ArduinoJson/extras/tests/Helpers/api/Print.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -13,21 +13,21 @@ class Print { virtual ~Print() {} virtual size_t write(uint8_t) = 0; - virtual size_t write(const uint8_t *buffer, size_t size) = 0; + virtual size_t write(const uint8_t* buffer, size_t size) = 0; - size_t write(const char *str) { + size_t write(const char* str) { if (!str) return 0; - return write(reinterpret_cast(str), strlen(str)); + return write(reinterpret_cast(str), strlen(str)); } - size_t write(const char *buffer, size_t size) { - return write(reinterpret_cast(buffer), size); + size_t write(const char* buffer, size_t size) { + return write(reinterpret_cast(buffer), size); } }; class Printable { public: virtual ~Printable() {} - virtual size_t printTo(Print &p) const = 0; + virtual size_t printTo(Print& p) const = 0; }; diff --git a/lib/ArduinoJson/extras/tests/Helpers/api/Stream.h b/lib/ArduinoJson/extras/tests/Helpers/api/Stream.h index 2cd4651..64b9eaf 100644 --- a/lib/ArduinoJson/extras/tests/Helpers/api/Stream.h +++ b/lib/ArduinoJson/extras/tests/Helpers/api/Stream.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -10,5 +10,5 @@ class Stream // : public Print public: virtual ~Stream() {} virtual int read() = 0; - virtual size_t readBytes(char *buffer, size_t length) = 0; + virtual size_t readBytes(char* buffer, size_t length) = 0; }; diff --git a/lib/ArduinoJson/extras/tests/Helpers/api/String.h b/lib/ArduinoJson/extras/tests/Helpers/api/String.h index 2e8fdfe..1841610 100644 --- a/lib/ArduinoJson/extras/tests/Helpers/api/String.h +++ b/lib/ArduinoJson/extras/tests/Helpers/api/String.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/extras/tests/Helpers/avr/pgmspace.h b/lib/ArduinoJson/extras/tests/Helpers/avr/pgmspace.h index 2cdd182..8cbf44e 100644 --- a/lib/ArduinoJson/extras/tests/Helpers/avr/pgmspace.h +++ b/lib/ArduinoJson/extras/tests/Helpers/avr/pgmspace.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/extras/tests/IntegrationTests/CMakeLists.txt b/lib/ArduinoJson/extras/tests/IntegrationTests/CMakeLists.txt index adc0ebf..d3e4004 100644 --- a/lib/ArduinoJson/extras/tests/IntegrationTests/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/IntegrationTests/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(IntegrationTests diff --git a/lib/ArduinoJson/extras/tests/IntegrationTests/gbathree.cpp b/lib/ArduinoJson/extras/tests/IntegrationTests/gbathree.cpp index db649aa..fead9ff 100644 --- a/lib/ArduinoJson/extras/tests/IntegrationTests/gbathree.cpp +++ b/lib/ArduinoJson/extras/tests/IntegrationTests/gbathree.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/IntegrationTests/issue772.cpp b/lib/ArduinoJson/extras/tests/IntegrationTests/issue772.cpp index 57e0b2c..e81cf40 100644 --- a/lib/ArduinoJson/extras/tests/IntegrationTests/issue772.cpp +++ b/lib/ArduinoJson/extras/tests/IntegrationTests/issue772.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/IntegrationTests/openweathermap.cpp b/lib/ArduinoJson/extras/tests/IntegrationTests/openweathermap.cpp index 2d55b54..34dbba2 100644 --- a/lib/ArduinoJson/extras/tests/IntegrationTests/openweathermap.cpp +++ b/lib/ArduinoJson/extras/tests/IntegrationTests/openweathermap.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/IntegrationTests/round_trip.cpp b/lib/ArduinoJson/extras/tests/IntegrationTests/round_trip.cpp index 4fd5d2d..54bd6f4 100644 --- a/lib/ArduinoJson/extras/tests/IntegrationTests/round_trip.cpp +++ b/lib/ArduinoJson/extras/tests/IntegrationTests/round_trip.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/CMakeLists.txt b/lib/ArduinoJson/extras/tests/JsonArray/CMakeLists.txt index 2ee1a34..0b8a562 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/JsonArray/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(JsonArrayTests diff --git a/lib/ArduinoJson/extras/tests/JsonArray/add.cpp b/lib/ArduinoJson/extras/tests/JsonArray/add.cpp index f1ca5f2..0983e3b 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/add.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/add.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/clear.cpp b/lib/ArduinoJson/extras/tests/JsonArray/clear.cpp index 8ac4548..069376d 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/clear.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/clear.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/compare.cpp b/lib/ArduinoJson/extras/tests/JsonArray/compare.cpp index b18bcda..23f2ea9 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/compare.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/compare.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/copyArray.cpp b/lib/ArduinoJson/extras/tests/JsonArray/copyArray.cpp index a82a6f8..dd31cf6 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/copyArray.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/copyArray.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/equals.cpp b/lib/ArduinoJson/extras/tests/JsonArray/equals.cpp index 4f5af46..241aa71 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/equals.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/equals.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/isNull.cpp b/lib/ArduinoJson/extras/tests/JsonArray/isNull.cpp index dc22f4b..77f1512 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/isNull.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/isNull.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/iterator.cpp b/lib/ArduinoJson/extras/tests/JsonArray/iterator.cpp index 8158975..f6bb3ef 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/iterator.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/iterator.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/nesting.cpp b/lib/ArduinoJson/extras/tests/JsonArray/nesting.cpp index a49b01c..434c418 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/nesting.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/nesting.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/remove.cpp b/lib/ArduinoJson/extras/tests/JsonArray/remove.cpp index 82e3bab..8691171 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/remove.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/remove.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/size.cpp b/lib/ArduinoJson/extras/tests/JsonArray/size.cpp index 599b37c..63bf55d 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/size.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/size.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/subscript.cpp b/lib/ArduinoJson/extras/tests/JsonArray/subscript.cpp index 40b1736..fa0400c 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/subscript.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/subscript.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArray/unbound.cpp b/lib/ArduinoJson/extras/tests/JsonArray/unbound.cpp index 21d4ebf..ba80018 100644 --- a/lib/ArduinoJson/extras/tests/JsonArray/unbound.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArray/unbound.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArrayConst/CMakeLists.txt b/lib/ArduinoJson/extras/tests/JsonArrayConst/CMakeLists.txt index 8608a89..4d69c71 100644 --- a/lib/ArduinoJson/extras/tests/JsonArrayConst/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/JsonArrayConst/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(JsonArrayConstTests diff --git a/lib/ArduinoJson/extras/tests/JsonArrayConst/equals.cpp b/lib/ArduinoJson/extras/tests/JsonArrayConst/equals.cpp index ba60d38..de939cc 100644 --- a/lib/ArduinoJson/extras/tests/JsonArrayConst/equals.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArrayConst/equals.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArrayConst/isNull.cpp b/lib/ArduinoJson/extras/tests/JsonArrayConst/isNull.cpp index 26b64ae..d443a73 100644 --- a/lib/ArduinoJson/extras/tests/JsonArrayConst/isNull.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArrayConst/isNull.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArrayConst/iterator.cpp b/lib/ArduinoJson/extras/tests/JsonArrayConst/iterator.cpp index 5eeb56a..0907af7 100644 --- a/lib/ArduinoJson/extras/tests/JsonArrayConst/iterator.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArrayConst/iterator.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArrayConst/nesting.cpp b/lib/ArduinoJson/extras/tests/JsonArrayConst/nesting.cpp index 860754a..547d5d4 100644 --- a/lib/ArduinoJson/extras/tests/JsonArrayConst/nesting.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArrayConst/nesting.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArrayConst/size.cpp b/lib/ArduinoJson/extras/tests/JsonArrayConst/size.cpp index a59551a..4bf000f 100644 --- a/lib/ArduinoJson/extras/tests/JsonArrayConst/size.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArrayConst/size.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonArrayConst/subscript.cpp b/lib/ArduinoJson/extras/tests/JsonArrayConst/subscript.cpp index 28512b2..907cf31 100644 --- a/lib/ArduinoJson/extras/tests/JsonArrayConst/subscript.cpp +++ b/lib/ArduinoJson/extras/tests/JsonArrayConst/subscript.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/CMakeLists.txt b/lib/ArduinoJson/extras/tests/JsonDeserializer/CMakeLists.txt index a503f45..6faaaa8 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(JsonDeserializerTests diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/DeserializationError.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/DeserializationError.cpp index 17c8c40..edfcd3a 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/DeserializationError.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/DeserializationError.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/array.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/array.cpp index f61083d..e6fb18d 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/array.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/array.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/destination_types.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/destination_types.cpp index dc5c012..0f96b23 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/destination_types.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/destination_types.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/errors.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/errors.cpp index 0c2444e..35d3ca3 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/errors.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/errors.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_DECODE_UNICODE 1 diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/filter.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/filter.cpp index 894df75..4f9d9b9 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/filter.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/filter.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_ENABLE_COMMENTS 1 diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/input_types.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/input_types.cpp index a8a9e56..e750fd6 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/input_types.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/input_types.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include @@ -26,8 +26,8 @@ TEST_CASE("deserializeJson(char*)") { REQUIRE(spy.log() == AllocatorLog{ Allocate(sizeofStringBuffer()), - Reallocate(sizeofStringBuffer(), sizeofString("hello")), Allocate(sizeofPool()), + Reallocate(sizeofStringBuffer(), sizeofString("hello")), Allocate(sizeofStringBuffer()), Reallocate(sizeofStringBuffer(), sizeofString("world")), Reallocate(sizeofPool(), sizeofObject(1)), diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/misc.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/misc.cpp index cc5d10f..c13956b 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/misc.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/misc.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/nestingLimit.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/nestingLimit.cpp index cd11841..07f8f19 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/nestingLimit.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/nestingLimit.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/number.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/number.cpp index 5359573..a74e50b 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/number.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/number.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_USE_LONG_LONG 0 diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/object.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/object.cpp index 9f0aecb..34b357a 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/object.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/object.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include @@ -292,22 +292,23 @@ TEST_CASE("deserialize JSON object") { } SECTION("Repeated key") { - DeserializationError err = deserializeJson(doc, "{a:{b:{c:1}},a:2}"); + DeserializationError err = + deserializeJson(doc, "{alfa:{bravo:{charlie:1}},alfa:2}"); REQUIRE(err == DeserializationError::Ok); - REQUIRE(doc.as() == "{\"a\":2}"); + REQUIRE(doc.as() == "{\"alfa\":2}"); REQUIRE(spy.log() == AllocatorLog{ Allocate(sizeofStringBuffer()), - Reallocate(sizeofStringBuffer(), sizeofString("a")), Allocate(sizeofPool()), + Reallocate(sizeofStringBuffer(), sizeofString("alfa")), Allocate(sizeofStringBuffer()), - Reallocate(sizeofStringBuffer(), sizeofString("b")), + Reallocate(sizeofStringBuffer(), sizeofString("bravo")), Allocate(sizeofStringBuffer()), - Reallocate(sizeofStringBuffer(), sizeofString("c")), + Reallocate(sizeofStringBuffer(), sizeofString("charlie")), Allocate(sizeofStringBuffer()), - Deallocate(sizeofString("b")), - Deallocate(sizeofString("c")), + Deallocate(sizeofString("bravo")), + Deallocate(sizeofString("charlie")), Deallocate(sizeofStringBuffer()), Reallocate(sizeofPool(), sizeofObject(2) + sizeofObject(1)), }); @@ -378,7 +379,7 @@ TEST_CASE("deserialize JSON object under memory constraints") { } SECTION("pool allocation fails") { - timebomb.setCountdown(2); + timebomb.setCountdown(1); char input[] = "{\"a\":1}"; DeserializationError err = deserializeJson(doc, input); @@ -389,11 +390,11 @@ TEST_CASE("deserialize JSON object under memory constraints") { SECTION("string allocation fails") { timebomb.setCountdown(3); - char input[] = "{\"a\":\"b\"}"; + char input[] = "{\"alfa\":\"bravo\"}"; DeserializationError err = deserializeJson(doc, input); REQUIRE(err == DeserializationError::NoMemory); - REQUIRE(doc.as() == "{\"a\":null}"); + REQUIRE(doc.as() == "{\"alfa\":null}"); } } diff --git a/lib/ArduinoJson/extras/tests/JsonDeserializer/string.cpp b/lib/ArduinoJson/extras/tests/JsonDeserializer/string.cpp index a760ae6..5ad8678 100644 --- a/lib/ArduinoJson/extras/tests/JsonDeserializer/string.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDeserializer/string.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_DECODE_UNICODE 1 @@ -133,8 +133,8 @@ TEST_CASE("Allocation of the key fails") { REQUIRE(spy.log() == AllocatorLog{ Allocate(sizeofStringBuffer()), - Reallocate(sizeofStringBuffer(), sizeofString("hello")), Allocate(sizeofPool()), + Reallocate(sizeofStringBuffer(), sizeofString("hello")), AllocateFail(sizeofStringBuffer()), ReallocateFail(sizeofPool(), sizeofObject(1)), }); @@ -155,8 +155,8 @@ TEST_CASE("Allocation of the key fails") { REQUIRE(spy.log() == AllocatorLog{ Allocate(sizeofStringBuffer()), - Reallocate(sizeofStringBuffer(), sizeofString("hello")), Allocate(sizeofPool()), + Reallocate(sizeofStringBuffer(), sizeofString("hello")), AllocateFail(sizeofStringBuffer()), ReallocateFail(sizeofPool(), sizeofObject(1)), }); diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/CMakeLists.txt b/lib/ArduinoJson/extras/tests/JsonDocument/CMakeLists.txt index e85db02..dc8036a 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/JsonDocument/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(JsonDocumentTests diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/ElementProxy.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/ElementProxy.cpp index 387dc88..9cf8855 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/ElementProxy.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/ElementProxy.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/MemberProxy.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/MemberProxy.cpp index 4eb7468..c42edcc 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/MemberProxy.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/MemberProxy.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_ENABLE_ARDUINO_STRING 1 diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/add.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/add.cpp index 8a1c48e..da898e6 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/add.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/add.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_ENABLE_ARDUINO_STRING 1 diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/assignment.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/assignment.cpp index 58a8391..4e59584 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/assignment.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/assignment.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/cast.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/cast.cpp index 05c9ee7..0bb9caa 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/cast.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/cast.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/clear.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/clear.cpp index 3b9f6ee..98d2499 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/clear.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/clear.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/compare.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/compare.cpp index a1b8ef2..da7af58 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/compare.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/compare.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/constructor.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/constructor.cpp index 239b3bf..1eaec20 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/constructor.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/constructor.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/isNull.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/isNull.cpp index 219c306..d030842 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/isNull.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/isNull.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/nesting.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/nesting.cpp index 4f4a3a5..2fb86e1 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/nesting.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/nesting.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/overflowed.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/overflowed.cpp index 9dfa83f..44003eb 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/overflowed.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/overflowed.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/remove.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/remove.cpp index 1656a4d..f017bb9 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/remove.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/remove.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/set.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/set.cpp index 1205acf..88c33bb 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/set.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/set.cpp @@ -87,6 +87,13 @@ TEST_CASE("JsonDocument::set()") { }); } + SECTION("Flash tiny string") { // issue #2170 + doc.set(F("abc")); + + REQUIRE(doc.as() == "abc"_s); + REQUIRE(spy.log() == AllocatorLog{}); + } + #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("VLA") { size_t i = 16; diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/shrinkToFit.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/shrinkToFit.cpp index 91b9d91..148b552 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/shrinkToFit.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/shrinkToFit.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/size.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/size.cpp index 53af226..fad6584 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/size.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/size.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonDocument/subscript.cpp b/lib/ArduinoJson/extras/tests/JsonDocument/subscript.cpp index 2150d15..17bdcc2 100644 --- a/lib/ArduinoJson/extras/tests/JsonDocument/subscript.cpp +++ b/lib/ArduinoJson/extras/tests/JsonDocument/subscript.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/CMakeLists.txt b/lib/ArduinoJson/extras/tests/JsonObject/CMakeLists.txt index 60ba1fe..3f44d98 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/JsonObject/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(JsonObjectTests diff --git a/lib/ArduinoJson/extras/tests/JsonObject/clear.cpp b/lib/ArduinoJson/extras/tests/JsonObject/clear.cpp index 6673d1c..f6f8a22 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/clear.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/clear.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/compare.cpp b/lib/ArduinoJson/extras/tests/JsonObject/compare.cpp index 0c3ff7e..faa0cbd 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/compare.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/compare.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/equals.cpp b/lib/ArduinoJson/extras/tests/JsonObject/equals.cpp index 0ec4673..4a594a7 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/equals.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/equals.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/isNull.cpp b/lib/ArduinoJson/extras/tests/JsonObject/isNull.cpp index 51f7880..8ddb51c 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/isNull.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/isNull.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/iterator.cpp b/lib/ArduinoJson/extras/tests/JsonObject/iterator.cpp index 4918d27..e22d72a 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/iterator.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/iterator.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/nesting.cpp b/lib/ArduinoJson/extras/tests/JsonObject/nesting.cpp index 39c26fa..a3fdaea 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/nesting.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/nesting.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/remove.cpp b/lib/ArduinoJson/extras/tests/JsonObject/remove.cpp index 4c3e35d..052433d 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/remove.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/remove.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/set.cpp b/lib/ArduinoJson/extras/tests/JsonObject/set.cpp index bad0674..e5c3044 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/set.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/set.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include @@ -100,13 +100,13 @@ TEST_CASE("JsonObject::set()") { JsonDocument doc3(&timebomb); JsonObject obj3 = doc3.to(); - obj1["a"_s] = 1; - obj1["b"_s] = 2; + obj1["alpha"_s] = 1; + obj1["beta"_s] = 2; bool success = obj3.set(obj1); REQUIRE(success == false); - REQUIRE(doc3.as() == "{\"a\":1}"); + REQUIRE(doc3.as() == "{\"alpha\":1}"); } SECTION("copy fails in the middle of an array") { diff --git a/lib/ArduinoJson/extras/tests/JsonObject/size.cpp b/lib/ArduinoJson/extras/tests/JsonObject/size.cpp index 5f48645..5c5258e 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/size.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/size.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/std_string.cpp b/lib/ArduinoJson/extras/tests/JsonObject/std_string.cpp index 85ca300..82b87b9 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/std_string.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/std_string.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/subscript.cpp b/lib/ArduinoJson/extras/tests/JsonObject/subscript.cpp index 0acc01e..bdf900f 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/subscript.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/subscript.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObject/unbound.cpp b/lib/ArduinoJson/extras/tests/JsonObject/unbound.cpp index cb2b687..0300502 100644 --- a/lib/ArduinoJson/extras/tests/JsonObject/unbound.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObject/unbound.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObjectConst/CMakeLists.txt b/lib/ArduinoJson/extras/tests/JsonObjectConst/CMakeLists.txt index 447e239..9eb1144 100644 --- a/lib/ArduinoJson/extras/tests/JsonObjectConst/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/JsonObjectConst/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(JsonObjectConstTests diff --git a/lib/ArduinoJson/extras/tests/JsonObjectConst/equals.cpp b/lib/ArduinoJson/extras/tests/JsonObjectConst/equals.cpp index 0efa3cf..c1ad6ff 100644 --- a/lib/ArduinoJson/extras/tests/JsonObjectConst/equals.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObjectConst/equals.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObjectConst/isNull.cpp b/lib/ArduinoJson/extras/tests/JsonObjectConst/isNull.cpp index c689cce..c88b9d7 100644 --- a/lib/ArduinoJson/extras/tests/JsonObjectConst/isNull.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObjectConst/isNull.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObjectConst/iterator.cpp b/lib/ArduinoJson/extras/tests/JsonObjectConst/iterator.cpp index 0ad911e..3b474f4 100644 --- a/lib/ArduinoJson/extras/tests/JsonObjectConst/iterator.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObjectConst/iterator.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObjectConst/nesting.cpp b/lib/ArduinoJson/extras/tests/JsonObjectConst/nesting.cpp index 7bddd8f..6d72cdf 100644 --- a/lib/ArduinoJson/extras/tests/JsonObjectConst/nesting.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObjectConst/nesting.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObjectConst/size.cpp b/lib/ArduinoJson/extras/tests/JsonObjectConst/size.cpp index 25de11a..10e1e13 100644 --- a/lib/ArduinoJson/extras/tests/JsonObjectConst/size.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObjectConst/size.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonObjectConst/subscript.cpp b/lib/ArduinoJson/extras/tests/JsonObjectConst/subscript.cpp index 59714c0..d611b3c 100644 --- a/lib/ArduinoJson/extras/tests/JsonObjectConst/subscript.cpp +++ b/lib/ArduinoJson/extras/tests/JsonObjectConst/subscript.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonSerializer/CMakeLists.txt b/lib/ArduinoJson/extras/tests/JsonSerializer/CMakeLists.txt index 8a6b19f..28ba51e 100644 --- a/lib/ArduinoJson/extras/tests/JsonSerializer/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/JsonSerializer/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(JsonSerializerTests diff --git a/lib/ArduinoJson/extras/tests/JsonSerializer/CustomWriter.cpp b/lib/ArduinoJson/extras/tests/JsonSerializer/CustomWriter.cpp index 002aa57..8e7f1de 100644 --- a/lib/ArduinoJson/extras/tests/JsonSerializer/CustomWriter.cpp +++ b/lib/ArduinoJson/extras/tests/JsonSerializer/CustomWriter.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonArray.cpp b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonArray.cpp index b4bf838..f33c152 100644 --- a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonArray.cpp +++ b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonArray.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonArrayPretty.cpp b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonArrayPretty.cpp index ede368c..7939bd9 100644 --- a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonArrayPretty.cpp +++ b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonArrayPretty.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonObject.cpp b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonObject.cpp index 7078886..c21d16d 100644 --- a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonObject.cpp +++ b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonObject.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonObjectPretty.cpp b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonObjectPretty.cpp index 01d7377..24e32fb 100644 --- a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonObjectPretty.cpp +++ b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonObjectPretty.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonVariant.cpp b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonVariant.cpp index 1ddaea6..dcb8aee 100644 --- a/lib/ArduinoJson/extras/tests/JsonSerializer/JsonVariant.cpp +++ b/lib/ArduinoJson/extras/tests/JsonSerializer/JsonVariant.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonSerializer/std_stream.cpp b/lib/ArduinoJson/extras/tests/JsonSerializer/std_stream.cpp index 5fd89b9..28fd6f7 100644 --- a/lib/ArduinoJson/extras/tests/JsonSerializer/std_stream.cpp +++ b/lib/ArduinoJson/extras/tests/JsonSerializer/std_stream.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonSerializer/std_string.cpp b/lib/ArduinoJson/extras/tests/JsonSerializer/std_string.cpp index 33b8f50..0d23429 100644 --- a/lib/ArduinoJson/extras/tests/JsonSerializer/std_string.cpp +++ b/lib/ArduinoJson/extras/tests/JsonSerializer/std_string.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/CMakeLists.txt b/lib/ArduinoJson/extras/tests/JsonVariant/CMakeLists.txt index 282e6ce..6aec75f 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/JsonVariant/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(JsonVariantTests diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/add.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/add.cpp index a81d792..3aaa724 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/add.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/add.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/as.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/as.cpp index bfdea04..b123572 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/as.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/as.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include @@ -183,6 +183,7 @@ TEST_CASE("JsonVariant::as()") { variant.set("42"); REQUIRE(variant.as() == 42L); + REQUIRE(variant.as() == 42); REQUIRE(variant.as() == "42"); REQUIRE(variant.as().isStatic() == true); } @@ -198,7 +199,7 @@ TEST_CASE("JsonVariant::as()") { REQUIRE(variant.as() == "hello"); } - SECTION("set(std::string(\"4.2\"))") { + SECTION("set(std::string(\"4.2\")) (tiny string optimization)") { variant.set("4.2"_s); REQUIRE(variant.as() == true); @@ -210,6 +211,18 @@ TEST_CASE("JsonVariant::as()") { REQUIRE(variant.as().isStatic() == false); } + SECTION("set(std::string(\"123.45\"))") { + variant.set("123.45"_s); + + REQUIRE(variant.as() == true); + REQUIRE(variant.as() == 123L); + REQUIRE(variant.as() == Approx(123.45)); + REQUIRE(variant.as() == "123.45"_s); + REQUIRE(variant.as() == "123.45"_s); + REQUIRE(variant.as() == "123.45"); + REQUIRE(variant.as().isStatic() == false); + } + SECTION("set(\"true\")") { variant.set("true"); diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/clear.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/clear.cpp index 8e292d2..6078d6b 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/clear.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/clear.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/compare.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/compare.cpp index de7ced7..719566e 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/compare.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/compare.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/converters.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/converters.cpp index 545c4be..10d7385 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/converters.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/converters.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/copy.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/copy.cpp index 7a52c2e..b5da71f 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/copy.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/copy.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/is.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/is.cpp index 4d07034..9e38b7b 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/is.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/is.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/isnull.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/isnull.cpp index 75617e9..7683eb8 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/isnull.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/isnull.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/misc.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/misc.cpp index 4b39cf8..6298344 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/misc.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/misc.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/nesting.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/nesting.cpp index f2a703f..cb4e351 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/nesting.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/nesting.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/or.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/or.cpp index 937a0cf..5886899 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/or.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/or.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/overflow.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/overflow.cpp index 744805f..00dbed7 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/overflow.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/overflow.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/remove.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/remove.cpp index 3371c2e..2926cfe 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/remove.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/remove.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/set.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/set.cpp index b71c001..7d56818 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/set.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/set.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include @@ -63,6 +63,18 @@ TEST_CASE("JsonVariant::set() when there is enough memory") { }); } + SECTION("char* (tiny string optimization)") { + char str[16]; + + strcpy(str, "abc"); + bool result = variant.set(str); + strcpy(str, "def"); + + REQUIRE(result == true); + REQUIRE(variant == "abc"); // stores by copy + REQUIRE(spy.log() == AllocatorLog{}); + } + SECTION("(char*)0") { bool result = variant.set(static_cast(0)); diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/size.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/size.cpp index 2f8e8a7..e0c5bb4 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/size.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/size.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/stl_containers.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/stl_containers.cpp index 6ffa580..53a23fd 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/stl_containers.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/stl_containers.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/subscript.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/subscript.cpp index 7c3d1e4..0f9509c 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/subscript.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/subscript.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/types.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/types.cpp index b04c91f..26a6265 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/types.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/types.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariant/unbound.cpp b/lib/ArduinoJson/extras/tests/JsonVariant/unbound.cpp index 0f1740b..a19a8c4 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariant/unbound.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariant/unbound.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariantConst/CMakeLists.txt b/lib/ArduinoJson/extras/tests/JsonVariantConst/CMakeLists.txt index b943f16..1cff558 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariantConst/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/JsonVariantConst/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(JsonVariantConstTests diff --git a/lib/ArduinoJson/extras/tests/JsonVariantConst/as.cpp b/lib/ArduinoJson/extras/tests/JsonVariantConst/as.cpp index 5ef1563..8584ff5 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariantConst/as.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariantConst/as.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariantConst/is.cpp b/lib/ArduinoJson/extras/tests/JsonVariantConst/is.cpp index 24f9326..32c16ac 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariantConst/is.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariantConst/is.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariantConst/isnull.cpp b/lib/ArduinoJson/extras/tests/JsonVariantConst/isnull.cpp index 14572c7..30996db 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariantConst/isnull.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariantConst/isnull.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariantConst/nesting.cpp b/lib/ArduinoJson/extras/tests/JsonVariantConst/nesting.cpp index 827f766..4f035db 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariantConst/nesting.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariantConst/nesting.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariantConst/size.cpp b/lib/ArduinoJson/extras/tests/JsonVariantConst/size.cpp index c047951..9a6943e 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariantConst/size.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariantConst/size.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/JsonVariantConst/subscript.cpp b/lib/ArduinoJson/extras/tests/JsonVariantConst/subscript.cpp index a207c53..281e3d9 100644 --- a/lib/ArduinoJson/extras/tests/JsonVariantConst/subscript.cpp +++ b/lib/ArduinoJson/extras/tests/JsonVariantConst/subscript.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/CMakeLists.txt b/lib/ArduinoJson/extras/tests/Misc/CMakeLists.txt index 4230a9c..05be1ca 100644 --- a/lib/ArduinoJson/extras/tests/Misc/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/Misc/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(MiscTests @@ -7,6 +7,7 @@ add_executable(MiscTests conflicts.cpp issue1967.cpp issue2129.cpp + issue2166.cpp JsonString.cpp NoArduinoHeader.cpp printable.cpp diff --git a/lib/ArduinoJson/extras/tests/Misc/JsonString.cpp b/lib/ArduinoJson/extras/tests/Misc/JsonString.cpp index 3a33677..a66f771 100644 --- a/lib/ArduinoJson/extras/tests/Misc/JsonString.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/JsonString.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/NoArduinoHeader.cpp b/lib/ArduinoJson/extras/tests/Misc/NoArduinoHeader.cpp index b589127..efcd8e4 100644 --- a/lib/ArduinoJson/extras/tests/Misc/NoArduinoHeader.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/NoArduinoHeader.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINO 1 diff --git a/lib/ArduinoJson/extras/tests/Misc/Readers.cpp b/lib/ArduinoJson/extras/tests/Misc/Readers.cpp index ffb6355..4077243 100644 --- a/lib/ArduinoJson/extras/tests/Misc/Readers.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/Readers.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/StringAdapters.cpp b/lib/ArduinoJson/extras/tests/Misc/StringAdapters.cpp index 71e458b..9917897 100644 --- a/lib/ArduinoJson/extras/tests/Misc/StringAdapters.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/StringAdapters.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include @@ -128,6 +128,7 @@ TEST_CASE("IsString") { CHECK(IsString::value == true); CHECK(IsString::value == true); CHECK(IsString::value == true); + CHECK(IsString::value == true); CHECK(IsString<::String>::value == true); CHECK(IsString<::StringSumHelper>::value == true); CHECK(IsString::value == false); diff --git a/lib/ArduinoJson/extras/tests/Misc/StringWriter.cpp b/lib/ArduinoJson/extras/tests/Misc/StringWriter.cpp index 3bf60ec..6c22720 100644 --- a/lib/ArduinoJson/extras/tests/Misc/StringWriter.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/StringWriter.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/TypeTraits.cpp b/lib/ArduinoJson/extras/tests/Misc/TypeTraits.cpp index 5d08106..4fad799 100644 --- a/lib/ArduinoJson/extras/tests/Misc/TypeTraits.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/TypeTraits.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/Utf16.cpp b/lib/ArduinoJson/extras/tests/Misc/Utf16.cpp index 4b19fdb..39fbe3c 100644 --- a/lib/ArduinoJson/extras/tests/Misc/Utf16.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/Utf16.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/Utf8.cpp b/lib/ArduinoJson/extras/tests/Misc/Utf8.cpp index 3a60281..740046d 100644 --- a/lib/ArduinoJson/extras/tests/Misc/Utf8.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/Utf8.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/arithmeticCompare.cpp b/lib/ArduinoJson/extras/tests/Misc/arithmeticCompare.cpp index a879500..e955194 100644 --- a/lib/ArduinoJson/extras/tests/Misc/arithmeticCompare.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/arithmeticCompare.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/conflicts.cpp b/lib/ArduinoJson/extras/tests/Misc/conflicts.cpp index 5ce6823..a00d019 100644 --- a/lib/ArduinoJson/extras/tests/Misc/conflicts.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/conflicts.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // Include any header that might use the conflicting macros diff --git a/lib/ArduinoJson/extras/tests/Misc/custom_string.hpp b/lib/ArduinoJson/extras/tests/Misc/custom_string.hpp index 9be1f54..9982040 100644 --- a/lib/ArduinoJson/extras/tests/Misc/custom_string.hpp +++ b/lib/ArduinoJson/extras/tests/Misc/custom_string.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/extras/tests/Misc/issue1967.cpp b/lib/ArduinoJson/extras/tests/Misc/issue1967.cpp index 833fcf0..bb067f0 100644 --- a/lib/ArduinoJson/extras/tests/Misc/issue1967.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/issue1967.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // we expect ArduinoJson.h to include diff --git a/lib/ArduinoJson/extras/tests/Misc/issue2129.cpp b/lib/ArduinoJson/extras/tests/Misc/issue2129.cpp index 8b336f2..022e232 100644 --- a/lib/ArduinoJson/extras/tests/Misc/issue2129.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/issue2129.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/issue2166.cpp b/lib/ArduinoJson/extras/tests/Misc/issue2166.cpp new file mode 100644 index 0000000..f068bd6 --- /dev/null +++ b/lib/ArduinoJson/extras/tests/Misc/issue2166.cpp @@ -0,0 +1,22 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2025, Benoit BLANCHON +// MIT License + +#include +#include + +struct CCLASS { + static const char mszKey[]; +}; + +TEST_CASE("Issue #2166") { + JsonDocument doc; + doc[CCLASS::mszKey] = 12; + REQUIRE(doc.as() == "{\"test3\":12}"); + + JsonObject obj = doc.to(); + obj[CCLASS::mszKey] = 12; + REQUIRE(doc.as() == "{\"test3\":12}"); +} + +const char CCLASS::mszKey[] = "test3"; diff --git a/lib/ArduinoJson/extras/tests/Misc/printable.cpp b/lib/ArduinoJson/extras/tests/Misc/printable.cpp index 6062cce..3e20a5b 100644 --- a/lib/ArduinoJson/extras/tests/Misc/printable.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/printable.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/unsigned_char.cpp b/lib/ArduinoJson/extras/tests/Misc/unsigned_char.cpp index a1bb155..3e95027 100644 --- a/lib/ArduinoJson/extras/tests/Misc/unsigned_char.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/unsigned_char.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/version.cpp b/lib/ArduinoJson/extras/tests/Misc/version.cpp index 2256fd2..136dbf3 100644 --- a/lib/ArduinoJson/extras/tests/Misc/version.cpp +++ b/lib/ArduinoJson/extras/tests/Misc/version.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Misc/weird_strcmp.hpp b/lib/ArduinoJson/extras/tests/Misc/weird_strcmp.hpp index c0e5c6c..dbe122f 100644 --- a/lib/ArduinoJson/extras/tests/Misc/weird_strcmp.hpp +++ b/lib/ArduinoJson/extras/tests/Misc/weird_strcmp.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MixedConfiguration/CMakeLists.txt b/lib/ArduinoJson/extras/tests/MixedConfiguration/CMakeLists.txt index b8cad8e..08d8888 100644 --- a/lib/ArduinoJson/extras/tests/MixedConfiguration/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/MixedConfiguration/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(MixedConfigurationTests diff --git a/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_comments_0.cpp b/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_comments_0.cpp index bffbe7a..f0904c5 100644 --- a/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_comments_0.cpp +++ b/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_comments_0.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_ENABLE_COMMENTS 0 diff --git a/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_comments_1.cpp b/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_comments_1.cpp index db9c263..7e135df 100644 --- a/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_comments_1.cpp +++ b/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_comments_1.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_ENABLE_COMMENTS 1 diff --git a/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_progmem_1.cpp b/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_progmem_1.cpp index 3dc869c..312a87f 100644 --- a/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_progmem_1.cpp +++ b/lib/ArduinoJson/extras/tests/MixedConfiguration/enable_progmem_1.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_ENABLE_PROGMEM 1 diff --git a/lib/ArduinoJson/extras/tests/MixedConfiguration/issue1707.cpp b/lib/ArduinoJson/extras/tests/MixedConfiguration/issue1707.cpp index 5dc3c61..ff8d2ba 100644 --- a/lib/ArduinoJson/extras/tests/MixedConfiguration/issue1707.cpp +++ b/lib/ArduinoJson/extras/tests/MixedConfiguration/issue1707.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINO diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/CMakeLists.txt b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/CMakeLists.txt index 61dc8b9..96b4584 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(MsgPackDeserializerTests diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeArray.cpp b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeArray.cpp index 053c765..03409a9 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeArray.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeArray.cpp @@ -1,12 +1,15 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include #include +#include "Allocators.hpp" + TEST_CASE("deserialize MsgPack array") { - JsonDocument doc; + SpyingAllocator spy; + JsonDocument doc(&spy); SECTION("fixarray") { SECTION("empty") { @@ -30,6 +33,24 @@ TEST_CASE("deserialize MsgPack array") { REQUIRE(array[0] == 1); REQUIRE(array[1] == 2); } + + SECTION("tiny strings") { + DeserializationError error = + deserializeMsgPack(doc, "\x92\xA3xxx\xA3yyy"); + + REQUIRE(error == DeserializationError::Ok); + REQUIRE(doc.is()); + REQUIRE(doc.size() == 2); + REQUIRE(doc[0] == "xxx"); + REQUIRE(doc[1] == "yyy"); + REQUIRE(spy.log() == AllocatorLog{ + Allocate(sizeofPool()), + Allocate(sizeofString("xxx")), + // Buffer is reused for the next string + Deallocate(sizeofString("xxx")), + Reallocate(sizeofPool(), sizeofPool(2)), + }); + } } SECTION("array 16") { diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeObject.cpp b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeObject.cpp index 675329e..75266f2 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeObject.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeObject.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeVariant.cpp b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeVariant.cpp index 412d541..bbe88ed 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeVariant.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/deserializeVariant.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include @@ -348,13 +348,14 @@ TEST_CASE("deserializeMsgPack() under memory constaints") { SECTION("{}") { checkError(0, "\x80", DeserializationError::Ok); } - SECTION("{H:1}") { - checkError(1, "\x81\xA1H\x01", DeserializationError::NoMemory); - checkError(2, "\x81\xA1H\x01", DeserializationError::Ok); + SECTION("{Hello:1}") { + checkError(1, "\x81\xA5Hello\x01", DeserializationError::NoMemory); + checkError(2, "\x81\xA5Hello\x01", DeserializationError::Ok); } - SECTION("{H:1,W:2}") { - checkError(2, "\x82\xA1H\x01\xA1W\x02", DeserializationError::NoMemory); - checkError(3, "\x82\xA1H\x01\xA1W\x02", DeserializationError::Ok); + SECTION("{Hello:1,World:2}") { + checkError(2, "\x82\xA5Hello\x01\xA5World\x02", + DeserializationError::NoMemory); + checkError(3, "\x82\xA5Hello\x01\xA5World\x02", DeserializationError::Ok); } } @@ -362,14 +363,16 @@ TEST_CASE("deserializeMsgPack() under memory constaints") { SECTION("{}") { checkError(0, "\xDE\x00\x00", DeserializationError::Ok); } - SECTION("{H:1}") { - checkError(1, "\xDE\x00\x01\xA1H\x01", DeserializationError::NoMemory); - checkError(2, "\xDE\x00\x01\xA1H\x01", DeserializationError::Ok); - } - SECTION("{H:1,W:2}") { - checkError(2, "\xDE\x00\x02\xA1H\x01\xA1W\x02", + SECTION("{Hello:1}") { + checkError(1, "\xDE\x00\x01\xA5Hello\x01", DeserializationError::NoMemory); - checkError(3, "\xDE\x00\x02\xA1H\x01\xA1W\x02", DeserializationError::Ok); + checkError(2, "\xDE\x00\x01\xA5Hello\x01", DeserializationError::Ok); + } + SECTION("{Hello:1,World:2}") { + checkError(2, "\xDE\x00\x02\xA5Hello\x01\xA5World\x02", + DeserializationError::NoMemory); + checkError(3, "\xDE\x00\x02\xA5Hello\x01\xA5World\x02", + DeserializationError::Ok); } } @@ -382,8 +385,8 @@ TEST_CASE("deserializeMsgPack() under memory constaints") { DeserializationError::NoMemory); checkError(2, "\xDF\x00\x00\x00\x01\xA1H\x01", DeserializationError::Ok); } - SECTION("{H:1,W:2}") { - checkError(2, "\xDF\x00\x00\x00\x02\xA1H\x01\xA1W\x02", + SECTION("{Hello:1,World:2}") { + checkError(2, "\xDF\x00\x00\x00\x02\xA5Hello\x01\xA5World\x02", DeserializationError::NoMemory); checkError(3, "\xDF\x00\x00\x00\x02\xA1H\x01\xA1W\x02", DeserializationError::Ok); diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/destination_types.cpp b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/destination_types.cpp index f0d04d6..6b437ec 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/destination_types.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/destination_types.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/doubleToFloat.cpp b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/doubleToFloat.cpp index 167261f..6eadd0e 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/doubleToFloat.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/doubleToFloat.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/errors.cpp b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/errors.cpp index dff712a..9a8119e 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/errors.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/errors.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/filter.cpp b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/filter.cpp index dcd2d54..6bcd7b1 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/filter.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/filter.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/input_types.cpp b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/input_types.cpp index b581f20..42f6137 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/input_types.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/input_types.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/nestingLimit.cpp b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/nestingLimit.cpp index 206600c..a41ea0a 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackDeserializer/nestingLimit.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackDeserializer/nestingLimit.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackSerializer/CMakeLists.txt b/lib/ArduinoJson/extras/tests/MsgPackSerializer/CMakeLists.txt index 25b0384..8f484bb 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackSerializer/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/MsgPackSerializer/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(MsgPackSerializerTests diff --git a/lib/ArduinoJson/extras/tests/MsgPackSerializer/destination_types.cpp b/lib/ArduinoJson/extras/tests/MsgPackSerializer/destination_types.cpp index 569d5f7..160ca8a 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackSerializer/destination_types.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackSerializer/destination_types.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackSerializer/measure.cpp b/lib/ArduinoJson/extras/tests/MsgPackSerializer/measure.cpp index e1480e2..882069b 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackSerializer/measure.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackSerializer/measure.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeArray.cpp b/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeArray.cpp index 3e36b9f..9539041 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeArray.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeArray.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_SLOT_ID_SIZE 4 // required to reach 65536 elements diff --git a/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeObject.cpp b/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeObject.cpp index 07774d0..7dc1526 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeObject.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeObject.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeVariant.cpp b/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeVariant.cpp index 505b56c..56faccd 100644 --- a/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeVariant.cpp +++ b/lib/ArduinoJson/extras/tests/MsgPackSerializer/serializeVariant.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Numbers/CMakeLists.txt b/lib/ArduinoJson/extras/tests/Numbers/CMakeLists.txt index e4ef2dd..6505ce7 100644 --- a/lib/ArduinoJson/extras/tests/Numbers/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/Numbers/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(NumbersTests diff --git a/lib/ArduinoJson/extras/tests/Numbers/convertNumber.cpp b/lib/ArduinoJson/extras/tests/Numbers/convertNumber.cpp index 7a2ae53..98cd676 100644 --- a/lib/ArduinoJson/extras/tests/Numbers/convertNumber.cpp +++ b/lib/ArduinoJson/extras/tests/Numbers/convertNumber.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Numbers/decomposeFloat.cpp b/lib/ArduinoJson/extras/tests/Numbers/decomposeFloat.cpp index 73de571..e0578f6 100644 --- a/lib/ArduinoJson/extras/tests/Numbers/decomposeFloat.cpp +++ b/lib/ArduinoJson/extras/tests/Numbers/decomposeFloat.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Numbers/parseDouble.cpp b/lib/ArduinoJson/extras/tests/Numbers/parseDouble.cpp index cd84ca4..a459279 100644 --- a/lib/ArduinoJson/extras/tests/Numbers/parseDouble.cpp +++ b/lib/ArduinoJson/extras/tests/Numbers/parseDouble.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_USE_DOUBLE 1 diff --git a/lib/ArduinoJson/extras/tests/Numbers/parseFloat.cpp b/lib/ArduinoJson/extras/tests/Numbers/parseFloat.cpp index f81428f..62c0917 100644 --- a/lib/ArduinoJson/extras/tests/Numbers/parseFloat.cpp +++ b/lib/ArduinoJson/extras/tests/Numbers/parseFloat.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #define ARDUINOJSON_ENABLE_NAN 1 diff --git a/lib/ArduinoJson/extras/tests/Numbers/parseInteger.cpp b/lib/ArduinoJson/extras/tests/Numbers/parseInteger.cpp index 2180304..aff2358 100644 --- a/lib/ArduinoJson/extras/tests/Numbers/parseInteger.cpp +++ b/lib/ArduinoJson/extras/tests/Numbers/parseInteger.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/Numbers/parseNumber.cpp b/lib/ArduinoJson/extras/tests/Numbers/parseNumber.cpp index bc5d3b3..37b12bb 100644 --- a/lib/ArduinoJson/extras/tests/Numbers/parseNumber.cpp +++ b/lib/ArduinoJson/extras/tests/Numbers/parseNumber.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/ResourceManager/CMakeLists.txt b/lib/ArduinoJson/extras/tests/ResourceManager/CMakeLists.txt index 9214f5b..3a0908a 100644 --- a/lib/ArduinoJson/extras/tests/ResourceManager/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/ResourceManager/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(ResourceManagerTests @@ -8,6 +8,7 @@ add_executable(ResourceManagerTests saveString.cpp shrinkToFit.cpp size.cpp + StringBuffer.cpp StringBuilder.cpp swap.cpp ) diff --git a/lib/ArduinoJson/extras/tests/ResourceManager/StringBuffer.cpp b/lib/ArduinoJson/extras/tests/ResourceManager/StringBuffer.cpp new file mode 100644 index 0000000..1fb2b01 --- /dev/null +++ b/lib/ArduinoJson/extras/tests/ResourceManager/StringBuffer.cpp @@ -0,0 +1,50 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2025, Benoit BLANCHON +// MIT License + +#include +#include + +#include "Allocators.hpp" +#include "Literals.hpp" + +using namespace ArduinoJson::detail; + +TEST_CASE("StringBuffer") { + SpyingAllocator spy; + ResourceManager resources(&spy); + StringBuffer sb(&resources); + VariantData variant; + + SECTION("Tiny string") { + auto ptr = sb.reserve(3); + strcpy(ptr, "hi!"); + sb.save(&variant); + + REQUIRE(variant.type() == VariantType::TinyString); + REQUIRE(variant.asString() == "hi!"); + } + + SECTION("Tiny string can't contain NUL") { + auto ptr = sb.reserve(3); + memcpy(ptr, "a\0b", 3); + sb.save(&variant); + + REQUIRE(variant.type() == VariantType::OwnedString); + + auto str = variant.asString(); + REQUIRE(str.size() == 3); + REQUIRE(str.c_str()[0] == 'a'); + REQUIRE(str.c_str()[1] == 0); + REQUIRE(str.c_str()[2] == 'b'); + } + + SECTION("Tiny string can't have 4 characters") { + auto ptr = sb.reserve(4); + strcpy(ptr, "alfa"); + sb.save(&variant); + + REQUIRE(variant.type() == VariantType::OwnedString); + REQUIRE(variant.asString() == "alfa"); + } +} diff --git a/lib/ArduinoJson/extras/tests/ResourceManager/StringBuilder.cpp b/lib/ArduinoJson/extras/tests/ResourceManager/StringBuilder.cpp index b649afe..a63661b 100644 --- a/lib/ArduinoJson/extras/tests/ResourceManager/StringBuilder.cpp +++ b/lib/ArduinoJson/extras/tests/ResourceManager/StringBuilder.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include @@ -7,6 +7,7 @@ #include "Allocators.hpp" +using namespace ArduinoJson; using namespace ArduinoJson::detail; TEST_CASE("StringBuilder") { @@ -16,17 +17,36 @@ TEST_CASE("StringBuilder") { SECTION("Empty string") { StringBuilder str(&resources); + VariantData data; str.startString(); - str.save(); + str.save(&data); - REQUIRE(resources.size() == sizeofString("")); REQUIRE(resources.overflowed() == false); - REQUIRE(spyingAllocator.log() == - AllocatorLog{ - Allocate(sizeofStringBuffer()), - Reallocate(sizeofStringBuffer(), sizeofString("")), - }); + REQUIRE(spyingAllocator.log() == AllocatorLog{ + Allocate(sizeofStringBuffer()), + }); + REQUIRE(data.type() == VariantType::TinyString); + } + + SECTION("Tiny string") { + StringBuilder str(&resources); + + str.startString(); + str.append("url"); + + REQUIRE(str.isValid() == true); + REQUIRE(str.str() == "url"); + REQUIRE(spyingAllocator.log() == AllocatorLog{ + Allocate(sizeofStringBuffer()), + }); + + VariantData data; + str.save(&data); + + REQUIRE(resources.overflowed() == false); + REQUIRE(data.type() == VariantType::TinyString); + REQUIRE(data.asString() == "url"); } SECTION("Short string fits in first allocation") { @@ -96,48 +116,69 @@ TEST_CASE("StringBuilder") { } } -static StringNode* addStringToPool(ResourceManager& resources, const char* s) { - StringBuilder str(&resources); - str.startString(); - str.append(s); - return str.save(); +static JsonString saveString(StringBuilder& builder, const char* s) { + VariantData data; + builder.startString(); + builder.append(s); + builder.save(&data); + return data.asString(); } TEST_CASE("StringBuilder::save() deduplicates strings") { - ResourceManager resources; + SpyingAllocator spy; + ResourceManager resources(&spy); + StringBuilder builder(&resources); SECTION("Basic") { - auto s1 = addStringToPool(resources, "hello"); - auto s2 = addStringToPool(resources, "world"); - auto s3 = addStringToPool(resources, "hello"); + auto s1 = saveString(builder, "hello"); + auto s2 = saveString(builder, "world"); + auto s3 = saveString(builder, "hello"); - REQUIRE(s1 == s3); - REQUIRE(s2 != s3); - REQUIRE(s1->references == 2); - REQUIRE(s2->references == 1); - REQUIRE(s3->references == 2); - REQUIRE(resources.size() == sizeofString("hello") + sizeofString("world")); + REQUIRE(s1 == "hello"); + REQUIRE(s2 == "world"); + REQUIRE(+s1.c_str() == +s3.c_str()); // same address + + REQUIRE(spy.log() == + AllocatorLog{ + Allocate(sizeofStringBuffer()), + Reallocate(sizeofStringBuffer(), sizeofString("hello")), + Allocate(sizeofStringBuffer()), + Reallocate(sizeofStringBuffer(), sizeofString("world")), + Allocate(sizeofStringBuffer()), + }); } SECTION("Requires terminator") { - auto s1 = addStringToPool(resources, "hello world"); - auto s2 = addStringToPool(resources, "hello"); + auto s1 = saveString(builder, "hello world"); + auto s2 = saveString(builder, "hello"); - REQUIRE(s2 != s1); - REQUIRE(s1->references == 1); - REQUIRE(s2->references == 1); - REQUIRE(resources.size() == - sizeofString("hello world") + sizeofString("hello")); + REQUIRE(s1 == "hello world"); + REQUIRE(s2 == "hello"); + REQUIRE(+s2.c_str() != +s1.c_str()); // different address + + REQUIRE(spy.log() == + AllocatorLog{ + Allocate(sizeofStringBuffer()), + Reallocate(sizeofStringBuffer(), sizeofString("hello world")), + Allocate(sizeofStringBuffer()), + Reallocate(sizeofStringBuffer(), sizeofString("hello")), + }); } SECTION("Don't overrun") { - auto s1 = addStringToPool(resources, "hello world"); - auto s2 = addStringToPool(resources, "wor"); + auto s1 = saveString(builder, "hello world"); + auto s2 = saveString(builder, "worl"); - REQUIRE(s2 != s1); - REQUIRE(s1->references == 1); - REQUIRE(s2->references == 1); - REQUIRE(resources.size() == - sizeofString("hello world") + sizeofString("wor")); + REQUIRE(s1 == "hello world"); + REQUIRE(s2 == "worl"); + REQUIRE(s2.c_str() != s1.c_str()); // different address + + REQUIRE(spy.log() == + AllocatorLog{ + Allocate(sizeofStringBuffer()), + Reallocate(sizeofStringBuffer(), sizeofString("hello world")), + Allocate(sizeofStringBuffer()), + Reallocate(sizeofStringBuffer(), sizeofString("worl")), + }); } } diff --git a/lib/ArduinoJson/extras/tests/ResourceManager/allocVariant.cpp b/lib/ArduinoJson/extras/tests/ResourceManager/allocVariant.cpp index 3cfadf3..0568791 100644 --- a/lib/ArduinoJson/extras/tests/ResourceManager/allocVariant.cpp +++ b/lib/ArduinoJson/extras/tests/ResourceManager/allocVariant.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/ResourceManager/clear.cpp b/lib/ArduinoJson/extras/tests/ResourceManager/clear.cpp index a773603..e770776 100644 --- a/lib/ArduinoJson/extras/tests/ResourceManager/clear.cpp +++ b/lib/ArduinoJson/extras/tests/ResourceManager/clear.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/ResourceManager/saveString.cpp b/lib/ArduinoJson/extras/tests/ResourceManager/saveString.cpp index 88c242f..3c7a228 100644 --- a/lib/ArduinoJson/extras/tests/ResourceManager/saveString.cpp +++ b/lib/ArduinoJson/extras/tests/ResourceManager/saveString.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/ResourceManager/shrinkToFit.cpp b/lib/ArduinoJson/extras/tests/ResourceManager/shrinkToFit.cpp index d35ee34..4f1eb5d 100644 --- a/lib/ArduinoJson/extras/tests/ResourceManager/shrinkToFit.cpp +++ b/lib/ArduinoJson/extras/tests/ResourceManager/shrinkToFit.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/ResourceManager/size.cpp b/lib/ArduinoJson/extras/tests/ResourceManager/size.cpp index 8d4b799..17f3f42 100644 --- a/lib/ArduinoJson/extras/tests/ResourceManager/size.cpp +++ b/lib/ArduinoJson/extras/tests/ResourceManager/size.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/ResourceManager/swap.cpp b/lib/ArduinoJson/extras/tests/ResourceManager/swap.cpp index a2b1fe9..f5d8fee 100644 --- a/lib/ArduinoJson/extras/tests/ResourceManager/swap.cpp +++ b/lib/ArduinoJson/extras/tests/ResourceManager/swap.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/TextFormatter/CMakeLists.txt b/lib/ArduinoJson/extras/tests/TextFormatter/CMakeLists.txt index 3b3b5bb..79618c7 100644 --- a/lib/ArduinoJson/extras/tests/TextFormatter/CMakeLists.txt +++ b/lib/ArduinoJson/extras/tests/TextFormatter/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License add_executable(TextFormatterTests diff --git a/lib/ArduinoJson/extras/tests/TextFormatter/writeFloat.cpp b/lib/ArduinoJson/extras/tests/TextFormatter/writeFloat.cpp index a787712..1afcaec 100644 --- a/lib/ArduinoJson/extras/tests/TextFormatter/writeFloat.cpp +++ b/lib/ArduinoJson/extras/tests/TextFormatter/writeFloat.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/TextFormatter/writeInteger.cpp b/lib/ArduinoJson/extras/tests/TextFormatter/writeInteger.cpp index 1906750..47a864c 100644 --- a/lib/ArduinoJson/extras/tests/TextFormatter/writeInteger.cpp +++ b/lib/ArduinoJson/extras/tests/TextFormatter/writeInteger.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/extras/tests/TextFormatter/writeString.cpp b/lib/ArduinoJson/extras/tests/TextFormatter/writeString.cpp index 2d3d096..35ae297 100644 --- a/lib/ArduinoJson/extras/tests/TextFormatter/writeString.cpp +++ b/lib/ArduinoJson/extras/tests/TextFormatter/writeString.cpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #include diff --git a/lib/ArduinoJson/idf_component.yml b/lib/ArduinoJson/idf_component.yml index 70641db..843f9f4 100644 --- a/lib/ArduinoJson/idf_component.yml +++ b/lib/ArduinoJson/idf_component.yml @@ -1,7 +1,7 @@ -version: "7.3.0" +version: "7.4.1" description: >- A simple and efficient JSON library for embedded C++. - ★ 6785 stars on GitHub! + ★ 6898 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented. url: https://arduinojson.org/ diff --git a/lib/ArduinoJson/library.json b/lib/ArduinoJson/library.json index ba5d224..369a552 100644 --- a/lib/ArduinoJson/library.json +++ b/lib/ArduinoJson/library.json @@ -1,13 +1,13 @@ { "name": "ArduinoJson", "keywords": "json, rest, http, web", - "description": "A simple and efficient JSON library for embedded C++. ⭐ 6785 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented.", + "description": "A simple and efficient JSON library for embedded C++. ⭐ 6898 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented.", "homepage": "https://arduinojson.org/?utm_source=meta&utm_medium=library.json", "repository": { "type": "git", "url": "https://github.com/bblanchon/ArduinoJson.git" }, - "version": "7.3.0", + "version": "7.4.1", "authors": { "name": "Benoit Blanchon", "url": "https://blog.benoitblanchon.fr" diff --git a/lib/ArduinoJson/library.properties b/lib/ArduinoJson/library.properties index 6a153c0..c4f7784 100644 --- a/lib/ArduinoJson/library.properties +++ b/lib/ArduinoJson/library.properties @@ -1,9 +1,9 @@ name=ArduinoJson -version=7.3.0 +version=7.4.1 author=Benoit Blanchon maintainer=Benoit Blanchon sentence=A simple and efficient JSON library for embedded C++. -paragraph=⭐ 6785 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented. +paragraph=⭐ 6898 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented. category=Data Processing url=https://arduinojson.org/?utm_source=meta&utm_medium=library.properties architectures=* diff --git a/lib/ArduinoJson/src/ArduinoJson.h b/lib/ArduinoJson/src/ArduinoJson.h index fec64c3..eb4b94a 100644 --- a/lib/ArduinoJson/src/ArduinoJson.h +++ b/lib/ArduinoJson/src/ArduinoJson.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson.hpp b/lib/ArduinoJson/src/ArduinoJson.hpp index a14f2b1..5818de3 100644 --- a/lib/ArduinoJson/src/ArduinoJson.hpp +++ b/lib/ArduinoJson/src/ArduinoJson.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp b/lib/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp index f0f3175..79ade35 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp index de26193..b4fb126 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp b/lib/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp index 06994a9..ec2ea54 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp b/lib/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp index 7f02f98..436793a 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp b/lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp index b053518..b4c138a 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp b/lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp index 70bb28f..39ca45e 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp b/lib/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp index 200cb66..d9ba143 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp b/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp index 5817c7a..937c10c 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp index c0a650c..559c0a5 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Configuration.hpp b/lib/ArduinoJson/src/ArduinoJson/Configuration.hpp index cf6fb38..696ce4c 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Configuration.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Configuration.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp index fd32a55..7ec685f 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp index 4c73934..0d31d2f 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp index 7670556..4cd5647 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp index d30402b..fb46102 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp index e728047..b8e896b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp index a4b1143..afa3696 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp index d55859f..da2f173 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp index fa8ff23..5b59b0c 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp index 5584ec5..5fc8ba5 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp index 4739d72..b778a24 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp index 947dd7f..5e1233b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp index 92f9541..23d7260 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp b/lib/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp index c1963a8..4c3b229 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Document/JsonDocument.hpp b/lib/ArduinoJson/src/ArduinoJson/Document/JsonDocument.hpp index 0907623..63902c4 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Document/JsonDocument.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Document/JsonDocument.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Json/EscapeSequence.hpp b/lib/ArduinoJson/src/ArduinoJson/Json/EscapeSequence.hpp index 35a99d6..687f291 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Json/EscapeSequence.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Json/EscapeSequence.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Json/JsonDeserializer.hpp b/lib/ArduinoJson/src/ArduinoJson/Json/JsonDeserializer.hpp index fb03e69..288a22c 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Json/JsonDeserializer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Json/JsonDeserializer.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -275,13 +275,11 @@ class JsonDeserializer { if (memberFilter.allow()) { auto member = object.getMember(adaptString(key), resources_); if (!member) { - // Save key in memory pool. - auto savedKey = stringBuilder_.save(); - - // Allocate slot in object - member = object.addMember(savedKey, resources_); - if (!member) + auto keyVariant = object.addPair(&member, resources_); + if (!keyVariant) return DeserializationError::NoMemory; + + stringBuilder_.save(keyVariant); } else { member->clear(resources_); } @@ -390,7 +388,7 @@ class JsonDeserializer { if (err) return err; - variant.setOwnedString(stringBuilder_.save()); + stringBuilder_.save(&variant); return DeserializationError::Ok; } diff --git a/lib/ArduinoJson/src/ArduinoJson/Json/JsonSerializer.hpp b/lib/ArduinoJson/src/ArduinoJson/Json/JsonSerializer.hpp index da57b6b..e95bfc7 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Json/JsonSerializer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Json/JsonSerializer.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Json/Latch.hpp b/lib/ArduinoJson/src/ArduinoJson/Json/Latch.hpp index f9d9e51..a7dcbe9 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Json/Latch.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Json/Latch.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Json/PrettyJsonSerializer.hpp b/lib/ArduinoJson/src/ArduinoJson/Json/PrettyJsonSerializer.hpp index 7915c6c..2cfd177 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Json/PrettyJsonSerializer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Json/PrettyJsonSerializer.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Json/TextFormatter.hpp b/lib/ArduinoJson/src/ArduinoJson/Json/TextFormatter.hpp index 0fab396..91d5543 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Json/TextFormatter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Json/TextFormatter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Json/Utf16.hpp b/lib/ArduinoJson/src/ArduinoJson/Json/Utf16.hpp index 2111451..7f63d08 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Json/Utf16.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Json/Utf16.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Json/Utf8.hpp b/lib/ArduinoJson/src/ArduinoJson/Json/Utf8.hpp index ad659b5..8eb38e6 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Json/Utf8.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Json/Utf8.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/Alignment.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/Alignment.hpp index 65d6069..e844775 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/Alignment.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/Alignment.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/Allocator.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/Allocator.hpp index aadc368..e98c7bf 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/Allocator.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/Allocator.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/MemoryPool.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/MemoryPool.hpp index baa988f..4663a61 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/MemoryPool.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/MemoryPool.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/MemoryPoolList.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/MemoryPoolList.hpp index dc6503c..7da0806 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/MemoryPoolList.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/MemoryPoolList.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp index c8e0d5b..f74c91b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManagerImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManagerImpl.hpp index 427c9ad..a701c0d 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManagerImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManagerImpl.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/StringBuffer.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/StringBuffer.hpp index e025966..4d5caa7 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/StringBuffer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/StringBuffer.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -32,7 +32,26 @@ class StringBuffer { return node_->data; } - StringNode* save() { + JsonString str() const { + ARDUINOJSON_ASSERT(node_ != nullptr); + return JsonString(node_->data, node_->length); + } + + void save(VariantData* data) { + ARDUINOJSON_ASSERT(node_ != nullptr); + const char* s = node_->data; + if (isTinyString(s, size_)) + data->setTinyString(adaptString(s, size_)); + else + data->setOwnedString(commitStringNode()); + } + + void saveRaw(VariantData* data) { + data->setRawString(commitStringNode()); + } + + private: + StringNode* commitStringNode() { ARDUINOJSON_ASSERT(node_ != nullptr); node_->data[size_] = 0; auto node = resources_->getString(adaptString(node_->data, size_)); @@ -52,13 +71,6 @@ class StringBuffer { return node; } - JsonString str() const { - ARDUINOJSON_ASSERT(node_ != nullptr); - - return JsonString(node_->data, node_->length); - } - - private: ResourceManager* resources_; StringNode* node_ = nullptr; size_t size_ = 0; diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/StringBuilder.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/StringBuilder.hpp index e789952..db6c354 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/StringBuilder.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/StringBuilder.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -25,10 +25,18 @@ class StringBuilder { node_ = resources_->createString(initialCapacity); } - StringNode* save() { + void save(VariantData* variant) { + ARDUINOJSON_ASSERT(variant != nullptr); ARDUINOJSON_ASSERT(node_ != nullptr); - node_->data[size_] = 0; - StringNode* node = resources_->getString(adaptString(node_->data, size_)); + + char* p = node_->data; + if (isTinyString(p, size_)) { + variant->setTinyString(adaptString(p, size_)); + return; + } + + p[size_] = 0; + StringNode* node = resources_->getString(adaptString(p, size_)); if (!node) { node = resources_->resizeString(node_, size_); ARDUINOJSON_ASSERT(node != nullptr); // realloc to smaller can't fail @@ -37,7 +45,7 @@ class StringBuilder { } else { node->references++; } - return node; + variant->setOwnedString(node); } void append(const char* s) { diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/StringNode.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/StringNode.hpp index f60cc2e..26bd180 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/StringNode.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/StringNode.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Memory/StringPool.hpp b/lib/ArduinoJson/src/ArduinoJson/Memory/StringPool.hpp index 6121b29..0b71ed2 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Memory/StringPool.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Memory/StringPool.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Misc/SerializedValue.hpp b/lib/ArduinoJson/src/ArduinoJson/Misc/SerializedValue.hpp index d3cb3d3..4269192 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Misc/SerializedValue.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Misc/SerializedValue.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp b/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp index 674470d..904da17 100644 --- a/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -305,7 +305,7 @@ class MsgPackDeserializer { if (err) return err; - variant->setOwnedString(stringBuffer_.save()); + stringBuffer_.save(variant); return DeserializationError::Ok; } @@ -334,7 +334,7 @@ class MsgPackDeserializer { if (err) return err; - variant->setRawString(stringBuffer_.save()); + stringBuffer_.saveRaw(variant); return DeserializationError::Ok; } @@ -403,19 +403,16 @@ class MsgPackDeserializer { JsonString key = stringBuffer_.str(); TFilter memberFilter = filter[key.c_str()]; - VariantData* member; + VariantData* member = 0; if (memberFilter.allow()) { ARDUINOJSON_ASSERT(object != 0); - // Save key in memory pool. - auto savedKey = stringBuffer_.save(); - - member = object->addMember(savedKey, resources_); - if (!member) + auto keyVariant = object->addPair(&member, resources_); + if (!keyVariant) return DeserializationError::NoMemory; - } else { - member = 0; + + stringBuffer_.save(keyVariant); } err = parseVariant(member, memberFilter, nestingLimit.decrement()); diff --git a/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp b/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp index 4eb5d2c..43f4cd2 100644 --- a/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/MsgPack/endianness.hpp b/lib/ArduinoJson/src/ArduinoJson/MsgPack/endianness.hpp index 94875cf..1328f9e 100644 --- a/lib/ArduinoJson/src/ArduinoJson/MsgPack/endianness.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/MsgPack/endianness.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/MsgPack/ieee754.hpp b/lib/ArduinoJson/src/ArduinoJson/MsgPack/ieee754.hpp index 427a23a..ad8e2f0 100644 --- a/lib/ArduinoJson/src/ArduinoJson/MsgPack/ieee754.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/MsgPack/ieee754.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Namespace.hpp b/lib/ArduinoJson/src/ArduinoJson/Namespace.hpp index da7a449..feb580a 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Namespace.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Namespace.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Numbers/FloatParts.hpp b/lib/ArduinoJson/src/ArduinoJson/Numbers/FloatParts.hpp index 536ae2a..4a06016 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Numbers/FloatParts.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Numbers/FloatParts.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Numbers/FloatTraits.hpp b/lib/ArduinoJson/src/ArduinoJson/Numbers/FloatTraits.hpp index ea99625..65df838 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Numbers/FloatTraits.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Numbers/FloatTraits.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Numbers/JsonFloat.hpp b/lib/ArduinoJson/src/ArduinoJson/Numbers/JsonFloat.hpp index e370f66..400cec4 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Numbers/JsonFloat.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Numbers/JsonFloat.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Numbers/JsonInteger.hpp b/lib/ArduinoJson/src/ArduinoJson/Numbers/JsonInteger.hpp index d65805c..f626d09 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Numbers/JsonInteger.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Numbers/JsonInteger.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Numbers/arithmeticCompare.hpp b/lib/ArduinoJson/src/ArduinoJson/Numbers/arithmeticCompare.hpp index 2cbc458..f9f30a2 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Numbers/arithmeticCompare.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Numbers/arithmeticCompare.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Numbers/convertNumber.hpp b/lib/ArduinoJson/src/ArduinoJson/Numbers/convertNumber.hpp index 0b6ffdc..e83d6ce 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Numbers/convertNumber.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Numbers/convertNumber.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Numbers/parseNumber.hpp b/lib/ArduinoJson/src/ArduinoJson/Numbers/parseNumber.hpp index 7f4b220..ab34528 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Numbers/parseNumber.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Numbers/parseNumber.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Object/JsonObject.hpp b/lib/ArduinoJson/src/ArduinoJson/Object/JsonObject.hpp index 088cea9..662851b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Object/JsonObject.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Object/JsonObject.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectConst.hpp b/lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectConst.hpp index 6a7218f..99540c4 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectConst.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectConst.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectIterator.hpp b/lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectIterator.hpp index 74f75bf..90637f5 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectIterator.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectIterator.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Object/JsonPair.hpp b/lib/ArduinoJson/src/ArduinoJson/Object/JsonPair.hpp index 923bd43..f0dcb50 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Object/JsonPair.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Object/JsonPair.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Object/MemberProxy.hpp b/lib/ArduinoJson/src/ArduinoJson/Object/MemberProxy.hpp index f1e9b42..7e43d38 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Object/MemberProxy.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Object/MemberProxy.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Object/ObjectData.hpp b/lib/ArduinoJson/src/ArduinoJson/Object/ObjectData.hpp index 7290e93..9b98962 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Object/ObjectData.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Object/ObjectData.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -10,9 +10,11 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE class ObjectData : public CollectionData { public: - template // also works with StringNode* + template VariantData* addMember(TAdaptedString key, ResourceManager* resources); + VariantData* addPair(VariantData** value, ResourceManager* resources); + template VariantData* getOrAddMember(TAdaptedString key, ResourceManager* resources); diff --git a/lib/ArduinoJson/src/ArduinoJson/Object/ObjectImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Object/ObjectImpl.hpp index 024d772..67677d7 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Object/ObjectImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Object/ObjectImpl.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -68,6 +68,22 @@ inline VariantData* ObjectData::addMember(TAdaptedString key, return valueSlot.ptr(); } +inline VariantData* ObjectData::addPair(VariantData** value, + ResourceManager* resources) { + auto keySlot = resources->allocVariant(); + if (!keySlot) + return nullptr; + + auto valueSlot = resources->allocVariant(); + if (!valueSlot) + return nullptr; + *value = valueSlot.ptr(); + + CollectionData::appendPair(keySlot, valueSlot, resources); + + return keySlot.ptr(); +} + // Returns the size (in bytes) of an object with n members. constexpr size_t sizeofObject(size_t n) { return 2 * n * ResourceManager::slotSize; diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/alias_cast.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/alias_cast.hpp index 1dec0a0..9529b05 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/alias_cast.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/alias_cast.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/assert.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/assert.hpp index a831559..e7d42a7 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/assert.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/assert.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/attributes.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/attributes.hpp index 268026f..99e1b33 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/attributes.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/attributes.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/ctype.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/ctype.hpp index 294e324..afb8e84 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/ctype.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/ctype.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/integer.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/integer.hpp index c56e1e9..6dded6f 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/integer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/integer.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/limits.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/limits.hpp index cb07209..9e87bbd 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/limits.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/limits.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/math.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/math.hpp index 95a74f6..78375fd 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/math.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/math.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/mpl/max.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/mpl/max.hpp index 89a3179..bf061dd 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/mpl/max.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/mpl/max.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp index d65de49..48df9e2 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace_generic.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace_generic.hpp index 9104ef2..8ee166d 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace_generic.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace_generic.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/preprocessor.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/preprocessor.hpp index ca565f7..8402cfd 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/preprocessor.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/preprocessor.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits.hpp index 471d352..a4dd1d4 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/conditional.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/conditional.hpp index 75ebdd4..d699b6b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/conditional.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/conditional.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/decay.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/decay.hpp index 29b4b6e..9a1075c 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/decay.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/decay.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/declval.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/declval.hpp index 2fd8e91..b16b575 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/declval.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/declval.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/enable_if.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/enable_if.hpp index f1184f2..8fb8af4 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/enable_if.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/enable_if.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/function_traits.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/function_traits.hpp index 3b79873..9d95741 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/function_traits.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/function_traits.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/integral_constant.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/integral_constant.hpp index e263523..cc893d7 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/integral_constant.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/integral_constant.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_array.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_array.hpp index 17a4596..e259b2d 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_array.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_array.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_base_of.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_base_of.hpp index 8cb3c9d..5d93d78 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_base_of.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_base_of.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_class.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_class.hpp index 2e36b56..3946e59 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_class.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_class.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_const.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_const.hpp index 2adc86a..b8e848f 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_const.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_const.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_convertible.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_convertible.hpp index e906ab7..e48b353 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_convertible.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_convertible.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_enum.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_enum.hpp index 58a05ba..73a721b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_enum.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_enum.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_floating_point.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_floating_point.hpp index c84012b..2cba9e7 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_floating_point.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_floating_point.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_integral.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_integral.hpp index e12b228..08e4c47 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_integral.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_integral.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_pointer.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_pointer.hpp index 0d3b1d1..5a5e7ee 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_pointer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_pointer.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_same.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_same.hpp index 5e28fb7..fe1dad8 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_same.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_same.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_signed.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_signed.hpp index f5b503b..25004e3 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_signed.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_signed.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_unsigned.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_unsigned.hpp index 6ac6117..2665c88 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_unsigned.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_unsigned.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/make_unsigned.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/make_unsigned.hpp index 6ea6df4..016e716 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/make_unsigned.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/make_unsigned.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_const.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_const.hpp index 22406e5..090f849 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_const.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_const.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_cv.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_cv.hpp index 67d75c6..114696e 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_cv.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_cv.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_reference.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_reference.hpp index 60e31b0..c3894c0 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_reference.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/remove_reference.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/type_identity.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/type_identity.hpp index ea899f6..6325208 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/type_identity.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/type_identity.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/void_t.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/void_t.hpp index 7222025..c9bca15 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/void_t.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/void_t.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Polyfills/utility.hpp b/lib/ArduinoJson/src/ArduinoJson/Polyfills/utility.hpp index caac765..afbac7c 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Polyfills/utility.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Polyfills/utility.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/CountingDecorator.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/CountingDecorator.hpp index e70ea1b..2e153be 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/CountingDecorator.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/CountingDecorator.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writer.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writer.hpp index caea19f..f736d86 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writer.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writer.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/ArduinoStringWriter.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/ArduinoStringWriter.hpp index d3ebd17..4061043 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/ArduinoStringWriter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/ArduinoStringWriter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/DummyWriter.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/DummyWriter.hpp index 7492e21..a308a4b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/DummyWriter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/DummyWriter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/PrintWriter.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/PrintWriter.hpp index 55bfe00..a3fe499 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/PrintWriter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/PrintWriter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StaticStringWriter.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StaticStringWriter.hpp index 042aac7..f9407c3 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StaticStringWriter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StaticStringWriter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StdStreamWriter.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StdStreamWriter.hpp index abb15a5..44758d4 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StdStreamWriter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StdStreamWriter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StdStringWriter.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StdStringWriter.hpp index 7acd24c..e2ffc72 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StdStringWriter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/Writers/StdStringWriter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/measure.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/measure.hpp index fd2acf2..62d8fce 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/measure.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/measure.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Serialization/serialize.hpp b/lib/ArduinoJson/src/ArduinoJson/Serialization/serialize.hpp index dc2f0fa..ad93ade 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Serialization/serialize.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Serialization/serialize.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/FlashString.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/FlashString.hpp index 29ca1c3..3658e8e 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/FlashString.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/FlashString.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/RamString.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/RamString.hpp index 5477b23..c269ffb 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/RamString.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/RamString.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -76,6 +76,16 @@ struct StringAdapter::value>> { } }; +template +struct StringAdapter::value>> { + using AdaptedString = RamString; + + static AdaptedString adapt(const TChar* p) { + auto str = reinterpret_cast(p); + return AdaptedString(str, str ? ::strlen(str) : 0); + } +}; + template struct StringAdapter { using AdaptedString = RamString; @@ -90,8 +100,9 @@ struct StringAdapter::value>> { using AdaptedString = RamString; static AdaptedString adapt(const TChar* p) { + ARDUINOJSON_ASSERT(p); auto str = reinterpret_cast(p); - return AdaptedString(str, str ? ::strlen(str) : 0); + return AdaptedString(str, ::strlen(str)); } }; diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/StringObject.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/StringObject.hpp index 1547ab9..43bd330 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/StringObject.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/Adapters/StringObject.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/IsString.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/IsString.hpp index a71655d..094f53b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/IsString.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/IsString.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/JsonString.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/JsonString.hpp index 76011da..98bae43 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/JsonString.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/JsonString.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/StringAdapter.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/StringAdapter.hpp index cd19e41..a31d2a5 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/StringAdapter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/StringAdapter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/StringAdapters.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/StringAdapters.hpp index e8ff181..e0ae9f3 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/StringAdapters.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/StringAdapters.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Strings/StringTraits.hpp b/lib/ArduinoJson/src/ArduinoJson/Strings/StringTraits.hpp index 797762b..bd1a50b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Strings/StringTraits.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Strings/StringTraits.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/Converter.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/Converter.hpp index 0275655..07f6a51 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/Converter.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/Converter.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/ConverterImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/ConverterImpl.hpp index 296bf55..6c5fcda 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/ConverterImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/ConverterImpl.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -230,9 +230,9 @@ class StringBuilderPrint : public Print { copier_.startString(); } - StringNode* save() { + void save(VariantData* data) { ARDUINOJSON_ASSERT(!overflowed()); - return copier_.save(); + copier_.save(data); } size_t write(uint8_t c) { @@ -268,7 +268,7 @@ inline void convertToJson(const ::Printable& src, JsonVariant dst) { src.printTo(print); if (print.overflowed()) return; - data->setOwnedString(print.save()); + print.save(data); } #endif diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariant.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariant.hpp index 25fb3f2..aed1ba9 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariant.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariant.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantConst.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantConst.hpp index b1eb66e..4c96059 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantConst.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantConst.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantCopier.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantCopier.hpp index 659069d..6875c9a 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantCopier.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantCopier.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantVisitor.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantVisitor.hpp index 6069b6e..28f99ed 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantVisitor.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/JsonVariantVisitor.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantAttorney.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantAttorney.hpp index b75eb38..d97641b 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantAttorney.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantAttorney.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantCompare.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantCompare.hpp index 03e2227..5f56016 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantCompare.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantCompare.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantContent.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantContent.hpp index cae3f20..d6ee6c7 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantContent.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantContent.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -24,6 +24,7 @@ enum class VariantTypeBits : uint8_t { enum class VariantType : uint8_t { Null = 0, // 0000 0000 + TinyString = 0x02, // 0000 0010 RawString = 0x03, // 0000 0011 LinkedString = 0x04, // 0000 0100 OwnedString = 0x05, // 0000 0101 @@ -46,6 +47,8 @@ inline bool operator&(VariantType type, VariantTypeBits bit) { return (uint8_t(type) & uint8_t(bit)) != 0; } +const size_t tinyStringMaxLength = 3; + union VariantContent { VariantContent() {} @@ -61,6 +64,7 @@ union VariantContent { CollectionData asCollection; const char* asLinkedString; struct StringNode* asOwnedString; + char asTinyString[tinyStringMaxLength + 1]; }; #if ARDUINOJSON_USE_EXTENSIONS diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp index ba1bef8..6b0d474 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -17,6 +17,16 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE template T parseNumber(const char* s); +template +static bool isTinyString(const T& s, size_t n) { + if (n > tinyStringMaxLength) + return false; + bool containsNul = false; + for (uint8_t i = 0; i < uint8_t(n); i++) + containsNul |= !s[i]; + return !containsNul; +} + class VariantData { VariantContent content_; // must be first to allow cast from array to variant VariantType type_; @@ -63,6 +73,9 @@ class VariantData { case VariantType::Object: return visit.visit(content_.asObject); + case VariantType::TinyString: + return visit.visit(JsonString(content_.asTinyString)); + case VariantType::LinkedString: return visit.visit(JsonString(content_.asLinkedString, true)); @@ -185,6 +198,7 @@ class VariantData { #else (void)resources; // silence warning #endif + const char* str = nullptr; switch (type_) { case VariantType::Boolean: return static_cast(content_.asBoolean); @@ -198,9 +212,15 @@ class VariantData { case VariantType::Int64: return static_cast(extension->asInt64); #endif + case VariantType::TinyString: + str = content_.asTinyString; + break; case VariantType::LinkedString: + str = content_.asLinkedString; + break; case VariantType::OwnedString: - return parseNumber(content_.asOwnedString->data); + str = content_.asOwnedString->data; + break; case VariantType::Float: return static_cast(content_.asFloat); #if ARDUINOJSON_USE_DOUBLE @@ -208,8 +228,11 @@ class VariantData { return static_cast(extension->asDouble); #endif default: - return 0; + return 0.0; } + + ARDUINOJSON_ASSERT(str != nullptr); + return parseNumber(str); } template @@ -220,6 +243,7 @@ class VariantData { #else (void)resources; // silence warning #endif + const char* str = nullptr; switch (type_) { case VariantType::Boolean: return content_.asBoolean; @@ -233,10 +257,15 @@ class VariantData { case VariantType::Int64: return convertNumber(extension->asInt64); #endif + case VariantType::TinyString: + str = content_.asTinyString; + break; case VariantType::LinkedString: - return parseNumber(content_.asLinkedString); + str = content_.asLinkedString; + break; case VariantType::OwnedString: - return parseNumber(content_.asOwnedString->data); + str = content_.asOwnedString->data; + break; case VariantType::Float: return convertNumber(content_.asFloat); #if ARDUINOJSON_USE_DOUBLE @@ -246,6 +275,9 @@ class VariantData { default: return 0; } + + ARDUINOJSON_ASSERT(str != nullptr); + return parseNumber(str); } ObjectData* asObject() { @@ -268,6 +300,8 @@ class VariantData { JsonString asString() const { switch (type_) { + case VariantType::TinyString: + return JsonString(content_.asTinyString); case VariantType::LinkedString: return JsonString(content_.asLinkedString, true); case VariantType::OwnedString: @@ -382,7 +416,8 @@ class VariantData { bool isString() const { return type_ == VariantType::LinkedString || - type_ == VariantType::OwnedString; + type_ == VariantType::OwnedString || + type_ == VariantType::TinyString; } size_t nesting(const ResourceManager* resources) const { @@ -475,11 +510,6 @@ class VariantData { template bool setString(TAdaptedString value, ResourceManager* resources); - bool setString(StringNode* s, ResourceManager*) { - setOwnedString(s); - return true; - } - template static void setString(VariantData* var, TAdaptedString value, ResourceManager* resources) { @@ -496,6 +526,23 @@ class VariantData { content_.asLinkedString = s; } + template + void setTinyString(const TAdaptedString& s) { + ARDUINOJSON_ASSERT(type_ == VariantType::Null); // must call clear() first + ARDUINOJSON_ASSERT(s.size() <= tinyStringMaxLength); + + type_ = VariantType::TinyString; + + auto n = uint8_t(s.size()); + for (uint8_t i = 0; i < n; i++) { + char c = s[i]; + ARDUINOJSON_ASSERT(c != 0); // no NUL in tiny string + content_.asTinyString[i] = c; + } + + content_.asTinyString[n] = 0; + } + void setOwnedString(StringNode* s) { ARDUINOJSON_ASSERT(type_ == VariantType::Null); // must call clear() first ARDUINOJSON_ASSERT(s); diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantDataVisitor.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantDataVisitor.hpp index 662ab13..7df6187 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantDataVisitor.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantDataVisitor.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp index 8e5b253..98289ed 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantImpl.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once @@ -31,6 +31,11 @@ inline bool VariantData::setString(TAdaptedString value, return true; } + if (isTinyString(value, value.size())) { + setTinyString(value); + return true; + } + auto dup = resources->saveString(value); if (dup) { setOwnedString(dup); diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp index d17e7cb..30bbd66 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRefBase.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRefBase.hpp index 544fe42..975c961 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRefBase.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRefBase.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp index 1c87cc1..da1b1e6 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantTag.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantTag.hpp index 23f360f..a476c30 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantTag.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantTag.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantTo.hpp b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantTo.hpp index f159aef..928d459 100644 --- a/lib/ArduinoJson/src/ArduinoJson/Variant/VariantTo.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/Variant/VariantTo.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once diff --git a/lib/ArduinoJson/src/ArduinoJson/compatibility.hpp b/lib/ArduinoJson/src/ArduinoJson/compatibility.hpp index 6b99c42..2e83e6d 100644 --- a/lib/ArduinoJson/src/ArduinoJson/compatibility.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/compatibility.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License // // clang-format off diff --git a/lib/ArduinoJson/src/ArduinoJson/version.hpp b/lib/ArduinoJson/src/ArduinoJson/version.hpp index 0d8cecb..13c9296 100644 --- a/lib/ArduinoJson/src/ArduinoJson/version.hpp +++ b/lib/ArduinoJson/src/ArduinoJson/version.hpp @@ -1,11 +1,11 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2024, Benoit BLANCHON +// Copyright © 2014-2025, Benoit BLANCHON // MIT License #pragma once -#define ARDUINOJSON_VERSION "7.3.0" +#define ARDUINOJSON_VERSION "7.4.1" #define ARDUINOJSON_VERSION_MAJOR 7 -#define ARDUINOJSON_VERSION_MINOR 3 -#define ARDUINOJSON_VERSION_REVISION 0 -#define ARDUINOJSON_VERSION_MACRO V730 +#define ARDUINOJSON_VERSION_MINOR 4 +#define ARDUINOJSON_VERSION_REVISION 1 +#define ARDUINOJSON_VERSION_MACRO V741 diff --git a/lib/ArduinoJson/src/CMakeLists.txt b/lib/ArduinoJson/src/CMakeLists.txt index cc782e7..841185d 100644 --- a/lib/ArduinoJson/src/CMakeLists.txt +++ b/lib/ArduinoJson/src/CMakeLists.txt @@ -1,5 +1,5 @@ # ArduinoJson - https://arduinojson.org -# Copyright © 2014-2024, Benoit BLANCHON +# Copyright © 2014-2025, Benoit BLANCHON # MIT License # I have no idea what this is about, I simply followed the instructions from: From 742e288ea98b1b9b33b9d35d92ee210f779b3635 Mon Sep 17 00:00:00 2001 From: iranl Date: Tue, 15 Apr 2025 21:25:26 +0200 Subject: [PATCH 3/7] Update esp-nimble-cpp --- src/idf_component.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/idf_component.yml b/src/idf_component.yml index 21eb4e5..87b6dd7 100644 --- a/src/idf_component.yml +++ b/src/idf_component.yml @@ -4,7 +4,7 @@ dependencies: esp-nimble-cpp: git: https://github.com/h2zero/esp-nimble-cpp.git - version: 723cdf0a66587bba30c8694b38267a91a530f024 + version: 0172cb4b394949e89ebe1d79b4a9787b481d890c espressif/libsodium: "^1.0.20~2" From 860ae74ac43cb9361d2cfdc07752faa8a0723fe8 Mon Sep 17 00:00:00 2001 From: iranl Date: Wed, 16 Apr 2025 20:52:31 +0200 Subject: [PATCH 4/7] Auto set next release version --- .github/workflows/release.yml | 22 ++++++++++++++++++++++ resources/next_version.py | 24 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 resources/next_version.py diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f8546b6..81146b6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -178,3 +178,25 @@ jobs: disable_globbing: true add_options: '-f' push_options: '-f' + next_version: + name: Set next release version + needs: release + runs-on: ubuntu-latest + steps: + - name: Git Checkout master + uses: actions/checkout@v4 + with: + ref: master + - name: Set new version + run: | + python3 resources/next_version.py + - name: Commit config to master + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "Set next release version" + file_pattern: 'src/Config.h' + branch: master + skip_dirty_check: true + skip_fetch: true + skip_checkout: true + disable_globbing: true \ No newline at end of file diff --git a/resources/next_version.py b/resources/next_version.py new file mode 100644 index 0000000..a01ec03 --- /dev/null +++ b/resources/next_version.py @@ -0,0 +1,24 @@ +import re + +regex = r"\#define NUKI_HUB_VERSION \"(.*)\"" +regex2 = r"\#define NUKI_HUB_VERSION_INT \(uint32_t\)(.*)" +version = "unknown" +version_int = "unknown" +content_new = "" + +with open('src/Config.h', 'r') as file: + file_content = file.read() + matches = re.finditer(regex, file_content, re.MULTILINE) + + for matchNum, match in enumerate(matches, start=1): + for groupNum in range(0, len(match.groups())): + groupNum = groupNum + 1 + version = match.group(groupNum) + version_int = int((float(version)*100)+0.1) + 1 + version = float(version_int / 100) + + content_new = re.sub(regex, "#define NUKI_HUB_VERSION \"" + str('{:.2f}'.format(version)) + "\"", file_content, flags = re.M) + content_new = re.sub(regex2, "#define NUKI_HUB_VERSION_INT (uint32_t)" + str(version_int), content_new, flags = re.M) + +with open('src/Config.h', 'w') as writefile: + writefile.write(content_new) From a4e8784132ad7b34b83a7cbffa1b4e0db27daa1e Mon Sep 17 00:00:00 2001 From: iranl Date: Wed, 16 Apr 2025 22:06:30 +0200 Subject: [PATCH 5/7] Stack trace on GH pages --- .github/workflows/beta.yml | 1 + .github/workflows/nightly.yml | 1 + .github/workflows/release.yml | 8 +- stacktrace/esp_exception_decoder_rs.js | 302 ++++++++++++++++++++ stacktrace/esp_exception_decoder_rs_bg.wasm | Bin 0 -> 960397 bytes stacktrace/index.html | 181 ++++++++++++ 6 files changed, 490 insertions(+), 3 deletions(-) create mode 100644 stacktrace/esp_exception_decoder_rs.js create mode 100644 stacktrace/esp_exception_decoder_rs_bg.wasm create mode 100644 stacktrace/index.html diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 0994bf5..103a4de 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -116,6 +116,7 @@ jobs: mkdir -p resources/ mkdir -p src/ cp -vf release/*/nuki_hub_*.bin ota/beta/ + cp -vf release/*/nuki_hub_*.elf ota/beta/ cp -vf master/resources/ota_manifest.py resources/ota_manifest.py cp -vf master/src/Config.h src/Config.h python3 resources/ota_manifest.py beta $Version diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 7559b85..9713a6b 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -139,6 +139,7 @@ jobs: mkdir -p resources/ mkdir -p src/ cp -vf release/*/nuki_hub_*.bin ota/master/ + cp -vf release/*/nuki_hub_*.elf ota/master/ cp -vf master/resources/ota_manifest.py resources/ota_manifest.py cp -vf master/src/Config.h src/Config.h python3 resources/ota_manifest.py master $Version diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 81146b6..0113275 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -129,7 +129,7 @@ jobs: cd ../.. done - + # remove last character ARTIFACTS="${ARTIFACTS%?}" echo "artifacts=${ARTIFACTS}" | tee -a ${GITHUB_OUTPUT} @@ -156,13 +156,15 @@ jobs: mkdir -p ota/master/ mkdir -p resources/ mkdir -p src/ - cp -vf release/*/nuki_hub_*.bin ota/ + cp -vf release/*/nuki_hub_*.bin ota/ + cp -vf release/*/nuki_hub_*.elf ota/ cp -vf master/resources/ota_manifest.py resources/ota_manifest.py cp -vf master/src/Config.h src/Config.h python3 resources/ota_manifest.py release $Version python3 resources/ota_manifest.py beta none find * -not -path "ota*" -delete rm -rf ota/beta/*.bin + rm -rf ota/beta/*.elf rm -rf .github .gitignore .gitmodules touch ota/beta/empty touch ota/master/empty @@ -189,7 +191,7 @@ jobs: ref: master - name: Set new version run: | - python3 resources/next_version.py + python3 resources/next_version.py - name: Commit config to master uses: stefanzweifel/git-auto-commit-action@v5 with: diff --git a/stacktrace/esp_exception_decoder_rs.js b/stacktrace/esp_exception_decoder_rs.js new file mode 100644 index 0000000..ff3fe8d --- /dev/null +++ b/stacktrace/esp_exception_decoder_rs.js @@ -0,0 +1,302 @@ + +let wasm; + +const heap = new Array(32).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { return heap[idx]; } + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + +cachedTextDecoder.decode(); + +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} + +function getStringFromWasm0(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let cachegetInt32Memory0 = null; +function getInt32Memory0() { + if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { + cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory0; +} + +const u32CvtShim = new Uint32Array(2); + +const uint64CvtShim = new BigUint64Array(u32CvtShim.buffer); + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +let WASM_VECTOR_LEN = 0; + +let cachedTextEncoder = new TextEncoder('utf-8'); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length); + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len); + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3); + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +function passArray8ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 1); + getUint8Memory0().set(arg, ptr / 1); + WASM_VECTOR_LEN = arg.length; + return ptr; +} +/** +* @param {Uint8Array} bin +* @param {string} dump +* @returns {Array} +*/ +export function decode(bin, dump) { + var ptr0 = passArray8ToWasm0(bin, wasm.__wbindgen_malloc); + var len0 = WASM_VECTOR_LEN; + var ptr1 = passStringToWasm0(dump, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len1 = WASM_VECTOR_LEN; + var ret = wasm.decode(ptr0, len0, ptr1, len1); + return takeObject(ret); +} + +/** +*/ +export class DecodedAddress { + + static __wrap(ptr) { + const obj = Object.create(DecodedAddress.prototype); + obj.ptr = ptr; + + return obj; + } + + __destroy_into_raw() { + const ptr = this.ptr; + this.ptr = 0; + + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_decodedaddress_free(ptr); + } + /** + */ + get address() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.__wbg_get_decodedaddress_address(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + u32CvtShim[0] = r0; + u32CvtShim[1] = r1; + const n0 = uint64CvtShim[0]; + return n0; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {BigInt} arg0 + */ + set address(arg0) { + uint64CvtShim[0] = arg0; + const low0 = u32CvtShim[0]; + const high0 = u32CvtShim[1]; + wasm.__wbg_set_decodedaddress_address(this.ptr, low0, high0); + } + /** + * @returns {string} + */ + get function_name() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.decodedaddress_function_name(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} function_name + */ + set function_name(function_name) { + var ptr0 = passStringToWasm0(function_name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len0 = WASM_VECTOR_LEN; + wasm.decodedaddress_set_function_name(this.ptr, ptr0, len0); + } + /** + * @returns {string} + */ + get location() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.decodedaddress_location(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} location + */ + set location(location) { + var ptr0 = passStringToWasm0(location, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len0 = WASM_VECTOR_LEN; + wasm.decodedaddress_set_location(this.ptr, ptr0, len0); + } +} + +async function load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +async function init(input) { + if (typeof input === 'undefined') { + input = new URL('esp_exception_decoder_rs_bg.wasm', import.meta.url); + } + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbg_decodedaddress_new = function(arg0) { + var ret = DecodedAddress.__wrap(arg0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_949bbc1147195c4e = function() { + var ret = new Array(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_push_284486ca27c6aa8b = function(arg0, arg1) { + var ret = getObject(arg0).push(getObject(arg1)); + return ret; + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + + if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { + input = fetch(input); + } + + + + const { instance, module } = await load(await input, imports); + + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + + return wasm; +} + +export default init; + diff --git a/stacktrace/esp_exception_decoder_rs_bg.wasm b/stacktrace/esp_exception_decoder_rs_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..e19f193d3e0c991a947d67bf3a7499772c3483c2 GIT binary patch literal 960397 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 NW{dc}TJ*Snk`FszFjB$&-aY71}_==2K0X_z0!Y z=Tg?suIpIlwB@qb*{%yf>x%m*9OtAuLuD;JI$0-~I)`E;=iJL9g^?K*RWQ6mIZ|r! z6=E`Wu_5(BW)~#;K-KAD8*(A%N2s49^U!xlrU0F3=1IxoRTUH=Nl7#L941#xtlA*2 zo!q1xK<4srtZjwvhyKR%=FA@zCiLK&TX}Tm?~CEWtxE_xQ)Z1(8N4MSFcC`nFk zV$}iV^`?};8II5tX6m}}AWR6%pq6ldlU2J~*1U=Nw!`}+ob!t5mU|%7)empfH^FL? zQ;$a^q+*u z#^M<4-m&o0!!xPUOoD^T-tX9Ms1N=6i>UklGHsGM%|aL6tLkz{G|uyAp2bJibe1C1 zWrc=RWlSoj-WQ53;LDRjZFgZPgcHBBm|CZ1brwX`Jcm!1bKb*!a?-OlP0!&mHvFx4 zi-Bi2M(Juk$H}zyLvhOJ07~IG+7Y$Rqe`0WMn#Oxj|&@IpU!1NPept$q~$JjPU)*9 ztig%#ss=SVluif+3E5!%42Owg3(P5qD7$+WFr(;`x;>4uL`;Q|t0ZT=^26aubLa0( z5AQ_Oij>L9tIBY7=xAqs*r%`14U$haQC#&^hLwD((Xl~%2~Soi!n$X`aq|>IT|b)g zjx1wKoNk*6Il(-Z>Nisr1hSoEK6*Zq;q#r!pO?f6hy_8yI*tcxpzY>6h*K)&*<t zB^Tt66nnnr6a4Jyyak({l;0gHSJT-Er1RCm)W!2$|5%sGH1PoBJT7AIx z)19Vd$bn{AXQoQ)s(%bkT-{O*$7*v11UvZ>kEmS(@es~2_~={EVB&PDd3dc8F{lat zDc`j`hs_3ij>V|?R&U~a<vcxi>{a}rgw{_WmBbZ0_i6oAOi58Q>dV3WOZe$Fe;*zjPd!oz{eyLs3oPf)nv6s zqa=$%&PLwOJOW<$cUwdcFmWc&h`OpOx2mu-Jk@~$_UqlRLS9DqbXVZ`azF0wn^Z*ti zykOLn)c52AD8ns2Mne@G*_|*aO(OeO<2_!d&1zF1t>GDYFXk1}tXrPV+ z(%cC#KRyr-L6oDTIh!<1S!aSt`U-;Gpvb>XxC$&Uj5{IIwMZC8k@p_FDsVtD9~~dQ z!(?18tEiK9sdajy5`0l!p1Eqptz+5hGYm0PZMY&+iViY|NeU%KHIL91?{R3c z=sb$b0Z->>_zoo}PcA@XHENLtCX`0bO$pvqTL|_U(;ze!!D$chnoDfMfb@%XgHSLNQ&Zn0-b& zo7O1;dcOOG?$V!j%f6-u(RBF38BY|yOSwRf>(CL-m%~ur&{g1$lb8edc;nI?bzR!Ty8_qH`GftY@?-iG3bi3>fs^g^XrNFJms}6t+^A=b3+kFD z$eI&LAQ+qRj+j*#24;=RMXlv56?NknHlhXsG3zmga0qLOL6h8PP?pRbI9&s|cW`9l z&UpJmSxallnNczP(#dkjb?;WVgD85#1AWm7b_%W zr7r7V!y^ta1z7(JQmJ0+DA0Wwu+NnyF3(d(d#y1p>D$cY& z3!_1-^zQZvOo;Liv_A{eOdV*5n`$zLHBp6WWRrZ3_IPAajU;st`cxIkbZmvD} zN*&ly(Yf^LINstcg+|iX%tY*eu_6XmI8+5iqhs(P_1owd@|S(v!tNfD`x<_10ahAq z43lf{B=TL$HlDnj}IXJd27K+^0NBs)HxQWxYNl{ zjJYEt=BsbKF~%((ML&5%ktN`X8pubP`VMUiPU*{QG43Vy*W9Q}CoL%g;EM~RdAa0x z?DW8#uPk#$ur046@VT?pJo;JIzSf&3o}dRVFj{Z@p?*dZUJSB31?s?CC_|tlHPo9)kv9QT-~Ewx-6Cp=6ef^{iVV3N}I~?;^Nh_I8TFD0&Lo4Yet%P3@IaHu} z=+GIXUJScx3bdov<%JT%g`}0JRsp`cMFO9ZOizYG0??>6fnvGjyTO1m^b?W1)FKWc#bht8@ocbrL2k4 zcaLvYk%z1FGHO64v7(9YRr>PUF}^$Ayc+!@9AT(OIpCsm+I3}`a$Q88TIZe0F{_5=XSrBgrYF*>4YF%*w{ zuR@YqF)6-qXs%amxPi1QK<%K<08KcQ$PG z^lGQRs_gY#7?W>zw6EaQYmrQH0Iyx35LJ4FZ{f%rY# zxpkQ%Zv6naDT7Iz{yz)2tfB1;ZkUU+;CALPb3gFAtTBAvaRD(C*Y}(8a;0DqI77_d zaFBtc`aNCQOL+F2)$u%iiL6Kee`HeO_A=}010eutiUkb4anIhAQ!2Fze7HpQ99E1g=sEqj-3o9fI^=eN5*7*#+fGj}pfk9*HaM z++kQ&)%@^>(;iV)q@&aBr3xN>I2=RtGImmVG#$%kotcePnl%Kw7?d^O0x}&M2_qd6 z3JZ!+GlWQ&iulbtQYZKg*qCX&P1###5RBVI1Tzp!`q4b&>aNq^82G==kL!x6!YrS! z?+w4n+IT)3V@_W-{xTnQ>l}6#r^Wb;gNo+F0jAa(>xsS|b2fc-05k=cIn>6;?VL3g(isI1}53=dwr6tp-#a?Hd9D&WsFUX-z={G!Xghkit*kBvB}a z6lN<}dzUmz^9wgnZ~n}gptHx(z0_?t>K6?B5hLhf4u&{N6UncAm_UT?bo|)`vXub3 z(CGyb03$B}M4u2Di4L5zDLj3a4pbat?+6!2HCW2z0i+!fUpOcZLxb(}2wM{Y?E_s7 zvgw&Az}ua^+B{LDLAX3N@aN{rfsDfSiw^jrCid8amRReJ2#N7hco21bFq~# z#Rlg^ySd6~8msYg(XxK9I}T5Rqz(nfc^Ke(FW!ZJ;5>{u&%@}Xz_V}z<9m!S0Aao= zw&wtwXA<$77_hewfEAzxBUY7*aM9^rK%qiw=~l;p92S?hSDbvHbMuh(J-~7Y8T!UX zbMnlCx48+K8d;@C^>Ty;0KXP$g>crZe}$uu%k_o;j~V8}Jcee6To~W*!lqowEO{(< zj#bg3xat@^$ru4^mKFMFjckgK;v9|j7(m1*GAEy-;Y{}&4S-a^!*P>BJ#aH2)zvAT zDbYAA%z1DFzc{+njX*Vr+yQKXj?D!hECWoWdFlANF2uZPKtcVPSlcro#$iuk?{Pn9 z?*2XWmQVC$urPlVr!GsSp34S;P|U#qr)3XUr0@uKx8_)S3Bsb>Im$_v2~4KmYmatb z5eGj5(yN5)+v`7+SW^IyQQ%!q0#W=N+fV{1SDdp~9__pqqKc-QXZ`@VIQ*k)XgHM| zg7&z;!NX~!o&_Ol$YAGn@-h%7q};spSeH%iCkK7VrEGxy3umjnO3uWd#PyWFIdym_2@I&kOM@ z&TxUgKs-l^GS==6BqmzLuV_BY=3m|9f1;dYe$j?x^jG|Jx>ZITm6XB-*>q5b=a-s_ zzo#B;gNf*!%L0Tx53dF-pDC`s$>4&^uF1PNnJ~gAtMpb4VL0zb{)dVuJ8bN48OaTfocH#Aog&`owT@GyuYZYkpOe*~ANZ=5X<)5G~5n z{p>|QK71Q{(UH}misMnhRccZRM3X!mOixSI&8ZK6xM*G&jWuc47(tJ3G@#(1kLM!N&J4JZ zK1>l50c&~YqX}FbEEXB$9^L*s6hT#@i_J6Ck_w-Gh{A6Thx2TGcUfQV{_Ve!>ccIw zsfhKt{>_2V@1x1wg^#5AFuP_8zc&?5y|l==Qn@@^s)ksZYUp;OYsw&)uOD&7*ucQ}ee<@v{}5v*J7m52v;% z5WIQm*Sg6nn5?ow>xc*?n7U;spSWq?5K{}TIz(NJFj(ei@YKX=gX3QM^5p_@u4E5! zW62ayIN5Q;Z{`z%=7USI%|ic*4Iva*z*S9hVKF8g%qr%*C@WAPo(Ks>$^o0)>sQQl zr!guB9EcKx`2abN=`rAYCRMr7RBoM8EnxC=w$=fnV4MWRG^f}t1+yN{y`&JA92xvJ zp2#cBx^A@%88LuMD3L&f$*O_}eh|xV5EyV1JA=8sG|-Y11Qg(i8wntQDFd-r&?#D@ z3RIimXOFxM3Aci_n(YLPebR}*KvV-0blEY0F9BY?Tc9bO>QeA+g*DbrDP`g!*dFt0 z*3yuhJ5tZQnQdet^%(wgcEE_5h+8Y`?;S`!?Vq~Y zrF2dcqS+sdY}gdg3dMoZ;ubl~Py89}&qIh-p01H@Cidd>C?6o}7t}epQ2(eV78;l) zR!Ea`KaOS)`veX58!acMj5SKn2#Osn00stQNC=EJm00(RI1t z98>(LG&zUyq|tWs$la~p6&S0M2*&1WQM0%CZw05v>XyO`+7I3s$@b+SUZTmNPsDCW zxVp_i<=Li|hcM7NMnFQqmaTvy!<{_}Z9kIT!bFX;LJ%X~K`aD?o;qD$QGGXe#|(;@ zSJfIXuNOuAxBVH^3!URp-;1ZwDV%Z4>U!rkh?a%)+cFl0W)vHblTkMW8f#=pER_?wd;bcn}|I^D@DlDVQ(D4h5#LbCX0?OaWs%(QeE7 z7yB`%xQeXzF*8xO`!JTW{)xeOuK@HD(ngE)`V1MD<{(vexe;NnJ022NZNGbEW8CLO zAMl2I>z~4JORqtApMlKkb${4Thth(ozC4E2bN-7E-+ps1rwa9%Yt7U10^e`m!-G~c z?`y5!*~1OYUSMLn?&=8)!JJF9xkQ_~teZPM#i=Rk?`PhmKMyaiF<2_?uvK`1FDDO8 zaJ17y*ndg==-&gXPg6$1;J8o@f4qpRy{`>G8I0DvER6Paq<}rcwP6j`tovc)S}~t#$+5zUmlr zf7fugjn#xUlU$%2?y7$lpT#J|o_QzG)2;ksUc56Mr^C*I-NTE6L9k6=xKIA(=dt^q z;V7;d?Heu-SYYA`bf5Y?gO}fga~o%2$(xzS?%B9#xH4R+KN!Yal1Bgp%$rRz>cj~ue*VIq(k3AkUm*+7e5Wtre zBr~f$s2ftT&z<+94ic+`ZQcu;-m&ihZ*~; zjD7P|9Po594wjFGY1W}&T?1)XUrF7ag%Nr~^CV;NS)dypI9fdkEA7<3&k{f)z~d?y=pK!`S47BM^8mtKTkY`(nz9SAo#Qc%&b+sR zPH><+3VBXvYiz2SYtEq^-x)x-EH#;|SgLIue6RnPvt8fodduF+iimw%OuNRp=r~RN zK(M^HI2)VTgS!m(ijBGY6_j|4=~hkvfie|`ei(u2Z3UbcYjwBxT86XOyf2=d>a}8n zK%YyhXXcMq_pwxD>kIA2sddC#$ZAG7(84T?7&KieVuh&MVthcf@Ht(M$BT{*c3DUr zKCGYaI|R0s`=4H=Pclohfipev9~_*Nhvg8{uXz}Jj*I4_YG2z~_QOoON|%Bwxi&6MF zi)4G`lex$iqww?}P$V0LPg5iYp}9-Iw;P4`S~wepcXBV_Ta3a-Es~AG2e?o5owYFa zZ7~Wzl?sQg7DcFUi&6MTI~3Vs6#m%`MYb4)Pgx`zg>6GyjKVMNP>Y0#mev}D@A)*f zWTWsD_q@U=yu-U`7q%IN|HZHJAmp|uM&XaorE_v|5MF=>gB~Og2HdV$!e-82T5$CRfi@*d_$N!&taP7C zvZG3~4%-<^LX&5eh}GuEO^A!%<@a2}T0z*+$#A3EYbn&db;ROPp_+yim###R8Mh_h_9C3 zx`(~#-R#w$MYtONdaeN8RJ> zBL_*i4MqdLZdY4LoWge%`mUQS(V~AGEsno8YKjk0fT@vcJJ{I;UGjl{Yk3-gy7%?-8cqpoP8m}Bz zU9YbLwciA4<#L-#J9@6TY%blUbS&EMSQ@^#sqR6PM%t|0Gg@xY%m)NJR?Tks&1J>& zWiPCkzo;0!q=XmpCBulDhs7($gkW+9qk2(UzocNn&(YC8O6OVX%46IRJ!OUHic~is zd~!#?a;H~kJKas4zGyozcu!}5QJcb!l=|$(aP=N0LWjO6uA2kfKPL)k>*s4ENHcaF z)5AXHo?t*udlFgRqoej|9!F;Glk&WI?)GL#KQPmbaTIO!pzP2lltIwbh7!u2+g7i5 z-#+qJFKZ1F%P_h^+`~ltao7|#372^+W++gJPes_|Q~ zH&bSEb*##LMOCT#3h{Q%q`xDuySfA0N@@7NGUTX2&o%`!-p(VVvB`7|+$rR~!f~Lf z)#Jm{_l!_M5`hH8_Mlki)lRSGc_nY9G<+d_3aR%R)+^-1JAE_9D-{yIY2VvUn(Ey& zg)^NK@Cf-Oe=m#jvAPl_tw_;(uCs&;d5szJcoYl4{o^IpuI8=o3bNRZJK1MzVtz=n zjq*z7uEAKzXDh@+1<1p_)5$^hK15km$SXXDOL%;B@DXTC2^JiOq^x#x+U2D z+AM}MfPlDBt;Jo#taxMWWk+>?VX-?m-|1IwlFzTPcm% zKDFrb2fvD0QmXO*w8qGa%?M?^uNx_Xvcd^Z zY&y51caW;4xJK2TGe1ukSyLs4QJN7alqgC=hKF3|l z0A2qC+AY6SbBS%L?-_HJ{o)26EpFUAoV&4EFk@}>n5lMRyh8O1Mz7g_Yg%9Qm9u_> z!YAlmTENp^liPH=oB;MCqY3V2BS#3N!uMQ^@TAE~75_FF7rnuh@sd(Jge~H(?PyDz z$IWT!mvM6o8_{xpOpZr9pszY0VML+sxKztO!6-Jp8@MG5-;W1oDt7yYJ;2KsePVuX zui04#kI@(J;5iWU5usxM^v@5fJ-2mK+D(qODifj&vU`K*`^N{5lYb-r`<6Eh51t$y zG$Oxw)6gL=>yPOIZq7O+KzJ*9J&f#Z@tT86ql=o-?9B{4>nkH^dzWjRiO6=j24Rr&@=*BxT`WAt#zG)5pmJe&5wHZQklIwRaQd#r63Ocv7I-+qq8cqh z8w$`#I5T%7>;Z!Nc-8Qp8=g@6`vB2KJ)48tZMtG3nS(y3j+bw zFt)13@+r<{Cc_s_(W{5dbwx+fzz-XMbgOy^79zVY7n+CP5+%UQvJVfz%DIRFcgO<> zS&N#r8+6-#SN!`}`oL0t&nvn{fB3z3RBK)F(K73x(&qATg-l2#l@MqZtKahkb&c6v zK;`4TbkBKg_LlK(p0RwjuYH!5ojU6@Ptl8cJlfAaMb^A$xhl}(_xtb$bJ;uG?}as= zT*umQcfJEWq_c1PqL5D$(95!p<=}AwIINqe>|U%DV<9z9Onxz3w~*sqW^xf7gbrSb zYwH#hW)=tN0djfh^JYkn&xHJQE%FhXqDSV@X^IAEQvXIN0a)V_QehB=H&?b9FZ{4_mxZj^|{Xgy*VKwX_r!FS|jB0pRwzz!eBv>8pInmr7`toou zF;^%o&CgUPcslfGUEbrMS|?+IzI7(Ss~MX;65^h=UG|KUTP$soS#1uV-~)MKkPUf& zfQGf)*T85NZ*nc!<6HoIxV#}HU?o#9oGz%$Ur9I0USJunoNbc zILs~;KQo<)F&zVKsW@{HUt~YH!aNac!{yi9#1u5TaejmCD0t!7R6JfeI9_yW5^xM^ zfs4dhL?n`XmG;(d7!L?oWE+lJnA==f5W|~>RwP;sT3n94^eT2SgVP`tyZ|@@#w+?S zQ0y4d(E#)#v!LuXRxP6#4LD^PMM-dc;JWd?gX5M4V?ON$Etw``d44y9GojIasomjV zxPN%ybpbdF*ajEU3%I0MC;LqZWMDVJn5pWe$$*aaxCJ`K1t*1vg8sO|* zWA-Z2$}$7e7AX zU!C0Gkf#~BLCgo-aTlD~72n;;jTPA`Ue_790ZFXELb;IsHpvWw6_gqCQ<;G+D`75Q z(i!^Cf-++nJ&CPcl?S~zOv;QHBWZ|(pjxTHEbXzsX)%e6=~n=@tNpUv@?{blo4=el z2XL>I7`xzKaxEmbvuGkQ;Oy{xC5Cez`sRK(-UYSKN(>$zLe1r}26-AU0fEW1lo*4M z7=xyj7?e^DWQjr27A3~6kQipn8!sh^u^JKsHk2g>J}TY;8e*UZ8**`uV?%uKY(`=* z*W;~+g-s=f6xvD*m_z<>E8!V3cNn)%hF_vc~ zhR_fyqQvOWNQ~XX)g&=woJj<%NIfQBT%AY^W>f8yY9+>BATg*gB*qE|%*9)YK}pzr zMjH}?;z?qpu%VC`t65^KDlz)vpOhElrGw*sk{HCC1>+SEo&q&L(d<27F2dQF2}lap zi_`)@3!4f7S?Q<5SeiVL7xxv=TO>(23YRDy#O(Cqn$fcKLd$`lVX&neNfelXoI#-6S*;fl#p-sJWL6nbh56$Sf+B=m}kK4H*Ta z*?bRkPz7QMg-Ed^6PXoDJk*fkqF4&01<@%5BbIt0mU#g$Sf+BcH6tDSn~WzWMqgXEfz%;N><#h$0Ue3qVd862wP`F%9(8HXu2Hq zle)EMTGesia96Gk@HUGj`XtaZVo3lIvln2Xad9$ac86Hfx9RLsEMepuDi{XTo-k?Lzpc|a44K^_mO`6RRZ%RhyapCNYsl;w zt|YOfrO;X?A(l}3Ct_)q5*5xGG8S*e62&(eG89i@X?beMtYopo6Ej^sDqHy=QtmzZjSNr?%D;Q)Qi6+xLRGt79{r7T{xZP*;UGz|y(w?N-XUSe zVf`!uM05w9s0GA@C0Z}t(cYNHd#@G}wmE@^MYuQ;rDmq~yzGPE=nD=2e9J&F+($6_ z0q%r647%6x8?uT#R5(4B#_eHajzkLc6P4~lho3^ zhB>v>z1Du_7(x%5-D~k_vXr)cy4k&kPfH1j2vRD|y4U0p2%Rxg=T_B9Bo9)l-%2GP z>`ksUPErd2K?RDfxm%3Ep1Wn-+u+)oO5skE6Wd)#)9(kP-653t4i}6<2>~0n((YjY zVm!QSOn-^4)yBfRwku}d)VqdCKfX9-Ul>P9opz?e{S{98A^y=J?vZZ?ynhb&RD00- z=YhgjKixZgo}cdarOPim>Ot5vi=~K!hFg=N4bw ztO&bcUtAJl*%w#OSXLpz2tr4Z-sFo*A}nZ3wMG#(*y@YJ#NLpq0;{b|3K1s9IiD}? z^E>(CNS2~6E=}7_B8=imgw6Qk23dqbtmpN`0oSZA4zgd~>Wf?6?28*jU#7k|=wt_9 z9GWO%N|{DD58G+H>Wlhlb&sqX*bnt>nQjpF)y-bMPfZXxpcM zNH*!KlTMiT7wD^FdbT!~+R-K<^!X4%mYDI??JR`8cL|%TYS(y@5>$q9;~LLD+UD8| zb5AzcKJK)+LI~l^#fd!?LXU-fT}xxZZZg>`v<$&W%lhkj!@Xf>d7Hp$72il~C0=(j ztmNuyNy+AMtGWDRVmVDe%R*?za%w;I%xsN^EuUu7C_zPvM}&~ZI6}x2$gODI+BjG8D8&)=;#-~>v5VmJhK){zd>LD zby{~3A*~k;a6!~&UjK)ics<{$T*2$Jxe~k{bH$ad&E^Vu>UL*y1#jzQ-GyhGD{S(a zm@E6jTv-k;8sT00k{4~)tho}r9y`sAIt_2yeG%06X1r+d9Cq(ay=Z?vW3DVSCb@X<`ZPOYinQx46i>W9dDXXj(avM8 z0N1R!0(H6Wf`cxZD{M8&<_dSoTv?62wC0M_32S9VGldD5kMU{OUC@Gf4|!V*nSx9& z#(QGzV|>xIaLP=3ayc=iKX1?QqSyGtNuhTPBit51Z?Y>e)dd9F%$$23qL23X$h~_* zE=GcK>5eW6J@TS!EFLQ>dmugZCaRzWodf1V9m~sFYB!vy2nya_jALiK&_cl)vojN zm%Wk6HR@ z`7z5R+QV+Tt>Az44=rlYad2zm$gqDAudB;6HF&=^C=x!XN)iA|=tXG(C4W?oR`HQd zK4eeU^h4R3(T7{U#M;E(51@vtG!GeJ$jXhIGxq4AywD}PtRJbuHxP0YuiPF6pZ;uR zV6HgHz)~$Ir?qTjV4o}Ph1F^7lEfHmP&7WCW-IW;_&fN(E z<5^;0FsMxn$BBXM$_vNK!+pWP!gNKls;t7cPv8N_?V_wQMUuZI7}&m91|~E+ECU1s zE1904Y%>F6xwyGI<6$cUdj49wyWOvz~z1EY9iU=im%+|Ix-NBHZ#ay-E6 zE`6~8$G`&@jD_jV;(+blGG2j!A-47UvpN8iT?u8CyTmt~kP%`&G$~pi@`H3Fw6S6+ zNl-RZW@UAS_jqFmUN}igbFRK)alHHBi^}39B_q!hgoOOc>S2Zcyg8nr@j>XM+6G$5 zoOTf9!Nyz;jyB~OfXhYUEgK1@H5kIQ(4m8AN$mq#g*h09L`+inD#Qqlw~zqjv}u5$ z%>)_EE~c%~v?;UVpDtcmE*N#mgW-0}&CJTN+oU``GsCQO17QWKal@?kZDm&fWwF{l zWmaq!MoXJ2k888cYVG7`?W<%~xM*7Cv1L{)tFNJ5a!Jf;WoihiJZ@)JOD`(P^39k! z&vs%}^Sp~epIKy_;eZiROkS-eTz!aKZ~TMd%B#Y~)VD<~uOske)k ze>cOeVq?2JWo5#xD2^iJ+(|(X6yL_JHhG69+-h}4ZpG8gtu(DSajRrnPq>vH!^EwU z6oZTO6X(EVt-7V-+C?778ZAjSCB3oe!3Ktn@kQQqa@=tDwFhNaSl>iPM4ha4`{UKY zs<3L4vK95ir;@V80<2tZ)gb6FlY?hPlPIt9EcO?)JZpKDXRU5#RDwb5LV~OZG$?<< zL(Poe?$;zB64PQeE_A^QWm+?C*KJJe?`GVt=V4ldtYN*^sK$xKyEQuHE3|k?$dENG z^(xks(Xh05Ngs7vQAH5!E;7I8ZNp^yFr$#8~|<}jjdz8S<_Z6zw|JjteV9G}Me z!L@0K@OfoOO0bBQ9ZGbQt%{tMOt%AmNjmqY~3uo4;}-X25A>vhze;H`5Afc zv=9txeB5>;sL^yZAD#RH)2(8<7l0vyS;Z8a+J~W-CWJiFBE&JI3$tF-kD7QSE2c7_ zu&jw_bgi?EXvDIPxSmZ5fmqgUd`dl|m}W2PY$Qjg1LgIR@MaylpDV!H^kKQWSae9}QJMGi6EusK5I<4nr$XI5yJ9+j72f+*3u;ZFTCQ+p<^@^9Y{k@Nd#>Pxhxlj8Zytb88S|8;tULZ!e;Pc5!u3p{=$8!Ve+eseo{(rUC+Vv;txu%|QgS0s^0f4=0`r z(xPO>2)H0>vw--;O}2n59n2g87!NqmIe-xXF$rLtM2fJhWN-Fd%nAseX;G~V_fBkq z)o{Hg0kQYQa8=i9DVgg!t2~wg8UX4F?ZC29h$z z57#S3@OcHqn^iX^#l!V#@emMc{%sNv6yGKwmhv(i^fwd0xV$NV5x5W##1kkWXz!Ns zE(C-!91g31=wm=74+3a0fDyKp1%z9)aRjJHgn-y3PXaj#uxLOR=(3siNf{HRQ-1Bmw9b>GZ zy~@TD=xwy3^D_uODa=%{NkE8RTy`qW4*w}2Fg}kRF%c4Q92J&upbYAVNTf*G;IwybK$P4T zb0OHs+Qzh;8#rC0g*-sm#2lD@3ZPSSVB67Te%d@q#TMGwj}z z->2+eRw0=pZb?eV-zIjy*&YyMExV^X+w6f~+sPh?z(88Lm8kPJFfd0|OxQg~J+>lC_dmu+uL||ZM_qko>dVfrGJ=gop32!ztp`QBQ6NN3~lDg5AT&v!j~3WDi6f+SYjWh@jJftJg?&KXp_S38;IR zi|el|d7h3hVn$z`q7u?dZ^ThVJY4&mPDeak`rXTM-qb;$8tlL+LDf5Ma>|Y>^wG@q z13+|C11Y!^Oe8MJt4%biUhTBWiMauYOcP>&nE=y>3Pg#FXnb)1zGgT@0&E3+&W8!0 zFeXE(o9Rm^Z8LqDAFc^~mxnAq6a9{6v-l16|;Q z)&<@M@x8NKF1zm)K|#7N5zzM{I=HYv8hm9%FG+O_uVNQQ3>PsW@@URy=_%g4ruS+n zlM;y8p*czBmUuUZ{@uLcM)dkQvUmj-@_UxuVmmbc7g8^?>6?QRNQ+WLf)Xscae->( zcJf%bEp$wseDf)|2%wD@oA0^f-bag@Hw?E;kKt8Y-`v=oWW)FC^F=0Zd?<>mDGf*{ zMhkI-E_`tdL@L8G5ZM^I}BO>(6 zdgRrl|CAiMfx1ftGy?iw16T-fVk@dKjBre9!AeYO+R)Nc^W;0o%fu26Y~Q3zY*QxB z5;calgO;A5^2ll)Zj1^>tCw^mj#Z`QaOBd(whGk#Xptmn%S-Pyc{k0^Rs1Urth0BW z3n`@;`U6cNjIVT`YT*_E{wc0o@_a1|y*8CS7G(izE*G}gEBxokbt8Ny?C~eZ?Qrg( zo3`0B!s!45S0R9q0JvtyJjT4G z!CB;7IS7VJ5lO>a9!?5GzJQ3ak8KYOxu@QFVKe+e&$BaCI4Z1CjquR)wmV{g$TDnu zB+E2*vSZgR#BUp`_#LMPkaWc49`s0v$6bzP0IoJSorihDZ#ZzmKkXbQY`7QRWDBUTJQynL3V<8(_8$k0p`qPAcW}7N_9k zLEeAxilv|JR=vqF7bf&OHv4DBjo9Z){*I!oNVPOKN2-YO8;Us+M-9twsusvcWhoA( zJIFZ+r;-r0m!P}iLS_;WQn}^^S5oMa47dK%xyDh9`#&KO!IEe4k*Lpsp|olg_+%Fm z^|9%M21;!E&eHMDXt4#bA@Mp@l9r8(;wBdCq{M<9Af;rNPphTlb6jYMk_#Ck8sIz( z%|r$)S|ultiUHtB=~-`{ zg{Ue`pi;FNVCiSTgV`lx5ld7^irIU}Y???jAws~b=FKM~p)K(R9)eA)@aTnG?M%W? z6l$w@%oCOp663ABqw|tt9~Tlvk;E{i(T7=S^kI+3xnM(%6e{@@so{&};>aI!t4sz8 zeo?vhl9HrNVVwU9!APe6NP>C#pM_wa{^uo_cXg|!#9{89rel=OLo^4)=Tqg(77y<` zrVFEVa@Jqx!EG;t6(9Wuln$-R3tq(h#mi&N^#* zo@F1W?6PH{=q{EfYD|88)OfTm6u({+W&-LqcOv*#xIRA~2@x!~c=^%Jdb(pb))|3t z#sOrvIa8jfuY;!_hUHbqQeJ+hY)Yuk=a*D*_#Uz$QdKjjOc#a|IvsXoMcrw3cGU3< z3dW`UTc8vI>qm=MbH~|bui}F5;}v{H6))q$(YDG%&e^UX!+B$_QWC1vOBXoK{#BLL5LQ02IwW7OFA~YFnXTGf1J3I9O#K#|?gjj?{#f%z$_z z8H|afua=9p6pLxtEpD=xyUohD^k6q->-0>q68B%h(ANKbQ8g?5@#NQig78Rn{#SpY zgMRD>9xFywlMnJiZz*8vC29vEw*GfE_KI=kqxI@lDy`mJ$598u^~vuy#c2KB-f{;8 z2i?SEh9baG(eFp1Rf||ou1^IAoBa(L_73vVxC(a-df4O>ghSEX0Yv2Ne{XLTiA3WZ zxaPNg*t02Fwa(e1`IOHVd`9g}`I7QwUlTryga>B^z-Y|^otV- zOwDyTml<+pVwAAyai_jBaJ?4YmoVu0p@4t_;-}NBlW_s{Hx!h3mcKz!Q%V=jQ-WCe zQJf7y4V=Hq^FMfJ?jx$WRd*deWu;8sSp(4kOJU=07V>7FHS})l|&uWtRcX-Jp#pCZX%1R z%FM5tdm+jC`vJxg0sl$f&p90Ca9eOxVlqb(xmmappgREtW4M9?9#v~i!h0!=qQaqY zyD123O*P8}0*sk5TW{!~8=4ocBH>M70pSGf8P9!k%!Vz>Cg95o;Er$U_cfY^7$swr)8y}sVXm9(&F8H#T?QcFppF+4OqNyKei|QS^-9Ly0xHYgGIQhkksOLK-@KFRTgV`5UG5bLHMjP*O0ZkPql~G`A#71S?Y3DbxvS*Fz@DEjbx(Af3;&J0_GtG2!cwfmF5H!ox2Xtq#MVSiE4JU znBYsdcdNO?h!kX`okqYN+la3_^}DDdG@0sHtINEpRS~+)i{RLlMoXD!A?sPiNeT`x z-2=oWDK|;ALEmA5`U&tREoHo@sp#Q!o$J%1=N&EnO}cvlDHfZ(^*IiMR`i1$Cu;QM zlFs!<3mGPg3ChmDNqQ1f<0?J{D_7Dozb@y(AvR`%rXP4cq4u_IQuW$$+hvus==FMa ztck7~?}Zw76&5|0%k{x@o69*l_*a-p-%I)#o?gk++KYn#K6goVOf5wY6h}YUjutE* zA-}SRE?kRU&nBHf((x6!BsKCp*ySpyL0tp zIJ|t)Lt47wXy>Hb27;?t@aoQ2|m#cU7bn>?k`u|vAKgjVrv z36ur+A%v)DT;}0an@vLY%{4KGN#>_4heH%ZCH_oF(Rrp)@BQ&^+4C$&0xCQY4fVB) zSCc>r6?kTVW94s_vY+`rf`vY-H zFsp*17!y7dmm4cpSp-LR)qPbJ2sP`L*bH5wp?#lc@Obn7IqOejHy!h7(X8G z7 z>13n!M1YV7{kgsE&%e;f|Bq?p|I!xx>S^RnnU5s<2gZlWvR)mT$eH0p&KwD0ijDJT zcq1GGrFd_ex>qTVJ1R2R08TAVn{Lkj>Bo7%QI^L!(Q+7siBSLGU>QNB>A~dN`pLat zI?pGWzoAn(Az)BWFqGlQ@r%9^?F)|Yo0nbyILIP(48VzV+&t^j>b8OOzRe&_Kl6?g z=YMG+^Pac=w7>21GoRYjqqa@>ra~I7q&kSyfY*W!(UOcNve-2|r zUFG?zNP9yn7sw&)&0x|XhHh%KiMZzNAt*z&fYvUx0oqPFN)TVS`O6PK7R0B7}^E(DD4`Rc*=~tCsG+(BGN~g4w(qpEtl`m%Q(T-BTmmpm*4+vZL7g>|8-gI=`W50S#D=L^yQNMtt6qlet$WRY+f@2473{TfQi#ZAu&&fpv$SPl8(}!}? z@IuiRZPNnpQk~S!(lNY1t{weZFJ3T#z+Ic+QjgLc39<~&LaId$`l5MrR~rG=XSbUl zhRe}u7jq~5#vx(9^;gp=yG<1tZ@K3MZ{Q-~hfv9fMJJO@eoJ=~ClA9!4cWzj{7Eoi zptvAQg#)iNRQ|AAb(3e~7>Ls`=N*k@0imAHyXffdK*pm+BhSwTg;vtb z|IF5$&j9mZq}PmQn8ooc#AxT6l>GO5Ad@mbH8V#uEFP5KSOP=i$sr6t3kQx!qTRz& z%+fg_Rq;zqIo%I)`P}1YkvcMR`@nz_r?LhrHWb8=u1&Y@{y{J!> zrE2O+N<#f^E$E)JuS~9Bq+zlz5;{U9z{5&?nEqCq+V?`^eAUHb9ET^kbF4ztLX14d zKQ!ip!$Dxo*;tx395=wJ?+g!LxRpGKh*LUI99?q`4|Y|*CFQH|z|bkL>SX-@wwU417ZQb5i8xC);xmn%mLK^Qq8usQ~LxcQ?oN{O!^ zjWNj0#KHLMF*3$2{aJQxT&{E%Asw(7M?%c&i@^h5e?I_3On{dKAol2Rnul37r@sU^ zzqhDETxh9mtmlH%a=PCrIF9iaK zyQ8kmlGdneZd%s|w$}B?^nppws^*iqaw1$jg;>UG<-=ZE{oA7Y!wJ+O)kCgMdl1FU zFf_5Me>+fpc`AeQY3QPekkIE;&*tlo4bq3lHmKfj_Sp4T`Ohmhf{E%FoM84WA5LBq zb>y#OR0tvA^}lh%6&jG;Lp$MU6?WWwkjklUI)D;h)RPxEYY*WYh0?tpx>!&WPz8)- ztRPtg$<%ZMZk{2{{?6Dd_@seXP#4XhOb&JxnEF{o{d-Hm;-)oWU-&VT?8SwFNKp?qJ^pX{Xkotvjg)XIS=N zh^9Rl!6;c?Fqdex^hX_>XRwC36bZ;W13cJ+P;SIAR>l<*0mKj;#F7!@I@f`XQGQ$w z7j!|frdx2|yBf;rUwsq*E?#{T#Gu4$(%oi2 zp=g6b8%1#EMoh=Y=i*I zjtwN+kv1YcvvuY>QxmQaTkpcx!%XKuxFlw)=A(bBQ9m43Nz7KwZ@_G>qF9yXtanMy zR?6AOD4*mkVCXe0>$|Fu?7B>jOe?9%4dUo6n`IX(*Ko;t^^6Nox82fiZE5}C^R=!H0#_Lp^%oIXG>B)R zd4STfR{u{6S!XB6&Ycf3@S>w+0$D9&A8jF1$7ay;uqUTSl~_P$=`CGWS7QVHxwPQc zBGxft!iw05>kE{I@)CXp_ld_3d__ZIig_2>kPSzRMJ^P6;nCs{ zMaezUZN70*G@nTpD;7;iNmw8&cuj>$8dmG13pr-WF8sd|d^#86FvgUD3L6C?K-MO4 zZ@<(7+6R+RqS-GrInRYQ@cu3Ft3ge0&9Z(PU*l!PE-eRdh$Qw5xX@#}C~#N=^`~K{ zdh9wDK~rnu7_Eq)T+^(AOkhWuH4{y)t1m)WVPe+AD1?d&$D;1Av0Oo|_$NtyEsmmj zIJ{sjrI+~x!y3}!2+>r{da>(@qNFUUCucP7)ta<+kH^!z3tx>j@Wg0Tr%YM@E<|h3 zW-5vhGvNt1Fc*{d5tyKUj|<)Xk`nqJqQ&@NQZp~`%YudhB7#eo9^xb9Y#mHKcoFOa zoar5OO#{VM489E%G0kvWyop7~*V~&gg-9sy(OR|?||W3dn|Ox z@`ek7(;-Jshai$gudh4!&872+WtKR|jhOd#0fjHung=IU3sC*Ekw8@_s*JY~3fpn2ubjPva8jOQI7eodUs8WndgdG~HeS`g$ zL#!sa@Wu%R8Tam@H6&aR%KAZ$CO|z-s6wx-e}ypur>e}gYwx8#(E%)%X@Jst+_l@< z1<6kRcFaj7l>THc42HjgcVF&OQ-z8diGH%bJbM530S*ttqnQ(cl}~D3iZB^FkVl%~30i<;QS9`qy^ zVen)(j9!)O3%3^Dy!7c#>++Zeb39xmDbcA35525-x%+0kc^QUqP={_Xs{C|ug1j?k zo5?cbcMu7X;#5Zb=FEc#;^;PCe`381#;Es={ZlELV#wusv^X9;_h|XA)7{q^#}Tvy zRZ7{Iyz(9lrAvt8a5gyu_~u_r{^3dlPnh#02O9b@>8#mrH5 zGNMM07zPSV6Rm=`mTp7#Prg@IW z;5@IWIkA|#baI6ciJT32oOJh+s=(|R`AHRAGtJu7{H#ZCa2i*4$HJgMVGJi5VTGRl z3c*79)ZNf@*HmNB3%^*NN6}CIshl&TZy8snkUGXhzCq|cPX5J}(p^*DEZ6{bl0?Hx- zj0DR#H89V}&C@^%aopBG2Yy-qf(m{#lyftd&C_!y>bEKePQulkcbV>)1cB41l{^}w zPo86V{vMK4QHiO@@g=-NXQ_?_)yx|dL(vI$OgpN17J-DJsf5|aghN%pejBo}EyM~E zERC2DAd6jRixt>}20-C(SHxO#*Zhh42L<;%GT|9mjg7j?HOzHKwQTOJ+C4@wr_sWV zb}?j%dXyN%?&M!gvIxfM)Xh4f&>tr*?YLS*G#Si{yM#HVM$`~7x@jL23=hJ}8<~Xh zUSRyB$FV_m_Yz>jqr0mU&D~uBow@%cubPK6Y%-+g_CMtA z^Mq@BzEgFQ*L%ji5a}W0#N`eq27+n6`R~7sQy(s@M<4lcl?+9>#)7Uq4%ICfo$Cz} z8~%lFPOAjyVqvpO^R8N;!%NzK%~w_vD*crVp*q9s-5?&JgAhdni^WS3_34M|HoqKZ zNRm1324fvzB3_Db)+8BH>QKZ{trySFkX%v_B>3&X)O%^Mp9{+PgaghuUrdV?5pOr? zTMHCZfX+l$NHfOT2GzsO6HuX&$r+_9inSXdY``?!j2Og~5gR5!1mH(M(CVF2BA*N=7L!>-$w2zh1sx#}+Fj%1cUo z{i>-if`3wed0NXLYEj)+*Ns{ZZvK{$if;+jXx!VaB5G63VbACdv|v@l=lAv1jzOC1 zjp2_7NZIaq|7f9lqrC;mbgU}1;#o=A#Xi4)N%m77FWiWntd#n*1MXr=Jv@H6c#1^r zu7w<}YCfPMHELC1RmS??v*Z&Tji&}qxI?i1k1Wj4id94Iy2^X0|GeXakjK+k4RPbC zGQNX-g_p?H1v)Je1@mWooIR~0sp->MO%Ufg9s@T?LxJnnBXko1_()iXFGtnk*`VpL zA(r;NERMINbAP!sX1`*a3Fsk= zLzJII&7`AnWHf}Roy-ysJ`|DOs0CE_D^zzQdxddwb&fSBnN;UaelU^-J4l@RC>p=KTL0^mP z`W<-#38wD)u&DoR9zB2QjsqNbQ+m>X!SUV0F@z2y)gT?e+_@1ByMJS4vBT^x`Ok$R zTye2lKjkpapl)*t`1d4bj0}$4XfCL^c)-fA9IJTU_d|$-`T9U^11Ibe(aDg!6dK{@ zcS6@(t|uo453d?w+Fyeq5<O{81METjMKC^WP9Ava^RFo zXEJi0q^;jj6sM1uZ~1n++u=9#wmd2m`l(+>KW|uqj2}y{W*dc@Rj7vKA-Wr>k`zKz z$$c%&GvoGo#U`Tf!;1~V-Mfq@WK<5^m&+HH_gnP*)%eUhaS-_R>hx1q0(k1zEIto8 zxy)ZN7$EE6A0!k$QZmwf^VsCqE{byKTruQSWstI~d1CUa!yyAv9X4!J08ZgtfkgOZ zuDJ`+i)|{<0w!UnnHO0QB?JVzKsv4)X;Hl!vXhk_;li>A6m&WGk&f%1S_qr|;qX?K z9DUyOuBCfNHk$smH^oLAumZLLAhx}s`vfl>c1YP1p)JG+vn3_A>3}RsK|_E+Ls%+z zwm>>t;IqwpCQocWoG>1Nh*(aCb}s1d_xt8krf<^ghiM^?W5{?o~N9$mjby}i5`gX|^ zz1HD(B(6oZHp*>5CAqAh>`9oY1My6hGl9?xz;d6d_OMh2=KJVyL8n5tZrlWRMPoGpq<+({-?50U$#5)DQN-@}@M9Qk^2zXWvRZ>o;x#uL9J32Z zWGqBJS%r{J;kgE?SC3eV{cs2Jez*hoKuXj{NB}e7TC~yaU*T5CI0s+p&dL?WOvlL6 zctiqhbYDS)S0(mvWnvGPgKQq^B7hD(6AB_=+1K=g$MWA~;h%BnXaGAPcm0P<1S;H` z-g%hb^Sx=PH9l!ji_|r2MleL0pZ<1H-&@faYBRrwkABSBq%qgO2x%1O5!o04C6W2h zVx8vHw0g6FQ~e=9kDM`;sYyfH?eqTq}%>eQdW_3DwBeG>$7w~lSks1eV>J4`&3TZ)y>u>7h`Br^GJ9`SM|tkj-$sDoZLyedj?_FcdABttT=& zoXG4_c7Y}46`4KyFrcr82R^o>sX-9sj4aRoPFMqkXF-Gselr8dnw9%~k;Kdv8 z%bQqXZhoH;p7+t0xasnYnI+ry|Bj%Nyhy&l=}tDi#wB)x#F_47mGy8#vi3V7$O)F&QL{&$WiIH+Z@8REY$v~&ES{pAegh6PGZ;0eaw-F`t0cX2&FJX+o1Z)&R&XbAlyZoZ`+jnD@m0YbpJd|w%(1Ca=nQ;y|1*+W5FD|Z4KZ^MA3Vx94n6@rWwZDoBarNk#4yD>dPq$3{H>H!YtiNP8 znHD|F;p_R3N4oTNE%jF^nVR*uijm>0;ror4)~VFG1WA!?!ZPMwI>HpQMgyo6ty)y%^wC04Bdf3(N}pjDTZVgFq=amK?iW7c zQxz34NAyX9bFpmB@!T=Q9!oFYc%#gUXXFy}4#vq_$%mTi2lW_4yMg~`&?=iJbNwNb z+s2SjE^@s7#&N}$R*GfKprxAaL~42h-X@4}`T6x$fF_@54V;YpKs>5HQ&Jv(EpqwM z_p>+KE#1v06I9}dcb!{r8Kf^ma~5iBg1DqhhM@QD&_^Q>lv*LD|Qlo8S}#hOC;}{ z;g>W)N+vHRe*!FK6>PP6&s%}y_fQs)dzAb{lr-Lwl67K9n#$@L(~=BU^YHYiAO2!| zXmBMTuBBOsVc>_4O-uUW6SF_7=BepV>$xZDF^ZCU)Tptm)uUrYuwr(O%|$n7BqaqR zgc2I&)}YE*C9Djg3|@L{17fl89t#{(W#jrP|9QnmtTgk5g<3qFrJX1UyPPSgP7xmJ zE{(&HV2y4(jIm_OY0kd5K;@@UXB5+r#Y9N6xh+jpC{)TryNdMdg+b(SqwxO1F#f8O zvbMN>etwcU^)DnNk;2dZKS455N6h;o7FXNR^^?%t}~71Q8-wLWRSm1n!8@wc3h$km< z0)g#%N%e}O>W`eh2Pp8%@MUsd!iydStJp}RI*K6r66?RbGzUnETbb1 zou%s^_G&Q29Mp2QyTzkCD;v*`nQn70U4TjCJ(l;DBy9mPbIk!ei{nI9zRVTi=P3rk ziIH(#QRDc>O46 zk6lp{5erfecEVir{H(ycw zdfZ-8{O?CQk1B*qXcd81u~Y>l0YXT6K|uw)kS`K5+qtFilUe) zYRal%x-$-)v>B%ONdt)ntH|M9FHk`Qb>lq8 zE1=OO3D*-%;~apVmf>J?j@E7q0v4_PVB7{RyM0Q_aK@R^vJgSsY?{@i*V~4c{p2hy zOO#p=oRgx(LZ(e-;Y^CQmz9p9Xg3$8X@i)Nx{a{A}=Llb$Uvq_J*JDArgzT7k0A(GlVE*e%NQ=|n>ZYYVPtra^Eur{9Ef;l= zRA&UWj2&nTy@dXsK`{e&W@u*f=2E)aQo?p~=&2}s(X~pNuXScPU=n#RhPv<=Ob(+RifC$+C+#9yD*|yX2lUv#sv99JCAB zKPI}vdx888p#QB_cxiSq7iNxRA}x5Z5T0c-S*ErrVCF$07R>--egh#3X&QCAfm{H# zoMQulVC|y>`v_>^J|cE8m+mSmC7Iy!M8vc7%16`=857dT!2(49uT`S zXkY@m2TV@(Vxw4`rtEe3B{*CJ|1oHOtY^()g5+e-S34!=+wss3CpI^2^qh?P&ED|~ z?0DEVXFHA~Ku1TCN19WRV18-#;^x$8_}_oU*dVga7eB<0x0?Cx^Z?em`_APR@#Fmi zu~$t}{~#!ox-iKQ%v=8=W*w=de-L$bde!1^V&zLLobc@VFdGtBpCFA;HmKgo%te(! zE~F+1AU!d;wfVk!z6VOubH^>MIp>b@S==j(Z3tvbJBoz#@$D$186H_& zYI8%(GrtC^I8`$3I2K(64X$biWmHBC9}p@uWbjq7jOX z?|b_mFvPA0Xpcf6-LJJ+d}7r_*^5=1%)LmsR^1ngADCbTVzmtL7p!JIKhd>ra$&dL z$AvCD#CCfTOYIjGExw1kyV8?&9nAe2YJnqXlhK+G9|xqRAzH0+w8D&Lj@h9ylXMM&gSqjH8mC29Nb z4P}A)hb|#I7O{Ai^eV2&=#LtStJ3YexqV(clpc#nN;+kzFrjr*;q zh5p`?o5bcwTA{CXoZ^HLPo*BFP3!<+M}@`RsA6Fmmo@POr3oh`K|cv|z{r!5JQwv& zVht|D<)E-NDuKVhD9f6CiVrvz>1tQDAq7NJ>R~z}T7hKG&`uj2gEW)f+DQQ! z>GCYbJDvgI3?h^hQr6yIq&X;O(EgY#tJ}H`gSJ2Vl%7~jU z$URMTKgcoHT&Gb>J}cyoMCoe>@Lo^N<94!Wx*_3U@0a5cEXU1@@M5>;XmDdtc~_sy zfRXfVu@#4@vwwg>k8MAXcoQ2`pDM=Og;p&1Gq~~~1nlualU|~Z3DTsRJ+Tn?%00X? z#bKRffCi9o_A$ob%Xs@{>97oM%DUMNEFNl{UXTfe^CHBkpLrc=V7kMXT54=4t zaXabqltPwM?JU1VV3l}&c)X1zz{~R)hz+(jOZe%3*I@Ec2;{~(?vgekfCJqRH8a*L zcEjf-W!4h{+tg-8Q)z4G3rVC)w%zLidslx9NGK49^BZSi@G z6(#j`jP=5#rdF5iX>gx`gL`@?keelJmCaMqJ*wiR=2v=lmrC|$?}8ORSc9qR@X$Al zL?W|GnlFGJ`3+cgGLZFwL(_y-QgO)hf3ARNACfmK7NAkGj(fOCnKE?o8^9RU~gNCJYnK1<<;*cV!4=SjuQ>6Gr!RV!kQhVd>!5d2 z3Lg_d&W_qW5KE9*_L-8C4V2g6F&WsWaBtTf5-`zS&9jl^|5LTNuR;`K7e&QRX!7wO zr(!oDPyzZ_hx>s!+~Ov^xW(#ZI8x9TB?knn5ccpo2oA8k=YA}AB;h5Hzy%1CZDDGM zF26blyJ98w^o1#EeaOIj_mn=qYHI~HQ$6TXi*T3+!^4IQD~t)DJ@uB32e_6UfF_8= zeiTSVjsj!#nWNBgJVvpYMlozY*Ny@|hG?+KrOL=V>?aApbbE7y-srlBgz6qpbc8W$ zKH&En^WIXXh*1oJvGZ!|d@4vsKL;Bl_hGP+9~I}xa2ZWjuJ)}iL4066z4qXJdVp9Gnw+8;r57=&9L!AJ~roqqM(CY0G2IatWA?GFg(;0Sp7}p4jQr0BKe^kDyxS|TswT?PQK#A9_7!<)$Eg=Y7IZ?GdiF@ z1}E=U{}u;QGer4m%rO<7Fo_{pdujGm0f5_Q%8kGnYfPA2_LAa-UBw5GAs=`ao^;yr z!qs?=M0kW_z-?ZOw{5bX#;1HB(cDX^D9nyPVV#CzKV~16I_PeNPr_fGSM0iZU}(o- z6to?GR7eo=>eLdE2-KNP&aaDW0M@Gec3!=aJCi6ZnT>%#uNnZsK&kra`3rgcq(uC` z#mlN#zg+zu@X&low(NAM3x7P1Yzfj2xU{cycIb`SkUM-%4uCEn3>$;z;~^F7eJ zN1!V_6f=i#mCH5fOYMc@-D5Vt#9rpHbYN$NdVoIO+P>#Amm0t1&<19AUKrtX4FE!_V^SHfsSU zfOxWuGZomn!uvIz?hYbMJC0=~EVF9_4&l9xr&aYA6uck_=c#;S zuh*As?9t^pIyJ8M8q+)mlqHyAj2uL0PrbMLxGZ1h+Fx<>{8gn=W)n*~Lh9Fj`YMo; zbr4U-wf@vD1O^zH|5;%pBCYs|_?4hQ{XAebrzU(?r;x^IJKk;97ruVC$Ova#^$ zqU<|ufpd6WE^G}Wy)^Jw?}_H9J}(w|hYPe86A#^NcUq1myEbS>`aS(C2EK@Xep)r> zaEx1P@2{}b>?E>v0S5-AlF%gGL;m#@{J{<4223YQYBu@%{iprCsA@V|5cdhcpGWiymuqebqYfKN@Wd+8qvN%LuFs`dF)MPC>| z+{VFT*VGqo?BR$Y-qJdM(^wb->+eZvEJqG}=bnuxt)P0JE%cw+b2nL~4U>=2E#I^8 z1XZc$E^>j1S7(c?rY5d6O(u8}$Iq3VY$2Q~IhZJX7O1=yCIpBiykn~bd!C;CAMRQ^ z+_iZ3Qi)3fgKv#ekS^_DX+XeQ9D9^jUQg^&f;)K;Tuw1xG`;P7X_>_)Sba98;U$yG z`2v~F);Ans`e~f7w&-q5$NS0RN;1XkyE?lxhT%~P)BLNVV>o~j#;&{G6 z^&K@#=(E5VF4ri)d2`i--G49laJ4lT*jr?FwZhzo+@;WTiqop1$5&Em{ElB&oFMqs zWSD>eC4g>$d|w?%z%8mDEXNy+zWFzXZRE{oXyaP0pXGX0s{aN2q&3eMyz_^RvN=Fz zs?vxu$Hlo+M0&)nIT5dkJ2O8$i#wQePA4R8rTG|Nw#kTN0u%-^RBkPdT~`5u01*p8YLyc|(M zfq{ph=SEhl2~pUhVA;Ist?6tzBZ&(IPG&EpKXn#03P<(y`3d7Ann`o_Pjd`sMClEw zxVf+Ud1sj~nL4RmaP%j_LKZopDX|rc!M&AC!vWN(T=b4)`6{j~*&~JnyXjH%;K}co z)qSDQ@V0phkHZ_Y`uXBQ@z)e%694g1ag#FGUPMH74*K#f|(B9PaOlx{i`XDf-{*`()h<)qYK-VPF#&SPPqQ z56zp?De7w4B_!cOC=Q!d&Bf)yf}vfid0Tc}6_L?TSMf*(+&Gr4`hEn%FknBXk`W^z zWTW{oa6NhhoMOoI4Vx!~Jqc+z;04~elXO+_gOu~^yV6OZl~jmu)I2yi4O=`#$30Cw z&Q-%3zhC_#5hc?}<5e_LqL+KNHP->z>1>${F2li!9jzu~qD&30;5{LShq`0im_$6eA zqmk#@q7qaPp6#OY6{kGI%pJrr7`S8AUo3-4wn!a7hz)ew zT4d1FJvlYxP=epM&CMxoY0%lo0f>DqD-PHBfea07lU+4PgDX8m^RSRDn-`yGUMP=P zMj+W2^DA9FhPqRRsiok;N#c&vws-2T^2T_5yg7CI2X5w^GqeeSg=s26F(~0hvu-GV z^s4B46%PtpYI~ukF)F7QYxd>_dU&cj%2~>(eOA@CpU~`f>aGuwzoc)kq&-^MQau~C z>hI>sCupLu{TP6O88;A-0pn1T@W+XYSa0UbY5mbMU$|Lb{21a_O8q^gT|zqA*x8hl zr$Lz-NQ-GHua~x_{vIOg!KjHLDfS~}#V$9QOsth{4)28%j|6eMDiUe2@|k7!XtqA9GCko$a{lnE zKAbf>sy8iByBkjP_EUuZ{Y75Adaw~xu`l_zmRyUH=_Ry;3Z)!=$jbcttoe^w^_!#| zlx^5#_4*2-!pz`z^LeC3G+?-?*UvAT;W29g0_#W(g?)c`qR}y9njt09as3PjPfSB&f z>R4tmoorRad;v5_RKzfvJC3_H3p*?GAae~fJN;*dD!woedtQ`^jS#zL5Q%lFHNWGz#WG?^5nJ;weOg9wu*4bX&(67l-0d7 zmnQx?&Aq(XdMwM6VTP2KN?0~erOV*o%gCEjif*{ecGca}SI1Or(#QTII&`7r4xqu9 zRR3mdp0m7#H}>l|^DR`;gYnO{f-mMp=0%_VJSMGsS0${Iz>%!!jc2* zJi21Gw;LgFh|`pyC7K@lL4xI-eV%c3bS%ML^aX-xQkX`0gz)B&Q*mA`4p5xL;Hsmz zy>|JGU%!x#rG-YxwzC9$Qo(KKX+3#I6*zS>w!NCOy@{!kt%OY>2Ziv5?{$GhCy=hf z$Q#%U)uMR@7|u_AJXcO_d@2VU6_b)UsWQ?iJKfz~AF>#%X~ zIDfwF>OIX<5QAmyVsn!hTxpHv8_Rkv(F+ZXUg#(jZFdH%MFSO-tz`c7XZ8p?=05_L zSiRlz9#IML4^nNXfb)9EZOHSqrwxp|F zLaqtKD;C8&W!ylXFOpz|MZt6Al2{W6yKlcOMCEQ1ag<~q^G_U%!Osa!^i&?7aq-7{$NRMRWhHAIX}{<^#6!@kO?zASI`zz&g7w zw)scU{a%{A2_QDazfk$_;_>rLy?iWq8W+ZUtl)1Jg=hLip_Ei%XcCMoPFYMOT@#tb z?&kw&_2_!_zGZsa%Wf>^*u(C(y@zS9NCnb4noL?0Sh=KlFxq+mFZ-x5W|yjYkUAkW zf;pBbF@Swc&}|G}^rDvi<^3Fet(*orPLDMw)`E_ww7g17ky_9l$j{Jx#$nYzaHLqj zxzw~SDZ{p&*1Hpv92x*Q=FMdJWa5E5|91gJNH>%8DS60 zsZyB0yU+0uv9URk@(~NL5rg3Zom3ICF-V_6fdDy#gZy>iLbG{20)YbJWceLOLNjy= zCO8jt!5Auovr$rfvdzj@+rT>tz^qBv=E#2-a<&eU_D=U=M^^29BB7tLa5W8h?6i zNS+iIC3a^mHUZBz;C&ENfkT(nYE=Ck8VQ%u06Gf5;RA!@`>uJ%ubd|Fc=b@^k6Y-w z!f5#LK{;*6&Ba_=F7&Ps$hQJYIjMa@O4!0T$w7O>9cSrqcaS?^0=!vG!G`}AJW=!= z#jxq0-Si5_7SrPtA(y-SLb(7-g&ZP9QB?&J1Tc)@VpItjqTkto;aP3x0>;mOQv&1X zzkXoAE1ne?h1{~3(PF}{BCa0uYc0O)xH1K|dLLJM6J^!FmFh zS$ZI)v{O}M%b8=$s+vXhyjlH(a0PV%#Ig;Cp)iiAzrz^DSNusSxcrS7O(onW4>2T# zTLkoSG1ATAjixKfDii_&3uPO28)tV7QandHS;KrL(bUHS60NS=E%u;<*_<@e0XREJ zvdZPjk{jy2=2U)SaC4KP!eGP7sw4Glpf|8djJ0XSLfCo-8Adpq`8<{q+t{}jd#j(} zhnq#nCV0QOaN$hgCFMupp%TP`!x|0k4-9;LT%iX>ETo?`oh=HLIi z)G)AsJ!YLvioF+SsEJM@Od#5=&EixJ?dN(+zOh1wn7W>4!t)?V-I0~*D*)2rBO5t< zzDO|9*>R;=;e=GYbN0m9G|i`IcB5>bYBw2?O3QWiiKqUa>|G-ihK?|PakqXGnG4AW ziJAsgX7l48jc;qerMs+%$&>26FQ4pvKBm&YN)3ykv7vA0-4*%1%@-93yCzo zwD$3+XK+I0%=z4QCX-dVoylkN-PvaHnf**2nwiO1$^m&7uW)zvj|3*Ivz8}&-sTuh za~mgZK(Rm)-ur4JQo5ogcY-3sT^6oGZp6g&9QQ0m+;H|nc@Bm=1787IP%&(5hy-7~ zqh3fU^VN-^T#utIrOCNOk2MN*;r+Z0D#s9IjHqOWRlUsLt**u@VW&7U2(=#-cyRQ$ zaYvWruR@mW=>W3w`}3ps&FF zU+C*&r>_I)>kN|zYXj+&Z{|`>;A}j`4{~i1Yc2Y2zwR~=DcMAtpyg)dSX|P4>lk32l#o8 z5o?+pmOP07iU>EuV998J85q2DPEPWHzIY63fC?3{!qj=KBsG-_*usSAGvojY`8~z_@=FG}1lz#8{L{}I zytWb~9Qxmedj0DV3SrX!fmK*RNTsSIVd&IHhBqpXa-P^44Beu}HN%ZVC_#%!F;9Zs z&mBD2rVoOnlVuAP8k`&YGZ5|IoKF{(pp=9-;D74rO)_jcUPg#tR)_8aJzMxvjGMhG zipR~De@a(R^%<{h3o6wyu`+FbTRk5hZQSfj#qTDs<(b9RtPvEu=WPvZydht5Y_q#r zCLszbG{T|tA!3P-B3vYp1J6g|y}tZuayX-8p_q3iTl~f^j?~?_2Sk_zo#T=%7RR3kFeY7mJ$%8Kc9G2*HYX43Ib<)Ycq?bGZ-x z^3%oSJlZ4jt{F8;^{zbtyCli~?i+Y|sqeYgyFJ?nQu*+w!%ip^iyJ&RhvUM)48j~Q zgec=~W7=UERrv+84Udd)5(aCDk#UQYBIlHyC<*e>T` zj$<=N{ir!fNSZkQvi-X)3-Yw|>C(xbm>r6QpPN>H>bU6-SnI6$$43cS210Fo-c zfxRc?>^b7PdSSTUiOMNuNIblD<{_ONo>7vO5JPh^(sTh{V)cjzLC$LiH%w;au-$(P&vJc+8#+?#H*K%Sqnp#i-V7ICEza7;DG^TWRxg)Xr@4W z6nZaI>l{k$8T@+Xz9-{pNR0rv3kRXqM@()4q zoFlkMsY{}npnR*8qN+{)tK471h|wMnRx)}*=fy{98E9^@v) zGDBrTSZxHqy@z-=Eq`dv;%;{U5(qXcXl;E+f(yO*_1e!FIxrYAksvkZ?K)4%lJPPA z1TB2QSU}Ixn1C>1df-DS?N>I!ZtYj7&P+sgK)W&=GrOG1D2(Flw&UXtC+HoDRWNqt zdeE76AZFw)_6OC0lQ9i26!wLo2s}5-wapI=9aBx z4-jS@c4cWx!m9TR?IyPlYU5X$C+gw{P1z7`T7SCCcy%I3b1`820dXc|AdKk(T`!N^ zLPtGoI0LGHcg497IyAyy=nbPP8In+ID4RU5^RQ2{PINe)_QLfamPu0{Bhm34H!Deh zJMt`NrqvO0H<)l}qF{vFEytC5uCM+w)cn;3%Z#4XOKC{0k<*kYF_8sBZ0>KdRpf>G z{EY{+HFx;%UhU|Zctu-g-B)ZA@AK84gL^C*j5Hh^V1IH`b2x~v`ug*tW^29yJfK<7 z1@T785qPC0lIfYF4iQ-aYPf@ivXhN@g^IaAH3AXsLdL&4-$y$}pRhlr$ywY-!uc5p zhn-2JOcJ9cC)`=`>W4TOMr>nPymx~OF|tp@p0Wi*1b-r*)PXlw80Nf!ivunYEQYz7 zoK`qkWOwz)AfRD@GCQs7sI%N4? zO?Dzr96Z^?u_LY!7XVePz!%?aSHL0BF05aJMFG4&oC6rWldjJV zsIpB7p_-Om`3|aR5jC0WM0EyX*AAv~2e{ykuo)e>*yYG+aPMXIu?^}dPIVV$9R0xy zgpL6JWs^bmp+)v*dk%iz@mjoeKf{)Rv&%2RWvQ;9!y5&4!jV0Q7+kJ`MQXd zA2Ov6WH<%;^o9O8O!}Zb0twcsUVeU*0=Xzc!P-~2>WbKPVCUlD(K!1Z;LY|jMY zPg4z$u&dbH_DqQSlrap`JNpSwCmCJmsp~4N+3YLR-%JO#sQ!0!H%h{{FWRT)lKOw* zAlwEGhN1jSeOMgk>f4;J4@V@u1K5MM^utJ+xep1p->xTzK{m*SLra}_A)UaDYObuI z{PVRL$}{cf_)iL=GK#~^CmwleQvqvQel`^zuk*-y#Iw8^ALGOzufz)CNRIr$@{*@4 zni1P^ahR|0DFZ7)l*>1Q3xn5YV|1l0_&KO^tfBtnSV}RX^9kR(8PHyMtn*NEkFoCr zl+Cs2nnWPG0r4vl7J>ppGUI7HahcdcUx<0E@f4dY#FOfWk}bGEluDH7Ud|IBh+^7 zbv>@dG5!~emUI@#VcHMTIiyTWL!b<>PvSr-Cs;~gtjsh%*60_evziPe{}Wwv$0?F{ z&HgaBoFCOuCC!3FOY8)6i5al~oy0w~$v4Wj@69XU^J#p=IRlr-AIn$oAIsPQAn33J zIQRpduq3oRJoPG1gsPrTndVKe<~*j~_UYO&qW$>s+FOXRJUxK)S=-krn}h%f0$eXO z2zNf{`Qfz3j~^+L3nfe&jvV$-ptt#T4#IHe$0C^)9T}29V6t#^s9cH9&`FK=$n%D*Pq&R%MdGLqu4JF!>{f88# zUi3l@^avN&G+A)dB@+Pv!5NAKPn*JF#V32hi2I2LnS;e1bqF2_pK^m{pZ;vOWbeN1 zY9}V{i3jESn@bnATV@+jYsKgsXDfzFjMnIbI2%$CMr6&~(PXjDUY@J35HH+fKym81 zI3|LT)5dc386I7fU2I~cq5=CZW^OEn5HYBJE3_o3lS)xV1J^NA!pbZpG(2l8XEoGz zkvbrKI{cw%1N#%h*?JeBE>qMiCJ`pauFw8+M)_jal{AHefI-!}+`k0^PC>IDrF%bx zEOHP^Ug(9Y_i)UTY)JKs%lzQm6}>69Jf^oPSC?}-Ee(li&!3%ptbn2KHAwAUEEE6} z$AbkBR{|mpk~Hp*OxXSc-(Z;v+L241nuoibQ5YOH9KR{ia^O+(%SONKZ+BVlyN35}6{O*PP zyt%dI>5n>*0$x_F9{PAVG|RHo@z5pBFIAS#k!Rr?j%N)S}irY#I# zs^;bto+qUpR_|0bY&d|6aui%C#bbp#9sO6Jx3evl^B=?Iz!*}Uq|Jv<2h|5*+~QOB zo2XQOb*2m#C<(6JkmK~@f6Eok0XpabLZkPblqEoDgOZ_*SHd_%`yh7j0fr{2S!urf zJ_ybm%^JA(*n~8$!W`y7%Rvm6+)#_D^{AtlsHS zqn2@5;3V8)SJbFPnCO}cL-5rsKQrJHOTWsFh{{*~?&AZ#5i)@H{nFJZvm{3n=h#6nGvdtdcaQWW0 zoonaXvDHPUHH8G+d#O#U|Il)lo}KpDp?IV#`U`obbh8jiP2OD<<36__DaqJ|-3;iSZ`KAe8l3)2vuu;R42q$m|nQ_gs zSNL4Z%7Hr7ogpf5iMVaRMnkRO7hCF7AOb7cQ)c8ZWE_9@f*>Mg`=$6wx2JFXQZ}=H z?`GYLgee+^cYIFjI&f^<)Z0JZzlV37alHmcbSdm6rR6jy8Xb6RP z1EeS!L`|a0`p|#|xfUFwke6AEghErnD9Xc1NZYarRxvNAv0T_keRJ-BvPpRq|ffjh%Btc=7j)g zyhly-Fz$EP=RcpHj&xUjUg!msSD;R0+%to(1Wt6N5~a4J2BH8v$boyUFiyHS1XFuEvr5?f<#92D(B7vBBl${hTsga z`0r}^K4QNssc5n+zAo20(){sj*}0M(oW-&^EDDl1k7e^%$fjC--0lT5!2sI;sI(Cb zZKeuxf!~mFOg?H8QT(j%pbj-*V~l(tS9uc&{~jPXj1J=i-7ErMs2?yo9dZw|12tM^ zp+20>yp%S@x&pxhAwaN2ESG9tCcCe@aSyL|)!smek2k}cSl?KymjhQv)0v2zfoe6| znTd3JszAHnQDgG-hDS|#nRyqFai<<*AJ14zIiz!WviNMEIXZfSYo?vHSX)vIZP)0D zfI4vm$7dds@DUY{8KK0cdK6k^KB!lX30!JBA_WBTdK8jQ^SkeOs8uzDx8;|d228vh zvI&pko;DT@7OQJKbdndgP#o)5E$V)70XstfJ?+_O|C{z~wEqn**l7E^MS`|j76sHG zkYE@M(>@WRlx4owxLh~ci7IA?$0wN_ZGLQ?bw4|{NS-z`wibYGTjP2s0T;|K?1C4j zIb{;7N6%qMVQM_Yg$?!qmpA--{j@jh6}O~=JlH(eyoqORR;-v$NFhOq@5MskB)_lFWhHjur6u?K%a*0JgHSs0qK@qJ~A#P8IW z+Ay9CBF^JkSfd30J=`yR=eIRZI!#4jU*cli5hUt;?^8oM2ER&N%}LL5tu zQxfo~i{sTR!|e&Xo~9rg0D&Avvjkt9BS?aGoCt)XYYiRrz~u|RgSBXE0NpY`W^(w(4bMyW6B%DX` zD<%Wj7IpRqDOB?Vc1BrG_t+tSuS8sROsK$k?vpFxiBKY;tQdHC zLNe(JND|PpCT$~WsW3d5G5U~}lD}a#lCn3bDRfwY%z;_?(Yq)#c8h%E- z9pPPV4H{0YV*Ps5-BzJ09X6es?w$56_xJsM&G&6v^DncEnYFIwwr`tV#nkWsHOeM) z`#I6FZPc-h|C7LO@{Oe+OJS#C?O>q@HlcOYz6tg)|$<%*!*#rph8+@F$inqG3ucOfRWd$ znqJr(msBS5ZFAS_v0Q}1ijq(K3aZk#m25Q}R?cF8Zp1o$kw!!}1in*c}}`DKHICq&r$QqD1p%+ty(LlqR7>o-8{sGdHpX+09bZ{5~=M@=j#< z!XyURO{y6gzBpVS4nUk;ivM4MRicLo|MV4LZd|C&@Ukr#`%EaBl28{yX=s_^H-gYqM#q0?DxUN$p^WQ>ORzHQp3NV_CsnM5N(1-J z4Hxxr0;Q-RkkEY&Spa4s)D#=aT^xInfe`%1zyc1+-W$v%pzFuVo)c848*4{C({EV8 z>q$W|zTE4G7GVc$uS^ZMEw0rI(-s*=R3GrX4!$y4lnN-`BF8G0!}F5-rSFC+gxPL{ z0yGG4>IUa;DS4q;kYO)@?TZjOy{=#HsU|#DdrAKwF1~1`dQ~1aS02^i-%0f`p)*o^ zO!$lxA74C2xJO?l9mjYE3B1w;Mhh6;G-Hg%AXK$lb^)@+iauO(T5L z6+B8pM+#6=_a-VU;kW!g%0>mul;0)v@~n;Qx*N6np&|zk!3VHXE^J&RBNho~u2Cix zMEQQ>o(*!fvuuwy>#7$KV5B(+fz!FEWHV;OEtACusscb#ud(LRI?*{g)@53cV52Qr z_W8I|vshhIIgTzn)IqR2Ol4NlZzofOAjX|K2sJ<5Z?~l7dNsj49NKnDL_D3st}eF6 zfmj@@no-e(pg5y)Q(Fh{mJnIW@etJw)`bd5aLvn#PLo!QD?1b?f(QWP3OdsuG^x!* zXxsLe9bnQFjM3qw?%-dSzyk@K?@o}!GrPm)$_`7#FbOh$R@3P~=q$g~fzYqeTq-O} zPC6Mq$jOYr8sua~U}e8jo!Sl^0CzeM7EY+va#RqET=5WSGB2Y}G)17Q-m_IMWs!wy zg7^?Q^QzTVtk+fKJLCbG$9i2wKkHD#$oBwd$3hWK{UvS#~RO(dXG^qt(el8PnoT05#1t3;c%Rl zLg9pW+FC+R3?b6pi}Gp`5I$+yy%1*=9Nl%krV}1#Rie0oVyEM*;A2tABzf4xv7!m? zMa`Y3KGI6YutrJl48Ql}oU11?5BR+fWtQUSGyf_5&)LRQIlkM6*4xIhyWz!1tvCisrLu69UN6L+PXzC5s+` z=FJCwB4SbsJ;C1Y{cGRY#iS?&MA@gQUXA4LS@o;Aqe2x`{W=VFs)l6+mrSqN%*V1O zsgHCTEzh8NTK7g?qj|&YX(VURNiCE$4+#Z9p=5{O-k#=(cu5v}C^9KoF<_ngvji0d z_ArQ-bu{BWr-q zINyQqj1Ry;$72y$>xPAa;naMb%lV?Ib(XabQfkWt*Cz6)vOqSDL%8Dt8kx9Zo=y8(#`*zjHahfC~yNf2laa#isA%Av<$f^@}JX!#lWaz81*^ z^|1l0h<3%vOUf7VR>xz?UXRfIhx8&ePc$X5HO%jMT!^B%jtl5=Ef;X;8ZLoRU2(p% z2PT}OuB(_I&M>96i?VA{D$u}Zn~rp#;j~7G7(Ofl5$DvJj=n2x2AFr}^67 zeu^V<&uFH$`hAb38KZvA-i(|F>bmB^PvYvzsY_c%vuQI29!oP+bdF|7FIXb@Ht&A_ zf6AI&XEZ~yUC*j}3_zozb2P(xo||#uOv5T$IchmJh*PpD&Ab2Pqfj1pmxZ7z%pH=M zq|QGp)$8@P<}j#k-cudG<~Py&Syc`NPm66jcWEU$cSA%|_Fq*~&4WLm@Pw-7@PzPS z6FNSIA+uu6F=VJU%nOx27;f_R`29ck>uEtG8aim+`BhfL7)17g3N((n0jn;H?`Dyg zEyUrUyHgR$`skgi-V@YjSiM*3!T#g^KEfle&SQ&29m6~9g8nlYO3sDd(Z!-xlkE;4 zTE4(YR#d-=iUETcJ7yG;3Ms-z>~pF%jwwu>3vG;=%UVw{)|PW36J)LICHK?$`SyyK zQ-$I-5BvzVi|U&91jnm_vpm@l`T+81^ypdL@YX3$%I_kSh){a#Ko08QcV+6}3cZ9- z*z>#YtUMkBzuVeD3Pu|IE^hrDzsqg#yC7%ccT6RK%|HWQCS0e(Xj4m>qY_HU? zoaJ|U+Vi_Ky*-QzS2xb;VW_(?ZE z_sbZM{lj++;Zaofzn>7@C>DLEnDuedhDn1AfvCFs{mwt>JJ9Q<_|8+PWaEgEqwPr^ z$i%P>uA_$asCBpY6Kb@w-KpyJ@%T+U^Gbmi5#zjl8JPGO9rbPmqUp0iVr&~#{F;Wr z;?`M@D>9!y*CJ42>YVrCoDLw8f>%HZVWj#netIrLy4MMEeF4_uvGlMpF#)sTFkD`U zPm^KwNtAo3Fm~i*OlFpO+z`+Ri_uCU_~1d-r}}+FI3=S}WKRMk^7#g8MvX42AwrSt z7Os9@GA|*dSpl3+PPlEA6vzq)vXaNXHCrXbzOjh zDLRP*!#OHkoUL$)0e2Om5O$fVVBe@%39Fhn@=yb(c~J#{qq!#4#Rv~a6A5?-edu5& zfLN9*?nx{Ol$xnXQLl6pv79ENav}ggOavg!yD3YcSrLM9b4J zXYQI+%3Z)J$Dwf~T61i}Noc}O;~(rQ z6n0P^b-_Fq%g4;^Fd1*s{IG9y^TKxHysSDeOvQ9wcr2k=nVFG`gC=8#J3bCiW$|$1n4) zY^MJFJEl7&#~=TOpiK}ZuZ3gBt|KvEO$9OF$x49a=$Nh`>NM-A_( z)p-5JPv6Rrw?9J?qFYPp?fMj!7iEROk+9AK=b{XF1Yr$W4jL^-JXlD@p*?f3B!7u- zhx4$M4klP)C`+)kB^MWhmaz2aJS=ImZ+HtV)3+?9t+4bP9=i(&OABm)rH|%e={NG= z%-Ix{ExpH16R?b*lA#34_=&_X#sSOtxiEg`D8+XpLk_0__6H$ctZuNmJ@pP!aj^3p zmV*1QMdGGC<#2SoDUZUEqx8)S5`8BL69WX4C#s4{V|llgqJN%=(l_x$AeqWmh((`z zN%GI{st2^MDVjoAFU_7o$;V!G zsI9uHg9cH9$PXQXM1Klp01JVdQ6PN<*(a@*_8c>Ilih4RkG(x7#>VQ!aCjdl05_{m z&7c-hNJxe=2^F)RE{=_nk)kH)1{insrsx&X$IVl^@5ItZl|-5c4Ie-|=T>{l1KIz*7~MZG_TkAu`&>^tdU^PY-$@ckR%;NPubU zUL40L6~O*PDRx8}vzfINY0PHU(y(7kU~>BKl`?Zp9^3RBJ`7WXrRQzu>Yb9cH%V5GF;&A4xyQ3R{zFT|v$#|8sKpDv+Lo?3g)lZmm zvMyqgR6pZLSjjqU2bE=N0CP6DB#XPJXFC|Qlq9eIFy$v-mvCgW7io%)1@p)MM)epdy5oO2{CB>32$R}r_EaK$Jn~n~i* z=xTguPrd4vFi}7uZk#M(=xxvbg`rfz>(lahU2Zu67_}AyQo{|H#XuZ*Hgd);gJR_^ zG~60W=%alMai#|WJ{cf}wozpTSk7$x#&X`j$fq@H9xd%&ojL`4^DWh#(B()!x~5(v z99(^Yqtaccv+BK=YZ7b9rE;b1&}Lc}2Qt!n=@8D{TJxcs|9h8j`f#oJKzyq9v|yUX z>?}~u%bEdce7rm4yrvac+j`oHmOQ;G?pF{_W!X05^|d<6v#wNsgMJmZnR6%UOKS)F z4)6C7!sDEo&5SbM95C6$rc7h_MB(sIuX1dgG!#_{h8^U~d*~&bE{CM?fRc)w&Aro6 z1J2+9;khwPnHeYW7=^p`X?FoaUSxfcSA@F9rMOJk1B5@FJqVVgK@EWrHb8@25u)su z3$m3({28)~E+{}Hi$wtajb8&1m0?OpCEj8m?-0~N#ca|E9Q z6X`UZaEy2jS|`802%$i*3xF)93Y{Y#gcSiEE{SI`1*CWgcQ9}b|FYJ{2gtVMK_`FO zE!2E?#3tRiG&{g$DIFe{5`0J`3TSZif!`ws#UEkFQ8am6b>yjndr}3cVuc|3amWWl zS_q$+L`|wM%ICsp0V=namYxAs;aS8?j6Yt$ACn`F)80Al8qcZ2d;`WI^D;`@m^Bgj z`_BA&^z#B&4`$|rf4qVS^$+P9|H7m&eOLq^lrTH}mFYwjaw>_$QZ)nDXSjzR{i2JhsaN6)1w8@l-mc!*BI z*HLZZH)$el8Gv;j&h#imV!#R=)5DoN)Ek@u*B4~|@NfpRv+?g2T>xc5;Noy2Y!4TJ zv_UTZ_aSAP=<@6V)`OJQ@Nsd%+J;?#m$fTofM-`pA>1=7V`^;d|vJg2+lWEYspE?1t~cTwRAs2MKvf72WIAH z%>{CjHIcaVv*rSk+U7UtvUHT1V+maz!$rks&`LavH;?{DuTpy^_mY9P!*9SQ;B7VfJ3LZ=Sa72b|m+PaA zB#N!V!f@JYxXBG4$q>p*1v9xm5JNs3@s|@rBd-^1ZHYLL8vj6A;SLSeo59!tn?!Zb_AGJFHFC}~cqMXIpGgvhLffg=w z?F%i-VlYv?#qJv!JJ=eNsgvX##{F!cvg34{vLowfIOca5L^KGO9}!7=qx*{*N?C6qlSU@s&W-^WdDKp=tA)6-ONMjP2nB^Xb zK@ql3zQJ70B;V-g$`~tD@6MGmR5Q3RL&gFZX2@7;>}p#}BWdRf@PY;`4MK;fb9H5# zZlfE=G{Z(WH}m6Yfzu7=(KBoaLYNt-LkK))gfXom4*f=NOB=z<#LUA5Ol@gDdSSk+ z)wry{xX9>XWe)a`#Tnu)p3bb%W!~u0^pLvH{Mhx)laDnoJkfmrsZ%*jGBrmD*b~g& z09Mf$DH#+{B80C*J_CPH4~sGvWj{Fp_*{RAZJ*4s?C9nJ&Fq4r5eTC^sK~Zd{Y?7Y z)ou4=QYCqT2GuKJnUv=)GhAr;p26nrM0zsJq-7OnUM}}nrPu;F;d;`x&VgojvCH9t^*Ap5Cf@lrG{WH8Gabf)FvqW zuyqxO!I4zGx}D%sFo#uN5gk$UFjLi=(HTnq^T4cn`J(KO0cGjU!{tW7T<4TsuD-ky z{H*@z7-a(<)$4QZ1J?+Bm~CNgB8M)!2yoqB9F9{7Gj@>l$)$CE1L59^S4|GngKWNl zoe?N22ocUHQ~)*gVKRf)0NT+pj)9>PFS84>}=aQY4EV5!jAtGQ!p{V>27jo5?^!{RQQ6L=TH>mPu<8ry;M8AYneRxkO z+949?MC1&|EW4%A9S(yIc+|@`ASC?IH}^u+xmQ#a*V2@2vHWu4s{iY?QGTW@6o}IIiFg2w`_XeH;ek62*_ zbih9s5iqs$4JZoaAr)`UQ)iWg&~~=f|K1bkxwu}mD|s;*3qFPTO-S4$HLOm z(y$;e4b%FB=HVYkdy#be>im&d2fDti*{^q1p8!rOhF6Y719(8Dz%C^nrpj4j>;c4g9kwK)H6M+y6kbGpB@|zpkp&I1qJv4FBwMy3HK1Hn)pDe>x%1@Y)>xgH*t{eNA7LhYVz40HT9_dQo+>3_$DNnC zY>7eCSPwd4uwcS!^o!sfL$c1Bnak)WJc6$9JQfl7gHj@QZF75Z9UhAtCZbps-`XZN z*1=S~eNO6+=54*cl}toe*hWLx4oMa_zaSIKK_+s^1Wl~qfyrgW+;G{8%Oyi)ZpbXf zQDqA?=cN4)Tvjj5Uf{)8qnNkr_{9WW+foZ4q#~Kq=OFtRiUHh0E!c#i7T^UKI!i6` z`obA%5qQG}9MnRqYrVUr7G`0dQVTG6RG%-k;BE=ePVXo#wLot^LoKYa-rZ7*TnVA0 z7IH;n7pPNm9u$0MD3tjPWoBA{D+?8_RAP~w#@Z*Q?d3m+1#)8I0~jaXv@Nl~y-MC% z=>lj5_Z18ulLwVylVTARd=SK9xh_%_m$Q7(n8Wa-&ly?9$Mk`MtZ(2rB^CgAJrRqT znWv_iVY-|duxD;X;l3!*=vPS)4OajO=;~clqOl;IglO#GRed(1(ej5l61YXm5o*?D zoZ2TLedaW1sQ_p;nB?eh!SD{jrACCy?0tYIKQ5Rp^^v)J7L;{w9yqT1xTQ%k0SztHqcvUfYQ6O zMnL$|2nap(S(O*?-ox)+s$0W! z2y`XBafIF3tBYLswsr36)~#;2Hg1E(J&|GEw$3GDzIZoV;o3I+yTH}mM?kzxY3}6=l(bmoYa>5fB}Q&&Mm+P0uA}0Mr=~5Pct01Ozqi6tkxh5P>@C zxLXw8uEs!cYK#bow#Kozt%U;I-YxPLKD@ z$v@O~dS9}g-UoLwwVftQ_tbXU{YK3_WA}#Z#bm8%XlnoJeyeMQM5p)PB(_sJ!*20) zoRbg^T6#!tb2LIfNLU!a6J~}41jMlxJgsqP-fo)gqun_OFKV)S>p2Ko1wU57U`QldKlecg+ZajH7^g;KXA*iWZD_S65r*kd^@%{_MX zIL{)Q-D5|SIDTl<9X~W(`Tw%V#@RyKc_yXx9Dz_%&THE}_TGQ$J@)hSd#o4&4G9cs z4-;a>&p1rzAG*hKj5>`xzC9L-_4WE8b@X(8s|w$fZ?`vRAfHZYPN+XKR zHqHF8LpQ+i+*8NwhYwCv7{bnFBQ{RxC_LGmY z(|)u_hhd|6Sj4)6>-G}zIhPT-ErE((3LV7$Qhg%Kx*iCuMQ@`}j@Ed(&dhRoqNyx; zJ!yg2plJTvqZp?M1~TE+b8f)?k%#F-iFz5|8^k9z*=O&G9K^v#@j{=8JAaX6qOZet z1=oZQcDH_Vi0Sr(wlqzQs=IlB;UX;Q-l>Sg)(5LKDH?*M_DnG3&;a)fbaT9Vg09}D|AG?H~MZEuTIXn8z=M> zsFI8i&2D0hu@xP;{gc^s8jZsIj1q(MP64XnmE`2eQh`&GMa#Y7Wg-eV=22ea=X zY?h?FxBdXhtlDsrk`xb41#hoEp2}@0QD~FGSaIZ$5C6{7pIa{`p9A`_c;pYV=h2PD zx2624IN1|V6Posv1zo#pt+~Z%g84jQvNKX9SC1KjJx`)OqP>9$E@Ulfb8q!( zmIU2<(EiO-3h40Ycvj6wsf$tIAb^onzYZX`-)`s|7X7u0=~Uvb89-2dA>t7Ip21st zc!7<7y~xYi2v3&BDUG#E7GqU$%>$3y^LlEK-f+}Yd4pCz9`3q{({Y$d!mIeTa8vW` z#0>giM?6@WK3K(aMt=>KY>Mu4-aoMI=c`Sy8&Nv%N>lymDBToBt*SujnnQh+{CseO zBdy$V&6H`h4}$)>G=PCz`9=~3u9coO8$|$Z%01_&sTwUgS##U1oW$}c0b~%`VyTJ} zl$r_0Y$6~tZ+)^ll9#TMPVKup7Bhn72Mdcv;NU9r+a#X2BKaEFt1E7RdPqhuZ?DnN z75uR9TeJ`P%|=%J6{>Xp+<1;x=%o9%T`QO0fK3|1WvWh+kSb)j&~~UPv^4`TH#>4W zV$@#g*{``j+f!g!Z{(;sv6_r?(X*MV3SbtMsZ!m(GFm;eGLWKri?JVX8Qz%sKK<=L z#-B9kkMJ`Pdw;pE`>HyIfdgd9fLhK|{VMdJ{aO*{Uww!in&oLO` za8WNm*KA6?& zU>=@zg6C*EcwQ?!4?PBWqMCQS)pK>DwWNBx&(2C+Fgn_gHGUh(55eZM}>dgq^YFkd?00 zyxC!OZQCR^r!%d0>i)b)X%9M5k&^}?fN*IB$n~2^X+>Gok5Y7KQMa;l6a~W8N^~W@ z7zw=N51KI`p(uP*vm9A4vIZto_dG3Nxu#ER6l&EoS*fxEhIkF8BKg>K%l{nk@(Q?Kl-(zDAPe}V5e?x;s2Gevin;X zI|?>==Eij7IT8d&?qA`TM; zEg+irMI!XPdEZ~3&Z;*7BN$T#%4LY$F5O3f;umOnLdzZS@Q#dXA~1KX2fmyu-Z^1>XB?#e%7eH3_km|j|Zf3V$b*p@!l$&eaozI9a zAg(Geir{QX$?qsqZ~-i*NU>NBh6{_MB}DX7ylgg`hb;5)MbH$hAV|>MpN4J}0(igd z**qK@v1G0poNh-($CJ_`4gq(Z1SkX!#jS|}TyH#$vk(yVxphO-HMonz`E1JxJdpKA za)=_Z#k-k;;!3CvpLz02H-2}O^+4*ppr<9G32D`BEN)Y#b#F;GPpbFd9g@M`cd&!G z0FLq|pgM?WHJ7`4aW;;Oxa^X0(^)t~^C3{CofDqZZYe8TtlabfV|wyLsftG1>U2ud z%}Y-)s2C>SlwF7j-$hJQ9Ba@zUxd)v)k?kAs#vOzZUpzg{U<--wA{xfO-mG7PqJ$( z?OLzG8Lg%MIo1dCNFINv*QgwZ>rXT|MgakxKu4Kj=zmje6itY8Nc}Os<_~|>qhb&; zJ|we%3QI@az)X}v8Y6m0AdkaBoBHFA(l=`2aoCLyH~o+rDD9Dh($fCJh$${>KK$eE z!&;xu_>ifB_M{IvIak+7>(Gyo7sLyYL*$b3ARjNGdwB*#h=tu`S6-UY&3bf61`z?A zS$0Y0_6Z3uNuCYY`_unM%9?a;gf1kEWlz6?$nI4H*Ndi2fh-?!z>hG(e6Vy_p*Us>%>4cN6WlZ}K* zbdgYCz=qs%tJqXIiLA2p@eoH<%Lj^O!WnT={bGoKcXro zYMb+!{|Lr7bNCL9xNX#KUJ&NFQv=o*QK?U_*ozM#KJ#kP9{tpShXZ5QYBEU#7M*cw zfFUGQNOCAo4dAj&8(dZaF&Ux&VIRb9$oKuAi-7Na=JhTkmM9}a06Nkty6as*Pgp0r zBqNdvr-ylI@R?t2I-mK~@R`@$ed;rhVTPE%h3X5fh1QS|@BSmwf_!jwoA1B#c3)#q$=hAa2FBee4%!!o{g*OB@GMfL+1 zr3Y#z-(TpWIp5Onl+>TtAhMrZ>^%HZ@zT_#UGvUv%AJSaY&Qp&$p`MB5YQFO6BB|* z7(iXojiZzE$)w#yTkWXNKQ?I#@6@$dx0T8Hb~hEifWqgu=(j@$`Mxk-yV~F$TjAQm zIN%zM(AKil8hS_3@c_-%f9+zOOzh?;3fIv<3V()b^D^ZaEP` ztN?#w)g~jc(2C#3Cub1Zb5L@<3cfp49tkUC>9DAc9d;2|yQ7@w7N( zVR+MPpuM1{i?j_MSfgfCIN}g#PTB#_2M??Tz*`(@VFs<70(Ny~M5%B%DALeKA}MDM z4tW8G+KluZ@{;$%%a~0>y?(LOGyd3wBUit#HP4NVA_r7Ak(()2;xd;jH5+NEy zPGW3-Y@#Z>*o3v=l?iXlgtujLnsl^o?PcI?VL82`&H9>2QaO6+`Xnq5!f$*4z=onb{spKg9A(d01ifc|cosB;14w`sYl+zQCNt zovg`a`oU-2_sk(+;8?I@8?Z$3Z7@sQWB?umyf|9-l%`rlED8<4$yU#?K$uqZ)-RyY zeG75U&BDo`*?I7U>~HXbY&LQjXmw~|>54cwGuPTa3@O=-B>j^KBE>cn*=CVuV2G}$ zw?2rbfHCq1%WOL`9))Fg6nq3Drd%Z?9XF9@T*-uW+y%AMUQ})EnB$g`)pra-Z z8WWtEp(u*tkFG9ihI(>MMUG3Ao(lGJEIaDPU9F^*AQAxrOk03W3oxKg8%Cy`M9=~R zQ5toR00l%NXeB5_2}(yK^ZBl|&$;K^d!O{=I6yObvCg^Y?6ZHYz4qGc_fGwJz%%l7 zf}lcNAZk(cY;A7-pVcQxVJD#V|2%OsfMZ@5r~1-3wM`G6`A>-QZ5=-t(|A(+yngFo zM0joe{%QU0Rj0b``}5z7if_;xKWC1!uq1`*pH?{0ZPQ4)kNj3W1N}*{XIcLw$Zrz! z6$D6&6rqfWLP{h`@h68ruCo;{fb#O;;37v0#>W552=1~lh50m!B&O=@gy{BrBPF(= zA#qIb{45_Jivq!$k_2LXQ4f0bz{pUokNVUYMASoW(k{+@h5^TDIsiJgoGE{*tL7K* z8x2rfg9e^|lI$q|)PLj!T{4F8qyHL^CKX5lp}_e9tSEv6(?GG!!qA?<37z&7V=vYAd5I*x`MmLdEz&?w|KBK&rB7m~bP#+m|{0K`;#@*2^K)-xG zf{vL{~gXOtQ!e=dpJvJ6!8(x~M0#PB2FiodkQ8)4Sg9GRO% zl4+Z%|NcgPvrbW*y(!u*5;`Zc0RSMTgGiJ@DhoJyiJ6^>DAGw|CDLM5f=DZCCy4le zSW+P--G={P=n(9Cq?K(H(Ge{S;>FZXftW@j+x;I);(6SOSb9SUqxOU?DBKY@fXGnD zeQeSH1hft9{H_I-*q~P;vab0; z&=PiVB531FAk%YxgSz<`iE7PQrpQ4V@VHDC4#5StWhGK2}O^x>^>2mt6LTsC60< z+dB0@K5i#n{-nk(I}+OjKwxjuiyKOy$|s2gD#2I!6KXKNmWz0GbApzS(8RfQ)c&|B zU&(s}Y^66Cb{9c5W+3Nq8F6&*bE*=C3Q1m(I_2!TUPB6nakR+ozYbEUoRqrRhh~V~)@_el z3&ECC1W9!4LB25k&^hb+tqIH(6hS^)-RxhXsYgRnW+G$&!`_(WpmRJlUksExiJdZ3 z=r@OM%@^Dta`{D;=lEjv+N(7W+ll1Cl?nxkwb5xAblWUnLb#Q^lX4E zlFsrl6um_TQ%V6P1U=)|4Qf1CQ$2o}#f*e(X zdJ+{loh^(qhzeE}Ppw=K6~fq2Qxx^oC@+qS2536q*EaLs4#-;v13j2!zM+sT?;9Q4HU|c2oZzuAs8?`9Rt(3W zTeN~$Pt=wPizs&sbP$9w*%L*vFlYgp4#fo+G|LRkWk1(9VR9w_j8q9Qo?djlFo;sZ zpp9NsA^97tq99vU6bw>PFzALw!5|d{gF**P^sQ<|VPWyNA`KFfSvMe3U16ccB+;4^ zG8;0dcV?L*0G+O?=gc0Dtx8Ce&PZcZ63JEJQg1=zlMUGrNt&T{-glX^7pjt608?N! zDy^pg9S|viKqN4X$0W{bJP<*RM_+{RwG{e!-w=tu#MvJsWJ6S8vbey7Fnu9=mc+p& zum#>@3zwIF{v{rOKAv$?=u@2HnVtXl(JGNQT5Fdy+bl1Xw=D^aGOGqHHs+#{vKr4- z?1rY8-%@w7>Tc~`mabrZc zU2;VBk}~8)7YhW#>ZRTsqnwvP^kN4VQ^&iAM>KDbM2_6Gf*@zHU@Z%FWfrWSuFwd^PUPVP z(dkEK9as_?dP7D?yG)9_*Y!KG>TOQAlJkwy+gWN4BRR7fD^nu(OWL)W6> zy&0UGCRglA|LKI}dI5Ut-%4=X9CbHJmLE zD#KqJd@(Hr?2+Ei?HbOPZ^KT9DOVW*rAaWe>$?l01Ypqkw9q~K*MrKHO*>E{KVzFF zO>b)kMNtebU!jzgLK=k%Fh{${q_0(s$Zo%Q}U zG9XMXSK{CukBlYDdYoO*IS?|cBLCXZwyN)t1yWM)DE~C%&6ujcA_L~K9GfK7@%4VU z+?K|@ZqxHzoFwbdz0J|kZ6^aP8M9;t17nIe$QAyHm_esnsvMTYx{)a`Yd~^`pnR9L=Z}$;F$w?KtP=^!kp5msx+GP&!qY?WYLW3 z<`H(0+OhDCOONgm8nL}d%_V^qLdE6-dlu=^XJ6{?BFBX!4IH)f3}UN`G@t~W=mqrM zGf7epdNXaDvf4jNrzs;AUlq$i4v(8eBNz z-7zR>V9=+N#<@>Z9NV?OX+bXZ5dY2Z20+HepZwRCq}Te{zFcg;WEd2IoNO6-p^@Up za*_M&d@S#qdXWQ{^sN_J;a)``?kXbJd)0DOMYP>BLPaq8smQTV1Qw*; z&^Z;E^&+Q25sm521ij0Bynu-JvUkXLWKz#5QC=x)tk9##V2I6BX z5#V}E(UUQzjiIvDP2t*521%O<%gri-QW!PNBb}mRK^Mu++xPGMYV^cTP6FG1 z;K+%U_))lg83ynMO`hEYL>Xu{VEsc;&EGUmcBDJlJ-gcEhX|-o4wIdaJ((w?I)31Z zojO{~DtzpTK|=XN&ZjU{aBg|>e?MEKdr{BiojuUczSvHl?u>sRPbdw**;<=56lUpx z!4XZaeU8#4*%|$BI`)vm$alt1J@F1oNVvc(fx}hDMldk_zSV&}cKI%-Tl8&|n>CA- zWfQ44XY~&tau95{1c?3WpM1rtuRRRu6|26oOOPFA4iU@FRcbHuuaVOQ zda6&{SmgzgmdXo=3!lvCLUrME(Px5JS9xWhHL-{EQp`QrG&kXNLA0hSv_yrNprr#t zx^}@dI9-&&qtXX{Olg|gW94+g-blcwE-pjbmT#(WM7*zA-SxSk?y}S~+U6JXt}b1e z0I3Uf-;>kD99#QB>2wiSDF)eyt@xYcQr{(>q2^@4TEk90UE3u)xvO~a8W~8-!B#cH}eBT1!b(6@3&HY8^iqF1yT5-}lzhRLsNoz;Vw_)l@hjW&r}6QbX5e zotA3_RjMv^96gs#%d6?SRI1c<$z@DHF%^Z>wK&WK*NRX_KrgEbT4eAIDvAIjTq`t^ znJ^MF^{aI+>zzR1hK6V`FM`HBmo+Q9J}>qd6tC>yV6(JbP*6Vwx7G#dS#KTCN__;%p!(H?#FhYQu)#JE#!J_nhTuBWP;Pmr zM;b~NkTjG$wkn&-Efp@6TeC*_0_M1K%T6|#HBz8%1?862$WviXsoV;nLb;`(I|98O zsgp2weHqkR;Y;&9n{mw11-b@j|0-#>J{0l*xP~U#p+A%qXbfPOP$;l9M%gbRNy?JW zBTN(otfYuUKuC}*(<#X&KlREC2WI+;i#mP*H(kNKGYBsFLMMz$*S7zlgZ9R35i^Z$ZE zfR0P^#uZt~-WD(F-M^cqb-a9C+p-P~4}Z_;jp=j5fnGbuuS+y&Cn2VfvQ+~aF_rW+ zdw*)+VGy!pmQG0A0$tB`z?0 zxke?vFWUK9dk0kLV&#nv7)@_r&JuKRDT?on*oF~9^rI!qJ&$QguI`|WF@QV&N9r;K z%#FW5kp;`>U%>jVp^e%XK85fF41&Rb=fLM&o7}C6W6MpK(%(H#MQ*6Thxi)PSq%>QgD|w2zAjm&^ z3Ta;W&6&8R+XHh5dKafZj@!$pWCJa(EUKre7!}~=b2xF(~!C^yM5#}m+gej!ciip~tFol}-R&f<48GoQo zWFOHIb9a<0-71ww&z-8pp_^eJ)Tyl* z$3||^F?uj)0a%oiku_tLTQhjPSIwXU5<+VL*?Vmic2L-6Gnju$w963*Jx-pKRSY2{mXt$ zHmC9yi2%VBa#Zt{VyqxQE&vE3LcHuP7C~?0x=%jye8J#68A(!XdIJdk$>M}QMv;6@EzS}$`VnKC5+wCKA@`Gu4dw2GIe9P*} zew7+U+{%s|eD9gik$5}HG%bFc9^M6oOVQ(L*4PF#n^g}n=$@YCrw^6&Pltd8JzgQ1qwVv z;sLt=3a)E1Mk$jB6>Af7;0gpn0KHlP0NH1?A!*IqFYOjoBp!{yiEJ3wM9`c81e~o@ zCMouGLu;5<>9~5ul`HBc`<}TVQUUBs>3}E-ZpbD-{|b0kdymBrPIme~Ev<)bP&o9+ zg%5QH%PKDZD9V1W!+1n68xO!iX@j$u5vlMp(Lp?l1cL~$q+534pykC$i%&;nnThul zcMz${cwQ=hKBzsrxKo?5;IZ?u|5YJ5+{EvJh~iGgnlzz08N7o4hEvV6E*W! z*FCZGn;(UDXcLI4JFZW?XUN9KTElMK{jTTjmFi@ROEaW;tssaaAGMz6q}3;MsA}hX z0%&a)Rr9u-6_Zi>u~AOXVwk`M)2yl0PSf^8h+q2V6v;B;W3y_m1UEI)z( zZacAMAZEvrc`EPdz)ThzW2LU`hkxC!uSZc3DJ>iR$SndtlyX znxJVi9MIdgdMl$A>R4KFWd@7Y;_Z?ugOM;P(T)>mA9rpC9N}29z_(zmft(lbbi{Z} zJz#&5B}r;O|L&X^J^QNUc9=SR?kt8Q`yO;ZZ$t}YdrZ%DQmt=hEru{(Q!!$)Qwd>y@1)yk{1OYxW3?!H>1)$Zen(13LHNmX;7wu%GLa?q#mB>E=7Bz_c zC+Us^+%+H-G3d=NCOLw0;zFt(VKa9vu%8P`BLJ!Sgg9vj(=+X}stZ7h*02pjAoSlZ zR3oCMa4VEvK%CiZg$VRPkX-it9&drmaAFty%GR3T~vhcoU64 z{}5@1g%j)*L5O$L)=SYYENTzKfPC3@6DwV;s2kyx#=RnR1Tg9=LugUS0BD%gAz->6 zv@tL&>wpjSk98>N%6BN-8H%UB^iou8D~@xq&|UC?*`cc~&4FNI`F2{_=jdqm8=bb{ zxIqyN)8RK@9AT%qogbswh3ea2hA`XushOBTatyEX)F;T@#1$MKX=e~fceNhFd-&xD z#=V?M5TKe#Du%RiE|XXlyMJJ@4~qvYqs5EMgVfv>-K3mWFIzGIej<;eGNX(%XQC9s zB-sJaU1iW7YMw_x^OAmlbY=(_z_9qRxTYtkWzQ1!>Nr9`7$ozq(}I7QyrL8_HtgRz#Au1#;iYtVMCBYtw>?RCh1qunMevUULJEG$U zW%OJtE38XT5TTA~c@^>}Mp6{zC)8c#BynWu>4cpM{B5 z2n?;kOp%&-gS|nUZ82|t65@dH%HcP*^3wM{-WH(-0A=kvwsr8e^7OSK@RcM-Rtmj` zP2|D`e-{@9Ds2Me+R6p`v)L31>g|1YYAa)+wK52weGykdbxE>j1Rl^4>r&Yp$MWN= zQS{iUXp#a2>J=%dC_4KvYc@f_COaI^F|vMl1hKd~N&`t}Nkh_wr$juU4;V1o{CHXs-GXVx1Oo8;$~;l7P{BghsMQ9`@sKB~7zQ7TI1o z1L>~EopElf(&v8*eWpX!zSHO58PR8COc{f~AL;pxS9>l+767d;;U~#vB_v9Qm`_O-0(USw*Jf$Z`xj8FE-eGPC;2`?~nH@i`C&&2e^E2K@ z{ae^%9Z7~s(bl#b7wrcZ7h0`2NdYoJTr9RY`%{QV_TTjTSc2+EHR{0LIQygO1*i08 z@0$}BZy$NHD*d4ls&kb4&--SeS_d&e!uF^&92F;c`6q0=*+-bQ?1zJ50Gxjftdn;6v=gNpZ>9Z(1-^{CmUSXVAs!$eGnJfAI}n*t9DfxbeOM|MJfKs_Pd z()i1VM^w2kf_d_vqGE7-L{P+)roO zFB<+i|04N^#Y`NT&P?q4Wt>ZH%uMuuFsZvM88cw2kJ}njrb_49P zM5kOWzbV&{-;`JN%zRNJ$0-geqm-r!xRAs8ne2prU=hXPjQKJf` zu`*?5K5<$+!eUXx{cMMRGO8`Y6Z1&P)<$=XoSDgiTi4<3!nTiSH)`r=W&4U+dj;g^Iw@=Mox+{pTMY&Y`V(mb&Ih znhXv>@2Tto9-y&eTQmyskc=0QK=?vwZd=;wq;Zt309w(JPSBJ?&T=3N7x9234+Xp= zekk}UfwAO2k@Us|kx87g<-evx_HoOK-Gde)#~59v5R56~OSAtv%X4#5fR(KZM_w2< z6~aYbm`P!7nH3`HHA|$v7PFfYq=uIZZZZ}eOAv{1!iH)R%FM>cbx!0>XEuYACOoCznB~qkJ{qd4;vL_AzZxg4S8cXtrq5Q&Y|Vz*ntgWI8=I|}Fk3Sdvz2$N z*#d+z@oZYozG5R90l>7z4gi5J0Km?et^>f-YykjLvy}k&nYy=H2)!0f0-v;(f;xh6 zQf$?h1}S4f?bO>$3ikxvvI!rcU=<6HC`Xv_?6RRzK3LP1D86O6xI$u1?v|Fb??D`r z3RqIr(4=E&RY|^sc#*N1(O1}0mIjImh>t=CVCKs9RgI}}Rn){{1B3Olc>I??72O?4 z;*!x4YFV_hkM@VLv`+X6XMc&N0h~dHXI3q5jgF`aIGvSGac5hi4cT3FSDG~L|A)lw zGr@L>YOy8K262N&6>XL6QahPwd)|I?oa^BxbSGTqz$B+IsWeNPSXqU!@<<&5)rM)w zo&--+O?PAhMQ6gt#j#&Pf^L{VsWStCCEw5#6Q&<1_GO(VmNqF=X`KBb92ZrBzmnN? z%rN@`HEQ0oZ-6^ZscnFJ4z%Q5#ARSX}!>9&9g;ln=xqYQV>TAq@D-aS}gj zDSqqQDkw`%|7vGN;cYu>ELhYu>v#V{VKx_Aa{_b4&UHsG9 zKS*RrsBNcKhi|8mZ>QI-yuOj%Y~7=c^vQ(5$8by#p-7n|HUqpom+;7%B<@9`sdp_sxzWw`Dk~V_(!nSDh*RO@%&KN}NL%8|}liCht<`B7N zpe$lDl%VTG5Z!8ap_Q;4WgbzwVWZwS8xJUMGg~ z^CDq!@^0Uc+B>*A>|I(YWe(81BcOIhK;^ass%}R>?bLwUsR6Z90hOu@s4yr1)pIV; zV6=XF#F`Y9(DtxR`3G573gj|&)8yuVo{(ZxBQlbqVMU_*mLgN^4(QVLJjp{X-l+JK zXHV#TfnD7g*&^1r$jZdpfL*kN+uaDefJ4A8-Uz!`R(R`hz$qEMK()@UVZ!PL)AVCE z&Sv83W*+1jc&PqREz6XCLpJDu7#VHVaCF#Z^F19jibIPKK?P#AT|&*e&{gf7e`MV03({Qk@|Y;A@Jc_9w~80_xshx8J?J>;cT1kA zew~ewPYnQrYEyTV{T`Mb3EMD9bVa*^U<|VBzzXh!sEm)I2weD+)s@RkZkzLj%0@iDJ9D1je?U!*b*saIxWw)UC8s@NV(lepsf@y=p~9( z4xCYiEwqbE}jsUZ=W`Q|JCHES2`$q+Os`XuLOP0bM22*V>0niRGDLgPXr4B?-H#O7+JxEIffX^Y|Z#&8J2HODr=6YlvcQjLs4O- zXVCZgKq$2kpeAYdK2~OF5jXRtWQL~58RW@byZ7Az7 zB`UKvBtu&WRt@b7vGtt(z3>7{{9h{31p5OnVk`iyB-LtUZnRy{eJAYY2;w)IXPxv0 zM#zsRbtQ_pn);vEsc5Kw0RKV3!ni@aPb z@4OBt#d@!P>zy7W;miA|$8~vARGJFMLIXpR{<~dVSBRutrIJ z2f0_Tg2JWj)d>{|O&$wH5P|EpoUPSz(u=50!>(U$l_x!oxbYF}WP*uy-thy&nVs$L z0>NjV6$IO@s2!4+f6TlPfP%IQQeGMNot?6DE_$?MclE@yu;qCJsby0_G-70i=uV_H zIN|j$28HxJdB3X)WFaEYuaxH+;N8)m%4!9o9VHu$l^XQeCBiBZ0X?f!S)iWWWrF}| z`-Jg4+Aa_t+Sy54L`|Nj_k7+#;GQvon-zlnZ01=?HcRPoCwmqm#Nr9u666DsMccHF zdQfLU03N~uiN?!T2khZUjOI(>rkBpHj9xmsf`&&GFz_3e0V1v9jWy;bH*=Ko#ruM8 z)$_&k&ho`eq8YHr-ANOE5SXj$U}XSvIj<_oys8z$n=j183$lPpr053n%qlO9pgozp zc+3CZ&E{*&(%sPzRz`ZCp)~YA1@vTyLp~yu9Zj^_{2#c)uaEOL$4k1~mXKgO7x~y~ zeum>X3M6HLjAa)4xkH8%!nxZq(JBQOlZ1H}x_m=jS0Q7=;rChqJZZ2Gzn z`<<%~`<}*@Qy+NVWtv$`+w8<|LDd3%e^%b_z$u@@;k6fkwg>X>kG) zjl$=d-=e8QxagsFBJV06@jf^;Z{ibB68$W%<&6#LQq(=(J-hi{sSO}Zp{DGJ+3>a! zPF8#i(HN9teXH;~X$UN!V2&^Fu366e*`Mi4XhnzR;lvRtM7nk3V9}*3kSOJy_IQd` zsZZ@AB|Z%wk#H0$EbQp`$`$FCjZc*?R5e%r+P0yBh`sE0(Tb2)Us}^mT;}DhYf#Je z8byV8OH_J;)WOi+8u`w_Q(!eKR)7=eX+n-MJwb!(rXllbzFsyu)2{+OmXxAKI@ur2 zii^^4XWx2C8T7nT!Ff@nJ$hd}hD`o}(jTp;d~f z{z&lz`b!UUMhMhUJc*Vv8$BcrzUr8Prg5gxG4w$Sqx{qZ>23}*?53^lefsw?O_3rOJetVa8Zy!qhi|21Zq|; z9mMGN5HY%wPc~xvN^%Zk7=mlZ{jwo)9Whw$C3kn&> z--VW#G+PKjF$;iN?-y(^?Yjpof-&M}j&o`$c)~hpa%EW$*7C^P>aa}cUTu0~fN=PO zjKMM47A#q{trkv01`wzlM+Gz%{UXIkE374a+9q=Ma|h>^{edxdkw%~ftwW5XMcu4y zDk~1s-Rv*%^3z0!rb!UU)9c?bdy<`!GD#0#hrHsVe01Y*AUPTG`IGy4=?d{7Y&rr=J- zB+&(RnoboLbi|mG2Ybp;sVw4RoLK4t&OQt*kK*qgv{eL-@Sf>L1^tIXg97m+@I`tV zx&vdI65S5xIwb(UExZL^w?z@dZa+Cp72lq&8s83{@I`9JD=D3M>H+F_pmz5RXNyN3 zTF!n-$zM}NxTjA9sT1<3c=dYVIiO^6!Ev#G`Z}x!xg<~vp$ZVxK~l)4L>{^^Pzcs0 zxix^1X{m(9@Z0CU4ub`J9&tAXW*2ZRxDqB8KRU<|S@I7iB@d0L3z z`WnO-A%!&@J!?eXrY?xw9etPuik~^~zLr9Vp+sTjui$(N*~{^3=H<~ZAq{=#-h`xjF>(J}LI!GPsTnq;O zdD?(k7h1_(Tk85}9$!512*XU6fK@in3>OFMolJ6ig7zsh^;!7nMo?caz~tA71w!rb zj6ldY%P+CxG=#}kK7Np~8EHVZWwCLy`cdreExHeJt2M%dy*NuzB4)oSh%vP?x;(I$ z{XVmePaf7vD+GJ<+mBe6IDL5JNv+F_Qzee0b>wuwO-}72z}w*hi%rB6wSAa0?4-$ z{VgGj^l3(I0#GFwxJ?V?wkHO+Svzbn0ACc^U_tK%4j9$!MMNOckdI<&$He})(8{Gj zQ%gRBwh%??a(IDz#br0sJHS~$ZJkFT8DXO{7!t@8{kH+kF`RzWLeW_Ps-7b>XD&P4L^zVJ<+@o?4wm7sHJhKWo3?gz33XU|7#* z)+JU_Yq$3WWZs?MW_Dk4+zJru^7Yn9-!52+ZyBck#h4T)wT>T$SLf+{z+Y?{ zOp`ulkI=`O6}9@79LEVghiB1qom;Q`qf!4rWe-O@Fh+$>5OY1&7AUe~vbhD7fz)5a zwoo)O-j<8&No+=fzN z5c*CBc%hBi^aWpvmE}wWz^JlCdFTnw;(zHL6pBD&GaE_gen(s=jj|82Zp~9feUq!c zeCDqG8%+5}_0<_RDl;3$b#hcIy^o~iIQwv$4JHv%Ac%R8T~b{Ak_XvgWYzf;D&RqO;>zxh zq&i#W%a#9j-7l5E(LZI|9cy&|DxW$xX8X0mm-xOGYnu2fOZy*8IKWc~tG|NrJNhRU zk!K87>dxe8oVbr?$fHL=#DN$d7)7*5Lu6AAbk~tiSM}Htj9lCBbFOF7PR538Yo&<$ z@LQmd_BcaHcs_+#p<|c6NtjC%6pOZqDM&pF`u6T<9t`C|2u`vCBys_W2eF!QCwFVX zQPCr}m~_={q{14By%Bn?*e|ui1E|^~1jrE%)&EoZ?fN#|u7qdJ=j*ehX8z+oJA>mF z7$<&3vx2;diz_6+X@Rr|?vudXT&@qkeL%bB>*_uSbj7iejv0i+uZn5yQ8%NletJ(_ zz6Ir6zknatxu|%(&S)0vBfAJ!(~fas2hkBw3l@ zbvRZ<@H(u2p&b6!Ox^2{N5SjxSK(QW44I@O8e~knS+}F&$ot^H>zc2V3W-RFzWzzLD9T6C{|`*pf8$>;^n6TXa9i&M~hlc!(@lBQ}lKSl2L=_z;qP= zOGeeB2YUv?ohd%G8|K4wq*-VYPQjd6XakfPx_mDWD4&Cx@+jeBM-#8Mz3I!V_K-$RrY$Xad zarT3du<#2kbYS8jyw5;rLG*&?TS)oY+Mz9rwT6&}JzAR{FoCB$+=5-FL5@m?alr-Q zk>b8R&p)+KW4lLXgrW8xM&?Ni49UKzWe!Gb!eO=IW;Dd8j1QA~g7mvD$h_?G@k5Z=WW@PXwk)vA7T zEHwqp-rnNyM=*LoAKw(A$KX+GFCI6wr+)S|js=aU67FF!#-6hM@-!QJ3Y%ZV5C5M< zBDG1PVkFR?zKucku7rPNFo5qL$SP3dYoN8@&?~#O{&( z4r~q}3j7lde`6HOoh2|%uC$Qt%JH4%H9h`Y$_v%;zVSN#XHKuK)uG+g>|fLB5c@UvWh%wCqKHy156-8`TxoYSZ^AEC5>DbzQIaBf3kNjO zxT28Hc#$n)hKJon+9qp+Ta=O2SX5?}Fa=dooPPmwXL>6W8_8ORv=vMk|3Vb7CFc^< z^es*M^(Y|1EOb#6&;$WgOWJfKC$QjkLz0K>i9{sG(pE+jgXS$X(b;#3RBje?sf@5t z4)FrK+lJZ&0!{)Nb~V^CKibupd9m}doFH4_tcpL5Bu*xcYUP`=iOQQ)51Onx>!i)8 zWTW6}#P1%tbo^OdtpN!Ks(-*3M55F^X>rBegzc8AZMR%YC;w4Y<2qa6qwQAfy|LW} zvQTc%m6QLd3OV^3>8PCi8&y>BLb})=3_GH(W87?;OM`m3j0xvH_FkC(zeK!Zy=d>06a#w_ zTY2`!mDo-$g^U9+yG;vlL}1%xQM8DZ_j1NFB<$VxF@U>IwH4n*u17^;LMD=W%SLXMA}=tH*h;G2Y)&>o;HWr^-gYg1V0JHITu zjK`CwLaQa7F;G=@psEbNCcYt6@6VlCex0jAhbbEZMq7(JNvaSvaEy0n_!gMEOR{j5k6^5-FdZ*baS(ZXkL;Y~AB4$5{TZyMgimDr0-bR6fv_19f!i-@oHr4ictq^9d?34exB+Qy$ zDhKo1*+1efRTNi$s(h=m`>V3_q&QUlqA$hK>X*JdUjF)gTnRDEu7+(MqP9F-P@-8= zO(-$xFe#$%Fl8!S9rx-#!K+Yg^@_MkwVM!KnCwV*7##9;1vi$4;0AOk0OX1j@Cz$= zWJ3}JGU1@vHMKRx#pS0kV&P!K@(`OYt$X%kqM|P&!Rcp&waJ6%{mNISHDTM?O;~5O zG3PqCUEn#d8nwrrAEC6{p#n<(_fERc%lKgmn;#qzFh*EhS8HLSy^%06%uY+iAAp%o zFrWKOsd#{ZVN5Q52V%69k_qCD*_F8yb0ZdODs=W?zmYBh#qXAt&X?6}mHWg+_xNT%ma*S7Yhszli#d-Cp~79OlYb_|A>RZI(9-~_=)lycw(C|3;C-v5PxVW!yp z5NS4sGmDgX`I!^q?zk6s3sw#1+>aXjiO>^kg%GP}5HP|erHY;4k?as6w5YMa6fI#{ zTf=CE9i6@;(SJa5vh;D7t}%B*IbU=XN1y$mYi>L_joVRgH?>i5{G>T$!&pK~EcH-2 zfN95Xj02FlY<|x$%h!F+d`t;UJQ8+3^u2YuTe91b1CiX6aRwWd$+=FkE{noB-%Hp#<^``)hDrO=#-s^nWz-gPJqt%i z`~|&=gdS856DC0uju7R8JzUCXRYVQXA}om_nlfh=NCs_pgpfpCW#UHFYyPvp-z}a0 zf&NUn`j;LWTm5Lqr>y=Z&19EYJk}=g)DcE&S}#*qzfZlb{=1ZB#OMF#Z7S!4G0f;d z2j#GuG1W3Rf-yE&&6p%PNXOoM4loP5w3Ce%wrrqDSlDFiUP8&grjFJY_N?Q9j-`{- zrY;mq4{2e4(6oMFN)e$=lJcOq@xtaHA6wY#@`bN)VUvq@k?_|$u~~AXRMVQhYGI3B zYhib_u-7zbU)YpiBarMAEIH~J9`p)f1(@rEchG~j*B3Sm&K9;$?ANxiA!KqZb!xAL z-7OckN%q17m_MNjXu8V6#>cZ-*sNMDY*w@u_QJG<&Ds}>Ijh=0yRTtkvtg}aVb7Ec zo8z`e3wvg4Vb9bS_KYv=zlk{q0W~YgiYpxCQoCApU==?QXR)1t$6Ughpi2GmQy<^| zy* zcAt+t(RL^LZCQXWm4%hD(EY6GXmPE2oc+u!Z;GdtV@o+)l=*IG9nMHx6O*`RE|n=t zU!iwBta9p6>>oGRfGD)X@lb7)sRSrre#s{S` z(ju)ssCtPoC{$>sNCJgTdE$HyeJ~9X}HgfXC+7Ttxkt9r;N@Im+mNp9w^(w>a{a`e$ zDrj5f_;E({0s&Lroi2ZfJ(U6ut|hEjH-Dr?s#vyPQ8mTUk9^!^>?=1r^6r`ke&)$f z+{D1^r6&fi%<<*8&#T&U+~>+4Hyn4jVE20J6F%x|ZW#0ZvZgdm(VH-pEQIWFb8wAh zl%{R@05eOtFmew92|r~iD=r;}3SNe?!v=|th-DJy+NLEUEW!gdwu9AGPstW)MH_P| z$I)0cQ?d6{Kort7Rr+2i8Bdj7!MvoY#RIs^>?p;GZ;T>EVu+J+hL7`gvA#H^N-oL& zI6OF4K6oZ+BnPT|1`>G<&}1~!KPYWb*1wBErAiG2Lrg_k>WXB1T#t=;$C$!&y>`% zBy>~nJH^NC;>C`IVvs;p*ak8xc}Ydu#pmq8bHc(->HdrQN18xdILCcka zfI#yTclA4D47BNSsDm_*#<$ppgzSLBvisGr%NZTjFP*B~f__Q{JaEOfWLQj5yCdNj z&9VW(Ho@P-XbI3V;0=jaCh_0e&sagaP)thAVPeS!;8NfIF!y1@#oUQM@gBY0tC`(f z98>LL6I`KB*I3%>#0hVfwyYPYtDg!W&wkx>n_^<5y`)j;R?JpL`)E`xK!nw;wT#n# z#dyFUIEMgDmg3ZGQy)t_wI%MM74;d1oP~en^ch%@v_gIv7b78-re3(UUxUjhwdf_#bnWcdkHX{;>4s)3S~g?~nc=c#pC;c8{V z&r}Cz02wXEw+sNKq60Op2@qyo`JBtteUJ72c zf>?l`;WL%E@6GXhyu>{^e1cYX2odj&zLkZ+iqkB%JxV3PjfO`$iy|=KzJZhh_nzV(hKad@;jH3EQZsa=SSQnH)#dIgM|}i5@--;$1%n30b|Lu5}2^+_dP=J%`AfOgxS)$0V2)n0vIi? ze=cg8wO2ODM?pNG>|KD-NHHyG3Fv#g*UZUGwOh`tzMMa8#a~AV7ZIKi!tG)9<6RfR zA?XDu$gT`FObX#f#@SH+y+vI@+klRV;r1fC)U$Ukh--JK3E~wY7aHihQV=gc74ytv z6T-_*4ObDsPs@d1LI9^*E`od0CW8N~n>DZrSNzX}>oKmbxL|hur6RSw1;w9*p9@OE zpA=sRKi3=UTRio+JPMYIzBH9d@&54h8*Kw9em(rOaOR}=?eOz|>JK!w%H9q}TT0JOyidd$%FxghhEnX0so!Fm~W!4RPs za2HihwZ?fsW~`lBg^J)+5@H>zl!7D{u8Y;0=3CiTQH(9*b(Ju@YHfH>cKoEIeXhA2 zope;Wlb0tQRoxNcNJwL+j&afvy?BIG4}r0j#bb;$ER)7bM_ZP&e@={2*cJ|6i{sbH zNrv_D8d!xL2`El?vHEbqFJ3G0HG+eYh~?q!K*IjNf}hqS#dDuWIQYqwBIIEt6h_oQ zu|G#z7UCDl^2h{=i1Z+?ifCRTd6QBiX8oQR4kpB28mLzCf9y z>9WE$P%$3(3`51B51aNJj`q49O$VGAsrf|~ke{eYgu}G-fb)8JDj6|?=&~Bne}g2W zEFm%@ki&qlUMOFFhdd=8q&9i>pzp?xzSHm z^{iEOFjRFwVVisK{o5pX9-%^+Mj&A-`g<(UrR0e1^z$2a|BQWB9HLw+`(6By^zd*> z2%Qi8n)Xlo){0+4tlFR=`)63HT=x;{6b7!M6(CR0I)JoT$n}#Su%polTIuJvfotoa z89nY&y93qXz%%v#IQ?>bI9B3A;q6?M>5ueL*5Mb^?2{?qhbE1nev3#4mTCo{v34pFbyIkXR7aB0U;?lm8W%o+1GNuF8gxK&%>N;!61t( zz2(E7g!NZEeo4a@&P7AFxfgDl)KJb(n^FA_yxv>z!>M0-erc6ao{ zGf*zO`!E@&{q7?(&?u7h-W|bX`=cM3;iHF*J#J^m#3PhkUwQ0+?EweWM=(Hr6n-rw zPZK@IvqLk>+5fAT`vGFgqfQZJ|9g>ON2K6>j&DTF)a}!)?0LC=)ViJhJR&NzPJ;q3 zAD707^ADLUyjo|O8NCIrt>Q3aXCZhW?oBRHTr!5Q2b>gU2U+S+AplUk9j`9+24K4! zdu^{$BvkwWu$q1F;rSH!^_gn^&xlBFz_>xw7Kih;^YzQaJAja!!N}bGh;eHknH+1M zXcy!MmMpEF64%UX$~!DZ))cmLtp0cKZ2WtV#ERu3toBqWnJCm~#6oAw3eAbF-XV#~ z82)HC?>fy;4sd#+NaYT1rR6DBm=l8p^RkhdF&N;^m1O7=G+s7qP1PI=g5Uc9hR=eS zKiqlsJT!2d2S z-W%py9|K1Pl&ZQukzur@metM=>=_a*oP{a6gfOS*16w~#9U#b_?`FS=TLI55!TS6` zYhEiIFc5gd%&S4K=Y9~0O=ou39x4d4&+BsTnU?kAQ$j7!3(E{4_qp~1gD%KQC@=QA zWH%wWT@u+0G8n!{dLB&IjDzFxXrSx0Q3IoM{_QekP6zsKq*8S$Rze$_iOYlw+7w(# z>r+4^Emr1u&tjMggPvG1O^59%m#_~4FQ!qT>v}nukP>t(Ae$uXwV>a%{w95=^H;4$ z?E82t?qe0R_sS8R>ovCbP|ZKZL?#as#ujF~Z^JE4h*r0I;a5JsA*X^Lt26(u!h}Pd;MEM>0t!lHzY4F7u zcY`E0!Q8yT>Bl`xC~hk1<7%u8P$(H2RIj4u4aNovkrMe8+E<9%3E?E1n{F5XE5@@YH^@wv{k7+!y?I2PeI92GmcYV&%yHAY39 zW=@?s(O$0|*6VFDC#@ndC*P)OzI`-0tKXTDl2_B*tYcw;n@3t?_@LVR%36;!SRR8X z!CI*7vVUeBR8MWKkM|T1WWSfrZMKD`pk*;HKm>jYPiOD)<+AdnR>_`uhKC5> zd@lP7D9v>k9>_fmPrEq6h6WSkp*iZ&%8X40$YAVF_iJN!I+N^9-*$AExub#AXs|ot z+A4O3F#I|9qTH)?54He+ z7XSb;2u`V3E?wLTV{tmT->^UpB7<9Wz1AZwg(!B{p=CUeXX3E!vJG~0c-^(yA^)5vNK~r3P^sGDR!DP!`b#>WP2#r6L5UvKFW+6U-VpD-?)`3rH>aV zOjOI5sIi^9-aHrsuxcCj)8d0NW?Jm49U)wM&*DIQ2z(!yP-k!0pdS!#qe+XHzafDGXiWDC;N!3pxxs*x9ha2nE-D;a|{ z#ew&XURmd?4?&u$wq%fYcCaCxB2B>(tS(J4)=HYvxQ(1-pcT^8rm=O6plVd2lBSR$ zR*|N%oSaYN_&Xevrc`KBn(EdY3DQ(ISJ?^T7Nn^z3j?EzxQS`f6iB04KmzKM!6j5b zlBV|Ckrl~c!PLJ9ybX%5VKArX6@gL&(iCZG0pQzdT4Ed_=2Hoq5xF2wA^1q1YS1_9 zKU;}b^FofR+h*R2p%c`Rryy`y?vpewPqCp*%2PRDn4C{1(yf2#iN7BGQ!8nv$>1L?8lGdYuIGb##p#P~s7@l32b!=l0Hv zAiMJR5t^mFcN(uJ)9qrN$9o9Ag16sKXGRNg3~#@@3wRAmy++TlN1FhFk2{S=5t(aWfpX{bEKrHw=bgKASlM_i4oD>`btV)f<&t0zSBmTRou+!liLY&QfR@(dY4g+Q~QHdK;AvD6|$ zVB~i;08$Y8Ujs<2TnD3V4<8`1`$b5B+@SH=ly9ohJIJ`GT`~*lpO;jQ-oBybL8zUR z$a_o0g<@?9n*5DcRuVQ^sGt?1{H)4v=oeQnorsDR(Z{Da(I;OopbTm7D$OiTa;$Jc z>xS(C42;L)m3$&AayBRM9T~K^4C4%cgVAi|vw`jw7kRcQs9d&HdnF0Vl8eb(^$k0| z*|>`HDu?06h`b`8Ne}Wmy}v-9aVExyW~At>sQg*6>2(@@E4eDmYelq0yg`{#UDX{dfH2DGO4BCj8ej&wcXTjtw4w~F zOKM%sID}GRUP>E<$nN60EDjRaa}n`PEck&D@mrjTZ=OQLOY$sn9pM$Sws{H>cTU8_ zbtOAcp-CbhsuEHLA|5InC*mGuXbN+qaM}c@KkP^Rmqih9+nz%>7AFLpXw! z)x2<9nFny3G$M+|BM@=GjPAu#svwRxi8&|KGWR0p8}irEW3g{&+PiFbblAoAljU+e zm7vM@nPqrHY$}u$1|Q6j2aEM-jF!V!sT-zpPxA%u1t?MSiQq7Ev%@E1xVzjFrqJc+#f_vMyauT1oJ|ngpN8&M%T> z*{bLB%zu4WEO%0zXuyvt3S|F8wPu{|zns(wKkbe{H%|3iI=`7XFEX4Bn9VKumKxOu z4^pH17KLfb&ews3tV6Vgm^_U`w!;pL7K+v#po?>LmBPWqRSE~3x|TZ2wWt)7nqzG$ z1+_d$0GV!73aOcAYbph;@IXW$C^w~0U<;c@0!#C(Qo>;^j}-~jWLCT^ z=OBS0V+w`+EQ5&0eDk!?KD#ZuE!rpNGYA_q*H9?*OyjP%D5cXW3I$~lqgGhjHp>a~ zEND4hsbH$gz$ZQc&X?xdAW*`xb}Er_DCT9FLLsd3N};ftc~&;-X$pn1eTb#nQ=v(P zLZgwOQ1A*T6$(xYgPLwNg~EzfTBT4ZDOFJ}xRtQr7R=iW*|D+UG6;{@P2V`M*x0@` zVV;%n*^|WEFwZ&;VMR2WE_^a|f@ZDd=GoSW{_?T$kjmc~)Cq0To08yx1*@wQu=a;lQUEe$_ z#RyAS?sb<RuaXDw-lE~9v}rEw)j_f%~cI%^XBHr&5Wg+oukteaO0XKm!%klmhS7qnhJF zcd15Q6V<$qbni|rqMFn61glZaDVhgi@r|8Yj#gAt!ukZ&JQ}EGKd51!Yfw${8>~eQ zE0vt>adoN*qjDp<*`h?nx0Y&H(M>|LOEv5(rkh5@{}$<{6rgoAY{RXkMmG;JAv2~q z8K;|vSScn4A5K=In_*BDU`xHY4i$5{Ddn^6U=lHdE>>HPpxU6D(wooSF1m>zN{{Ng z*dvA&GO2}$WtlyrGtIopl7^Ztwub=1&6sY2w#0JvXam|zEtHzj*am%VBB$G4sjXc= zV{1#lBFGn^>k}H=OJcL=)y*opRe3EN3!m#3LYt!>>dUutdB>)7Qp zc=MXp7FJ>k)pomlD(IRa`fJzPu3gxd*48-P$}&$MD^6Ftcg5+R1#q}cAu~G7wvGEN zJGezzEG6g6bY`E2t;Q_#FahFp5xc?$FZaGu(r1&BNj{She~5s$rg_-u!FU+luO$-WIyp z)Y~qgNJJ02zS7oawH_a-dMrPSk)HX;SdX7+^cdb~&7#4}AztAsMWD}h*G2_CxNGCJQ21)_2wYKelk0jn>Rb12+$R~DhE~KIvf%fJ zZ`bVLsH)t-@##?2{tkP&LNzw1!b4Oz5vp+rvos>LMNk~J&x!+-8@V?gBv13|p&IPp z&c*AxmQW2+43B?c8=ll)whMuR_a;~I+kqNUbWbCiR_dvk;kpY7tQ5! zqCt0!#2^~R<1q3uRZU_XB4h(kCwWXNWJBI}zOGoH;6ZnqpV8*JQt;`nGfey0cJ=Y! zQOt$}+~8*dm3s zEiK(1v(Xf9Lp<3?yq)G{Bnv8BQYvA~RQGkI;MACnpcI@CZv(eeiMND_tm0)P$#v51 zQMPYNK`HvCu~gH&j8t|~DX6Vi(u`~ut9lt-Wo>~bDDouUPIwtz?Vz)h=%LMsa@RO& zXrz&nc+2y0ACxz$*X8_C8MEPPB0Nv)UPhy@P%(K8O&_C1%myFVl!6wsF^hWH+bMmF zJhWom#|RKiDg^^zuIpn|#%$nQSt$(RVLqetiLD)O}M>m zJ*o@0mpiT$ydoFha;ArTSyu|q*l=q;nYoHJoo0tkkViC=DCLTD{!YE=ynEaE|Z)NR~cfGqurWX?5;| z5`4-)E0aQHIDff!bB6P|e6T!t9Ryx-^qtxtO+{9hr-PUKnBn}j>I2U1xg!=xwMN7F zYh^emU8yYSg!ysOq5Rx$nIzH>3Ey>OIM-U<#L0t`wxA$y%FmsEI4d-{flNx$p~BT9 zY1qB5hvA$RRX3dXh!T^KozFB4=f|0BpVE!_o#pN;!@0?)ZV5SFF2@&jNPA@o!ADNQ z*bL_I)eYyc9yPBk4I$9D2D-xJSO=ZSvEr+O92*ShWL*HbeLRbB z^g>G|Io8NU>PpEODkhA92z%bK2h8LgS}rG19!rg7v`{?oiqXPaT=Tx3^T;bsU036g z>qek5uK5N=pjuq>jg3Hmj}7Nn;gKf{=U0tKHqGKSp`oHu#ox(P^e z%~JTxP2-aZ12^(F!6PeSyQrNsdW1@dDvw-g6y0#HLX*U@ z(MV-DSJ_D(c}*su%ghN2$vp9=n1C*KOCA|hGv%&y>kDok!m~!h`OK?hI9EIm8Za4v z^Dz6MY&rLAPir)s!%jJm9O9bi$9Uv10}z{;^T_9! z4h2Qj)Ud&Dex7w=OXEVfZUDmMj%~x^n!}(*2B4Bht_(mjocokDK^F)%(b#4QK!M5>u9kw~p~^H(@y6z%kX6jNus7RH3y}O_hCxRP&Jd6Qi2=H-$Bz z!+nB(-=V;!l!o)eO*X}rN5z@QrPb>y<;`G`wRME$`_(X_R^zqvsI;HPz#bH!%Y>E_xD=eC1QH=K{?W+ubA1u-44 z9@XjQ0mBM6oICTflpIuMLf^$o8VaWg0d>Q9-P(dk8w}@dH_m%06v|`fby#n?{>ub{ z0@}lzWH`5_UlHW9(Dez!`8nLIg^XwM6M!b1rc6WLKht%heOj6~v>rhZOfzc>XuqD} zyoceu7SN7X_XdV@QSHA!hVur^J_+E6kaJ<5sWj?*k{vu4&QBSqYxdNz)!f){ZUIkK zNV^-(@gA@IoD|aTejJ$u8aP_oGY(*7rWV?Mvxf5!)*fP@&2WymKZSBO#C^AOPou>Z z!7dHw)2RBSxF0GU+djVDhVxoj`?O%E6HK#<`3=g`2x~vVEZ9W9+^viGjj(nYx2ab1 z(EN0(xq17&LfPKJ+C!!Sn2X7<_6e&wByKFMy(ZhEO$GIW)%R=FNjB!WEYQ(w;jBGtgxPB2$7pOs-nu5dA*`s>Gs3jUR+(Gde6nzXv7 z(Geq<#vMH~VLn?W2Z;1SAwm=v1S&7R=*-B|=uk;8 z4>t$|&Ifs>fTDQ_4a;r zPbfp#pM-9s;85wOl?OyFtKM=gI8=}sDMLrJ^FRYWBmbQPW3=;N6Esk;3N)toBn-0D zdxkJkRO=QnbgOAFM|#hSe#Vx*REI=~ZaTeWDd7`oJ`$#24x|(4Pa&Of(UmJ_lOr|# zs&l1kg(fS9PIKn0>`Uh>XNX$({e_P6q~|+EYR^(;bDhMV>o`w(Rwlav9AtK`f8Eb22Xk#z$vR_gT$WJ8Hzk+D?3B_zov)68cFP;li1bL zEUkejeI;Zz@TFzCB{_7i!k3mDXPItkx{jbUR>3lt%efKoLi}bU9Z5-MZ@`zHWU5De>2xxCl9@NY^i;#xtk7Qu3uQH{k(otGG(tHP3Y{)t%P!&3dLK1}m{oDAO;) zDO>*G%fY|x4pn&-J(l#;q-9l#V0(52wTh09uxAk;Q9>Cd^|17Ni{`Mn1$WO?JRx%Q zoAQLXWr`=n9p(u^Vy!_)*sBdCux+#XoO?oC#BFli6XHD2un7?eV3>Z1B!4ClpKk|G zhzsUUS)5h5(i1{PXgnbX`tBSzbM6T-Cr=1v1vkydX}-9lz6+gcds30p3N|0@LU8CD z3Va<;2;SY$6QU>0=^|Ev{>^$q7;~$Elv;+rBTtCNMs(6QdYo8>>k^|T|ewb=Y zn{k54F1MmBG;B83J(M$@gL^`pD3{~Q?YfEtk5vT$5fh5nSm_L*ZjItX>pcls1VTrq zI768CsPJKxECR}l*aAb~+pU{Fu;+d{>{$df)x5BYW}1f+{C`(P$Fm4@;Qz}EgvfzN z9%U8*;56d@k>l%G1bWB@mQx^P5jfreVNIb@EgK2FOUaAvx^0$r8_*lyyMjLi!Nf7^)!z@T#5 zs1ZW;gPZahezh!nXxB$dj}<_s1m>k>54j6M!eR)Py?sUjZFdj!yIu2#kQK+w86nTR zACA(n?2Y?Fj4~5SR+GATYOZ&74VFRhmwf=VFB1vOvkFA>a3#yRcYg?xANHpk`a_KQ z3}Zo%O8{Ckh}|@w;gW5icYg>KTB~JGWhX6rP7oD>a6O;l7WB$2dke4*CA}(2%ih&0 z&%1 z(>I7`LnY$=5JWZw!sY%DK1G+t^1M@O6@Lh2%CXaEY6P&BNFdBU6IRYWvp4AvAtzl( z#VC=0e1_4xK-!btFfsTH_pk3WENge^Gt6|%vqUESAue(rf-Q|pt-4(gxDZ=tn}((W zCG`lfZVka_xblawRiZC7I)Ym!UR+ld@hbsw@)Q+xv-vfj-k5+D;p8E1hUBckM~1plt6 zW+MaDQKOn0DynG)%cCQz`P_A>W;6W?=UUv@AEHS$&5iWWI%!mBX6KC zNNNcEyU_%MfdzL*xX2OLDcDs)|9Bz+6SbS>J;d{-uz!+ic42>xr5e;3683B6y_3wk zvBjqpMP>qwmZSnoDjODzoA)L34cOG1H}jr@1oIx8V$Hnw%EWs!?~&P2dK~EVqb zyhr-VCEkzBdrk3vVIFpL#m*O5om78yvLkZq)&!C5y#td zRE|>6LW5c;WzpnD@{0)SS#&ravVT37h~tc7!X@Ixmb*k8Z<+7dG0IGJiFkoC9koP{ ziCrGiOmm4Cj~T1GM3gaO*K>(Lby5!(6HWf_)+K`D?*QPKOTa>5+;i5M0ERR0`7C(I`hsn)ytFFi1g47XF!hL+KLH43Moi zZ!~klRwqFZUx893TD|931CB;v<6x@Wl4=4mmr4}9gB^{cN#%u2DVzH(vL6x0>=cGY>aG1I?^JV>FZa->}t{DNRVXX`x_uUILpC-!4=|Mdh@Oj^38^(_Q$==Zjv2+CFC`*q=A3A z9!ok-Ud3%rst3l%>vWcMI(en+-!gf<0ZV$CsUESUHS*dQy>k20X=dJ7(ld=CBga`% zC-v81Nh|VMxpwzT@M5VrsqElCJwq+8;jDAH z_e8c2y<2>D;;Mh%Y{saL;F4V_Qe4^GBTM^2)=~=^KC}olE-uiWyA*{^b#HT-IFIG z>jCh9^KETQdqcKs??Z>aBd^kHYgIYKvcHjMp%Pp1&W3S2wR|bmGMl&G7)9?HqNx3z z`MAh=^?~0w5%mW#z)OVJQI3q&0)Pfofl~Ev<}$lI&A6CPO;wn#Q&``CGde01@O~_g zdyjbs+jK%RIqZNGn%+S-c`V%lAYj&*-aEK<4L`5|f15Z|5C>jtrub^KCr=*9TMwg9 zNs8|BK=UeV74LiSA@;66NK~uxd9($3x!rb(BVY9VXsBy|mT(0eqR9kH%WnO<_g%|F z4c0w=XwHVCaWFWb=EL}LqLLmKrMo@-HY>8Ipg{~swk6hcL5JVH>USR7n_jvj0Re{8!FxT@%oR(ckL`Cp`k3F8xSxfW zX!a)>hkS^B0CUFzHLTufP*#^#t2$=CMLBI$e-g)?fWMmdP?dIP+4Jy<{1H zAO=2_;3$}^?#7R(BaiMGM!P9{C6uKWke^e8qg5l1aXIXkb zskY+XI!?Ov`Zxl8Ku&Jn9BagFUCb+nr&guf-EEZ0Ev@j12R}tG?c7Fb9bC`1fovj^VLVemCS|D7QHiwpe>(d^jCoQK&f4!!*|W5hkx?)%hGk=2VAurK%WYDd&`+n*OgPF|>V0j^Qe@ z{c9Yy9!_f*-VZz4-yklqDl!tYxwE<< zdFwPIe7Khb;akhVPqtLP=G(mU0B0SEuI)BeW`r$OjnWHmbQo)1)eU}g%)Bbp^neA$ z*{8#-F#?eX)lI=+WQqZXlt)@pXy;Y%acv?X5+Bkwg91HOx6wlTwVM~&U+J86>o%A8 zO>|LsqhuoH(5`l@y2G6E+5b!&rvdq6ZAZxt(F_3-^o)v+McJQ`T14H`Ad18P>I^8D z{ZyCfa?LakPpObI5C6e#?b9f`Wxi$Gbf}H`va8@cK(oSzP}vvKP^!520qQ=>KPnOr zlf~lpf?P6-YE6qRc~hi;*hZy^&F-AnCQ+!L2i31wC0hizGE+Voyi^HhM2N&*b%tD* zECWaRwzf<))_YT=lTn=rX>Z{OY%NKq1Mjr#x7r$NPUfWyYV`@9lIKA~Q0nT3%_pyRXwDk%(q)XQ%awEB~IG|(>;gep!TnviaA}TS26=H3OzA=^V)|H=;sHcJ=@AvRs0bwBq3Q98 zm7ip-kS`T3z;*&dLi@zhl&c(jajb3B{0_@kQ~{*o-C~PEb;25PJSyV62cI%7?}2iS z+mAJUCe}){M35BQ5xA$*anf>(ggIsZ@nJJ15Zvsy*=Se`VmnwhFx8)kaH!(buSWMX zAK&t}hZ%TlQCmps`JG>lp3uWR&p(xS_JIMZ_$bueC*ZZ_MV0tmv$uMH5sU|OqX$e14>s&Ax_dafgHIrnT1)j> zs*lcFf$=)y!nT6?7hWsvp71J7jG%z3kC9F^O(N9&13lK3(+k*d5DwH?O74N44h=8z zT^gc9qI*O=M}M|>gteWh-FCbcfgiM~?4I4jNF3%W6){trnK=pufh8&E4U1rLkQjkZ zXj5o!4~@B4O0xC9-F6SoAk#j^%(D$?C~Qs)WiDk`pd74q!panxq}Q7F4wSWI=QRj* zee*CWkjOOM{MvGFvdJMr{C3{fdbFvGM2_JhC9Q4Ya`8)_h|Hgk9zxfa{RT(~q_oPk&e>(5 zP=Xusg#hGuEim*PC?LPe+ooir)r!{e#mQ<|+McR0YKv0rQXJ+R0&|bv-y@Mteuj<^ z;yqVIh@=1+mDBaiR|H@bh9X}iQY^kn@Yf;*JoE~qnusBH(c-{~zv0-|xE7%v*l}>TVAcnro zx&mxqxP!l_$N&8_n-7`a>6>^WZM7j4atUzhnQ#9@Ve6U&#Q-9i|B2jghmX= z#6CPQFRIZJA{Pco@$j%0-6DB#ama~x@)C*ZIN!5En6Xs(wB^tU9?P52@tFGV!km&8 zMoi~HFMRUmMJUKBJzzBt(76l}{_FbO&6S&pnr{ACPlp*xab5Na@p6C!mMPQo7WHv4 z9<76~$bd=JgKRjvoAj!Z0tUCzN}NK;*~>X92`OfX^!>oR($~W~5!mqHJQ6-z=B+up z`Q>knqWwGLC*HxFlVc6xKA&ZA={WGk;lco+QdG^bq@xXD*0nI;7Ch2}^K*IZMtZKM z5Plo`9U{=Oi$EG0eTnnl+x0x}_!q1P>xU-XO#EE!Yf+$@0F~04b=puUU0nK=GeL}k zmwWsFN8S4e*>zQSzURliw{PFutv<4aEn6a-d&jAfs-#$x7|SF3CB6Fv83hO=#Z0A` zd8zqhs@^NLY6{sZKVAlK+ZMJ+1PHJl0RjXl$OJhUFhLk4w2dJG1c)Gm2nvWq2?87t zu?Y?s{662c_Br=ovx0doL24AEg|64WJVVnTZ{1G@;! z=$;124(q^;*E571Fgh3(X@G5;pETUKetbf5>5Ilk=prz&+Qf`Hng)R;0s{fVqzrgI zy_Q2h6;!H8Xjxem(x+V2N~RGE&qbh)N;8$|?^p#9N3cb-1;TM+d=^AH*z!Fl{;M2*&9G1NhzvL;E<8ct3ejy# z^+!2d3FcTln&=k+IMbTZ3pUTXAyR-79b8y&q-JZhA(h~+b&_ehQ2l25Ct97b>ZdLDXr7#q0Z z64P7+r$Rz*=;#P&Aq3Y}cZknEFmzxDn(6VyVyv3a8pG+q5->!da~y$5QAUu{$-gny z2Z2K!O-h8t4N7xxr~)6~x5Badm+W|t*T2-#z8Z5>@=*Ot2f)p#@<9Cx9zRsc+y>%2 zF4PmzeLbzt>EvC3Xh5tb7;3@s&JaT8lgxdEB8ed*up5&&=E%28JreR&m`CIX^1>X< zV@;4G&vPuo1B{baUE`dlqy<{e#WTK&s1+$6QWu6r>R+Py?+mD4cA(CSa3Kv)M%2If zY}5~neM^5Zm+~VE9e{o?V{@lg^fj1vVUDeQT@Wi`R7izx z>}8X5M!I52XJfuDvrsPa^|J8wa-0bv=*Jiih;3Mzx@s_dSlDY$YovHciWfi7jbV5^YBp@Co*$=@%;x zunr*)M{RKr$*WSNYkfp9t!&s=#5~=TfM}{&8HMpmG*Yc5#bC6T2F#R6wKBzH+-9!3 zHA~Zh{dKMqCA2nSRWabt^Q&rMryt z%}8I&H_J{Aaxzy2b>Wc_>Jq8|vx--6fz?|kpe(G4o-_mqv$0-g270E>70a-^{*5&@ zTjCb<hw4q&@bQh2#D;L&Q<=a)D6%QWe~0;*uX28Wq6fjrVOGn zpfI+6K5K4Kdz@8|Wekx8IXq`GbeM;4x_vsd%pKTTeA(O%q^Ma}x1|xev)ik^sXodpI5tg|u#gceqxarRyN&xAlFtN0_uM3On_T4N( z!;+k((a4=9k1MHS3>?N5Lyj$JlN#TEiflG<=%V-mJQR4zpelS=(lab6tkQgCw$y^` zpGf&`bYpR63dfVH)R5m=0q-?px@zAqb-M6ZHi`|vGsbF-|a;ScqqRr9wU`q>@kZ(nx@l-oKSy~Ns3 z+us0@u4I{L3JOMt8OhDQ!_u$Z<$(g>sH;)JU(*E)KYsoGxONQEmQ4Vx9UZEn`WE`+%MHV z<@9_7_k7OXRok|zqd2;mTyE}x-wx>=z;lFj6kvT^3uE~ z=QgBo|Nm)7k84qKD^L_B#x75n_HveAf^@3L$KVQh$YIHFJ{eQ9Xp9Qxiqc~CJjrd1 zF76fxFUNt&PLqPeal*uAtv{_$ZWi40kh6$M5=1zOyuI>mX%b)|gzm(d2=W|gF*fHH z#HpznU7LV-Fju}`TzzU*RP*;%ZZd3(mduzIIe)usF1wDPk+OB&)v1Iso6xV%5j;Xp zH%;EpSjxf&zxF9-A6vNzdGWfAf|HO=!~3c?x9Lqgz9G3r*i*fEgWfd#4INmrF>HG; zPm1Cr7+@eXWDk}Oq#BFX6lt?UM`lnwZZBnK=22TBv&q4do>)16omR`+X`%Rm6a#qI z>f~8?TCg4qT)7YKlWCUL{vxfUHZ-vimy#+Z{ zV5-JSx}VkzF&WfALIK1uV1&OsD^6nIlu9fJ`RedO#SG~u8c1AHxx){ePAkp~f%o|q zfc6`k&E=F$+xj`nkSBke!APo7FK}{sf&8=r6LkTQw4v8>H6dPg>pu+Nx(~Fm!dg#O zf$QCeqR`GtK3LMCn-pxk{cA|;gpSbtYT6+Wxx9cGcs@;;J+Vy2fMT$SAOLo7!Hxpb zP9n)CvgD;DD*1W|xMk*UCk(IhiAXTwA;P_W30nv}(*>SQt&FQOmg>{+pxU%x5y^NK zEYbi%_g0U;D<*FNbI#<|2mK3lKx&v|KH8FS9X&8viUdh(GN$vVIMLz9O#dqi$sct? zXeUb{DpPuZ?aHjsZapv&&jT0Map9^o^_M8CQY5Snc@)lyQ9DM*JQ8#v^@ z!-i1}c_x+aci$Wq4DN{5!5)!r1`oP4@R^7y5hZV7h;regBp}ToL%e7iV35^HtN~o=?5h zew@1Hstud1AG2>pP+Jvt-p=K48cyE9^&j)%Bi_p|yoH}D!aLr|<=t7B-Np5N8E?gT zEeb4I(Qir?L#(c3F-h1_7SruO7Hba4V$C60tXa!qRAsUl6SAz|d<-?U_ik4;yWq8}3 zS*D7gN%spvFuppRZ7d#Y%0d%0kj9%YUbd*wzafgci{)fu(iK-PpO&Oxf)IW$M8@Q7tgoW1t2ukUDi3-9ht61zT7-xUg6; z(ajeuvxP)7pKCFnQ=S&Z7odLriuz4&si?nc)URPuk)%#hzkK*Q_LgZ8JL3;-O{aQ2 z=rKAi28jkH#LArN{}#fCR>%v_sKQ<7D%^#x!d>Vp+=br$IjeB=fP6&K+qgWFdfSEI zgN7o#?O>c9B$W}KVa2^UW4YjZQ-<`wbtc2YF`}`!uy@zT5fboXU^_-9W%HqAF#e3` zm}M6_WhSR`K+PTFSGb&DEXM_IFf0e=5hA`z3t8B&8YOlhD~d8`h#oL?W~r9(4@$Ll zq6IR5XL1@bML}F1>BffBy+2Jyp?n3%W?+uuWc$qxGDrhaY!F~J&*|_W%vS<6z&~f=-V>q&xU>zN>EM2YU|S8K>T69#VtV5*Wd~ME0!fa>d-YQ>e(`d z=0cT>1Eu{1e8cOjQzQrtnD_QmRwtU}bNkuq{!LWRCh2l5aDay4&~2Dh_ENDHM%Jiy z*qLq;c}pTR*y1(KCUay7X&4P&OFWPisHu4E%!4@V;BOX#-DFL!=wGY>;rsaD0l$zG zJQADokkn;#5mFZhWEe(@FVn7CW{RP8LMpBhS0G!9VxSxL{xtxHRR&Q^F*dlZ!q%U8RFZ}JEXgLB1Oe828 z+z4}<$<6RswtrFl-1S8?iHM)uxnBT3->o7MKOg*z7nz5j?^ThApH-20_<4_tMEpGT zd9P(2ejZejh@bnpcl@-%L-_d%65_p&Qh6Nc9_|+y=zS^@2YT>_3l8)zRU{6yDl%`N zM^z*a^k8gg-at>ONF3;K?tP$Ecxa%r)dB|J(5+0bt+GhQx=O7vAn7OQgfN;!WgRJ zY;1kY{h8uVwEo4P$XDVw)L>sM?S5Ql5o19azPI9z(VkXat<35iu{B~}Jf>4}J?o*C zWPWLcpnrP3t<@5#h$Zkx3QN~FIfpuHb=5s<^ayViVZid7GXgcH&~N+5*V`oac66{f z+kgg(v#H0`;{53}8>#(Z(RzBiE4EnJ6`MSXE7pwUaJWYCgof6DNh0>FOAu_aTUgJ{ zLu+d=n*)3X8geulT=2WXc3?>EqG#y7v_-eNmM)OW3>zQS!d0zR*`(u98qi1qNI>t* zHZ1cr0)s-?Bp3|RGqN(IkLrM@lPx|aQR1|Y%87y0SVB(fCnPFon@z20bnlVBbx60ZiGckNY;y%!lJs7cxN~8?S zOyMC=haUTkt+s|BPRIMb;v2AT? zGinMh;m3Ib4H!)L;m7W0?JGVZTg~@%FO8k1lQ5%NKbRKpfM*vNN#Zmf5dU()ut{g( z@sc&sO(pZmUp0ob#4^X-b0jxOG&grbNGwx!7Wes?Gm1VoSU}QZ8(WR>CmXC~lLyLe z1vqK>w=JI*jMp6cD1L%TLHqoG4H2&lZ4mgx!sm*EEUfg#xG&~}1%3RQ-o)1BKD1)~ znlR3`J$LZ4kwNAuEr@HPBC+oQWCl#7VH+Ztfh_ElF!q`l(y67?UG)2T9K@W_1O|og ziiPJ%D@RmVgQjpLxy_SSj;m$mgr>+*)pA?~eBwV8%~hBaklI1s78YJrXGU8rbKr|I z&q{4`*P%rfr79sOlJ=>vlxc&C2et`vC9jL`b$D*!yi%JpIibW1yl_L7ecOp>_IzfV zP=2Y9V3_70BL*H(IRW`K7p}`O_p*a@KX9H1bq;t$97$X3+7Sy_l}az@hMdJ}c9i%pxgzg>lZ+i3Ju(hbFKHH8=(qDRQXH z#Ozeqql&1*qKYz$D$*w&Rb&#%ma41}4P+mL6!Dpb6xnCjF*Ds^I}6L%6L>o+Za z$ix_#O400C$g-^%-h*rb-1Lvsw=53TZM2S((ModYpLDae*hx1q^+n8xGxq=}0c`aICu9A7RgW z2NnqzG>|n^(l>G&wnfm7aDt6PwKbecIWKE?BU}TOu3Nu=72N6_vV!l;+zbvX0mjqK z;0^g#&ee`D|Ai_kiXXK4#w=x3kvGfC8hMyKIxpr?aEykHONlQuC}zb2sa)s_RdDF+ z6(r)O3y!1tjLWj`tYz7Fhb$ZKkY$f7Aj|q&UNPU74Qmfa2C^)-&$JN!?z-dgj*iDW zI{vW*I___IHNWE@8+4po9E!*4AJ4xOTwP-vj)H0tiV{jAym2HW9%vA^<@EA|(MJf=3bwZq&>i;8kGH8v*KNmMm4U=WMvGPgE(2pb2%zQ!MI zRn_`tOf&np(Kh$iV2^izJ>CKK`xXGZzvb0@u-`WTJGXzG)_$J}*gVVZ0-<{o?)PD1 zoK_7iI9ewr#P{SGI9uo*5S(yl50_`s*)w6Q7GuTPbC zT2(D1PG z8@mM-NqnScTgL1C?Gigh3HN4!VO^g7Bko@$Y}oDUWOurZg~y~uN}P~&+Di7=oFS=H z`JO603m9!<&Ecyhns{UuBMu3=a^(8R*MjR0hDnNdOjyL2+;5W*$6z&+TUu9lVFsxpB0*S#( zkDfyoA}B}@J6jnA4hcUR!IMm6M&V@xIWu;PX5lhsd71-xm&D1sV73603)BVwtqM)B z`pOwpBj9JUF8k44FB+Lv*tjNs$iw2g&c1KWN-HwmWEb}fSaly%k!Z5LHx>apY50O( zG!?2mPbWH|7tvIFBz^%L%sdI?6$bs?(~HzP(fx5;r;_OT66;RF&8X@Y$qZV#U<48o znuff{Y;F*4FnBI?@Wotps2DXeY_XzMZKF%*w(~i zcm^-A>L?$CA?~xEC-hw&^7Ula4l~(?&5A+;b=nfpP3qRTWxh~km^x(gB04zuu`0p5 zs~r+>6=EOllhUayq*bVQnXg0Vg5*hBFjSTE0i^ojheP#?ak#DMv|iMhiId!fH(X#W z!Qt$=9t>I4#mt>ynMgs#t(nK&8J5W##jX~^QoK<{9a^0kbhVv-M_qRQc78b$i8Q3B zdxdmYd4+`bRM&xinzDv2%F&{w}wO{`8TD9dzHIQAwK(f8!w6gKUjYE^+e z9X*ApUh5JOi&=PnoM($XND?C#U|01`Q2wS zm8qOxlKR?1Ql9`q&WrZ2)HjOMXA8KX(dc!U-zEr|me|!aG(J%VWx$|2rF3v?FzXDu zY-RvaOK5)K-hq7C_Ef&4PvC3d`of;PR%R%Kk4Ve4Y?$QO7ZGR1*BxFKslmQKDKY{i z{D+N=iS~CarehuHh|G!=v*ruQnpwG67c7?Yz={Q$hyr0M6FlZ3F0S5+3JuCx@yQN)rM6MJQrRxv%;eKZGh9==&{j7K z%;rNzi&<{O0w4%Lsd7j;pRnn6mZqp9Dpz6+$<**>(}mq$%SaI+=)1s=$wn)qTg@}V z&up5i-$FLl(74U;(Vv;+Z|TP3WhAH9oXH}l(@q6B$?JVm_%U#sPCbQx0#Bjvu9=7E z0z6Tc4o%e>@%i_p7DR4%mMCS^(k--4B;aNO^{(T#eS`htZs`rz@c{Q)XkXiSwSS?t z;2gdny`}8f~SmR*Ogs_fVk~ylzZ;q0HB~lgK^$SnHp{WZb<)1`b?c_CfI{ zRY+g)j<$?r%t`UHj(+NU@meLonGMU~cUauDp}7?%emQWgSj z&O6Ou@ABcpe?zEE6d{jsFS!)SW>|#W`gMv#(e=?-WS$_pPemXdIAz$*Js6G+eiwH# z`_B_e52B$l&0bu@*#ypm!vw{^L;F## z@3T$3vOVioGJO)Z>P~<7(!UE>@|E(d6*BWiqJt>>(Kae+eaV)R`waW>J+$e~sR8>* zW7f3&2={sc?Ba?K;lm|-$UO<|p3Mc#VmTN5c;;7>-b#v?_z}%Pj{Cg^|FUWju>~8D zWEvj^S_o_cx2v3l?-dP-=SEKrD~E4V%1m0oO~Vp~ze5|3Hh88qWN~&>t2|y|sjQrc zlIB(g(uyiTw75J;uBI6T7D7I&+M!O>Y85K7Bvy!(io=jpQ=Oehl`z-D<>%K?Pq+K} zytZ6R_p3uk1ST{<=Y4>D9`ADj7NMQBS|!7XrpS0iTKt_kj+ZKVfjz~zCVG-YN?*iA zioY|zk5VQh6)iCxS7Hof9=ufoSKgxVpqRMX5ym31CXcoW8peMvtAr_%UIT204)9R9 zeYlvb(c=FULgQ`on1pzGYi%o9&@%KPDBG9>SV@Q)nv^}Rjebfl?K*X&+(}|_rP$az zZ8T%lC|i>HYv?2!p~+twIkG;@E%jEHs|-XZ;S7v4DcALjzltgmJ?ZiZh`oSevg?LP zW>)qoRx*jLUG-)`!z68W-5SZ|nY2cBeVowm=I;AfXBXAG$t+)*hC8NwXY^J8#+Eg8 z`R@STd8R!eOChR~Vm(f>Gr9bgXid3YM5MaY+a+Al88VRZIJ;TRcEN}Hp_4_zNf{@l z%C*Vo!=*ubCMk9tNYapmzJkrfGD*y!gqQy4ilIlV%8Mv0E8r_YL@;0rx)Ya|OQl(z zyf5upsO;_(&5g&q6gA3qXNuOu_4c%$sT)hV(>(L*q^P_m{kqbh zdv#@t_dU82lDJRT#q?9xOV;LB4Hg%zi+P;%-UM_pi*taZ78uY~ge3(|pzMvoB3i4H z@9K;M$qrX1-@}z9#`hhr8Yog4tYXZeXHV#QOGBs2cBQL)aizXcqOMpn9IZg!3dieP zHMR$^oTSc{W(9O@%iaq5w&f4#72a+ARp8X4DIIGIZEWeN_L1fwR=-nb{j_+D^=ow! zdU1c6eoXee(VA|lvpb;t8*$N7qrDuBFY$vszki8wr{bmKS$J;Gj$+EgB3S(Dk@5FWsl3))rq#Q0)7Qi!FdUyn);;STQhWJepuw8 zsEL$j^}S5XOGszUl&ZH%d~ItujU-`h&L#j#0hN{VEvz-^NUzo^n>8(pQmsWGNf*2+ zubOo~7vEdqW;yCvnf<2vWvyz7tO17hpvDavB=b?d>D1b^6PvU4Ju5L|T4(L~kYjuJ zO33#o9*rc#=kevQU|*1+aMt=LD~PfAe$f9cYR{Uev;8Cg6^PtfG?uhR+M^hZI*n#m zdD*8fSJM~j?h4&qpu6Ylj)Q2MQ&;M)(A`zKLpNn&nS;EeXXvF6>--=`j2a>K z$P??5t8}+AXWNsu)zI@C6CGLF(07W@G%I${iPT3!qCT5!MA!iVYQj5AvkTC%nwpF{ zKGEVhqG8o?Mlzz73hk-Pk-Y509JMtCT`i;>0DBHn(n4fJR$TlBwj(0CCVq8}@X}yd zrrTPrB_feJ2cFUEnkv+Z;&@V8top@@RkHS$aJg_@GGKFlsAzNQe^cus!oX|99G;b^lYu3 z!EcAl{hFS^xQ3tos-8uLRn_+&^bBokxE#`vEZp;16H?TW7u7z%8chd;;J|C@fw&MD zPA!d`*##CA&N93dghmLmJNc(Ey`nf90Kc=9TJjs80bk{LFodixU=D zEfoFH;*GH%Mj|lz+>Pl&)Xf}deJNScls}osksqlT0){Tctws4#3z2{eA+F3PS#?by z)gcWOQ(A`=+9xP8fXS=C#k&pA1xj#yFqi(UUSJ2G*r6g$=d5!T(%G>RwnCjB5J3s` z`n(oov56W-=i$%&!UGY-FjD;n&ouv*+M#T(%x6-7^T|XSn@LxvQp6vISRh&f%f28{ zw#!2ImkKx*Dq~M4N*)+K>F_Kjpm3?XE$~f}sMq}4m(EAv;osqclBs!B|B}62pY<{e z5Lj}-M8YcD7$-Aid-3AMqa99mXB{0=cb{L}H=;$AjIK7nv#A!=>et~^iz^ZEtC9E! z$CuzY#v+N~ND`(PhKZC&w-j2LBh|KlEq(qg*K&tZ-^+b36*II?9!|$tD5~0zraHga zUVPVYC3{+3-We)^xLN^?3?NQUhwXog*7t)EafPZ9ESk$H31WoXh`4^YN5V%NO)0gplGj7o^N?V=2W{T*_&cLvg+kp z;fGctTIpw-ra59Fz2%ialiIS_ENKDusoB4#S=yBz!F)^XM~CoU&=_*P**yrq$?*W{ z7>ms3RJM>kiW=g2S1u)c9ntyxxPo#^H=!GHzs5Di($#MrtRTBLpe1 zc?!GIbbqmaF6L!<>F%Nz+O+@EY9VrUa) zr@z6*Tl~m!i`pmQPgQk%FN^bxT-LTQltLh2w5bPpWmQxY$|Z|9J53@y~e36V*G5oKt?<;DeO`_K?i zP+mImo_sC(FW<^eVTOfpP*d~wcCNkbo^I{KTR5$05nzjH=d?bnSI7`-Sb(k%q8L5| zGX|>Lr>bttv~x0Jv{@LF2;_DF3>hX-_@3WY0M{Q_OHyeW4Awu}@F758Md0tLIXXVo zuEo~CbJhuiLfEM>yp{1{vjcOvkb6y+6_6B{(h-pj|93ee8ctnCTTC!`2<8a^jdilq zQl!M(s5ccJu3#?JAz+S+1~Xeoi*HyHd-9&Ov71O8O{>kGz@UcjqLPPoj{)wa-Z|Vs z->~1|-knN&ml#r95~o%pJNwkyXjHwX)|>LFo!7)sZvw8JzS2Z5OO=Zu`(3oLI(ZKZ zIvGrju=eHH)~v%0I7VfMh0te>BHZ-}AZ$C4Y*Mg-VJ(_FEwZuLv>+ug2O5JWTU%;1 z=Nl9puh|V_;iNkDU4YDM?6qb|Gt(3?Zoph7Vw=S!fL1N7s8m-&;xe{lR_n)96;qEb z?*<==f&r*PHf$L+iX)?3@eTh-8DiU{!Vn^#D-8IQDeJe2e}H3Uh56&Wa?#uv7YMG+#qe*D7`sUZB)EnQ zp%jKU(#wP^RFNr34p=zNQ%I~LnHH~<+kI>k8_WKl?&iF24!(l8#7IU|gII@*o21@T z$+|L_k@f@ety*p(h}2~o;dl;X!&*v~epQq$BU`_^AmyO8CYxPdQVku4L5QLAjckj9 z;KZ1W`p*?~fE|j^4%z?3FK&Y8DQq^iyyChj^TS&RkiC}vn7GNojuYCR{3T2*8Tn3`9`;SY}s{TpaAom)__u^sa64o>vB*TXlRDvapEx4B5YT`V@5a?V`4>S z#AlrroUXm@0-|V&?RC)6V~2^LiU#Zc*&@_AND;j82zB+8<+u1Y%7`M={ZQ3G)E2Z9 z(@(?EeE+jHgBnIypEUv#H$V=JAhQv4ZzWbZ?jNk<>9NMuT_*5newVeYXDFzi1)2S2 z3G*P+dvBC3gU@cf7nDuiLU7OF!8sTu6PJ@Yd~0lGP(=)bsR49JFBIOK;k?xb|rmJHy_pye1KclHvV zf*-hjiesYzP%`qAd`R$dVL$d}04qcr)wWw@O^&1l{WuO;Ih~iK^g6sp6&q#WbeY*~ z=q;uM_^E#&H3Pm6_6Xs$RZX?fAICP0R~=F>pqPf(33!g^sLK+hFD}ce-Pnk5kjjLE z>Wn^(?8M9IY$Mpo18KeKVubmIlYj@J0`nIai`z`N|FaG;a?eyiDXrb^()S*TJR3F9G=pa~_a z1Go#QVr10mSdYL2YFbQcJ7YTZF7o_3W1v-Zb5pa$yR3LT_lPc}lvLnow=*FjTYO$72uRFz#PViTuIJTsE97xp=UVNn?{Q^*PND^dJ}f%Qle=iPw_B4a>} z$joKL^eki29wa!!Z*7K*dH2+LTk8{INi4_=r6z6$$njj-K2ST`&lXOkKpUnZ+A4nJ zXHFL7E0m_-ACdf}I?jcDlo+2DeBXYEfUt<~k9&Zdz%q=?cc@6j_s3>EOl=;%&wQ04 z5#LXJ#fuE%`%b-&_`Z$%;jlAy^*@PZS`6=;BpU&1k|czfs%Os5$zi$FP#n3G$njyh zv`)%na;ZhHGea(y4&~)B;ch{>^l5?nQ3c{fxF7UDy!mi{R7E1(PsAeg;J)KW1Gvv{ zFK#sq_q+5y!hNT|uldYv!#nq&IuHM{B?*i-rVV?7S#AB;14;3{CQQTjlZtmZhGu}R zPm*lC|0oeNVNX>OzH_fX?Q8MvrN$e{tpJT`UErx%*|fMw@N;8ZGjL{|cJIx=`%;q` zVay!kZnn0BVs2|=sVf`U+8Sz!$Sx-yMRu=EJ^pCXR_!w22>nPB z`&U|;=h)?9F7-!R*>mdfD(8yep?S;_!kyH^-WY>qmx>80oF6e3zWD}bHZ9mr0Auch zC5R{e+>VlD_Bc2(*J+SEy`~SIBg*tIp6)Hhjtiz=Lf93L8huU|wm7QGu+{M3D#EF_ zTmj4Bf>~Bu!4?q#)>|efELN;1WMFl!tcU)uyi}qB#~7RGoPjEsjY-lmR~#QDD?29{ zk`qh^nG7yIZ^wRMbR{4;W2t-OD z4N@uN#KjwXoc5$S?w5!Mt2bgR)rL z2TIGzc4Q?N*EgyV+OkjigGJs}DUrto%GrYo000PndK;X<0>IPK&VTB%dDn)LU>^oQ z3H4DlACp4q+jmj=qk2JC!^3Z_zNNF_@%mTJtm5FH2R=Ipk+>*iiuc*qA#Vun2yS-H zTe$@B4#L7eVswrEvjjtb@d7j&%U#4lBZ>z^DF!ga2m;_1)Kbjk6tmnRj6ErPnDnR8 z9w9|&J(6S7;;R_SSm5ahC0eANFMCssTenh%B|994PO9S=_?Xt*xKNpiT*?As7#k%S z8Fz~3D7mD}l3Txy7>4^~R8$Ok^JEmzERz##iLS2$S zsLjf#sH(4vN|$5#8WdHt(!-QwpvrPA#S779fuK?pQXNzSmT6*XO+g$5 zft%$Fc4lc3jW03}V7}C3K?sEz1mat>Pi9C8RShWP;glNL$~tAW^`*wqoR0dClZ07P z1F#0>ku>ZCtuC`@f`dE5w)!J_cp^4ZBqKU!_Nj_1b8e-H3ZrmET5>uu7Wl zqh_KC#)i3V;hm}CBcxH@P=UIVdZGj`L_PrG{Bh_<%#QecBr_R4*E=# zl7T5GB2NvIp}B!d!~QR$9{uGgZ7MU|9Q963i$wi9CNztX@h=Y!e~HCpNHLT;ZB`y{ zTNGk{Zhh9d9e4`5dkhcs*t3Kf7-i+r!IW7Lwq&wj`C;*Zm0Jv?q%B(Dp z5mUo#X`--In$Y5S&78ks zllKpu=w1BKQaCX@jmb3FTz4_~4^zDc%CT*!#6kJarEJnh`opFGK{xHODW!Z${ks5| z)-EAetd%u}!>$9fph*AyNYG~xg2?RPs9#9vbNAVGD zLoWLUa~N&UfLJq_SGZi<2~Sy_C^IUTw!n_h!AzW;4cvb#@gJ=X*ieOC-%O%?hACCg zF&FA0i7f1V6RXslG(ApAkp#3z03Von%y;b%s4Qh$J`|dHZ;z+daW63{JqtT-huM9< zY4xd#5|QwG72g@b>3b9Wq|kZ;Px7#uTzgfqe(;qUMiEM=I^0$LRyQ8URr%OXs{MJ6 zH)D_1C<1ctpw|ktxLv(xz1ybW^z$(aReUQyr5`kPQdjJ*$A@1Ya~`wSF_Yuzws zezoe0D`7-sN6Zazc+W9ngZ0g|}V&-6+O}7Wp8i z%GZjK@q;Zw#>1`vP`TS`|i0Bo?K|MP8)})+~^Uozozp*qD@+hU7uS!x3`Q zFH;zZvRd2E4fazeydL$j1&B(7LVZrdWEC?Pdpx?;tk7oc>jDA|1RSkBF>a@)9@!;} zuL9}S$t83zFFpuuK|?DuIJ4#*7>O!k9hE&eeEaPWBw=OP@eTl{qio(G#tdK{Lp3*9 zjBoh~Wb<%5+0-YYrGDR)Zt9ajn3c1b&7oDOSh+5xp;r%~MgH-SAd32-bqfB1g9k6d z6X|;T4Y>?GxLyteFkZvt|2eOgb=k&c>$o`(`;eZZOymW4X=RY|HHwi&*8ml1+Vdoz z%zz8XMtnf!eoPglCK`!_wczu+@Y6r$8rUe;j)JEuvPoWO5y!x=){d}6W z2j>|@?!yi|on|CTR(Z}Q>5_u@?-3#FkRxFaS}yU!S^!6Iiyf#B2y%%C=TNp~V>pH% zK_bUdPH9tg3P-EtAm!=D1u2W3@&;7<)s18INxuo#6EEp#gjZ%;xPWsn=c100g`{|4 z+0mAXELgOe(4u)`SnJ0qN$NKzu(`ghXKWnP;+G3`I5$-r`%(flHi2&s>v#wYZ4pM~ zFTnk;Kowe~2t<4QCVZ{$m&eRJMB>0$3!oo`U<_ANW;g z!xBup7Rk%QXVxP#&^CrnLsUy*;|$l9l_%dt4^6jq1_sUQtCh*K)`Fy#8D{R;hAWcA zS0+|S{h|jZ@1INe{(+TAvSwC60C2xUQE3%UhNp<1oVQ!2_Fx7zcBRXA6{MrI; zsdR>uxKdjT`)EZa%Y<0T>^_8vTcobTx!L&wKRB#ML?ys|Y$Z!53n3#p(FFH72Gw*k zAw~Rh38>5v4$*PKJ^Iv6O|}O8w~jmeL|%JHu^t9H*F+%9CIfu}P}(AgZf~&S>?U0o zHIp>YGsQuxbK;lU;VEN1>a#5Q&?lT;mN84MLKP-MtGe`Bvb8qUr}!x>{++DN`q*?u z+pft%rqvh5YfCp3G4Is8#2YA#0nh-JxDnQKmjvj2%lmHq7uSwkM)4W}+jeL%0CXe{ z@NG0KnAVEK{jm+|rW^R$Wy3WCfhve^3xWcx-Lv$})%dA`>}49i`Eq<^ zi0_yCdm<;rNQ`|7X^A|=W}^XvAUFN#Tnn`2E|Q(ayM@*f;_Ar^c2~HT1|zMP>bNC5V&EBhb@bhD^`4!NvYp!O=U7% zx{y91c@5f9N5zE^#_^+8Nv)hk13ah$iFDU+N7dhUpBHiw=)E!OuwA3M1H%-LfQWSu z`5<;6Lb~ceHF|Sg5BJNF!D$(g?6E?7M>($>Ie7wczAo`}c;Eg=TOW z9(qg$QK&$; z2&>TVu`1;cPmubhHnE2A0$b$=a&{?6{A?9BA*op65UWObJY0=PP56W$2$I{~+-fqZ zxKZb$8|U=BAZ6V+luNuB1{=5^!^|oG4yUa;1A+o6xcGC;9Je~TQpO*Q4(pODodI$8 z-0m>;RQDkghL&7_S~E^%_CXOQ0>v@;OBt+KxxOV<&lzDQ5YL5>#8#!-;{&MTPRw?> z0`KekK9EzN9#AAJ075PU_4(9p9aHUnM1%%&nHY(J>bf;DO~TRdI+=0k2uu`@B%z-eK=E_5t%Z zZY+c(=&@}jC6hnv8maCu(5Q>R0^oUCKj+3kvaN}=?;R;|bUCN%BDXgfAx~qRtZnw4;$tW|h>h$ztt`)~Ae;6`rVCs9Kp`tk*tq%{A-ma;Lfpyog?q^M9!aR;S^eGc(N34cOw`Knp~|j1tsa zS+eM6EVkIzO_K_xImW|9cz;!H^?J%%!niSUCP*rKHBCKg(#GIJ-w13kZIJ3e*Gh%XH{kraqV%-dYt z*X>$o!Al2&Th7IsqxfQv1(tzXRt5zJ)Vu5Br;wvW5%3Yx?_8e#DvTv9e%$Hj#m{oA zFzi+SRrm{9qvA--azmVbIP^XyD4r)BS&%F@P&AVMH2uGV4V=ZN6gvV=Ftdyj!_3dH ze915)e+#)#MTU}p6|xtT=AZ%C3>R3Rriy8#{<2}` z4kS8vfa2A;1KbYI9Z)s#+<~x5=K#DP)zt?NUEfs#JxDUc2ZAzC%_N|Z7G#=|@sP{- zRqM8ErL82*7UiV$FlhBsp}g70Nd~)~XV}M)N6e%RjTWCpE>n)*MeD~e z;3@7$!z#WJuadP^4^~wos%@R+!DaOWnUR;T&0oSpPWME5woSOj6W|FvCM~`OqgkDl zbOfHbygx#ZC2bR2VJK1DBMp}&XwDXXRm$%ElBaBN)j`3H;&b`fbKu@_G-MB3FUvWj zkrhCZ*K0V{VmkbC^!-?bH3a;IkHLK5 z$rg_h?_RL%T){wc@_g)<24EOCJ%}9<80G?j^CzD&5C$MH{a1pwTq#=N@S#9?TK-_k z?2{FJE{t(*3F$jZd_uYaGX`!Bg0NLBbQsle zxWgAc)ea+cN&1TzCdE^pDb@k@r)v}4%b}k~4ZzEJXn3@KTq!TmPI7Q9TxNUN&5uh_ zy8rCh(|M##2-s7`gBr9yC$8RkIV`>Sz>`3j+#5ChlCY^6uuJBlw=w)X?>p)Wf{Jg? z^aFw!hEA+m0N_u{FmQDk#2E%_upnN7m-FfI9Ea5sJuaO;EQu%c28vk7Gue_g+Gw8B zambAJVjt~X+^b;xkXSsCQ;5e1#z zapv& zn^jN7?bN)L*(#D*(hkykjuIKAl9=7%iotK08{%5dGPyE;iH<5jkYaIH-XbG1XUgOa z8}5aUZFUi0Za?Ds?M5_oz^Zn2m)dg<5S)w0YUIiASWTZ%qNq3|^r~C&%;Iyl&uKX6 zk9rv;h9Qmve*)f0#-#U84QARvt_)8LF{X1Fq0BRe56DXT^P}-L0eDf zEwWF!rxNlcKgLB%w{-p&SZOT@*6C8f)7n8`S$7beIjf*KM8k*zpv^d^nY|SqLaw=R ztiF4=zI(jB+y1ty+^+iWKz(GIjIM+&`QLh7F6hMLHYfk0) zF@RHd-msK)SHKxxU_?W}X%`UWJm8EI%TzVcszEYRE>snEkAnanac*h{|j^o z4Pkw1VxQ1*Az7E=WR>_1ascS1;UEik!8p zaQwMl<(wG7L(Cr^v7CVX#+hJTiBJofL<|@@QAQ*2YxPCgRWb0euf97_-yN#&j@5S$ zS9i2lu})QeW_F2Taz49MXgciEOtS2tJG1L0Jek*J*EiXV8oe&txyMF`*Jbu^af6=j zbvdBI^1AHvk^rhIiLQeQk#BvA>lam$N8<2S*kwAwr=SIFhMZ23;;k zIMYGUO|**>v*6UepMQB~mXtmUua`g3&A<2l90>jCXrcovhrn;6=?jl~wHFM=gTaIb z2(quY96Oj6I>s48I0NIs6$XN$NRK+{y9LC@sf1lpRj#cl6JN_}fpP2i-qmX}pQ19d6)$#kfG^q;z z75Xu(@4hu!+K(e<5nkm&mZ^1eM*mlqtQ%$fN0@STA8MfozZtnB$meS9mw}Gi0d-;H zXein5r{;{1SZA)x{wwe(frLXw{tDrX@_1Lp=$s(M3#2ey6Yr1IGzo}gUN?G@SAt?} zhJ-b{M?x+N#&hZ>rZ5erg+AnRNeU;IgRUn9%~hB$KvMMuyJ< zP^?bUW%AZKNVQ%IWT`o)h}k6o&6Y;uM|e&#+mw(MpFzjwK@V9UwD6rEGRc~Iffc?X z5P?p-^vagJ*n{Le_>cW)bLy(RguqS*onxC4%Y%x=?_%H|4at+p#oRMKKh{gaG;1)%%Q#|FS?4YYreFmg9Y(8gWnU}>`LMFosoNT565h6FmPh=wz_@A} zhGH(N6{urOF?6Rx=7(@*LPuLeF9WNEWhZp>5G*asexq9W4|6xP@M}4jh4?oI<{#2*FGNr%n zYlh*trJS%8f}SdB$73E~4!x8I!X-Yj=haf8f?&P{7#k@6Y(RTMlOFh9OhA7uI|BJI z<#IV=u+8@$V13nuvV0!=)?C3t6Ta{ByccS~uTLR3P?D+Nuaby`^QQhJk1HwVs8?1` zJ<*#_4N12lU06>}ex`~EdW^dTkaV|7MkK9dj(I)3S4AR{?s2i@>Fen(Kdp(t)E`zo z-L6BM26A*oPWP&0?CBmAIh~visz@cdd6BxOuNR^c6?8tkZN8WHKrQ|a@3!F~biu#j z-8MXAfnvrf%yzK0EbO|pU)m?Oz`_jrqc6RF8AV1)-E?1f*8YrasW$%{A8h`4c%km_ z@bvERaJV~W@F#R-s5{BL?))O)`KN{Y!^6}2!^89J&mW2e&M;Zc8aP+g8>7CzP+xd> zdS7@r=!?<6I2*FS1_g_`bu8P!ROOmaZn|&81mxR`(0f>)vPm(HG39_woP}spRFAbr za)&Sm;XpDK{0!5HWEiSqE1;sFF&Z%}?RSG^kYD!3*G$dabo172J9f{`+;|HCVmTbs zB1e%##CJ`o5H`^QTYefZu_T_7{Va-Hp>pCglH*h(5iQBQO8XXzmPiz0A=UXPuPPgA zN^9&N><#%1VaukCZ1FK44bV2<3E%p#ht z!dKft^iZN?0E)9gs?>tUg(P)?TFZjLlq3M` zQIdehb-gs3qzo1`K2RVAjTpXRfenq#S{bcdKYcAnz=0}*ZrPe)?|!0p>6~{`n=}>7 z2>WR=6R*2xpqf`~uDFS9EnHMn%?}r%8Xkg1{2OL)JRDHXf&B|-Lt~5M0`q6m ze;?5Elym2e9`%RN&uJz95Rzli3q`S~+R)%{Rf(uUiWRN7=s{U(rqSY*Hev%;@IvyF zcV$Y(C(C~%oIh}ku(N+8emX5~BV)SDZ88wP$W^jzvihgNv|~CyNq@!%PtD>Tb@cDM$w3sI`yszY}x^z^hy0gJr*17kh2C&Xwg@9b{Xq1inEqIGm5DlIXKx$otW?9Nqq9nPw_s;k;k~ol)!B!u&b~d3$M|~U zkbou;V6k+YTt{za{ZETO(Tp`J}rv8h?qubMMc1DWbawsqTf0TP=96n!$@#EYVi8&Gx4^v2J zF2mp<^aHFww>wEwVz+D(7+uf$#ZdUoNBl1H>z6^cT@RCWB~Vg2Qx#@BF}%PH5$Xd7 zpdb~yFdZ%d6$+sz|zfXDZbgJ1RM;eoRYY2T9|9JgQmoe}S&hqrl$aly0*HXi-C(f6yHTbUH}x zY9f>M6SLCW&~i|*c>K-!F=uzcMGWKYG-WS&r$0dn`>~yDTx=WR1!v%i<8*gN6%iKe zwv^%A6XKuhkd{e01b@_yB*GqZB_Yx-Hvo!hcW84R&3HEFYImS{NmgWsGB113GDh&x zOa1ptx=cKCAdbmAqaZWD%7|f_*W4beJ*uvtmNCTu{;8z(V0mW!GXM_Ld!J!bAK&ezWJ)reCN*>XbW!qlM+YFm#EZ&0J0WCiqTun}{o zRy#qU)~a(~(HmW?{nZv%iC3v%7ssCx{cKC84zIuQdSt$<(_htcsIbmlyVdC&(=B5c za8Z;YFvh1~iMAwX$#TU!MKch-=l4~S)2hI>=TZx6SUN4zVj*P46gh2`Sh4`_!h!lT zr78`N-i1W9BJ9#rRK=pv26HSz>hN19s`~QMB%Yq_!dpyi9$2Xm`Wj>0sjiG7v0;1 zBLR$J1bzfz^)m*E(+@LxXkU?Rw9!`~{@#3E*?gYmC6z2rv*A;c8PtkgzyZ>S-LuyN zdnP?=6z}c!z-D34nMxe#P{I;qJ01}Mqre2;t$~_FD@5x84dIUO;YG?Yx;0@#Qn#d5 zno-6+ijSJEr0!z5mSoRkhbZ;B5PbY3zl3Y+iJuZtjhHT+n z5SOQm=(dhxHghpcwz584o!SyZFIFZOu1#20!B^^GAC`_>1S@=hQ(_Pt&iZgJ9a%8z z!~cqoESTTn>F&r}bYcF%s;wi!PSdyGD&PaVxd89P#^NVzWCD-FVWf{Yj3FL4mafQ- zu~k1Lz3SZ?F$Rkt^kp-}y8lF~gbE-yiw#JW6hDHL?2rgOEIymL-5~P7*F_@7s4W_Q zT6b*0Bv-NWutY4lL5tT&DdMcgo@Br7Zj0SPfKnDw0Fv}PkcD+pisobYu_mzf3#HCd zChE^v@lXqZh<_>i6UsD+mU~uL>>;j6HpRBFQX>%tYA!R<*{58a8|0P<8Ri2ENbr=% z*wLN)MQu4QUjfLf35$8S{>;{CC^_t5`3h21ht{dMl*xvob?P1!>4uN%LidRa;N}zh zMQ`gRYq#>fQ2Ifuuy{Y=C~@}QqE0f!|0$as{>RtqB?FZP>k?-N5qPwfwp!Z5%*H)h z1F>E=<{ON;-HBwYO3tFzyrEf%!|(8%cA2hP6ES4YCgE{+@eT zerFpRmR!zbb=D`P#0L~Em&oJUy+s`hW(17h8?)&RC3F)MM4gz6WKYC+Of{~5AqZe zvS=X$l4QS^_{xuv!pH2&Nqlc)s`nx^IcJ#sYN2tdL*J>gYO}7?xNxtMidt@$ma9_( zMGuTpj||aAG%Tbq(P|nVCcAbJ>flPg_YnSpB>X!zB>Uacjp2yyG9mmi<>9_ucw32X z!uLmcZ*GwB`g`Ou``*y~1n-OAs?mEU&C*wEKcohGH~Icw&DL9wi)ieHcr(VNESB2K zhfRs5r?pE-GQB)UI&Rk~l^10$$qvGI-AKU>{1V6ve}y5Z-*jJ<&@_ApFzZJ4Wh5v` z?_4}tZApV0tIWSCB&5BzD%S8~4Fn@o+X(U)6r*jX6$h|-p&Gn>#-!#*#raW$Hn`zA zt3rlL@IDg?=V?6;{&Zoj$HX4t3e6VmkXK0F97N44{pY=r8y;@C&VX!_pzdekF&J!G ze7(cuUbfM%fRf-+BXph9_WUxN!rnbgX@gPYme!9OYt2T>2djdZj$MdDm96MG%nzgG z$8*rC#9|}B5mJ4pv=$UiAlD_nJDR(qmoiV>EFGxUfurNaZxmopRi^X|tzR+##8pEa zf~isHYHFOfN;3&(u#wQC;>{MUBZgqqDn*)hmHiPJ8@qLt{gGU&Kf!lxq$}l`8s=nw zjNuKhaMYP$y`v{(a(T)M84}|laD$ET4(*tp*xb)Z77C2N%I_?6JUO3wOE(k{)3^a< zghT=fXc0=oEfSxhYE?phG{`QQw#=cPEbafE*RYoGvo^f;>1lWVfS*h&G` zwd<7IiGnX^yc(1eCsfYzK`Du4-H%UXOWon8sQNMRd5rj`-Y6tE&blQHwar7F|Eg^B zy%-YNk@}p$tFco|hnrum6~IKwyzGb>pfw{9Vw&kFj$s5*su>P`@Q7{Jrw7%oK5MGC zr1>)));=DgaS~eUORQW%adccp(j_5%$a)hwAKA9qi@hQ;*IR}zo_jtqtG;(hHknV- z@?sh(N|MN{%QsT~54+P0yTYy0NEYO^c0!YFC&|xU(dDzR(2&K;7H^rR7pe zXzfdS6LfMh!t%w+jB#ms2`^r(N$x0dAbau2UZI_E_Or!hgs1gqBaBCxL^Sr6<)XLok%<5BWW=Oi-L<%DhZNR@sBqVxnIHix zw!4m=?PL~;4~SXnBsTiNENLRq@EMV%ERb~@Ff;`XB(t98qX8%<%L_GMWsCFH)f0+L z;{n2lz-~?KaPm%EDClirSo*r;YZ93%p|a9X0?wwZNQ_?Vb6zeIhbM#D)}KOPgP#; z@Y9rB{}-58uF=Q!qb=O;(4s4CLUI3BW{g~|?rZm!QMb%b^e-viWBam}_sEYgJ2Qi% z<1+Ku`&93tGnp!gw?QM)VFMW9$`L!5O-cJ85&*oV%w9~k3ra5OP0)eT7Z(aDUMQa@ zb{zTe5g|dDv;N~(mRJ^M?`2{YaZK~2{El|8BZO#+s5L3oNcJqDi#CUwQG9WIH0(?qzRwyfA;s7=rFQA%b%G=UGlO?-8G87#Mhc!;ifI)pG zx=#SvmfhuQwrq(nwpOSW{vb=z8U|vKG8d)DQ%z_AyhX;H&?R5Lj5%b6uBF4^cC*JB z(NL}2_Ek5^aiLbnkX8_}xUjZT6|}L^nb{^6tGrwfbU=AR24q9;l?jK_mpYXB8d?DX zuku!mWsZlu$JRGeb|{vB;9V*AWS^08KMFx)OO(5Pw7fuZ0;A=)+;XE%IeML!N*OxJ zWYX&LN+lar@^STzl}pB?QM5JdTGc5x0oIrX!NCUf4*`VjSY*Bro#l|DS^kgNz>9u<}BopyNK6Alx5Bu8O%M z*vT5PhIV3(SHjV;vKOB@#vmj|sv8 zKs9zJFXj`r@!w1AOxN^eQ{ZM2;jgeIlUJ*RZYuLfxqM8#zRFcA>4#d3IeJyXFt=pS zrL$LYYr8?ZuXH0Ryg~*^$-9wH!<332kv%~3=&BW?7Hg65!%XLO$~oCP5I*ZoN0@SC zG-t|k8kNRbHlra|+M}@y*wMA!TT`@sM;ZNf%{C1q(;-oPWX;~NtlH2Z*;^)LIrWR% z84WY|Jl0>WQpFu^=ip9nRKlK6mC^tu#TPrKKJq@^;R8yFM^MI#6PQDO;eOmXuOEM0 z_d{>g4|{U1{kU!*otwxgJuZPCF&8c_vY}yNX)%*ZAZ32y1^huPNajh4R)tH8nG}Lb zTHJg-O(GlD^64+!A|@Vr446*TrgZOSb=w9Sh=gUZV2pUdaGaNp5&vCHKB6dkkv`FS z73Cvv#lo`qj&~%ml_F1uCK`dRhU>9n;BS|BLNJfnzj}au!atUkMeSxYZ8ovPu?&hH zimjDbxtChE)e-H62Bnl9!!Qds^$!fkG^{k-j3Mn6P#Px#E0c@)KCCXIL#RBK_UgOc zM^iuN4tpjO4-m{SJH`cKl^|jv>q^o6t9`iXmR>vD2qF4nBz}~bxZRPsTDH}}5x6V7 z7Nt00)pEfJ=8d&Ux#6{jWs~7X7J=@y`a}FSLZkbZyR5kEH$?u@T4e{?!2uZ^jVV)9C8#9)h$n2n*o%L3ee>AVqZ|6?^`GJc=ih{2{kqE-O?Z^>>EgG<_(k@WZ}qsoQqTho zBYuVGe%Qa_Zs+~_s6;7cxK^ZE zu;}+&ma18bqB;krO>xgw*V>KD7r)JOwE>)kX*uDD2r0KU$QynszffBLN_8R( z2s&YvY->mbqR@tnql{- zX7CSFKmGt@=4d4$Mq11?IROElpo&biskYwmHEIV!NmWMMRZv;9z|=kgE5n{hz(kgQ zDonz$58z6;vkFbj*zUYZqQ_BlX$$HeiuA_R{Tp-rLjy}+T17UfI81hMDl2qToyrRP z6lqnF4fUz45MOmFYotCEkp=w}savZphsU`mKB6YI56>aB4CshXm`y2m4cW+{BJ%H9 ze<~7G#X!OQ7vYpnmg*pCbW2&u*yu@uc}SzwRHm? zUHlP*(92+TEX}m*IuG1IOC0H3^=E1EE@+pYg}z5v+m^8WdD3sfgL`J-H0&odyl|$? zO3o-;A8MYp^*g}Fe}mRO5vf zaQz7-9@g9z|Db^?hKoB{%UBd(F#u?z7_fvt-s^M!T{0v-d`3jaN6t%h^wO2+_zXz0 zKRvJRczkaf2nU}moOu(sG zkJ*+CKygoN%`zVaCF-?>{(AI)0EeS~+AcUI3I3@$_I=BdX{uW+SG_EsWNkqM0Fh#k z)hp^O(@j;to0N3y7W4}36QLf1gyQC?W9$W{gTJ~Syu7jWw#?*|rvOR3*-JK#Ktuz2 zfZGUJxJ;)DL}z-{=g`&fuono#OZEUDd_a^1YyN~zzjwZ|0Ub+%j@P* zxl7ZU|?Hxct)uzQWCP{c)uqj< z>MiS)CyFNJwoJYHg6fo=k!hg@eQ5H+E4>TE{g}KUkzQGhDT4<@eO|(aeklzgm*rd@ zWH*%pYMWEpT0qOO#|-CgQyA`9w{>lPl|5?5N3(jg#vZLfcr7W7P}4B4!uFADkvj^b zZzQU}%2@$EF-jYvI&~Qxrq$BHv&4TX4WLl4PXU6~RL-=6HlGq7PAIDevdZ5q_X{=@ zD5saW&P_h$T8tG#`PlM|EDaB#um~l}bvG$D_dDDsPqI0z_1N!39*O z79$6K7yI1^-B-0n4tpZ5KpfU9`kDB1VfyyB?p#d8XyEct+s6mD3 zskaPBC%HwNjygL~-(~a`+{yDGriXM*hskqb17Lzv1|XwwPx;nd5i?PR}JIm54pU0-#MFv3OH!!jbbG{81}u)}&6`A@tC@GN#lVGQH^L#x-Cl+JA) zN4(Uc792>T7V{GfcD2E6MZaO^EbP~k@1Y(>(yY%$u;~DXOqaMzO{`_AvhDta{5|Hd zgc8xq$_Y_+YCa?8Hf;TTRr$Cv7&$?p4PlyY$H=y}iP5n}e5hmCRv+8AM*8}eni~n# zU_Ag0EHT_4WAzY40u^@GD)7gV0cOus%OR_d0M|4+V>KI~2BgN!Fn{JwocSW=h7Yts z?A*9dnRNfBHwt>df3ivai%Kb5e=TcTBjz}>frE;kt4vx9^41Lhk>;Dh+a0KiYeFIH zvmOYora7a~lWT#MqDLTSAnU$1rEzaFw(Ry^7GX@%gRsl3W7Tp_{UQ|cg#`@0UpOzh z)JxMr?8#lCL!1#p7lJ;kj{pH>|CvP_%Py1K!p@pbW(dnpqHf5iM3~);zr%f^Re@R1 z76TTLsq~fc8)g%6z~2F?q$`cym&ESpWTnYo4N2CqpI2>EYY?w4M0)y`e4@e#_cRlF zANO0yePim8&wlB1d$)h>Lysn}kv~h1{^=WUeB{nU$3A*OkF-CzIrXg*cRccyhrf2< zVLcK%Y)<{?v!B1^tNXtG(MR-%X#uKHT=I~S6n*y4_oaRflfkBmh`YlDt~vrP%G zkv36^U3i2JGVj4dd(oBHaq)zmw@^hCh0?I=>tOfCJ4$H8HVxt?jEMK?>8+z>$GW1+ zn6}PxYJ!#XWPm-E1of$8dmqyt4#cX&$`O5 z4qESX>N~yEpRwZY4O$=d`6Hx{A!&Q^Fp!Q7jjSi{xdG|n2qYU>#|FYAPxtVrI@q{4 z*c7OfmlF=A$GtKpj|haYUHgeYE;uU|N5C*hgEcl+`BQ-p+AR|)ougkfgAdWXc#M3k_O56n@hM@cZviB}f zc3tJ2=Xu;$Ro$vOC6%Po!}7VuWvdEFmH;6ul4EIC<5y!Mnenigtjt=>TBL_5IWySp zq1|f{C_oqm1c;0iM8o`+*=RXGKfriG8WW1cb|Rs+56ky{@(lBP(XauVoK~A6Gif2>>xK=BaJf|R|1|n z0WUkFv&apEz>(9C*JSl@Ut3`=w3LKAq86+t z9asu4B+#Bk)4tc8{8ztZ2N<J=c1}BjjZft*V|1MZDKqy^kHkPk-u{Be&jN;$oJ^ z_vpw~kt>e2^Y2LWsyjx?h5r?LRsav~1<}+!`yNL10z1J~7jTW;tGrGyZR9*3 zE zNpx57mMGp8#lV}H;7vRBr~8sz_$jLg`YIwCd6_-X(tlnV-^?u`ax9~zoZ(!IZau3c zgNaT~tYHKIelSd= z-`K_?PzS_>HSgK!01@^%RY$khvX6#+L+NBRaubbP7nJ94k{}ElC*Q32_R_F^-#;{1 z|Cg%`>noUFwkBQO`L$34Pf;)9AT0e6vxlFAIl9m3g7gLwx#vF&>HC7WZ`z!Cx5Oz` zSzgvOQT+)OeMNr;c@=@lUY%96C+LH8NItF7G!cul(p>Oz_yr&2y*W4nrc{``->yxB z#aB@$EnwVk6e?~v=doY>jp<5fGH2(MNA3)6^Mg$^0LZ!ba7XT4BEI}%-AY;6??rjG z4N~TgEO#w!#HYUX@_pT28nlu<{vQAl>2WFI6>A~ns7m8Rd(30^U%$@4`(%x0z}STK zvtK{aWXKwDp?nI3V0n5V9#v`G1M6Y#dmR7|s&9%Z6g`s=l6_V{K=IX@q9daDGVJqv z{svRY$+Ge5xw6TJJG_Y8P4LcEk%n#^VtH(ae9eJ>F;AlPGlSJ>zhlPSi^R|TBovKS zvnNVPH?tC^XjUaJX}J0q6>Fu;s<_$#1F_i@t@%bFP&Hb z;cVV_MaUD>NG=NYv5OncOycJ^q)sjlyvj~nw{#QG1y zX}_5_-GtTf$<)VZ;NtP78zz}aC1}{@T)Wupi~`TX_#Q))nj{N~_SAM7ENNcWQj*N6 z+#^UFLRJG0;GhJxQ~;s#`*rLX$VM|AQv(R_zE%=5`7_+4+rpIYy z-(s>fu`=d_*MX#eokC-cN57p(O23myN|&4@vIf1ZNs_Dm+nS~H?b$D0g;^r)^i`Ur z=dWOv9-J@0;O%!uehTrjk^S3*)gU`8Vwhz%Kn%kYEc=7VBx{WV+@SE9=S`xsIPaRb z8bUocM=MO{4eG9N0@?M6-$Q7X3FbiDLoBsIBe=^@8o?Aq4Hb-Hp0ag+TB+W}0Fu0uVJbn{RPw_`GF5+LZ4XpY zq@et#T_JR>9w)W5rd9CDh)k&pUXEWK>rPzjHIN3M>|7>+WGea}!cI1Rc4Uz=5qb)B zRrfkob6`JGyNe+^GB(Ixig)vM@KwPA`82(6FcRZ1Ld5grfudnnZD{9y>6=7IORu4~ z(vy)meF#22W-Vtv=m#wT4#+uMi81yC9R-~-Mp|YvqwJT_NCYZVzv-bm0ckjw5_c{- zRK&I|fGyR0NjfwYw868&R=p@@1yy*g`C%>5JG!Oz>j8-WYHb*yq?% zfx86canb}mERxy_XP30G`}DC zq3Ww}ALv5m9YY(;N*gP*j&MGhuVy&4!%zdx;7~)5k`0~#3%cao2#0kcH zZ^605I>8uw^P&@s`E;mRuAzZ<_820AWJ6exsnHn7qDpBrO97BJE0%lq5tiF~WmE>I zYrPsYFPYLR)(oxSsgY69#X4M0^`%*w5QLVo^yf{pe38!|`t*18^AAa}eUZ-}{oHr; z^Y4GD&p&aMKL2~r%6FDj+RX7rr;FyT;tAp^2!xNnqk!_?Lx~LXlD4(pkZ^S>bnxsT z)dDdj?tAp-z?2xv@Eeu7F@3ZE=Z(kkHq3=xZI2S6UFh&P_J*`b4xttaCE%H7J}}n2 z_4>6P0&-ylUK+H3+>pi^9wFbGJOUkTNJdn}Yi*-OI9=p_mQ76i?mNg7tYvgOV|Hem zL^JAOA2BvYM34;8L`=z}ic$a{HyW6;;hIPADn5biVd5wQLX!5(PM(EhpHU5Y zv4#6FL?g}q3=@};k`N3&NZ(Chg?E{-j%!uEG#!m{^ta}aCot6dO<4lDyF{7al*Js_ z6143qlB2{8{DyX52=^2e`P#j#Je#Hlk1Y}t>6)H=6^onSbYs8iUF}{D+4?h%kU_{2 zC$+H|KZjquTh10QK1lvyK*rgx_L$F~T|DNKzq90+zY!CrAP~2au#G-j_^$4l#E5Bp zPgCV)ZuIqPN^1!ih(b`R4NPLFaIf<(qipQYYkPfkK9B|9!8o2{2Srt9K6I5;6a|as zfr1aVP+bY7_EPNpV~L1C>Le`~uIphQ z?xa&HEslh_QR<=7;%)GbdP5~)lvWW!`oTkVKtlTe#=`XilPR16jMt{Y)8F>z!;1Kr zHMcO05%6j4SW_5?ZHA?dQ=n<$^Ij3RuW6-8;p6*gy)dBf%J)pCEWc+zs_%XJYiaVj zch%&7gWYdMDBP+s(%I~%oB3AZ&&|5DIxd$hE)B&|XG+Dj&iC@>VQc}zygDpZKhK9P z7Gs7~J!2G&PZz5Sv+ zs0|Gb#gNlv4@}@pL@I_xKY9;Un%YsRSawcc-W=80KhCArX@@Q}T}M8zrhC>LUF?76 ziV?z{if`lW;wF)w+GxyKjl}TZj=%qpqTBCh!G0sU9k2UW`Eh?fil6-Ue7U=YCxfn^ zqQT5TPqeWoaeqUD*jmIR+(R^`EybU~8ado%zh%OnO|^Q)xB4qw28UcqWmYev7;IUk zKaW-En=wxZU7e>j_gi}0PS_xt=mC$Zq@KN?T5Z)LK5of}0|TUPPIWSJqT0Or^LnSx zHLc}eP|K}a-$3XzeQj~@RQFd?n`v9_IeJbslzQHFf5?wf_g@Vj%iSw)2N1ac!GYL( z3Kc>gLs)_wUFegE`+fGria;U~Bn#H7aQTxKpF&K(=E*Nsi)X66hTW@g@Gp3A^9}Oz z@CtpwVDx+gw2^@fyhA34iOGoYgnhvFY__&UV<1=J5f@s%E3Wz8WMWT=JA6u{%?J}u zt<3C5MxESdU+JsAWR<`!`wZQaBq8cn-x4ExxDRTpfm4JIQStm#iWoMWy5)Mm&wc3E z{YL;wKXqW6eQvdXbn(~xBOui02oh2C&xh((&!{_8EQD+IIrihK(yXr}c|b#7YQ4}; zPL?_t7sk)YGH^)YL___FA{QEQ+-%WFqGl$NLncd@=!89Os)^>`W)n-ptrDGVxF-!t z)g$o8FL^n;xB4UJ`=%6rK*w;HraiM|q)Lp7N6Mi-HLAl#B;pgBWB%=O_ULX4cGvGl z?YNN^2~~lx_Tv@%^4hDT3?VUn?>mY&gmfJFii-e z!TJ}nQ?`A1j4|0O?0i<6O`!;laWK82C=51yz@lxo2x3Z)g*{OF zh3kUr1i$(%!Y*gDioRoqxcTNaEabF+!u=L>gfwBr1{w8otJVh7d^ko3w&_OV@Tfs} z0~p}WA+HX&he`f2A>Z-9WI7jj_NmUvxD)9RIzQnpW_C7YC&5@ARda1r-%!BMJyCOf zSZvDXUaNj;n`R!kw6VN%X#vI%UR2_+I1Chcn;}57wunr=t}|Pa7WKD2@H3yc%y($@ z!34yeeCOJk<;ar?%BXES4k%=K zNcT6ew^5rw5 z4grKIhglxd)DsG)j`aC;gczv#&}bRiD-c2$8GjfVh~P&CTLBHO??mpC|9Z|gt@4hC zYy_4?`Jm1=(p%G=tinFvt*sc}+AX9okZ4^iX$6N{WRC|_Y>VZ=sp6r^u8gJ)m2VppgwNAnQ?>!G6skv#O~>Tos1Egp3fBGiae8$e@Z%BfKG**ZrSAnvGW%Q`S-9dxZ_6d1RWEJgHc{ym}dJuyxKyHU%ZnAb@V-Rw6d zE{JDaR!exfKBh00Qh+|DFM>5%5Yz-PYSd%^v3nB2cu_|d)4jA1D(=Nxs_C$bs&AQN z{9{pWbBr2cLFW~NL);O2v&70ZNhgx-IYT;pTAKkVdWIr91)1Jp&7Dl{ku(G0^B!!7 zAW@NiJt!g&DX%{l4=fbgiA62@9HO;8Cxg5`Pev>I?h2+`S*7=2QbD;WM_g0H!jQm$ z=UMq~sxz3w*Ha?-Cz7|32#d=Dos}9e^jjYr2p`+mS*C~85OZ+5=AM^X&XEty>2Q#W zJA;cBiViueK|N0W@?4Z11AV~If;edf=aSdm8KMqrjI^#L_?peX*vwb-!6KOsla~DGa!jlo` ziT#p)9Tx>{NHsz11`pkVUlB0@bxRpa!VO`~7pc@`d;5?|ZO$z4^^T(7*EX4^1B3-r zlm$d{A%@*e=#0#kf)#3Dw{2kNiHYSDR==4VX^7SDZTh{{elwI7d-eIfqx)OOObac; zI%sJLPyqTE;_z*YV#Gdqsu5g1Ry21`h`S7rQk8Ve~;))=2P**6^0bP;pXLN;v zzKIKK=pHV)GHteUNXT7WMwAVpm9Npx6%#ebxvao^Vj`sNL&^_I!y&xCURi)#pb$Kgz*0;UmKlWtuT?CeLY$5vP772C z^aymO0e2QveR)Uzrn0q8MT zpbNE?%ljqu4jE2_(YDV<;+QyOrFUSgk=`Mj%@TSCBilY-?+7DvJ6=NXK;{T)$50Qj z$Z9;bpYg^Ge+xd2L4g$cX)GN@RoDm`cj=N1}rLD>sv z2>bc2t|G0tnd}~B{PJo}iL>-YWEnL!a8c6&rHex0ZSk0*V5v%>=%(fXf}OBO6a@aD zAoR0#%?jY=B9FB7UOmTSC-9@<-9lQabCzfohk~?7$fb1UYo#m8>fqHP3L6g;gNCvQ z255Q`&zCv6YJvi~GFBE;BlVvhdi1~K=8~k;eUqD1-WO_lwSZy4e>J*@<8t9IFRE#o z&t|@+6;$$GO{>l*f~GYUb@no5^yRL$RfqbRi6CfO0h@%yTcTSogHNTlW$N!`a7yZL zsclWr&P!@r?W?bC1>M-RE#^aWHAJ@%i%V^b6s-@SFe=N(f0No4a+S0#TPi{Cdl}jm zgf3`X%>~+4bAh&HTTo2fB6Y0ry17u>!muZVZlZE}rehUFQ%&3Qk6(_qCBm&1U%s|Q zWCV+~)V9o+fwuM8h1%9NUi?_|BHC8{%C)T(j1)CKXj}ec3$?A4EViY!Eu0+K z5gRvFXH6p?Uq|(X|qEExf!->ROZs z{}0?lnn9VN-upd*JJ$pZY-wq$5{FHILl?uRWkSc)y36{2JP$Kb1nTP6_4t4=&;H$j zl8qoJWG@U1NX$#T2Q_hj{4=sGcn_{8&56kx(gzZ^K{PyZbH37x`gOK}4GY{lZNAol zoN}7yw6`4Abh(!jzKIRY1U&^uU;)G6&}sUSlOck&EE0tdx=xOtE3%3w2t$usxP;O= zpsX-Zyy=nq3A&Hz`i73hPx4I8)27XFA+*A8W*=;DB zvDvIm2T(U9Z{nJerMk8`8pm)4nKHAR*;IlVPIf;M5@UIj{j9T`quxd1vDDQ__ndvm zn9dGtyQsQ1D;_WjW^R7J)*>4s@+<1;9<;3;M1IT%6=51pTElF|)BWVuZ%#y8uf&y* ztnG|Qrt!@o@R?7c)Xc8&#Z41(M;@O#6?IiJVDj{<8qt+~b5TMWR$ksG(+?KP=-y5r@W*hA30HntRpN9L%+#3~K1U0L z1HLM@sSPl0=JOcuW-yvW$}H&{$9bqAdG=>Bxp&BlX-I45^aX1)0+0ojF)rSdVJ{-& zN=@%^t6p!2A}?^)n-p{lO`p!t1UFyY*_o_;94isE+gDb*GuoYOi}#Z0Uj}zHnh`(Q z=19p$AD?P>=i2-wqCz8@>k*r4?<~<=OQ#u;^CZl5D!ZNR2sYQjmto3=JQvb3Y_j}Z zS3x1BVrC*vkuhU;;kcHq2$3nFOtSY(z>y`+Lguu9uM9{9!&HPCuW+{V6~Q&%OLm7b zVJ;jJO!M6hx&kv8jN|*T)AI{^D~nd<_)DPEa`3y7OG*1pL6vi`mM=GP@vV$(z@2`S zL8fl4ykeC_QM42o$=Zm`PUJ*eIW3c+?6x}3OI7Gs%U4lN$Wk!tzEuPjBk9g)4;P5? zRxX$}vGodcm_s4MY0me|a$9BpY)QJWDNVU-iE7PzFc^^^j4YdEv}WaExLj!2JQ+i8 zq`5!%ax9xuDU1_6cuB@d`Bh?^`IR!xd_Lp+R>e4H+JB#nb4Di|e`ky{|3}L>wH{v! zGTIq*kz1|9Bt&v4I<13XmSCNt!s4B$A=1V?RT=6FM!!Hh%hm%#R8*2d6%z3BnCIF5 zPcTmo*ZK~aCkZsZE#^tSnJZm z`P`GJMnnyJMHDMAMklX~B#36nfD-(Rn8;zd1`*vOix(D=jffXkG%v=}K9@^6>2r_& zq!dg=w@B*q0(i$iIyC>0;+eJ}p4AAB)|tJ13M*6-zd64iW_%3T{?X@W=e3TkC?gHl zHKJJZ+T#}UI(07kVc0*t?<0Z&`w^L0q#FJO&7vJ%D+!a*Q6ilYaV_zpLP?d0(adDH z#~I`U*(`||rQgKt#W>7&dAG2LQ6SngLf@LQtJ|qSrkzMMLldFT>YxRZ0PZog6Po}6 zQq?OHe(TW3zK#X>Q$*Jyw~b^&t6ertyN>zG(ri$ zdCIg5#qZ!^ zfa@0|M)?I1(-BOVg4_IBX^W_Gk5hj2R*#oAYAirYCfZ#?QwL+orN}02 zMd5>7%#aVp@2)r}Is9NePcB`w<`go|s>uDS_;%LZ*RSrHyKptu+yS;{|6^TrS9!JJ zY~K3+@_K8q-dOHSuD8pTLk6sV=GSL8ibbAScA!dQwFU1Z?;A2_+(BI;8TW93a@q+!3Ms7Bn-fga*g3{wSEnhtX*HA5S1OtV8+ghbPlLQ_VL(UWT>p z^+KEva~MiYOx_;<&(8gkp{|yuQLN!`Bp7yAqcFPt78*VbPK1p|M`DYaxs9mif4(#N zYnsd1EHaaD9d>`M)N5q+(ESD7la6xO9Z0;PNU0ZNXo<=$>8UoJ%P1A>$bRpDrI~4S z>@!)HekvC4Bm1J)h=?r-exO7QuCMC{qHl@AY=G^ctW$-7u($6Hcp8`2c3S1A7haVT z=&qvh--(%=VlAEfZ6Y9*&QIIW<2>FHy?$4`%o9aq3m77uC7purCn^7`ewO|!>t~O@ zs<)q^j%WM=i~7mVTJ;muQGX_7l;y*in2T2k5c7Jna#2r)uVPPNV(N({OS-GLQ9VKU z!md(mS=5sdQrQEO>?-yIG*M56JWST9CkROhBgOhfJz2j9Cec;w32BhjlR@8;Yt<7F z%iSny<)n!VNp*e7WE{#iai3i}j^#tMG?VK(+^m73{*|Df6BUiB}x$ntp-;-CX zCy*F-%XG1AQBQ7O)RSdbu_xocCmr9D*Qh6uT}N`8V*8@5>{-;64%QGVmjh75TjSDAU-OB~l@vU4?B;Ug2H9Mm>a~a>B`~a7Z zLc62<)jOkmxS-gupCu=J<1Q|*+8N!!h2VqNav>B!v%PU=bTb#ks2yAgKG?=(=gw#= z7h>)=ak2P>D8FuJG|n#^k~tS*$k%bXerGhsh3M{4E;z6$uH2!1x@%$QWz9D?d(KN5WPQfQTLdkw_cQyAJ@M9w@tt zwh?z9;Nj5&03K;GdiR0(-ED@Vwz8*G-#}s48w!I_BzX4$!_)(Y87XX``yhB}ZEF(l zm+k{Vs5bzi8F9J~0Jt6i@W^iyDo4)r=mFDX;RW3{m`puTERMwC?gOS?514vHZn^Ieo*j6wKAsIBrmxg0wLW zo3I}SR-y#cnmK&IZO$=4tnponvOZ3%R%a6LB9lBi>}D|SkZXHhcP^ze(G9!MA(Wi5 zL+J(Tsym&%F86@2B?K}mnoiiu;|r;B8``-5Y{ND;o<9k&bm0xVXV^RPGySv+CO@Mt zo=gRlQ!+H6B?TMvuzP}H1$_o*Hudf9F}fibJd zGX%3pZ|HN6ed5U|`)Y$7I~eNX(AR6s3RwLBN7C|#Mqzu7=%*}6!)}grp_9JbUU}m9 zk}w_(;~GUN2&A;ay-r2IA?uF3KuEw(pkt~?GQDj6oQGCNd8(82T`4US>+tna5;m`_BXV}jk(E-53`5W2~1bdTthfsVi6VhX_OlZ=q ziD`b#=4k!SXg%fEY>C(Hir4AR+QMz1JDkRxi|uBTUGa@v*@Cl)9>$FO@Ej^7=BZMf zvn_MQE9fxJ;El3AzQO@)w=VlbbEI9|DCguva$zI+0Ie2?bZB?Z{<4YW(nk1!?&;ov z-2_ye!~W+E&cSVP9&fV5r$#~fwP!zNm-s>zKq>F`g^f3*m#R0CX3Xof{$%{r#Pt+&;5my0c3o z9_{=SU24PzrJJMciknc)NmSc;t$tpkyIXa)PItHIj_iN;b#B+)8r|KYyVbh8Q+H#! z`=`2Fue;arso&f%UEJlG)1B9+W>qNRZ3M+^xb6h2WVw3}2cd3{`iL6%CQ}Ym(%GlP z4QOq!0f{rrMd2yWU$--=Q@}RC{GYDfX|L%1PVTX=TKOH^4}|;Mxo`8@ZP_Q4cq4I9 zek(;}q|RUK)&75?@A+xph$Mx^98Hnu23Bk<5}FGiRtXGP!CWA8cNpWuaX&M zP5w$Pur>Kc#;rBB1}f6gX8GBgxk32I8kytm+?rflF+t16(gYwVZY3AT>Rg}aC40Ij z=fBO-KeKVLP^mHd?k}NAb7a9pk}F@6EWX^2V$CtR^6TOJKyXz zULo^G#X8v4BgRNh5FPE%xq<6rT!|rePo>kH4%ZW0U(FR(*IC8&IiAymyTI?)a6Qg- zyUr}3dv+n~pnmyTs z-JiZpZ~*{hKKBy2CRm$g^$p^H*kHRuDuq?TE$H#3;STt?zJ&D7 zLN~Wll9=61>bS0)7-D5mLp408uub@i;E@OovoF^OxdS(?`ewbDXv7$T4ezW{ah-)@ z@0l)EcO}E_hwa_sTKAU_rA94QJ}e_>*SbHUq@KiaESh$$`(20`u?VYyYjLe_f3>{# z<9U-#UCV=U>kwLK)8)cV_5dke7usi403E6+bf79g{IPwlRe@#r!tGKOaC(ewYOM+o zFRUMX_OnKj6^LI1`j+8qHA!*|S|U$iKR6`{Lp7seES+wNmdj}l$$2YNgA6?rQwbS9 z0rALikht@l{`P++erjPGcG8tTqqI#Gd>>(5tfsGLSy0)@zCxbuQKskY{s7K;BHU2I1Qe7ic2%QQeW)0h%h+lBt9u=P9 zlgq+7HL74h@C3rJ(OB?Pj8zokw8lK#gIM4WB>}T=osT%w@Wg$HMYKzcXhe{zaWR#j zSz0R$w^h1Uzzd(&S`nng-7Zluq6PTVJQJd0*9u0F7h5(jss#QG+c;+7yv{D?C?xE zag$Q{6SvdzZTQJt%v*3xcaV-V?nCPTXLNR-QL6KhJV=!%YWVpAyaH9jEm#$p2Dvo= ztV^K+%`&^sMDmt}^jN?)I*0BmD(QI~eK#rz#pPDy`6eUI?f_8N;7R2W2I)=!`(6T! zgss^qjSeNIGJ337vwf|@D=F61eLACR1b=M>| zOG2ue$=8F+GT`|_)_v1$c|G4~x*LfGlQFRAcHW7c+C-#9c1)uwBM~E z8dpn>WzZ#C*d}*C9knMkVNZ*w9E9756=o0ywaL0xG;KWO(_se$39Pl`K&F{EU+Zr1 zi;Y#b!?*4p(IQiGZnj!yp45s0f&4|Fd(eTB?yUv=B^W_*jqcGj=uq~~dR_Gp3RSLj z)+6w)(M>kMxa0cVk8)_0plXbuSPP8Q75!@EYjt#y4kP1Fl{3ZI{wC2WNh(RcUJNtI zua(Iff-IADl7ko9xWJHhXm0mtOJ@1 zU>EL?4MT%v;rkzJj6jR^K*WO9x^+=8g z4Qn~phzF$CraI!8C9GV=pfvxMmXrFv$wxTd!{q~@&4}TaRoRNbhPf1u?inAVJRkMV zAVxuN#jI6&^R!WU$vL9J28SQFQJ6|Ii|&A^~wc81-{-R;m%jgq~U4Nh}`k{2@PsS zu~%$hVXqNC?}#bN%r`E)c-qd@6G9>!(CfBB zu-_a5kQh_=C}QYfDOs{!m*=v`Bxe(Ek^zJ2?i{8*uQiyB2Gdbb0bCcwTA=MU>d=Ln z+^*hk(_YeUa{+^l>Fc@45WI3Ct`KWd({CD{A;(Gq@!Maa#Jf7B=+2=SWypa0}IttxVR(9m$nFp~1#u12`NVaCmf*ywl^_iHt zMLy=yGo=FWtHDfc)ZxQ$?{}*yF?)ZfmqoF9`r}(!(3|HBFB!x$G5s;rzXP(FSY)IQ zTNLa~C!PgGrsj~sOpNZ=-w4LrdUt`fi}0T*Zt`@DX%17%egrmOLFsVe<&M?*ravNI?y_R5MU#-{`p1Y{|dQUptHAD zLn!cGXmJujWAr2h5tLRw#$-~RR>!C+SAw8m$<9G6+GfU;%nz9p zIL$T8?(As{&U_W*7YiVV@Ws#4<*%~`n_C$gsmb*&h!C*Fa`PU^j?B^z2!;m9Z6(D{ z+>ct%S&EWnm5I|Zk*i2=D?2%RDi+wu z6{9RaT#o^qMYRpAZ;~HUW8xr6U{)aH+xlskp*k=*KefmL6*58fWjk{-0w6rtj_8K= zvDVstUlUF9qg9{?g%n)e)mUUkgmu|pD3fZwLQ`dA7(|i`att(wWP^G<@t=MIl#pqz zEbv&H&I<9ob&e2~60uJ5{tDV*+Ws;HB@EF-h2h88zslGQ@2b3f^(ARg{MP5xy8qlV43Yck{9#r3CWh^{2`0g17)X#8 zEfOzUc(b%0Tw!9Mw~|Q%mbPh)UHY{j@aJJ)f27U!t6SZH@=1y`jAVY5CM z+u3dTa?S6!$5U4Q&3EV5f`b@9x@A`GB^YmRi3dILy}_FtH+wI|3$ouxBtoBb2R_0K zJ&JFD#`HDlk%($T)Em0B9}oy+S{@1NLuVym)&7H?P{Zuo^7Ub9hknyG)g^q61+mjyy2E^yr$t?;abdl{_}>D@Dj0o0Geohb6;B_eMM zy}>K?9M8-%w?x0YeNeaG<*=neKpy@aZ`897^^?Ha$(-MGAMY(ntmt3$7Nu77$=)LC zn>*H1WOW`d3rP7>ue*j7e!eUmjMq3R^iB73y+x$UrRZdDQJ)n(*;_3H52NEgHCR;bSjHVYdNRkb2y{0hGl%#Wfd3; zU2G_uHJ$!=UYkyRZ>*ZmJ^S6sYC6>+;J;*l#7)1`E*W#i6colM(fe{^c*EFr9Z*p#z^c7PEE zeYyOiV34R*5HU{3HcO26NK7C69316#!6Zl(+aU|R&Qlh3%#9pF&Hrzs%+~LvIyW%C za}(XpUDdu#_`cC5%4j(SegdRf3838>c4sLPDKMxMdwe}a?A+f5q&(h*h=iVe9SF)~ z$t`NL^^~^An{p?VGku`xC9USv`@vJK@n&uqx-)tkx8OP+Wk^m_D}P5IOie8a1d~cI zw2H^6_$Dfzg8)ucHE}vqb*`)`p{(h`n&83Mban`iuZ1k41FJh4!|NOFSu8`cVo4NQ z=jNm0}lkx5Q=v>>jUQ#e?ff=8GUj?e}J2z^;;Lu^R% z_4X&z5^2+HbVkRGpt*1RW+{`X&g+9krK@GD{X)!^^O-f==)9z^xr9fFtX@PaL zinhcrezrNPL9z(M7z!*BD4eEBjlv`Gy&UUqQSekf726aBdy+d(%kBnu`2CFh(|uU= zXSs8$-N~|mww|#Gj1*5-f?biF%rXtmAL|R0t$73;-`c$WnZ*S6m#`}FvciOXL;M=U&09!-muQ+mu+ z_F;WUymSLssC=>6TGDcYn;FxcrF2JC3R^1n@bp+^wWRK3a+p&r#8k;Omv~G0!KC;; zjRY$gtYhIPFVM`&y!)|B)`jk8X4I9XKXbnPOqf-e9iORFc?KH0Qj8W$GtlPOhU(X0 zer+!0L$k%M3oKbXlIF4GTq8;e>Pa8;w_@ZNT>+iEvn(;3CHTKe>Gn9UwGZe4jH1d=cjp;OQhy@K1{Z8NSdgLV!L!LuHMA0=B0wJf$| z(=^OlYEU;U#MLw%Skv4K=5YhwD_w2x+M#+JMTw7MW&wj?l~0^ZomNo!|A37ZSgf#w zp~yW!f#hRhgcTr8P|y|4)J4EkTGGZ60>tp?@;Oy76; zW_qXcMVcY#&n8VBIIy5KMGASy$jpM`*fSLk$(Qrm&Goyd`&;MDgSo}K(_mPEa3QmY z$#+I*{4(UD(#|YgwijvTDz{f~695N*4uH#7KtH|0+}got!tUfToDu4|O~$E;AOsIR zcu|3xz8dCK1z`7{3WBVTQa-j>u~n-nDVGpq(3b_T@AGlMVWH6~Y9*77C+;eA2@=vX z3R|=grfNyz?TD1+qbvwyB2o8%kGeN8uX`r)lth7dImGujZJQ`EkSq$7P>bR((Zn-H zRtJb8HnTd!sIUQ3=%H|y0JPPbpn1_Ou)z}qt}q?Gm0(^#MwEF$X0xtvV>MJza&1*c z5L15>nN((DGDShO84NDZn*lt6->+DVrlK-O_)_ zi%?hbVixR(S2pNs+m_mXm+Up^5i^#W?&%F|odWemWFo9`ibQLyAJ#c`I_o_)aL?<~ zNY$O57Qf^1nP9|Xs8mrkR8y|K0&b^rHnUC(Evan;mkH- zneeRrBn+;Sp*JBe6YI|DUp_*rr~ls(L~LRLR7z?5>cM+{>sZkKPMB-sh($v^T1dV& zun9~O@s|LT$*?7uQWgjal?FO1!I%Yr;tSr@dDS7rS?w_*yFm%P!&c&MX&`1npi3iC z&E^P}L-Bf6F>_MQN)Z8!Eky)NB4EOWO=gfGdMdEWkT=Zj@1cawW2>={@7>S01pl?b zYS9|F1ZIUbaDc-q0O*Rn_j~I!`3|b(0KfL&*W}w&ppmm1x@Pk6BUnMY-+GMCuMN!H z3$`YhRwb}G_KEZwzC#BdMr-ntTY6BptkO&92uBkcHZYK^GXsZ3?;%3vtE(2-+eq(@ zq@@VKh%A~7Nf)LoNf{tMqAP(!M|2(889gnr`J*N~GEDp0K{5x-5g6i!>W*tx6x|_} zWSLjV8!nfsfM6uGAUlL~x6DEeFdvuf`?CDAaTPfNWTbZsBT_IiPx5ydBQLxt;QQ=1 z=*f+7JgD#?&`)M8ncEW?TIZRuBnK&;$ejq0UXYyy;RFq7L4zJuEZ|D<#KMgRVQjDs z_Uy<)cL262Sm#b#6IExLtT^@Vu7l>b_97)%D2e3M?O@|s^lF^a@EZxznDV4lyhid{c$t`AD72Pq*IF z*a&v=5sZ)?`Z4IRL{~jiUk7CnEKAf87_9oFK-EJeF)cM*WM1Dp78RxCM$AU`(EvCQ zYrYvcp`_cHo-x4{HJ|}AxY*2?4>>9W;Eq_}n1a5T85V~=z6w`$#DNQ^ z!pyj*fsmVUGcpAlsj|5RA_|+B2a#kEL`>wUAmT-imkkl}wi=AYn9qKsD6Uy<&;9P=Y8P)-rp4i|ZwVp}Ljogyu_u z1?;V6B5mii7t8C44`V~OuV|wAp_tW|@7GSke6?I5V_eYmGcJO%++J+)w=mFKIuVr* zGg0zPN+p5aL&ryT)e<1^EKlxVcY-EgTX&hTfrrasWTI^V%@y;souZ#=NFs^y3 z=(cv)Lp_prSb?jiv#&{k)CL?V46zMxJxsv^YDa)+u^Bqx;YyFW#|Q zlWuqFagy4ezjxj_n0hk}VWi98wuSl1AynG2zA5(gPxPW;O)|8m)LDY24 z+e8Z$HmUPbk_TX%eljsDy@qxi;A-Qw%Et80puL65zT#LfIxmW5;w zuJTS9bnDpRp%2Yya*EygZr5Vs8mwB21izMkX@*vmGo;!i2Z^Q!G&?T0s4up$<_JP- z^6NyKOzhVFwA?a7^D(wbpk#lIS?sAEEv`=DCU`Bz0}X-AI0c`Tca|3w3AR0ZELC~V z;nXbR_2T=v%w4wGLpys#Blw*N;w!RuYtsn8(jFf`xK;1A$X>vu-C38vhVDMCN%^x- zkJuy2yR6kLsPPBF*vY=gbMH&kmIiqyjBYx6xvdT5TrFvoRJP zw1=N#C_fy<6EQ3w1i#Wl6(N8R16R$gBE=x|o~yD4NE|Br{o0j{JHK|`plOFe>s4!7 zWFK%~tZKk}h*pxW35v)X2d&u# zgcy~cVB9b^LAG1%&qF~J_0YT-78%+=+$PgZX!2^IiF8{3DsAVqnNMfGq&-nYzZi1a z2HQp#xf(h3_c6anJfaT&sot@0eV--Q%h%c8BKGOiP;H@%@ob~C9%tY*d=q+8;!LZE z3}-N@;w2Fnz!^-%ZWNq>5|HKvq?fMI^f)6mke)NdO$fS4OXJz3@$~rPjl%oQI)$JG zqx*Mwye5)8egWAS_vp1gFbTv+lQYoZir=Cgz@$xB zprND6?oqz1R2VauVIN76*ag%Cr))pgM zSVaF97J&)%a!)g9Ro*K}Q5)qf4GKbGNQ5E*-qN6ezabHdFM_tf)>koQHZiINPr@d$ zC=Ck21SnR`jMAXYOM)WSS^mR0(=7cm%Ve2_6)Gb&B0~*CBk#>*%Gprj!w|_bkX47K zd6SSm0mI5I+;#UM*s3h65-k?K9{TiRuYaU`9T4`ue)$i6xO@W$_r9V2Ucm=HP`=K3 zE2`m=_{Va)M0ueFR1UA`9eB|Tk{eX5j2OH@)rc7nO9`DCms34N*BmoUFciWX>1Kn~ zIbw%_Pg(T@buAr~WL$gk(!nnoOld=ie&p|-)b#7^8NK~EG62Ac*YwK!YfPjb2rF@v z<>c4x8YKlUqU=vmXtIx+7(c3&wnjW^PI^E-S}Ilpl%hC7XgG}eWDIp2k|z)}9Fm35 zSLee~rDY6RhNU5?d0w*jXIqDchr|PF$ZYIbmCUxn=g?Z=b7-x|Ndu>+Nc}5$y3$Mi zE4|dea;hu!57FV`m2^jPSEt1*k|FDQM-+`+$PyRrA{BwaPeP})9*L-~;{!!RLSE6-NkJ4CaQ3M27mV1v@wFt1~0FcgzDD%g$ zVm3!zYTV2uEYVHkGe*mtWMbP98BT)d1ME@M{AQmfRAe+_54mm2Sgl7{@1vx>Jt7j+ z4eX3YO=cgR&VC~;C40ZAzTw`vSCP_umY(qC z-~4AFF(XF&XK-$C{xen*j+}XAa`I>b$te}_(6T7Paqd7)vSP36g3QsE%F|12fLmmXSP0zEe?ty`Qa|ocJ#8% zS6ADymoxwJC@%vmc}zQs30YFx!KaAyn`31&ZKord*s?g@K&OPLg~o5{4(PcGMAy6& z*MV}KjogE~#X9sI3M{LfxCGx~A(5&M+}udH1xQ)sdq4su$0luEK!P>GRFGhekU(bx zDr=qah{?2PAi)|TLC-U&OF5-$ObGG6^HmZq*7zT$B&`#LS%vw}Ta?zQQT36}Y|MTX z4ya}pyoR#0@HJDGR(a$>s=uRH<=^z8?!j5Hu0gCXPcKEk>v&V*nyBUx#K%ZDJQ9BCyy81N3TBPr@lvowOgR!22>z zw@Id((~Aii_$tLIj6ac2T+6Lc#Hj=cmJ1M3?CA~=WACFb_2f!Ju}vK}Ga(v&cPNs< z6U~-1Zx1n^w~GJ{?g{P?1}}iNeNv!SqF(`+p56gS4PPrQjFoj6Kxw4LPZE%8F^Ij~ zeVKRZ^5Q3aA0At(X{_uqD4|UkSSsO1kqzsDgeU?h_9B`D2j&DftfAS*aVhRW211M#sI@$4re|LDo9+eE%^Ig+HlpZod=Oaew zTTR6`!LG_cOyOf&enfPnkR8jCVAGXxpp*T2s!h7%Yz#4L6xb3GIv9W!5(I54Z(}dS<%X*b&rL zmaG<+bPQH#gWw=fz$!rMg>w~ zdjPrK75V~F^$TE{XIn&b@dv$1Yk3}FYy(nhu@Xt@)Fu`#h?7L+>3X{IXbdT=&ID0R z$%a~bj#gaMxjtQG=@`m~CKEDF5JG1%EC}WoJP0<%v-CkFqZqRRh0c#5mQ@1(7)-0u zbjDmEba-XfDm) z?gZDV{HEl%ep7xdTxYpb^4xB6xty#cL)6@CeYz8Sfh%85pRp5MyWa`JZ@CZif+>iY zN)u(dMZ~BxMI;cF%%Z%)h~{$i8J)64A--nj1dRA?UYQm3;2qWCMcksT?6V<7s!6E& zQ_H^I@}4ppJ`__q4!-_pe@?p4J1|So-hnvRv*)FhWWP8dVH8I3S(Tlm3}T;6@&6AR z(FzSbS2cjE^q{K#JZ--T=_`_BK>Ju}7EIip+yjfGNwut}Wfz`b)WXTof=C{(@wRWJ zdU-$&7YUK-S8%?dYtU`?Ld0oD*>5y>_7Y>Y-q>i%9 zGC5`-dyag@tOY|(gy__TW`=4aM{ZC) zwm3}_)|2Q>$HFed9Uu31fJEn;%Zo&II7C}BK5zk9B$Fd>P4cSwt@WldJOP8Uz@7XvMl$UdJIg_kc&i|T)`w1|252SkgO=#6Mm zeQ8>R1b(lUzi3e=TGS6MYFOPXqeYo$kto4JS_H}(E$Z*mqW+2&)dMYp`t0ZPkfdoy zQokFSH5yQMJEvmmfS|o%OE%FHa_d$zVMvDee7HaPNZpoH4 zcX4+qy&?~h^=kBLJ`5QjnnCV!3u3)~rP0rEyE!_u0o!ID z>Dy`GGz~O;`%o#hPo7_yHWk=&`!>j&^sU7O`3J< zAm+olAzsEZa8@r;{FU7~Ctr}UZMTHe@1e6*QiT}WOu*!QlF{sJj4iQFueh~imS`&} z;_UQ*p2s@bVvh8kjkk-Ryh5pjIl5LSYN*B_z8E`kBl||b7tXbH!VdZ1@1gnAa)7a1 z*hu+lHb`pv4$f6-2`y46xt3ExBvE7TFkoEbr4yr+KhL=#`m&D9h_Zj*gbjcIgXP5Q zRZa`(ef8nfhz)YisnCpL*4_gBzfWB_%*I-%x?5Xe^QGPAMh$5Lgufc7A{n`09E2To#Dsks9{UOrHj zaf(g(R2=#QBk)~Z)Vs~mr(Ok>1Pa#6N9iR8_gKHJXQ9`Z?VAh(9xGwW z<=5RavaN((Np%i=R^TXgRwyOn#8^>&COXdp&q zmr%v}g%Bku&-8(VVMjG{!7osGsKj1F#N$J(^*&ec&_AX}#*(JZR)K+pG@SRjsg&^vR6#rLCvr`h*lH46E^7Inx*+9LD_IA_Jg=fHqa$KxhxQl!Jn0vZR%M^&Om(O^sMgPj10Cwm`<3W7jp#=|fa^U3 zt=}DkU-ZK^-6bO&{q86Q#@--d{etU}Cf9zmWIUqKS)G*Q&(6ULI>^gMnvgw5PMp3< zp2sGm?@?H^}+3%sDgotUMh2JXZrgL^kKkUdPspb4F*UL8_({ z6k_VhdRXfud|^x$V#}_vEFaTXa35q};IK~uoj(VUW-U_rK$GK}Z)F>5i-a!AvX8_v zAtg|^mAQHPI?L&1Tl`Y5A0`-v^LSizdxx~2xB3RO9*?$fy`Ll{*dp<1^%f7(+zO0B z%d?-i?(2I^TB9ucfKD4rcz|7rF>=t+2%5-Yj&;iZs#YWzH_R-D0ZZ^76-*LcYQ?yp z8&zjS%W34-&5dZS%lW6qJIk%Ts)8+`K{bG}yu};>bi$c+Oryabh*%Yw4VlH>`EF(J z*LH=A2HyisQLP5CiFl4V_-Q9+HVtOqBs~yS9u*KYldbG-T{79@$Wz_o4s5JJ3v9uO z#kR6jeZK0!8m2VxQFM7$-;RYOx@?(0^zLzco8E0)Yn%)wXb zoh*IN;h|_{|FO;&4FmDWTLalSF%L9TGt79C5lh zpkw#K>Leg$GI@&pmd6tC1li$it#^UysB-F`s}UVwosj#mY#FmK5TQLCUVe-y9Zs=< zwI(3us?AZq28!igHOyy%ncJFZFG>K@ zu51CqQhZSPP_rCG!?x`XxC717bWDW*Wb%B&0v+t@ifgc!{nvd!mZ6P-g~rXRP=paF zOiA9XW3tIGWGmL0?hLY_4MOmWf$UPhreEI*l!u#wKUDU@Mxa~wJnPbk zSj5GRuzBm*8Z0b|De@95_XI$j?8#pw%pS4M$U2<;VO_RN zv>49pxa{k*^+m6XY#se7!@r5wK7!=#9@ej8K%@l5%k7c6fqQ^1=?=fi0cl6urnC3! ziZ6s4CP)&IDxfy-m#o?)NCb6CZZ4e&$Q+Z&wjlI#l3}MV_E{xzV8d+o=1nV7q$4;D|P` z673)I{x`nv&Rf|*%2;`(BvCq<%%mv1$j_pV4J175fdu#eAe1hlD6}ZSz6wB#vuL{X*V~^1dxaD#6{Fzp$(Qy+zn|rvZL)mi2UI1UiF`gX;#^eJ5XhTORrsFU9CC-PY zBTj_(Q_D}FwbmgL)WcboeM`#C!A;^vwJq@@@vc~3KV>M%A(sL#FV@@{E1B^=ODn-F zQIYqW!-6dZSGcQne{$5XPmkMp$~=&8pfXa(IiCPA2ch4@*cwgQ9DO>4jkER-%caHj zNZh$wE#j{sgb6(X?$y~Rh45I~5iNU;Bd8$(K+5w?qf542_As7BU}QOX7!tAR#;c=H z2i*9*NN(V|&Z?5H7U@J;K|5f$Ur)AW4g@S#brNLxmz$ZZz7)ZoB~4#EL`E3GAQ zvSvP%onu9b;OqX6Fq$z7TUB8lbvfjbd7z5T2Y-A{JZuF>BIeT7YS=1&FoG>MK+on0vUEVB%}t8QA1iT9%*gDHSZQBz!7wQ-YvWzFDRPzBrs(Q*|X?aI(6AD=HaZ>$e8Xxh~kQ}vXAjd)Mf&U9>2g0@`KAAF>nkPe~9t|_p>b!x%$2MtZ zNbXwA49u%wb^~4m6WtRJC*p?P-OrZ1r-t!({?)Kyyk={`!L_i_^59ye%DnNqwVi(E zign6Duw0q_B6Q|P&C$;QHECgqXi=le3Lc2bhyabmCM^Vb_5)U#{%!SFfCOi?fIx69 zAae^dz#FwG_rgUuT{duj0b|d8 z{vN$?9vgV%Mx83lbZn01QY3%a`$}ya`zzT~Skh)w5=*b$@7u3hzev3WwyEc=C|IT# z40Lj5bP4l`Ru&ejlfP`?mbI z#7ChaPX|))2&(m2EmaNOmTGpCw+(%$X1E8cJwY|$pK^fdi<=`(N|2dMluW*yV30a$ zX!Z1lE?IiSN)R7PLM6;Sy}<+C9ay2SvQJn5!;+L2V9v<7_ZPT{MRMMMSJ9 zSY$H}Q(%;gJ32ACJ^BmXV$Nc~9;zDXZp=bbK7^(t^f35d%6ZPGsBCG&vG6mZz{f|1Y<- z*DGYm&e$tt5KPo6IO>lycd$1WCW}wMQyLQwM{gu2fjj5fG(ULKoGV5paA+RAzyTL| zae<=}E_wtGORs8_c7edb+NU`$a7f0e1P&w-;BQbDfvyCOQk>}T6*!PC&#Kp7S19#z zblMC0Rf!&iSsgVYDu^CRb>n3Y5g%z#;nZwI@^NfQ<=69ew`Bj9_K%i$cybIP6|{)2VU$FUy)mmlt^1Os0637s+50Rd58o*x%dVs-C> za8c%Fu2*fekf49S?$OIOAky|Hdt|1~(Nv(g+;vQ|)>1w)1~YUG<4eK}m0cPy5IhwF zif)4ek6nE+guCAh3o@mB%%Vo7iH58v4$`wZ`kk@0w2bdIvNsyE2NoW#QB61J zbgC<7*E2zqf{hbAlXfEG)_^$iVZw-b_DGZ*V3XGOJ_U?vuT?`eQWw9DUU8f@pW+jI z`0N;sS_k-)OY8|c_eHX8U;t4)iW!OTJFz-Qs@ z4F>4lrEX4?)tY=f-x3JqILM52y(QpuLVq>osEF`ScrnqvF_IIrqW!Azlq?uB$x@4M zFhe@_oCIpYwns(6ZCd!aHN&m!GYz2C%ARO)i4_qV!-NBl#V}8PS0`@7I`|%Y0^x)d z6Hxe#)OasHkfPs@@gl~{PiJgjbe$4EK7*)KMr{`hK9+I2ligSjvVl&Vb8@=WNHKQ} zmd^7=QSOhhL0{S(4mk5vJn&<_Jw+P0JViW}_sEz+*Hgs#3})rgm!BS70QDPt zp+1=3xD?bCll{_A$F#H%>h+8uO-QK_-oiOC27>R(S1BRNq^InU(AA{bcqPiqHa1sv zKUejaJ6A*1ToFm4DVjf5-e@&%t{_=2GEWFjFt)I4Fl$G(-ho+ z-6ZJzGg$DCVST_iElrol2Y0jh*I|8N!Z;rUUnCfoqt}9pM$Qm%u*}J^(5z5Wm@$c; z(YqiKtFcZT+Kp1!R;-P!&FnDV3W$$cEUY7!HoDXLzMWqd)^GL;5{nKKmSQ)@F#y=j zSt6E?N|u3SUb-cCD9(bm$8YX>Jkn$QsMh?rE&1`wu6VCN;RK{re7uq;Y#lR@pT*Jm zwr;meT%`ox07%OX(8EL_JjM&C2PPu)*k0Zy)61KoFu=xI_Li4{JjLv!_YPw>8IM@+ zeSp!^Ax+F=-lz2p=1o?_Nho6FrbbSxNww?2Kft{$@N2UF+{&-XzB!Oz;|1(tWYDme zMR^m4^Wn+l6iuH_^I@snoyhCTB2~lgw5$tKl+)y0zMTCtE^-Gh&Pl!=sYgX0{Zntj z5UId)%gsIfWaNHDCBq!`q#sZJ7|eMNlUUIwIczR1;A*757kR>*qMbp?#$lUtayw2s zE$cC3bsY+tLPohYLLs>UjzUEI$Lau!HQ6p$uWjp$OjAfbh?{8cEMk5p4+t(DvlHuG zBwuDG%Y11)Tn{+uSszS_k;3(5)rT=ivJdD-vagP_(KYB5-0xNwe( zXGa>8L9Y+>XgYhkA56bk-jM%Ct6n4_`&gSR65vJsW<&U2G`OBXce9&gETrtKtOzOU zOcH}G6?MI#?s?G;FsiFs@JZe`BI~;rP+6cKYDmfhc1ZQdG#G!wvQdAe=Bq!7(YMwy z(Wo1iAlBcU4*eNsB??!SB@>LaRWVzu)_^;1B}cj?S`~-oMX5n5Kxn4JD9Zv7K*b3) zf>AJq(4`u4Un004L+BEq3pOac9#KosMj>PMt`#L@ek5Z{L$jR?{->of$H^iYQsfeX z;o=UEfSzbp69bgD3v+K91r)VN<9OLomBBk1id8o?ETS(gC?a4z)%BeOT{YkO<7E)t zwcUA$u?`~v{@Ue@tWE#bRP3E|zD2c1P7}#lIAukjVt44T=2-i1ZaM1LQ2_bc#A}i- zMaXogaPJAOq>_1r>fY_G#SX5RaxXcT)rnN$Sq>PBW8PDR@~_aC;Hsgd&Vh`8hQ4i% zBDaxKfNOD0U9z7-eOA+cJ!es|ND{Y<3@ajC35#H4FWsNQRGIG4DKuhVdNKP-OCO+w z(fjw9C$%#C8v3K!-Q?O=+`={u_Q{w^{34 zVl5VX)q49K#lC#+_oL^C@i8!PRmPta?DHmk$!!$sLYU9%$Fm;?e&T{m>Wma~@ls}N z-&Fh#46}ytLOx@+LW))q0})!)c7w3C(Ez*BUf`ZXX!rk&@7KFV^n6%ZkPlYp_-;XFhT0Cm)k zS||`#l6R$h9HYt`M2Bz$8{@+oib95k3WqO0$v~V&ipF3SvD)GG%tp*G+DZ~53PHD! z4)%LxA6l-FQ}woolY#t3 z`L%jkyT)fkN{}vS!VKIIoicd=>G}bhk(B*l(b8I8ZhB?9C#4xcHf928EFPmniX+FiMeTf{ zA{<#zUnzbnQUt#WF&il7S zKe#J;ecmshJ-EArJGQ>wrJ>lMR?`adI|$Y<3BDsmhy)GVlHkdiJO_7J_q3xco9XM^ zNEM9)&k=#?o1=Zus$Y$?=Z~uQ6h^9|E%BS(jXHEoF}+m%16*RbEu>?P>Tawvl-EP zMew4s-eO^a*v#Xd%p-Z&lrGd-Hf}k?l*4YU1|)^d9FIx1oC@W;S{M?gVdef+~-@FYw`E$-|(pK)R5yAtSolA4XlUosv#sa%DN_czIhWLq2Dss4<_Gw0Y^@g6L+R z@jMBXV>=HD1;@)n_6Xz}XJT&jD-cbbX`j$O*?vnryaZhASFGMH|otEF-K2w5Q1ZuCfw}H5$_LS7dWAPa%gj z0c(=P$Hm@#!ukef1C;HZYQABRH~Nr@;Vf23+f2cSh0WOO`y`2q+N7%WCKel)eacB; z-z;b#e3ej37@811%E*1mOdZo`e$_H3GL$XRr{iAw@Y51XM8@zC@6}i*aOi148Eq*^ zgaR#$M$l)$BmO{qQ`}#|14rUy9NiR0JOg1MK3X0n4Y48lFA(ejKt1;eyu_FYC}u2| zzw;Qb2E0!ge=zpnGG3c$<&>@KP4v9K(iIFtkA=DdWsy}AYRz~gQJu2v-$@NbIEhS9 zHL{%jU&LQQR1Cq##3R{yD=R`nmkhGWr45Vb(qihod?Gc1a7~!2V6{w~Kl9u7+gu>7 z+Usu=ewmr!_+B2dIF-YSo}|__&w@;g=*!Max29{dAi=6=Ukq#F|6%T3;O(r+JOB5x z&vox4FB03xiS^yPX`5(L;tegJb5>L^Ma$*yIJDE5+OeN$Cx`KGFlGGoW6cQ!3^Zt} z=md=x+9*_^VnvNMjwg_6)Tprrje-?w#2^tfHEPgQ{@>s8toPmfoSbuVg4)mD$l32@ zz3cL<=f0lxtjo-D#z!R5R=D+|>d7L;i*}C(+4|JUM-!J>iwn&dQRW&`bt zM=SS4?i}dC@}f(zL}fyh7rp#)7GQKLIQ&juAofdmvn)INh+-5P0lV zR9^ghYuCtnMOgDEN7dAz_yN*rpfD9|DtaR;ZeH0sGg&4apC=i}NS-DX*AUvN-Y&}t z&ma_3>L~7Qmx1ISj53gd3f+ZAwmPPN$Zi?m084sjABf6xx!4#d*x}^}rIenca$D+h zI7H|cC5>ruDGWhLHfwjKU1@{ea=R+T!d!1oVVphs5o!hO7!^($aY{A(pU@4iWHx|G zT*+zB9$uBSFXmh2F_mXEMK{IK1bZZkMVhZ{(3f=@uJ@*57nDJk@^Q!90%>@T9(|=& zZ{r#enr*}zncr@1q-A<$@*mGho?UXaEFYDKD!GO?D|sY_&>9p~Z*&xE3jPCx=<5qR zwwib0ErjcsH$Rh>$_vv{VRBJLmha#PsKnGInk=xGo8VeQsLfQLmAyKyZ%On26Mr;L zUutXMwLAj?)JtK z7AQ-F9WoU*6D|*%3X7*Ps<80LvbbP`=dQxixKvmSN?`^5UM7vHkP2&9(ir1Y>8bt2 z|15{13TvgM!q%_AzFrkJ0~WTe8D-f04JF&V6kWo9Z0l8jP+_ykW8o*vT6*p|$&;bL zr)aL9zXsois3TRZV~0UYV*(>YR;gU1fASolE<@HJDU?#z&BJQStuSmbl;MD6Hp;DD z;~qEG$I2~(wW>%_Xz^fBQk`7E>VK`*FTYbbq&iS=Wd;+81S2>*SzdrSQIg(;eHyf8YN}ExTy72ggi}OK|>^FQGAUVq^B5a zQZM9KfGPZsb8ISd`m!P!bHG2?9YP1qK&YibblC3nN8bMneKZ(%==0JZBnPr{64a<_ z5@9Xyd$)KDHS7Q>O@B@tOn0^&3t(){w4|6BXr_VTx!!7o;e~ZLDVu@D+6}jFZBU_i zP%p3%z{=9yHSc&7CBWb1Biw@wRC^fI8B5>HW9LMlj zvxb0{C1u)#ftYC`mBEaX94e0-+VpvOW9xhBQ>E3t31lgnCXW`J$v(X1CY zlTX!nO_sghC}_T#Nh7vn9yB@&8Juk*!L9|rwGX6&`U6jEr^bv@?O!TDQ7Ie1t}q1y zHG%8F&LzLM79wke1O@7%@{-@U&Cu@XKr<%5@UV`_UzA~P(L zpcxc7khAd2#1v;T<&lqNMFMNVV<1p5&$husN(HWWDHQ+=1$dRb%9-?{ru_U>k0k** zshMgL+{(~B-Dw=tNOFN~5lg6}HCQuOk~-|BpAa z#w8ymLi*Kzh0>Bml-xke%dDLOIc?KeYW@J6|0Y~J8V|x31;b>kB&1wy+-QZ+&0~!N zm~-}o7*`Wy;TwET+NdLEJ4%zGVwr<$!ei!vZZIn#g#ulr_Je>`%$Mw1h6yEtl1k14 zO3G(%@{k_Ucp=wj<3eAPmKA~6(RK?(?K2F18cp1tNIEr;3m0OARM&<%VK(@R36r%1 zL}0Q?e&8F%P__I4-(ihKjgmrIT?C)m1m>S*cEwT*S~cU8EM2&Iq`dgg;aOq_sn%=? zf~l5fmj>HYM*x?UV)=XkGp3oS%{_)pt50)vZ?d=IGa?zyyv@5nqk5P-&Ae2_LF5M! z==OA2EWJewj84z_G4AAzs~%Jm5D~Vs6h@J2!deo`El<+rb+?!co>-bL_m`k+FT-j9 zJW3@_c%8L2PwmnmDQSV6>HjGH+GWP{>d*`!o4Q|{2PhA`HuFHGA{*dJcxZLQ5R#Bb zu`5Wn)Eq}|if-u)jj1#FN;<=wSpM2>7pltjnMHczdB2D;DhpgEA*iCJoB?B;DUa#^ z$AR+6MoiC@zy8uT>7nHf{$-fu8BC#815W4Yz?|G)?AB8vy+MMQfiThH>LaSI5!dO0 zidly~c(rXUYwoOsHzdf$rr5h@A8BGw_bEKx9Q;^$fX}k1Xlr8{#ey#t;0?zL5|DMK zGe583r&JteD=ZO}w&ZJUk0_gC(q5*Y20JwQX+eX^3~9bvt%RSpnp8jQ%amw&yhCuc zKN6Gy%~{!Hc4f-@pTMu+GYLHb!`cZ%pP0Q$QC#r2obZ)Hg-Nl!KRlMM1#(Z6dAqRl zOHd%DuaxYx4f3{!IDH{4M{I&Uy$lVPC;?52&tQ)*-O({SwsBPA5Xm>sj07Qs2>pd} zEUl(S;6iPN=SKhTk}kE|+1+6=n2vG643Z1rB+6@#(BFVvD`@ZlXqf9wgB$YZo`6T7 zS{hw1p7KJ>jKbulRCDGBAuScO+^VO!YHC9F=BT5NMmRXM9oE_R)zXJdN4q2=vXm-uUqe zUkjy5&8Yqq3PYem7>YDv1&_lbi-(6LET#B{4IjP-9V~J{<4jK4lbKvn!HAltw&{oy89XsgSY2k*tYZZ_*E+LOO+N;E^@)IbR>Y0>uNM{Suk=c1WYeAA;AH5~ffM%YLkg%52+6 zQcM(~wDdBr5KFaEhC0~uV(~_}gmn%14N+XsNm!Rf4=txyrBxEr(Sb&s96;KhfyQ zu};H0ZR<6k{x4({CTgl9b{yFEF2gSrf)>oMMdx7~OC+1mOu}`cDOHTa^!_S5 zmwPrQYhp04N`B}Pk6f5zhf2`A_9J( z57{PNi9(Om64~PwWgr5;AMr!<#4GrL27X^ZruSXS70CQD{n&$xRK4n`CQtl?M~hUG zrfkTj4ECrgtEY3)%vF;@gFTbN<{(YV(20{`=IYE-t@zZH(3z8kQycUUQzR{5^`j5G zRTyEur;oia#1RTLr$)kTzjh)CN2^E}RWm`5gM^@ySyH@9ivbT<)ECiMB4mh+dRhGN zIKewrb$c1B8u=alTy}JsewfQM(*wjim~v$`_W>@x+uett<9A;lkm7fLA8{k4dU{8{ zRz^w!B)Ovs-7Ubkkxo#Xctp9R_~>v(=T<1D$33MB!uWuKlW6X){who&Fs($n1miK^io8S26{u*Fpp zFpkmI)ya;tMA4C3rX^?EiIYmLpzRn#oVxt7>DIozSeh0nEhUoGrCVaHs5TmkB|LD+ z3|RINPMX6qGogaeG3n`p1`By8j8nARZc;>>H$!TcaV^5R&!{`C#JGA04A^KZUlmMI zt{UhOuaoXf?dO3H2&hGq#yhV8s11?J91y&2~^-1deE9v@Kj zEZ&EG{H`hqtJXcwMGg8@bS+ol&skt0SI32ULbT$$wnburQdjU~Q=L~q6h#w6`}Ru( z+D|*-Ig~iU5O(Y40I_9+mC1?ePt|n*%aC~h>)NS?w(`*1UqzOP-FgIcH>>Lu*~l+f z)-R)6t4Y>{2Fja5{q)!d3h203kKYSU8D>CIWe0kIKRI~O@@}QQ;xYVtJXL5Rv0>v6=;VRY&9>3w0y7HDtXws4@w~)2CD;Qw>EIQ#h1|r6PO&}O zltA$lZMio3Cj;lB79eAJIUhw4TY%vOIiY@J#aEGg9z%=QhHyv;2w0_vEXhYpt)(U^ z#4(*(i@>uafkz;h=pXvfV}iLY4aV~*ysCU2SfYU4bGZxUx$$l#6M;IFHZM=ps0dNd zV~^!)VK&c2+Ye91VIi;LR9YhdQx`$=Ac%&mU%6E~jbdv? zg~S}8&I|Lnl2X$szGB*+aS8gx*l&c>N@)Pjxmg%x)*Q3U#HvyZO24g;$1QHG+!8X$ zkT5&Vv#G68Az@^i4f;K38{S|;ZCNB3haLm!uhXz&^RA@WIMim0s=xW))4tc2iOl## zope=kEuE5&;&q+$YScC^3k4;CJFn}I%lX>Zbr7KxFSAuoyteGST6?)PkbKp=Ys&_o z@FDL`yOuYmxbO{R)%?R6e(4gJ!mu3oe7jZnkvK6y>BGTXk84K z-5~;mIij=KTX^lyqlMSkV_-jsix;!rZ9~*|2DIm2ijfZm|BJ6Dp`=NvOUnG5)a(&^ zF4$ztl6hK!N&a5u-@%;ZAY=?^dy`u?2?307?TwJZQuA3 z(M>#Hi}+@)sfY{$6JO^DwX5X;w!-I9Sl*DGDttPHZ}XBImJv&e0z_@iHQp-5v<97d zIF(NickH7{i*GeD`miEV0xefWDCp5ZYLJ^{$!R`NW>N5Q(CC!~lEeYNx*lMIrYz3@ z#KBCzk5PP(yzC(VChJB10|_i@Ybvk(m=8vXwWt_U&^lP zwz0jcZqO!lMUvuDN}-xII4q1K;Eu98c0w|5!ZImwJe&TjKds{9{pcD@pYGr&YZc<4 zYvSgCFKgzg#Igjb%bJT57(uCa!jP%Y5_l|vhK*bALa?=;}_zYvdys?xzrG+OOR*PDTA8-~@n^8M1mVHKPR#%Jy6=l=5=_)j#RZi(D zVtwvDkDR7n#*0j|UdGFuX;$uaD$7kx8KkK^jz!Xp!D~rGq~*Zs^vUcoA%)CBIorTP@LL|{NvP`+Vv5D#RRz(0jG7*VL7%-k)ZiI*SL zy4k4iN|}8e2qEWa_kFL`LRN1gocW>66l-VU~!d^XihaQNNu?QLN)06l36Q!96hj~zZO?=!) z<4;_lpbMfxpbA{^<28!6N@YgyotYA{VIk0^67OZGK=w$3!@+JN3?%)iKSN=KmzDXM zsq)lFql`2tW@%E>##wO|ZKjT#MVqJ{N2FBMoCO4^5QA2Heb(NaI_B7Au&y}E!;N%) zWG%xCN{!0W&PU6EvT5xW$FZl|12Qa_dYq(3z7JGB#zta10)vj{}g2%?d0h5rn(c~;R_mcTOr|wo9%ftNyHof=C2-UH@IUdL2*vt?j8AS z_|bYP3o3@mVSLNZ^~7q?RhCTj=zP_xNU(XU*8*wOZgyS-+_B-2C${CO#bj6fo{l%g zlg%nJ^hT|%%filg-EHAemZgaIWj5B9Ew9Dcq22;~(7&2cD^XV2fcDIGB2C18$%ZtW%5w7U5VV^nXNhEZMR z3QBQRv$-Lio_R^ zs2&VxLg7AK_wbH2HScIh8({`>RvQ#;C~2`aVD>uc_vSbGx^Zn`|(tSiLdd);=Lx~&b?fJP7gG-7(lmv zh3l{Df#d?)QSHIE^Z*4Z+@y<#^oKP(Rd5H_Ju~^A0WSdp>DzEcSwJve^fJ8#y6<1N zCNOoZ9F*AwBM8jYwgd1$1;m}IGNxQ#wpwKpeS(5WwBbne)oJ$nGJAUR?$m>Dm^}=$ z_oUkKnwqp;g?2!ps_72NZhCNewdnX--j?>pG0Hpd5 zE6F}=zB8R{Bg>XTkl7|i$>XyVHe|X>B%^7(YuTy|V4U*J$l%$%-K4uq0X)}&pFL{P zRL1!Ma0?9()C#v9->)mthOUHe;nsJJ#qj<-#g4~R{i@(S{oYxk2 zi}$d%G*dr4ke7 z;wEfWgD?JL=EYLDHx*~i->nTM_Z&!ND0T~Hz(I`I6$!aOP|0ojxtD8MIt1 zlnrfo)1IP){2H<;BFNTcsjI|%Zb0kx$1_sYKq&=BuD*v604+I|iI7?)*0yf|>_t6Z zbNfbZAqI2HT$d%6In2nyg_$UTtDNsAYYIQ0ni}6UV^clt#8zi$>VFy|Sdlb@S}T%1 z;as*p2;fARAlQWr9oz}R$+h<&K?JoDq&ThNYbtv4W4$qW#y8Cl-WD-p z>TAA=*#X+w%Oavn$-;f2t;$>_x*ZgxxRzMY!~QGb2tQTqw6N2b>N}Pr5hc9L#0+qE z$h-igasKEqmrPs}WawikI#r2D)b90^Kp7d0bX@7vap0`$^hOi*`FWuy8R0TlYjU=e8;7z>TnBlEK)mF-XRF?1GsgkED5qEQeS zwyw5D)R8o71V>)`65d>;i}R)XnYsQGPPh86nvcZPLps3)ilp6*x&AoP!5yuzn==AU zahS$={CxnXA`Cxc_2t~H^qb+;NM&Y}@crs-vv~ zi2#5f7K0TJY`$))q7o{}cIZJ|f30v-KT)#Xfs-(7_%?r{ zWZS5hf2jvzUPv~3aHAebvhC69cj_)mwgWuqk!=41&PMNTE?0sQ9RLoR%Bn*bS9(;& z8MgeGkN#eYccMWSZ_kaN#TQo^8SsLGF&gs6BTs}6R78~+Yb!y><{u|;V3+|CBaC|} zj?h{QNO1OW@Ui{I2okX}G%m4=<@_XU0=qqO1!Dnv%;s@c?d;?SYL_o#hVc2tKoAMMG#YMw3-`msEVZ zh%8P@8cha>xA^vq+K#bYJZ?@b~`|K&@$?#qB=C0XIHgd&y>tTEYg+SF$GmPDD zLyn)?Fn$+Q&ul)HmcH#qgz^#KzvfjkZCQc2P?*J<3_VaZgr?E_cj7MKiOr>%p}@4Q z1uAE$)nI_^Uq_Pys_3!|AJ=Q<&@0+n0 zw2x36wZ=t_&`{R7kXHMQ-#}qv5_=G;CQHP5OdA%@*1j!?T^K^l_EWd0y$SWQ&ufjE zDj=#Ms;8G)F4k(XcXdUAbhq$6$w->TzWaFQ>&HF!atp>~3bPFB8$I?qtVim=D{F4l zqcwil#?msvTZr36Bhx98#VzO@f&nCkEMQPf#g}{sSxtRGAV~;49f{E66k4C+xQWU9UpCWvFrI@BuO?4y# z+FERY`P=$7U67j2`C#AO<^B#VxqVz0_g5>H;?L|d)O(ao*?jl=`x;^YxL4Dma%)O7 zfnWwLgr6rivVBq`HhQ(QSM3M_w6k+cJJQm-WFaWh#{5BMJ55=|5?zQ2NVjOlILq+N zD)3Y{(&8t2nid~)|2Q_&hT0MScKL=tx9$__81qq$g7X5OT!ay5{7PL9*NpE@ZBg7S9RC_$mHYM`{`B5<=ka z{UqG*6!xEqm)sWi6J4YI^G3F;iKKb(vgt-%Mp~d1G?f`)4X! zG2Na%9Gju6MkX(qT;dIpGMYl_N0gc#2uJ0%SDS|Q)!H=v)Rhi?JtXBa7{SCE zB=v-xDJ=)G9FCP~pSWqCkT1Pbh&{g=s0P>-o~a2i)83PvnM$oH_W#tq19cUap)E0y z1097_S00nC%4VzX?pH?=>cW|M(i(dM^#h(MLm@xSrb3#(#_>rlI)0Zs?>O-qsSB|IKo? zDoTPzj(@ec5fcL9@HeQ4cIDB|-p^T)x}8(Ehv3>~4-pnfIBgv!80{hQY&(}V6#gS* zZ|EiCsYWq;Q%+6et}-g6)EVmqLqL&vLS?9{*dRBC0vx8XhhLTSiYQ&Xm|B1@Bp(=P z^bOem`nCQiY4vC&tco2C6I(ocaHzU^lfQ)dQ z_y3$i&E-6VV;!r^Fpb$?gErcNwL6RUFqG7y$BT$7fGrln_!CX4;PmmWuvw*f)V3EH4q+vO_B<2_KCY=)qFUAL)lL=MVoOi(2)N1wzt+V7yjc^LgvT*p# zDD;nLeU}X=ey5b4mzX}S&nvf07}Rn)4<4_-CekNLX(}LUajlf;y2fLL(TeP;pat5f zv!*&=jhThO+?(wxS@>c4{C=&1p-Q8n0X>QEY*bLPC)3;El zCCKRQ7OuMjwU%`|RU~?7Z}TD*r)(-rFQlmXKBD`Q;?~T9Di}iWJdDc|GJoKkpa|}A z1%~-{YKshCo?tw%r9yIqk>ag*1A;Xxt|!2kMyS8SXSe1F5Qo3hS-II*E6B9|=uxqH z5QTP9EDATg38{PxLx94be!_5*omK4P=R-%&xqxW17HlJkj!#n9Y7o6uMIwlfO-xn? zUg<-Kj7Q>9N#`}2aWYKHM(g+zbwp+D_&@b%9p+r*05`oCO`>va<(iqQr{Oq?l<)N{%aiMP}62~MphrKtO zU!*O!ft&|Aw9MFnY>=#yO!Q^Mo@vnKLm@)t83-dUGpWjQS7i`maDVm9u5& z#2Ep7@4+-TJvi{Ap~K@$>g-4L$VYvzw>kvFvnd=|SLXCV8$#iLsBc+VqM-bgFfl1G z3|6Mup$4kcuGIKRwB6)Okcpk8Nd!fQ?iwfLb9t_nJSrwrC?I7Fy^cJ|;+h)fM z?}hBE)OuAL($zn@q3s%AfOf~_X_|;c(U?#*@9WdTMe0SP5jQr!Kcjb)qZm3E7MBW9 zAG6eyy5=~9t8wiX{}J51jd%%0>rK2RxP-H4soh~P^)p8S`E>lsTmf+ z!lIby8}>4RTg~Zb)67(Wxx8aLIK}zS&0s(-UT;z_3iCg-uImJY4y!7-pwNT?;z9De zE5p1UC6E@MMdI4JJqM0xZH~4lDHa~~#DNLLgQid)=X2Qu90vvitioSs7y$vn_1TW{ zY6?-S5#%Qy!5r%65VoHJArZoq`sVQ$h#h>J>dA)c$xr=> zvGKzbNb2v@@to0F*Q285v9+WBNL~Hm$NCYK-l>b9>W^AOaPHRiRiEUKwr(@^2h1Ba0&GuEH}9B4#*sDg6XUVJ!0f$IZo)MfF>JNwb82KidZ)# z^y2DN7oabxRnTbAm^W7wYDz#h78+Nylbo)r`zR1?_^w2d=F)P)$bi9r^HHs`*rNaD zesC(J(n`$XYI=F?PDWJXPBx#B88u9JJFmUa^(R<2^(Tnc=z(@^2y+t+%MZjbqG>z8$N%~jrN?zh**+g9tB z^!Basw$XZ`Zf}gY^IDuR%4UFgJJdQ|x9^X)PiQ?sx4Yu)VCyv9emdTs)*`)D622C1 z``icjjdPIxK#Eo9j;|$@6igsy3sB_B)`*165jQRGW;Ym>h>@1_BJVOcZ#yGJtB4$bes4{EhT+-4n5WkK1DOb9gP5eN%(miNdhhEmh zg8Sg`wvUGo&D00(4Q=+clV;Q?7jja`>(wtF%yhb!%Fsn$8&i|A+J!n&fr+{$r{l&| zs;#L=LibVO<3%bMAl$e(mse(Ht=*-?y=>VKRDedrm4! z!Tib8L(85nP$+VPAH`x!TQSMKWQ59TF8*KaPBZJaML)^fpcxWzQBf$u<_{t^?XVs0 zyR%nSyem!nBapR9?C4;aqIjz3V#)J!Zd*rOR-mF`tfqWvLiR|$(3NP4A9f6LKX3ur zEf_Xh3O35KL4W?VgaGtS7N0gvQc{49HCTBAA>&5mw?f;u1*cSHf;-%_dxFNSW`19! z59799xg5QFHRgeL;8uEOk`=e1G#kPNKWnqot@7_beL|HH^R{K_aIAAcP+^aAdyqC( z`dYgDHgRlloM~D&?yyyk;gX7AUU38KDVoWW9|&_X&jBMzDZ^4_V$dEO7*ZcP z7?Ve8^WrKFW`@LgGG@+V{LT)&mAF7Nc5(@0JncYSkI^F!aaRi#IVXx|K!)XCNYg<< zCq@wnZ%B z(*k;oX)QB4aDi=2A+xlQqED%f zAVHl_iAxgiS|nOSp1$Jhp+MR$eGxeV8kEAUa3fIxvjPoOX9I?`k1fA~QRD>OMWq=W z1*}NSWJH|Q&+#(YOdY{>UYX+4h2)dpi7A1MBQZj=05sMtq^~LS2})cZ##@(@xBzwc z;GtbfI3tWdgrTHZpNqkTY!uRR-!M)(P!^yPXDx(@PMi|6XrkwH z*lXb1FmEj61c@UhO{&Oj!e~G~hjZ(|@ZyK!x+{svDvrZjI3~~*KhdXum^E1t>IMYO zrSgqaD*w?;mH+5*RDSi8%8$)d`7tX0e*kwj3c0|sEhS(Y*bw;bp?M}AG?`)BTX0%u z#k&XO;!lewBO}0#Xj24Rd*+D~2xOHsFYKK{c^@4l+9%I`6bMC%4>i39dN(?;=XxeN zL|(ni)=0~$J>&aM!aBY@^#3c~;o4c$M?lVLc*m*Y%e7Oc^cr9|Eizt{pE@#LH>L77 z%vAXssQh;f(~XaiyWUONYOjJqt9@$C1>NCJb1!SIupJJa1RZIFrwx)U+uG2n0%G%& zzFs?1U$3RFm)0`AQmpRHAb#moXjJC0wRHhA^LrIRTLh>S!K{|AH9~d~JT*ZNw@He> z8K!Qi2<8#FVJ#xj@?FEsik(fp79mB=MH+EjAwyR(M~AldVNrMH@3K44r{dlc%%V$MTg{71I*WYB zzfB~rLk|q%16Io?pMg7{bPsiYLDv zxWy)OQNfn&$Z=b@wonJf*a^JBl9JS_zcy+&Khwwt*XPPXfd=O~v!!dQ6G}^0qOF_5%O5cR%!yBjBF1b- zfm9~l&|#qpXW@)XLBduQ7%K*$-WhT`7~9C0RU08z1%w-eaMjx2DDgl&eN(5Y3r=X(cDD+An#kF0++hu(vHc z1#DAFKE~i2h@n`5@;+Cc-_XbgeDmhxz$G11B&$>2f?iZQn!Ku$s=MHsx|?eOo3V>o zG?Zg^d$nAp*KG`Ne6S{KzAs8JWqb_T**BP(k# zPM{<$mGr{ONR63c%v*ZvVD(H4&zPBb8KrgWY$;wxbp+%yQE>ON$H^ZUAuI(L)PDB8LGg_hi?DSu!>pZR(T1i}~WmwhOo$ zqR0AllN95_%3wj;a?S@*ue7qRh1%kz<_-|L7;mmu+hMc5yx~lx)?$QK^2s1e^5bI4s1sydY7OMD@mM0{B7H? ztB1nwxAP;ue48#lq=#A@hKp?0^~dx_UOd)kw{cxuryEo8qFx?}$mRkkM-0ld@L0`Q zO)r_03P{G|@<5_0D343|{a)fG+&Do$jvPrCM|DbFMdaGGXLh==d-V(kz-sxDL>sX( zsKALx`kHhs^HWbVb{*cXvEO%?Q4NQCALd76-}gN(j_8k6TCGj%dW-(Vv5#}zGxpV{ z>Xf;iioW3G#69`Z=t_D5KyL9p47nd#QGeOEbfnq*ep)*%U8!TU65?(}a#MRv%$@0#^{r_(*Io3~{_80Zx_@0Y=%=hj z%lp~KJW58R?wDC}IdRMs`8kgHw`&HZsA8qrP{goM6UKl?w73QW0g!E$R{&n0Lc8S0 z^kouH)}(`Z;M^~Eo`_*zxWx}ZK)sMk*A!nvht^60*WjJ;|$v4R>t*8M-hqu4vvDrwdMd*NfwV>Pl+r~4@+kO=CWQga+{Pqmw;R68>W`{r8ZcB=mc^z`tQYG>|gq?VHp{=O+y zPLGqPHcuOW0d*dqQs*U8RPnU9P0lCN?>~e%fMFr!+NcK-1*!38R5?irbnjK=rsut3u@lF1UA}WohIa*0%~-|$fy^tDtokVT|D2J`-Q&Ug)8kR zsLpxD9I7$}NQcwgjywQV3r&kR^9SHTy~SVJjS05amS2kYH%&A9DWa znu1d*?Qm`Z;Fp%F&JCnKq;0+Ze-R z=m`tutcf}!3+VEY)L=!30v00X1y=qzSmQ!;)UL)=L7=UlMfIYOvd zWz)`)By(42HGoJrrUK3WCbtw128k4pOZ{pBnz&# zqDS=RC09PrmTo0wa7z)I{0XdA*tIQfXc(MhqDIv3;`Y8t3(Y@|Zr{?|?d!T> zJ(@g?jJy%_jK8Zk*8XL~GkLnF^A$!cH(#N=&K8!TST1dYA+)E@ei3TEHAuWXItnc} zhorjM7}w6$mksoVqiqsL`BU!-`F5-;`eiCk(v|-Xb8vdm>YV)Korc@(`6@c1o@g}& z6oCed2axdQY)7ON_nY`fW)MpwG(us4|J%v~HCa@MYP1p0OgYg&iM2ht-Bd8R_BH`pz&< z%++0_SUP@_G+$syPJ1vft5O!Z*6zVpLg{s(gh$%^$PI2`p>ceX^9a9DbLKIB^=?dr zR@kGwsv5K9Q{7kHQKvmPpa*fxJGkx{v!bt=HG;1sSD9t!hKH~5B#o)ZlBT>lGlrsX zQ7C!|rKN~+Qy?^7p8Rcw+O}9=J96a2+HRVqwikd=*{IZ+1U4>%w}ZZ=AG0|ST?jh$ z*_Q>RbXYu%CZ~_}Ib>Ng+Vl8kjM2Kow_YoTi^vH{czmWoh^WH0Hz20p0Wi%wEj1@| zPwaGtg&S(yKQ@6?Jk|c*t*3)wuYMx%@8r7pFdd8Jd!9odtwx$+jv`{NWw;n#vEAlF zgE^WqWNHXf%{(>yAiac1MiZ0l6Ca8=r7cGo0h-g~*to_a4gbKMKGi>Ho~$zpb5@{=_DKqu1lxCgw(NA0QCxb5D_evpf( zk)fvH0n}B~2g8%#a!6Q+u%spenY&$8&%_<4cIFLJA`gV z3lj6BT2@MSEpi*kO~R|lV3YbL)qv2>NdLX*A7DyysLzHc_fNpZP8jb|d+Oso$aOCS zPr#F^mtksMh$RPKZ*^0*H=k@mrdE1ljhl8&?x3Rh0?JG_>i-Om=xp=*GD6W)GlyA` z$wTfskSrbUGTCCnWxGQ^(!4}Ol+V|=o(P}iU1I`fBp`LKtk!lB&#cTu_6MiP#Qrp4 zKuC;*>Wq>Go0S6~4A`<`7^oZo%aef^uviL7RqX!+kzOQC@*WX}J-BBu;Z5-z1s5{N(XJq|k@GE$hW(n&_ zTBI3;y3+r#-Tj%BP-p?m2fF5*V0d;mn)7YhuRu~thOO7a;y%Q&GsO=eK&X$0#kZO< zc80BF%r1T4uwN-Ait_)6RFV??BW!;k-~Qc@>Lt{XqEia1?fMJKZ@bOP+wwy5T!BIe z(5v6DYDVWWt)B7MwHw>z?#hiGOMY1hB%McV>ew*bLJtrS>1#?pW0Wrk5kJPO7?i|m zc)t2i(R0!grCUt#)ugL6SB}FAQ9!Q^@58|zFxDFNkqDqZLyWi~Z^~rU*I4L7^O{ul zF7>b~URCF~;~K8i9(zu>F$Xc6@@B#cXREE=u^)I~q;*KTdq1WHvFrqaSicpB&025} z>#;WDHGhe%XRaU_`dsCP7a6QL4V8webN`W^G0mXyev8zUqG0@x^DeoQq8Ag zJ-|S;fPYPqZM6sezt@i+N}Auy-R~7XQu=otD7fF zu}CA`%KRvs^$n36oOf=KT`&>5D#B9B>B&wK6Kefn5R{HWxWrfESIQOHU!-lZ9Zy=L zVHBl!p@pXvIic9{2q$5QSZz{3CAo7|pBiHYVuje(FlYUNHpW8V6&3{0!@h_YAGUUS zKR4VgWi8XBTpRSX#SDqIj1K~k;`<^52_6dCPi8r`ZACY_A}dqi0{b)xSK3Uf$Cxn= z7J*nqZ}jA<0# z84%)>CJQ({#i-X1N}OKnWi}|>wozVyzZxMUmH7|D>h_UL!XM8tpO6%LK7=_&x{LH$~|noGK14S%qALF31BY8j30Em zfqGf-zwO1K7@at#NmhwfaD+DV=-({6Sp~ zMBtgN1p}Zke4gS{=&%vMX@qP22j{3*t3vuji%TXvxf+rKi%CV+ki9(&R`pOzML-uP&}?oTQ3IRf9s6 z>M1vRpcev_EmP19f)qRs;`F5qXM@i?&; z0TjN*_A^j&RIubsVd0ar1%DmMkn)3vW?XM6Vx%`gL~i| z_)Z49VRkI9S)|=VdQNX7LJz$aBj6@Qni(}rUmcxvzPVF@dObB-b$dLF&#K#Wc=d-Nmg$Ey39-_5-`@7i$p=7966-8fN=>~_z*jMBqUmj&fGwEFZkoTq>BoWb2))voP=#K;=KrhE)@u4o2uRkVED-FJ!jKBONhrkiy!VGkX>w{hJw zzUixTSRGal#QyNF`jJuur`fCPAL>u^-rmP`Pj#znnP9`5#JIk`o6mGa4@7+Q^VOMW zI)=`BcHmyB`faY~!n59`wUyzp@e9@!mMy6;T&p{AJ;>PngC|9c3T$_Nk}q3xukHmt zPDGcRK8Da>7aFKMbg7H3bk)8+`^Wb!m)uH0K9^ev29sN+bti5=upXBdcT%SKp=phr zVJ~V*F#9|Nh+h{Zi&z7<6eZ*={=l%QZP}<602UKuGtY2}y=s!Zd`_FaF*XF>#IP2m zdpE{rQ(mV%t|WQebbvIib$bZIK*TGhKO6Obj1ET|lG5|3n!zG9KMgxJ zK~C3MH49&a=Zjt`xQPrx2w7V>)epj4(df92Y-s47mO>#M>V8c~PDwUW`)Z*Nk9|7+ zacUo@d>l|o!zQ`gY#lJEPEOiNMP_685o$^BH1GOZ!dMavOqrIt5=t!9l`;(&vfip* z==db7eUI*}b~+Re)OQRj9INl(CIS;nV!{WYX9gmJ2fIy+?l5c;&=Y=Ne04bLL_KP2 zA4e->Cqq@T}fAu z6#vxEG;ujbhzT7{&Zo8H#UrNbsVm-{6|53s&yJb-Fx}R}57*hd?Vt%wiZ&k34j**- z8Q`InB__J-F?5cw27|G(#0Y0?-4X z7LGokC>lZwF66+sGx4KeSVwXI3Kn-h*7Sg699ow9hT06t>sBV`$!V@)j8SoTP}zQxwFXmAGFtXIb0?c&_}nJb$hb zVjZs5u;WoisMActv143`N>ztJw{2zdCdy)Q1{pm~I^J!zQ$O+lcqkgD@u{l9B@N5% zJFbHR=m=z<3exfeP2p@jl_Pu+B(6&6Dk~WsuuxmnVTlSbG#g=$ zy{V%&l1cUi4Z^CI>UPJjU6Rpta!ZS~+NFol5V(o!*>sV*rY(2z(Yz@&#T1#QJXkf7grTr#0R$1;f|3+}Z&6wq+>d3oxJWVUmmt*%U!D`^g#BoMFW5F3 z@I*M9Fv9>7Seun;O$yQqvB17g+4&@$ym%lF_xUOdHw%s2<<}~%f`E95^dx@;$E(7k z&rT!;p(i@B>L$dC{u^IUd=d-rl2?cj{^vr+FO9L-mf<=rj5wwvx*8KEYh{WQ$!l;q zPBXLB?y1AlPv?b4^&^XMuP%P-cQzmQaosbs=O!6AjuHW4<5E|Sa(-~aTe>IR^!a8m zk*M@1;Tv2EJWaGF_IebwpqL78AGK( z-YSLk^to%0=YSc^V-||@oIDgp3GmRom>#yE*`0ul?AMPr;`-VedWf@en-U||;{IU= zdF@V)nbHA#MD$xT08ebD9D~ah5n1n z;U7i`WxpLW#x27w-ra~Jvgg9`XOTI@W456pMb`l*X;5jm=Sxn#=VwDx=rPs_5JP>* z&j&?VXM>WFRek=p)iD60sG`3}ukjo+J%a|E@|zh)(F`f@iJLI6R>&rYq~PH`Mi;>< zM3^2ZC_~dsoO%*kr#=)dJJ#^EnPraQyv0|{aW}|ZThKcsCNx?xQES-NEWv%r z9i(U^5P?O&xZrZFc`+(1`Bda+L@k_DTu$>h0b)LyjjA#~a6-&pLruc}eJp>qKDFQn z%caqLUgTqm>kja-kSeBvGSBR8utKt+53;)oM3R;xVacRdDui^AuG{{=rx?`38k9g^ zb)Pbr5x^G~W^-#diB$olDiuOilWJz$K z0DZNoou@*XW<5a;$|yGTO8Eh(ru^`^;f=bj-n%|C*gQ)Tm%#)Dmiz(7fQ#E=F;hMa zUoavJ3%_;2NXJG?xiVW#1%S*IuSuamVe==Dc2VmBM`zKx2B&qxGaoi@%-a9)wVyUv zXI5tq%wx#zx#Ef1Ho!EltmnMDo>#$E zMa)hKCw!u;0zIEVQAu&cZLau9cWJ8+JTR+R7I7MG0s)GT4ww;aLzMm3GsI{OcfYUj z2yr9ho$qsfFPyROg-$)+#|X|>{!G+&VCY2h+i#rWEVfzE3nReMDUcNUcce|aEAHd+ zot+L-x%IxvUAFtvaKWp=q}eL)ulMORGN3HK*g;MS;~TDa=%lr|Rj^et$~v@x&$1@LQCu#fz+!CI2MTZSP(5~~a3?WIF7&Kx}Gn1~_sDDvyS!=kKCFuf^ zpC&;{XYkR;_s0|64Qh)=^MrUia(0Ph84Y-5t}NU+U1ly=f33!JQP;hP#*Cdy!fQ<$ z!^9Zyn~2vDn>os6Avg$Z+EMqFlK@Bmsu}ZfA-aUSgj)PVKVy}=bK>Yd?<$M3k6&eU zODwvCF;?^?HRKclB``51Y#+3PW_@aXh$eBfVnSqWws|}C*GN7Yd~Ds3I%&fz8;DP7 z7M3Yg1aSC`*r^X`oYiKqVl#Z&f${9gz@UgIw|LL6v2^zkc)b~_lwN(0&3k9@RY>LT zv)Qe;FKUt`_L7j9t_GBp%QE>L>C`E<(A=2+Zce2Jaa=@H%>V2ttxaQ-PLre4fIeu= zZahhvxRT**#?4Fl`6%(ds=|poVY}LM4>yjCZsu`^HP=k)CSts8;`1Ok$D)P%fMa=1%1WkUV9o`??b zNi9`|^{NeCX`?KFu!N^sC_V8hSbBuzc~Ed%P5`Nh3K7GqYA4JIRL_xNr2KB&5*DmQ z!&|9bIL|@N3&X2N#9kQi7_~Q6S>}<(rgp;|34r0M>j*&seO1Lc1`cJ%iU3w|v&5Vd zH2#i8^Z7kvR0lE;SEL#ig(IH>AUaV)!-SDl!^~~>lVkmJOn-vl(3msRGJko0P?Q{opMjGTYf+M(RHP8x=$oAnM_h zis?2xiJpwb@c0HHi;$KgE2Z%=Po_D~G~z5|VUrR%oMgmuL7#M1w?N~xmlkg~hd3Ai zyV1O2?nrED3{jI$35gGD+Y{V>3KpMIv*a>7)n=6_k!JaF67if;vqw*zWb3S7lbh9g zt?(lo#Umx#799BtHs464hir&f>SH57lJY+=BMV9Z$4x z%zj%Jvky4HSp>F`gKcJ##2DEa(PgU<%o6$!qja4(-!y_Ztm=kh+%%TA4?bZsp zZfw-ug>%fzY`$x;Kz#Yv)t5InrttJA@zSvU5F25l;kUZ}^l=j{{(2u^`h$HwUe$TQ%&3=$^BZ2RcUkmObZo{z+YCp(dM3i`-M6S-xhA+S@AHiDdC zp~P%^SqtY)!UNUg)g$7?p}f55LWilC>eO$HQh)^ybF|r-0QE-~&Iu@9_wUw6=-6<$ zK|is7Tet9y2W3A3(Fhe^}duFb8wW5a7TjjVn6vcC@*{aBvrn8_wP$rz;Wk=ETGqNAfZ} zg7FXl=|-0EpOD((UKG}{57Tf}d9D1A+@LnOX@#>KMx+Rg$d4>_sn|V*ScgNC;vfKy zI)Hzf&(0JXgll2yN z4;wtH!t(o`OIgq4+I+5|34Dets&F8|a=qHld zR9!dj$c=O3gqE@1svq%X21;kPEuB-Cw}mqhvNrqLj#l&T{mX|4_lQOMWShPR4Q}2$>x`)6!$@_@GtcfL3H%7Ng#TLg9vig>WbK7N%D7w z26ng_T&27`xF*7UISq;{%x6&TPnrubwrsj5 z0>iEwu6+bf#m9qYL~jp`3*dA@6mK zYPIu&(COEPEQZMRG*i&`_CB>R8CaBYDzehTs9+TEDKV&X5>T{IIMnPQ zoYwa;GwyBKFHY=If1K+cgk7Fw45|1K`#<0)Fc*w>L0+BP`*n&w*e`u3HGy`fO%f~( z<&c8#6v-%C1k|LV`nkmg37I&m%m2&d@_2o%yv}{?*?DFruVR&mT{6uKrGl!o(U^`A z#elp5oQZ^6nO-n*p?^TfVaMvfa#c}rw%Eo0X|^pxf*~lCp4@|y0rVID(Mmn zc}h`fT7sfOX5Y&`e*KAi*>~{F0!wCZa?{N-HMue|5C5t&u^*7iqhrM}_@hpaDSn^} zPM-272f6qW`oPn`c_Mq9bjwCJdZvnwgVbbILL74|yXdmHm$l9EN%N_6npP%9NbsOH zE+P~b7qQYb+?`Fw?&uW|)UKYr+F$oD0tO!9IOZ2h^Or{LL!Q>4)9= zdwGRen8X=8h)O$2aRZFH_$v0iQ@o*{b8h2))q2K5;+Ep-THbXn$~oyElGfEP>_T@q zM-~gKOmG8?I9t1>cKnHG~d=!6=P@qRWqfqlRgH<^cra}p^q>mQ5O=gZ#qOCh= z@hvTn{#ajNKD+~C?2p{|t`uorNMk{r16#Gty^(1K@obnwJqf)FxQv#CMTNV>1zfZ% zh8db`!t2)d=5WPX*G1)U-v^MN4_C2Zz1WNZ6gEq<>YX{8wlo}^KwL-9)qbvfI2*LW za2NZSB}S7o)8~pf^kljIpxu+Egu%^W1_Zn=M5(*m`I+c2_WU=E2xOii&y)$_2P+4pm!KSjra5&{q(q=@b?PAW9Rl#2fGx5S}NMCBw1Qlkup3 zHSLik$Pxs}<=emd@{#6KDbj;GOgI9b>WdAAoKP=UJvf&yj(wXiqJFb+PG5Y`S8-0ES9kS%VXHmeX`W%^ zU(^>7R&yKq#9_WzJT0umfV)#?I}n^T6Ev~^ji?RJ!jzTWjT0ex{z-a=Rh{6k`G&)QG#HVaG59TzOkC!Vp>r^RLm>xYP30dMB6PF=%>*x z^3k#=o8dpKwS-&ZksarbwzhB@uTLv+jY@B6l=H0O3+FM-%0tZ}gIi){v&43xi4{q5 z*_Z;2Xhu;lZ96*978_n}ag^L0{kqw|E~pY6=(MPLnKn~U2+yk^q^oE3;2 z`8*IK;}E2eRh^{(XWMc|heZ4f}K#4{XZA{koI?DcI^Y73-)ylj$b1JGKyGTkdLQ zFY1fH5ab1O#0Zu~ay2gonm~u}y+ND@>I#kG(flq89ymx}QM-J71;_Kv4Z>_PaX_l1 z{~`)seAAV&wn;l(a|WJ{m3i+@SH3q+sh)J@k1AE+;)|BWuvc+-c2ZM14OVWFM9G8D zl#5Szst~Sz-4Wb7+#-OJX< zxzpl1QwuUtuXLfqBS`ltsF46nP7C)7Ih9i zdT^lG{4X_(-AA4g>Fpq?g$Ey*vwRiq$Jvt%O;kySDDME)x3gKa;!zb&^vpywMKlG> zNm^`|<}}@uO)dC?+PM3x%uF>!ow0xlg)YrD>bOjpQavXw5CNKYn82$=Q8I*(h0B4I zD2ay(aS(ki7Vu1TYQx-i9XYoYUTf*l_GmZz_Xj`+lcTuNMbS*C#oy7OuXTFiB#dX_ zR_)rnl{h6aLKTH0!G=ZXa<`If5i8bu=B%o?jz)I8?=`Ie{cQdg63>rZV@A&^yN+Uli9yK z{)MSuZr)ctnf=TAzf_g0dV8dPGW(Z1zcTg9z4em|dUVa&*93Od_~6P7w9X=X^pDHF zaWp>R3rpS(c*QTiQh!h@f;ICDw;jMbaAVndCXyBg#{3sAZ=RXJp+M&1J-(2vXd*qz z&2(4rKf=4a!?XExy#)2qzl9Vv$A}@{E_U)4ot?-90cOFSt%c%{S+b`7i2`Zd>{w6) zqLdVAE*E`q|KfJ4pO>^V3Bxjr+vLDXSoB%hi{W)mxs_-GFmz=}E48MbX;hE?sHO7H#4So+tdOeErxu2ccu)pS2i!(cw7b5?m_Vb>qY z7<;KBrFY&zeU=y29Baj;hM-{+E6wJjDL&a>35>@uT7g9I*zoMY>Mo~hRC3pySnHm; z)=iR7)Virj;IXh{9e?VxHhC4#+T;yqZ8k5ihwU0VEC=;mGo}4^;77x;+cgVCv~;3S zwr0Z7@q27ih*t^d3M5ZGo?2+Me`aDlpd4e?dZjR*x>AvhqWC)ULy0BEkPU@e_q1!i zDIt>_RHPctM*W|8qGEbga-;mhQ$%0o{P7Ji08A{B z{ib%z$@I-{yAtA>I_zniziqmba{v(0?9(^BRl>WsX_cHqg*YTVFfqn$gezeclj1e1 zIE~F8ks@y*MqGIgbz|7gr5G+!xJCtcMMS%^m?NQ!%^tD|4YuXUF5c8Pml`>s8&la3 z9Yj+Etm)ikK87eNt{>J?pu7Z@A_2a@Llg_|9$2kNUjrd!HhlOVxDk8vr3NTal3qwRtbr1He^|XocGK%M z1vlRNN7Cl6+31*sqdg`3*2-|XAv3oQY_exPp}1b$aS0h0?KmPSGS|19J``pF1jq-W zP#^|LrrU59Pk|^tKGdc}DcvW| z5}1=JHnJH9IKlgRdbqL97ypn}?|12a1psdR{f@M0@V2}Z)M%BP>SHL7h28%G@U;|O z+o?cXXbtj7A+r^sG`x``9q8t}v7vs2xkliXG?!lf$73PAqLU(L%k+vhTsME!P(k7+ zp~O@Ew3EH2%*MD}|C;cWE11LsX>*CHsArZ>mB+_SMeCLCAJfF0d>K(yl?hOGgWmf_P~$_2TFG=sfQ2gq zm&Fz&fto>Js{jV{emKl((7&N6NF|4nLph>RxIrC|HD$_U>Lyr;@_Ru}<{X%H7|g=S zhXGGIc_Ct?5^*j(h7OP**HK# z_EKTZ`MwvfxWuW(k;@nYK>NFXNKBCe$@yz%pFoXVX#C`=jfw{o)F&)oXB$GH^BVY* zls1YmOc0tO77;T!fl1=NwnDy=FXMKCetZzS@Hb0tYL+c4RM58^J;!kD!-lnY0N!awdjit6UyDe)EqkZFq za_yVd@;>fkq&)G^8aAGO{Fb!bki%r8qz{>*|qV`WTN*t?7 z!Ed&xTt4`Hl$fIUY+r^;n&@b%{#0~~6P=DCPhh+sgie~SvlHB{{*@(fhqEZy2z_B$ za@un+N#n~!YnCO+a}wO3T8_uI&~ep$@|^;GBmj1U?YtpPpKTyem04JB5%%zRD9^>f z5_wfR^W|4T94^ZicNXYc+4&_0bhQxIwc}gtE8r&q!H1Mnzg5i)fzHFqLxzL9DL&Did?^8-vrZBY`~#S3le`yPzH7u zr*WuzWYqBJrIACgtW{+BsGL!EA{|Vti@-|AR{Se8$Gq}?{jy6Q3JB}4QCnlhyN8?q znvy?(9`__19N)5YJ^GxRZn6i-!J3@M-|lW3oy$_6+H(1exKrSWHt0O*0(Rzv@$|yW zNl^3kK64IatPF|20RcoL_~eQLTK>WJ{G%xeWpaTW?W|Ue#S=f#r! zB{xXZ)_f9nPXo@qL7c+(Syiuum(x6D%F_OfE#amGTwm}-p^3pSHx!O1=MKyh1)Vw%h zq7KgPDXMtM6KmZzx#%q1>Cmh^?r!v}2ne|3x3R$4eFL zs8dP!@ZU@@Dv+{c>aAL2y=H>I$nO}tKJ&dOfPkGWs+S5MQsn;xng zz5m;OIeqVrf2Uh8UQS=|hQoEitq*r=Y-$+CZ4W^6>eSa0JU-7^hvbeOb&v_HcGLlK z35g??t9-kBUW$X7!&}T-Ud;Ml-|(=y$K&s5BV{NlLk7??vQBk42wJ%IMm)*rvCNg= z!6)#a`d?&rsHk}+u4_COr`k!&ESp0a42YA~^R%QnLVqG#mO{c{B2WJ3Mss(X4)nN_ zDc5R8M_9Eu1DmmxhRmRujoLy0tW~QDoqjD0+oFcxJh(>78zy0mijm}sB2eoc*db`% zcj3rb$1-Cg_R$v*L#%)%wwA7MQH>}yfSqnz!&0@WXKYb{ne!^aI3P7v{kl(b8(mS3kp*zz}M;P1`3+Q9L; zI*o`vK;1^ixY%3G5fg7F1tj=4G2I_&3R4OS*&`-bbbGr9~*G7Gdp- zaO-Efj4)n`G$c42aA~+w{==65-wnE`^jqzEIwK-s*C$eYL#8w{esxV)2RC*J3y}@) zL0Cs`1y;u~_w0&vWXJdR_0I3sm28QZ>MO)2#Bw`c2oW!-L9S<5%NO#lsf(yJhv?=0 zW3D0h#krzUDcqB?SJ&sj3%=76mys6kV42D^`4_`-&s4^DL)d4Qy<)H{dXRfJMsR@< zQDJGU8`F+HJy5wp+)HNeYlK24>ubCbjYBqIW3X??T#@PsLGcC^7*Br!_?JY*^$v1rQCV+z>_dmaVtzGqR9tQSQ0 z2z~Y(d>iqb#JBX#oFHyeX*SKdrT9WQVQ!D3sh~UcJtn9Io6G?fzS(Ln1{6{R;sLRJ zXeJR)K2A6uBj6=-Ow*e-<8tdOM&+Rh*XyQHj5g13@O2WQTJcV~y~^kldxF0*9Hie5 z4K;14R|8m1k1O-UL3X>iqwoOcDqr zz^JGws5cQ=lwDLrtPGo?C=}3YYril_CL|;zVP?YOigl?AZWR@GXx+uF?$*6lZEGvF z*sra&)k@t;TddmJR_p)$Ip?04Gm}JF`~AKC1E1Xc+uf6X{m+)?qO zBBqs^E{c|Wvo+fc*V1ki=oh6ZZobNAvVtj-VvMRnLzdG|2VuHEdspZ{oH+JQ9b~M8 z4;7Y^!oorcY@zfk$D#}Cjsv60C__I61}e|(lV2rMrU$B3>Xn|<+wi)8mQO*dS#d|n zhGL2yqRZeisIsRnL$HkF(vQS*3CI_h{$znmpUP--d@+1U4Y~_Wg$?z}2wh=#5n+$x zE=ogI9&J~q1%{?Mv@4#CHpYD=n0ysA!k@!di6tI~;pR0+9+g$`c|kQuE_n@-_GeAc zOsT5iP1Atg{fd;3V^sz$B- z>hKk*=n}U4FN({yxUyW}YHk&#pHYrqCxf(EMUl;&Z~tA zkC(7a&o(;tXec2xC)4Q6(sUJeIiuisHJD$JZJt(Ii_ORWtm$FhG^du`9pVWOR z%=o#C5>`5ayE76QNzzQb0|ubp@+(V6`(;a-FU4c}UKxXkRoLN;9gikW<&4*6+9q)T zS;u@0n48zFx}Cm_Mp$|tJFkmm51jB6<>5TaGp$%wD!GLr$jq@cE|Chtr?g|Wym%fR zW~BV5MaDiMe#xV+NGxD%g)JaqQb+MsJd2(Nr_xaqM$BNMp;@ZVZPpWJq71cMVw8#X z$9SESHX}N-y_Zq*XgP<#&ArY7q;}X-IR8#F6XI)sI$$+w-ZG=L#X_eqHbXhllq=Si zq{n=c)})rN*A%O`RIBCYT_}4=Kw#p;yWA3Wc^lGe{6>}zZ6*x^_OfLLmoS$lW@||N z(+7~~^ame^(BZy*HgtUY9h%R6@ntJ$0=MadE4LD?5uHo~GGq%MmiOj)q3+C72YE$H zNb1WnsrZ_lm5iiEy-^lk_2uJ6Q}--WU_xm`OVvH3$`ZM{2oLx)a~Gnw5-ani%gV~D z&6I<5T+pS;%uaagS#C?7jdyA6*)39B9F0c#jIXikteCH1RjOeMk|O9APKf%-oX+)T(c z8`EB_JgTY4t|m#;iJ2J2uE$m@_9n|Ax0gh_NFwHRL(Gm96^j~%$60-hnleUPv@^2| z!ap$W8=Ep>U`|QG72geN-8nyCON~~jd;zOa?uuWVhtCHGI=`I2@TGAqyg~YYr>uOp(2unWz#>3> zAa*@##^D=O=!fv+S(<&kpPeP{9QrZeWjE^ff0mb<2o$^N;6^K9_Tiu1H5xlTYNmiO zMs@K$bHe7T5_AMc)sL5w*cI%fSGg?Hs2t@9QsBAf{=g`oH(_03Y=pg`rliZXTVS~e zlY6#o;P{df!!V=q?n=_h&(e;C8%)oJ7gpj)Xg-M^ObWfl@De+)?n&V<8b1pTf{&oQi57sId~u0+?COmwQu%Zz zww}#6C~gkeYKa=4GE%G==nKYFE~0ePUE_Nc(xCm5v`e-d)5LA#Q$u6k zcV?7VGP4Xrf;gPp;_~>j7qewe9~mM;%Q(PMq&YvK2dzve#dnFX<5|2L<3*36uy4{> z5X*^#MDkeT<8S4NvoN8`d0D|eB;%n={CDn+iQ9QpC&xu4gJU$lssz~svj+|H>Ye8E zavB_CCzhAHj+}e=602!_!f_2QCU(rq-bPY>PFeXx!k_~qMKM-|eOH1rsWWnAe9gDq zf(~3=W)8{1R|&^i<>f6gG<9`f;NmuOF?k1`oyc3HvzN{|$Z)jEmg zs>G+glMKqEyplPUc+C*|rk}mAAWsG>BUTVa z+eeE=NSa?+VW0FME#nnPU}xPu^o|ZeIT0X9LhitU85N?2QW|;9VO}+5zH3)bn_+nemTJK_3RHn^xilvLy zfOR+Oi7rg-f^L%AjIh%s=&md(-$rS{O$GkAlvQ@Gh)VZnGFXh7SgaEHNm5gHD@NIQ zCMlBI%rbtd!6MR@7=2h(SMt}BF+sCNvR6jY8ihtrL%}*}<6YUE7LRaFA!Zzyc`HKL zmznZ$A;#WZh>?T&G?!(8N16vRNg0~C#*Lbj8%4Gig{1Nd^<^=!G^;MJP=}RLj3*Q* zwTswPCKHSRma5LIrwl9B`v^@|nQ5-P*#+Li#>#nz=HTmcOR|kh6Cfj>#1Tot>SKSZ zSrgL6o!*@>1{Md5yc14F_;PA)CZY+YTA)3rdV}5mB8ie!45P?rYS*3SpmiwP$^@+g zEelAyhF!LL8wt%MVbxxyHD!|%DVHMLwj(q9h)(HS_^5ZoVIfa?RVHFjzR#E7}pDxLUc!ol>Zr8%xf7hj`i_zsq$J>9(W@D9l z0a~>s3y~LOpw%T_ys)ZkU+h055O$3#p92vt*bm#cN0EF|?A`PZ_7c0Th?6giV3-*F z6vtou{N$scbVwwJPApld>r`w;@Y5CEN=VD1Q^gPCB`IVBZW>vcE1RA|+8_YffEG4k zd|k6?gqiBhm9Fs(kC@5s6p0=2cO79>+@wFcum?s<$_BF<^VyxLJdk?!G4W%15?qP1 zrD?-}JR^Ih;?b0C>^jMd#1=z}UlM>-L19a#C%lVYT2#@)3+<&2Sci{Tlc|qUTK4>C54~EQnCN{ypk7BN9m+a7-+2Ilq3BiTo zvnvOTmf2^e5}W9^q>EZpj)LOGqxIoAjTDvLaD|j;wG-4To4%=WM)~e{PKcgURUUpD zwEPxI)flE|Z@QIqs`y|Uw_2;Rizt$47~_wAjAu0AB)4t7`n;Dx) zjmAQX*+>UAjg{tTINrw)yp1z7?&vYpu{qP%bQ3e{4zncbpo*bG`9t_O4YGpCpBX#4 zYCdEpKJuqELKTqb!&Hf$RK(Yu!Qg1VSQ~D*)#hJHZglK>-K?5SLnvSBGvYB(M$EUt zj7&jn+I@)Y^^pSSJdilu&b`J025_^PLE9K2v8yVK;I42320;cOB=b;wnn3oJY5bKh zM$0PRU?uc91H3WZkS(Ms#r|f@Vr)YivD4bAUW>ioYgRj%a*us%#yq24u5j&=rglX! z5q%UkwOo^bzzZO3#5leQrCGLJ+HsHBl5Oq}V2Pgdzor70`CSJ8%vf`g<$}G~Z|=D; z9`w@SBI{`*`yPXA&i|Di=iwpGf6nnOejajXK!8kn3Z=Qbi&a^Qkd= z#0@^q?Ox!62c7s(i&9~h+rnH&^DQV}=Ht%M4%U$lC~%MLhZSPyb;;GjS-D!cg$A0- z@i}T-?W%U2m*ZTGotUe!TmawhFn~wA01A?IKFP|3d4d z>JU<=HX2(+^FX?YV12CQG2_dmTrChJA!`8IArdKnsjR3}R*D{jpzo1ks$C!FxEhkg(I2AM`vMd^Z^7JEn=o`mFBB++1JbfAxKIS?`Zq)P>#>I3h zUR2qIX@Dl-Ln8l?yCcivpJ{D${*Xw-dc!HhZPv%Rm%hUMJ6_7bj@gS{iKRTIngd^o zr=~PxKo~&O4x*D)Qb(IdW~IQ)Nf8^uz>n-p(MauO@)t;)tcvRFpknDNF-V9POI;*6 zqZmCXADJnkwwXLgyT|%RqsDhc6`Rx}@yLX|F_avv4iI-}J>wh#-pzM~S0i7*8zhFC z08MOpu8KofC~FlX3KV7$elVESn_$ok$bk$ODiKpq0-^;fS6ZdkRvC~sE>oB>=`i_h z2~6uDI|98ZvFm3xJw-$!NrB@JwPsMnaYd*+*yy&fQvGiZ(=}4lB@=W>RhrtQUYvEFB4(rgRoYB5AyC3! zR)jdXdtBUk8FMmjDG(9Mm}6>&Zki`2=9oN4lU6EIi_u&z`Hu9AI#{RlAgo48dDJH~ z9DiyohU4|-QOtid*E|{&K6*p0jyI3`hmY3o$fFtNQQ#iQ2>l3|W{?zVRxp4hJu+Wc zD%NIG!56qXNQDhQFBLX?mkMLleuT_Ss8pIIbJo~HGBzxg-ISuZht6R$ibA!6C~U6s zqOh@6_*t;Amidp4(9$U_KmIP6u;&MrWK9`)!E8B93aNNO`+mo8Gs2nN(+W*Hj9u3a zk=zbsj+aTy*j*~sBC8;vu2B#e{a*|LK;Ini?4{<7DvFXuNt(rG1z!b&+^DZQh->Cn z?iKE%p^9Wf7wN55y!MpNfG*FbZk19e7RdmjKLJ9}*9{LPgPLLR?WAs2#eAM5NV9RI ze2F5pQmeH)JE;${g!dw9P5%$FdPe z+vj*;K^=Ee!+G+wmCL$PVHw+InC&D(O)DK5=@Tzm7>_Q>Qe_KS&M3b;%C>^& zc$=!O{Y?ulll&iL3<%7o0Z9?+R9b!O65l9^TR-nc4--r_wanX^2HoRi9IL)8 zVo%AL5y5iIL^D#DNhp#V*~w0r%=*)nA#-3}rD_c4=H@eD=7C#-&~ z%Hp}OES{?!CS+y*!~w?0EPCO}P=T2)a_9 z`l{1Vn;&IFl~Q%!eDtS;iUu~i3CdG9Zj!E#SoSV5orPdtJ&*4B00)uv%MHBmuv%4K zPVz~0G`6Z+_6^$MYr6Xs3%`~##^N8n!g`zRt{TY-tdDg&GvwOdg`lcFh3u{2v^f53 zc&K}^G+J8z(t6~bMxhmM9^{cn2gZrrJZQcFX&0t9DX#U~CNA|CY9K79lx?4)vZ%YDoD!UVyY*$7M2XLcLbiicSL=fZ8qmWrEMd$JH0{^62yMR zP7vL*Je0lXqqMqLSh(33^@ykV@K5MNmFn(MfqM59-hG+w!;s!Jo>f}04=dvTdF@aC zIAw}yGa`Tf@k5KJ7}gWM{M>u_l6lz;pX7`Yqh}=kj^_F=Ma*Ph;m7XM44mE8qrX(W zhE|eoo?*Ag)5;2y!r1RLfMD`ug8OM0oFU%x-l+Q)#V#zi&cfZvwtVf!yi~qf)t{%P zd$+6g@~#5Aw}S5?e3>5b3ayBIgq4h4c~>ocWXe#9(h_8eIE^7_fEBSz9Pf^QVmq(* z?!j(0jq5LA=q*`Q z-S>Cx%vR5Nm^Tq+9IGw&BKCWgI}PNdP)3B6YBInqTe{eANkkR|QI;XxWPprktqY3G zOn@hv30Ui2eY~8!*qMMij`HvBh(b;nkQD{({C3W$V~hwS_f=;l%S=QcPCY92pkgs zRum)J;?o!-XpJS*gcheX6tV=sGQj<>60ZAvBx~0iH!yy~Mw^iWPi%5h^_kB{8e^+| zvA0+QQthIEQeCS*vFTYmpS4p1MyZN1b(y6VBhflq-ORcq8C6o#^I^$2+X{93UGezn zc!KCJbEqXU9PA%ADj*$!fj9I{QLH_5$Fy=V`(;=xQv#y#an2S)<}^V!t<;#&i>z=b zJ5@b^Nhvm363t8oBSmP2uzEIe#+Gq|g$ueq9>fe+(Hi#^4(20yu zkHRs_pwD+9dnzY-b-TzybM{S&Z;Xv^Ts9UP-#FqMZBmep&)hIQEs8&;LfpZe{hup& zDv?vWc|-lgvqcz#CAp_6y{Jrn^dU1sGe-fxTx1S^q0EfoKW)OPqbeEf*FPPpkZ0y;!OQa}TTvE#P{f<8x*SjMvU^MX~O9fD+g5O|wjvL`ZJfR@ z5{uT=?-+6*6f=ewpyGq#>)s_Vk}2cMt>?YaRl{$Q(_y++YDc}Sbq@YiFkaJAr2#M_ zuQ4uvw6y%#aG{8pye6-DWB7#?stFgx*WCLI%`$$sE)vd`>*hX7nRa+B_pw#X6>JRG zRpbTBj6$u?%#-|5+T44SEZA(%y=#G^hOPhMWpf!p<+x!tpUxEnfiyGMJsA9d!o zUwgMJZtEnyecQXezcaV`ByT}EyxN)D-P*fdaeF6e=+oZqwVk=$wY}T*ow?nmz1t0) zx!t+F+mAYP+q=EnPdjtFQ+u~J-qA@p?AYGz+RohW(BAEpX zXKs785BHKao#YLByTZ1!vNN|B;}yDH)tOs_qC&T~cIFoQxQH1;>_`f0Q&--Qbz%n}thwf982zC5dYqWChKRySc;gnA^1Moj z-)f#?LV{Dt2Og_cGL1#DQFd&2fS|L=4hG$CMNwX98p34a)tnxq#A-Xr^@6o;O&5*G z^6=x&AY!3`(;IHyD8ajw7x5R@{Rk^#ZE!T?wXZ-PDpG+Dipud>B?_b{zJZS%n+cW) z^2Yam=?954aJ5yYFkBSHu0^mnQStmgG_!7|k*bk+Rz(PJ+Oc-{X`$&A5=wrRpfh5Q`6A#;#?Y=l)%HZ=4V>QM&nA*_85)(NI`1dv7(N zDk?@kWy5~%hN&zhhnLRxr7@gL`7FFi{c zd%G6X?llXGz0}=qp|`i@90_iptgzeTxjjKEp3bQj)BS%zv}Z33jmJkyY#cHSR$@3blg-{olXwoz#LhTMBqrvp1KBC-soA5?>LTfJsW?Ga60)_A zT~aP_S23X6&t_EH#-ianf{@UJEkZF4)}rXq(vO;P36!epv#8S;82M=}h904$V`LRp zSXAJ;=X+WhULl2H&0(hp+U1}bAoFMKVdTbeIipHl_QKk(Yzm>QPA35+3rQ4O7`omN zuDBD|v(k9{{*~+K&$8LFl8z)l$vtedoW_L}ks}a#Fuzw2gn&e?%LpP=cQmp-cZ0Y? zIwDQ{;atz3g$G^}s03{r3!XF?KpHoR(PY5(a*63-Dog+)6hL`Zah%7R0+jUCViRZ2 z2PGUZ5MN80;|Jk)#QgY2S8#u>mPDRHb4WQqrk5%yjG4=^gHR=@@UTB+iZ8tr9;pl@ z*<6Qyxtk7H3y(-Lbzy~0(uFVDdsrwEjwA6Em@b*gx0KiwCKp3OCHBUHF+K>)BWEwL zOjZk&O%Sa&6+i$IjLjz0+)9AS4QVpW?b{cU2gBTyL^AbZB=)0{^6PsQ^}^)MaG@%( zA_}F*SoW?$d0=&0E72zCi@M9XQmfLA^w6aQ<%GOc_OyD9==h+5d1()0(h~GIyi$fX z_^AlGR~7|5Dql6-CvEsDqSvoOpljorpUXvRiFc5hu^ndfzrxljC) zh(2@Goqt7*@s;OOHNQcRp@Kw-GAMcqE`Lp+LnCLQ^uQPfFB|bf9D03j5urXTUzeNh zI~fwr<5srbMD@v2Qr^(MV_v18+tdPDW`xOuWujD$E8QGCnkNHcBrt zwVY4aqq8@jSOx z?{A+GBxSOqh}vhyzC65|)SU_oT{`h2sK(4ddmueoY zD5}Cf2nC#;UQ$$5I=@kO%ZsYix`?VI-v4m^41+Jzm!mRaAxW}%+Mqnqj8M7pVHEwD zX1h4HDL5Qs+)=E{FUaP7jI?rcIj#yTwG~B_D-kPGq&KRgbxo$&hNaBt^l?s3N84wc zysj&YXaYq+`B6P+%Iwmugrf$q6U_1AU0E|%P2qw(P3b`=V~5Dl2zIzr=min0A69)5 zCVYy`h(T%WpTxk~J2WRg^J*;GM_0-Pp6ODINT?Z1`ZyY7I<>9umc@$#PP*VcHmVjx{8%%X=NYdHLdhQT4Vez?#*sm6-xXG@68|b z-aO^Kc{A_LGv1pw^4>h_z4?9Ko9DbYzsq~`g7@aPd2fEAH!56G{d(S;k8?~T5YwS@ z;xFRD^eok4fB?j$f0gX4On+doJWEX`%Qd=X*<&}I=F8_*yT#cpuFtD7IH`bPFVeQa zQ(%dq^B$$foB5*{;D`~N6zQRHSwbmA zYtjZcGp>wz9-LFI*i~j^11Z|&Q>C)12ywvJkJ}{3cE_wh^uthxB=A8)ZN1Q!5GCSh z$$;^jLp11|F%ubGZPCllCMNEiSI~^cEWJGNUg|(8>%&m%ix(yfRMKX zR=;+{9~>Q`#Xrp$7#Rq!pC_&S)1Qm{%O`$S>N&f|E@E2$*Z9N-(Q26tt}<}ZJB*-YjC{h?Kdl&cJb`O9CMt^D8I z#kcjLG0V1D_~2;E&06@lF`IYyMQT|BG7nRoY)o|6r7($hM5-8#|C#&^>j zXIiEw^V$V$Duqp@T`>H|Lvj2Rwm%2O5|`= zjO00&J4su)qK%67i(a%>HRuc|rks1G7#wGsqcJltiFe7-T}5|wwAmu7OWGVsfsg$g(+d#!h?u>Ospxxk;B~cFvkQGOqnP(v-&55zZ;f(#C>1 zGV${XBkGLm>6UTTQy4l;%heIdq`hN4#}un7qSP@2cl;_;k2J>`RT66?iP~_JJ+r)G4sST;a!sv>r2Pg;RbQ0-Kvi^Vjx{x3Z*S~bBBiC&?r5d7 zUTepSc%OKGwHyv+!<+Psyq~Q)Eh?Yv#xqQNjPmx3?uQgb%tK9RBjsIbT{>sNTt6ze z*Y#!gdQJHJ+VF~I*tlaCXbIg>en!8i@?> z=$oO3dGu+x-`S&o1x;h%XTyIFdRLEr19~5it{^5ZhRnz(Af z-oVj!lO~k`#huR73?H4W9(mx%Q3s4j?mv1&&6v8;W9kk(FgdFF;86!B>qaLIs7}@% zR5NnS$l(-bDnWJBw4{=zbkj`@HOb)%T54?>XNqExqY3vv#gRxQSD#iHIyzbsi3A1o ze$d+}J?WNIW_UW2sBTIQuT3@7Wt6&-Xe{y#;`kiw1|0o2?sxR)pL5^eqkmCAkB6=T zTVH>frLD=@p@~$oIWct9FxqThgT06J{txjy4b&dDKEB0?^n#()bfbC6X1d6zVF!&d zG1jy+FG{M!RGDd&6~;D^M&eusXewFyYVK85R4?j7$}mJJ*Dfq(eVd+qHiAS` zQ%j9)m6=pS^E}fe%S&RBqe#m|-6N5nT=i4>gfdWrFA_3$W-{H@lo>m=t$A@O(K=}G z+<lS?w~-Rfz9!%2xuqP;^s zEpRvm&QjoTDzVm1Y#|{_G7}Tc%`KT3iBvi{eL+JeOyA_@nwDBB19!(ZryJ&xvT1Oe zQDb;8%Om5})v4s72Gc%fC+2-UnQDn=sK)BHOma#~YJnc$<%mRjVtqqXEqw-RTC#aw zrvBLG#^#pA&2lw4Y(#QBsjZdLWU%mqp4d{G%)Lk@n&%}$?=*m9YLQZ>Fe&j|>sCt- zT^*N9r77!>@8(kIVhSTYBbo9X%E>fZ;7k>+2%8r*CQ)h# znYuB@v}7hWB&XKeYuH#IrqpIzcA|Cy6;x9{8&M#cnc7SzY^a^lmad;(J)b5YW(z-) zn_JrE)l+mejZ-tp1?kx>q_KG^_hAA}Y3Irj#aAQ@js~N$F;$u^n#t0ToST?2#!bj6u=nJILe>JhLAkg1=%pf$796z(xC$2Ko!_?X&U*FtX#L-Mj?+f<0 zafwueqypQRXC)IUH7_1`VIAAtkWsyOkHVZzl>q8Jo|QDowEcxf)I3jqCpF}G^_dv0 zLawGXG$l=8h-D>UnG|x!xMrD=E6e$g)3_7X%2dYChMI;9wUf?FT0FfKDLNe67=HWG zE*yPf0X+{!qjoc_Hd);^Z%)FnT1UVf+^u1U>5!^Z%NmxfpOb$xr#|bxfo2domeB3p z&Y?XzvZW?>*Mu}9b0<&*hJ&ww zBf!^z#x2P*8k02cNzQT4^ju?*{3)%D?hU<D|kgiz^3LXEP=T^``Zw!+KJU zspdQfEv*_<5>27YU_oMDLk%7apPLGANC%mgmVlwLsp$*CD2SrDZ9#QXO(mFlTpXFa z)}$fr1z;j|^rY#tTw+`+LvWbatP#a`ljmvjv?)Prs)eC?!IygOz%4W8C2DxP6m{Uf<3N*h()Dn+=GrALGsdf)G2v~OhA{4SCE*QYfda7Z!U4)W$xnSc zsH5_eb6V@Ej-ZA4VqH_qVm}E?0gOnBqqH1-c~~wZ+2DLHo#Zp*A9+Pu*ew0BbQ!md z#!s)ypT?T7ZrtmM)2B=c>KLWJv@IBy9kunX=N&CZ$`wyLaM&m_tu;KYhMWu!(+(3^ zyJIY(*-9K9CZ3U(g}f|QBY+P*aCDee=kMq*^_O3ACd2K+9XX<)2t$5f)3RWJ>#;6r z;j5;WL~Y>S+xq+>7pB{6wTf_)7~(#?^T!ECJN~%!b=z?=j1v;;aroNVvnPE+% z9?+#1G}H!P37V44<-5j={I!Po)gGpSy?~>qa4${sb|~+T#HYwO(&Nidj^1|tq7$CS z?4Z77xEQj;rpU9TqmF#v4E6?&zA>cdP+0ES_jz_0aA}>(z1n;Mt4S|iP~FlL7?p9z z$qGl6j@XuUFV<8L-lhz@VSv`DOYbDowrym;FD%R40787R-C~gjuF-HTaP&WUrt&Sw zTTUJeLrMRa8sOuk({F!{cJ0s6b4j!6cxpXsaC9m0_xEVE zmAFU$hkK1h&i&`y`|gVh{C9^Q;ko|{_ZnNA{|mYI!+Qx@^Us<@D~g27(yR>W`C(zx zxN%|ZS3nPiKEQK73|cw>{j@ev0yKVZ#u~x4TmpzZ-!Fd+U}Bip>7n#Z(y}WsT9J%v z0R+VbD=sZj`F$o{%L0abDQ%F?q(jGWZ%tKdmjrSgiOeJ}tq@9<9>&$tBcKn2 zPNZ2P&~!JbOE4DIjt!cVi|5b+gRdN_@!GjR897M$g{?22j^)GxwMJweW#RKhM?1c_ zEgR*Dd*!#utq;4Vg%von#E>3dok=B=!S3_$& za{lK*YrJrD6LghFFM!?``WRaGv9qTP9TT*h>E&Me6KqYNT|Z+sXO>e~P*smI%7~nn z&$&8gb~vqeYNa8@;SjlOrx!t$l&7eHcC$}AF?C{^uh1}4ck~q~*SEgDzJN!ik}zDe zs$%5Qe!2S2#0C|QW5|AdhaYonN5RRtg6QP6(+<`%4cdgz@>K?=%tGZ5 zTKi;HJ7$})KQiRE8>e%!?#%Lwod&ohw0j{|&l0i!ez?~xZMw4R$-HiqAN9nRwx-&k zxg~=^1iBE@YE5Ggm%)OgXAPA$Q!m`3oTDkyPZ@Qp3T*4!dB=RPaI6`>PySfr=(l1s6*+6XXv8Mk3%j=&bF7?-~j}PG~G>%$9*qXl|#vmd&*yZhV#+7c+vr`Rl z%?!%%dTdu3b(aX5wDO$_oQxY87&CsiK3%EA;yI)Zt~G=(m9G2X|4N6e&$--hoAGti zt&UcbmPX>e8c0u7)6|k~OC^Jb=0z=ylujyH(}wxQqGS`|ek!O%VmR%@RVv`T6;H7l)DHVZ*pT3TnB7})`a>}23yI9*)dP*Wc) zHq4<(jDfb$)|^h%B{e)Iw1P~L1PX5JTY@ir(IV#5Vx-^<`VJgy=YC%;wQZIv$<8+_ zxtIJP=%=}oAelw&TTma;mtypLm9XL)e~EqA>Rwx#>a6~(0n3iznN*@7lOC>n*e3-o%t|j^pAoL#w*FZ_e_TNK zz`tMDWzfF=U7)1{aq;ynpesY#r8Cr(ARLNMX$6gJ;Q!g7vB(}?I1}-wcDm_(RB{rH z7uE+GwKi$#U@;xqh??pUl}O825z)V07x5jB4L&6eOR8Vp?w}D+K=xjXuq8v zUqIJG`~2b(=)enq1+>pUu7Z{hNIz~36yL;<`TEZXLmZoJbEZY;b=IHe)#m9)^LNy& z#G+)nsU_pP*$={4+D&U|X>0;|$JOGsRa8X8WX8jqsWQ$A03M~+OY2wTMGnZ!XNs{G+X@nup?83M`48ze+KnLFYA42=?e+sSk;oQFrtvopT zm(bGcIa-pJ|2{^Y`SelH;=s=RZ0KE}O`g~r!Onvux=@VD&32jwghN!Ei`gt-pE`eM z<4+^2qr1Y|H8T3NtPLfR^UB~Lu46(tcL#T|QvIg$RkzzAKzwCV)-)uTNA;~bC>9w{ z*e=}t30LuNdAOSVvu6p-tBoNN`Gh!*^x`;(IQ+8R8(QtdrC~rwZ~OibW_>t2o?s=X zjIlgaR#tlxzoUFE8TCCNJaVQ9^o9sM}8(&gw^pw*8Z{RFfh|9OmSe!eBINgi|VZ-y41 zbMzh1e*BL>OY(N_{{%h2qd$TUJh}wF;n%|)XpMEwe=W3TDULo9+OMaJp#A(^RzQCh z&6WC%^M4HV_UYI8d}`34`FzUJj!*gY{-n>*j!*e?;d}9^ZQnoAt=ed)e*G?K{|0er zOi@`oTJ@y5@M-bj_FATfU>pl;(yWCB7K1dSbN)0YYv$-^<^6 zyZiISuh{YIe8SaO?&#IrtG#V~Tw0lEXr9CF+?wQ^Pzh{#{FuY69QSYHfo*Kk%EXQM z>Ay|Vm0OuuOPJFL)2&Q!o0V6#Pn)V{9>QQ((`X7}+<2?~)@r=klB3V$UUHqI&*nbx z=)1UAyL0c?a<4w`=-+a`k4L}Bz3SAxf1CSCkJcnyJl4J630iGp)>5`pFB#N*T-;j1 zh;Q)9{HF0t_iD#;!+WQ>V2|8{hIw=5u$-S}ym8WmeBS72#~XcGyus0qH~Mtp z`|Zl}C?i~0JP*f_g-^7$zLe= zQ1bVw{00*Zm819NnCXk3j+9?4rW=_A{<}7> zOPghj@H{!0O57hH^=jmrrB*z3k~4Q*kXXV)el8c2xu20rF5uvfhSsK~&Rt4N*lAYM z=ipm~AsKjkGrfv#^K%sUTD$X~X=Y>B?esL~_Gs?S8l8EXdwvYG&gxKl(5kj*{m{@_ zf7XMM`XilB&W|)3a+6J$))ir@sf^BNncQ5fi=lNa5VS5|Yf06b!#FtS>zI~2(tj0~ z2}!|w^Gp$X3ze=6)Hn31v$e_@N;p5~UTc+dpSNDQ?HdT{&FVJJ6H3Z{=+I-Vh7jS@ zXki@vF0}YhH$b<@UMsj)yVdMpJp7EKIfDUQ3a$pL!JXhS@H5a}^I)_N;ks9P7!P$P3>%4WF7Ye`0dVy5+>i9=SGn)$(I0THnUizB7xgVU!O{Cc z2Od4VfYzQE|2+ppM#g*Y#}&LEUqHtT=&wPWdJG5ntf3^fo{1WBa1xV6&KV<)%9*i< z;@;Bs3=AW__PnWqeNp3riSZfniBo5vuwC*WuFO14TE0OV zu7vTbtlOt0$&rP_>XQxg>NCNihgxNANDd7~I{$Zv{vGW!hwa1T7@v^a5?XCKV+rT) zP?$W5fQX~DDxq1Uqn|FIKZEYS$?0xZu5*d^!rfSG^Z#(z7Tlhvt>+<~aeuqYH2PTE z7S5+FNOpDf8_;V1j-EjI4)W*^c`xmQd;bA+A85MpK$HNB*%)VZ18FG-*ccQ})MV&B zX-YijZv*~R?=GBop#6Az5U(_S?){F?l^#7DdIyh|?Pirn^96;xbngo-x!HxMeWAYl zouU2sc8B)!*|&h+3tIIbvaWP}TU{NNk9Ms-ECEct+m(QeKZ<`p|BIl-i{1Oh(3-P3 z`dnx~{h|l+{{J;C##vvpT8y!zPqL_^H*i1Bqn(z+y?0s;mtXNjzg-s7K74vgNN*{R z%G#CN(`>)=T!tSUZ#6C_auv^(EU&qeqcx9JeQjxaa$|-&xhfLbKwOe{Rs%EV+v-Vq zXFQ>%N&He{;1MU-y|=4~Q|0aGTe(;NboA}qOAdDQBiyUMIQmiUJ04?<{9CQ7;AYCm;x)!|3| z$I)}SSA96TntSmdM=$5zPx}qf;%Dytueq0oP(Pjd!2ifBFdG~Tjsuz}3&#V^gBjw? zT>a}@HCCSpv@#~>$IxZM`5&(86LWzJC&9gbumR&n>8$~^z`0Re`Z+h6bSvNUfOF%* zQF?`X&;aIxLO0?Oa?=Q!zyi;W;@W;=Dr_EOeWnHUAWm4FiT+)a*y;8(!e-*G04mQG zaPEngN9t@D_3KS-8_r*x0+WS=qlZ9iEOhj#(8E1?HMHv9z5gw=v<8lTv%q~R6)Wo; z_r4pnAKp0VUA*@#(0+Pk#kPm{elE0heJ;GSpp|b&%X-bHuY&f|D?4*Py)Q#6eFu%+ zf7Hkk!-ox>_qPcX|2Sm7eFqO3IAEXtdskJC3HI7^kA9!8xbgCHS6y@GZ+~~rN$>vT zf8SX9`inn!=)QYz{r(Go_~F$L-*wuOC$D?v_Q$`w`iiG7I`58q9=YYw*1Mm2?AqlQ zpM3VR%g+B!>i1Xv^VPp>`0TCUy#0@F-~YjTfB)#63qJnv-+%h?vm1Z4^1+`yaC+Z$ zzkK#C)VXDw(xrDbN*q6-(EvG~-R+D@E5>xi0f z#;4!>=kGoL#GAkP>2tq+?dR`*a{XVO&T~tz+p#^jv(7z!&i}1-?mFUEe-_W{4)jxh z5?a9wlVWc8x#tVH&+m%ay2+C=bk^dd`U>BR-K@~fY7uX(e6j$X?B z*2^b3YmMazYppQ|{vrM&>jFQ%lOSgCfd~KD$q?JU-G-X2Shdw_X^x_?a9X%lIi(?$ z&NyOP3rAL`GX=I0N^-W1oMNaPeQE)HT1dNcJ{_79d+QqJNg0K~ZcWnsnZx>2?b11Q ziHs!^iTTcXbb`pKF2^Zhx_ebXP!XzY)w9|`8M&p@$+2n&-3W> zx!2F7^#V&8nSy2+kz8biO;p^R-JMu6CyWUBGt-huG-YXZ-E`z%v>Ao9tTtx!0cVHT zn@LkS&(DYM$#o@H$-^`328Q&7+`BYh#C>%e`x`Rp`b4^3C2FptT3Z%t9PAb1T;jSM z+z9@g<=a1L%Xcp6kWA_5YTbME-ZZL8kM0jG_wD6h*RDc|o}+O_Zubmj+b}X$B=RwN z()gfxnB?I0X>?VggL_71-Am4ud*@#=zGNFmOU4}H(UOgKEuaJF@!m5rJcVic^-y)} z?3T_@m2S2*q;&|XD>=7wP%9JcA!OSF7VdSN)9i&S+1O93WJ%2tTw2A4#D^WNIl$f? zeJl6!zul`Q%#7IR-+pDyT;6RQqo6+}?=+dn;bpc>Y`=Kh@7&5X}dOUO$_;1$jjK=)Bb+oJ7tuD7t&UJX5c*Seoxei+$kJa8 zq1AVMTKaZJU&nhtKIy0Z^vLSa&(9Oket!M{y^j~3)-zO>F8p_){qp&&!2N#;+<#u+ zzA~Dh9<4w4`O84Zz4)$x_Tzghe7}9$mKhcKl8zC{BFkIsxd)O#x_fD>3hC{e7TeYP zv|4@kLoUuOJSV!Ne!HBo)o;%SstZT2=HB$^nBA0?K<(3`gGP5wBJGGarIo)s$rp1`sopMSbf=?ZBSkG3kR(uf`%Wr9)kj4h` zeHjHH$&PRGXbYe@XH9up%<^MB$A*N0X~3#oxKzhEQyj2VYtKJ)-uNm68Q_3fS*e@z zMcTd5=b~)*{`;W`_U0x7K91ECm^GDL2*IEQiAK(OF{afV_!90?97;q@L0vMT9m)a6 z;qhTW&M2xK9L5-iSi?d7tf;1w#w2@@4!<=^jpkgaw9V%t4k$I}8+8(s38RCU%#uaG z*+^`IkS?#aZA24SMs#lo5}R&2Qc4sbL5%eZH;*Bq?j!ih1RkcK8cYvR!EwLN(4VgujbxVk$IYX{#|IlEwM&q zTsVKDH`lb67Mn)q7WG#!p*962|)Lm2~A9f!rwJ->r{+Tm2%U^VvT^s3yu zHQZ06_f4Vmxieq7@=QE{CT_HO_b-Y?W-ew$AJhVk9dhHYqj+`*m;jCf`nkBZBBr0C z?b{rEr+uA$e;4$Yj?39eZzr>*ilqg!rT^mCn<4H7@-_xYqIUFb?)!UmqTu~W(EEDt zMNjtVleyO_q6_ad?j_Os^uZqe2KRn^Z$e87bMDp0`W4Uzc(mG~_?~kw+JAo!bfx!R z^bsEYIQN4*`bqA;;?d7=f2c?Ql>2==`W5a2kA9tdrN8~yR%uKqQu@|r`WuOF%Iv@l z&f!tOp$)=-7Pf1#AZ?vhe{--Gw$iSC;PR^e<)>Z!$}fBE!_@4^xz~w-EPVH$krtoUSqY=O^vQD7k587Xa{t9;>DzDQ@+vFY zZeG}$+4*H7xxuGDh4$NVF*C12JpZEo_ilEClPs^eoBOFcxe_sxQ*mq^$^pNU5URti z<|hSOkrPkN*NXVGv?7jnS`nY#8m&l{zuEM3s72dA+P*;=J_o8xNB@oc9X0 zd#6Qn^myJ?0sXeV{4y#346AETvpa&`EVVM6PgfG3qhH~@X#Hp|2H)qprRnKt-Ztd) z{CV3p2-}>Lt-1ZVgnbn0y@-5>XFA%QoyMbVJC&BC-4`}_=E@>TgI0Yx`ezi#LD1W8 z{)luzrG-aHM8+($);RUVE1u=(254!N96i5)z6V<4gM0r#fq(5YRe0GGk~G88!8753 z;E^+8M!t6bU&ejlg(vGE@nrY@O=!ucj(!i?Pp?+FmEOY+J*@Juafco@t}^F#G(5)- zOSGSMS^4^5&4Av=i|fRK_i5(pRoTr4Qq`6ReV09**`%7@|=kvSJem=if zK;H%Jm$@v!cJ{*iKD647>BTxMofEa2*)>uf9vjCLFL~lwF(dD}H2(xYei~kdri*0r z^jGLAkNyX=#ysbLFnmgBXfH$9b7bh(!+*e*;Gh)b2RHFb53CBY8XUpn3dszQVI;`oo4xb*It-E0b>7EHa z(kr87A$_X%OkaQW>+Hb-Kd%_kmVhabW}n?<))54=#AWZ}`5G+$`7^yd%ET7 zwv0J#ap1u5=fzAuYPcc>WYa&3^hh>#`S}*K_%@fUdrO=Y(exAuX5}}&a z3G=-NeSefQ7+N{3CDpPZK(jT4k5ebjiI-yo+y@uLjBK<0WMj00`pQCcx(O-3EaS~4 z&iTYGeTLdnVR{|UtdXv~lZ3A&42>NwtQR^7s~Y`kxNy>83G`czrJNVeE1iU64|(h` zh)6AANbls*vYva5g^u3HJ>AgsBmbHBkE1`}Uh;>dbyS7gm!l6Wpyxs>O!vOFfKEb7 zws-FrK}!a8^a5z&p%P`?=84{kifJ&G43`li~YL z_;y`WVjkby7}jQ&6$cG=;rtIWqS{4i_lovjt(vY=znRdl`0>FY4!#Z&;G_;{9z{+E zicbhaa4~H|?*tcKCHK;qy6}RK)^nBpSTG)FJ~9`a4CLO0-<^A*JVXUoL3%?W2odM1 zbh~&RJ%?vP0w_QJ`zhh`ImE!+Ap-BEmOW^jSzf(-zn{ zW(_24E$c6eMg9oh22^>3re@;P)!n-^=&Ja;gl=>%Kf%SZ$QW=0m;vU3RcWg7C&)~yLj6(&>z%GFLqjOKMoWqabwB8^-e55D-q5^x-O7A*xwZeCa?Iv}-Pl89Dp6 zT-APEnG`e%s}sP6p|FW<#GiPB^HX^33QdyVgYvo8$eG2BS5>&Oju9L91Ya1DbFlATcE z=MDU7Zt^(kR2U8BOCn8t4Xm&)4bgW3VK8*E=33Q(Ghxxra$_{ow3Io^<~4jQJECds^uyZ7S@@Ux>|DcmaPx~WW@DB?edD$Yw|fz`hxB&S_Feg z%M~#*t`)XLuQ%7It8Yr9I)$*tkuJ|KhgCLb8tNJ_lCdSF)5z?!ENn@*e+qv?xn2|I z??JATMPBEsGX6K$fU6E>8k)dJp}AI{<*8|EGd3dju|6otcj9UTLslp2S%$}zZB|+S z5$SVfEHaU>Cenv$xgJahl#HIG8DLabj{a&$Cz{ZJB$`_56A7K^RNa(lZmi*y5X@BI z?emz1)Ek4YR!&pPw8C98=6pC~*R>c9zQnl8g}W02Rc|kzy`cB@=pyt&{`(ea)xAqs zs(@}QpqCWTYoJw@&i~y7w6l3}@9z)&Ka3x>QH`sQ0R40?tOU%s{(ocB5`_6Wp6la4 zvYYbx1b7ng#h)ARdxmfGbrsis3jDwD#hc7)@FN#r zoj=2ORwmgzgssleZgtGj^QaE>*71ZhovT~<`o9+olKOa}nf;%5O)OGP+BCWecZl#S1xN251m}@VO9utP;(zt|o;wp}QlzZ85JNjqb@8Quu;a;P!doS95 z|I_e&z;A4jbGL!#;;PP{I?!RzTi>{Hduun4w`qiF_twVOK1xsh_{AMmj86mYI^^Ss zQX9?Zqoa%;+~rQ2vfs^N-yv3z<}f*PwA|LGkIrOGyDz+s$q4DV8fcQ}=~?&ZDwY?I_6oGOJwh~p^2bPLpuc3sfXKMlK}qg|JL2EUGB{*e1; zfhJ|!PZAFg@ZQwEKb9)Dk_U4OOr4Pw%onO@rz3B`V2!k{r3?~W&jISXj-Es#+TEk2 z{E@)o-aiN}WvHWdG>^JpIG@e8Sa!mAXtuol%BQKJnu^^>-sX~)cfp=OKMiWa8W76c zvKckp_;j9q4iEbL^DS>**`cHprS|ew`AY2{5vPP5rRh0<=#N2nFn4A$&8fv>$F?;~ z&pT-FT-Gf0E#SGNbgo@%+6G-9`#p)s@YVUl6G_RI)$=0wxw3nK`(rsm-V~Z?R~Yfn z$+Q?&9&QQ$F>YL+5UbSB`4_94g3dY{hBUcpF(mHb zqg$GxTRd!1e3sIFa;bA#IvS?BZ2sX;+w|x zXmAYBFgyc%70d*)fa06Y^;mEm_!^KKZdG(2_zG9oMkG8XI(dVmTbV?P-HYH*XGpNs`%K)5rIq2R7S zM`rH^`hdP*cc5dl`vDo~?FlMD0QLq|U?0#Q3m2lfR+!4M#0!C_#3pd(NZ z0HeV{Ku2+p1)5mtcuO65`4w;|7!RcAp8(=Oe03t20w#kaz~SI1a3nYyOas$_77V@$ zW`J2>CO8(%2HN^|95?|S5557u4!#La1arXufCQKeYCtv6B0?>g2kL+fnCd|zm=6|! zCeQ+!!9vgq(jW!eKn5%ZivTP$auV02;1qB&I1QW%)GyLtVw8JuCeOYF&IV_J**rU! z>$kyi+?ie&SvA?C0QTU@dqFybOK;)`4GwUx8P^tKfgZZ@{m? z>)@E&*<{0Y1d{tPyNzk;!bgw4vqmW_+J28!5R2JM`3{T!NuSbaK|ln^V%A&E1)mrdONt1`zyd*+*jlO zPOjHNH*5$|r}dN0?zxK1MOd%1oeOy>R}-Sh4qpd+>(0Z;4&AK=;w z^jYc@SPT|{&%l4c=io!I2HXi`oOL&N5&R7N9NY_Jl(iPz2kr+l+WHtg2p$3tgI|D; zz+~X!f0X-;;0NFVnv=%T$H5aoAFX=|=u^>8gAc$n;D_K@@FVaXcm+HU^a<)8g8`NF zKdwIo=YVs;dEk6-DfkXhS}y}Dz~w+`y#ibbRsuh*Dle7Q)m)XAn%%1a1aO^DW?3a2rsXZ|8akSPm`%7lZ!=O0UXS=~6kW3>Aj* zt~gajFM(f!SHWxGH{iG6b?|%eJMboW1H1+P0R9NpgLlB&;63mz_!D>^{26Qje+7R5 z%D?JM`BQ!T6PylQx>RN=%Ll+G;2+>`;NRe1;AC(LI2Ft&VGIN_!7MNv91D&EUjzD_ z_X*(Z;2YpX@J;YPU=A1oMgo0+a2XnCeQ0nrID`8GxE=@&0%L$aLNgW|0>*(u!B@by zaC;cn@gNS)gr30lEUssRiQG>DlYxxu4hKhosX(72KL~-I|8N6 zC`h?i+IHruk4x?f`heZQ?w~K|2lfDa0;Nrg)BschrLBsqOWWSu_Xqoc0bn4|#~Ed) zxGzxJ_TxGP3r-ReL8DJT> z0Gtml1k1t2;39A-xCC4Vz5^}?`sDkS;0kaRSP8BHSA*-owcrMDJy;D^f$xFuf}6mN z;1+N*xDDJ2?f|!gJHZ-oH@FMj3+@5;f$xI{!2RGM@E~{uJPdvS9tDqs$H0@|3Gfnl z20RU(1wRDOfggbv!1LfI;K$%a@Kf+}@H6lf_yt%CehFR%uYh&nf5ET7ufeO}HSino zTktygJ@_4X6TAW50)GI11na>&;BD|8co+N$ybt~iHh{l^zkm0b1ARbWushfT^aFc=JwYW1z}}z=>;w9PfnWd_3Z0Y90R6<8Q`m6CYS|ggJZ#QKuV}05Cz4c1eAg;`rReL+942iOzr1p-hBs=(f$KiCHh z1Vh0k@VZOEcfe&}1-Kks0j>lq!ByaDa1FQ?TnDZPH-J@OHTW+09=H+Q1a1bmfLpXvOeQ+PRA3Oja1P_6S!6V>N@Hlt^JPBIwpe=zENP`S$1B<|7 zummgxCxMf}Dd1Fa8aN#+180D5fiuBb;B0UX_%=8foCnSa7l7s9LU0kd7+eA_1>XUe zffe9#a0R#$tOQqqtHCwkT5uh>9^3#{fz{x<;CtXka1*#0+yZU|w}IQi9bgT(6Wj&v z2KRt_!S}&^;C}D`cn~}U9tMwqN5K!kW8iV{1b7mBvJ<=t{0saWda1lGpj<=|!TORx^S z^8e9v2Vj-Y>BGiPHiQsjW5;d?A%qY@2qA73v5edsNEn?~s!dY9g#F?ydqpbu%BKBAB5 z6Pln;=`;GACg}_MlD?uT`kKC>Z)uvoqwnblT1r3CPxN0}MnBUp^gsGP`i;)v>x?;k zZSow~qgbt>I=nyKU!{|^toXY4(I)aX( zayo{Nrempsj;G^jHvNYxz0To!0?nl=I+5nle5$6C=_ERZYG?tSN~cjREuw{VI@Qsc zbOxP8_4Ic-o6eyII+y-I=TReFKZQl%QF@&E=t+8lo}zwwhMuNpX@H)m=ja6*q?hPLdYOjkReFV9qhWf3UZ*!{gx;pN z=p7oR_vl@EpT_7z`hY&7ar%TlrcY^tKBv#<3!0>_=u7&Vrs!MxhQ6a|`hmWuA89H5 zmwuw3X&L=WztI0^hJK^}qZGbQUWrzwRVbBKrPXM4iaR%wXgT^5CDZb>09jUw(`K|eZ9zG-C2d7pQzmUd8`4IUMH|y5v?=A&PP8-aLIt!d z?MAy(E^R~G(sqZCj9PP&V_=x(})?xl9RiEgG_sDo~$+vs-crAMfby6HZurPJsEir1Xtb(}|Nh`(P* zi>QuHr)OxC-l1W7jn1GmX_CI6DH^Ab=xq8seM&P_PiIjBokKrRysq;C9l+E6WO|l9 zrGt2_XIrYJ(`X?rqB=UA&Y&}?p3b7P>F?A)=g>dsT&kqmbOOzxDw<34=tQcf`E(MU zOf_^0ok|O+i7uewEPlN7I=w+7^d`MUZ__BfL+{diG)C{!2lOG0(?|3%eL@rTDSbwt z(U1>MkoeF6W+LQL8BHEkwp?#^C_M`pj04kva=^#3o zO6d?fln$dZI-HK6BdMH@qNC{;s-R=(IEqP-BwCLCM9H)~tw1YM3avyd(<+ootI}$; zI;GJXv?i@Z>9jVjLw}|WT9?+NztAjNpZ-dJqfFX>Hl&Rxi#DcBXj96j&1iGlf^uj} z+KOgVC7sOc&F640%{g3S70_-}&EqH1Ni?5o=wynU5>KNTIzN;a@z_E-gHEU2d90Am z!;N$Solh516J1Of(Lbq~E~QK8GHRhK=yJM}TIp)KivC55>ECn>T}w;oKXe^kPi=G~ z-9R@{JKaJz)2-A&x6^HO2X)e2bSK?SU34$qL-$cPJwW%GQG(gYObMyiY(o6Iry-Y*&D!oFl(J;M1uhW|}LT}Ss^bU>Ed-N{7 zPh<2UeLx@4IDJAN(-eJ0-_Y0e1AR~24w2y2gT&2r3w6+~bQ|4HopcA?Nq12f-A(t< zz0^(j(f#xQ_0WU#5Is!2^awplk5L~zPEXL2)K5>*)AS4t(6jVBy-a)XHB}+)MSIfT zR7CsIKC~YdQ!`(a#n)ePjjzQHq!K!q4x&S-ln$dq>2NBeBk2e_ipuF2I+~893Ob&S zquEqRbLa$`OI36t&7=8LO()YybPCnbdDKW3(D`&BHPOX%5&e^z=~B9cE~6H@f-a{k zsg$OWRW( z?MOS&PLxl((9X0g70~Xq8|^`bv={A3ds7kZOZ(7%R7?lZ{&XOf(7|*N9YUpa7#&K7 zQyCpeN6=AJPRG#EbSzcS@pK%`rb?PaC(vA~q7!Kz&8KQQnNFfpsD>8MsdP4-MGf@# zFux9-%k>|09yQVhbUs~3O>{9`L@jhF#X#DXTwCdCx{3zq-*gRKOH1fKbRAt!ZFD2u zKsQl4-9k6ht<*uc(`|GIb<#ZkJry*YYUm`ofi9-&=`ddZc#x0lp@-=qdW3rEF?y69 zr#^a;o}g#wXbSK?K zU353yL-$fQ-ADJ+1Jpwg(nItx_0l8sC_P4f^f*01Pf|ZUMNiW+G(gYNbM!n7(hKw= zy+lLwGQC2t(lEV7uhSbeLT}Pr^frysJM=ESM`QFpeLx@5IDJGP(OMdQZ{Wyo6{DQLtD~Tv^C|@Hnc5mM|re8?La$HKJ7$1Q+9F^ z?_nkJdRP+gUnTMWRTA%CCGq}M67OFn@xEUY@B1b38e0rh0DTP*| zm1z}9rB!J)TAk8p4O)}dqI6oD)}cRB2CYl$(O+m5txtcYzfmS_KpWCVltmlUCbTJy z(mV7ny+>p8K7BwR(l~uYAJZo^L7&oR^f^t^7xX24MN{-OeM8^UG<`?k(+{+iex#r1 zzqE{greEk+>ZbeXetLj<=s|jj9;RM;gdU~GsE;0}C+JD)r>E#?dWHt*S$dA1r$Ksw zUZj_3h+d{w=v5k~*XVV6gZfkX_ULJPh6d|cVbTuuef6+DcZ(2gv(slG7YNPAv z2D*{j=_b0FZlMmkm2RWksgv%YJLxX!qPyuHx|h1?KDwX!Gx&L-r|B6Qpl9hhdY%U9 z1$vQQq9J;jUZGcMm|mmT=?xm8H|Z^Un?~s!dY9g#F?ydqpbx2?Zlas%7V4l|={CBZ zI_VC&lkTD}x|{Byd#Ri5qxY)eeA$pj4=@ELA9-}^boSvX3sq)mM#B4f&=1>*Q zrFnEBRnvSriB6^(I)zT91yoC?(L!28b#ywNL1$7uokeHU->HGlp?}c1R7iW!p0pPg z(cZKV?Mub9AMH;EPzfDK2hqV)N{7&)bQqP<;dBHYN#%4D9Zknj1szMr(ebn)H?3_% zS+p^2LYq=HZAP2Z7L-F<(pI!J<rh0DTP*|m1z}9rB!J)TAk8p4O)}dqI6oD)}cRB2CYl$(O+m5 ztxtcYzfmS_Kzr~~Kr&xM@jXiHNhx|SoT`g(n%*0y>wR#B-WSi(asP9sj{BgqbleY} zt>d+-9Lyix5+#)9;|Jn=9rsEX=(uOPP?zE&9rsWd>$sP?L?4DraeVu6Uv;^UAC4<@ z+-F^><9_QZ9rs;V>$v~AM#p{FwR$$L(}74dOlvP zPr^%dyuR0lss8SPs6=>A@0+Qa6gW3zm5id{B%5|&%nbv z?u#GM^>|dDg~#;ScwEQ*Y!f)X{eGJA@u%>#ei|>;&){Wx0MF=njWfRRk8kHWO2P3Q zex6cw+=rf~<9_sX9rvYY=$G&;J%ls$%Q#ENee2me?qAQ*!#G#R{p@)9{YxT#w-j9rwvs>JM<0{t#E|aa^N6!nOKi zT&F+5^?Cv~=y*-J5y$8JGivtn&vA>M#I5=ZyjXvUm*}r>o1Vh$`fJ>wzrmgQTim6m zaku^s_vr6&ul@n|>7}?||A+_lPk2x-!$bOKJgk4gBRXawM)eFH)BnTc`v35R=1Yvk zq>d-%lup9adO5sQ{|PVC{P8g{qnF3=;#OQ%;4jH~MVz8jaH?Jjr|Fe(x?TlmX#Nvn^T(1ziC!0%>h*A$ z{tGVGvv7r8A6M$X;wt?&T&**4jotv)>J4$7-U!$0EZm?s#*KOt+@v?f%{m*m=*@7e z-W)I1Ti_)+2e;`hal76Mcj&Egr`{HK>Fsd0&ci)=d)%vcz zJ^-ia5}c|J#A*5Up?MpNQ*qHEz)J zaicy7H|djcv#!A{`V`!%`QvtCv0i|e=vv&SPs8ncA@0zNaHp=rUHWv~tv5kx3-{}@@qqq29@GtZNS}j;^*`{4J{OPT_`R-8PDL3iOseK&5>_uyuIFK*G@xK-bW7wh}+68!*f(>=IdKZrZ@ zL%35vjJtF%?$(ds9^Hp~_2altKZ*PG03N{cynPlA>F4l>ejbnMK|G;fz*G7~yi~u0 zXY>$G<_)*__Fu-Sn9J{TXleRY9!S^2I77dNXX)2*rhWrw=@Fc*-^4lkEu5?0#(8=a z=j(THfqoYk>i2Mw9>c}@eO#hHz@_>_T&Blyx&8=O=#O!w{sdR)30$o|#WngfT&q9F zb$Sxl>o0JF{t`FpuW*x|!p-_?+@in1t@>NMSbv9?;Q0Ca9=GcsaHn31yZ!hdagY89 z_v-)RKD`Y0>!0y}{sj-}U-6Kh!NdB0ctrmn9@W3$F&*F8ah-%G^m2Go$86w~j@iIz z9kYT>6kT4*D-6Dp=0)NmX6uO zOdYd`SvqDBvvtfS=IEGB%+)cgn5Sb_F<-~*Vu6m?#X=pkj72(T8H;tyHkRm^Z7kI> z>sY2^*0Eg2>|=$_#FctOT%}_svRcPXWQ~p)$yyyVl65*}ChK)JZqPA9*{EZNvPs8G zWwXw~Ejnf_TXoD>F4i$~xkSgzWt)x}%yu0!m>oK1GCOtLKhmXRHnUsDtY(ki75D16 z*Q8I!y(9g)5D(}*@Sxrk59z(|u#Wl35gqfBqdI0j$8^kqj_a5KozO88I;mqObV|pJ z=(LU*(WN?OMwjWB8J*EFLmD?r#PdJyk4e^X&rFJrduCGgVK`0440gJX8SD%lv)HqA z%wcEhV{n#^_k^=`CC<^aaju?&^K`slov-6PPT~ zWjgK;D%T5fg^pS9N*(taRp~}ttx)pwW%ZoZw^qkJpLKpr%=0$* zc+B-S>Mq=*W2U-U--BE9y|`81hZpPL=YVm19%9zI-N$=yhmQH%PCw=$-0kBJ;~w3M zdoh>a?};7IG2c6kkNWX_c+AHi#}hstbJ~;oNj#o2V{W}bzk&;O z%upBUm=7<;@%@as=2Fb%_qpu~ACFn@D*ZOD!SVec#kD$Svg`D_xL&`98}t}%)bHaa z9W&d_`a|5J$8oFv2rt$#)4fE;jCY%k8Si%eDellQ^WCXq2E0qh40yNx0{7^c3GdZ0 zBi^TDM!a9g%=mzgnejm#Gvq@$X6T1;d~UzPqdI2A$NiWe@Pv+e_esp<_c{Hge*AxV zV8)M$dGolLFh2h=m!7O+?mR{Ric|IfaGL%CCLcKCB(yQQNor+8Js<>3IhRgKoxLl{<3cUud)G?!0h2!(T z7OwH}m|3g!@wIWikFSFp^q+B~&cIE2UEHkK!!7zRxK+=>i}m_=iH;e$HXPrdzu^ua z&%~X21Kj1uY>0a>KULfV!*kD%$-)DAV?3xg!9#jeJgl?vh~5m3>X^kF!}0yu0#EpO z4xZFo;wilqp4MCAr8*Zc)7#(~9rJ;4(`$VD+u;-(&)b+6O!e{Yak`K1fHU-tc$Ut` znR+LjrFX{JdKa9d3vjO973b-gPt3>h{n;HC`gkEO(tF@yKW0x{isSRY7q0MQig2ag z8&~OlaJAkS*XUwgtM|ioI_4njaeRLcz>Pj$f}8Y#xLF^BTlB%WRhQz$`VhQCABx-b zVYpqF;SPN`?$k%%E`22K*5$ZIABB7M(YQ|^gZp&_9?-|)L46z^(#PXrU5Q8ZY&@z@ zz+*T*KXdSeuEJA(%v?OJ=i#OLM7&H_;~704$4%JrJUj^}>yvScuEDAL6r83{#p!wh z&d{}ZmOc$<>V-Heu;1YcfF4h0Q zW%^uPt{ZWMJ`Y#wOK_FG6j$pOT%#|;wfb^gr?0^Ex)nF*D{-T~3ODJiakE~GTlBwh ztG)&=*8j#!^b*{ruf^^9I^3cEgFAH_?$X!eZhZsp(Kq5=-H!Y8O}Jm*j0f~Bcu;rX zA$=H=fb=;TS-O=l}gU zSwDbNbPrC|58^ca5Kh+*;|$%4XX!_9rhXJ>>Bn%k?!!6yah$84zZfs$eg+ro0bHV=#ijZ=T&ADL<$4fT=ofIMei2vcmvFTn!ZrG3T&rKfb^29YuZMAi zehoM3*Kw1612^jt+@jyat@;z9Biye)#sm5jJg6t|kp2`8>(B6r{v40$Nj#>%z~lN$JfXkBlX?nI>96s${su4A z-{NI@8qetOa17tX^Z$FCtbf2MdMQrTKjJj~6HeFv#Tj}To~3`rnfe!;rGLfQdIsm{ z|KVKye>hM7hVyk|d7l3|2^Z?+aFPBKF4oDoL@$p^^$NI5uZYWaoG(+MsN9?~1*VZ8|+(VOB?9p~$e={Rp^T*rAk6FSb{nbdLq&XkVxc&2rn$Fo$&`8>;X zoP{%^<4l|wJd5XloQ;#LNqneO~=_e={nBP$SXFTTPI7$ z89UiJ&f3Y*apq30jK9xGo_Nmfw#!t15vwmuHocU9$o^OjLC2XujXKT-YSM8= zP_vG+f?9N(8Puw0$$i?&%>SiMBJsTakrk2d-O@TSD%dgbPev; zr{Dp7Djw7e@Q{u(o`&^lctkJ6qk0h@({*@UpN=Q=8F*61*-%qD&WM`UaaPn)9cM-@ z({XmxjE*y;V(2oS|8bU7vW_#QQgoaxm8u(Ynm!Mw>+^Ajz5vhCO*m6uh_m!XI9tc; zXpW8<(p=50rHMSv?RSZM&8TB)ajUMt=BQz+Mr{`wNb~c zYm<(d*Jd5FuPr)eU|V&}!YNpE& zO2?T<(>l&ZTB_rWq-8qJN}ADeW>O3s$MZkVPD<8shEj?i$Eo@woTfj<>G~6#p(pSx z{VC4WpW!V1InLITI7fehbM==vPk)8;^%O49U*kgk4KC8(;$l6GOZ0cRRDX}l^bfdP z$5~GmI?jBm)N%Gxm5wu@s&$+NRioofs9GIoL)GaxBdT7Yx| z$Bbx;j#<%G9W$egbn>yLHT*_UM>B?bR`Z z+NWa{wO_|f>VS^f)Il9HszW+vRfl!Vtd8iIT^-di!#bv8mUUdmOzVV>+15!NGpX@m`(lJ|`tz*VEN5`yfu8x`8JRP&Q`8sBB3v|rl7V4PEEz&WYTdZS7w?xOR zZmEu$-7+1syX87&cq??w@>c4Y>8;W++gq(;#hJN8{s9l`rFcaDh)4A@Jf?rfC4n{rf!ZO6KCJ%={O^z zK*u?eML7ODit{3ib(|YnqT~F?QXS_=mgzW8vRucxk`+46m#oxr&SaI2^CqixoI6>g z9Xigt?9_4YWtWcgFS~V|gW03wJj`Al=VJEhI3KfL$2pk;I?l@+)NyX+ zkdE^+hjpBzIilk{%~2iaYL4kRUvpf?IhzwY&fA>Saqi}nj`KICb)3VwRL6Oo%XFLz zF{9(GoH*blo-=V?Lb6W8d1^Wdr|RW!n*I|`*U30TFOO&G6>z3r5ohTXoUK>FIeKNB zt5?B!Iu+;ZRdIn{4HxRwagk2L#d-}~qSwTwdM#Y0({Z_88&~LcaHak;uF@H}TCa<1 z^m@2f{{`3SS-4)Wj~nz~aijhlZqk{!S#N+_^oF=qZ-f`?EWAW-jN9}kxLt3GJ9IYg z)SKZhy*cjITi_m@gM0OsxKD3|`}Nj%Ks2jXoOJ>SJ)7uE6#BSlpnG!;SiQ+@vdUGmhUMXX93V0$$?B z%)xEC3b*UIxI@pwo%%%FrK@qbo{xL5xML1hujB|7|&ei|KdHNEZuP?;~x&;^N%W#pt92e^= zaEWfkrTR)-rmw=~`f6OE7voC(FI=VngR5~o4{yM=KHiS&^i8;4-;5jdEx1v4;3j=5 zZq~Qq7JWNz)tz{;z5_4Ocj7jE7jD;GxI^EKJM}%dOW%vTbvN$O_u*cBKkm~H;C|hM z2lRt@P(Or+^uu^q_u>)#2p-js;xYXg9@l+%LO+ft^%HnXKZ&PxKVGVz!prp2ct$^i zLHw^U&h(`6`Z4A#kqPI=jqpQ zzJ47S=r?eo9>GQWOvwU5eh*jbF5p)|{unptPjI82z)kv7+^j#tE&6lZsweSc{RLj4zr=0&E8MQ9aEJaHcj|9&m;M%a z>uKDhzr(%yd)%jg!2NnD9?(DHLH!dR(*MQ7dKn(kKjTsT3m((I;&DBLC-ndDr2aoV zrGLZII`KE2|2hdT)63x*{U;oU6~^;F87J%Iaf)66r|K1Pnohy#dL^8pSH`pSDmYW8 z;w-%?&ep5p9KAZu)oD0SuYvRRnz%r(g$s2$F4Ak`Vx56Y^t!lIuZPR@UvRmeg)8*> zxKd~0D!l=&)*Ip)y%Da}S-4JbjO+C#xIu4<8+A5r(wpICy*X~tTi{lmgBR;9@e;ii zZqr-icAbkm^ftItZ;QM1cDP&T;U2v`?$tZsKD{IE*ZFur?}P{S&Ui@gf`@eh9?`qv zQ5|PnkLlgH097p%2Hi^pQAIABD5@F*sWvi*xkxI9FHVJUtud>l1K+o`VZ@6)w_qaj~9< zOZ17jR9E9NJs+3rlW>JT8CU8WT%}LJ)%sLiqZi;>U5o4VX}Df5#0`28Zq#+SNuQ3J zb)0kEqR+&wI?l9StmAC!B|6T&ZqsoFcDs(VuRHWPxKlUcE`1*E*5~6MeF5&(O}I~A zi2Llufj|9)p(g+ zjA!(}a2!$_&;M(1vi>(t(Mxcuz80tH>u|dM56;kSc$U5%XX-d>Jxkw+vvoVp(Kq2- zeKXF}x8Qu;feZAlxKQ7Qi}dZdSa;$QeFrYpcj7XA7cSRbxI*8JEA>6NO5cmCbvLfj z_u*Ro0It)$xL!Yk8}y^NQ9p*8bRTZkPv90DulGKKm-zS~ZqqN|cKssm&@bUmJ%qdT zFz(i`;T}DTd-XfGPrr-%^?P_gkK;l85gyW?;$c0BNAwqXRDX%b^jCOXPvHsu1D@2& z@Ra@;PwQXsQvEAlrf2Ys-edzldA!LSU!!e~Q}h-%O>c`ca1tML5T2zgai*S)v-Al# zThGBcx(es&xj0YH!}8#n8};}+e3TlG13vHk~MqR+)``U2dp zn{bDID2wN|ei(P@Ufiu8!9Ds>+^ZkMeYy|#>&NkcegY5bC-IQ($HV$5Jffe*qxu;< zrU&r2eil#Y=kTO{9#82(Jgr~AOZAI*nSKe+=ph^jj3;q<87J#kaEg8vr|MyxreDM9 z`gNS4-@vo<2+q`R;w=3Z&em_^96gG2^*cCEzl-zrd$>T4;X?gBF47<1V*Md5(c`#O ze}v2Q$GBX7f-Cd{uGF96D*YL*)}P}VJ&9}e7r0I*a(MphB;25v!;Sh+xJf7DX1zRa z(JSCqy&_($Q}7bK5^mEg<959Y?$D{YQ?H7<^lG?U$IgWw9lIBLb?jj1(`({>y%rwO zv72E~uZ@TFI(S&e&V~^kyBkJz>~I*c_RbvDk>o8eh{bDXKSz*#y6XX`C-j@}CA z>Rg(TU?;G!-YBz7wPSBvEBif=pAvX&c|hXCtR*~#ua)OT&W9imEILs>)mjT z-W}KKLR_c!!1a1h+@SZujk*Xo>Ai8Y-UqkneQ~QU#*6iSc!}O0x9J0LyDq^U`as;N z55isgVBD=sagRO(_v%A&pFRxt>oPo`566T02t1^Z#KXEAkLaWDs6HBx>0|J?uD}!e zSUjnZ!&ABvPwUxusXhTO({u2QuEMccBA)+qak8F=Q}l^ARafIQJs+p*lW>MU8PC!+ zI8&d3v-GJrTQ9&lx)$f^g*ZdSGHz5+MvR@|bm#I5=&yjWk2 zm*~Z~P5%qG>uYd_{x|N_OK_LI7I*9GaF6~E?$vF$PhXGw^$mDH--riwJ08+E;bDC< z9?`epQQd*Z^sRVY--ajj?RZjm;wgOxp4NBbrTQ+sOn2cKeK(G!D)Ick2Pf-$afokK!)<4(`_P;vW4T?$u+sPrr}* z^#^!Be~1V5I3Cg;;bHwT9?_rRQT-Jj(^Gg{e~l;fH+WKikEiqxcv{Ea;iWqE4=>ZP zhj>QEKH^v?6wm+IOPs7@KXHnVJ;kXy_7$h;*jt>gV}Egmjy=Y+bnG+E)Unq%OUHiW zY#n=!b9C%G&egH^I8Vp^<9r=^kPCF|LoU>@7r98se&k{udy-3Z>`N}yu{XI)$NuDU z9eb23bnH{E)Uj8&O2>ZXY8`u)Yjo^euGO)3xlYIa<$4`^m>YELV{X*3m$^yDe&%K! zdzxGH@B5l{?0QDW0nu4CuagpM6llR9=#P3hQ4HLYVO z)lwZhs+Q^4Q8lAuXH_iCisyOktV-6g!zx9`4y#lhJFU`m?6gYPvEwR3$BwI6I(A-V z>JxC5o`bV>70%IfajuS?Sa~{jWaaDFkyW5$XI7z(omoXXc4!sr*r8RTW2aWBj-6U% zI(BT8>+^Aiz5rM1CS0X2#ML@>aMkG8$yKXkCs&=09bNT0c62r9*xA*nV`o>BjvZdj zI(B%q=-BDis$-|uVjVlamgv~=)uvez{vr(;K2zTOiT=)G{EF2Y56Z(OYR!6kZMT&jz4ncfeV z>)5eYp=0M-rH-9zRXTRCRqNQnR-)r{~~) zU4;kqTs)}f;URq@9@f=(M9;^gI(E#B>DW0pu4CuigpM6_lR9?LP3hQ4H?7aYOZC}! znf^PT(G573CC2mr9GtBGfm8IkI910kyEGlU?b7x6I7456XXz%KsV~G?`XZdIFUC1K zcH!mf*o~K`FT?pdcH|Z4*qK+TV`pBGjvac%I`-0)=xcDPj@^1?I(F-o>uYg^z7ALF z|KKX!hO71UxJKWAYxRw|PRDM(dL6s^8uZP$QQv}_bO&zMx8fFk8*bINKAaDei5hZ*ln1hf5NkL>{HCtwKz+khO_lToTC@vTwRCr^yxTXpMeYXnYd8b<05?) zF4kw`68(2vsvB^bJ_ncUf8YvzF0Ry#xJsXgtM&P~MqhwybrY`B7vg$-5pK{I<3`<# zoAf_%v%Unk=u2^{Zo!N7Wq66c9JlE!aJz2B9r{Y#sjtFa`fA**7vmoNFWjrI!F~GQ zxL+^91NvG#sIS9A`agJBx8V_eJs#CJ;4yt89@p)7Lf?cZ_04!n--4%g2VSag#mn?< zct+ojV^MDW`rnC@^&L1x--%Q8T{um5;dFgB&d~SZS^8d_sk?EOz7J>X`*Dtb0O#r+ zoTnee`T8MTpdZGCx)&GeM{u!z6qo47aH;OYW%_YkuAjga`bk`=H~5X`zupj6>y2=Y z&cd~NV_c^CJJo-U7Gi9Nen6#EbP-c!}N`x9MEmu45l(hu#)< z>g{ls&coe$d)%XUz`c4$+^1uYXTOepo&$PkJgE1;LwZj?1AIv6r++$9~dc9eYYkbnGiF z)v>p_ctT zu@|*T$9~ji9eYw+bnHuQ)v-5qv5x(zOLXi}ZPT$&wOz+v)ear|RXcU;S?$uXZ?#)z z;vT&L?$xn}wNJ-B)_xs(SqF6NXC2hBr*%ljzSd!#jYsrmcvNqW$MhC>T<72ky(OO1 zTj43aHJ;YFc&Xk7FVoxN8ND4&yzs~KKMyDC?Qx3U0jKI6ahlG@>3S!ep?Ai!^e#A4 z7vLA^`5vu?}ZC>5iZhu<6^xJF46nqQeBM8^nSQp?~g0= z0k~3^;3|C}uGR^9ea8Q zbnNRL)UmgBNXP!(VI6yXM|AA-9o4bdcTC5A-*Fv#ekXM7`<>LW_jgLi{@-aGdw`ef z*ay5!$6nwW9s7Y3FaGiTAH~V~9h{=y#i{x|oTkTcx_%#L=nwEL{UOfO<2XxygtPU> zI7feibM*wy)1Tse{TVLMpW{M3iHr0XxLALQOY~Q`R8QeD{WUJv-{1=UEw0qlxJrMA ztM&J|M*o0o^-^4?f5i3rC)}X_iyQSa+@ycT&H5MIqJPD$I(8v1*0B?LiH_aKZ8~-& zx9ixI+@WJcI(9G* z>)6FSqGKoXsE*ytV>)&;kL%dgJfUM}^Q4a5%~LvdI8W=?<-AnKPUmGhc014L*zufr z>5u1s?0QbtvGX}a$L{A;9Xp`YbnJpo*Rc~iL&t9DSvqz^XX@A$ouy-EbheJ&(K$MH zNayOd*c1#!Q*fm|GW9M|Sj@{EGI(AT(>exkHreh~{xsKh`6}lf+ z>Zfp(ei~QnXK;-kz_t2WT&JJI_4;|-pa*fIegQY>7jd(G3AgAW+^S#3i}fpbiGCHg z>0#WiU&9^xb=;|Ar+Jr--R9jocAWR<*md5kW9NCFj@{?|I(DEB=-7omsADJkkdEEx z!#Z}PkLcKyKB{A9`j{Ta)q$_L1l6*h`+LV?TMmjy>fC zI`)+p>eyReq+@@1v5r0FB|7$*m+IJSUZ!KedAW`~=M_5komcAEdtRku|9Q2JJ?J$$ z_MzA6*o$7LV?TPmjy>rOI`*YE>e!p!q+@@2vyMILEjsq8x9ZrdzF5b8^(8v?thedd zx8AN}?|O%h{p+1N_Rx3f*hk;3V=sM=j{Wq#I`-7}>DX7_uVZihfc|}dy^cNhLpt`^ z59`=#KcZv5{iu#T_hUNt-H+?odq1IH#glp%PwCh2w0<2g)o-TVm9>cTr`#4j7fV1?6I9taa`Wzkm=yP@KrO(r`pFUs5 zp85hE`|1mI?5!`-zwfWtvB$nd$3FW~9eeG|bnLe;*RkimLdU-QN*#OetMtLRT9@J) zeF(1AhvGVY7_Qf4xIrI|8}$*mNgs)ubvbU)N8wg|G+wNa!Ao=nZqvu&c6}V~(8uFW zU5UH&Y}~C+z&&~n?$uSePtV2udLACoC*na}jfeDnJgiT`Bl=`Ks%!9=J_V2KQ}Kje zfG2e=p3VN z!I}CWI7^?4vvq>yf;l<~=j!Efp8gZg*U7j*FOLiL3b;tGh>LX!F3~IDQoS-R)2rZe zor){;s<=|GhO6}IxLT*-8odUt)obE9y%w(5>9|3!jT`kkxJmyRH|q@CqSwW(dOf^Y z{{=76vv8YUAGhnj;tu^c+^I8hm)-z(>kV;_-U#>VEZnCz#{GH|JfJtlgE|`z>CN!4 z-W-qUE%2z$!DD($Jg&FG6MAbrsdMp^-Ud(WZShjQ9bTsM@QmIbCtm&I`M(2B);r=9 zosU!XPB=~PjMMclI71iUS$bETsdvL!dUu?y3vrI#1Lx{Jah~1_=j*Mj7o0M8>xHME zdg|PTTW>XI_QDevY`t*qiSrlLEj(-MMGNO_J^$3Ix%FGkSvb3H?xL;cFW7RMo$_{? zGcSM64kv7X!uH$mI4?eWZvB>v&N{VjcKw#QTkWvbw%h;y51xMN{5cD%=5DocQPrVq zB&zs5aUQKhvllIzyRdHlf>Sf+&7NN~w`%9iMRl_m)@2s#nmPAWKJfp4d@~=r674&e z@7(N~f6XB{?Y;r!aVIrH{7aqb^He((Caxu-7TTU@m7!r8Ueb5EIj{9ZMu zFRGin@c2C!&YgYoVRKLA1Ln;Al(w#|X(>Zjm#h$q+cFe^-x!5BY#SXcf zDE6%VNU^)=ykySZqd1d0&f<0eY66w_&bd(zoQ9Jd} zL-ahoK_Ag4G>0d{JX%1f(FJrNwa^vRN>@`S-AUbazdgkD5$dA>dY%U9C3=P4wlS{n z(}(m4eMaBWjQtZbeY0eX-gp+0(+o~IY+C3=~LZJg^T z^cj6iKhtlNvN1 z&7%c$nw`(}0=kecq06b2uA+a@wR9b|*$rH8q+6(iI_XZjhaRCP=xKV62I)n5nTG9c zuF+@oEhSRq06b2 zuA)x5lOCW4=@IIq0eX%G=|y^(-lVta0~_c134KQ2(s%SdC06CfL90<3tw}|+4;9n? zbP$!%k#s!Gp?S1`&ZcweJi34`q-*Fpx{n^9$LMkE=lUGIXs>b|p|@<5>xc9ieM{fd z50tc8BC#_S(m_;8N6~q7J~i1zTrZ&(x`l4F+qphY{WL(&*&x@KX_(%jG5U}atN&33 z*L5kAHlyurN3PLMwj0-dX+Nr=)2N9qqJPu1)JM-*f^(Voqf)w_+KJm`61-*ld;HNk z5yjcwzt9X7ugT8`9Z02g1eM#-T#uznYNku*GHRu6x}P4TUV4K1?P;#h(jdJ>qm;%O zuWQoUltD++v2;8&(iIeENynM8ah7bH37eG8kDK4b7tpzM9$iQ6^d)^m%P8?@o^P}o zrBf#5Q6U{hl~hBgQY|f{Mbt=d(Aze~^?e$rFKCqvp30O)>ry7wQzP9;-Si_R)=eb- zN}03;<*m@|iNEk` z9F@{hbTTcXM*4vgoME~n71DlmAe}>T#%`R08|UA~S*URaYMggEOs~@j{Xz-OH~pD@ zrM3UY&l{~znY1?*(}7eZXUNm!6=0dX5I^6&j|uXp}ynar%w6-s+E* z&*k$$8_?FY4Q)^PR6u*sHFPaqN7vJhbQAqTGxQrRzYYI9Z9|t+J3UF$^cyAe`1=F7 z9>hO$BiD9*ZSCOuNB^V5t^C~H#(#IT1;t#*LaL*4=v?}a{(L(-C}~4#rnm<+?jwx* z2jd>UxVLZ9PCo5c$aN7l(z7&7@6b5?mwvVXaozF`KJRoGRZ;^rQa`;)@6b5?AH^Ts zcc4N#kV@$&s-!dMY`)B2Q6o6`=IPX)A_ z6>{B!_M#%%hwh^{XxIPotlNE#3dY zpt#>4-p`KrvEzNx#PUgrO(~b=P-2Co#11R+{i4IEl1`*VN>XBZO0ku>ZcjT>J{8#R zTo0#8I)fVN1{$aDX(|0kiItKPYf~oeM2++?JwZ=WV&x>h4&mQPD^Mz}MQhWaX2Ru~h15t_QiAtfim8#}J-&EvFW!eqtjgz! za%m@OT#e5s-9=s0P4`h^bzaw?O)ZyeDRt8Tjnhw*NJ~oWL-S|>olB3>Fip}l{Y;59 zczuI*pxvp6_N7uR7eT8nn1-K>%8MbvDUaJ`JKpzG;I z>ZES^lBVfrO031t4=qorv^u5HT9i$jQ!Z^w+tK#46YWApv@aFY0dydh+L2tNV`&b} zqZ+EEI!dJT{HIbnijJe%)JV_L^ES-&9co-VDe)lnQa_E-`;=IR=KvL1Dc7T@k$S10 zUZBLElM?IE`m_b*(oU4%y@{PE-k1A=exnuEO-ig}sa)5hwP_v7pzUc#%BNjuFDj*@ zsGV-7JLzqDmp-CTXo3>!@pDG|S}E6S>3Zwux{MOD_-~X}rX47s3aONiqJ?w?T}8Lk z9rO?-*5~_ADYO!;LOamTR={;v+MV{LQaXw%X)c{e)pQbFPOWq$T}?}@f1jI_*eZ`}5&xa+!?l_p%SrrL=s2pR`7}&l(=;um z#L0ZWsgU-fQaXy}(3x}&T|x1FQoO#NSitj%4yKFg3c8WT=_C4tCTNR8BTA5a*bXtdI(O+pN+J$zbLMoztY=5q$bST~W7QbdtKRr$F(ir_hGnD=|-!A<> z_U;2dihBR||As0>5m6LT2%=&`LKj5{gbpE*P{g*`Y?frnW;g7n0HVZ#ySwARG14%xfOG8ClB#rVy_`V4uO7drUyt9*ujf1T ziF&?t+_|bA*IDZM)^B3?cKYx1PBf2b#YtjLsBA_P9${~!n^~mHHPw7(7md&qN8xC6 zF@92#C(QXg!T-tg=J}1h^TS)n9a!F&&(Uz_X?6Z|Gj!fE26tZ3o#%7s+1zx$`&fJWb}l-uac;|+uyqV>w4R-y8WZuf4TjR+n>1ofZNWy?Sp&YZn5{PdtbWsE)bo@<(hC& zG*lQ!1jAu>ZH7&-FOzj(Kwj4H;R9@p0nur0_zMi@Bdjk_6bclFrY1-84+~B84+D%1!p+qEWKfKa5j8 ztt|8>8qXSx2~ z>kkGJp~5WvqpnG@NFjfs+CRkWR&N$lEFLI`gpvb>yDG?kAs(+RmI&*z8<)$1Tpgn; zSR9BJg%VZ8TpY89s1zd|G879u7pyOEi~jdye;dGH#elq47}3@Znj6 z>UdF6B32O((r?UA|IoZ-w>O|TWx%l10h3b(j7S|&QkF7gWbPh=Qir4tC`}oVojM?q zG9WK?KzYi5v8e+pN>YZ58@b1z)FG(@DpLlGuN@F8FAl}sJkL?Fdv=$_!=-`vG&eNY zD|Zi%C+vcA$(X!x-lb8 z-@i{;RK_~QrSL)u*TqIFFen`0!Z@2#x~-$MusjqP97vS=2P9ZO{S(54 z%vI`u%Bo~lz4-XpB*a#rZK6+`1(3FaBVJJ43s0>6H+0T+?3Jd+i z>0Ok()L%P{#jip718>OGvOu&j5sOAA1qXZG{+y_P^pLF3?jePH3>lO%q-4)O8kzc6 zC42taNdB%o*#x056sMC$457lZaIoB)kT8$r_4DVZ^t2K62O4)$P+PwtSxlg|bdgx1 zA|CR32CZO4PFekGSJ|RqQLv!MYa^lcLQN#RIZztX+#c$hL};w$De1tlDk88?zM*j zZbx67C@*H$8;TA~{u?d~4j;ryuT5}8h^n?L6sukE;b85OR%e30$Wtp4Itzvm%JUBl zN7-EXbJ*Yq%42c$PWFlI?oqDs#>W3)M0=QWZ%FMQL^%R+?|t^$Hm8THH*ZdF*P7Bw zg@!ZXpf@+d?A5&G;*IUi5dJL7dWWNB!ElsgpG0tYUXHd_rL66f1EsM zCzt=peow1g?e5I&<7{V^vJa!v?X~E1`zbnW_e|=xO+KA&=R>F4-O%ZFFm%@LQq;Zs z@7!KvkNrfQ9YgJYAX30uYAt>u!P?^uw}obn4JFt9NGvoeR-{8Qe@>h?u#S#GW!fr5 zyxz1H(%ZVWC&x3jk5+qhQ`=#Ch0;KIaWEv;yvtL>BgU6YGXOH=}pa3G;E`~%db z1G4z&Y!Oq1S^w0K}Y=PN6dE?b?y}S)uj17x7AZ24i&qQs{ z9~9%Y7wV8hEdi5neOE9~O4$oUYMTj;wH}E{!9?o0>^XMrXOun1u3fHsj$ONaYsZcR6TC83AH6Uw zu9PL0C=Y4}Uz(^0mIwdgi8RE$NPlicG+17dT%hW&IZ>9<%YBftsi_G5!-OP{(*EJl zi~};g{kv*AXWh2IX&0fiwqIqeGEr5q`z=t##y+`fu+}p_r}CyeHD&Xl+73qO zOlVMYBcVd?)~PYJ$oi*H|CA&=S$D?awT;G>eon`3Hd%G8CaayT|*O z`am9M8>yx^&7=1EEL)R$Jsn6*cV|+s<3w^Fau})UaeqIOTJtNL)O5FFIjDAjUts;K zNImaWR^M&)Q&z9G`YTe?RYR&tPTQFGxEZAWeyG)FSe+pCd~W(Gs5M_NB{iRKwecP% zHGL~dEx$D+r&4|Ik$Qb!kb1patp45VCS~66)})3XMruA}SpSnPN7(T3RtK$)Sv|w* zORT=Z>N`n2-XiP&jO8mfe67`=S^Wd4_4;?~-*k$%{azfNj-eM)Ni|4M54w~Bku*P7JpNw;+MG1OZAZv5kH{4S)H^9h!&9$@3U z=g+d*J^x^iv3-)#sC%|JRUuy*H5hySr`pJj;dF-;Mt? zwbnm3{>#*wAMWu#uzDk@`STm8=XZ5l!ds8`A~nAbC$*ei-H%%9!w6E-bE?&aR>w&_ z|4dTTf0fm@TD^eO@?J>pMLtGq`MpAF`F(2r-SDrd^}ce$zo*vvw~f@}*DLp)&($rc zwViY8XD4bc&%N@z`F}LEp1%jRE}aQN z_}7pc{|-{q=l=fh)SAC;{P{NAjlYOm%i%dv&$E`)^u14NecM24KDqi^8}7#cj#|(6 zqvduRzKhg$w^4<+p1XQqYOPQElN#RM($&XM>-jsAdfuL-#_vOF{TxMVeRB1gHatLT z`YT8+FZcH|sP+2X@T;h`-Mxp@`|?>*%l&QZzme4Qx#2%p?S}tIt?B!j)b!I>Bst&r zCbc{cA+@~QS^r~6&HoHi%c(D^zjO6a>+i`PVQEUE&Nv#*vq~@QiZ=lxlyM@%>-EHaW2dK4Ob&vlHwbq~ImMch2 z&r4RnO6vLEAoV`}$ojkC>!|fS-;jDeKazU>Ur9~hK2yEA6{-1f7^(T=>Ml0ChYioN z;jYf5*8D%i`iDuqe_b83x`Nc}nnh|lU45MmzuAV*x8bf{Laq7druTJfz5Z3Cp7%pi z>z}K?wEkO3y^cRfjqhsTG;jJEk(!>?q_zw0{nw6K^Roka7@0-t^$aI99cPhR9tEV9 zf5Pf2Qm<R?3+Ag{0`_{&H&$pdguiHIe zgX!M$y64-ETFcu#Ut1e~G^y!1fz0@n0e}f8HVW_^#eSt?kJ-mYYdEpYLpMJG39E<>%`CtscStPLJ2x z>Vv5Dx(=e&^t2^4y~mTu{x-Y^wU&EFYCX>&8{gGKsr7urNv&67NlmYNz5uoUehR6- zKc7r}zFF4aJ^$aRwO@XK)P8)0)gM~@qt$!O@P?<8dOSCNM{2D%ZhAUXYyNj5HGL=B z`0nvCZMd7h!8Y7I{xE92z7eFR|8!F8v!B%dECKXH<9}L`J|@j zL93UMT0hPF{ynpDray<&^9D&xud72=yYY*xK9%)B^Ephdbn`bst?6>ZXHaW>a>LK3*8IDO)a$;M z)N*n4?Kb>QQjfEM)b_^J4^!*)yW`I#R=eZRXQ=gj?)dY0tKIRZYxA&?HV<0Qx*p$k zd{=+ht{KN?jPIJ^&*<7!9bM_@rjBmO4o2z5INjB!yFWui7|@MBrMLRhvpZFHRo#eg zJ?PoPpV5P!J^WpJQuXv_^rY&ksvFU*7d?CVGkVdpm%l4t#U<$3o#@`1VZHqsClDw2 zGx`vH{2Ak-u60L6ZC7R2jEu^zUHPBrCUketsHBrFI=b_3x5^$Fl|8yv_ROg4$-mty zdu3Gi>RQ>0j_#GcGb&HWsO*!$ym;bDZ(Vts)G}IT`2wkV{<77tTm7chYpwp!>QAly z-0H8b{*KhTxY_z|v-%gScUt|s)oE9G<2N8RJ$qT*%<2|a?`L&utJ_$8sMYCKA8vIg ztBd{u8V)ZzyPqq3CtNm8HW0N4Y-b1C9uCB82 z-26YATJz5>pL1=vTOQ|I?Uu(yR=eeKnbmH2Tt%I_Jg%|YEsyK1cFW^NtKIUr#cH=a zZnxSkkGWR6<#D&wZh72mwObzZt#-@f0ju5eSY)+Z9uHgXmd9gOyXEnO)oyt_ZM9n- z&sy!4hj)n~**t}7qMTmUDeFT2sAP9A$k}u?W*QQUb5>v1c|$2@UUd;Ah>#Rj86 zM&}|htsg2m3GW}5&}DkB{g6(mXM+=z(d0?d)JJmt_INb!xr2$k3K~ll@pwTxI5|Eo zF|D*97Rj=TYX>UT1|sDl)f^)A(P;5N1C0oma|%LnT05xlb3unH*_eyR<>hexT+=z& z70GJ?lj@vt9-=z+u_q;G50@*;!+V^X9`5x?9W~<3S#Mr@|9X?;^|vX~#Xn|sAbDvx zd6_WJRguWo&1hXh zvYA{O)MXc4meryx4V6Z@8mLpzwY{uOh4*BxQH4E@Yro+wu&6ipqlM8()TY?_)IOx9 z!<#)^<&LH-T`rqPQ)g@PdQ!!2a|f9 zBS;-9cO$ib>qY7qYy_##PJU9)>;8TcwI08i)UnYNQpfZ&Nqtti%JOzn)3uP)<3B}e zyq8H$kE`FX;UC)YZ%F;!c2dWPO|J7^r+d9EsCCTPfz&Z$4^s25r;X=6>$~}PlJ$4P z2T*IiW|Nw((=3ZfOQQc|z)CaZ5D^*Hxhe>eVPHhc-Gzh7zfD^`C% zYI@!L{*YSp-PNB`Yd`!AspYec)b#vJ>iN>H_i8u4>Ra8A)b#C7>UFs3JNTJ7e~cxo-5LQ=~iLF)P4`g1O|9^buxFQ(RXxaqml z{?4txb&m&cv*B)izMopJ$4&18)S6!RetOVqw|o{`?WQjn&l(dd80>xVE7o?EtNX;MBoh6S?HSMSLxBrdLfK6`3?@ zNThPq_()~>sPSXV%B*REwL-Anr}m!ZV=Ko`oywn_HerO%ZAaa9ukLp6(ObON`MBj1 zmQRtIpYEE9tC!PXpCMl+wf?+C>bTd{YpFHg-m~EwNG&HhU^Q)_orzZsQ$EYX8vL($)X!oRC|O zd+>K!Kizuj>i+cCbY@x(upDTaMQZxpc4aWNrgxZSpfD0B9iV^cDh(7B7i0x0IILEy z)&Y@%K$MOEzhyN5bd|?wP8BVtF>5T@(myf4_45zg-IHUCf&rkRfc;CuBK~eb+{*xs zA%@e2n6}*!KO>d~G-hcuP#NNKe{_HsfyzXA0nJths_6=cmFo7gv|?bOltW`Q&AiUb0AU@9_Ts>ic1m&v9j1el*T5- z)Sb+DpqOtb6qkni+Jg6Qm^vJZ(A33?ilXp9Bqyyliwg%<6o(57^iMEQQkqrFKLNg- zK${%?DWLrXe-eoB#e`%Z|A5+FjFez@gtL;(+|?DJ{f{k_fGramwCVAR1A63A+Ns59 zxTe-0A$5DncNP+*{Baho8@;YzaXg`BUa@Fa^50;rtUL=er1btRiZaLBSK6pIf<5f7*CWJUr-L&2KQd@9=A6^j-Pt%yzz zL<0VyG1^uY#iFIzJQwS;>rq}jl%sV1%KJASh|*XtT3)P!axX$5TL1D7?deL2Dkk&C z<>8^0)HKsfJ_C=<6I8@YD@uwP?j>~vje}_otR})lfv;>F&}ZJ1sF=@ zA7dp0WAv(s#$t4OQ63)_C}+Bgy?@reORa_b^$_*3; zs*3%?Sg(qx%SKOQN%KzQlMbsWdmL{FyN;21Px1(~6=D(Eqg6zUaw3KPVPtY;r)5}j z)1W!Y@(M>;qiH!;INWupNw0pYF4?TDEKnQ?RECGA_VY7E>RD&RILjgstvjaIS6`me zR17EivI<*~5zw1j-O7?cn7<#H{I`UWMh2z@iv6R)dOhxS(armrG8rZIYF)D%Zv2L=$|}k9e+{sdpO<{`CB=M)W~Bb13$e)~QNp8m z|MKOEDmE=6i>;$1T%IV276wXqrU;WfHW2oYW!n)6#6|^T{0ka}kJ3MMMI)iI;3yRH z4T0pp;Zj=umKIb*ynmtreZUXI)xtKKY!giPKy9K~ZeA2b!ikDeh)fHHMkDWJH*4?5eW)C)vR+sW2O?CF=BoN1=sWaUi6} z-Q5)ra`3{&k)9UGw`%g8RhsDjwG={u=36eOC z;ii8i%fF-|tR5j|zSqrju@Tnx!q3^B1RFXQQ>?aM%C1uVH6Evk+-NFOwqi_*886TqWHe3Xi?!D-V8KQC`)H^tFdAezdqkQWhpPNqyGGI2xFj~Z zB*wp-8Y!+AUBN%m`+n?x{|K?G+o##&!f{xrsnT z$Mv@9D=Usp%`J{`+@&{M+3v1LypX+oxXc^fww_Z0fgt#LCU3){G0A`9lcRjMp}2@2 zF%1XD=pVY`3AV{>jRVm<*Fhip#tRaGig+G4fyr(}m30+GtMd3d)&zZtigvzQRE2>& zFQ_V+J}L!ORiZdvm;Y)V%n8rpJk1rp+-bogw8dx(mWU-d^2q~B zn4Jnwt|KAWIW3kKo5pEg#`2;fT9}9A)}F7uS;w?Uj4zhN%ENrapoo^z$!^{r>Wl~T zI1CE#eH8s$&U=P0H;nays(?<8p{sb4x#WjglkbfX?-kaxQlc^(Dp$YpB)iA>STKi^ z|8N?NM*HP~(r{#~{-I0nWuAlmJY#$RR&oYBQZW|v^!}a1IPCG6&f@Z-ND)sJ7z+;9 z-M?XKmI&Vu4n)U#K~-Mv{wf?V9t)nl+=~j{dgJu=V*{n`WJXJ(v8w1eFDe7!@w}cu zILziCSR9*>{I`k)J^>sMWbrpD`C6{J7-ec%C^j`wF?CvKdUzrV!|LMS@I-{e)0yOg z!1O>oF{L6951r;pe_pa?aKUuefa%kwO`Fbt&2RV4E3~w1P3pXns}Hui9jWsn8CLhO zJb~1Cy-}pj>jkWTh}7rF5=&Q4q1NZsX_n`adcIkt&gP!`~$Jx%fj;kK^jkZ2Ye+zaurhuHItxPo$=Em!+%g z-QhiMGt2!+{k^LXvicBG&wIF~tB&5Ywy{*3+-j7<-HNsmFKq7#n}0WxfqBBsJYpOIJ^|;WJ2`zqr_jyZRa%egmoH zb&I8|=h$%fe0N)YAF1hFWa;W9HvDN)@8i{^maD5jv*BNnnjha=y80&@zTNuQSh~8= zTyK6fCH4IKS-SdQ8{W?PA8G08<8631QuC{?rK^Y7@DZfWyHBwCbgPT4j*wap;+C$S zYQtxcdVLpIy81F|&F8BvuP3#9U40X^Ue{d9c{beD4^Zp;vYWmqY`o=`FWdO8ew|w9 zn^s%CWy9YkHT@r3y81I4?#BO$TIcD0B6Xg&{+-_RHYWA@_OW#J0XDo1smE_`>FOhF z_|ewCi>0f3+VDQ4=EDF>R}Z)0ZvT*N^(mz0%b8XONVQq1vifXN>*Li{Uq@>B&L#D_ z-2P$_wcejkSUyMU@79vqA8oX(A@%qN+~v)WHl)_4j#hUfHT_*IUEP~n^W|jAEKUXSupVaI4)Y8>oP;35uZ}|(Uzju$n(`xs6{;=B3k9v1|<2NET|MnrZ z{cuOp+hZ? zBK7>PKF<30CiQ;Kvf)EXy$w~LppE~q z<>Qua{yb&%vzE_WzC>z1uC{db`_x)rKeGIk)a!HgXI8t{_m$NfNzK2lmag7zb&X}C zd%VYUbyI3hM=Q%iY;0pop3l`!P-{JL+w&FF znqId(euG-e-@V?CZTOd@*5}QZJ4n602KRdX_aRlcA@%o1k(yt9NIm{QQhz^+)ayLO zay+T&bHh)w+6_O;#tT{&+i+J$tS%$UT-ar!TGkmel;&X6fqRZMb{CrQK)i zv+YkCQtNobJzgst?vAGqwA$^T+fr*g+QG7u4R`giR=eYuF4S6HJuLg!a95v9t@${_ zGRKCyI?rmiK1{IsbW*Q3Wa;Xd4Ns7o|L2mLpR+8lu)NOl7E%dEM0vzwbqYnQjd2LslRW;eoff1;?-ds|DcaNp37uaz3cn@0bwxZuJUM)AOpOtJm0YH$CrI{l1O&simvGu;Jg3n*J?T=aYJ!KUuw<)bsse z>FNgaz1O>!Wph%0*UIu>>+kAz)OsHGd`H^wV{H7cmaaa*hW91)cY`clJ<7(hij~MpWkn=`estkGsn`^ z_fYHl|9zJ8Nll-t7gB4x`3$M!m)C8$tJhfVws-GX?an{EZ?&5rf${-kIZsU+!gy&g zl5A<4Y<|lx>xFVgC0lYP+kr;87{IlUaFE813I?kcZ=M?N>eq?5Ol=(@+8NTUFj1CQ zmMG8DgIAO#8-DuESn9pDvq-J`K}%N`+wjTOKW6Fbx@}YbRojtrdpy_1t_f|;G|ydK zX~UG%Y8emkR)fM=1wUt{ z-z^CZN_O(=ICK|I@tQ2LdN5un*>H(169>N>J>t=+~2p6n$os!E{3bmoO>EX%(o!;~$rd083T*=0*6Y@euY6lf! zUQAu)E#sM%b=Ref=&$$pHKg_%x09OpuKxe49n>6q{<`g;?zjGK_`h1W|5dxGCH8nP zkougohSckI^;=fE^9FU#Be?gDo1b;xJMY-vze{S}UT67@)EPt@BX&?`IxoCk~`vF6Ln|KE--`3vGA?BOd|io_!V2{rcow zb0PUx_vu^3ur+uWADWLz`P8f@E zU%vqT^n2fB_;23N?=c>43I5rA{oMWhzGl21k;X=>J{sb$?(5f`VLhSy`}M;=yT4yP z!vk=?Uw%H_|H*y*o@M-h_r87`7}xzidOdbt_0bS@@9TFI{f$V`||1Dd<$?t7UD@f zjeqxkeV;JyTn_$q|2*9fnZ0lp6GTakzJF&i79A4b>;Uq??p za=N+?=YM2k1oE*Fz9YECkGa?k-;sP4#leUntrO?;&v0nn;UPQ=?d*G_zZpPY58b!y4%~@9(6B4NpM$Qr3bQc>zHa;u3(}E=e4LG$ zSd8U(4QucReBGHAoQ+Sg9)CdhH@jyJxt?R0oh0|kO1=RK3n~{pVnX9XG{0j z>WB;s!f=eiSWH4ON}&5~#i4s{rQUa|hFa2Un9m5{-?`7$ddB+--{1%QjvDBGz<1(q zEQ0O>Ec$Tm?rRyQTlclR9J6r)bZ<*{f6Ik*KZGTC(%jmP-!a4e=^l5#vp;IM4+;LL zsYli$>y!1#24n-WA=!{@L^dKDla0x}$i2uWWD~L}*_3QXHY1yp&B?vVy~%yZeSHt` z{PG*GRenk1eUF1UrfZMG&>i!!5bMlFQuk*b!ZFxr6qxr&`N(`i$~v=wl;p{Z2K=Uv z$tC4Xa|wAVuE5p!4&UQ4=Dp-K;-0a10#9O@Sxw4L`~hEMo&zm#95SH$EmvbP&SzWx z-@HGo?#ucUCbOL7Z{|UAF`h6_k-G2cvv?h=jZW5dKu2`K(KrUjp&NRk4>B?~D2%{d8~CfA{{Vs~C3;+IN zBeSs(i|`pfM<4bLC*lILiQI;?j-IngIS04kh{M?xV9ODFCPkYgJ!Rw+aDzTy4XTf4 zTa8<>4Zbd1>&F)Cg6>CoBKn!RY_peWyWNA|W6LJz>KY^46Wocv;}JZD<#-+|@RHGe z4`m1M;a&KtKA&r_hHdR;-M^4~_O(MgIwAwQ-=D8Rn(qi4g>3lNa34MR-sIjzI0m2K zzi~gP<=hME`Tq^~g}R%2Kk2?uucY3`$ybkSJ#3)t{yu43{gHIcR5D0%m`4&s4DaIu z{9-O^z;+!k;w8L-SMdf`!N<0!1$4jn7<3PJ`IYzPcIXGI>fYD47yUBv&+h9xG@bnm zMq>;n7(W@r6tkFo2wz|$PVT_*2Yx~gemsoCjEr5nebcnHgI z*WcN<;!*P)DKDA~jyWddH`ZZs_u(AOK7I%i#?LyRj}9zT>49E&5R0%G>`uAACG!$z z!jE6E3%*9YMX)yxz<8XBAFvthYLhxQ=BPO}b3Bbtu?{t6Ioq-t z{LZqIp)9XqU@mc<>_5M+sV^!J% z`rhUqczBNOmiW@V`-AmnT^fK>S$EFBZ{RS^_e%rTDcsf2^CGzt%^G>ykuniyA(wTi z6z8!1$SU(V>w@ThU$UkJn`G?Rm-Pg?@3}PI&oh*ii_IcZR-4VFv}omNPs&i^C-YH_ zo0Y6P^HKLc-=ETNoz^RUFirRSZin`Wu#UZeap}Bwa4OEiY+R3r@fbFlzN~{X%DmZ; zV@4cwq~~06Ca%S8xC;+qc_+5R*ymV2kHL2wpAX^gM_o<#M(lv@L#_Kxhv4ozT}}7j zFc<${?mO*cpMD??!J$~rwrw@e?dG|6j@qU&efP0Vg>N2jCAj+*@5_6j4Ki7GFT-5c zTX&z`uL_pW*t2Tt64{7C-_+5 z+n05;6`nH78#4@Nvp&wixtNL1nzJ3lR{V(6`?t?%%P|S-z^nKJHTW)_^$yuA=h3*( ze9W@`8V|EfWo0M+4*RoA4@NpVBL6tnEtI1Qx?lFeNJj_ge%Mv;HR0a9Xm51?&uB;H z!{OYA5M@XppZD?W>7P>%_u++Ys|^b*!r z3hY7+bpQ1gSOwjGUH3WEeb)WPw}9ghWFqx`>Ss{%i?ettH!U&^*OQ(;MGT)F9c&j?ZRQd={ID#jGnoYn@@Aa6djY>Fg8ELOy0-CQ|Ps zIhT4N*02u!h~HU<naR z8Xw?OtV2G_`fOC=d3=O*Sbjg}Gq44^-+kTt+?VWR9Y-d|AiD4Q1o&|<>p@%OvyGpr z?R+!uzTzf6^4qaFiKE%4m~Ej)NchxB)j}u~|mSDy&9XXU|Mhp6JTH z8~OM8d;wf}ALoNH8`oei=3}QxW1VY+CfElp(HiME5=Y^9JiLp~W6*u&voQv`ue`f& zw(d`zhPhj~2Q(hSvv>}x@g~+GgXJ#W&=>toCOH6E7>uFNeSLE<9;f0g@eLVSltX2a$5HIfQJ7bR2=Ba4b5T46-|V zA`^p=gKE48->)3+z}@%wYTirIppj=T?;p7f58w;@fh|ovpYFqU3M<(c$Q$N&lGDb% z`*}|+#8X&?mSN4lX})i;1v}tt$vv^r3t6bf%W(G-u5QiW z!`(Mn_i-PDT%3!mq5HW1zx!}|_u=011NX1T zA=M_?Xs0>nkIZ?br0wnbirkE?9Q$m?p&akD!{UQEmyhkN`#bP8`--3OG}E>eKe3P4 z3125q_Oa}Z#SiEK<`zLjwIA+J6l&G#6dz$@^z=5gWfPd=CXk^hJqv;5#R-*&`0rul9{kk719l$*@S z><{7YPadT^hBf#eTktb{CF~QBi-|ZL0R&Nnb8t0$+?aea$}j`fxCFCtGj7A(@O{I6 z5G(O6mTmE@Cx1q>t;}C^*v5Moz05hJT#q?;(Y!{k!aG=pt@suF*>}nSvz?UR@dx_- z%y10C2oz%)&c@xi2Rku2p5}WP%kd+2 zq6V+ z&H9{m1mg|jGsTcJ-=}Y~pN8-KG~eYP@|hTOa3>a_GwVhdoQs)QjkmEKHNv_fBU$!2 z$YR+J!Wy$L7qt&UH7>+*lm0|K-<_-K`5tF^F2y_e4Am@4$zfT_Sd7Q1I181SifXp? zmtYs$`XsjTe;|u(^&mXRGL#qRd9GwTdleQpVEXYscA+2hQhfWf-r;m}CMo%?+0MXs zNSbdiG(|6*fWgQ`1ZB7y*Wy0R$KzPfF^l-hSpP33FJbv#My^luHNsvv2yM{;9dS60 z#4+%F%li$vn259B$E{n_d=KEHA3f8V_wsl1CiDL-{Dfc7hWXwO>F9(E)1B;xOpHV> z&cZBQgM60BWc3t(BKzW3mWBMn^4Ni8yyv8bWg>4K>lw_l8II%m z%p~vf9^8n|^;ys0JDBYNa&ZAJ!fm(%cfofk^9_5U37Vl7PBeYVlhGeTk&B7gz%r0} zi;|o0!L&v55DCJb@?i$2_J3J({u)#xUdCoAm@4=mTF1YGhy{-q_bOs3qGG zoYcy57VjB3m~D>u4x&G9XW2u?k1Vm{WlV|gGm%I8Xa&wFSq z*1yGm1o5{y=YlEUrTHF3m#v;1EJIoQEAMq=vrKXjK^YRL#B?)*oQa!o7Z&45JcsA; zHENK*GmY~@?8{j$a?w7XOG&xHTt!}oo6KBN=3zb_Fi(-PlVvHdut?7QevHJeMb0d*-%bJA?&z47tY_J6!rnVLhD3ieg_N_+J>&vBh(&k`%kTnT#T!@+HK@-+84{R^>8Qr}n2j4y z!?{R#miOjLjBDm;z_w1#Gt2nwu^czDyd;-pH3m=fo?C{;vq@~>z4sedvg}^P&-ew$ z@!peSmSqWUOJjS7>U~)MaX%JfF&O8Eek{amrkrIV7vLiN4fC)Vk7GHW#~Qo~-!8VrxE`-!3wGc= z+N6AHL|yFU#21z3+3l`+)R#!}}hIyAQ}9>S;WRyAMe7 zH(UA+r*`)NIqt2NzLTikeLxz#)6&P{_qqFkMBZ)b8&B=-19Hd*Eq&}BeeOOWJw9yd zn@H{M1M=I)Eq$j^yZeB=zOJQjGPS!8$RVG58x zwYv{U;YM$I-F-m%e%De>p?vPXD<6N~QcbIT?mjDrZ1%=?_gVRAOG{s0hP(T$yz`^? z{O&$0A5&|741iuo0Mqf9Sx&x-_wft1<0+QMGgyWdxQ-Wa1Js_R?sY?VUDch3xTrqc zV_bs2`o4?WXQ}fv!WJ4P7_-0=jPW1KfE{UuUnqLEZD4nS7=zMKx}Pt|P`U1sCIT zxbyUGznZ#TcIWGL{^m63bD*}-?sH(>_ShY2xW<72I1OswmxH>WH|l;4)Omj7_t9`I?RC%;dt-mJ#vy2jJ~#>ekcmMUVn&d;7z4FqP&>cncpe|(W9-Cl z*#A8q7d_Amqmhd!%5VuT!#pg&^H>431JLK2EF8@&lQYdZq@2XHAvxKoO{xq@_nb@0 zRi;TtuC1V%Ifj&QCr=3}r6xwo6q6vO!l=!Qd~LoZWs~`yl+ETsUW8m^E+OSIa|J0^ znc1XVYpy5dZ{{XaJ}@7V^1JECv4$LBI+1d;X_CSGKr^#9DJ@J(QVuW&lG4VsC8ZtO zqu=kIgE$8wz03)uoM`%z($8d)GSKKd2BJ1;a+*1Vl(S3|-b-?_Ig=E%Ih3IB`#ArD z{;UU?P@6mH&g1kzHgeFP@kRf&$4tzD_Th3D?!ndU6U4P2`=hbxNTJkd(cdHqkMu zxbF+-9K3wObFRl{_yT2Yd*gW8=V?PfIn}}N6OFEc^KBfV_M&5M> zcU|HWYH7jp5}i{LwN;m9JXZ@GgX58pLQFyo?t3h*J@-;R=ZgEh>pmyV@+^skppnBIh>TEOeT3M z-1)G%bnASy&R^>Dq1qz%!O2G74;FntH~_U%)3vTyxB^#WHm<`wEWlzsY#t|{#8Tth zr+!TR3D#i)wqPrCeoh)T<$Z$|*cYvE6pld#x}iIIq8Cm;A56pl?C-Y>pP#7p-sxp*wn_4^B2`kY~b=09^a+3+R?vxC~ce zHm=1DxEZ(LHgg9#2Y2J|n1=;;5Km%_`Dfp|)%R^v+Y##egZqB1JAXZkeplcs%*M5t zhXr^9kKswE&AEJP){`6H+Ii|+L*4Jqsx6Icr|8<#xbx(?1`@z@sGZ_0{0+C@Av}Vo zvD7RlUjogmeHrM6?#RRtoQLyqq0#v+eVHApv{*~HFN-oCXG@OZm36YZ!MHwn^9T{gha{s&E z+tPQoQopaYnEGKnh9~eWmYe6v7x6OO_p|h!tkmyg>HAk|_kA_$evZ`lup%7i#-R3o z=iwIU`&b*{u7jt3&!r{D8|ml@eb40-OPFh=46%!S&!E`r*%dSrp8Yu*W^l-duIP!A&=&)s??2s+Ik*!$@f-9#D1BdB z*FoI(we`I}ou75zkJ3pmou~DU=5OYZbJ-64-D`*XJE;!^&F^Kig!VWFuKjY9?wL^g zkh%C02j0hc(0PYTpz{rN&oiXW(HKq99EU;e>k~L1kKjlA3blO|U7Oamo2K*m z?1u~tK|W^SLOcw$ic0%n`bnti-GBFT?FcSHw#B_5mxd;!L$H>R=B$i^i zQCnNr-u4r^*JC4o#83El+dsPVE@#}&=OpO7%V+RCz<%dFwljDMuVEK_JG^$g?t30} z&(FB;X|~_R>%}qnPrpBZ^6%`2a5b*QN^HR{=zH<0--oYzK4=o3nf{&c!!w8eN8it? zuE%u)%*7h`>U-^obX_$Q12G(GS5$#&=zCjp;lBT}nr@x9()YINp0}#o4(YGjANgnl z(GYu?resg_#tGoGbmg=^v(DzFYfNPImx1FJn>y@%ETHyd3h&Ism z%zVs1HEzRlti&t$08plhY> zdg)-gb=_tK-1WNpe5UM;3$O^Ty=48CT>FQvtBSkMqxM*Fs7;n!fQRuMR=~B-`j~D> zZJ%}QeoQC+RlAaTjH7m3pW;7lw{w)UKijhGGPCjZ)XAs<8+w@FLW9 zOVn=bLA;NTpmtkbptf65jRkPmIo009U1vU)^Qi88s@iq^tLtA~+HgJ53?L=-y6GC~ z4d!!F)ILF)p&L##YOf$?;8M8j-L73(YWtDn58*v&;-uP*{8_t(46c6IQ|JR)-=Nh`M zulI(ouj{(H=(_qQxORf>e7d{7{{Pxbd+nt;lJ>6u-dE4pV@bW*_W76Z6oz#Jpj^+qbI+>$MIo5P0rHkoGN_W$fl-@W2Cz`&b^fQ^H z3^Z)Mv>91>4Ner0g&>0a4QszU%3!AtjA--csK*B&D%wLP|5UHz_SlOHx{y14z+tc1j!5 zmXt${e&b0x82#?29AP?bBC#0-18%X)wd`ZgJ=37!WneR#2 zjBQXG4%u#Yk@_u&j0U`S5imhgLZ*n6uqh#>)Wk@cViKfOm?~1HnX^eb$IK+Xy%pv7Yb2lmXnEObXZ|)~$p;<)AL*@}u9y3cwdD1*h z%2Kn8l;_O~QuG@=qThNI{Z^0YH(y1+*|QpNnzu<=Yu+Q}1M?9npO|%|Y%rgb@}>Ej zlyA)@Qoc8vN!e<)k@BCZseody~?_v?N8p`5*_F z14(IP+LCgpX-`TA(~*=TjJ~rgN1J0w>1?`?k`J{-Ub8Rffbcu?y+ZeW33q<=ui7i6 zwd3`pzG+BGW7C9`W@c|vT9}rkv@!>fa-eBLN?UU%DeX-MQaYL=NaCYzKTa|$VWW*jLK%tTU7H)oRKHvv+D zCPYe+36oM{N=b>CDWoJ!1u0c#8YyR+b4ZzK&LialGmDgq&84JVZmuNdYI6-K*O?p0 z+cC%7Ny^>k9#ZZz^GUhiEF@)-d5Dxp%wwc1F;9~6v{_2ZGV>fMFPIleS!rG&V>g_Itq4=H_dGKOF{Mw<&saqSEP$ML>G2$N83 zCX=Gy!V&%MiTmvn{WeY|)IRY%a{(!{%*CW!YAz?`N^>%FX6hQf@bM zNV(J8P0BsyK2qkJ`$<`77LoFhd4!b5%o0+bG*6SV)GQ6&q-ac`p&4WsBANT)n0S}pV=kL3?^l$8BWSblTAvF zIfaxwGmexAW+Ex4n=?uA8~t{K1WkyPA`>R1#HeknoM$c|WtO>^luOO!q+DsPCgmD) z9Vs^${RWTRY}AHUI&vLLjxe1_IocdcN@vrB?27KDCn>#6A5u;-CzI0O3?L=T3?^l$ z8BWSblTAvFIfaxwGmexAW+Ex4n=?uAn*b?66C$O^gh?qerKH5n6mlx2n;E3cH0P0W zftf|h#YVqi_BxBEHO`#^0Zk> z$};l;DK8tfr51h1MgG(F)UF-1ejiossNMH9-S=mgALO;0&X0QSrVr*sLwAhESd2#z z&d05I98cnDvy^o0q*v3u5%t%4?V@{=YWG}%i!cXI;cfhY#+=AF3@2ecVz>-yC!N|p zdINQ8`{=gs?b$wh9Cd2@=&Pwy+ehnnRn3-FA2mV6N_@d{qU z8~6EyFZh02Z<0ZU|SMdhieIk6#xm1gO z7=$4hh7ridIE+UD^!s-DEe+l8;TiKRxdJcYWxR?vuomy)GwAmQ^*vwRzrlUaw;$bu zFa&>gp9c4PdFL@)zwiC3Sxvr!cg_3cI_P)1x1lR-!lVaI#88aJL*`NP8N7@)a1d?8 z+MuWDO-dirkL(ZqKKzBa2p8i@xZj7@?|{E#^c#KsFdh?e7V=SmLKLACQ&5icaV4%c zw~)6(zhkA}^xW@2E`6dKdSDFnyTfrL@F?Df`@Pv_w6)qBvv3jg8`_dio2t~`ojs6t zRQmnTaj5${Z~Cn_{T_M&iPktK90{HaKDeWzB9vdOa{m2(0vqcLF`_y zUATU4=p5)b80KILwxZrVPa{&AnT}*9xbIEs_W;ksqj(YeeYmaAcbetM`D}kM6#AXO zYFvOvupD2SqZiN~1X*SjsoxJg8|PrLd6;|@OYj7q#WFl+Hj$h0Gk(G6_p>d_j?NK=+^JS=wg$82S(oy*KfP@!$13dmjZ_W+3&mb+@I-z`+oUix?jMe19tz; z%W}FuhJFVlqczvCaX<9CQttOKj^nuDL}ax2$M3)PqhF>ONM_+pxbIJ|r(55lmb8QU zUKP5d4^Bcq3^k{ar{gl*j4p@l{@sZFbl3fzh^~kJ_3s!AX4p`38Cm!H@;B0N8`u7S zfqsYPCuDFzsu$e%xKD|B-{aQrXk80^r&rwfdT)P*_BRN<$?v_P6mgu5^DzsTV*wUo z;9D$5=ps%poP-D}%!Q=fiqzi|`FDT!Lf<3rh3~kwy%}r%7kl>tXLGgxfBZ}CBqm7` zqvV#D-$-I{Pl05*auQQ3{6#_=4yOr_C$a4CaL+!kMJIo1T&T# zj{$tA4uqRm8#o_Ub7BMM!)i{f=E1%N&3`?EE0X+VXPhT zMsru?I8MOLC*3{GKbJI~?>Nz1Px%>|=c##{s(Yrno7wX>c@MwqqB5!hVxU`tTU<1=0G5!?38FUn;o-Ymtuc zupRr6iPJcPH+gQy!{fOriBOcs2#iD*9>4U2>N~i)o{fEMuMlZ|Am!B0obv~d`=WI* z)X#hF|MPxcZaydK=efR~`g={#5?V`9&erc!-_P~?mT+19zP09T{XDIM==yn0xO~3- zydnIK>*p=uvg_xq;@bDxorJn)+lzsJ~YV>hnnl(~)%jzgRAJH}{jh@F-mUZ`Ute#Lry4 z8ubq^f%=D12MrKzZXqSG-#D1|J9rOMF%7OBt@@F&2R~xJ$s`Y<8sB+0qYi@mnHl_S z2hP^tbag$?*5BM3%D#}X5yOr>FB*Yc5C!#B1N*BV(w>h6CY4OXQm7w0=L&y6HicY-R0Q^CZ!Sr{ z6^%>;>H4?o<9=Y0$&a8uuj}`gyOQx^T#rgnUC0{rf$O5a^@mmeDIDqpi~7E@0j~f1 zEtk~?mcagRz0zmz|90T#o#6VxuX6cys6QMQ&>wEZW%Y>z`^D2~Cu0si#79s)#dGZ^ zyLxherEe_iBfEa`k>BVi2ltO%zxaVK{Qctp_Wm%NIIlkD;6r?3Qpm-K&By*Y4&nsT z@-vQ&9tGLo#BOBb2u`3!A$|_G4s(yfw9yx;@4p*|(Sv=9KF~TUgRmQ!aCJL-u-~A% zox7nr&e8OlI$=G&K`7t%HzSho-diyiZ{RPCrD}abHxE05?^Ufo=+@_Q>kl^PyRseD zLu+9q@?96W?nN};L7k8ct*a8r_l?$5iAE>Hhx+v+pF|=?Ae#R85Ddcz#8zORAA6xS zytIz&%Q#)lFQ<9oFWtoPI%r+kDrgCQTCNHLkgg^QCY*+G9CXAJ46q;OfuUVcQ=8S8x7%E~}2Ut5+S(Hdysv*W(*Rv;FLZ zG^~c|=r%+K+e_7rc6IVx{a06K)YYw2eZ>vXI!LM`?dnDc*M&~x_~ol`^(R_s_;*F>Q)mQWm`RhcxdU%yR_BYYR zJWWaiK7$f&-sIc|DIMxpmXu~@ASo}H0@pE)hC-$aDG%})k)Ea(DZNcRDSb^pQkI+D zr0g+!N!e!(kn&6wzhR_2XGW0nym^6?G3G^5UN(OvZ<7v$x8tPHM!tN&9pKgU;a8(L!yQgI4ds9u2ME{HH)$$JoE9wH~=BeRP960V-m z(1P?&@d8HUMZAP*W;Q7w;v+1;LM+D$tj1?Z$3|?%x7cQOlDpu8$Mv5anp>HTTL{1C*p8F63tLjUc(!hV^T<2j8v?|YJ84$_}XkDB?G%~5Qp#! zyrR4(&=_5jh-b_&Ql2-HNSSOFlc`v4R+6#~>DYpAkpUlC@_i`}BOb4tMWn1X-;zG8 zDCW0{T!VE;$E_iLZOL}H+jJtO8)7iRj3&omwwXtMj8wCPloeQsO{O^e)KU^xq6@lW zAQCVR6LA#Ba0Wh1U|(P&PQZst*%y~9P!4qwf%b^O!{!lE`XK?^upN7miIea_HQFvi zX_Uj0NWlA;g`@DH9Q*iE4K)ys2sA-c^hO^%h6K#OEPRG^e2ec;hJL~|h%p1nK^TcK z7>9|NiCI_zA6j3{>w|$vz!986J^B(2&hfm>EOLPGq87 zO~2C<`F*@FiR-Zv>8M7ZE&|8lL)sMHQ}`T5aN|@SHyR)U{gHqbSc@&#j`q`d-7yde zSZB77-@#|TMWFcvRj6*6%KK9pvE zwH)p=50KIeeejq$O?p1wD_DY6SdI1g0-Ny-zQcC>&190Na0WgU@#t5fl4(dvW7C#w zhi*u~Dfn;+eeZmzg*q5xCXf^HHqvnh3G~k=U?RT2c4Wba3iR2l;Wo6x(@4NuW*NB> z8{yN>=)+IMbj-pAY(f@%sGOHRBjV5-@$jK;e)`YofEYXoAM!BJ-^1YW}Hn1HEBh7Y$E;r`)6q~d3sK;=t$9?<|XMY)Zc zPRdNo!W{TenK6qR=!{udgY7s5AKEhheLLbY2(B*aQZA?CM`Yq8e5lRXhO|UGJb?sc zm|sXALKx?k2qfS+GlG=S<}FgDV-|iwCQibKJdBCUr6`Kx2tgHd6DhS!15%oyIc`NO zv_(7Ijt=OEu870^co==~7<}l;SdDZ?0#+d%ThwL@eI7o>Hu%ttv7C13j2JwO1bl*2 zdNlG14pKO2@Xot?2h^d%{&G-hp z;6qEs$lKvvq~Zj8SMxbz3|#7(=43lOj6N8P7ctd*O!|XP-*&@?8cCEB4g zV$j35l;zi-_LLM}rTy_2IpS;TVl1 zY{xES;xK$T{v3&oqev8dft*Ect=arN+==_}Ao?I{4%aW_+<_F@7>ERnz!;3fn^65= zUpn`HJ&8(RunoYYP(9%v;Y0H;xnDQ}AMXB&=LAo}hr2fTO&}!+Z{uA|!W2x!2W9~& zDP|cd`M&lmOcucv<{DBOmKR5#wjPU)9@!vhHIfqT~q4kfvPUwt#5R3SI z98ZD@M>K{Hc@Fr6l5(B7o~($<=4MjrnFgeUqY0X#Ia-=lq_j5Cq}*xlB0Hd?=}byj z(~Xo^a~~=9qX!-`kCM{g3?wDNj3i||k}%0kCnW`$I1FDV+r5K4?|20hF$>8^GwVq? z3Lj=3;TPOl$S>LW4-eDcES@@pGXTD?n{3OZ5v)fpM#>W7~LFTafI00X~ z;j+LiPpk4XGGb+G#u zWE=*=aIp?H{jI|Ew{WozHsfSP{yXbnH!I2*F@BFa*nf8YYp*!tl8pJaLK{S*13H?{ z%3PpUjfZ{LiGwLK~FkZG3f5W-fNAANH_9J*4 zPnip;lf0GR&48L7cJeFd(+ z&Y;~{*IoAt{BPDhzF6n@AJ?be*9vA*%YSKm0euCWSsYTa8`&-f3kTgiFhZ zznA{^CCH0%D35DV!Birp3TmPj>Y~1BNXjjy1u3_h+em4HcDNmPpuM@9luo7#DfgHd zQtm}}#F+=kp6G?X=!YlpBnDuRNhC+$dAy0Y@h;xOG`x?6xX^mNbNI~<@rg+x7sJhG zb@Nsa7WU6ub@Nr-Jk|J1{qt0-Ugn>V>gJ!i`KFp%D)FIyXPYk?!+zTc^RMQMp6|R+ zHxJa!=X@*|V?M}fKIeaWzGiGuUVHr3Jk9%yF%Px4e?De|D|!E7Zz=yg%g$wZPr=Qn z?7}$iy-4hR_IZ*yC_8`yk9IK?EYv)x1p#yQ|se zksl+~3}SwpJZCyHZ!HEROd2VlniZt{j3X$Rk7-~if=h9=DNB|^Pdtnb#>>y`a1199 z#<)#mbTe^`zub>_bD9*l{`|p0%%y?WIG3U32%isWM}Js4qYLuzc?m%YGmMn=*nn@a z1+9wldpKocnN#v0dNY?qe!_m#zLN7^umKyf8C&4dugi=4D1<0Ji_K8BG|vN)Fd0+v z0Xow^i$xZEXh`2H0)vo%G_1r|rer9`z7dK_2tz$IL}N5TQ?$VCxYOK4cEbtYELk`M zAL8kAiQYiDkPih=*c2s8q7<&e)ut?24pmVdVW^LAM4*XjO16X69G6^SoY#d$<`gMs z=!5xi>14*7@TeI?%3&Nszp1?5Sch~R$4O+F>eKifAjT{q*J2yCqbq%v7;M9K9K<2~ zL_bA}aooKmt}_i=C#2>q+l_YAd>B1Q}n}QSdLX#YrZArJ8Vb25c)%yW^OCN_d2u|d>7nfR*E$l0x8^>*8z*{sMZ#7S5nq*Rj zX1^;EGCy@CDvda((yGm(h$zUwo#y9XV+eC?ETPNG#!@X?NdZHf& zz~hT77cN0Q6hJ|gFeS+=Q5M(XdQ*v%DyBLq4bTv+Olz_Y+L@8$^Y|;?z<5l=+js|) z@E)e%1I)r&tj8Dl%6v`!41EdbM-i06wWy36@H7Tu9OmL%>_Ei|JSS*{@%Rz?BA8Y2Q@Z(?2(Ud2SD;Rkp%dCgE2Ef8&D$pnl?HOhP?_!b4XA^Gj~dMvJI3yWosvr(M(F@OD zC`Mr#W?~Pt_&^ghGakpvJ3tE%_`adf#5Sb?9!5Vrj%P3o&!XM;els{uEY&$iELvpX z287{dBw;3IBNa=KjxX>FEm(!n= zL1e)@#&KRGVly)E6TIV$m!TM1AR3(zi{~&FA0QdCp@k9p<0*WOwYc*nx5vYXM?dt( zQ%JlV$#yq59Db`~nw8+9scmoy<%iBuRNFd2a6?OUHJJuh%rx-GSIwD$`tcHDf93#7MfI2ertbRYiql8wg1=l%XMy7Bb@L4 zxm#b{?WgOUu<QE> z{(bWc-7n`O=1G!CWZNM6VIfq8z6WZU7*agm`=X1IWP*P`r{BAzAp5##XjDfw61So? z+Cp_@hu|5gery_6Vii8e8f-F`6yo1QV?^Q^vzSc7YNNWZYmmDzw?|_WNlIXy*VeS} zHjBwrEWuK&fUEDihRd5wt|I)qXo4sVf$F!aZmXnW8CJs8Z~dIhu6}E7`X{Q}+8B{& z4p*i zz`Cj9Y0qP9M;2o_R$>*dqmNS&Rp9EN-o)jbQ4d!!##0)qhbniQdr7$uad;Sgp_-^t z+cYGl5t^VWR4;Xid7G5Un1bo%Z=~$SJ{&NINmozx2F8?Xp*FrZs-G&=!}u&f^-L>3 zHBBY3p6REw@0iAS8lEw8$&auA3$Yk!s4<<75pG5;sCKEVU-~qc2b!NqIe<+3Vt#m^ z{eJAm-|!>$VxLj{P*+1#bwpJ=)YT82!{v`LAJvNcx%#0)Xp8EGeuPx0eyHk(it2_| zM@`&}+9reCf!vpKJOrv68i6J_m-?Zq7g`sQXo6-&bwlUi6SI(9j3q|(L}z0@7Gkkc zJ<*zIh;TGEGf0_Yq*47*QT@@cuoc_k>W|hh z&Dav|Mn}A6RA*Egn`xxXHgidFbwpog-u5ea)%?QPjp~THdZDg9sOp0DfU66tF1FlY z!pX+yW@1ShU~W-T*|y5R8c$kOj(K@V z#S*MVI=;hp>_;X};|!ug{q7*;DGb0!j6xDpp^jfJ{MI;CDXuSz^BJd#U8|&&_X3>|>_>yYKimN007cNU4pI>lYS=GptNYj;+ZYG1= z4UJd*QR7s9=J?d_T_^W^$Gdzx7$1Wh_ey5$OWgREtGoMWjD!6zjDIc9#r`Z-na@c% zY=)O(Ul^}rBBo*%Qp_4svdkY@N5#kYp=zjz>Zi!>T|Y%NQ{-aZl#6v!F4j%qcszaX zi*-}zpEI^_v2MzR*G*B)l#6v!{`|Tr_tTe=zIYU4%mi{G(vXfr@L^PWZi9<;QaB#M zvFg(kd0y~;x=soM9RJOAQqIsn^L&1(z>jOSxDt<$s}GifX3R$N#0eDU(uoyy^d3H|1iz6rPuii}g}2)=S}izNP4+Z4vF}C{gk5YUtY%kWBHOt0y zRZrMO$;K2RPuP9P#-V9XIBcAa!@izycsCn|V?E(eYc>w4dJ<}`C55T+*(#D!*;FN^ znyF4on5jt$oBwQeNU3iclG4aTkkZ67C8e2ZK}svrnv}LCnv^?Cdr~@>j-+%pT}kO? zVoB+4;z;RX9weow=|xI!6HiKC(~p$LO@H!9JZ%P&G8jWJ)I3W*hY@%lqwykM#w&Og zuVXwWU?P(6j+sQtWK6*{GlP_wn1$K+5FeS3$@xez%Sc&iJ|ktV;VX{%kJ;0nHT7B3 zm$Q9M$|my-Dc_oHq-2;Kr0g`iN!erelCsYnAmxxbLdsDb$4Qe#${E84Q>SctxlJBY z@|gmp6f#9fDQb$55@Je_Qqq(nrL-wSN?8+1%C)8fDHTm+QmUG2q*OOyq|`JG$cAWy z#%N-ilFiZ5v?8UoX-i7{C4PNLdE6wB@~jz7j>IT4njC`{@iyMY`$#umk{htuY$0W< z*+xo+*+I%qvzwGXW-lrG%mGr4m}8`zz)74&jXZpoO?Oh_Ob=2XG(Ab_WqOkmZ~Btb z&pb{_fAbV61I!>&63s|bMw!v1j5RNj@``ztl-JETQpTINNJ%p9kTS_kCS|IbPRa~3 zlaypLhm^Ty9x3z90#Z`UVp7tu1fQDaq^vZnN%`EYC1t(&l9UZ*BPpBB7E-pFZKPzF z9i;3uyGhw&_L8#C93bVOIZVnCbCi_h<|HXu<_sww#~>xQ$wNv$Q-G90rU)rTO)*kJ zObJp-no^{cHf2aDYeGr6)>I&+qNz+uRa1?W>gFc01ComIdSRtmOG?t^%(=r@<^V3h zBBa7A>zA99JSHD01xz7QikPCL6f+^DlrSYpDP>BNQpS`eCDdF?N(EDql**A4Qfiqxq|`GFNC`KMNr^PKkP>B@lhV?(BBixyOG>o4gOv8B11TL%XHvSFZluJT z?xe(-9;7^IdXm!1^d=?V^d+UAd7PB~<|$GJm_ei@njxeNHP4bV+>9h;lo?IRSo0Do zub8(;Niy${GRaIPWvZD@$_z7;lw>o9l(}XeDf7(&Qc}!fQqs&)QkIz&q^vTZk+R0D zBW1n$l9UZ*BPpBB7E-pFZKPzF9i;3uyGhw&_L8#C93bVOIZVnCbCi_h<|HXu<_swX z%5i)SrEm=@qXz0B0xi)7olF-}?lCc>JcvG+kA+x;&#@WbVh{G=I8GsVdB6Om6vm|} zh7ep~t|G5N1yhlf%BCuLBf@Yq8Y2SD%rm5@SVDEgn(kyA9x#6)Gfv?8UoX-i79xr3DUrUNM*O=nWNnr@`Tn(m~;nI5D(XnK;; z%OsLA#0(|nSu>oJk!BPrqs>@SUNWzc@~U~AlyT--=2J=qQ<0R)rYb4bOm$Lfnp&jP zG4)7kV8TghY$8dy#YBD5K@MkXGwY9ygUvMm*8Pd1 zJ&fDefR_Bi4muGhaiAS}d-BuCKJ;~7vhB>Vn`z2a}j)e7<09r5y7yM67D z>~X(H+PXiZBKY^or)lf&&21Xu-9|3w@#t|DX&&ND;qQ;*-`DdU)g?qPf!CVbt39eG z{~kGyww{k=y+XW?$S>{sUVTHd&&kfBt>>dmfB)kv&EwJiuRxn225&pps~t}J6SBo$ zi+fBP_3{h~Q7LLKjDIu z(46E>pgP_i&x-3bP8ApQ#x$E_0JB$4|2-U<%<2E{P z(AB9@jdY!_It=GiCq0GRFGJw@t?OvJ^INxa`8#aK572tgXP|==1yBfeP!Fo>E)iHAG?Iv(pyvn=};c?F8)o}H>B01;iPH3Z;!1=++%v<~g zNx6AW5SEwq4dCi6dBxfOL+kgpfQsbTK_qm3qg(IT)tz$VE63TmoJRcn+)pH5=3f_> zzwAY#3u5s!rh%JeZ)X;gsbEUhKb&{=36Fg{cHu|t17-ZZer&A7)sq;;WpQ=h^75G# z)oqijO*v8`&3B}@^+n@&P40&~Kg`tya&^;!>n`NxIlKg_jV7+1nLF?FZ1tvf9_mTs zh4L0gQN*DK;-UJ6gOG^PNJ1)f{?_%Vges_po1ng78?-|VM&NmjMc{c>u@!j!D)H}B zIs182s+XpEX0CpY&JkA)9o4QD)l~?E>M5vxj_O&fevUgYDv8UYx(Zns%X>Ajo=zxp z4`Yykboflio4E{EKgXNGL&b26gz7KqyeHK`lXMe&{?l*OPw2sRR&^5|g3sh)UoR95 z5ed~oQ2m2=^A%=nz28?kgiUTtIOl+@qEu`OzVBC#?}weIyCR% zY;|^YzNhN!Xg!*o>g>36t6hDaSPoQa{c7!xwnqnOAM{-IKR@Ai3(X?(Q!K}C?T40S zU-De`L+{{r@3B9r{maicF%Jw{Ut4t|-Fn&C>tr81zxqBpQ0D6U__&1xlh6YNIadp&?X1&#e=$Ndc;>rvtz}5sv{##Bhwo z8&J(F)xOh#{_3^(K14lud?%_7c?REON1;y1e{x-id-!f0fJCT1-S4$N!MWDGPbzly z<16d=`AK9!yYK&WoQ3zm^{8ZSB*o*ssd39NbkqAZgV!4cPzqP0Jg!3pR76#TT|(Vx zc$fR@6yzm~;4&1$<*1CR2t!TWjM}J=aGb54K{P*?yUji1edvK+h(|vqpRq^r7@ojW z7zlTqc_^3Vw~jZv`*j=8^@03^4<8Y z@$7+IpNP4bhh zh8HjfFXClP#dIWN4nD+3_yj3fj+Ic&7u9=Ni}fah`~kb6bN)}jhuCYV;5+6pj^G!Z zf)6k9U9%E_>v5@0v)0$BgL()@V-ra>K~qGbIohEK&!yI1nShDNmCX95v-#}f4!9GA zBl(+mLA7UNz|-XQ!7#q}p2cnS9qvNBxt;H>_DH7hm4@|vCw_?y$iNQl!G3dul;b#o zG(P7ia0)&Y31#d8>v0fOxvw|k4UB`wcj;va#f>=4=TI`(*OZ2AtK@+%SVt01V+e-f zc}&L#@NyOPG7(E(x-a@80g<>19T9^>UUStQUXO3!>JKLtqm~QSn#3aXpD`L^@e-zD zIzGfl_yj3XJ*5?J^_13f`D<*%Hj_dAfZfQ%AsoirJO?Ln8a^E4z3Rhy-lJ#W-OTn7 zJ$Uc+fm;v7#}8Y3BdaS$gkm_f;NT?cCsw@t$`tT3y{ zwOEgD;MT)x!k_Mpd+`*en+2q#!Oi15%H`u=6T*9oW4YRF@E*M$)zB5)aX%iy6L=Df zp}|id9trhJAZ0AZqiT8f8&T7=B_$TamDRXCuB9*d9CW-P6&lO`3>v%lA&l>&&ghCb z^uS->@tMyDH@@G5_d;iQeCFyx^~rBV8?=MRYf=`WaP_Yma@o~wQT_9F(B#!R`T3mS zF2v#iXu|7-tfQlKn|w$v$9n*Ye1^5IPG~{4kNCCjb#ZE^BBQLo?z0B5i=ZfqAp}tf ztUspu$?b6;dLRK>SFj6Qefl)s!@KblR7YF&rN`hUOo3_|&4b5xXg(A`K@>(EG%(?0 zBSfGDqR|ODZlZeA8NAVsLhC5)$3dLX>$Hb;QLz#mk;G&E7%51{m+&DG6XDhmX~$>n zIgG(XXi{(#qR|PeU!MzkOg^$Gis34R!mV32oy)F1cVtg$U?UcPfvcyT$Y=6d3^yam z7cd4BFcGQ^?iJ(v1sQBp&LEb@oPfjv^vy8^vyeoeWeTQa6ShD#rxJOOy^mz9#(HQS z4Ar6D4o!k~^~Ueza$0`2hd2!%zUR4+c(!q;=5T+$_pgHzMm9nuZiUuGQSDvT|5JU@ zXg&j~)9;RZrE%=*Fiye;kA3g!a3g9Uu@H|L(OiBCN%$12@HM>4_?|~Bw^6NjkAI^j zauw#ELS7WXxvt9?&TXR*Snsb5?Yp3we_e48VsIaN;0d_nd7J5bo(<2bnk68O$>zrqNncg<`#s*1SEHOsEX+O&TpjvpT%Lt6-V3TP7h{rm z&iCQ~jzb4qZiHJuLiOpEL+b;4gG4_2sza~!vJ#MZ1;-Jg`f1-m^=DMS{Y^~7+n9yH zeCAbma2Q_2ILyX}ScpX?ja-4xjOr9_z((Wh74D{;iNnzP6yI~7jv$QJTJ`qVvp=v0 z2XO+?rTz8m6R&3bjWph4S_eXf$*RHQJ$orGLo2jFJH!^C9|Vu@&LSv^5{N}F^hP}T z;!#BN*?1W7=!ekKY~v7%0Z70IjKv#Bg4V4_XH-$LssB(m+8k2I{t5Z*)2U>HVX zG{)j3{1tCt9LAfs$ccCtlQ0$2F%zF)F@oz+uH|RzjjKz!o3`qiX+0LzMRIliGy1SC zMc}$gzLB(FVA~8G94vyOD25PJMpe{DBdE@0bF@S&w835IfR5;lSlovm=mV`yl7K{B zo7rI3(QAN6Xk8K=By53O(F>2@HN1fos1CoYzaO|xN!X3dSwbIZ{f-2a$hK`I*5ex_ zvQ3!)w_b$SIlN&q&(99tXK?kDbiDpBv~HIq7Ugq}_o4c;$(Ri-S46@ZbMC?Dl17>;Cnit@~5Wt{+94VJEMaT|b4k{=F!> zzAX1Agm!DYzMoy+)!OT5>wfj3t=vdk_iq$!-M@ph3z3s(^Qw4xCi?&V8MHs3UDVno z()_otPFv4UHQM_3%F@>3X-!-At2u4``vYhzJK6OqwDs@D(bnHvX1_mxHXk!@r``Uq zw6kB2CH~t_p{;+X8g2c2A#KewXirOo07}~lY187$ulW6PyjbG+}KeVEKDeWT5 z{m)05T^~-H-4ZXIwx0JC+In3#($?Q=zrz3fM`-g=^_J1r2>wiA?(boIu8ru5(sL%YbcU9W@{ix6V z_rHN%-<7s**OIpG$56Yzy|u^F*5m3;TlZrFZQcLJY3twHNn5YSv)0~c*N?N`&$8>M z)6RbXtnuG|32oi~BDD4Mb#{FeZT+$AU>;HR;tzCw;et!jR z-T!K|b^pJmt@{;cx8F-!KOaC_&#%wglkED--}C=|3T^#+p|th7t+DH4t-X`B?#G?9 zv+vJ3|LuFz*54~(?I&sL?^Lk%z4rdCMO(l3rd{8jww|9EwDo#-wf4*0Ue8Y)ZT-7f z@&3~DKY+IGUjuGmoE&Ah-$h&3zhdnZv~~Z-+wF@^_P1x)^_6Ms_vc#s7TWs#6l>p3 zTlaq%ZGE5IXYE?){=XkjThC{dwQuMC>h*0;Tfg@L*X#8dKwFRRUD~=oL#>@kTaR~? zwST0YegA3e@ol87?ad_Gdi>?5_}||tc6}|{`a5f^-JEvz=g-<*XzSnGXYFCMb$_#H z>;AlK?L6!K?a9_ILR)|TQQEq{WoYZ~ue9rH(bntojkU+y?`P81+`#Tw%#AH_WMWd_7Bn4^Offd|NTj{+n1rO`-i`_TmODP+Il@I zSo;mTz7}o$-W1xpU2D5Og|@aQU1{t7M)HqIj`PU4&dn2Z^TPhjd0!f%)x3a<^S{_H zKk)Z;NZtG|ji=uMH!mlV%YWwlEREm0F?@~Ve~pdUY}`Dby|l%R>mTN_`~uDQIW*PJ z&F9J$#<&OEIwe}0O6!!k@qM>miRRdd=F>=C#e{%lRE!FvcMDRQ+H6_@e~rV9hx&0IB%-J6n$s@ecsf$%#VuV{nG+&otbl;Cl$+kE~j}>!SkQo zyrzVyuoaf}ePrY1cpO@z`W_!N#oPKM5({YY%iJRx7bz$Y7 z<~y;i)%Td@Ica{AzEh6E9rr!RHcQ+*M>qdT-+O)FettglnKZvJsaVeQb=*dT+``VNG&BE+`9Vu`oVDElAM=BPU-v(IzL5Jox&6xXoj(+O|NqnTiQMB!WZQGL z^-$gZrsfuDT|BqHS)R+9PZGGlsrlS)fAehfw_C6ul89ua;d2De9N&@>sM(0ej_x2=0j;-QQ-Xj;QJpuFFvPvQ|g>IK~qGb zIlALczRLpVM=fQWbqt#Gl+(PY%uwDZ?4O=(p3}L`YjX3J)E^3*x1{;Tf#0ve^O%A^ z=ZOr8{2B9_0>A&%@7!WsztYVc)91c6&iD1!>#TKb^jiPcys5y~U*|!bZQhjTOKCo4 zCfs%?cs`Tc&bsS^=QlOspYDu%@f4<;1*D{5BR1nGjw5g$(tW(Q0_Wwq*Ug=`bH4MG zYJ}3y#v>+yl(85OxBpSK{JG6r()ldf-u+K##@OgM{K8}06bDD>v$03_|PUIW2mHZBxvny`Cje9=-ta&u< z{=4}!?(e(tJ2!78aDPGL*um#H2G3LW^8fZc8`rN5o^RvE5nbjq|0c4Se_Szm9*(>J z?(-5nzb5#7^`D+^6~;4zTfWO`}Oq-nuinkcXW=ed*A)~cbHpqw)r;NU&#%(|E+bp zuZHV)cuDMMP5S$M95=r0=HpcO&VRh>T<7CNaeGdk_|xX&?A#XOmFDl|G#_W~cK`9U zbDfV(}`>v~}F;Lg(Xz^ZOdcxzPDIUHSc2_v?;6InBq}$@T2=d2T*V7Hu8p{JrMmRM_pmzivKGFWNc|nbUlnWn9lR zL(k2}8TGdiuOe+XA17r`NcM4eHyV ze4KFF`uE*@oUXLlO}pUvI5YTty?=9>kF$*H^?q~nampO>-`>r~sb%e)=Hs;H`U3p^ zpEVz6l-(aUA7>J6z7BGnkF&w9ck^-b9QHrIInBqZ!1e0h{Qoi^rx*8E+vneFKF$FC zJ$)YksQEZWe)hk=a+;4*f$R1D|GnnpMDg$G{c)l5ar*K5MfrU|RJ>M5PALj_a zug{~Kk5lA`|MTbO}S0NQ#!+l@cHZ{6oUi>0zpL8ZgLwmt zgpLme)+ti0qF4+^G8Q4#EFqU-8J0umvId{edYGRT=Xtkg z2Oy{OyyLm_Jqs5){?dq@jNtRATJy6GINNztkMMK( zGy3Ig_&dSp!Kfd73G!Y*f4Villhb)E8rOdY!*DL+`-`|;@OjH?_*qWpExYrT&o;i< zfHBWT2tHr4H9u=>bl&FOh=I=EdDyH`9g#F*>D7&H>6HW9n>=o$p}Pa48~ysl5n;<@PTzo zTCzjc3T+UL4(Mn)llLGN!!Z&sU@Vd`2Oojcdc4I*Gn}U3EeEF`cpI@9#pu|D;0lyN zXCz__lAyZuu5MZ`CcpRMgoi#*owmUkhkrUhkYjxAJh;ob9EzLa=J(|^E|h{#|JmxXX&%l=qvJ%XwemL{ zfzDh1z3Z)Ljrql9De3C3XubLM2&}`BL0fgj1M9G8P5MVd{eq86x{8lcvHL>Jy%&WlnKZ552>3sd2Q0?jiP|a%9qw;P% zdmW&_^Zs=1Um{*b5+-9RW+EB$FdvJNh80+aby$y$*oy<3&g(x7ou^o2GTQ`{ zLsjU!Ma>uMjed9<3CP5iQ@9;;+;BL~R`($9RK|f&2|DiaC=&50mYc)mF`P1|N!8aX zG);5#Ic|$P5DV3HNyHq?MJn7pVjW+~#7XEllXleWAQGwz8H>m96c!`R=$u-2UhQ{W z&Ojy(;}@K3{i(p?qN?i(kKpc13^XFZCG*>?~$K%Q8G4E3Kc65II<8XBnGPoRA4@l?PUx84l zE{5tss7}OUq{5@dz`4|KQ9XhINW^&PxbRA>#!h>FQX9kx(6+Sg1aZJD%w37zEcz z@N8aA;Q7WgI2Q8j`No_ZUk0j)AUeL+462v948PW!yVBuW-BRy^E7IOP)EY^r+tPbNd@3(x`Tb==kJE zPz?YHtUFy*^`<$eydHF(`F7|W^Yg7&7*3s!2;73R9e>}>&%ZZ6kg5x!^V4ghHX1{9 z6<)&xbFFizU04K-=zt2CYqY&r0Tt#%Y4dLxt(gViR#!Kg{ynxh5lo` z%3teLhWYC={#xhzL7xAfJRYb{i>vRfIvzC;iKe&@PhcR%Ky_#mkW>8_)l^X36xC`K zHxDte&VuSX{aR-s`5)_txw=xn)?G>Y?fR2%alQOE*KgJO086n2TcLFVvQUD0t|g)M z0_vbGqM>yI;xQZ}q4fi%V=0zF^ zq%<~NNV&&6 zP0B!{T{>B48ZZvf2yfCCR(+!Sp_~hiW@wIq7=#xv8j$ohX1yQQTZXmPBb> zgL1eQ6--4^Zoti`ZyJ)VaR=@~3}VsU#E}o7H%4I$Uc&3<9r9gF#(XSBDpq4H*5eCo z#C{xv4+XAcR|KIbk1D8&2P-koh&1ylxdN-O8lPh=zQRUq#Ww6fCZ4IneZ!kb!aJCS z`6i8Aj@4!z`6V{sYi!0=d~bdrcVQ2H#1Wi87EYs3Ro*Wsi}I*oDw0yg+(1@GE!0Lh z8slzsL>%r%Pdto1h{vPohbQqaCgTIl!bWU0+eq1g-Pnf%_}LsIPvNvVa|8Vy&b#Z5`|vH> zU%7&9skAdANcq(8QhUN(%hrIDZYGu#x`f$2AZ3=BOUlQXkL27u=a=wYLp5+!|5jA< zHn0xA<_wO2j)_Q&Q60~7IWD5wp5n2MQ9XZmT*Pg6BKetUew&VuxH_C0xvX z-Ekju97G126jGKz$2r!T9pn$t8WE!77rEi;&NkulZ`GaE@rOsCV-W5*#1Jm0m?h+L zti&p)#;)vu>g%3_4?3aOXSL3gO$nvM@hno&(F(fGaOF^$Pc z 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 X4YiWxaISG#vC;{rD;KU{$K3xHaBA^T literal 0 HcmV?d00001 diff --git a/stacktrace/index.html b/stacktrace/index.html new file mode 100644 index 0000000..c4f2a2a --- /dev/null +++ b/stacktrace/index.html @@ -0,0 +1,181 @@ + + + + + + NukiHub Stack trace decoder + + + + + + +
+
+

NukiHub Stack Trace Decoder

+
+
+
+
+

Binary:

+ +
+
+

Stack trace:

+ + +
+ +
+ + + + \ No newline at end of file From 2f960a8372fe2546537677fc656a51cdac5ca7a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Ole=20Sch=C3=BCmann?= Date: Sat, 19 Apr 2025 12:17:03 +0700 Subject: [PATCH 6/7] Add serial interface for initial configuratio (#664) * add SerialReader * fix SerialReader * add config upload script * add serial command to print ip address * update serial script to save configuration and reset after upload * fix updater * fix updater * serial config fixes * serial config fixes * fix wifi static example configuration * add readme for sendcfg.py --- .gitignore | 3 +- README.md | 2 +- clion/CMakeLists.txt | 1 + scripts/sendcfg/README.md | 47 +++ .../example_configurations/m5stack-w5500.json | 4 + .../sendcfg/example_configurations/wifi.json | 5 + .../wifi_static_ip.json | 12 + scripts/sendcfg/sendcfg.py | 57 ++++ src/Config.h | 2 +- src/RestartReason.h | 3 + src/SerialReader.cpp | 86 +++++ src/SerialReader.h | 24 ++ src/main.cpp | 11 + src/util/NetworkDeviceInstantiator.cpp | 320 +++++++++--------- 14 files changed, 414 insertions(+), 163 deletions(-) create mode 100644 scripts/sendcfg/README.md create mode 100644 scripts/sendcfg/example_configurations/m5stack-w5500.json create mode 100644 scripts/sendcfg/example_configurations/wifi.json create mode 100644 scripts/sendcfg/example_configurations/wifi_static_ip.json create mode 100644 scripts/sendcfg/sendcfg.py create mode 100644 src/SerialReader.cpp create mode 100644 src/SerialReader.h diff --git a/.gitignore b/.gitignore index 449c400..ae61ad0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .dummy .idea +scripts/.idea build debug release @@ -28,4 +29,4 @@ sdkconfig # NodeJS en pnpm .pnpm node_modules -pnpm-lock.yaml \ No newline at end of file +pnpm-lock.yaml diff --git a/README.md b/README.md index afdfc26..2b0547a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ The Nuki Hub software runs on a ESP32 module and acts as a bridge between Nuki devices and a Home Automation platform.

It communicates with a Nuki Lock and/or Opener through Bluetooth (BLE) and uses MQTT to integrate with other systems.
-
+
It exposes the lock state (and much more) through MQTT and allows executing commands like locking and unlocking as well as changing the Nuki Lock/Opener configuration through MQTT.
***Nuki Hub does not integrate with the Nuki mobile app, it can't register itself as a bridge in the official Nuki mobile app.*** diff --git a/clion/CMakeLists.txt b/clion/CMakeLists.txt index a2cb9b9..0584701 100644 --- a/clion/CMakeLists.txt +++ b/clion/CMakeLists.txt @@ -57,6 +57,7 @@ set(SRCFILES ../src/EspMillis.h ../src/enums/NukiPinState.h ../src/networkDevices/Tlk110Definitions.h + ../src/SerialReader.cpp ) file(GLOB_RECURSE SRCFILESREC diff --git a/scripts/sendcfg/README.md b/scripts/sendcfg/README.md new file mode 100644 index 0000000..e80961c --- /dev/null +++ b/scripts/sendcfg/README.md @@ -0,0 +1,47 @@ + +## About + +sendcfg.py allows to send the initial device configuration via the serial interface.
+This allows automated configuration without prior connecting to the ESPs access point. It could be especially useful if an ESP with LAN hardware is used, and no connection via Wifi is desired. +In this case, sendcfg allows to configure the device without storing Wifi credentials on the device.
+This feature is for advanced users only. In certain cases it's necessary to check the C++ code for the desired configuration value, e. g. the network hardware setting. + +## Usage + +Calling the script itself is simple: + +sendcfg.py + +Prior to running the script, pyserial has to be installed via pip. +The ESP will only accept a configuration via serial as long as the device in not configured yet, meaning the ESP Wifi access point is open. +Once the ESP is connected to a network, it will ignore any commands send via the serial interface.

+To generate a configuration a configuration file, the export configuration function can be used. +After exporting a configuration, it can be edited to the required values. Usually only specific valus like +the IP address, Wifi credentials or network hardware are intended to be set. In that case all other configuration values can be deleted from the configuration.
+For example configurations, see the "example_configurations" subdirectory. + +## Common configuration entries + +All configuration entries are saved in JSON format. + +- wifiSSID: The SSID of the Wifi network +- wifiPass: The pre-shared key of the Wifi network +- dhcpena: Enable ("1") or disable ("0") DHCP +- hostname: Host name of the device +- mqttbroker: Address of the MQTT broker +- mqttpath: MQTT Path used for this device +- ipaddr: Static IP address +- ipsub: Subnet mask (e. g. 255.255.255.0) +- ipgtw: Gateway used to connect to the internet +- dnssrv: DNS server used to resolve domain names +- nwhw: Network hardware used. See WebCfgServer.cpp, method getNetworkDetectionOptions for possible values. +At the time of writing: 1=Wifi, 2=Generic W5500, 3 = M5Stack Atom POE (W5500), 4 = "Olimex ESP32-POE / ESP-POE-ISO, 5 = WT32-ETH01, 6 = M5STACK PoESP32 Unit, 7 = LilyGO T-ETH-POE, 8 = GL-S10, 9 = ETH01-Evo, 10 = M5Stack Atom POE S3 (W5500), 11 = Custom LAN module, 12 = LilyGO T-ETH ELite, 13 = Waveshare ESP32-S3-ETH / ESP32-S3-ETH-POE, 14 = LilyGO T-ETH-Lite-ESP32S3 + +## Serial commands + +The serial interface supports a few commands in addition to receiving the configuration: + +- uptime: Prints the uptime in seconds +- printerror: Prints the last error code returned from deserializing the configuration +- printcfgstr: Prints the raw configuration string received via the serial interface +- printcfg: Prints the deserialized configuration that is stored in RAM \ No newline at end of file diff --git a/scripts/sendcfg/example_configurations/m5stack-w5500.json b/scripts/sendcfg/example_configurations/m5stack-w5500.json new file mode 100644 index 0000000..6693d7f --- /dev/null +++ b/scripts/sendcfg/example_configurations/m5stack-w5500.json @@ -0,0 +1,4 @@ +{ + "hostname": "nuki-atom-w5500", + "nwhw": "3" +} \ No newline at end of file diff --git a/scripts/sendcfg/example_configurations/wifi.json b/scripts/sendcfg/example_configurations/wifi.json new file mode 100644 index 0000000..b650792 --- /dev/null +++ b/scripts/sendcfg/example_configurations/wifi.json @@ -0,0 +1,5 @@ +{ + "hostname": "nuki-123456", + "wifiSSID": "YOUR_SSID", + "wifiPass": "YOUR_WIFI_PRESHARED_KEY" +} \ No newline at end of file diff --git a/scripts/sendcfg/example_configurations/wifi_static_ip.json b/scripts/sendcfg/example_configurations/wifi_static_ip.json new file mode 100644 index 0000000..8596f70 --- /dev/null +++ b/scripts/sendcfg/example_configurations/wifi_static_ip.json @@ -0,0 +1,12 @@ +{ + "dhcpena": "0", + "hostname": "nuki-static", + "mqttbroker": "192.168.8.100", + "mqttpath": "nuki-1234", + "ipaddr" : "192.168.8.25", + "ipsub" : "255.255.255.0", + "ipgtw" : "192.168.8.1", + "dnssrv" : "1.1.1.1", + "wifiSSID": "YOUR_SSID", + "wifiPass": "YOUR_WIFI_PRESHARED_KEY" +} \ No newline at end of file diff --git a/scripts/sendcfg/sendcfg.py b/scripts/sendcfg/sendcfg.py new file mode 100644 index 0000000..a6206a0 --- /dev/null +++ b/scripts/sendcfg/sendcfg.py @@ -0,0 +1,57 @@ +import serial +import time +import sys +import os + +def send_configuration(file_path, port, baudrate=9600, delay=0.1): + try: + # Open serial port + with serial.Serial(port, baudrate, timeout=1) as ser: + print(f"Opened serial port {port} at {baudrate} baud.") + + ser.write("-- NUKI HUB CONFIG START --\n".encode('utf-8')) + + # Read configuration file and send line by line + with open(file_path, 'r') as file: + for line in file: + ser.write(line.encode('utf-8')) # Send line + ser.write("\n".encode('utf-8')) # Send new line + print(f"Sent: {line.strip()}") + time.sleep(delay) # Optional delay between lines + + ser.write("-- NUKI HUB CONFIG END --\n".encode('utf-8')) + time.sleep(delay) + print("Configuration sent.") + + # persist previously sent configuration + ser.write("savecfg\n".encode('utf-8')) + time.sleep(delay) + print("Configuration saved.") + + # restart ESP + ser.write("reset\n".encode('utf-8')) + print("ESP restarted.") + time.sleep(1) + + except serial.SerialException as e: + print(f"Serial error: {e}") + except FileNotFoundError: + print(f"File not found: {file_path}") + except Exception as e: + print(f"Unexpected error: {e}") + +if __name__ == "__main__": + + if(len(sys.argv) < 2): + print("Usage: sendcfg.py ") + sys.exit(1) + + config_file = sys.argv[2] + if(not os.path.isfile(config_file)): + print(f"File not found: {config_file}") + sys.exit(2) + + serial_port = sys.argv[1] + baud_rate = 115200 + + send_configuration(config_file, serial_port, baud_rate) diff --git a/src/Config.h b/src/Config.h index 95d5acd..9b19b18 100644 --- a/src/Config.h +++ b/src/Config.h @@ -5,7 +5,7 @@ #define NUKI_HUB_VERSION "9.11" #define NUKI_HUB_VERSION_INT (uint32_t)911 #define NUKI_HUB_BUILD "unknownbuildnr" -#define NUKI_HUB_DATE "2025-04-06" +#define NUKI_HUB_DATE "2025-04-19" #define GITHUB_LATEST_RELEASE_URL (char*)"https://github.com/technyon/nuki_hub/releases/latest" #define GITHUB_OTA_MANIFEST_URL (char*)"https://raw.githubusercontent.com/technyon/nuki_hub/binary/ota/manifest.json" diff --git a/src/RestartReason.h b/src/RestartReason.h index f992615..cba9a4a 100644 --- a/src/RestartReason.h +++ b/src/RestartReason.h @@ -4,6 +4,7 @@ enum class RestartReason { RequestedViaMqtt, RequestedViaWebServer, + RequestedViaSerial, BLEError, BLEBeaconWatchdog, RestartOnDisconnectWatchdog, @@ -72,6 +73,8 @@ inline static String getRestartReason() return "RequestedViaMqtt"; case RestartReason::RequestedViaWebServer: return "RequestedViaWebServer"; + case RestartReason::RequestedViaSerial: + return "RequestedViaSerial"; case RestartReason::ReconfigureWebServer: return "ReconfigureWebServer"; case RestartReason::BLEError: diff --git a/src/SerialReader.cpp b/src/SerialReader.cpp new file mode 100644 index 0000000..ac949bd --- /dev/null +++ b/src/SerialReader.cpp @@ -0,0 +1,86 @@ +#include "SerialReader.h" +#include "RestartReason.h" +#include "EspMillis.h" + +SerialReader::SerialReader(ImportExport *importExport, NukiNetwork* network) +: _importExport(importExport), + _network(network) +{ +} + + +void SerialReader::update() +{ + if(Serial.available()) + { + String line = Serial.readStringUntil('\n'); +// Serial.println(line); + + int64_t ts = espMillis(); + + if(ts - _lastCommandTs > 3000) + { + _receivingConfig = false; + } + _lastCommandTs = ts; + + + if(line == "reset") + { + restartEsp(RestartReason::RequestedViaSerial); + } + + if(line == "uptime") + { + Serial.print("Uptime (seconds): "); + Serial.println(espMillis() / 1000); + } + + if(line == "printerror") + { + Serial.println(_deserializationError); + } + + if(line == "printcfgstr") + { + Serial.println(); + Serial.println(config); + Serial.println(); + } + + if(line == "printcfg") + { + Serial.println(); + serializeJsonPretty(json, Serial); + Serial.println(); + } + + if(line == "savecfg") + { + _importExport->importJson(json); + Serial.println("Configuration saved"); + } + + if(line == "-- NUKI HUB CONFIG END --") + { + Serial.println("Receive config end"); + _receivingConfig = false; + json.clear(); + DeserializationError error = deserializeJson(json, config); + _deserializationError = (int)error.code(); + } + + if(_receivingConfig) + { + config = config + line; + } + + if(line == "-- NUKI HUB CONFIG START --") + { + Serial.println("Receive config start"); + config = ""; + _receivingConfig = true; + } + } +} + diff --git a/src/SerialReader.h b/src/SerialReader.h new file mode 100644 index 0000000..a70eef9 --- /dev/null +++ b/src/SerialReader.h @@ -0,0 +1,24 @@ +#pragma once + +#include "Arduino.h" +#include "ImportExport.h" +#include "NukiNetwork.h" +#include + +class SerialReader +{ +public: + explicit SerialReader(ImportExport* importExport, NukiNetwork* network); + + void update(); + +private: + String config = ""; + JsonDocument json; + bool _receivingConfig = false; + int64_t _lastCommandTs = 0; + int _deserializationError = -1; + + ImportExport* _importExport = nullptr; + NukiNetwork* _network = nullptr; +}; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 3bc5efd..ae1692e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -20,6 +20,7 @@ #endif #ifndef NUKI_HUB_UPDATER +#include "SerialReader.h" #include "NukiWrapper.h" #include "NukiNetworkLock.h" #include "NukiOpenerWrapper.h" @@ -50,6 +51,7 @@ NukiOpenerWrapper* nukiOpener = nullptr; NukiDeviceId* deviceIdLock = nullptr; NukiDeviceId* deviceIdOpener = nullptr; Gpio* gpio = nullptr; +SerialReader* serialReader = nullptr; bool lockEnabled = false; bool openerEnabled = false; @@ -250,6 +252,12 @@ void networkTask(void *pvParameters) } } +#ifndef NUKI_HUB_UPDATER + if(serialReader != nullptr) + { + serialReader->update(); + } +#endif network->update(); bool connected = network->isConnected(); @@ -877,6 +885,9 @@ void setup() doOta = false; lockEnabled = false; openerEnabled = false; +#ifndef NUKI_HUB_UPDATER + serialReader = new SerialReader(importExport, network); +#endif } if(lockEnabled || openerEnabled) diff --git a/src/util/NetworkDeviceInstantiator.cpp b/src/util/NetworkDeviceInstantiator.cpp index d57b6ec..05ef8c0 100644 --- a/src/util/NetworkDeviceInstantiator.cpp +++ b/src/util/NetworkDeviceInstantiator.cpp @@ -14,181 +14,181 @@ NetworkDevice *NetworkDeviceInstantiator::Create(NetworkDeviceType networkDevice switch (networkDeviceType) { - case NetworkDeviceType::W5500: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "Generic W5500", - ETH_PHY_ADDR_W5500, - ETH_PHY_CS_GENERIC_W5500, - ETH_PHY_IRQ_GENERIC_W5500, - ETH_PHY_RST_GENERIC_W5500, - ETH_PHY_SPI_SCK_GENERIC_W5500, - ETH_PHY_SPI_MISO_GENERIC_W5500, - ETH_PHY_SPI_MOSI_GENERIC_W5500, - ETH_PHY_W5500); - break; - case NetworkDeviceType::W5500M5: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "M5Stack Atom POE", - ETH_PHY_ADDR_W5500, - ETH_PHY_CS_M5_W5500, - ETH_PHY_IRQ_M5_W5500, - ETH_PHY_RST_M5_W5500, - ETH_PHY_SPI_SCK_M5_W5500, - ETH_PHY_SPI_MISO_M5_W5500, - ETH_PHY_SPI_MOSI_M5_W5500, - ETH_PHY_W5500); - break; - case NetworkDeviceType::W5500M5S3: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "M5Stack Atom POE S3", - ETH_PHY_ADDR_W5500, - ETH_PHY_CS_M5_W5500_S3, - ETH_PHY_IRQ_M5_W5500, - ETH_PHY_RST_M5_W5500, - ETH_PHY_SPI_SCK_M5_W5500_S3, - ETH_PHY_SPI_MISO_M5_W5500_S3, - ETH_PHY_SPI_MOSI_M5_W5500_S3, - ETH_PHY_W5500); - break; - case NetworkDeviceType::Waveshare_ESP32_S3_ETH: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "Waveshare ESP32-S3-ETH / ESP32-S3-ETH-POE", - ETH_ADDR_WAVESHARE_ESP32_S3_ETH, - ETH_PHY_SPI_CS_WAVESHARE_ESP32_S3_ETH, - ETH_PHY_SPI_IRQ_WAVESHARE_ESP32_S3_ETH, - ETH_PHY_SPI_RST_WAVESHARE_ESP32_S3_ETH, - ETH_PHY_SPI_SCK_WAVESHARE_ESP32_S3_ETH, - ETH_PHY_SPI_MISO_WAVESHARE_ESP32_S3_ETH, - ETH_PHY_SPI_MOSI_WAVESHARE_ESP32_S3_ETH, - ETH_PHY_W5500); - break; - case NetworkDeviceType::ETH01_Evo: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "ETH01-Evo", - ETH_PHY_ADDR_ETH01EVO, - ETH_PHY_CS_ETH01EVO, - ETH_PHY_IRQ_ETH01EVO, - ETH_PHY_RST_ETH01EVO, - ETH_PHY_SPI_SCK_ETH01EVO, - ETH_PHY_SPI_MISO_ETH01EVO, - ETH_PHY_SPI_MOSI_ETH01EVO, - ETH_PHY_TYPE_DM9051); - break; - case NetworkDeviceType::LilyGO_T_ETH_ELite: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "LilyGO T-ETH ELite", - ETH_PHY_ADDR_W5500, - ETH_PHY_CS_ELITE_W5500, - ETH_PHY_IRQ_ELITE_W5500, - ETH_PHY_RST_ELITE_W5500, - ETH_PHY_SPI_SCK_ELITE_W5500, - ETH_PHY_SPI_MISO_ELITE_W5500, - ETH_PHY_SPI_MOSI_ELITE_W5500, - ETH_PHY_W5500); - break; - case NetworkDeviceType::LilyGO_T_ETH_Lite_S3: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "LilyGO T-ETH-Lite-ESP32S3", - ETH_PHY_ADDR_W5500, - ETH_PHY_CS_ETHLITES3_W5500, - ETH_PHY_IRQ_ETHLITES3_W5500, - ETH_PHY_RST_ETHLITES3_W5500, - ETH_PHY_SPI_SCK_ETHLITES3_W5500, - ETH_PHY_SPI_MISO_ETHLITES3_W5500, - ETH_PHY_SPI_MOSI_ETHLITES3_W5500, - ETH_PHY_W5500); - break; + case NetworkDeviceType::W5500: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "Generic W5500", + ETH_PHY_ADDR_W5500, + ETH_PHY_CS_GENERIC_W5500, + ETH_PHY_IRQ_GENERIC_W5500, + ETH_PHY_RST_GENERIC_W5500, + ETH_PHY_SPI_SCK_GENERIC_W5500, + ETH_PHY_SPI_MISO_GENERIC_W5500, + ETH_PHY_SPI_MOSI_GENERIC_W5500, + ETH_PHY_W5500); + break; + case NetworkDeviceType::W5500M5: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "M5Stack Atom POE", + ETH_PHY_ADDR_W5500, + ETH_PHY_CS_M5_W5500, + ETH_PHY_IRQ_M5_W5500, + ETH_PHY_RST_M5_W5500, + ETH_PHY_SPI_SCK_M5_W5500, + ETH_PHY_SPI_MISO_M5_W5500, + ETH_PHY_SPI_MOSI_M5_W5500, + ETH_PHY_W5500); + break; + case NetworkDeviceType::W5500M5S3: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "M5Stack Atom POE S3", + ETH_PHY_ADDR_W5500, + ETH_PHY_CS_M5_W5500_S3, + ETH_PHY_IRQ_M5_W5500, + ETH_PHY_RST_M5_W5500, + ETH_PHY_SPI_SCK_M5_W5500_S3, + ETH_PHY_SPI_MISO_M5_W5500_S3, + ETH_PHY_SPI_MOSI_M5_W5500_S3, + ETH_PHY_W5500); + break; + case NetworkDeviceType::Waveshare_ESP32_S3_ETH: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "Waveshare ESP32-S3-ETH / ESP32-S3-ETH-POE", + ETH_ADDR_WAVESHARE_ESP32_S3_ETH, + ETH_PHY_SPI_CS_WAVESHARE_ESP32_S3_ETH, + ETH_PHY_SPI_IRQ_WAVESHARE_ESP32_S3_ETH, + ETH_PHY_SPI_RST_WAVESHARE_ESP32_S3_ETH, + ETH_PHY_SPI_SCK_WAVESHARE_ESP32_S3_ETH, + ETH_PHY_SPI_MISO_WAVESHARE_ESP32_S3_ETH, + ETH_PHY_SPI_MOSI_WAVESHARE_ESP32_S3_ETH, + ETH_PHY_W5500); + break; + case NetworkDeviceType::ETH01_Evo: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "ETH01-Evo", + ETH_PHY_ADDR_ETH01EVO, + ETH_PHY_CS_ETH01EVO, + ETH_PHY_IRQ_ETH01EVO, + ETH_PHY_RST_ETH01EVO, + ETH_PHY_SPI_SCK_ETH01EVO, + ETH_PHY_SPI_MISO_ETH01EVO, + ETH_PHY_SPI_MOSI_ETH01EVO, + ETH_PHY_TYPE_DM9051); + break; + case NetworkDeviceType::LilyGO_T_ETH_ELite: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "LilyGO T-ETH ELite", + ETH_PHY_ADDR_W5500, + ETH_PHY_CS_ELITE_W5500, + ETH_PHY_IRQ_ELITE_W5500, + ETH_PHY_RST_ELITE_W5500, + ETH_PHY_SPI_SCK_ELITE_W5500, + ETH_PHY_SPI_MISO_ELITE_W5500, + ETH_PHY_SPI_MOSI_ELITE_W5500, + ETH_PHY_W5500); + break; + case NetworkDeviceType::LilyGO_T_ETH_Lite_S3: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "LilyGO T-ETH-Lite-ESP32S3", + ETH_PHY_ADDR_W5500, + ETH_PHY_CS_ETHLITES3_W5500, + ETH_PHY_IRQ_ETHLITES3_W5500, + ETH_PHY_RST_ETHLITES3_W5500, + ETH_PHY_SPI_SCK_ETHLITES3_W5500, + ETH_PHY_SPI_MISO_ETHLITES3_W5500, + ETH_PHY_SPI_MOSI_ETHLITES3_W5500, + ETH_PHY_W5500); + break; - case NetworkDeviceType::CUSTOM: - { - int custPHY = preferences->getInt(preference_network_custom_phy, 0); - - if(custPHY >= 1 && custPHY <= 3) + case NetworkDeviceType::CUSTOM: { - std::string custName; - eth_phy_type_t custEthtype; + int custPHY = preferences->getInt(preference_network_custom_phy, 0); - switch(custPHY) + if(custPHY >= 1 && custPHY <= 3) { - case 1: - custName = "Custom (W5500)"; - custEthtype = ETH_PHY_W5500; - break; - case 2: - custName = "Custom (DN9051)"; - custEthtype = ETH_PHY_DM9051; - break; - case 3: - custName = "Custom (KSZ8851SNL)"; - custEthtype = ETH_PHY_KSZ8851; - break; - default: - custName = "Custom (W5500)"; - custEthtype = ETH_PHY_W5500; - break; + std::string custName; + eth_phy_type_t custEthtype; + + switch(custPHY) + { + case 1: + custName = "Custom (W5500)"; + custEthtype = ETH_PHY_W5500; + break; + case 2: + custName = "Custom (DN9051)"; + custEthtype = ETH_PHY_DM9051; + break; + case 3: + custName = "Custom (KSZ8851SNL)"; + custEthtype = ETH_PHY_KSZ8851; + break; + default: + custName = "Custom (W5500)"; + custEthtype = ETH_PHY_W5500; + break; + } + + device = new EthernetDevice(hostname, preferences, ipConfiguration, custName, + preferences->getInt(preference_network_custom_addr, -1), + preferences->getInt(preference_network_custom_cs, -1), + preferences->getInt(preference_network_custom_irq, -1), + preferences->getInt(preference_network_custom_rst, -1), + preferences->getInt(preference_network_custom_sck, -1), + preferences->getInt(preference_network_custom_miso, -1), + preferences->getInt(preference_network_custom_mosi, -1), + custEthtype); } - - device = new EthernetDevice(hostname, preferences, ipConfiguration, custName, - preferences->getInt(preference_network_custom_addr, -1), - preferences->getInt(preference_network_custom_cs, -1), - preferences->getInt(preference_network_custom_irq, -1), - preferences->getInt(preference_network_custom_rst, -1), - preferences->getInt(preference_network_custom_sck, -1), - preferences->getInt(preference_network_custom_miso, -1), - preferences->getInt(preference_network_custom_mosi, -1), - custEthtype); - } #if defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32P4) - else if(custPHY >= 4 && custPHY <= 9) - { - int custCLKpref = preferences->getInt(preference_network_custom_clk, 0); + else if(custPHY >= 4 && custPHY <= 9) + { + int custCLKpref = preferences->getInt(preference_network_custom_clk, 0); - std::string custName = NetworkUtil::GetCustomEthernetDeviceName(custPHY); - eth_phy_type_t custEthtype = NetworkUtil::GetCustomEthernetType(custPHY); - eth_clock_mode_t custCLK = NetworkUtil::GetCustomClock(custCLKpref); + std::string custName = NetworkUtil::GetCustomEthernetDeviceName(custPHY); + eth_phy_type_t custEthtype = NetworkUtil::GetCustomEthernetType(custPHY); + eth_clock_mode_t custCLK = NetworkUtil::GetCustomClock(custCLKpref); - device = new EthernetDevice(hostname, preferences, ipConfiguration, custName, - preferences->getInt(preference_network_custom_addr, -1), - preferences->getInt(preference_network_custom_pwr, -1), - preferences->getInt(preference_network_custom_mdc, -1), - preferences->getInt(preference_network_custom_mdio, -1), - custEthtype, - custCLK); - } + device = new EthernetDevice(hostname, preferences, ipConfiguration, custName, + preferences->getInt(preference_network_custom_addr, -1), + preferences->getInt(preference_network_custom_pwr, -1), + preferences->getInt(preference_network_custom_mdc, -1), + preferences->getInt(preference_network_custom_mdio, -1), + custEthtype, + custCLK); + } #endif #ifndef CONFIG_IDF_TARGET_ESP32H2 - else - { - device = new WifiDevice(hostname, preferences, ipConfiguration); - } + else + { + device = new WifiDevice(hostname, preferences, ipConfiguration); + } #endif - } - break; + } + break; #if defined(CONFIG_IDF_TARGET_ESP32) - case NetworkDeviceType::M5STACK_PoESP32_Unit: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "M5STACK PoESP32 Unit", - ETH_PHY_ADDR_M5_POESP32, - ETH_PHY_POWER_M5_POESP32, - ETH_PHY_MDC_M5_POESP32, - ETH_PHY_MDIO_M5_POESP32, - ETH_CLK_MODE_M5_TYPE, - ETH_CLK_MODE_M5_POESP32); - break; - case NetworkDeviceType::Olimex_LAN8720: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "Olimex (LAN8720)", ETH_PHY_ADDR_LAN8720, 12, ETH_PHY_MDC_LAN8720, ETH_PHY_MDIO_LAN8720, ETH_PHY_TYPE_LAN8720, ETH_CLOCK_GPIO17_OUT); - break; - case NetworkDeviceType::WT32_LAN8720: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "WT32-ETH01", 1, 16); - break; - case NetworkDeviceType::GL_S10: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "GL-S10", 1, 5, ETH_PHY_MDC_LAN8720, ETH_PHY_MDIO_LAN8720, ETH_PHY_IP101, ETH_CLOCK_GPIO0_IN); - break; - case NetworkDeviceType::LilyGO_T_ETH_POE: - device = new EthernetDevice(hostname, preferences, ipConfiguration, "LilyGO T-ETH-POE", 0, -1, ETH_PHY_MDC_LAN8720, ETH_PHY_MDIO_LAN8720, ETH_PHY_TYPE_LAN8720, ETH_CLOCK_GPIO17_OUT); - break; + case NetworkDeviceType::M5STACK_PoESP32_Unit: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "M5STACK PoESP32 Unit", + ETH_PHY_ADDR_M5_POESP32, + ETH_PHY_POWER_M5_POESP32, + ETH_PHY_MDC_M5_POESP32, + ETH_PHY_MDIO_M5_POESP32, + ETH_CLK_MODE_M5_TYPE, + ETH_CLK_MODE_M5_POESP32); + break; + case NetworkDeviceType::Olimex_LAN8720: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "Olimex (LAN8720)", ETH_PHY_ADDR_LAN8720, 12, ETH_PHY_MDC_LAN8720, ETH_PHY_MDIO_LAN8720, ETH_PHY_TYPE_LAN8720, ETH_CLOCK_GPIO17_OUT); + break; + case NetworkDeviceType::WT32_LAN8720: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "WT32-ETH01", 1, 16); + break; + case NetworkDeviceType::GL_S10: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "GL-S10", 1, 5, ETH_PHY_MDC_LAN8720, ETH_PHY_MDIO_LAN8720, ETH_PHY_IP101, ETH_CLOCK_GPIO0_IN); + break; + case NetworkDeviceType::LilyGO_T_ETH_POE: + device = new EthernetDevice(hostname, preferences, ipConfiguration, "LilyGO T-ETH-POE", 0, -1, ETH_PHY_MDC_LAN8720, ETH_PHY_MDIO_LAN8720, ETH_PHY_TYPE_LAN8720, ETH_CLOCK_GPIO17_OUT); + break; #endif #ifndef CONFIG_IDF_TARGET_ESP32H2 - case NetworkDeviceType::WiFi: - device = new WifiDevice(hostname, preferences, ipConfiguration); - break; - default: - device = new WifiDevice(hostname, preferences, ipConfiguration); - break; + case NetworkDeviceType::WiFi: + device = new WifiDevice(hostname, preferences, ipConfiguration); + break; + default: + device = new WifiDevice(hostname, preferences, ipConfiguration); + break; #else - default: + default: device = new EthernetDevice(hostname, preferences, ipConfiguration, "Custom (W5500)", preferences->getInt(preference_network_custom_addr, -1), preferences->getInt(preference_network_custom_cs, -1), From de78b651c30860bbab9ee93ac0f42ca995947479 Mon Sep 17 00:00:00 2001 From: technyon Date: Mon, 5 May 2025 05:43:16 +0200 Subject: [PATCH 7/7] increase maximum MQTT password length to 40 --- src/NukiNetwork.cpp | 1 - src/NukiNetwork.h | 2 +- src/WebCfgServer.cpp | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/NukiNetwork.cpp b/src/NukiNetwork.cpp index 480b150..879ebf4 100644 --- a/src/NukiNetwork.cpp +++ b/src/NukiNetwork.cpp @@ -311,7 +311,6 @@ void NukiNetwork::initialize() for(int i=0; i < len; i++) { _mqttPass[i] = mqttPass.charAt(i); - } } diff --git a/src/NukiNetwork.h b/src/NukiNetwork.h index 860c279..8fde0e7 100644 --- a/src/NukiNetwork.h +++ b/src/NukiNetwork.h @@ -144,7 +144,7 @@ private: int64_t _nextReconnect = 0; char _mqttBrokerAddr[101] = {0}; char _mqttUser[31] = {0}; - char _mqttPass[31] = {0}; + char _mqttPass[41] = {0}; char _maintenancePathPrefix[181] = {0}; int _networkTimeout = 0; std::vector _mqttReceivers; diff --git a/src/WebCfgServer.cpp b/src/WebCfgServer.cpp index e08b052..274b6f0 100644 --- a/src/WebCfgServer.cpp +++ b/src/WebCfgServer.cpp @@ -5149,7 +5149,7 @@ esp_err_t WebCfgServer::buildMqttConfigHtml(PsychicRequest *request, PsychicResp printInputField(&response, "MQTTSERVER", "MQTT Broker", _preferences->getString(preference_mqtt_broker).c_str(), 100, ""); printInputField(&response, "MQTTPORT", "MQTT Broker port", _preferences->getInt(preference_mqtt_broker_port), 5, ""); printInputField(&response, "MQTTUSER", "MQTT User (# to clear)", _preferences->getString(preference_mqtt_user).c_str(), 30, "", false, true); - printInputField(&response, "MQTTPASS", "MQTT Password", "*", 30, "", true, true); + printInputField(&response, "MQTTPASS", "MQTT Password", "*", 40, "", true, true); printInputField(&response, "MQTTPATH", "MQTT Nuki Hub Path", _preferences->getString(preference_mqtt_lock_path).c_str(), 180, ""); printCheckBox(&response, "ENHADISC", "Enable Home Assistant auto discovery", _preferences->getBool(preference_mqtt_hass_enabled), "chkHass"); response.print("
");