From 4e0520b2b56556b275203ca8e9e0a20e79e0e967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=9E=E9=B1=BC?= <870027381@qq.com> Date: Wed, 20 Oct 2021 20:43:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=83=E7=94=A8Cocoapods,=20=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81SPM=E3=80=82SwiftUI=20Hello=20world!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cim-client-sdk/cim-swift-sdk/.gitignore | 40 +- cim-client-sdk/cim-swift-sdk/.travis.yml | 14 - .../cim-swift-sdk/CIMClient/.gitignore | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../cim-swift-sdk/CIMClient/Package.swift | 39 + .../cim-swift-sdk/CIMClient/README.md | 3 + .../CIMClient}/Coder/WebMessageDecoder.swift | 6 +- .../CIMClient}/Coder/WebMessageEncoder.swift | 2 +- .../CIMClient}/Constant/CIMError.swift | 0 .../CIMClient}/Constant/Constant.swift | 12 +- .../Sources/CIMClient}/Core/CIMClient.swift | 10 +- .../CIMClient/Core/MessageSender.swift | 42 + .../CIMClient}/Core/WebsocketClient.swift | 0 .../Sources/CIMClient/DB/CIMDBManager.swift | 46 + .../Sources/CIMClient/DB/MessageDB.swift | 58 + .../CIMClient}/Extension/Date+Extension.swift | 0 .../AutoReConnectInterceptor.swift | 44 + .../MessageInterceptor/ConnectListener.swift | 0 .../MessageInterceptor/HeartInterceptor.swift | 0 .../MessageDatabaseInterceptor.swift | 58 + .../MessageInterceptor.swift | 0 .../MessageInterceptor/MessageListener.swift | 0 .../MessageLogInterceptor.swift | 0 .../Sources/CIMClient}/Model/Account.swift | 6 +- .../Sources/CIMClient}/Model/Message.swift | 20 +- .../CIMClient/Model/MessageBuilder.swift | 131 + .../Sources/CIMClient}/Model/Ping.swift | 0 .../Sources/CIMClient}/Model/Pong.swift | 0 .../Sources/CIMClient}/Model/ReplyBody.swift | 0 .../Sources/CIMClient}/Model/SentBody.swift | 0 .../CIMClient}/Model/Transportable.swift | 0 .../Model/proto/MessageProto.pb.swift | 0 .../Model/proto/ReplyBodyProto.pb.swift | 0 .../Model/proto/SentBodyProto.pb.swift | 0 .../Tests/CIMClientTests/CIMClientTests.swift | 11 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 148 + .../Demo/Shared/Assets.xcassets/Contents.json | 6 + .../avatar.imageset/Contents.json | 21 + .../avatar.imageset/avatar.jpg | Bin 0 -> 11781 bytes .../cim-swift-sdk/Demo/Shared/CIMAppApp.swift | 18 + .../Demo/Shared/ContentView.swift | 22 + .../cimsdk => Demo/Shared}/IMClient.swift | 7 +- .../Demo/macOS/ContentView.swift | 20 + .../cim-swift-sdk/Demo/macOS/Extension.swift | 40 + .../Demo/macOS/Model/Session.swift | 21 + .../cim-swift-sdk/Demo/macOS/Model/User.swift | 14 + .../Demo/macOS/View/AllChatsView.swift | 64 + .../Demo/macOS/View/BlurView.swift | 22 + .../Demo/macOS/View/DetailView.swift | 299 ++ .../cim-swift-sdk/Demo/macOS/View/Home.swift | 58 + .../Demo/macOS/View/RecentCardView.swift | 50 + .../Demo/macOS/View/TabButton.swift | 38 + .../Demo/macOS/ViewModel/HomeViewModel.swift | 119 + .../Demo/macOS/macOS.entitlements | 14 + cim-client-sdk/cim-swift-sdk/Example/Podfile | 13 - .../cim-swift-sdk/Example/Podfile.lock | 27 - .../Pods/Local Podspecs/cimsdk.podspec.json | 30 - .../cim-swift-sdk/Example/Pods/Manifest.lock | 27 - .../Pods/Pods.xcodeproj/project.pbxproj | 1743 -------- .../Example/Pods/Starscream/LICENSE | 176 - .../Example/Pods/Starscream/README.md | 308 -- .../Sources/Compression/Compression.swift | 29 - .../Sources/Compression/WSCompression.swift | 247 -- .../Sources/DataBytes/Data+Extensions.swift | 53 - .../Starscream/Sources/Engine/Engine.swift | 22 - .../Sources/Engine/NativeEngine.swift | 96 - .../Starscream/Sources/Engine/WSEngine.swift | 234 - .../Framer/FoundationHTTPHandler.swift | 123 - .../Framer/FoundationHTTPServerHandler.swift | 99 - .../Sources/Framer/FrameCollector.swift | 107 - .../Starscream/Sources/Framer/Framer.swift | 365 -- .../Sources/Framer/HTTPHandler.swift | 148 - .../Sources/Framer/StringHTTPHandler.swift | 143 - .../Sources/Security/FoundationSecurity.swift | 101 - .../Sources/Security/Security.swift | 45 - .../Starscream/Sources/Server/Server.swift | 56 - .../Sources/Server/WebSocketServer.swift | 196 - .../Sources/Starscream/WebSocket.swift | 178 - .../Transport/FoundationTransport.swift | 218 - .../Sources/Transport/TCPTransport.swift | 159 - .../Sources/Transport/Transport.swift | 55 - .../Example/Pods/SwiftProtobuf/LICENSE.txt | 211 - .../Example/Pods/SwiftProtobuf/README.md | 303 -- .../SwiftProtobuf/AnyMessageStorage.swift | 476 -- .../SwiftProtobuf/AnyUnpackError.swift | 37 - .../Sources/SwiftProtobuf/BinaryDecoder.swift | 1493 ------- .../SwiftProtobuf/BinaryDecodingError.swift | 44 - .../SwiftProtobuf/BinaryDecodingOptions.swift | 39 - .../SwiftProtobuf/BinaryDelimited.swift | 232 - .../Sources/SwiftProtobuf/BinaryEncoder.swift | 155 - .../SwiftProtobuf/BinaryEncodingError.swift | 27 - .../BinaryEncodingSizeVisitor.swift | 473 -- .../SwiftProtobuf/BinaryEncodingVisitor.swift | 355 -- .../SwiftProtobuf/CustomJSONCodable.swift | 36 - .../SwiftProtobuf/Data+Extensions.swift | 34 - .../Sources/SwiftProtobuf/Decoder.swift | 150 - .../Sources/SwiftProtobuf/DoubleParser.swift | 61 - .../Sources/SwiftProtobuf/Enum.swift | 93 - .../SwiftProtobuf/ExtensibleMessage.swift | 73 - .../ExtensionFieldValueSet.swift | 95 - .../SwiftProtobuf/ExtensionFields.swift | 708 --- .../Sources/SwiftProtobuf/ExtensionMap.swift | 38 - .../Sources/SwiftProtobuf/FieldTag.swift | 69 - .../Sources/SwiftProtobuf/FieldTypes.swift | 431 -- .../Google_Protobuf_Any+Extensions.swift | 174 - .../Google_Protobuf_Any+Registry.swift | 137 - .../Google_Protobuf_Duration+Extensions.swift | 226 - ...Google_Protobuf_FieldMask+Extensions.swift | 163 - ...Google_Protobuf_ListValue+Extensions.swift | 80 - ...Google_Protobuf_NullValue+Extensions.swift | 28 - .../Google_Protobuf_Struct+Extensions.swift | 85 - ...Google_Protobuf_Timestamp+Extensions.swift | 329 -- .../Google_Protobuf_Value+Extensions.swift | 163 - .../Google_Protobuf_Wrappers+Extensions.swift | 247 -- .../Sources/SwiftProtobuf/HashVisitor.swift | 426 -- .../Sources/SwiftProtobuf/Internal.swift | 51 - .../Sources/SwiftProtobuf/JSONDecoder.swift | 735 ---- .../SwiftProtobuf/JSONDecodingError.swift | 62 - .../SwiftProtobuf/JSONDecodingOptions.swift | 29 - .../Sources/SwiftProtobuf/JSONEncoder.swift | 386 -- .../SwiftProtobuf/JSONEncodingError.swift | 35 - .../SwiftProtobuf/JSONEncodingOptions.swift | 26 - .../SwiftProtobuf/JSONEncodingVisitor.swift | 404 -- .../JSONMapEncodingVisitor.swift | 174 - .../Sources/SwiftProtobuf/JSONScanner.swift | 1518 ------- .../Sources/SwiftProtobuf/MathUtils.swift | 40 - .../SwiftProtobuf/Message+AnyAdditions.swift | 45 - .../Message+BinaryAdditions.swift | 204 - .../SwiftProtobuf/Message+JSONAdditions.swift | 150 - .../Message+JSONArrayAdditions.swift | 146 - .../Message+TextFormatAdditions.swift | 111 - .../Sources/SwiftProtobuf/Message.swift | 216 - .../SwiftProtobuf/MessageExtension.swift | 41 - .../Sources/SwiftProtobuf/NameMap.swift | 310 -- .../SwiftProtobuf/ProtoNameProviding.swift | 23 - .../ProtobufAPIVersionCheck.swift | 43 - .../Sources/SwiftProtobuf/ProtobufMap.swift | 39 - .../SwiftProtobuf/SelectiveVisitor.swift | 268 -- .../SwiftProtobuf/SimpleExtensionMap.swift | 112 - .../Sources/SwiftProtobuf/StringUtils.swift | 109 - .../SwiftProtobuf/TextFormatDecoder.swift | 726 ---- .../TextFormatDecodingError.swift | 42 - .../TextFormatDecodingOptions.swift | 25 - .../SwiftProtobuf/TextFormatEncoder.swift | 296 -- .../TextFormatEncodingOptions.swift | 22 - .../TextFormatEncodingVisitor.swift | 662 --- .../SwiftProtobuf/TextFormatScanner.swift | 1248 ------ .../Sources/SwiftProtobuf/TimeUtils.swift | 65 - .../SwiftProtobuf/UnknownStorage.swift | 46 - .../UnsafeBufferPointer+Shims.swift | 37 - .../UnsafeRawPointer+Shims.swift | 45 - .../Sources/SwiftProtobuf/Varint.swift | 108 - .../Sources/SwiftProtobuf/Version.swift | 28 - .../Sources/SwiftProtobuf/Visitor.swift | 725 ---- .../Sources/SwiftProtobuf/WireFormat.swift | 70 - .../Sources/SwiftProtobuf/ZigZag.swift | 66 - .../Sources/SwiftProtobuf/any.pb.swift | 241 -- .../Sources/SwiftProtobuf/api.pb.swift | 424 -- .../Sources/SwiftProtobuf/descriptor.pb.swift | 3836 ----------------- .../Sources/SwiftProtobuf/duration.pb.swift | 173 - .../Sources/SwiftProtobuf/empty.pb.swift | 92 - .../Sources/SwiftProtobuf/field_mask.pb.swift | 298 -- .../SwiftProtobuf/source_context.pb.swift | 102 - .../Sources/SwiftProtobuf/struct.pb.swift | 448 -- .../Sources/SwiftProtobuf/timestamp.pb.swift | 204 - .../Sources/SwiftProtobuf/type.pb.swift | 794 ---- .../Sources/SwiftProtobuf/wrappers.pb.swift | 496 --- .../Pods-cimsdk_Example-Info.plist | 26 - ...s-cimsdk_Example-acknowledgements.markdown | 420 -- ...Pods-cimsdk_Example-acknowledgements.plist | 464 -- .../Pods-cimsdk_Example-dummy.m | 5 - .../Pods-cimsdk_Example-frameworks.sh | 189 - .../Pods-cimsdk_Example-umbrella.h | 16 - .../Pods-cimsdk_Example.debug.xcconfig | 14 - .../Pods-cimsdk_Example.modulemap | 6 - .../Pods-cimsdk_Example.release.xcconfig | 14 - .../Pods-cimsdk_Tests-Info.plist | 26 - ...ods-cimsdk_Tests-acknowledgements.markdown | 3 - .../Pods-cimsdk_Tests-acknowledgements.plist | 29 - .../Pods-cimsdk_Tests-dummy.m | 5 - .../Pods-cimsdk_Tests-umbrella.h | 16 - .../Pods-cimsdk_Tests.debug.xcconfig | 11 - .../Pods-cimsdk_Tests.modulemap | 6 - .../Pods-cimsdk_Tests.release.xcconfig | 11 - .../Starscream/Starscream-Info.plist | 26 - .../Starscream/Starscream-dummy.m | 5 - .../Starscream/Starscream-prefix.pch | 12 - .../Starscream/Starscream-umbrella.h | 16 - .../Starscream/Starscream.debug.xcconfig | 12 - .../Starscream/Starscream.modulemap | 6 - .../Starscream/Starscream.release.xcconfig | 12 - .../SwiftProtobuf/SwiftProtobuf-Info.plist | 26 - .../SwiftProtobuf/SwiftProtobuf-dummy.m | 5 - .../SwiftProtobuf/SwiftProtobuf-prefix.pch | 12 - .../SwiftProtobuf/SwiftProtobuf-umbrella.h | 16 - .../SwiftProtobuf.debug.xcconfig | 12 - .../SwiftProtobuf/SwiftProtobuf.modulemap | 6 - .../SwiftProtobuf.release.xcconfig | 12 - .../cimsdk/cimsdk-Info.plist | 26 - .../cimsdk/cimsdk-dummy.m | 5 - .../cimsdk/cimsdk-prefix.pch | 12 - .../cimsdk/cimsdk-umbrella.h | 16 - .../cimsdk/cimsdk.debug.xcconfig | 13 - .../cimsdk/cimsdk.modulemap | 6 - .../cimsdk/cimsdk.release.xcconfig | 13 - .../cim-swift-sdk/Example/Tests/Info.plist | 24 - .../cim-swift-sdk/Example/Tests/Tests.swift | 28 - .../Example/cimsdk.xcodeproj/project.pbxproj | 593 --- .../contents.xcworkspacedata | 7 - .../xcschemes/cimsdk-Example.xcscheme | 117 - .../contents.xcworkspacedata | 10 - .../Example/cimsdk/AppDelegate.swift | 50 - .../cimsdk/Base.lproj/LaunchScreen.xib | 46 - .../Example/cimsdk/Base.lproj/Main.storyboard | 30 - .../AppIcon.appiconset/Contents.json | 53 - .../cim-swift-sdk/Example/cimsdk/Info.plist | 39 - .../Example/cimsdk/ViewController.swift | 31 - cim-client-sdk/cim-swift-sdk/LICENSE | 19 - cim-client-sdk/cim-swift-sdk/Package.swift | 41 + cim-client-sdk/cim-swift-sdk/README.md | 31 +- cim-client-sdk/cim-swift-sdk/_Pods.xcodeproj | 1 - cim-client-sdk/cim-swift-sdk/cimsdk.podspec | 44 - .../cim-swift-sdk/cimsdk/Assets/.gitkeep | 0 .../cim-swift-sdk/cimsdk/Classes/.gitkeep | 0 .../AutoReConnectInterceptor.swift | 41 - .../cimsdk/Classes/Model/MessageFactory.swift | 25 - .../cimsdk/Classes/ReplaceMe.swift | 0 .../Model => }/proto/MessageProto.proto | 0 .../Model => }/proto/ReplyBodyProto.proto | 0 .../Model => }/proto/SentBodyProto.proto | 0 .../Classes/Model => }/proto/translate.sh | 0 .../cim-swift-sdk/screenshot/macOS.png | Bin 0 -> 870311 bytes 233 files changed, 1512 insertions(+), 32074 deletions(-) delete mode 100644 cim-client-sdk/cim-swift-sdk/.travis.yml create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/.gitignore rename cim-client-sdk/cim-swift-sdk/{Example/cimsdk.xcworkspace => CIMClient/.swiftpm/xcode/package.xcworkspace}/xcshareddata/IDEWorkspaceChecks.plist (100%) create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/Package.swift create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/README.md rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Coder/WebMessageDecoder.swift (67%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Coder/WebMessageEncoder.swift (84%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Constant/CIMError.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Constant/Constant.swift (71%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Core/CIMClient.swift (88%) create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Core/MessageSender.swift rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Core/WebsocketClient.swift (100%) create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/DB/CIMDBManager.swift create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/DB/MessageDB.swift rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Extension/Date+Extension.swift (100%) create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/AutoReConnectInterceptor.swift rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/MessageInterceptor/ConnectListener.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/MessageInterceptor/HeartInterceptor.swift (100%) create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageDatabaseInterceptor.swift rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/MessageInterceptor/MessageInterceptor.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/MessageInterceptor/MessageListener.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/MessageInterceptor/MessageLogInterceptor.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/Account.swift (76%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/Message.swift (84%) create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/MessageBuilder.swift rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/Ping.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/Pong.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/ReplyBody.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/SentBody.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/Transportable.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/proto/MessageProto.pb.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/proto/ReplyBodyProto.pb.swift (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes => CIMClient/Sources/CIMClient}/Model/proto/SentBodyProto.pb.swift (100%) create mode 100644 cim-client-sdk/cim-swift-sdk/CIMClient/Tests/CIMClientTests/CIMClientTests.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/Shared/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/Shared/Assets.xcassets/Contents.json create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/Shared/Assets.xcassets/avatar.imageset/Contents.json create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/Shared/Assets.xcassets/avatar.imageset/avatar.jpg create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/Shared/CIMAppApp.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/Shared/ContentView.swift rename cim-client-sdk/cim-swift-sdk/{Example/cimsdk => Demo/Shared}/IMClient.swift (59%) create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/ContentView.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/Extension.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/Model/Session.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/Model/User.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/View/AllChatsView.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/View/BlurView.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/View/DetailView.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/View/Home.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/View/RecentCardView.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/View/TabButton.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/ViewModel/HomeViewModel.swift create mode 100644 cim-client-sdk/cim-swift-sdk/Demo/macOS/macOS.entitlements delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Podfile delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Podfile.lock delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Local Podspecs/cimsdk.podspec.json delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Manifest.lock delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Pods.xcodeproj/project.pbxproj delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/LICENSE delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/README.md delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Compression/Compression.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Compression/WSCompression.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/DataBytes/Data+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/Engine.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/NativeEngine.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/WSEngine.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/FoundationHTTPHandler.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/FoundationHTTPServerHandler.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/FrameCollector.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/Framer.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/HTTPHandler.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/StringHTTPHandler.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Security/FoundationSecurity.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Security/Security.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Server/Server.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Server/WebSocketServer.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Starscream/WebSocket.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/FoundationTransport.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/TCPTransport.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/Transport.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/LICENSE.txt delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/README.md delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/AnyMessageStorage.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/AnyUnpackError.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecoder.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecodingError.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecodingOptions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDelimited.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncoder.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingError.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingSizeVisitor.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingVisitor.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/CustomJSONCodable.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Data+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Decoder.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/DoubleParser.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Enum.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensibleMessage.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionFieldValueSet.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionFields.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionMap.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/FieldTag.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/FieldTypes.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Any+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Any+Registry.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Duration+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_FieldMask+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_ListValue+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_NullValue+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Struct+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Timestamp+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Value+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Wrappers+Extensions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/HashVisitor.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Internal.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecoder.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecodingError.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecodingOptions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncoder.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingError.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingOptions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingVisitor.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONMapEncodingVisitor.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONScanner.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/MathUtils.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+AnyAdditions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+BinaryAdditions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+JSONAdditions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+JSONArrayAdditions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+TextFormatAdditions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/MessageExtension.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/NameMap.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtoNameProviding.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtobufAPIVersionCheck.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtobufMap.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/SelectiveVisitor.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/SimpleExtensionMap.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/StringUtils.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecoder.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecodingError.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecodingOptions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatEncoder.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatEncodingOptions.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatEncodingVisitor.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatScanner.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TimeUtils.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnknownStorage.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnsafeBufferPointer+Shims.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnsafeRawPointer+Shims.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Varint.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Version.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Visitor.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/WireFormat.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ZigZag.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/any.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/api.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/descriptor.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/duration.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/empty.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/field_mask.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/source_context.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/struct.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/timestamp.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/type.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/wrappers.pb.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-Info.plist delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-acknowledgements.markdown delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-acknowledgements.plist delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-dummy.m delete mode 100755 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-frameworks.sh delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-umbrella.h delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.debug.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.modulemap delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.release.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-Info.plist delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-acknowledgements.markdown delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-acknowledgements.plist delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-dummy.m delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-umbrella.h delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.debug.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.modulemap delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.release.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-Info.plist delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-dummy.m delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-prefix.pch delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-umbrella.h delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.debug.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.modulemap delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.release.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-Info.plist delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-dummy.m delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-prefix.pch delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-umbrella.h delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.debug.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.modulemap delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.release.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-Info.plist delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-dummy.m delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-prefix.pch delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-umbrella.h delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.debug.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.modulemap delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.release.xcconfig delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Tests/Info.plist delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/Tests/Tests.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/project.pbxproj delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/xcshareddata/xcschemes/cimsdk-Example.xcscheme delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcworkspace/contents.xcworkspacedata delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk/AppDelegate.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk/Base.lproj/LaunchScreen.xib delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk/Base.lproj/Main.storyboard delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk/Info.plist delete mode 100644 cim-client-sdk/cim-swift-sdk/Example/cimsdk/ViewController.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/LICENSE create mode 100644 cim-client-sdk/cim-swift-sdk/Package.swift delete mode 120000 cim-client-sdk/cim-swift-sdk/_Pods.xcodeproj delete mode 100644 cim-client-sdk/cim-swift-sdk/cimsdk.podspec delete mode 100644 cim-client-sdk/cim-swift-sdk/cimsdk/Assets/.gitkeep delete mode 100644 cim-client-sdk/cim-swift-sdk/cimsdk/Classes/.gitkeep delete mode 100644 cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/AutoReConnectInterceptor.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/MessageFactory.swift delete mode 100644 cim-client-sdk/cim-swift-sdk/cimsdk/Classes/ReplaceMe.swift rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes/Model => }/proto/MessageProto.proto (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes/Model => }/proto/ReplyBodyProto.proto (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes/Model => }/proto/SentBodyProto.proto (100%) rename cim-client-sdk/cim-swift-sdk/{cimsdk/Classes/Model => }/proto/translate.sh (100%) create mode 100644 cim-client-sdk/cim-swift-sdk/screenshot/macOS.png diff --git a/cim-client-sdk/cim-swift-sdk/.gitignore b/cim-client-sdk/cim-swift-sdk/.gitignore index 0821b18..bb460e7 100644 --- a/cim-client-sdk/cim-swift-sdk/.gitignore +++ b/cim-client-sdk/cim-swift-sdk/.gitignore @@ -1,37 +1,7 @@ -# macOS .DS_Store - -# Xcode -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 +/.build +/Packages +/*.xcodeproj xcuserdata/ -*.xccheckout -profile -*.moved-aside -DerivedData -*.hmap -*.ipa - -# Bundler -.bundle - -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build - -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Note: if you ignore the Pods directory, make sure to uncomment -# `pod install` in .travis.yml -# -# Pods/ \ No newline at end of file +DerivedData/ +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata diff --git a/cim-client-sdk/cim-swift-sdk/.travis.yml b/cim-client-sdk/cim-swift-sdk/.travis.yml deleted file mode 100644 index 248d4af..0000000 --- a/cim-client-sdk/cim-swift-sdk/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -# references: -# * https://www.objc.io/issues/6-build-tools/travis-ci/ -# * https://github.com/supermarin/xcpretty#usage - -osx_image: xcode7.3 -language: objective-c -# cache: cocoapods -# podfile: Example/Podfile -# before_install: -# - gem install cocoapods # Since Travis is not always on latest version -# - pod install --project-directory=Example -script: -- set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/cimsdk.xcworkspace -scheme cimsdk-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty -- pod lib lint diff --git a/cim-client-sdk/cim-swift-sdk/CIMClient/.gitignore b/cim-client-sdk/cim-swift-sdk/CIMClient/.gitignore new file mode 100644 index 0000000..bb460e7 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ +DerivedData/ +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/cim-client-sdk/cim-swift-sdk/CIMClient/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to cim-client-sdk/cim-swift-sdk/CIMClient/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/cim-client-sdk/cim-swift-sdk/CIMClient/Package.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Package.swift new file mode 100644 index 0000000..a797446 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Package.swift @@ -0,0 +1,39 @@ +// swift-tools-version:5.5 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "CIMClient", + platforms: [ + .iOS(.v11), + .macOS(.v11), + ], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "CIMClient", + targets: ["CIMClient"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + .package(url: "https://github.com/daltoniam/Starscream.git", .upToNextMajor(from: "4.0.0")), + .package(url: "https://github.com/apple/swift-protobuf.git", .upToNextMajor(from: "1.6.0")), + .package(url: "https://github.com/stephencelis/SQLite.swift.git", .upToNextMajor(from: "0.13.0")), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "CIMClient", + dependencies: [ + .product(name: "Starscream", package: "Starscream"), + .product(name: "SwiftProtobuf", package: "swift-protobuf"), + .product(name: "SQLite", package: "SQLite.swift"), + ]), + .testTarget( + name: "CIMClientTests", + dependencies: ["CIMClient"]), + ] +) diff --git a/cim-client-sdk/cim-swift-sdk/CIMClient/README.md b/cim-client-sdk/cim-swift-sdk/CIMClient/README.md new file mode 100644 index 0000000..9289c2a --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/README.md @@ -0,0 +1,3 @@ +# CIMClient + +A description of this package. diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Coder/WebMessageDecoder.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Coder/WebMessageDecoder.swift similarity index 67% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Coder/WebMessageDecoder.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Coder/WebMessageDecoder.swift index cfb2976..12d9c21 100644 --- a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Coder/WebMessageDecoder.swift +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Coder/WebMessageDecoder.swift @@ -9,10 +9,10 @@ import Foundation class WebMessageDecoder { - let messageFactory = MessageFactory() - func decoder(_ data: Data) -> Transportable? { - let msg = messageFactory.transportData(data) + let msg = MessageBuilder() + .set(transportData: data) + .build() return msg } } diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Coder/WebMessageEncoder.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Coder/WebMessageEncoder.swift similarity index 84% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Coder/WebMessageEncoder.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Coder/WebMessageEncoder.swift index af9ee1c..fe4dd07 100644 --- a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Coder/WebMessageEncoder.swift +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Coder/WebMessageEncoder.swift @@ -10,7 +10,7 @@ import Foundation class WebMessageEncoder { func encoder(_ msg: Transportable) -> Data { - var data = Data(bytes: msg.type.bytes) + var data = Data(msg.type.bytes) data.append(contentsOf: msg.body) return data } diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Constant/CIMError.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Constant/CIMError.swift similarity index 100% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Constant/CIMError.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Constant/CIMError.swift diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Constant/Constant.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Constant/Constant.swift similarity index 71% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Constant/Constant.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Constant/Constant.swift index 3d7fe1f..46a60bc 100644 --- a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Constant/Constant.swift +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Constant/Constant.swift @@ -10,7 +10,7 @@ import Foundation /// 消息类型 public enum MessageType { - enum Byte: UInt8 { + public enum Key: UInt8 { case pong = 0 case ping = 1 case message = 2 @@ -26,11 +26,11 @@ public enum MessageType { var bytes: [UInt8] { switch self { - case .pong: return [Byte.pong.rawValue] - case .ping: return [Byte.ping.rawValue] - case .message: return [Byte.message.rawValue] - case .sentBody: return [Byte.sentBody.rawValue] - case .replyBody: return [Byte.replyBody.rawValue] + case .pong: return [Key.pong.rawValue] + case .ping: return [Key.ping.rawValue] + case .message: return [Key.message.rawValue] + case .sentBody: return [Key.sentBody.rawValue] + case .replyBody: return [Key.replyBody.rawValue] } } } diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Core/CIMClient.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Core/CIMClient.swift similarity index 88% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Core/CIMClient.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Core/CIMClient.swift index fedae61..7533c29 100644 --- a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Core/CIMClient.swift +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Core/CIMClient.swift @@ -9,8 +9,6 @@ import Foundation open class CIMClient { - var url: String - var wsClient: WebsocketClient var account: Account? { @@ -19,10 +17,14 @@ open class CIMClient { } } + public lazy var msgSender: MessageSender = { [unowned self] in + return MessageSenderImp(client: self) + }() + public init(url: String) { - self.url = url self.wsClient = WebsocketClient(url: URL(string: url)!) self.wsClient.appendMessageInterceptor(MessageLogInterceptor()) + self.wsClient.appendMessageInterceptor(MessageDatabaseInterceptor()) self.wsClient.appendMessageInterceptor(AutoReConnectInterceptor(client: self)) self.wsClient.appendMessageInterceptor(HeartInterceptor(client: self)) } @@ -35,7 +37,7 @@ open class CIMClient { wsClient.disconnect() } - public func sendMessage(_ message: Transportable) { + func sendMessage(_ message: Transportable) { wsClient.sendMessage(message) } diff --git a/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Core/MessageSender.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Core/MessageSender.swift new file mode 100644 index 0000000..ed7d14f --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Core/MessageSender.swift @@ -0,0 +1,42 @@ +// +// MessageSender.swift +// cimsdk +// +// Created by FeiYu on 2021/10/2. +// + +import Foundation + +public protocol MessageSender { + + func sendTextMessage(_ text: String, receiver: String) +} + +class MessageSenderImp: MessageSender { + + weak var client: CIMClient? + + init(client: CIMClient) { + self.client = client + } + + func sendTextMessage(_ text: String, receiver: String) { + if let client = client { + if let account = client.account { + let msg = MessageBuilder() + .set(type: .message) + .set(action: "2") + .set(sender: String(account.id)) + .set(receiver: receiver) + .set(title: "title") + .set(content: text) + .set(format: "") + .set(extra: "") + .build() + if let msg = msg { + client.sendMessage(msg) + } + } + } + } +} diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Core/WebsocketClient.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Core/WebsocketClient.swift similarity index 100% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Core/WebsocketClient.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Core/WebsocketClient.swift diff --git a/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/DB/CIMDBManager.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/DB/CIMDBManager.swift new file mode 100644 index 0000000..9c37380 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/DB/CIMDBManager.swift @@ -0,0 +1,46 @@ +// +// CIMDBManager.swift +// cimsdk +// +// Created by FeiYu on 2021/10/2. +// + +import Foundation +import SQLite + +class CIMDBManager { + + let path: String + + lazy var db: Connection? = { + do { + let db = try Connection(path) + return db + } catch { + return nil + } + }() + + lazy var messageDB: MessageDB = { [unowned self] in + let messageDB = MessageDB(db: self) + return messageDB + }() + + init(path: String) { + self.path = path + } + + func execute(query: String) throws { + print("DB query: \(query)") + if let db = db { + do { + try db.execute(query) + } catch { + print("DB 查询语句执行失败!") + } + } else { + print("DB 连接失败!") + } + } + +} diff --git a/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/DB/MessageDB.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/DB/MessageDB.swift new file mode 100644 index 0000000..8798818 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/DB/MessageDB.swift @@ -0,0 +1,58 @@ +// +// MessageDB.swift +// cimsdk +// +// Created by FeiYu on 2021/10/2. +// + +import Foundation + +class MessageDB { + + weak var db: CIMDBManager? + + init(db: CIMDBManager) { + self.db = db + do { + try createTable() + } catch { + + } + } + + func createTable() throws { + + let createSQL = """ + CREATE TABLE IF NOT EXISTS "messages" ( + "id" INT64 NOT NULL, + "action" TEXT NOT NULL, + "title" TEXT NOT NULL, + "content" TEXT NOT NULL, + "sender" TEXT NOT NULL, + "receiver" TEXT NOT NULL, + "format" TEXT NOT NULL, + "extra" TEXT NOT NULL, + "timestamp" INT64 NOT NULL, + PRIMARY KEY("id") + ); + """ + try db?.execute(query: createSQL) + } + + func insert(_ message: Message) throws { + + let insertSQL = """ + REPLACE INTO "messages" ("id","action","title","content","sender","receiver","format","extra","timestamp") VALUES ( + \(message.id), + "\(message.action)", + "\(message.title)", + "\(message.content)", + "\(message.sender)", + "\(message.receiver)", + "\(message.format)", + "\(message.extra)", + \(message.timestamp)); + """ + try db?.execute(query: insertSQL) + } +} diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Extension/Date+Extension.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Extension/Date+Extension.swift similarity index 100% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Extension/Date+Extension.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Extension/Date+Extension.swift diff --git a/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/AutoReConnectInterceptor.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/AutoReConnectInterceptor.swift new file mode 100644 index 0000000..dd39c5e --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/AutoReConnectInterceptor.swift @@ -0,0 +1,44 @@ +// +// AutoReConnectInterceptor.swift +// cimsdk +// +// Created by FeiYu on 2021/10/1. +// + +import Foundation + +class AutoReConnectInterceptor: MessageInterceptor { + + var uniqueID: String = UUID().uuidString + + weak var client: CIMClient? + + init(client: CIMClient) { + self.client = client + } + + func connect(_ event: ConnectEvent) { + switch event { + case .connected(_): + if let account = self.client?.account { + let msg = MessageBuilder() + .set(type: .sentBody) + .set(key: "client_bind") + .set(data: [ + "uid": String(account.id), + "channel": "ios", + "deviceId": UUID().uuidString, //UIDevice.current.identifierForVendor?.uuidString ?? "", + "token": account.token ?? "" + ]) + .build() + if let client = self.client, + let msg = msg { + client.sendMessage(msg) + } + } + break + default: + break + } + } +} diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/ConnectListener.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/ConnectListener.swift similarity index 100% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/ConnectListener.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/ConnectListener.swift diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/HeartInterceptor.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/HeartInterceptor.swift similarity index 100% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/HeartInterceptor.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/HeartInterceptor.swift diff --git a/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageDatabaseInterceptor.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageDatabaseInterceptor.swift new file mode 100644 index 0000000..b06e6c0 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageDatabaseInterceptor.swift @@ -0,0 +1,58 @@ +// +// MessageDBInterceptor.swift +// cimsdk +// +// Created by FeiYu on 2021/10/2. +// + +import Foundation + +class MessageDatabaseInterceptor: MessageInterceptor { + + var uniqueID: String = UUID().uuidString + + let dbManager: CIMDBManager? = { + + let fileManager = FileManager.default + if let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first { + let databasePath = documentsURL.appendingPathComponent("db.sqlite3").path + print("directory path:", documentsURL.path) + print("database path:", databasePath) + if !fileManager.fileExists(atPath: databasePath) { + fileManager.createFile(atPath: databasePath, contents: nil, attributes: nil) + } + let dbManager = CIMDBManager(path: databasePath) + return dbManager + } + return nil + }() + + /// MARK: - MessageListener + func receiveMessage(_ message: Transportable) { + do { + try insertMsg(message) + } catch { + + } + } + + /// MARK: - MessageSendListener + func sendMessage(_ message: Transportable) { + do { + try insertMsg(message) + } catch { + + } + } + + func insertMsg(_ message: Transportable) throws { + switch message.type { + case .message(let msg): + try dbManager?.messageDB.insert(msg) + break + default: + break + } + } + +} diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/MessageInterceptor.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageInterceptor.swift similarity index 100% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/MessageInterceptor.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageInterceptor.swift diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/MessageListener.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageListener.swift similarity index 100% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/MessageListener.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageListener.swift diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/MessageLogInterceptor.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageLogInterceptor.swift similarity index 100% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/MessageLogInterceptor.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/MessageInterceptor/MessageLogInterceptor.swift diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/Account.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/Account.swift similarity index 76% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/Account.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/Account.swift index 4d16ca1..a5dbe5a 100644 --- a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/Account.swift +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/Account.swift @@ -8,9 +8,9 @@ import Foundation public struct Account: Codable { - let id: Int64 - let name: String - let token: String? + public let id: Int64 + public let name: String + public let token: String? public init(id: Int64, name: String, token: String?) { self.id = id diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/Message.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/Message.swift similarity index 84% rename from cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/Message.swift rename to cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/Message.swift index 6d2438e..307e15d 100644 --- a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/Message.swift +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/Message.swift @@ -7,17 +7,17 @@ import Foundation -public struct Message: Codable { +public struct Message: Identifiable, Equatable, Codable { - let id: Int64 - let action: String - let title: String - let content: String - let sender: String - let receiver: String - let format: String - let extra: String - let timestamp: Int64 + public let id: Int64 + public let action: String + public let title: String + public let content: String + public let sender: String + public let receiver: String + public let format: String + public let extra: String + public let timestamp: Int64 public init(action: String, sender: String, receiver: String, title: String?, content: String?, format: String?, extra: String?) { self.id = Date().currentTimestamp() diff --git a/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/MessageBuilder.swift b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/MessageBuilder.swift new file mode 100644 index 0000000..73f0ce8 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/CIMClient/Sources/CIMClient/Model/MessageBuilder.swift @@ -0,0 +1,131 @@ +// +// MessageFactory.swift +// cimsdk +// +// Created by FeiYu on 2021/9/29. +// + +import Foundation + +public class MessageBuilder { + /// Type + private var type: MessageType.Key? + /// Message + private var action: String = String() + private var title: String = String() + private var content: String = String() + private var sender: String = String() + private var receiver: String = String() + private var format: String = String() + private var extra: String = String() + /// Reply & Sent + private var key: String = String() + private var data: [String:String]? = [:] + /// Reply + private var code: String = String() + private var message: String? = String() + + /// Transportable Data + private var transportData: Data = Data() + + + public func set(type: MessageType.Key) -> MessageBuilder { + self.type = type + return self + } + + public func set(action: String) -> MessageBuilder { + self.action = action + return self + } + + public func set(title: String) -> MessageBuilder { + self.title = title + return self + } + + public func set(content: String) -> MessageBuilder { + self.content = content + return self + } + + public func set(sender: String) -> MessageBuilder { + self.sender = sender + return self + } + + public func set(receiver: String) -> MessageBuilder { + self.receiver = receiver + return self + } + + public func set(format: String) -> MessageBuilder { + self.format = format + return self + } + + public func set(extra: String) -> MessageBuilder { + self.extra = extra + return self + } + + public func set(key: String) -> MessageBuilder { + self.key = key + return self + } + + public func set(data: [String: String]) -> MessageBuilder { + self.data = data + return self + } + + public func set(code: String) -> MessageBuilder { + self.code = code + return self + } + + public func set(message: String) -> MessageBuilder { + self.message = message + return self + } + + public func set(transportData: Data) -> MessageBuilder { + self.transportData = transportData + return self + } + + public func build() -> Transportable? { + switch type { + case .pong: return Pong() + case .ping: return Ping() + case .message: return Message( + action: action, + sender: sender, + receiver: receiver, + title: title, + content: content, + format: format, + extra: extra) + case .sentBody: return SentBody(key: key, data: data ?? [:]) + case .replyBody: return ReplyBody(key: key, code: code, message: message, data: data) + case .none: + let data = transportData + if data.count > 3 { + let bytes: [UInt8] = data.map{$0} + let type = MessageType.Key(rawValue: bytes[0]) + let body: [UInt8] = bytes[1..?h{eJ7-zrJ<%DcNhynaO$1?Af#D*>gU5z6iLgsj8t0prQf*)F}tx z90M>`f!KWj0JOCMVgLZ(BH#iQ3xJxUQBe*+s2zajUmXCrN%;i;sJ~PFr}X=U|1SOh zo%%oeKM$Vo03N)sb@}MxVe8_0UHZ;lz=J0m+BE;PMv;GY;eXYuqkNH5F@Q>%jZc@p zZ4;ls&RYS@7XjY^->Io?04^|7Q8QDWcK|??H=?EbSN^R=xlvu9rlF;yzj%p(k@7&z zRm!VVQ(vH=rltMoZ>an!E#Xa z@eTSM91{8^EIckgAu%cWTS{tnPHtX)L19sGWmR=eZQajb_3fyR&aUpB-oD|H(XsJ~ z$*E}!c4>KKb!~lP6Tg3OctkiR{yq5z7v+2Y7c9#CzmWYuxR@!pF3`|W)6oBei|T^+ zKfsx3Xa%I`SRU)qzjb51aWCK^+mqO=indFF()u{|ckV+B96~Y}Vf;VP{zdjb0~YxI zh3vn9{Rh_!;3>t({*eomllsC1N>@=+gocjhAEBeC`&a1yw_N;JF8w2n|1IZ~MyUR& zNli^lITWUI?y`+WE~D@ywwm zbR_6<^RA8a#YH$6%0S4}eLTCQsf z_u@KYt^y60+bvYnqxekp_|rVR?}7f>%51f99^d19Lba&{5G`LdRLcGu_we!ra{*Kp zceC#H3pD>vKz`8QusG_NN z&TB1ij+i_ehnexn_bLGQV)J@{G0+za{{V_mmQrr`u<=u0mJ?HZ+9`#2Jfy+~&{JWfI{)*3_p5kYqX%vVRa<}5-6_GU7mqR- zjlJ!CEr}@pQIPYo8{>ueM35L?vn{>-!yt<>c;U(j30Iyk%*3&;JPrS!~{%9zoSB zB58jY$;AolTy_hV5VWbd$h1JHcqwXJsJdT)ItR3O;g#}hL_*;es}s|7lM@eZpM}fu z>08PVF?SyuzE;9_L1Qp#9gGVh_lUtTsr6(SN6k3&slOlXQ9nvHwcE9S<>EZ97G?hr83>;vDc$&v>!XZY5MS{GQxZy;(F-U zeVH!}A*1siF%`;eo8YUSE}$Zm}}%PswLz_YtDPq%B`t3qp)9b@AJzP`K9bvBY6pSU)22>(*+ zi-?$MJ;{jbN-6YDLEg{`;$mq0+;Jli-^7zp^i31H!nYf~`2TKoB=)Y5^_8B-CvXzxqt3Ao`eOa6t zOGeE4r>VdsA<2X^Vod2~PRB7>DE>(lbmLvfXxG=y3i;V`uz#JP!afs(!KZj$jyQt1 z>9+h(hv#S%s;)6Faj|1HDJ^wNLO6yFDhDxqI;c)(-aQAr#afJ$&^)AH zQAQZsRx0pIBdBC*zDIc9SSZKCbnddX$8pGFX!x;DR^Tp2-LDt;A8qtaj)}`dAp@se z=YXKE=YV&6oUmyGP7A>Xk;Hh1?lx*K0h#O{!hU5>PPW_pinA5o&u7jK>`3#mrnmhq zZ7C0Lt6jjUs!?9ogNz2^N0x#SiFiNkm2@Yc%bVWo)6j1ptGXbuKe*w9L^a&|bAXyj z#$KeNsLiU~xQ&GhM$cN^`Qq`tuaW*5)+a{sb|4nzJEz9OT#bU5Zd|1HZNl*Umi|+j zA)U-l%kcGYgpUzwCKmLAamm3u;d?Z_8sgw;IoAw?vR1oA?o4cqf6a;iQcLn zGfdyt3QI8@$kpA4RS|J7ytST=ub1;+5D`1g*P)7k8a+RFa8$f?f&4rNkInZwHZz!#>@0t|jK2Cd_4qG6hw4J0=pjopa?>k)J0z zEm`4qNTvmQRnw}<-IG-1op#4?%4_9-2-`rRn^P z{rxB3D=Pc8&$?a$uc!TLi`4>)>DB@(R7K(^i)yM;!uW9XD>Vn@{VnN$$(;@WFf^}g&tOG0-$1l0 z-yd?iJ|Xicdv)P5Zl$UgJI1-qEI+H4=#d^7m}_(mFQPNld>JC%fnbGlU75&WW6|YE z<}GzvYlzkC{&Efop8r6zJ(Iq?ybo8)2@AG|OuDuHVVB=R6{2UE#lsfKY?;|g0oGVFpF^F8 z9idg%!P?u?+U54%L7y38m~`?xxc3U|I=1&kN2kp0#0Z74`Pq$KEyWDuq{p4QztyZT#rYBYPbi8=W z=j7k~w}%?vE|xtt8p>Uusqe~tsVH}H+#^^)e?3OeGMU5A(@CkCbPh=GJT}eJ?}$D5 zD*gjk-T*=k-k8wFIiX%RYRfL9hXM%^VccqtAKOG|)vrg3;ZsDKuBmD_eUxptl3$Xv zv%cm4R??mNj(H#xm+Q^^ZT12ubBvW`LUQKyao7#n-#K`9EptOdZ!JHSFTHPFu2E^W zZ}$zSJKH$^5V3v0dkg}QuiG^<;cq8tt(t7SEH128rMR`IPgczj$lH#7!L7j}+`e)ir5hi7g@W)B=*76pT;CvKO?U1417nB6fepah^6n+E5y9qL)~rfx>;!iNr!EU*U!qw`u`w zWie1IO}BbUTxN^AVR0?JV)?N5h{h-{`RV-Xp{1WG1?5Y&!qaJ z2tNm09LU+JALXvxNFH=>6Ma>$^&0iJwk=w&eB1!Q-unWsOJ+M2z)N!k4ByE)L$#xy+4xLTW-P^gF#e{dbk|I>UhnW4Qhg$&4|oiA0v0Q zTG^p&tcb@OnDY3tH1QZ2+%<;0?c{0tH>2qetQR#as|Nb|PWrNvarY)JGTpLM?&f%A zQo}yD01=M3@KG|Vnd1k=sSJXvWX~R?+^*q!XufYM-}UIjvx6)bZ1l6qNqR0oOrWAA zNg4XO5-%6rsDx!SuIX7Be;bGOleOJh4eyZclL-PY`;>nHD136Ja*QOmYEoOtzEbPm zF(*2<*D$c;X&SB?+H@H7`xUIDc| z6sTAKKIWom{l2oNDEXG4^=n4;@1KfGebf0v_q_>}88xU(S&8U?8lR^pj^RSdtV$+Y zDKv7m)2D{fTY{{-FjJFyXb`n`s>Y_9rSmzUZGfMt2Hz6X%(Xr**wX0mU|aT5PBmrH z+!9m|A9iBwPo(llck1aDn%KukZVxVAGVA3%uAo%RbdTB0Z}djPJuO!!PJylDFpT7d zD%ka2(KU!@+slmYa%7I({7G5NAtMoV4xm-S(|3m5mH|hAsFVdyr5|=Sbtl40?Qnzn zyCJe)v9`iK_piE^|0&K~e%B~X@T+lv2WE1ID)f$&Ehs6UtTy&zm@2UTJmgC`xS&UI z4rNcaiTVx^enq%}+6l6GQ*jl5YSxBA%kr?EVF=%Re>aFwh{{3Sk9&cKUls9KFe4Zd8fu{@_-GK2A%v{`M8+^JD2w*D{# zeRQCEgse%cE?XnRm!Z(S-isXsbIF%U3L-&X)Xb@&x}(}@Dc=>N(t*bu71@bTI8L_| z^u~6oBQ70@#~gX#711+{+{@!-wu3q0naSW6@OPKiTFz1rmF!oJHHy%M3$Yu7lHQe5 z7{SBR+~_l`f1V4`b`GdY4mg$f%Ce~$x^4IZyp|RAx&@DQnAN-S z%wH)X(<#C&vx?payZ&ePodEXaQu`Nn+#l;R`g-u~dEqFYL4j^-^|6$gA2j26Y}8<| z@^xEF4!9lq%YAN+Hfl|+c#%q`8W2P^HU+X3IPF&H=h*Vi|@1*klsS9 zG;pCoid@;Yv40Jd>Ry_5gYwrSIE3~!1VxlI24NvIZG%ua$z|h*HqKeX*8*HwBmO$V z_jc)9@X5V;*Lb%w;46=bnB80`h$IHt>_@e5z^?bN^m|@u@(%*|YVAgPaO)i^P1k~94WJw0_m_-QsSIjqr|q;zUI zO1=*f?j(m{86g6A{s@^sxx})N$?~1|@0dSCUD6PQ3JopY4t|UrgNL;6H?u*tt*kL~ z&rpS3^l1fi9fS#6Up(6H?3ZH?i_(MFJyLsWAI52m%v^T5)Sb}NQPDl$GYx24e3MQxijt5~*z;HgPp1)d zi9RHK+Y?1)i9qTiqSuDY$C;GxTEWqeUR5f(UqJE%ggk9qBp`d`TNdN_Iq~Su4t)2H zp4(zS-;J^5g9`2zGVPGvU>_kGH~z7(Hmj8)wam%QD%^rFCi zc}YZsT2LODNapYLkwlpbc5tVu9T=PRD?H0IaY?${5!~CoHr*T=cwpk`FqWfZZ_nH` zKH&#q?3}uDBbWgaKAO(9JiI!$U-ogKXn9^VULWthBc45F*WEv?C{kc%FGm|~h{+j!F&K?S#qz#^l)Q*#OZ9-!dEqa;xt;vJW%oTo7u>uCAMT{@hE-wu41 zQ-9+B^1RuY&juUqyosKssry75eV6^wHa!5w{w`b`i_QU`kC9JGk9bT+gj{;g@su#q9@;TEewC>JF)Hb6WAlIgh57)AMo&L&dx#EJ7Er@0v`hEq znh&yw%#{5oHJ6{dPO2;-Zv{SFqL0Nauqk?ATcRwkSu#RZ!Y608V{dA`Y3EvgTm4)w zg8ll(7!M~h9t{e2lZ^WH;c!a+&JK0x=ImyGfIM-RODhc&vB3jowMc)!Ux3;}jj17@Oz>xjX7Z^4>b#kndM(e$OJv zBv11u#(s>Lh4FKtg>-jhQsXlkjW~QiqW!4N)SBK`{JN<=Lvv7pVYThHqoi1VJBg>34 z%(!{)|E;Kh>ml&^Mcp@j!&D*F?w+eu$1%hH*T@W3_$4eHCBEZBu*;qDvg0iYF1V;9L>8(DE!ojuCV#m6qslW{!H+9X?Z7#M zO}*jC!}fqL?rUN%Z?>enP(wxWG$2|*z>s~y`LxtmlYZ;s5BfZWKv3$^G| z4qZYy4wi?NoYul79tV7cNOF(=o_Rb}y(Jzo_BcgIW2H8B>2c!4{{HuikrWoYZu=mc z*xxk{XHgb{#CIx7j5`Xmw%zf3EF=(KLmSd8y|7@JO30os=?6;n-N6=At{nkjJwB`M+b3hHEdkYa!v{YttE2<$fk!INos)WfBlQG(YuPccT#pt?Mc%f@rcH9RIy^jWT3-n^lCN^r& zAugwW;NWwB&D@Q5mBiu|nXRxP*P%%jF2AAx`js2P0=}o)HK&30{15Rl-RMXQ5S~5^ z8_s8V@S?IhT0zZ@nLfQZjOVm8XH{s4Yi|ZLJh4q75NMwgfw%&~!30zq?=J83(RSxM zZZ`%QvOrrpux=xLlgc;`EX^l5XqaXj>Ygn0kdTB#2Vju0*hHf^=8Ky$f;K(Xsn~Vczp&bCJ!oEU<%IgM z#FC9nYYVDUt-C`jgB9^EkEM%;n+2DT+Zlvt&V;KKu${dVUX<$VZP-t zOHpw3im~#;eABXfM?>#zBiy;~A1d;`kNo8J^&&22#s%X++`}*sQCb1JvT&MNxYLx7 zmB)`Lt~*zmR(9qM^d{Umkz-lW2t{EDeM4{xKX5KVH|P#hkP_`X^B9nZq^XJ6=JvBd z8Abfbb&r~K`aMioQV)Wk^PA2kF3&g}n!&%RkKW?0ZC^yu_9vaDp3uLWX6NJN zdJ5$e^F?ZF{%%C;iDKH~@C%*+-XK@vtri^Z@;RVshW%jVI@B3CRAxkQBT{3{KWuem zUdO>={QP}H(qu-ap6%{@y4RVoobK+h>N3qku&x{0PR6>l`in72Xz7|+Y$V++)q>lB z27?XS&$4f`vN9iBc(EL7*#{FRil^HUOI7`}*a~FXdv%jdg)6-mylcx4S*{f4_4d}2 zq)Vto&&0!qO_Jamg-*AzWIOe$4jg&PZC(9!HqmrzeW1#uyERVBQ!oBHFI5xWPHyI1 zxG|IpV+>_noRe;=Jx-RxZ+KOhGNw(L_=P>UqFs*d{qSK^L-y}qlJu#dZWI`J1m`Da zukNFD$893lSxmKr%jU9YoauHs+7%^bBB%6~KkEH_gUugPR)YGS#oc)Zs^-gqEVKb= zb=fv5O1?6mc&p$mA^Cp zm8T3xQ_2#h6e2>nj*DCXHuIvLN})QVi`F$YA_Jk%)mlj^J$&7#RWT(96`GNAfJ@9w z19l!k;v^OOHS3+eG3~1lkPNjFqh+C2uJfv$^PRPX<;FPW)!TlE-RN|q9{jbdX9i+2>}$dwPmIr8 zP`bdkX|FQDcfE2nW)fXQU0j58v1kq=8rvOp1Y(86tvXqmG$;EH9LW1cr2W#pzE(6> z%{qCN!kL1d$+zr$!Kj64aZKIzTJ~Ub|6=#&%+(Wp`S=%!ic@Ljs^(Z{kBJtSPw>Tb zFvAitkMst@+FloWpWA$9%X^=_?_%|`+~om}{k=p3zq5Vu^@U)V0En+y0cuNZD>v<3 zCI)(rf`eem^rS?B74Qsl)V+ak(60LAqkv&ygE%9a6 zt=!D8vEv(Y`%yy&-ksoSx_<0kq8>?iJ!y{>CETGl;3+|2C`~&ur4xHl!l)&#u8|2v zIWhweuCjZP!o7xK%Xm~!b`}Dra2C7$TkRT5#rZ~J?jEECX(jQ(vs?;^sD*LaUZA*H zCL+hc(_EsJdAN%C_Pp7{uSu8W-8BZPL|&e5Ri9Pn{30SqJkSegxsBiV?c6LNtcKtC zp))rJ^Y`4tmlv5#Ww#)C3A(fh15du$B`(Vxuki&1gy^9GwvQ{B&Uy?N2kT-jdV>B~ zzM>6Qwj7|O_He*R0UR>y4c-vJ`Kx|-b;0H5j`6M)sa%!Gi#6RXwKJ8lNw%qP@(`+2 zP~Y~glIoT1vQVEkiokq42fQpoRTz=eRC@TQ^nD2B%`JBlW(7GV>eP;Ecx6S$GjCXS z)QM99;UHM|p6)5D2$@lD$#ROWt9!Aa+g1b*MCH2i%1M1Nf2yha;DWHC#)YH((1B0T zPiNEQKd{SCC{d224xyW%I2<(d6eR6Q1Ln^5d!~R^nw*%%xH~Z0S$c~_qrYyQk-QT- za;MBW1og9$W~I|7cu)s?sv8@OZg)~Z?YX%46-}cE3w37de8cqBUdF<&7?bS0*@3|z zDcR#$xsI`w{?8@X?x3|OWCxf5FNboh&tOOyWGIem78+S`+HtT?^JlR+#Nhi0ZXha? zrEUZejbKBw6urop?T>i6rR{UpN1|t?2*31nNG#oiqLiXC_ zI9w}uCE>6?TbL;md804)7t;$G<5qW5Y7xNMkQ087k|@|-%5prbEj!$5q65ygM9Dl@ zj_x%29!KtbDwJg3EgvhCdDZ8G%ErQ}eEt(}Ef40bQzUG(NW)O_RdO_C16S!5-@ z`tiQNS1THhi_%q8(eRhi${zVeXj9OD=iMSr`~$?~8o{>-$DT3K3Fn!N;DejdpeTfp z^yG|`M5tBo&jd_?Rs7eI_&PUIt@5E`k$6gKr}6m&`Rpon`UoLFFQIi%hUMX_I(L`1 zB*5=^F@?e#^#NtO%hPKT# z)hV~$8%ps^ghda_s^>w4$jfJ0ij3LNr$l)q(Zg&=0ME-Z)wfZAX6X}7q+2JH1j>bQ z=_nJ#2fN-D@Jyg|lg#TPj!gVXne){5B380uLX{Nus&l5%=GSZrvWSV8U&>5SO`;9y zF}VkJYdAEzTH?Mbnuqx0q7me0)##E#8+++DEG4ho_f4Ps>iS)2G;RsA>g4;lT=eGH zy&t~P(R|I{SKtifaf+Xn1Q8<$)vUei0khP?{x=QCc4pVs^*H0N986j&M$~~uEVt=gLdZOu-s0Z+d4ii0vc%2qE?H3Oe7m2$ONo@vv#k^fG=D)gC^koZi@PI%N;lUPLlM&H=CfVcyUfbeNQxHkJc-7(Z}FXNtwaj&?eP_hA2) zlDzU{`2xWx{9q~hlyz&VWqaGhv(VO%Fb^Jj%A1%u8KVe%T+3!r5C-ILc?W%t1BH`$ zAPXIq7nB9XCLzf>QAQdf!UkG zpKI_J>v8#6tnWh|3VT$xVu-}BYXwL2>x#Ch7cP>WZ!<8r+!vZ!FzA32z7NLT$!`3* zkvZEX7(7FZaCOw~c4P9L7zgQtmmOEp8cWL`xF$8)|FyU44{9r-l-V7d$AnwTx95kwp#V0BXC2okS z{&tpg@HaTI+yz@_5k2roLP^FROfKw{5%;(CD#WmFi90_xbdOJeQ;?MVwzam_agn@l z)d#Fq20<9xD0Br^{;2}dBX`=?mm|hGsn(D~>NW=f*LAmu*Wpt!{Ufp8VI}M28$*t# zD&J=%#-g(>n6=&GE$O~~xfGa1W26Q0J-fraqPAEg>90ZA;x#%z*%x$H$GaH$Qghcz z^K)kPi7BINcDQJyC=;M951Dihutm(!6I{=}$%uL)qWJHO9IA!iOq8%r_8j;|^C|Y$ zJt^?+s6i2ft4CU;`RiKH6~iVK%}BFcf|d~x)Yo##OH0zQN3c=a;bSCN{VV*V%_tET-eD_#w|C za>uQR=tpK?%p;G1nZd(OvV1VVhz;Jo{n8_uxEq^N9j+zsPl9(wVP9Y~V4Ri@g#nzV zM8%#+};Fl+RBAuvU*U9Gv%#32OtNJcJO(UdXwGIUCRg-*72Z9bZkjW0eOSD0y zs)g>1aCUZ(1Ql&2Y`Bm+OB9Awk0eD#!x=?}$TUx#9BczX2C4Tfyi;i|k#?5r6J7u! z7jLcS+-!;33s445oC6&9h+-ci@a<@n9QPhdTdgy0FBL0foTqi`GCqrC_5R=NzX^wz z6_$+%mUzLo6U(S-Iu47gBk#vNPQVG57UyqM@DR4(qG=y>XTOoO_jSy;7ol z>eNE;Ta*~k1UXgJ1{24(d}*$)jFoGLEI@ykEXA82o`o?c$2+T+@L? zH}^ZSS8XE+nXyR`HOGo@daKXvYhx}n8IT7Wxk$+s?cJTSav$B(YYMG|)R;&z2YD=$ zBZe#tlO5{J82yB^V86yus_U-*+GFH9vOVQ(xLd6O4R!3czrzXLuOnV3cEn~ojPwXLHvMyi3|wcKeZ4n%lGpWi*yPYPF|NcYZ7$r%?)WdL+7jpDvV#J4N(NPtd*&ZD9n`eYbhkW9Ndwyt zp&T#f{Hk%M&<<{2y^tFckJ!m3AbRC{P@OYGv#^~dC+v#7jXM5jm_X97f7X&yYf0{x z1@WAswwGN>IJHAKPL9mjjX%15TUN=s8c5mvm5_hGCY1}SQ1bN7n1aE9Qu;4+A6uXo zVGtG*?-s)G!1iTl--zbKcsEAT8>9TDis4&&d1|8kR$pdO)3B-V0T_8Z+=TMQ!{Lhs zEmg>!hLTNX8eF&~1m1aa`-#>L&`2eE1t4JDUGpVT?~CE}3zxX`Vl8t~(c-(d??ep) di!?Pgj?}P_Z8|~v*BJb(*_(CR_VDwm{{>u String { + let currentTime = Date().timeIntervalSince1970 + let timeSta: TimeInterval = TimeInterval(self / 1000) + let reduceTime : TimeInterval = currentTime - timeSta + let hours = Int(reduceTime / 3600) + let date = NSDate(timeIntervalSince1970: timeSta) + let dfmatter = DateFormatter() + if hours < 24 { + dfmatter.dateFormat="HH:mm" + return dfmatter.string(from: date as Date) + } + let days = Int(reduceTime / 3600 / 24) + if days < 365 { + dfmatter.dateFormat="MM月dd日 HH:mm" + return dfmatter.string(from: date as Date) + } + dfmatter.dateFormat="yyyy年MM月dd日 HH:mm:ss" + return dfmatter.string(from: date as Date) + } +} diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/Model/Session.swift b/cim-client-sdk/cim-swift-sdk/Demo/macOS/Model/Session.swift new file mode 100644 index 0000000..553fcf7 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/Model/Session.swift @@ -0,0 +1,21 @@ +// +// Session.swift +// CIMApp (macOS) +// +// Created by FeiYu on 2021/10/15. +// + +import SwiftUI +import CIMClient + +struct Session: Identifiable { + var id: String + var lastMsg: String + var lastMsgTime: String + var pendingMsgs: String + var userName: String + var userImage: String + var allMsgs: [Message] +} + +var localSessions : [Session] = [] diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/Model/User.swift b/cim-client-sdk/cim-swift-sdk/Demo/macOS/Model/User.swift new file mode 100644 index 0000000..616ac86 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/Model/User.swift @@ -0,0 +1,14 @@ +// +// User.swift +// CIMApp (macOS) +// +// Created by FeiYu on 2021/10/16. +// + +import Foundation + +struct User: Identifiable { + var id: String = "" + var name: String = "name" + var avatar: String = "avatar" +} diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/AllChatsView.swift b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/AllChatsView.swift new file mode 100644 index 0000000..420d81b --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/AllChatsView.swift @@ -0,0 +1,64 @@ +// +// AllChatsView.swift +// CIMApp (macOS) +// +// Created by FeiYu on 2021/10/15. +// + +import SwiftUI + +struct AllChatsView: View { + + @EnvironmentObject var homeData: HomeViewModel + var body: some View { + // Side Tab View.... + + VStack { + + HStack { + Spacer() + Button(action: {}, label: { + Image(systemName: "plus") + .font(.title2) + .foregroundColor(.white) + }) + .buttonStyle(PlainButtonStyle()) + } + .padding(.horizontal) + + HStack{ + Image(systemName: "magnifyingglass") + .foregroundColor(.gray) + TextField("Search", text: $homeData.search) + .textFieldStyle(PlainTextFieldStyle()) + } + .padding(.vertical, 8) + .padding(.horizontal) + .background(Color.primary.opacity(0.15)) + .cornerRadius(10) + .padding() + + + List(selection: $homeData.selectedSession){ + + ForEach(homeData.sessions) { session in + + NavigationLink(destination: DetailView(session: session)) { + RecentCardView(session: session) + } + + } + } + } + .frame(minWidth: 280) + .listStyle(SidebarListStyle()) + + + } +} + +struct AllChatsView_Previews: PreviewProvider { + static var previews: some View { + Home() + } +} diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/BlurView.swift b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/BlurView.swift new file mode 100644 index 0000000..e71e65e --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/BlurView.swift @@ -0,0 +1,22 @@ +// +// BlurView.swift +// CIMApp (macOS) +// +// Created by FeiYu on 2021/10/15. +// + +import SwiftUI + +struct BlurView: NSViewRepresentable { + + + func makeNSView(context: Context) -> NSVisualEffectView { + let view = NSVisualEffectView() + view.blendingMode = .behindWindow + return view + } + + func updateNSView(_ nsView: NSVisualEffectView, context: Context) { + + } +} diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/DetailView.swift b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/DetailView.swift new file mode 100644 index 0000000..0406138 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/DetailView.swift @@ -0,0 +1,299 @@ +// +// DetailView.swift +// CIMApp (macOS) +// +// Created by FeiYu on 2021/10/16. +// + +import SwiftUI +import CIMClient + +struct DetailView: View { + @EnvironmentObject var homeData: HomeViewModel + var session: Session + var body: some View { + HStack{ + VStack{ + HStack{ + Text(session.userName) + .font(.title2) + Spacer() + Button(action: {}, label: { + Image(systemName: "magnifyingglass") + .font(.title2) + }) + .buttonStyle(PlainButtonStyle()) + + Button(action: {withAnimation{homeData.isExpanded.toggle()}}, label: { + Image(systemName: "sidebar.right") + .font(.title2) + .foregroundColor(homeData.isExpanded ? .blue : .primary) + }) + .buttonStyle(PlainButtonStyle()) + } + .padding() + + MessageView(session: session) + + HStack(spacing:15){ + Button(action: { + print(homeData.message) + }, label: { + Image(systemName: "paperplane") + .font(.title2) + }) + .buttonStyle(PlainButtonStyle()) + + TextField("Enter Message", text: $homeData.message, onCommit: { + homeData.sendMessage(session: session) + }) + .textFieldStyle(PlainTextFieldStyle()) + .padding(.vertical,8) + .padding(.horizontal) + .clipShape(Capsule()) + .background(Capsule().strokeBorder(Color.white)) + + Button(action: { }, label: { + Image(systemName: "face.smiling.fill") + .font(.title2) + }) + .buttonStyle(PlainButtonStyle()) + + Button(action: {}, label: { + Image(systemName: "mic") + .font(.title2) + }) + .buttonStyle(PlainButtonStyle()) + } + .padding([.horizontal,.bottom]) + } + + ExpandedView(session: session) + .background(BlurView()) + .frame(width: homeData.isExpanded ? nil : 0) + .opacity(homeData.isExpanded ? 1 : 0) + } + .ignoresSafeArea(.all, edges: .all) + .onAppear(perform: { + homeData.clearUnReadMessage(session: session) + }) + } +} + +struct DetailView_Previews: PreviewProvider { + static var previews: some View { + Home() + } +} + +struct MessageView: View { + + @EnvironmentObject var homeData: HomeViewModel + var session: Session + var body: some View { + + GeometryReader {render in + ScrollView{ + + ScrollViewReader{proxy in + VStack{ + ForEach(session.allMsgs){message in + + MessageCardView(message: message, session: session, width: render.frame(in: .global).width) + .padding(.bottom,20) + .tag(message.id) + } + } + .padding(.leading,10) + .onAppear(perform: { + let lastID = session.allMsgs.last!.id + proxy.scrollTo(lastID, anchor: .bottom) + }) + .onChange(of: session.allMsgs, perform: { value in + withAnimation{ + let lastID = value.last!.id + proxy.scrollTo(lastID, anchor: .bottom) + } + }) + } + } + } + + } +} + +struct MessageCardView: View { + + @EnvironmentObject var homeData: HomeViewModel + + var message: Message + var session: Session + var width: CGFloat + + var body: some View { + + HStack(spacing: 10) { + let myMessage = (message.sender == "\(homeData.account.id)") + if myMessage { + + Spacer() + + Text(message.content) + .foregroundColor(.white) + .padding(10) + .background(Color.blue) + .clipShape(MessageBubble(myMessage: myMessage)) + .frame(minWidth: 0, maxWidth: width / 2, alignment: .trailing) + + Image(session.userImage) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 35, height: 35) + .clipShape(Circle()) + .offset(y: 20) + + } else { + + Image(session.userImage) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 35, height: 35) + .clipShape(Circle()) + .offset(y: 20) + + Text(message.content) + .foregroundColor(.white) + .padding(10) + .background(Color.primary.opacity(0.2)) + .clipShape(MessageBubble(myMessage: myMessage)) + .frame(minWidth: 0, maxWidth: width / 2, alignment: .leading) + + Spacer() + } + } + } +} + + +struct MessageBubble: Shape { + + var myMessage: Bool + + func path(in rect: CGRect) -> Path { + return Path{ path in + let pt1 = CGPoint(x: 0, y: 0) + let pt2 = CGPoint(x: rect.width, y: 0) + let pt3 = CGPoint(x: rect.width, y: rect.height) + let pt4 = CGPoint(x: 0, y: rect.height) + + if myMessage { + path.move(to: pt3) + path.addArc(tangent1End: pt3, tangent2End: pt4, radius: 15) + path.addArc(tangent1End: pt4, tangent2End: pt1, radius: 15) + path.addArc(tangent1End: pt1, tangent2End: pt2, radius: 15) + path.addArc(tangent1End: pt2, tangent2End: pt3, radius: 15) + } else { + path.move(to: pt4) + path.addArc(tangent1End: pt4, tangent2End: pt1, radius: 15) + path.addArc(tangent1End: pt1, tangent2End: pt2, radius: 15) + path.addArc(tangent1End: pt2, tangent2End: pt3, radius: 15) + path.addArc(tangent1End: pt3, tangent2End: pt4, radius: 15) + } + } + } +} + + +struct ExpandedView: View { + @EnvironmentObject var homeData: HomeViewModel + var session: Session + var body: some View { + HStack(spacing: 0) { + Divider() + + VStack(spacing: 25) { + + Image(session.userImage) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 90, height: 90) + .clipShape(Circle()) + .padding(.top,35) + + Text(session.userName) + .font(.title) + .fontWeight(.bold) + + HStack{ + + Button(action: {}, label: { + VStack{ + Image(systemName: "bell.slash") + .font(.title2) + Text("Mute") + } + .contentShape(Rectangle()) + }) + .buttonStyle(PlainButtonStyle()) + + Spacer() + + Button(action: {}, label: { + VStack{ + Image(systemName: "hand.raised.fill") + .font(.title2) + Text("Block") + } + .contentShape(Rectangle()) + }) + .buttonStyle(PlainButtonStyle()) + + Spacer() + + Button(action: {}, label: { + VStack{ + Image(systemName: "exclamationmark.triangle") + .font(.title2) + Text("Report") + } + .contentShape(Rectangle()) + }) + .buttonStyle(PlainButtonStyle()) + } + .foregroundColor(.gray) + + Picker(selection: $homeData.pickedTab, label: Text("Picker"), content: { + Text("Media").tag("Media") + Text("Links").tag("Links") + Text("Audio").tag("Audio") + Text("Files").tag("Files") + }) + .labelsHidden() + .padding(.vertical) + .pickerStyle(SegmentedPickerStyle()) + + ScrollView{ + if homeData.pickedTab == "Media" { + + LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 10), count: 3), spacing: 10, content: { + + ForEach(1...8, id: \.self) { + index in + Image("avatar") + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 80, height: 80) + .cornerRadius(3) + } + }) + } else { + Text("No \(homeData.pickedTab)") + } + } + + } + .padding(.horizontal) + .frame(maxWidth: 300) + } + } +} diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/Home.swift b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/Home.swift new file mode 100644 index 0000000..0a2a1d8 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/Home.swift @@ -0,0 +1,58 @@ +// +// Home.swift +// CIMApp (macOS) +// +// Created by FeiYu on 2021/10/15. +// + +import SwiftUI + +var screen = NSScreen.main!.visibleFrame + +struct Home: View { + + @StateObject var homeData = HomeViewModel() + + var body: some View { + + HStack(spacing:0) { + VStack { + + TabButton(image: "message", title: "All Chats", selectedTab: $homeData.selectedTab) + TabButton(image: "person", title: "Personal", selectedTab: $homeData.selectedTab) + TabButton(image: "bubble.middle.bottom", title: "Bots", selectedTab: $homeData.selectedTab) + TabButton(image: "slider.horizontal.3", title: "Edit", selectedTab: $homeData.selectedTab) + Spacer() + TabButton(image: "gear", title: "Settings", selectedTab: $homeData.selectedTab) + } + .padding() + .padding(.top, 35) + .background(BlurView()) + + // Tab Content + ZStack { + + switch homeData.selectedTab { + case "All Chats": NavigationView{ + AllChatsView() + } + case "Personal": Text("Personal") + case "Bots": Text("Bots") + case "Edit": Text("Edit") + case "Settings": Text("Settings") + default: Text("") + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .ignoresSafeArea(.all, edges: .all) + .frame(minWidth: screen.width / 1.2, maxWidth: .infinity, minHeight: screen.height - 60, maxHeight: .infinity) + .environmentObject(homeData) + } +} + +struct Home_Previews: PreviewProvider { + static var previews: some View { + Home() + } +} diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/RecentCardView.swift b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/RecentCardView.swift new file mode 100644 index 0000000..ce3ad1a --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/RecentCardView.swift @@ -0,0 +1,50 @@ +// +// RecentCardView.swift +// CIMApp (macOS) +// +// Created by FeiYu on 2021/10/15. +// + +import SwiftUI + +struct RecentCardView: View { + var session: Session + var body: some View { + HStack { + + Image(session.userImage) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 40, height: 40) + .clipShape(Circle()) + + VStack(spacing: 4) { + HStack{ + VStack(alignment: .leading, spacing: 4) { + Text(session.userName) + .fontWeight(.bold) + Text(session.lastMsg) + .font(.caption) + } + Spacer(minLength: 10) + VStack{ + Text(session.lastMsgTime) + .font(.caption) + Text(session.pendingMsgs) + .font(.caption2) + .padding(5) + .foregroundColor(.white) + .background(Color.blue) + .clipShape(Circle()) + } + } + } + } + } +} + +struct RecentCardView_Previews: PreviewProvider { + static var previews: some View { + Home() + } +} diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/TabButton.swift b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/TabButton.swift new file mode 100644 index 0000000..6e0efea --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/View/TabButton.swift @@ -0,0 +1,38 @@ +// +// TabButton.swift +// CIMApp (macOS) +// +// Created by FeiYu on 2021/10/15. +// + +import SwiftUI + +struct TabButton: View { + + var image: String + var title: String + @Binding var selectedTab: String + + var body: some View { + Button(action: {withAnimation{selectedTab = title}}) { + + VStack(spacing: 7) { + Image(systemName: image) + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(selectedTab == title ? .white : .gray) + + Text(title) + .fontWeight(.semibold) + .font(.system(size: 11)) + .foregroundColor(selectedTab == title ? .white : .gray) + } + .padding(.vertical, 8) + .frame(width: 70) + .contentShape(Rectangle()) + .background(Color.primary.opacity(selectedTab == title ? 0.15 : 0)) + .cornerRadius(10) + } + .buttonStyle(PlainButtonStyle()) + } +} + diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/ViewModel/HomeViewModel.swift b/cim-client-sdk/cim-swift-sdk/Demo/macOS/ViewModel/HomeViewModel.swift new file mode 100644 index 0000000..bb9ba6e --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/ViewModel/HomeViewModel.swift @@ -0,0 +1,119 @@ +// +// HomeViewModel.swift +// CIMApp (macOS) +// +// Created by FeiYu on 2021/10/15. +// + +import SwiftUI +import CIMClient + +class HomeViewModel: ObservableObject, MessageInterceptor { + + @Published var selectedTab = "All Chats" + + @Published var sessions : [Session] = localSessions + + @Published var selectedSession : String? = localSessions.first?.id + + @Published var search = "" + + @Published var message = "" + + @Published var isExpanded = false + + @Published var pickedTab = "Media" + + let uniqueID: String = UUID().uuidString + let account = Account(id: 123456, name: "FeiYu", token: "qwqewewrettryry") + let imClient = CIMClient(url: "ws://192.168.2.100:34567") + + func sendMessage(session: Session) { + + if message != "" { + imClient.msgSender.sendTextMessage(message, receiver: session.id) + message = "" + } + } + + func clearUnReadMessage(session: Session) { + let index = sessions.firstIndex { (s) -> Bool in + return s.id == session.id + } ?? -1 + if index != -1 { + var session = sessions[index] + session.pendingMsgs = "0" + sessions[index] = session + } + } + + init() { + imClient.appendMessageInterceptor(self) + imClient.connect(account) + } + + /// MARK: - MessageInterceptor + func connect(_ event: ConnectEvent) { + + } + + func sendMessage(_ message: Transportable) { + switch message.type { + case .message(let msg): + let index = sessions.firstIndex { (session) -> Bool in + return session.id == msg.receiver + } ?? -1 + + if index != -1 { + var session = sessions[index] + session.allMsgs.append(msg) + session.lastMsg = msg.content + session.lastMsgTime = msg.timestamp.timeStampToTime() + session.pendingMsgs = "0" + sessions[index] = session + } else { + let session = Session(id: msg.receiver, lastMsg: msg.content, lastMsgTime: msg.timestamp.timeStampToTime(), pendingMsgs: "0", userName: "uid:\(msg.receiver)", userImage: "avatar", allMsgs: [msg]) + sessions.append(session) + } + break + default: + break + } + } + + func receiveMessage(_ message: Transportable) { + switch message.type { + case .message(let msg): + let index = sessions.firstIndex { (session) -> Bool in + return session.id == msg.sender + } ?? -1 + + if index != -1 { + var session = sessions[index] + session.lastMsg = msg.content + session.lastMsgTime = msg.timestamp.timeStampToTime() + session.allMsgs.append(msg) + if var pendingMsgs = Int(session.pendingMsgs) { + pendingMsgs += 1 + session.pendingMsgs = "\(pendingMsgs)" + } + if let selectedSession = selectedSession { + if session.id == selectedSession { + session.pendingMsgs = "0" + } + } + sessions[index] = session + } else { + let session = Session(id: msg.sender, lastMsg: msg.content, lastMsgTime: msg.timestamp.timeStampToTime(), pendingMsgs: "1", userName: "uid:\(msg.sender)", userImage: "avatar", allMsgs: [msg]) + sessions.append(session) + } + break + default: + break + } + } + + func receiveMessageWithError(_ error: Error) { + + } +} diff --git a/cim-client-sdk/cim-swift-sdk/Demo/macOS/macOS.entitlements b/cim-client-sdk/cim-swift-sdk/Demo/macOS/macOS.entitlements new file mode 100644 index 0000000..40b639e --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Demo/macOS/macOS.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + com.apple.security.network.client + + com.apple.security.network.server + + + diff --git a/cim-client-sdk/cim-swift-sdk/Example/Podfile b/cim-client-sdk/cim-swift-sdk/Example/Podfile deleted file mode 100644 index af4ff81..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -use_frameworks! - -platform :ios, '9.0' - -target 'cimsdk_Example' do - pod 'cimsdk', :path => '../' - - target 'cimsdk_Tests' do - inherit! :search_paths - - - end -end diff --git a/cim-client-sdk/cim-swift-sdk/Example/Podfile.lock b/cim-client-sdk/cim-swift-sdk/Example/Podfile.lock deleted file mode 100644 index 3cec373..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Podfile.lock +++ /dev/null @@ -1,27 +0,0 @@ -PODS: - - cimsdk (0.1.0): - - Starscream (~> 4.0.0) - - SwiftProtobuf (~> 1.0) - - Starscream (4.0.4) - - SwiftProtobuf (1.17.0) - -DEPENDENCIES: - - cimsdk (from `../`) - -SPEC REPOS: - trunk: - - Starscream - - SwiftProtobuf - -EXTERNAL SOURCES: - cimsdk: - :path: "../" - -SPEC CHECKSUMS: - cimsdk: b47490e772cd2be7616f3c5a426ac2ac8e671a6a - Starscream: 5178aed56b316f13fa3bc55694e583d35dd414d9 - SwiftProtobuf: 9c85136c6ba74b0a1b84279dbf0f6db8efb714e0 - -PODFILE CHECKSUM: 9553001a2a8e262563768c3daaccec410de16fe8 - -COCOAPODS: 1.10.1 diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Local Podspecs/cimsdk.podspec.json b/cim-client-sdk/cim-swift-sdk/Example/Pods/Local Podspecs/cimsdk.podspec.json deleted file mode 100644 index 9a347c6..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Local Podspecs/cimsdk.podspec.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "cimsdk", - "version": "0.1.0", - "summary": "A short description of cimsdk.", - "description": "TODO: Add long description of the pod here.", - "homepage": "https://github.com/飞鱼/cimsdk", - "license": { - "type": "MIT", - "file": "LICENSE" - }, - "authors": { - "飞鱼": "870027381@qq.com" - }, - "source": { - "git": "https://github.com/飞鱼/cimsdk.git", - "tag": "0.1.0" - }, - "platforms": { - "ios": "9.0" - }, - "source_files": "cimsdk/Classes/**/*", - "dependencies": { - "Starscream": [ - "~> 4.0.0" - ], - "SwiftProtobuf": [ - "~> 1.0" - ] - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Manifest.lock b/cim-client-sdk/cim-swift-sdk/Example/Pods/Manifest.lock deleted file mode 100644 index 3cec373..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Manifest.lock +++ /dev/null @@ -1,27 +0,0 @@ -PODS: - - cimsdk (0.1.0): - - Starscream (~> 4.0.0) - - SwiftProtobuf (~> 1.0) - - Starscream (4.0.4) - - SwiftProtobuf (1.17.0) - -DEPENDENCIES: - - cimsdk (from `../`) - -SPEC REPOS: - trunk: - - Starscream - - SwiftProtobuf - -EXTERNAL SOURCES: - cimsdk: - :path: "../" - -SPEC CHECKSUMS: - cimsdk: b47490e772cd2be7616f3c5a426ac2ac8e671a6a - Starscream: 5178aed56b316f13fa3bc55694e583d35dd414d9 - SwiftProtobuf: 9c85136c6ba74b0a1b84279dbf0f6db8efb714e0 - -PODFILE CHECKSUM: 9553001a2a8e262563768c3daaccec410de16fe8 - -COCOAPODS: 1.10.1 diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Pods.xcodeproj/project.pbxproj b/cim-client-sdk/cim-swift-sdk/Example/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index eccd312..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1743 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 01BB21813DC5EA743DC9750D5301DA01 /* Constant.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB47958F76E2DF9A3B69009E1C3E5AC7 /* Constant.swift */; }; - 04A09360324C4E3D58A91E0316DBFCD9 /* duration.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEBF8057722E4BA5DF22133A7697BB12 /* duration.pb.swift */; }; - 066CD5B812B62BA16175A36CE621A167 /* ProtobufMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAAC1B10879148B4389E301074394BA /* ProtobufMap.swift */; }; - 067610D8E708BCE1B6C30E74313332E0 /* StringUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC092033AEEAB03DC9ED9807E0E60FD3 /* StringUtils.swift */; }; - 0A0E8476402B53B091B91A7DE07E0008 /* Engine.swift in Sources */ = {isa = PBXBuildFile; fileRef = C098A76FB6530EF77618F610AD1770F7 /* Engine.swift */; }; - 0CC54E4D0945262C1B835B699345B034 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7C9CD587BAB1432D6F7ECA69D28F73 /* WebSocket.swift */; }; - 0D9D0F76CDE875251CDF8F8CDE304C55 /* Google_Protobuf_FieldMask+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C386162728C8737761AAAA01320EAA14 /* Google_Protobuf_FieldMask+Extensions.swift */; }; - 0E69C16A6F0FD741C5A3E47DE288D210 /* Message+TextFormatAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C1EB02B68D7EDE32F331EFFC4536E8C /* Message+TextFormatAdditions.swift */; }; - 0F196866334DA010A59361AB5BC8F620 /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457BD29D1F158B8532C5D22B472D4AB1 /* Internal.swift */; }; - 11DEEB57C07627A3403CD9BEE3BB2067 /* field_mask.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 336CB8450529FD556B75E0D8A62D4166 /* field_mask.pb.swift */; }; - 17E016C98C6868BF2477C0CC3E20C6C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8F3BA1E0C9C94E4805D1498C1C131D0 /* Foundation.framework */; }; - 190BC16FCBB53F6C6F2C0618B6BE7DDA /* FoundationHTTPServerHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E4CBF130619CB1CE281AD937AA6335E /* FoundationHTTPServerHandler.swift */; }; - 195E17A825CB18759C7D6511DACCB3E9 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392AA33E012AFF245DAABF7B003BB3B1 /* Server.swift */; }; - 19E712862F3F845060EA7DADEAD9BC59 /* FoundationTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BCBFC95FA836C1D673D4BA7183FF21C /* FoundationTransport.swift */; }; - 1B8EA5FC8AF8CD71363B4DF2A788DEEE /* MessageExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21FB6A05BC81BB62FBFCD80D2849B058 /* MessageExtension.swift */; }; - 1BCEC1C72A76476B70CE4B032A9D9B32 /* StringHTTPHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF5599F07C207DCC7D2426B58DDF0923 /* StringHTTPHandler.swift */; }; - 1C9A2ACFCBB948407CF608663AAB2006 /* CustomJSONCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17997AEE3DF674745BBA9B951AEF0C49 /* CustomJSONCodable.swift */; }; - 2012FF1EEE0C42C17DDF4E80B9E08E22 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8F3BA1E0C9C94E4805D1498C1C131D0 /* Foundation.framework */; }; - 220E4052B975BCAE210D69D8C87EBE24 /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F87AC24ED7FB09D03782FC192368C350 /* Starscream.framework */; }; - 22153764D197F250775890A6B1E47351 /* UnsafeRawPointer+Shims.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA8A69288E36995E658B3B56720468DD /* UnsafeRawPointer+Shims.swift */; }; - 25422B5CCDE38C38B7850160D59070DE /* Message+BinaryAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2D6EECCC2310FD0FB0B8A1A99E6635D /* Message+BinaryAdditions.swift */; }; - 259BA8DDDCBF4751A69420DE52CD5C41 /* FieldTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8A10F63EC7AD9E3934E798CD28F1343 /* FieldTag.swift */; }; - 27517E97FA894A4ECA5AE2AE5BD8830B /* TextFormatDecodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD4895BEB89EE4A398823B339064D162 /* TextFormatDecodingOptions.swift */; }; - 27A16A1A47A8BAFA7E594BE6C9EB1E88 /* empty.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 626C0C14FF0BD0ED622F3C7FB5610C77 /* empty.pb.swift */; }; - 289E1BB0A2A305B35238C9CF40A333DC /* JSONScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 048CFD06495DAD8C7806FA2B736D9FB1 /* JSONScanner.swift */; }; - 2B5E5DC81ED73B5FC422B2339D59F220 /* BinaryEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C12E6F21590300057EAC8115196D6BD2 /* BinaryEncoder.swift */; }; - 301FDAF0AA65309B9939E8C1DBF653BE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8F3BA1E0C9C94E4805D1498C1C131D0 /* Foundation.framework */; }; - 311172653501A9A63A4891AECD616DD0 /* JSONDecodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DE4737EB2672520AA0F3573A71A1EE6 /* JSONDecodingError.swift */; }; - 33B5DB7D5A1E37A29969C66B3FE4A98C /* BinaryDecodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA68C999739BD776E3548D80BD528BA1 /* BinaryDecodingError.swift */; }; - 359D3455A362843977E8E3076B7D8162 /* TCPTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0EA1B2BA70297BA525B8C47E6625345 /* TCPTransport.swift */; }; - 36D1530899987EF165D0AFC6D2B9EAF2 /* FrameCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42A61BC662AD35207E44F145CA32FB52 /* FrameCollector.swift */; }; - 37E36C07C168E5737FBA757736AB1263 /* Data+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9738AB3C18E50D47A84876D1A243F2 /* Data+Extensions.swift */; }; - 38B8B519A9423BC18E06FF93F353A587 /* ExtensionFields.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDEF45D5F264204D00914C5AE1FD1D0A /* ExtensionFields.swift */; }; - 3A3203EF37CD83686FB2AD42EFFBE24B /* Pods-cimsdk_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 958004DD58945106147713294657FC26 /* Pods-cimsdk_Tests-dummy.m */; }; - 3C89065008FF7D8DEF1DDAC3D7A5E042 /* MessageProto.proto in Sources */ = {isa = PBXBuildFile; fileRef = 981BD6AFA7E2F9AFEEF1D6F176F52090 /* MessageProto.proto */; }; - 3D6170DFAF288775DC288291FC04EA84 /* Visitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6930F55E62AB0610CFE964B77BDA8CD2 /* Visitor.swift */; }; - 3D9D54BFB87F305B262115312973A761 /* TextFormatEncodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66B2983B894D0D64E6C41AA61BBACE98 /* TextFormatEncodingOptions.swift */; }; - 3E925F93A435B48FE86620988C39F551 /* Date+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51757D6D482ECF48C78FE56BE402654 /* Date+Extension.swift */; }; - 3EAD27947630860DF24FE1F57E717964 /* TextFormatEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB1229FFEB401AF9E9455C1E30C0E25 /* TextFormatEncoder.swift */; }; - 4572F22239A84AC23B262764D429E2EB /* Framer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC3BE25B7967E93FC968FDA95C503DF9 /* Framer.swift */; }; - 485ED5DC9CEF727F94A9B93087D2B7F4 /* HashVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D997270475BE11583DB56DFA8ED207D5 /* HashVisitor.swift */; }; - 4B7AF15082427E0E07DA5BC495F4F309 /* BinaryEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E453ABCDD4B89DC2E5F8DE16F0B2458D /* BinaryEncodingVisitor.swift */; }; - 4D322C7978617308B276D6F4902C2335 /* WSEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3AA149E2FE8CD036AA71F59575B548A /* WSEngine.swift */; }; - 5119FDA29109DD57C9A5040A264B4794 /* CIMClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 795BD9BD944A244D04DBC03EDE2EB321 /* CIMClient.swift */; }; - 5124D90F3E8C2264F5F904B880E252BE /* Message+JSONAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6584D36893718D607D050BBDD863D8F /* Message+JSONAdditions.swift */; }; - 53C3923D44B35F56A523AC3ABDA8AFAA /* translate.sh in Sources */ = {isa = PBXBuildFile; fileRef = EA3900630F9723F33C20EE93A517B0C5 /* translate.sh */; }; - 579C34CE35184A7591B5BD9B2F499033 /* MessageFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8412F14585010556E1BD105415A1F102 /* MessageFactory.swift */; }; - 5B5F7F32B29BA04AD99B9231ABE2D5E4 /* Google_Protobuf_Wrappers+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9B701673282E69C742F56F55A0B1A73 /* Google_Protobuf_Wrappers+Extensions.swift */; }; - 5DC53D35039C2A64A86D102A02EB317D /* ExtensionMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 619BBBC802323BCFE364578C1433148E /* ExtensionMap.swift */; }; - 5FD1905A93213C67218EC852C14FEFC8 /* FieldTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF13E803CA27CC208720EB98565690C /* FieldTypes.swift */; }; - 6410A9206AD6E96B1392292ED61E4100 /* Google_Protobuf_Value+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C7FD6EC1DC58EAD91094C7E6088A915 /* Google_Protobuf_Value+Extensions.swift */; }; - 64BF9040E5C7FB8667FAA2DA426FA14A /* Data+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E75ED30A41372656738F2F80C30C0A0 /* Data+Extensions.swift */; }; - 65DCBFB0CBB4C8D4324459EF2C6A848C /* Pods-cimsdk_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D947935B5C058CF0A479BAEBFC4378 /* Pods-cimsdk_Example-dummy.m */; }; - 68730349221D00296B9692F0A495186C /* TextFormatScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77377643A121E92B2D96552A06439C57 /* TextFormatScanner.swift */; }; - 69CAFF8A7FCDA7A383DB93091ABFB6BD /* Google_Protobuf_Any+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBE2947AA0B3BC63551FC506CF7B6C4 /* Google_Protobuf_Any+Extensions.swift */; }; - 6C39258AAA8906B9BAEE1BAF64492844 /* UnsafeBufferPointer+Shims.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23A89465B5ABA4FE2853D106BFF3B690 /* UnsafeBufferPointer+Shims.swift */; }; - 6C57C1D467061A6BAB31511EF0F979AD /* BinaryDelimited.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266DC2B8A8562D7CEF11FBE0538B9641 /* BinaryDelimited.swift */; }; - 6FA5F6421B16B6D187AA5017A086154A /* Pods-cimsdk_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2350E8103C6D0D796D124C7D2842575C /* Pods-cimsdk_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 703C0586C478A922E21934D3B149A71E /* Starscream-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 07747750FFC28186241909CC76F30362 /* Starscream-dummy.m */; }; - 7203B31C393204BF7C08AF811CBEA363 /* WireFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DA8A6397D62081809D9114418938925 /* WireFormat.swift */; }; - 74AC36056519E1696D8373590E570D46 /* JSONEncodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F300D737E3DBF282D3134C3E843D5E2 /* JSONEncodingError.swift */; }; - 7724CA45CAC37563208007730FB2D4B4 /* JSONMapEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2BE2223BB71D0B1E3A834D6E933E311 /* JSONMapEncodingVisitor.swift */; }; - 7749B1FD9E5FB8F3B34365527354FBDC /* MessageProto.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F516453AA3E3E7FA940ED14F3751942 /* MessageProto.pb.swift */; }; - 793D18E42CC454D1C4225339797DB9EB /* WSCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2A4FD39FED7CE765B34B44479F5ECD0 /* WSCompression.swift */; }; - 7C0EBEEFC1B861271A74D828374917EC /* Pods-cimsdk_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 93EB90BFB2173AE1690D4DE532AC63FC /* Pods-cimsdk_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D7E59D7667AFA1D2368A289F2E3A74A /* source_context.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85A9F3233182ADC2C6763D43F65FAAE /* source_context.pb.swift */; }; - 7E450FDF55944CC90FDA515024C2A810 /* Google_Protobuf_Any+Registry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 338599B47723DADA2BA9CCC2E65CD3E7 /* Google_Protobuf_Any+Registry.swift */; }; - 7E7CCCF2BCC4195E84C84A058B0E075A /* any.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C76A68388C0A1D50A49CFF2B6BDFA08F /* any.pb.swift */; }; - 7F7E1D8A5291B3D6474415C06801D57B /* api.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD67F119F0AA0B069BD98058128120B3 /* api.pb.swift */; }; - 809E9B520AFD0771BB71038413BF5F5F /* BinaryEncodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE4E493DBDB7C69A1368906661940DF1 /* BinaryEncodingError.swift */; }; - 81CE32D4E0636ABDE9C3BCF3F61CE35C /* WebMessageDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 745338BB910E2F384C8EB65D4720C016 /* WebMessageDecoder.swift */; }; - 81DA4F5F84660F59C7DCB937D121FE97 /* JSONEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 067E0F1465343B240B9E4B66E3B5C691 /* JSONEncodingVisitor.swift */; }; - 822BCFA4BE6B71B18DF70B82A647603E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8F3BA1E0C9C94E4805D1498C1C131D0 /* Foundation.framework */; }; - 837A52FA0FC7AF31FC412171AEC106E6 /* ReplyBodyProto.proto in Sources */ = {isa = PBXBuildFile; fileRef = AE9EE33226588159F52B40A7B15DB59F /* ReplyBodyProto.proto */; }; - 85F80CC5ED316689434C317C2591E1C1 /* Transportable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16B834AD6A0F64EABF777E857B6EAB2 /* Transportable.swift */; }; - 878D5A96F2E1CBF9DA0A8AE12EA55971 /* ReplyBodyProto.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = F552061A70D4E6DECFAA74D0E43D012F /* ReplyBodyProto.pb.swift */; }; - 8841ECAF31A2E82762A83961C04FD2F0 /* Message+JSONArrayAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B00C146F9AD4156B759B0EAA7A96F44 /* Message+JSONArrayAdditions.swift */; }; - 894E47358149672D5810C31E4B64AF0D /* HTTPHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616B8DD7456F89C65056DC1124255270 /* HTTPHandler.swift */; }; - 8B7178B35E6AC89720BB13C477829AEE /* Enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0914B369497A327AF6F4023589BA684B /* Enum.swift */; }; - 8BE806DD7A18B96C3FE52345CBDDEA88 /* BinaryEncodingSizeVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E02B2FE6296CE318D1F618692C030F96 /* BinaryEncodingSizeVisitor.swift */; }; - 92C7080E4889E845FFA5C4F0048FC70D /* TimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5614ECA810A480033F384D59531106B5 /* TimeUtils.swift */; }; - 946911E4FFC48BF8F84D076D258A1322 /* FoundationSecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE5CDDE61B584D60098FCBE064654C76 /* FoundationSecurity.swift */; }; - 94F10F83AE563575832D38CBF62FFD3B /* SwiftProtobuf-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D612663877B17B0469CA4FF80F05ABA /* SwiftProtobuf-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9700BC277A370438D5A39EE8455F8114 /* TextFormatDecodingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4FB0E8C30289EB7B38920D3E3FC3712 /* TextFormatDecodingError.swift */; }; - 97E1041159122A0CD31833DBDD7A4D39 /* ExtensionFieldValueSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF2DC51B372A8C01886C54BBD2257817 /* ExtensionFieldValueSet.swift */; }; - 99CC2D5DC15DBA9F5A494E76FF940B62 /* Starscream-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F1D440A2D0A1C52ECD3D3C2D4391D9C /* Starscream-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B18DC8E1A18947FD1F0536ECE454237 /* SentBodyProto.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = A392ABF67DDB8705847CC545226EA4A7 /* SentBodyProto.pb.swift */; }; - A096A65BFDA5E88AE6E7667F64F3DB37 /* wrappers.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 206E0DA8C482C08B597B874259766679 /* wrappers.pb.swift */; }; - A0978535A85D0ABD7853A0F3D3A374F8 /* Decoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDE5FD3E96524A89A788A413D0597868 /* Decoder.swift */; }; - A306782DC125A83C5AF8D47C5BEE91AC /* SimpleExtensionMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5F8B138164FF58E98A0330F30490F41 /* SimpleExtensionMap.swift */; }; - A353CE6E7868A7C27530CB392F6EE164 /* Google_Protobuf_ListValue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77DE5CB3E8CC7912EE9B356D89030797 /* Google_Protobuf_ListValue+Extensions.swift */; }; - A561B9D0156C65C2DAEBCE71DA2C53DF /* AnyUnpackError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C6E2B5028B59C0A93D741EBEA1E7B5 /* AnyUnpackError.swift */; }; - A5760654DC6480FD5349822F7A5A564E /* descriptor.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8471FD4E30F3E9741E5EB8FC59209651 /* descriptor.pb.swift */; }; - A9279E81A7C7E0A19A28B71840B8A6B3 /* type.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20EC88765660BDD10D81BBAB81747833 /* type.pb.swift */; }; - AA5BAFEE16421EF90FD54A4CA32D5A5E /* DoubleParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBD0B9ED532E11AB128AC4C632EEFB49 /* DoubleParser.swift */; }; - AA60D16E23144B1EE6F2EEC04467BEF4 /* JSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCBFFEB0317C56C3EFF74176BAC0580 /* JSONDecoder.swift */; }; - AF50952CEE567CC2BF2503314F89F8A8 /* ProtobufAPIVersionCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7F88F4983290158A5006E295C67935D /* ProtobufAPIVersionCheck.swift */; }; - B1AE14625C1AA370FA24336948BBBE40 /* timestamp.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9A76F3A589723EA892F422D53AD525 /* timestamp.pb.swift */; }; - B8C4123A152381BD2F8FF7C04B10A9DA /* UnknownStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31DDDE3FB2B69D7B954EC8ECFF1C0CDF /* UnknownStorage.swift */; }; - BB658F54DF19D4A60E12BF13E4BEF3DB /* Message+AnyAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22032E30ADCB65A4BCDE3EA9099058D4 /* Message+AnyAdditions.swift */; }; - BDA9F6811D1580ACCB23889ADE665675 /* Google_Protobuf_Struct+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 072E76D369E1C45BA4B17EFC0612250F /* Google_Protobuf_Struct+Extensions.swift */; }; - C07413B05F2A3CD997EBCE9D8EE5FD08 /* Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A71C815B3B6742B0EA3CA770DCEB13 /* Compression.swift */; }; - C2809B4763602D15A7384398343AE406 /* Transport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EEFD4C2967F14FFB6806E0D58E66C10 /* Transport.swift */; }; - C3015CEC822A6D87F4D750A076CC3FB8 /* ZigZag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E236C09E6371A7ACB65429F2866B88B /* ZigZag.swift */; }; - C37535FC3F928735A5FFD97ACEDD99E2 /* SwiftProtobuf.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6198F4722E3DDD45E185BA01A0A265CD /* SwiftProtobuf.framework */; }; - C404183F48E1E0E8BFF2E626A45331B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8F3BA1E0C9C94E4805D1498C1C131D0 /* Foundation.framework */; }; - C4D774FAA9A8B38404FDFA15230ADE1D /* MathUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337FE378DDE985FB4BF8465C2E5A245D /* MathUtils.swift */; }; - C5F24FD19CCE6408CF75E28A90E05756 /* AnyMessageStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 909640493C1FF4AFB31F2DB5452B1338 /* AnyMessageStorage.swift */; }; - C808D0298CC1CD6C13E283663535B259 /* WebSocketServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB45540AD95201614942D90306FAE81 /* WebSocketServer.swift */; }; - CB190229F12055E6703484E6ADD44957 /* Google_Protobuf_Duration+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6585144F7A789C0CF7B1D4F5EC8A2F2 /* Google_Protobuf_Duration+Extensions.swift */; }; - CBCB7172A6D172C0C1A6B79A357B343F /* Google_Protobuf_NullValue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7299DBE9116764F71AD3FC09F191BB61 /* Google_Protobuf_NullValue+Extensions.swift */; }; - CC06E899B113296F76CCC62687CCFDE1 /* Varint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D3ABA91AB3243A69A01E460548E38AD /* Varint.swift */; }; - CCDFE079D2DA1E51162E69A3A28BF23F /* NativeEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1868F2488A7232BC4B99576404FB4E /* NativeEngine.swift */; }; - CEE69724BC617259BD6CCD76E1264C45 /* ExtensibleMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512E089C9F7FE2BAA5E4EA51D5E75482 /* ExtensibleMessage.swift */; }; - D0B4605FEE4D68E47DD8F1115FC2D4F9 /* NameMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D8229289CF1EA850D0AC240D0E6A8EA /* NameMap.swift */; }; - D160E8E1FB946251AC041DA5F6A4A143 /* TextFormatEncodingVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90A3D75CF13976D05F2D1D2B7FEA36 /* TextFormatEncodingVisitor.swift */; }; - D161D620532C3D5053A614F2FDBF9DB2 /* Google_Protobuf_Timestamp+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9450EE91EA1384C7F0F5EFD7DCDC455 /* Google_Protobuf_Timestamp+Extensions.swift */; }; - D2575BB9D350056D5DF177425F26A288 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = E02A0C4CF493B74CBBBBA2C96E859119 /* Version.swift */; }; - D8689BE762D1845E7796FB8430CF0C12 /* cimsdk-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 81ADD291E89D4C8DD69D03F893F4B2F2 /* cimsdk-dummy.m */; }; - D99A061996AEB317D7D137C320B3F5E9 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2C4B4142AD62FF28E031B97F4EA660 /* Message.swift */; }; - DA25193E27ABCAC731A9549A566C5FDB /* FoundationHTTPHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C253BC98A73773AA61820EEFF95D81 /* FoundationHTTPHandler.swift */; }; - DB1AC33002E6BD6059A74D6168C6B84E /* ReplaceMe.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E0C8A0CD8280B9F217C16150DC4D19 /* ReplaceMe.swift */; }; - DDAC8FC07F42F37AD192BDAEA3EE5339 /* WebMessageEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E6F412BE8085AB8D51C297339E1D8BA /* WebMessageEncoder.swift */; }; - DE368DD73909B1A11AEEC0A985F4C540 /* TextFormatDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDBE0914DEBF0B74B25FC604E8807D48 /* TextFormatDecoder.swift */; }; - DECB08BC5236EDA9B6B8BC9A6AB66D2A /* struct.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C80C63F5016C3BF4E34A5C5FB09BEB4 /* struct.pb.swift */; }; - DF6FB0651A2159142D73399EAF84C125 /* SentBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = F823016410CDEFABD49021C6A6259F7E /* SentBody.swift */; }; - E404D0BD0FD45796191549E5789CAA1E /* cimsdk-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 722D684972480674FB45A8C22C7DB7A9 /* cimsdk-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E65415E0BF320B09CF4411DCE7F8F811 /* Ping.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6767077CC8C410D22AF8069A9F9FD3F /* Ping.swift */; }; - E8B8A666DC0251E5861F59C52C674F88 /* Pong.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358017ECCF8112B73ECA3E8F4169EBC4 /* Pong.swift */; }; - E8E10B122706C86000A09591 /* ConnectListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B112706C86000A09591 /* ConnectListener.swift */; }; - E8E10B142706C9C800A09591 /* MessageListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B132706C9C700A09591 /* MessageListener.swift */; }; - E8E10B162706CBE000A09591 /* MessageInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B152706CBE000A09591 /* MessageInterceptor.swift */; }; - E8E10B182706CD8D00A09591 /* MessageLogInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B172706CD8D00A09591 /* MessageLogInterceptor.swift */; }; - E8E10B1A2706D2EA00A09591 /* WebsocketClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B192706D2EA00A09591 /* WebsocketClient.swift */; }; - E8E10B1C2706D3CF00A09591 /* HeartInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B1B2706D3CF00A09591 /* HeartInterceptor.swift */; }; - E8E10B1E2706E54B00A09591 /* AutoReConnectInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B1D2706E54B00A09591 /* AutoReConnectInterceptor.swift */; }; - E8E10B222707025800A09591 /* CIMError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B212707025800A09591 /* CIMError.swift */; }; - E8E10B2427070F6900A09591 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B2327070F6900A09591 /* Account.swift */; }; - E9D10B6577A2016878CC6373C6C86CE0 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C5B5D463F4BA3FF98DBEB4518CE8D3C /* Message.swift */; }; - ECD2D5288E99B87DD90803BC67352068 /* JSONDecodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91E6C5725A63925D9CF2207F6EE547E2 /* JSONDecodingOptions.swift */; }; - EEEEB721D87A819B958C75BE4372A508 /* SentBodyProto.proto in Sources */ = {isa = PBXBuildFile; fileRef = 68AD01F78747EE30400BB1D424E1EEB8 /* SentBodyProto.proto */; }; - F1E0BB5DBA5393D8BAA4B0FBB03A9B87 /* ProtoNameProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6ADA59831A9128E86202D718ADC95E6 /* ProtoNameProviding.swift */; }; - F1F832231AE3985E324463E9ECD55838 /* BinaryDecodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0647E1C3992B5564A5EF0BA154D6A3 /* BinaryDecodingOptions.swift */; }; - F227A646427FC31045D5500E4662D0CF /* JSONEncodingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F68A982B38B2C8ACDBD1CE6A708D093E /* JSONEncodingOptions.swift */; }; - F367C8E3EC417B2180FCCB7AE609E7DF /* ReplyBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976F79BA1885D845AE7EB66D19F8B49D /* ReplyBody.swift */; }; - F3B99A9638D12BD62ED2FC1FAAB947D4 /* JSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05E46D7786A96622A5424AA229D9E345 /* JSONEncoder.swift */; }; - F4D86DAACC44D52F4580AD0721D10459 /* Security.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D343B6CB34452B31488528080D1747C /* Security.swift */; }; - F4F8C02E43A0AE296FB83507B582BCEA /* SelectiveVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA508679EC88DB96AB0E869CA1FEB32 /* SelectiveVisitor.swift */; }; - FA22EE7CEF450AEB7765378565211A54 /* BinaryDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BECC9EA5785878BAEAC85BAB44B880 /* BinaryDecoder.swift */; }; - FADC9DC2ED64824C3201923CA9A873BC /* SwiftProtobuf-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E2B975988C4459DAC2B612C0668BBA8 /* SwiftProtobuf-dummy.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 1F21564FB0AE1CDE31FA390323FD64B2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 52CC9A0C85C680189A25B2E1E8630008; - remoteInfo = "Pods-cimsdk_Example"; - }; - 76499D10A5F7CBA19F4B90A31DCF68FF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A5F702E0DA383BC1479572581615A916; - remoteInfo = SwiftProtobuf; - }; - A889F048CB6CDF66588A0CE1FB89AC62 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9B78EE4AF6AE03E79D88886319853FF7; - remoteInfo = Starscream; - }; - C3D9D70731808C62AC7259A44F9C9975 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9B78EE4AF6AE03E79D88886319853FF7; - remoteInfo = Starscream; - }; - E369EFD3CD56910D6A837CC88DE06994 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A5F702E0DA383BC1479572581615A916; - remoteInfo = SwiftProtobuf; - }; - F57944C9ADC9EC20A9A94EFFA9CF0F3A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E47DDA8E7FA6D39367EB49EDE39118BE; - remoteInfo = cimsdk; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 048CFD06495DAD8C7806FA2B736D9FB1 /* JSONScanner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONScanner.swift; path = Sources/SwiftProtobuf/JSONScanner.swift; sourceTree = ""; }; - 05E46D7786A96622A5424AA229D9E345 /* JSONEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONEncoder.swift; path = Sources/SwiftProtobuf/JSONEncoder.swift; sourceTree = ""; }; - 067E0F1465343B240B9E4B66E3B5C691 /* JSONEncodingVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONEncodingVisitor.swift; path = Sources/SwiftProtobuf/JSONEncodingVisitor.swift; sourceTree = ""; }; - 072E76D369E1C45BA4B17EFC0612250F /* Google_Protobuf_Struct+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Struct+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Struct+Extensions.swift"; sourceTree = ""; }; - 07747750FFC28186241909CC76F30362 /* Starscream-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Starscream-dummy.m"; sourceTree = ""; }; - 0914B369497A327AF6F4023589BA684B /* Enum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Enum.swift; path = Sources/SwiftProtobuf/Enum.swift; sourceTree = ""; }; - 0C7FD6EC1DC58EAD91094C7E6088A915 /* Google_Protobuf_Value+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Value+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Value+Extensions.swift"; sourceTree = ""; }; - 13550BC5039C42A24F109D2C7BE88153 /* Pods-cimsdk_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-cimsdk_Example-acknowledgements.plist"; sourceTree = ""; }; - 17997AEE3DF674745BBA9B951AEF0C49 /* CustomJSONCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomJSONCodable.swift; path = Sources/SwiftProtobuf/CustomJSONCodable.swift; sourceTree = ""; }; - 1FF13E803CA27CC208720EB98565690C /* FieldTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldTypes.swift; path = Sources/SwiftProtobuf/FieldTypes.swift; sourceTree = ""; }; - 206E0DA8C482C08B597B874259766679 /* wrappers.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = wrappers.pb.swift; path = Sources/SwiftProtobuf/wrappers.pb.swift; sourceTree = ""; }; - 20EC88765660BDD10D81BBAB81747833 /* type.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = type.pb.swift; path = Sources/SwiftProtobuf/type.pb.swift; sourceTree = ""; }; - 21BECBAA0B806D584CCFB90A4C490FA5 /* SwiftProtobuf.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftProtobuf.modulemap; sourceTree = ""; }; - 21EEF14CDB5663D3DA584EAFC8E5D99C /* Starscream.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Starscream.modulemap; sourceTree = ""; }; - 21FB6A05BC81BB62FBFCD80D2849B058 /* MessageExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MessageExtension.swift; path = Sources/SwiftProtobuf/MessageExtension.swift; sourceTree = ""; }; - 22032E30ADCB65A4BCDE3EA9099058D4 /* Message+AnyAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Message+AnyAdditions.swift"; path = "Sources/SwiftProtobuf/Message+AnyAdditions.swift"; sourceTree = ""; }; - 224E60216AD47539194DF975F74FBEEF /* cimsdk.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = cimsdk.release.xcconfig; sourceTree = ""; }; - 2350E8103C6D0D796D124C7D2842575C /* Pods-cimsdk_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cimsdk_Example-umbrella.h"; sourceTree = ""; }; - 23A89465B5ABA4FE2853D106BFF3B690 /* UnsafeBufferPointer+Shims.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UnsafeBufferPointer+Shims.swift"; path = "Sources/SwiftProtobuf/UnsafeBufferPointer+Shims.swift"; sourceTree = ""; }; - 243E1943F94F7095B1E5F3EFAF67E418 /* cimsdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = cimsdk.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 266DC2B8A8562D7CEF11FBE0538B9641 /* BinaryDelimited.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDelimited.swift; path = Sources/SwiftProtobuf/BinaryDelimited.swift; sourceTree = ""; }; - 2CAAC1B10879148B4389E301074394BA /* ProtobufMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProtobufMap.swift; path = Sources/SwiftProtobuf/ProtobufMap.swift; sourceTree = ""; }; - 2E2B975988C4459DAC2B612C0668BBA8 /* SwiftProtobuf-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftProtobuf-dummy.m"; sourceTree = ""; }; - 2EEFD4C2967F14FFB6806E0D58E66C10 /* Transport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transport.swift; path = Sources/Transport/Transport.swift; sourceTree = ""; }; - 2F516453AA3E3E7FA940ED14F3751942 /* MessageProto.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageProto.pb.swift; sourceTree = ""; }; - 2F9A76F3A589723EA892F422D53AD525 /* timestamp.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = timestamp.pb.swift; path = Sources/SwiftProtobuf/timestamp.pb.swift; sourceTree = ""; }; - 31DDDE3FB2B69D7B954EC8ECFF1C0CDF /* UnknownStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnknownStorage.swift; path = Sources/SwiftProtobuf/UnknownStorage.swift; sourceTree = ""; }; - 31DEA4BBDEF1A1C86FEB6EA1EA823E01 /* Pods-cimsdk_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-cimsdk_Tests-Info.plist"; sourceTree = ""; }; - 336CB8450529FD556B75E0D8A62D4166 /* field_mask.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = field_mask.pb.swift; path = Sources/SwiftProtobuf/field_mask.pb.swift; sourceTree = ""; }; - 337FE378DDE985FB4BF8465C2E5A245D /* MathUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MathUtils.swift; path = Sources/SwiftProtobuf/MathUtils.swift; sourceTree = ""; }; - 338599B47723DADA2BA9CCC2E65CD3E7 /* Google_Protobuf_Any+Registry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Any+Registry.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Any+Registry.swift"; sourceTree = ""; }; - 3538FFEC941974E0CC9CEBB0B9DE1A93 /* cimsdk-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "cimsdk-Info.plist"; sourceTree = ""; }; - 358017ECCF8112B73ECA3E8F4169EBC4 /* Pong.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Pong.swift; sourceTree = ""; }; - 374E97D18C77B0696CC874246B0C9684 /* Pods-cimsdk_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cimsdk_Tests.debug.xcconfig"; sourceTree = ""; }; - 392AA33E012AFF245DAABF7B003BB3B1 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = Sources/Server/Server.swift; sourceTree = ""; }; - 3C5B5D463F4BA3FF98DBEB4518CE8D3C /* Message.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Message.swift; path = Sources/SwiftProtobuf/Message.swift; sourceTree = ""; }; - 3D343B6CB34452B31488528080D1747C /* Security.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Security.swift; path = Sources/Security/Security.swift; sourceTree = ""; }; - 3D612663877B17B0469CA4FF80F05ABA /* SwiftProtobuf-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftProtobuf-umbrella.h"; sourceTree = ""; }; - 3DE4737EB2672520AA0F3573A71A1EE6 /* JSONDecodingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONDecodingError.swift; path = Sources/SwiftProtobuf/JSONDecodingError.swift; sourceTree = ""; }; - 3E236C09E6371A7ACB65429F2866B88B /* ZigZag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZigZag.swift; path = Sources/SwiftProtobuf/ZigZag.swift; sourceTree = ""; }; - 3EA508679EC88DB96AB0E869CA1FEB32 /* SelectiveVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectiveVisitor.swift; path = Sources/SwiftProtobuf/SelectiveVisitor.swift; sourceTree = ""; }; - 42A61BC662AD35207E44F145CA32FB52 /* FrameCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameCollector.swift; path = Sources/Framer/FrameCollector.swift; sourceTree = ""; }; - 457BD29D1F158B8532C5D22B472D4AB1 /* Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Internal.swift; path = Sources/SwiftProtobuf/Internal.swift; sourceTree = ""; }; - 487824D03C199792A53925D18AC6D900 /* Pods_cimsdk_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_cimsdk_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4AB1229FFEB401AF9E9455C1E30C0E25 /* TextFormatEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatEncoder.swift; path = Sources/SwiftProtobuf/TextFormatEncoder.swift; sourceTree = ""; }; - 4AFF4DDF3DDB2DFF49007A2E64DA86D0 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - 4BCBFC95FA836C1D673D4BA7183FF21C /* FoundationTransport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FoundationTransport.swift; path = Sources/Transport/FoundationTransport.swift; sourceTree = ""; }; - 4C90A3D75CF13976D05F2D1D2B7FEA36 /* TextFormatEncodingVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatEncodingVisitor.swift; path = Sources/SwiftProtobuf/TextFormatEncodingVisitor.swift; sourceTree = ""; }; - 4C9738AB3C18E50D47A84876D1A243F2 /* Data+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extensions.swift"; path = "Sources/DataBytes/Data+Extensions.swift"; sourceTree = ""; }; - 4D8229289CF1EA850D0AC240D0E6A8EA /* NameMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NameMap.swift; path = Sources/SwiftProtobuf/NameMap.swift; sourceTree = ""; }; - 4E4CBF130619CB1CE281AD937AA6335E /* FoundationHTTPServerHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FoundationHTTPServerHandler.swift; path = Sources/Framer/FoundationHTTPServerHandler.swift; sourceTree = ""; }; - 4E75ED30A41372656738F2F80C30C0A0 /* Data+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extensions.swift"; path = "Sources/SwiftProtobuf/Data+Extensions.swift"; sourceTree = ""; }; - 512E089C9F7FE2BAA5E4EA51D5E75482 /* ExtensibleMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensibleMessage.swift; path = Sources/SwiftProtobuf/ExtensibleMessage.swift; sourceTree = ""; }; - 51DB1726DC65BFB84F37D7B690565F65 /* Pods-cimsdk_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-cimsdk_Example-acknowledgements.markdown"; sourceTree = ""; }; - 53A71C815B3B6742B0EA3CA770DCEB13 /* Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Compression.swift; path = Sources/Compression/Compression.swift; sourceTree = ""; }; - 5614ECA810A480033F384D59531106B5 /* TimeUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimeUtils.swift; path = Sources/SwiftProtobuf/TimeUtils.swift; sourceTree = ""; }; - 5A5B79472AFB630F5221D94994434321 /* SwiftProtobuf.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftProtobuf.debug.xcconfig; sourceTree = ""; }; - 5B00C146F9AD4156B759B0EAA7A96F44 /* Message+JSONArrayAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Message+JSONArrayAdditions.swift"; path = "Sources/SwiftProtobuf/Message+JSONArrayAdditions.swift"; sourceTree = ""; }; - 616B8DD7456F89C65056DC1124255270 /* HTTPHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHandler.swift; path = Sources/Framer/HTTPHandler.swift; sourceTree = ""; }; - 6198F4722E3DDD45E185BA01A0A265CD /* SwiftProtobuf.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftProtobuf.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 619BBBC802323BCFE364578C1433148E /* ExtensionMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensionMap.swift; path = Sources/SwiftProtobuf/ExtensionMap.swift; sourceTree = ""; }; - 626C0C14FF0BD0ED622F3C7FB5610C77 /* empty.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = empty.pb.swift; path = Sources/SwiftProtobuf/empty.pb.swift; sourceTree = ""; }; - 66B2983B894D0D64E6C41AA61BBACE98 /* TextFormatEncodingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatEncodingOptions.swift; path = Sources/SwiftProtobuf/TextFormatEncodingOptions.swift; sourceTree = ""; }; - 67C253BC98A73773AA61820EEFF95D81 /* FoundationHTTPHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FoundationHTTPHandler.swift; path = Sources/Framer/FoundationHTTPHandler.swift; sourceTree = ""; }; - 67C6E2B5028B59C0A93D741EBEA1E7B5 /* AnyUnpackError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyUnpackError.swift; path = Sources/SwiftProtobuf/AnyUnpackError.swift; sourceTree = ""; }; - 68AD01F78747EE30400BB1D424E1EEB8 /* SentBodyProto.proto */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.protobuf; path = SentBodyProto.proto; sourceTree = ""; }; - 68B5AA40400B1A8C005D7AC843CAC1CA /* SwiftProtobuf-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftProtobuf-prefix.pch"; sourceTree = ""; }; - 6930F55E62AB0610CFE964B77BDA8CD2 /* Visitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Visitor.swift; path = Sources/SwiftProtobuf/Visitor.swift; sourceTree = ""; }; - 6B91BBF14B81840544D1228D6974712C /* Starscream-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Starscream-Info.plist"; sourceTree = ""; }; - 6C81864A2E06B8B0820FF80B200CF8C9 /* Pods-cimsdk_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-cimsdk_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 6D0FADDF1890529666FAE7672E85FAFC /* Pods-cimsdk_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-cimsdk_Tests-acknowledgements.plist"; sourceTree = ""; }; - 703EBA079F9BB5F43C8A2E1B76A0C223 /* Starscream-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-prefix.pch"; sourceTree = ""; }; - 722D684972480674FB45A8C22C7DB7A9 /* cimsdk-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "cimsdk-umbrella.h"; sourceTree = ""; }; - 7299DBE9116764F71AD3FC09F191BB61 /* Google_Protobuf_NullValue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_NullValue+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_NullValue+Extensions.swift"; sourceTree = ""; }; - 745338BB910E2F384C8EB65D4720C016 /* WebMessageDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebMessageDecoder.swift; sourceTree = ""; }; - 7491E1EFC5AB1E87607DE2C31B0A76DA /* SwiftProtobuf-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftProtobuf-Info.plist"; sourceTree = ""; }; - 77377643A121E92B2D96552A06439C57 /* TextFormatScanner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatScanner.swift; path = Sources/SwiftProtobuf/TextFormatScanner.swift; sourceTree = ""; }; - 77DE5CB3E8CC7912EE9B356D89030797 /* Google_Protobuf_ListValue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_ListValue+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_ListValue+Extensions.swift"; sourceTree = ""; }; - 795BD9BD944A244D04DBC03EDE2EB321 /* CIMClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CIMClient.swift; sourceTree = ""; }; - 7C1EB02B68D7EDE32F331EFFC4536E8C /* Message+TextFormatAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Message+TextFormatAdditions.swift"; path = "Sources/SwiftProtobuf/Message+TextFormatAdditions.swift"; sourceTree = ""; }; - 7CCBFFEB0317C56C3EFF74176BAC0580 /* JSONDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONDecoder.swift; path = Sources/SwiftProtobuf/JSONDecoder.swift; sourceTree = ""; }; - 7D3ABA91AB3243A69A01E460548E38AD /* Varint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Varint.swift; path = Sources/SwiftProtobuf/Varint.swift; sourceTree = ""; }; - 7F1D440A2D0A1C52ECD3D3C2D4391D9C /* Starscream-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-umbrella.h"; sourceTree = ""; }; - 7F300D737E3DBF282D3134C3E843D5E2 /* JSONEncodingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONEncodingError.swift; path = Sources/SwiftProtobuf/JSONEncodingError.swift; sourceTree = ""; }; - 81ADD291E89D4C8DD69D03F893F4B2F2 /* cimsdk-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "cimsdk-dummy.m"; sourceTree = ""; }; - 8412F14585010556E1BD105415A1F102 /* MessageFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessageFactory.swift; sourceTree = ""; }; - 8471FD4E30F3E9741E5EB8FC59209651 /* descriptor.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = descriptor.pb.swift; path = Sources/SwiftProtobuf/descriptor.pb.swift; sourceTree = ""; }; - 861B558EF483F5DCCE54DC7DF17916E9 /* cimsdk.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = cimsdk.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 866CBB7B9E9CDBAD3831DBAEBEB80549 /* Pods-cimsdk_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-cimsdk_Example-Info.plist"; sourceTree = ""; }; - 891B2270823847ED23F2ECFC28F935EC /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8AD41007A30B520AAD49A4FFFF66A6CA /* Pods-cimsdk_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cimsdk_Example.release.xcconfig"; sourceTree = ""; }; - 8DA8A6397D62081809D9114418938925 /* WireFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WireFormat.swift; path = Sources/SwiftProtobuf/WireFormat.swift; sourceTree = ""; }; - 8E6F412BE8085AB8D51C297339E1D8BA /* WebMessageEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WebMessageEncoder.swift; sourceTree = ""; }; - 906D9975881FA66720DF6ECAD664E267 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 909640493C1FF4AFB31F2DB5452B1338 /* AnyMessageStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyMessageStorage.swift; path = Sources/SwiftProtobuf/AnyMessageStorage.swift; sourceTree = ""; }; - 91E6C5725A63925D9CF2207F6EE547E2 /* JSONDecodingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONDecodingOptions.swift; path = Sources/SwiftProtobuf/JSONDecodingOptions.swift; sourceTree = ""; }; - 93EB90BFB2173AE1690D4DE532AC63FC /* Pods-cimsdk_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cimsdk_Tests-umbrella.h"; sourceTree = ""; }; - 943D347E61A2E181A4FA2CA894307B6E /* SwiftProtobuf.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftProtobuf.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 958004DD58945106147713294657FC26 /* Pods-cimsdk_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-cimsdk_Tests-dummy.m"; sourceTree = ""; }; - 976F79BA1885D845AE7EB66D19F8B49D /* ReplyBody.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReplyBody.swift; sourceTree = ""; }; - 981BD6AFA7E2F9AFEEF1D6F176F52090 /* MessageProto.proto */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.protobuf; path = MessageProto.proto; sourceTree = ""; }; - 983CEA9ECE0674904642E263036047A9 /* cimsdk.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = cimsdk.modulemap; sourceTree = ""; }; - 9894096C19211C4468351CAF39A1A6F6 /* cimsdk-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "cimsdk-prefix.pch"; sourceTree = ""; }; - 9C80C63F5016C3BF4E34A5C5FB09BEB4 /* struct.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = struct.pb.swift; path = Sources/SwiftProtobuf/struct.pb.swift; sourceTree = ""; }; - 9CF72FBAFA5F2BCD1BE7C8DB28A6129B /* Starscream.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.release.xcconfig; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9EA7B7E2F2EA6E6B2821ACB8E1894E3B /* Pods-cimsdk_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-cimsdk_Example.modulemap"; sourceTree = ""; }; - A2D6EECCC2310FD0FB0B8A1A99E6635D /* Message+BinaryAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Message+BinaryAdditions.swift"; path = "Sources/SwiftProtobuf/Message+BinaryAdditions.swift"; sourceTree = ""; }; - A392ABF67DDB8705847CC545226EA4A7 /* SentBodyProto.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SentBodyProto.pb.swift; sourceTree = ""; }; - A85A9F3233182ADC2C6763D43F65FAAE /* source_context.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = source_context.pb.swift; path = Sources/SwiftProtobuf/source_context.pb.swift; sourceTree = ""; }; - AA0647E1C3992B5564A5EF0BA154D6A3 /* BinaryDecodingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDecodingOptions.swift; path = Sources/SwiftProtobuf/BinaryDecodingOptions.swift; sourceTree = ""; }; - AA8A69288E36995E658B3B56720468DD /* UnsafeRawPointer+Shims.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UnsafeRawPointer+Shims.swift"; path = "Sources/SwiftProtobuf/UnsafeRawPointer+Shims.swift"; sourceTree = ""; }; - AD1868F2488A7232BC4B99576404FB4E /* NativeEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NativeEngine.swift; path = Sources/Engine/NativeEngine.swift; sourceTree = ""; }; - AE9EE33226588159F52B40A7B15DB59F /* ReplyBodyProto.proto */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.protobuf; path = ReplyBodyProto.proto; sourceTree = ""; }; - B45907FAAF7C75C5CCE2056ED05D980C /* Pods-cimsdk_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-cimsdk_Example-frameworks.sh"; sourceTree = ""; }; - B4FB0E8C30289EB7B38920D3E3FC3712 /* TextFormatDecodingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatDecodingError.swift; path = Sources/SwiftProtobuf/TextFormatDecodingError.swift; sourceTree = ""; }; - B6767077CC8C410D22AF8069A9F9FD3F /* Ping.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Ping.swift; sourceTree = ""; }; - B6ADA59831A9128E86202D718ADC95E6 /* ProtoNameProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProtoNameProviding.swift; path = Sources/SwiftProtobuf/ProtoNameProviding.swift; sourceTree = ""; }; - B9450EE91EA1384C7F0F5EFD7DCDC455 /* Google_Protobuf_Timestamp+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Timestamp+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Timestamp+Extensions.swift"; sourceTree = ""; }; - BC092033AEEAB03DC9ED9807E0E60FD3 /* StringUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringUtils.swift; path = Sources/SwiftProtobuf/StringUtils.swift; sourceTree = ""; }; - BD67F119F0AA0B069BD98058128120B3 /* api.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = api.pb.swift; path = Sources/SwiftProtobuf/api.pb.swift; sourceTree = ""; }; - BDE5FD3E96524A89A788A413D0597868 /* Decoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Decoder.swift; path = Sources/SwiftProtobuf/Decoder.swift; sourceTree = ""; }; - BDEF45D5F264204D00914C5AE1FD1D0A /* ExtensionFields.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensionFields.swift; path = Sources/SwiftProtobuf/ExtensionFields.swift; sourceTree = ""; }; - BE4E493DBDB7C69A1368906661940DF1 /* BinaryEncodingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryEncodingError.swift; path = Sources/SwiftProtobuf/BinaryEncodingError.swift; sourceTree = ""; }; - BFBE2947AA0B3BC63551FC506CF7B6C4 /* Google_Protobuf_Any+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Any+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Any+Extensions.swift"; sourceTree = ""; }; - C014800A6B3BF1033A8BB230458E9F00 /* Starscream.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.debug.xcconfig; sourceTree = ""; }; - C06703B4F73FAFAE802660AA579CECB1 /* SwiftProtobuf.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftProtobuf.release.xcconfig; sourceTree = ""; }; - C098A76FB6530EF77618F610AD1770F7 /* Engine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Engine.swift; path = Sources/Engine/Engine.swift; sourceTree = ""; }; - C12E6F21590300057EAC8115196D6BD2 /* BinaryEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryEncoder.swift; path = Sources/SwiftProtobuf/BinaryEncoder.swift; sourceTree = ""; }; - C386162728C8737761AAAA01320EAA14 /* Google_Protobuf_FieldMask+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_FieldMask+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_FieldMask+Extensions.swift"; sourceTree = ""; }; - C3AA149E2FE8CD036AA71F59575B548A /* WSEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WSEngine.swift; path = Sources/Engine/WSEngine.swift; sourceTree = ""; }; - C523735DF4C07838CC4C52943DD4A35D /* Pods-cimsdk_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cimsdk_Example.debug.xcconfig"; sourceTree = ""; }; - C5BECC9EA5785878BAEAC85BAB44B880 /* BinaryDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDecoder.swift; path = Sources/SwiftProtobuf/BinaryDecoder.swift; sourceTree = ""; }; - C76A68388C0A1D50A49CFF2B6BDFA08F /* any.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = any.pb.swift; path = Sources/SwiftProtobuf/any.pb.swift; sourceTree = ""; }; - C8F3BA1E0C9C94E4805D1498C1C131D0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - CD4895BEB89EE4A398823B339064D162 /* TextFormatDecodingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatDecodingOptions.swift; path = Sources/SwiftProtobuf/TextFormatDecodingOptions.swift; sourceTree = ""; }; - D16B834AD6A0F64EABF777E857B6EAB2 /* Transportable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Transportable.swift; sourceTree = ""; }; - D5F8B138164FF58E98A0330F30490F41 /* SimpleExtensionMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SimpleExtensionMap.swift; path = Sources/SwiftProtobuf/SimpleExtensionMap.swift; sourceTree = ""; }; - D6584D36893718D607D050BBDD863D8F /* Message+JSONAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Message+JSONAdditions.swift"; path = "Sources/SwiftProtobuf/Message+JSONAdditions.swift"; sourceTree = ""; }; - D997270475BE11583DB56DFA8ED207D5 /* HashVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HashVisitor.swift; path = Sources/SwiftProtobuf/HashVisitor.swift; sourceTree = ""; }; - D9C714EC619747A0815CD9B7F3658B52 /* Pods-cimsdk_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cimsdk_Tests.release.xcconfig"; sourceTree = ""; }; - DE5CDDE61B584D60098FCBE064654C76 /* FoundationSecurity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FoundationSecurity.swift; path = Sources/Security/FoundationSecurity.swift; sourceTree = ""; }; - DEBF8057722E4BA5DF22133A7697BB12 /* duration.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = duration.pb.swift; path = Sources/SwiftProtobuf/duration.pb.swift; sourceTree = ""; }; - DF2B3839FCC670EF5A9F8F3A4BFD3245 /* Pods-cimsdk_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-cimsdk_Tests.modulemap"; sourceTree = ""; }; - E02A0C4CF493B74CBBBBA2C96E859119 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Version.swift; path = Sources/SwiftProtobuf/Version.swift; sourceTree = ""; }; - E02B2FE6296CE318D1F618692C030F96 /* BinaryEncodingSizeVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryEncodingSizeVisitor.swift; path = Sources/SwiftProtobuf/BinaryEncodingSizeVisitor.swift; sourceTree = ""; }; - E0EA1B2BA70297BA525B8C47E6625345 /* TCPTransport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TCPTransport.swift; path = Sources/Transport/TCPTransport.swift; sourceTree = ""; }; - E2A4FD39FED7CE765B34B44479F5ECD0 /* WSCompression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WSCompression.swift; path = Sources/Compression/WSCompression.swift; sourceTree = ""; }; - E453ABCDD4B89DC2E5F8DE16F0B2458D /* BinaryEncodingVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryEncodingVisitor.swift; path = Sources/SwiftProtobuf/BinaryEncodingVisitor.swift; sourceTree = ""; }; - E53C359EEA5E1C1360945160C05BB74B /* Pods_cimsdk_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_cimsdk_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E7F88F4983290158A5006E295C67935D /* ProtobufAPIVersionCheck.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProtobufAPIVersionCheck.swift; path = Sources/SwiftProtobuf/ProtobufAPIVersionCheck.swift; sourceTree = ""; }; - E8E10B112706C86000A09591 /* ConnectListener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectListener.swift; sourceTree = ""; }; - E8E10B132706C9C700A09591 /* MessageListener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageListener.swift; sourceTree = ""; }; - E8E10B152706CBE000A09591 /* MessageInterceptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageInterceptor.swift; sourceTree = ""; }; - E8E10B172706CD8D00A09591 /* MessageLogInterceptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageLogInterceptor.swift; sourceTree = ""; }; - E8E10B192706D2EA00A09591 /* WebsocketClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebsocketClient.swift; sourceTree = ""; }; - E8E10B1B2706D3CF00A09591 /* HeartInterceptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeartInterceptor.swift; sourceTree = ""; }; - E8E10B1D2706E54B00A09591 /* AutoReConnectInterceptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoReConnectInterceptor.swift; sourceTree = ""; }; - E8E10B212707025800A09591 /* CIMError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIMError.swift; sourceTree = ""; }; - E8E10B2327070F6900A09591 /* Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; - E9B701673282E69C742F56F55A0B1A73 /* Google_Protobuf_Wrappers+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Wrappers+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Wrappers+Extensions.swift"; sourceTree = ""; }; - EA3900630F9723F33C20EE93A517B0C5 /* translate.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = translate.sh; sourceTree = ""; }; - EA54B99A03A2D9AD4EBC7B1722757997 /* cimsdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = cimsdk.debug.xcconfig; sourceTree = ""; }; - EB2C4B4142AD62FF28E031B97F4EA660 /* Message.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = ""; }; - EC3BE25B7967E93FC968FDA95C503DF9 /* Framer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Framer.swift; path = Sources/Framer/Framer.swift; sourceTree = ""; }; - EF2DC51B372A8C01886C54BBD2257817 /* ExtensionFieldValueSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensionFieldValueSet.swift; path = Sources/SwiftProtobuf/ExtensionFieldValueSet.swift; sourceTree = ""; }; - F2BE2223BB71D0B1E3A834D6E933E311 /* JSONMapEncodingVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONMapEncodingVisitor.swift; path = Sources/SwiftProtobuf/JSONMapEncodingVisitor.swift; sourceTree = ""; }; - F51757D6D482ECF48C78FE56BE402654 /* Date+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Date+Extension.swift"; sourceTree = ""; }; - F552061A70D4E6DECFAA74D0E43D012F /* ReplyBodyProto.pb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReplyBodyProto.pb.swift; sourceTree = ""; }; - F5E0C8A0CD8280B9F217C16150DC4D19 /* ReplaceMe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplaceMe.swift; path = cimsdk/Classes/ReplaceMe.swift; sourceTree = ""; }; - F6585144F7A789C0CF7B1D4F5EC8A2F2 /* Google_Protobuf_Duration+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Google_Protobuf_Duration+Extensions.swift"; path = "Sources/SwiftProtobuf/Google_Protobuf_Duration+Extensions.swift"; sourceTree = ""; }; - F68A982B38B2C8ACDBD1CE6A708D093E /* JSONEncodingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONEncodingOptions.swift; path = Sources/SwiftProtobuf/JSONEncodingOptions.swift; sourceTree = ""; }; - F823016410CDEFABD49021C6A6259F7E /* SentBody.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SentBody.swift; sourceTree = ""; }; - F87AC24ED7FB09D03782FC192368C350 /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F8A10F63EC7AD9E3934E798CD28F1343 /* FieldTag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldTag.swift; path = Sources/SwiftProtobuf/FieldTag.swift; sourceTree = ""; }; - F9D947935B5C058CF0A479BAEBFC4378 /* Pods-cimsdk_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-cimsdk_Example-dummy.m"; sourceTree = ""; }; - FA68C999739BD776E3548D80BD528BA1 /* BinaryDecodingError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDecodingError.swift; path = Sources/SwiftProtobuf/BinaryDecodingError.swift; sourceTree = ""; }; - FA7C9CD587BAB1432D6F7ECA69D28F73 /* WebSocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = Sources/Starscream/WebSocket.swift; sourceTree = ""; }; - FB47958F76E2DF9A3B69009E1C3E5AC7 /* Constant.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Constant.swift; sourceTree = ""; }; - FBD0B9ED532E11AB128AC4C632EEFB49 /* DoubleParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DoubleParser.swift; path = Sources/SwiftProtobuf/DoubleParser.swift; sourceTree = ""; }; - FCB45540AD95201614942D90306FAE81 /* WebSocketServer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocketServer.swift; path = Sources/Server/WebSocketServer.swift; sourceTree = ""; }; - FDBE0914DEBF0B74B25FC604E8807D48 /* TextFormatDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextFormatDecoder.swift; path = Sources/SwiftProtobuf/TextFormatDecoder.swift; sourceTree = ""; }; - FF5599F07C207DCC7D2426B58DDF0923 /* StringHTTPHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringHTTPHandler.swift; path = Sources/Framer/StringHTTPHandler.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 3CF4B295F376349C4A7D1EBF5063250C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C404183F48E1E0E8BFF2E626A45331B5 /* Foundation.framework in Frameworks */, - 220E4052B975BCAE210D69D8C87EBE24 /* Starscream.framework in Frameworks */, - C37535FC3F928735A5FFD97ACEDD99E2 /* SwiftProtobuf.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4CCC188EBE5C479D0F07E724B622C03A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 822BCFA4BE6B71B18DF70B82A647603E /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4D6CDE0C73BB29EDCB4F1F8FA47923E8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 301FDAF0AA65309B9939E8C1DBF653BE /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 69AF2287CE2CD48F8568002AC5F93FC1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 17E016C98C6868BF2477C0CC3E20C6C1 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DB0CD3EA69E03509B5D10D963FC23982 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 2012FF1EEE0C42C17DDF4E80B9E08E22 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 00FC6557229227B6CC5186C3D7D002D2 /* Development Pods */ = { - isa = PBXGroup; - children = ( - CC1228DDCC889D524585DAF54425D1E3 /* cimsdk */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - 02E2FD1D2E166CE52C5C86397C047EDB /* MessageInterceptor */ = { - isa = PBXGroup; - children = ( - E8E10B112706C86000A09591 /* ConnectListener.swift */, - E8E10B132706C9C700A09591 /* MessageListener.swift */, - E8E10B152706CBE000A09591 /* MessageInterceptor.swift */, - E8E10B172706CD8D00A09591 /* MessageLogInterceptor.swift */, - E8E10B1B2706D3CF00A09591 /* HeartInterceptor.swift */, - E8E10B1D2706E54B00A09591 /* AutoReConnectInterceptor.swift */, - ); - name = MessageInterceptor; - path = cimsdk/Classes/MessageInterceptor; - sourceTree = ""; - }; - 06CFC0649081D0196442BACF484CDA53 /* iOS */ = { - isa = PBXGroup; - children = ( - C8F3BA1E0C9C94E4805D1498C1C131D0 /* Foundation.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 1219BEDFCB51392ADDC488DEA5DDFCAC /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 8EF2D3959FE9332593C5EF1DDE3B8DDA /* Pods-cimsdk_Example */, - AA4E91ECBB2B3A3D0E6FC468013D0FE3 /* Pods-cimsdk_Tests */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 19138ABA6CE3EBA43A47239446F1B256 /* proto */ = { - isa = PBXGroup; - children = ( - 981BD6AFA7E2F9AFEEF1D6F176F52090 /* MessageProto.proto */, - 2F516453AA3E3E7FA940ED14F3751942 /* MessageProto.pb.swift */, - AE9EE33226588159F52B40A7B15DB59F /* ReplyBodyProto.proto */, - F552061A70D4E6DECFAA74D0E43D012F /* ReplyBodyProto.pb.swift */, - 68AD01F78747EE30400BB1D424E1EEB8 /* SentBodyProto.proto */, - A392ABF67DDB8705847CC545226EA4A7 /* SentBodyProto.pb.swift */, - EA3900630F9723F33C20EE93A517B0C5 /* translate.sh */, - ); - path = proto; - sourceTree = ""; - }; - 1B26FC358D2913AC44EA142D45CE72DA /* Frameworks */ = { - isa = PBXGroup; - children = ( - F87AC24ED7FB09D03782FC192368C350 /* Starscream.framework */, - 6198F4722E3DDD45E185BA01A0A265CD /* SwiftProtobuf.framework */, - 06CFC0649081D0196442BACF484CDA53 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 2F56EE8E4BDADC76FD474D4FC7801023 /* Constant */ = { - isa = PBXGroup; - children = ( - FB47958F76E2DF9A3B69009E1C3E5AC7 /* Constant.swift */, - E8E10B212707025800A09591 /* CIMError.swift */, - ); - name = Constant; - path = cimsdk/Classes/Constant; - sourceTree = ""; - }; - 30AF28065654EFA69F73B7083FE63D35 /* Products */ = { - isa = PBXGroup; - children = ( - 243E1943F94F7095B1E5F3EFAF67E418 /* cimsdk.framework */, - 487824D03C199792A53925D18AC6D900 /* Pods_cimsdk_Example.framework */, - E53C359EEA5E1C1360945160C05BB74B /* Pods_cimsdk_Tests.framework */, - 891B2270823847ED23F2ECFC28F935EC /* Starscream.framework */, - 943D347E61A2E181A4FA2CA894307B6E /* SwiftProtobuf.framework */, - ); - name = Products; - sourceTree = ""; - }; - 4403DF078A27BCC376D0DA2CD2E4795E /* Pod */ = { - isa = PBXGroup; - children = ( - 861B558EF483F5DCCE54DC7DF17916E9 /* cimsdk.podspec */, - 4AFF4DDF3DDB2DFF49007A2E64DA86D0 /* LICENSE */, - 906D9975881FA66720DF6ECAD664E267 /* README.md */, - ); - name = Pod; - sourceTree = ""; - }; - 472F41D7E9BF033FB9A8A7E6E46B370E /* Model */ = { - isa = PBXGroup; - children = ( - E8E10B2327070F6900A09591 /* Account.swift */, - EB2C4B4142AD62FF28E031B97F4EA660 /* Message.swift */, - 8412F14585010556E1BD105415A1F102 /* MessageFactory.swift */, - B6767077CC8C410D22AF8069A9F9FD3F /* Ping.swift */, - 358017ECCF8112B73ECA3E8F4169EBC4 /* Pong.swift */, - 976F79BA1885D845AE7EB66D19F8B49D /* ReplyBody.swift */, - F823016410CDEFABD49021C6A6259F7E /* SentBody.swift */, - D16B834AD6A0F64EABF777E857B6EAB2 /* Transportable.swift */, - 19138ABA6CE3EBA43A47239446F1B256 /* proto */, - ); - name = Model; - path = cimsdk/Classes/Model; - sourceTree = ""; - }; - 4A7476F10F1BA3D5C5AECFBE5C8A9C68 /* SwiftProtobuf */ = { - isa = PBXGroup; - children = ( - C76A68388C0A1D50A49CFF2B6BDFA08F /* any.pb.swift */, - 909640493C1FF4AFB31F2DB5452B1338 /* AnyMessageStorage.swift */, - 67C6E2B5028B59C0A93D741EBEA1E7B5 /* AnyUnpackError.swift */, - BD67F119F0AA0B069BD98058128120B3 /* api.pb.swift */, - C5BECC9EA5785878BAEAC85BAB44B880 /* BinaryDecoder.swift */, - FA68C999739BD776E3548D80BD528BA1 /* BinaryDecodingError.swift */, - AA0647E1C3992B5564A5EF0BA154D6A3 /* BinaryDecodingOptions.swift */, - 266DC2B8A8562D7CEF11FBE0538B9641 /* BinaryDelimited.swift */, - C12E6F21590300057EAC8115196D6BD2 /* BinaryEncoder.swift */, - BE4E493DBDB7C69A1368906661940DF1 /* BinaryEncodingError.swift */, - E02B2FE6296CE318D1F618692C030F96 /* BinaryEncodingSizeVisitor.swift */, - E453ABCDD4B89DC2E5F8DE16F0B2458D /* BinaryEncodingVisitor.swift */, - 17997AEE3DF674745BBA9B951AEF0C49 /* CustomJSONCodable.swift */, - 4E75ED30A41372656738F2F80C30C0A0 /* Data+Extensions.swift */, - BDE5FD3E96524A89A788A413D0597868 /* Decoder.swift */, - 8471FD4E30F3E9741E5EB8FC59209651 /* descriptor.pb.swift */, - FBD0B9ED532E11AB128AC4C632EEFB49 /* DoubleParser.swift */, - DEBF8057722E4BA5DF22133A7697BB12 /* duration.pb.swift */, - 626C0C14FF0BD0ED622F3C7FB5610C77 /* empty.pb.swift */, - 0914B369497A327AF6F4023589BA684B /* Enum.swift */, - 512E089C9F7FE2BAA5E4EA51D5E75482 /* ExtensibleMessage.swift */, - BDEF45D5F264204D00914C5AE1FD1D0A /* ExtensionFields.swift */, - EF2DC51B372A8C01886C54BBD2257817 /* ExtensionFieldValueSet.swift */, - 619BBBC802323BCFE364578C1433148E /* ExtensionMap.swift */, - 336CB8450529FD556B75E0D8A62D4166 /* field_mask.pb.swift */, - F8A10F63EC7AD9E3934E798CD28F1343 /* FieldTag.swift */, - 1FF13E803CA27CC208720EB98565690C /* FieldTypes.swift */, - BFBE2947AA0B3BC63551FC506CF7B6C4 /* Google_Protobuf_Any+Extensions.swift */, - 338599B47723DADA2BA9CCC2E65CD3E7 /* Google_Protobuf_Any+Registry.swift */, - F6585144F7A789C0CF7B1D4F5EC8A2F2 /* Google_Protobuf_Duration+Extensions.swift */, - C386162728C8737761AAAA01320EAA14 /* Google_Protobuf_FieldMask+Extensions.swift */, - 77DE5CB3E8CC7912EE9B356D89030797 /* Google_Protobuf_ListValue+Extensions.swift */, - 7299DBE9116764F71AD3FC09F191BB61 /* Google_Protobuf_NullValue+Extensions.swift */, - 072E76D369E1C45BA4B17EFC0612250F /* Google_Protobuf_Struct+Extensions.swift */, - B9450EE91EA1384C7F0F5EFD7DCDC455 /* Google_Protobuf_Timestamp+Extensions.swift */, - 0C7FD6EC1DC58EAD91094C7E6088A915 /* Google_Protobuf_Value+Extensions.swift */, - E9B701673282E69C742F56F55A0B1A73 /* Google_Protobuf_Wrappers+Extensions.swift */, - D997270475BE11583DB56DFA8ED207D5 /* HashVisitor.swift */, - 457BD29D1F158B8532C5D22B472D4AB1 /* Internal.swift */, - 7CCBFFEB0317C56C3EFF74176BAC0580 /* JSONDecoder.swift */, - 3DE4737EB2672520AA0F3573A71A1EE6 /* JSONDecodingError.swift */, - 91E6C5725A63925D9CF2207F6EE547E2 /* JSONDecodingOptions.swift */, - 05E46D7786A96622A5424AA229D9E345 /* JSONEncoder.swift */, - 7F300D737E3DBF282D3134C3E843D5E2 /* JSONEncodingError.swift */, - F68A982B38B2C8ACDBD1CE6A708D093E /* JSONEncodingOptions.swift */, - 067E0F1465343B240B9E4B66E3B5C691 /* JSONEncodingVisitor.swift */, - F2BE2223BB71D0B1E3A834D6E933E311 /* JSONMapEncodingVisitor.swift */, - 048CFD06495DAD8C7806FA2B736D9FB1 /* JSONScanner.swift */, - 337FE378DDE985FB4BF8465C2E5A245D /* MathUtils.swift */, - 3C5B5D463F4BA3FF98DBEB4518CE8D3C /* Message.swift */, - 22032E30ADCB65A4BCDE3EA9099058D4 /* Message+AnyAdditions.swift */, - A2D6EECCC2310FD0FB0B8A1A99E6635D /* Message+BinaryAdditions.swift */, - D6584D36893718D607D050BBDD863D8F /* Message+JSONAdditions.swift */, - 5B00C146F9AD4156B759B0EAA7A96F44 /* Message+JSONArrayAdditions.swift */, - 7C1EB02B68D7EDE32F331EFFC4536E8C /* Message+TextFormatAdditions.swift */, - 21FB6A05BC81BB62FBFCD80D2849B058 /* MessageExtension.swift */, - 4D8229289CF1EA850D0AC240D0E6A8EA /* NameMap.swift */, - E7F88F4983290158A5006E295C67935D /* ProtobufAPIVersionCheck.swift */, - 2CAAC1B10879148B4389E301074394BA /* ProtobufMap.swift */, - B6ADA59831A9128E86202D718ADC95E6 /* ProtoNameProviding.swift */, - 3EA508679EC88DB96AB0E869CA1FEB32 /* SelectiveVisitor.swift */, - D5F8B138164FF58E98A0330F30490F41 /* SimpleExtensionMap.swift */, - A85A9F3233182ADC2C6763D43F65FAAE /* source_context.pb.swift */, - BC092033AEEAB03DC9ED9807E0E60FD3 /* StringUtils.swift */, - 9C80C63F5016C3BF4E34A5C5FB09BEB4 /* struct.pb.swift */, - FDBE0914DEBF0B74B25FC604E8807D48 /* TextFormatDecoder.swift */, - B4FB0E8C30289EB7B38920D3E3FC3712 /* TextFormatDecodingError.swift */, - CD4895BEB89EE4A398823B339064D162 /* TextFormatDecodingOptions.swift */, - 4AB1229FFEB401AF9E9455C1E30C0E25 /* TextFormatEncoder.swift */, - 66B2983B894D0D64E6C41AA61BBACE98 /* TextFormatEncodingOptions.swift */, - 4C90A3D75CF13976D05F2D1D2B7FEA36 /* TextFormatEncodingVisitor.swift */, - 77377643A121E92B2D96552A06439C57 /* TextFormatScanner.swift */, - 2F9A76F3A589723EA892F422D53AD525 /* timestamp.pb.swift */, - 5614ECA810A480033F384D59531106B5 /* TimeUtils.swift */, - 20EC88765660BDD10D81BBAB81747833 /* type.pb.swift */, - 31DDDE3FB2B69D7B954EC8ECFF1C0CDF /* UnknownStorage.swift */, - 23A89465B5ABA4FE2853D106BFF3B690 /* UnsafeBufferPointer+Shims.swift */, - AA8A69288E36995E658B3B56720468DD /* UnsafeRawPointer+Shims.swift */, - 7D3ABA91AB3243A69A01E460548E38AD /* Varint.swift */, - E02A0C4CF493B74CBBBBA2C96E859119 /* Version.swift */, - 6930F55E62AB0610CFE964B77BDA8CD2 /* Visitor.swift */, - 8DA8A6397D62081809D9114418938925 /* WireFormat.swift */, - 206E0DA8C482C08B597B874259766679 /* wrappers.pb.swift */, - 3E236C09E6371A7ACB65429F2866B88B /* ZigZag.swift */, - D21AFCC84DC40D84D2DE552CC078A017 /* Support Files */, - ); - path = SwiftProtobuf; - sourceTree = ""; - }; - 73E8D131C7FBBBAA3CEEF465358636A6 /* Extension */ = { - isa = PBXGroup; - children = ( - F51757D6D482ECF48C78FE56BE402654 /* Date+Extension.swift */, - ); - name = Extension; - path = cimsdk/Classes/Extension; - sourceTree = ""; - }; - 8B2B70B4AD5378625028C24DB8DBBF67 /* Support Files */ = { - isa = PBXGroup; - children = ( - 21EEF14CDB5663D3DA584EAFC8E5D99C /* Starscream.modulemap */, - 07747750FFC28186241909CC76F30362 /* Starscream-dummy.m */, - 6B91BBF14B81840544D1228D6974712C /* Starscream-Info.plist */, - 703EBA079F9BB5F43C8A2E1B76A0C223 /* Starscream-prefix.pch */, - 7F1D440A2D0A1C52ECD3D3C2D4391D9C /* Starscream-umbrella.h */, - C014800A6B3BF1033A8BB230458E9F00 /* Starscream.debug.xcconfig */, - 9CF72FBAFA5F2BCD1BE7C8DB28A6129B /* Starscream.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Starscream"; - sourceTree = ""; - }; - 8EF2D3959FE9332593C5EF1DDE3B8DDA /* Pods-cimsdk_Example */ = { - isa = PBXGroup; - children = ( - 9EA7B7E2F2EA6E6B2821ACB8E1894E3B /* Pods-cimsdk_Example.modulemap */, - 51DB1726DC65BFB84F37D7B690565F65 /* Pods-cimsdk_Example-acknowledgements.markdown */, - 13550BC5039C42A24F109D2C7BE88153 /* Pods-cimsdk_Example-acknowledgements.plist */, - F9D947935B5C058CF0A479BAEBFC4378 /* Pods-cimsdk_Example-dummy.m */, - B45907FAAF7C75C5CCE2056ED05D980C /* Pods-cimsdk_Example-frameworks.sh */, - 866CBB7B9E9CDBAD3831DBAEBEB80549 /* Pods-cimsdk_Example-Info.plist */, - 2350E8103C6D0D796D124C7D2842575C /* Pods-cimsdk_Example-umbrella.h */, - C523735DF4C07838CC4C52943DD4A35D /* Pods-cimsdk_Example.debug.xcconfig */, - 8AD41007A30B520AAD49A4FFFF66A6CA /* Pods-cimsdk_Example.release.xcconfig */, - ); - name = "Pods-cimsdk_Example"; - path = "Target Support Files/Pods-cimsdk_Example"; - sourceTree = ""; - }; - AA4E91ECBB2B3A3D0E6FC468013D0FE3 /* Pods-cimsdk_Tests */ = { - isa = PBXGroup; - children = ( - DF2B3839FCC670EF5A9F8F3A4BFD3245 /* Pods-cimsdk_Tests.modulemap */, - 6C81864A2E06B8B0820FF80B200CF8C9 /* Pods-cimsdk_Tests-acknowledgements.markdown */, - 6D0FADDF1890529666FAE7672E85FAFC /* Pods-cimsdk_Tests-acknowledgements.plist */, - 958004DD58945106147713294657FC26 /* Pods-cimsdk_Tests-dummy.m */, - 31DEA4BBDEF1A1C86FEB6EA1EA823E01 /* Pods-cimsdk_Tests-Info.plist */, - 93EB90BFB2173AE1690D4DE532AC63FC /* Pods-cimsdk_Tests-umbrella.h */, - 374E97D18C77B0696CC874246B0C9684 /* Pods-cimsdk_Tests.debug.xcconfig */, - D9C714EC619747A0815CD9B7F3658B52 /* Pods-cimsdk_Tests.release.xcconfig */, - ); - name = "Pods-cimsdk_Tests"; - path = "Target Support Files/Pods-cimsdk_Tests"; - sourceTree = ""; - }; - C4410E8EAD9CE748A1E745840918B789 /* Pods */ = { - isa = PBXGroup; - children = ( - F340EF02A7DB817796DD0E71000F7D8C /* Starscream */, - 4A7476F10F1BA3D5C5AECFBE5C8A9C68 /* SwiftProtobuf */, - ); - name = Pods; - sourceTree = ""; - }; - CC1228DDCC889D524585DAF54425D1E3 /* cimsdk */ = { - isa = PBXGroup; - children = ( - F5E0C8A0CD8280B9F217C16150DC4D19 /* ReplaceMe.swift */, - F6150B0C93B8E49B05EDBF0F22614B11 /* Coder */, - 2F56EE8E4BDADC76FD474D4FC7801023 /* Constant */, - F5B12DD4F9C8667A4F29EBC067126A36 /* Core */, - 73E8D131C7FBBBAA3CEEF465358636A6 /* Extension */, - 02E2FD1D2E166CE52C5C86397C047EDB /* MessageInterceptor */, - 472F41D7E9BF033FB9A8A7E6E46B370E /* Model */, - 4403DF078A27BCC376D0DA2CD2E4795E /* Pod */, - EA8B32F65E1E1CFD291741B94EB74204 /* Support Files */, - ); - name = cimsdk; - path = ../..; - sourceTree = ""; - }; - CF1408CF629C7361332E53B88F7BD30C = { - isa = PBXGroup; - children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 00FC6557229227B6CC5186C3D7D002D2 /* Development Pods */, - 1B26FC358D2913AC44EA142D45CE72DA /* Frameworks */, - C4410E8EAD9CE748A1E745840918B789 /* Pods */, - 30AF28065654EFA69F73B7083FE63D35 /* Products */, - 1219BEDFCB51392ADDC488DEA5DDFCAC /* Targets Support Files */, - ); - sourceTree = ""; - }; - D21AFCC84DC40D84D2DE552CC078A017 /* Support Files */ = { - isa = PBXGroup; - children = ( - 21BECBAA0B806D584CCFB90A4C490FA5 /* SwiftProtobuf.modulemap */, - 2E2B975988C4459DAC2B612C0668BBA8 /* SwiftProtobuf-dummy.m */, - 7491E1EFC5AB1E87607DE2C31B0A76DA /* SwiftProtobuf-Info.plist */, - 68B5AA40400B1A8C005D7AC843CAC1CA /* SwiftProtobuf-prefix.pch */, - 3D612663877B17B0469CA4FF80F05ABA /* SwiftProtobuf-umbrella.h */, - 5A5B79472AFB630F5221D94994434321 /* SwiftProtobuf.debug.xcconfig */, - C06703B4F73FAFAE802660AA579CECB1 /* SwiftProtobuf.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftProtobuf"; - sourceTree = ""; - }; - EA8B32F65E1E1CFD291741B94EB74204 /* Support Files */ = { - isa = PBXGroup; - children = ( - 983CEA9ECE0674904642E263036047A9 /* cimsdk.modulemap */, - 81ADD291E89D4C8DD69D03F893F4B2F2 /* cimsdk-dummy.m */, - 3538FFEC941974E0CC9CEBB0B9DE1A93 /* cimsdk-Info.plist */, - 9894096C19211C4468351CAF39A1A6F6 /* cimsdk-prefix.pch */, - 722D684972480674FB45A8C22C7DB7A9 /* cimsdk-umbrella.h */, - EA54B99A03A2D9AD4EBC7B1722757997 /* cimsdk.debug.xcconfig */, - 224E60216AD47539194DF975F74FBEEF /* cimsdk.release.xcconfig */, - ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/cimsdk"; - sourceTree = ""; - }; - F340EF02A7DB817796DD0E71000F7D8C /* Starscream */ = { - isa = PBXGroup; - children = ( - 53A71C815B3B6742B0EA3CA770DCEB13 /* Compression.swift */, - 4C9738AB3C18E50D47A84876D1A243F2 /* Data+Extensions.swift */, - C098A76FB6530EF77618F610AD1770F7 /* Engine.swift */, - 67C253BC98A73773AA61820EEFF95D81 /* FoundationHTTPHandler.swift */, - 4E4CBF130619CB1CE281AD937AA6335E /* FoundationHTTPServerHandler.swift */, - DE5CDDE61B584D60098FCBE064654C76 /* FoundationSecurity.swift */, - 4BCBFC95FA836C1D673D4BA7183FF21C /* FoundationTransport.swift */, - 42A61BC662AD35207E44F145CA32FB52 /* FrameCollector.swift */, - EC3BE25B7967E93FC968FDA95C503DF9 /* Framer.swift */, - 616B8DD7456F89C65056DC1124255270 /* HTTPHandler.swift */, - AD1868F2488A7232BC4B99576404FB4E /* NativeEngine.swift */, - 3D343B6CB34452B31488528080D1747C /* Security.swift */, - 392AA33E012AFF245DAABF7B003BB3B1 /* Server.swift */, - FF5599F07C207DCC7D2426B58DDF0923 /* StringHTTPHandler.swift */, - E0EA1B2BA70297BA525B8C47E6625345 /* TCPTransport.swift */, - 2EEFD4C2967F14FFB6806E0D58E66C10 /* Transport.swift */, - FA7C9CD587BAB1432D6F7ECA69D28F73 /* WebSocket.swift */, - FCB45540AD95201614942D90306FAE81 /* WebSocketServer.swift */, - E2A4FD39FED7CE765B34B44479F5ECD0 /* WSCompression.swift */, - C3AA149E2FE8CD036AA71F59575B548A /* WSEngine.swift */, - 8B2B70B4AD5378625028C24DB8DBBF67 /* Support Files */, - ); - path = Starscream; - sourceTree = ""; - }; - F5B12DD4F9C8667A4F29EBC067126A36 /* Core */ = { - isa = PBXGroup; - children = ( - 795BD9BD944A244D04DBC03EDE2EB321 /* CIMClient.swift */, - E8E10B192706D2EA00A09591 /* WebsocketClient.swift */, - ); - name = Core; - path = cimsdk/Classes/Core; - sourceTree = ""; - }; - F6150B0C93B8E49B05EDBF0F22614B11 /* Coder */ = { - isa = PBXGroup; - children = ( - 745338BB910E2F384C8EB65D4720C016 /* WebMessageDecoder.swift */, - 8E6F412BE8085AB8D51C297339E1D8BA /* WebMessageEncoder.swift */, - ); - name = Coder; - path = cimsdk/Classes/Coder; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 095F543FAFAB40FB73550DB7A28C08A7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7C0EBEEFC1B861271A74D828374917EC /* Pods-cimsdk_Tests-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4EFD2ECD0AE73BD949362B036B31169C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E404D0BD0FD45796191549E5789CAA1E /* cimsdk-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8FBCA80FAEACC5AC57CFF6DC4ED4EB1C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 99CC2D5DC15DBA9F5A494E76FF940B62 /* Starscream-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9453BBDBEC7841F4C2B81A77FE927769 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 6FA5F6421B16B6D187AA5017A086154A /* Pods-cimsdk_Example-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E222B5A06DD3E6512552C88347A2CB2C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 94F10F83AE563575832D38CBF62FFD3B /* SwiftProtobuf-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 4E5B96EF36CF42CE80F0D02EC7672DB5 /* Pods-cimsdk_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 783D5A7F6DEFC292D919CCE060F5F4AB /* Build configuration list for PBXNativeTarget "Pods-cimsdk_Tests" */; - buildPhases = ( - 095F543FAFAB40FB73550DB7A28C08A7 /* Headers */, - 7F5BAA1402CCFC1025A3F0484898DAE3 /* Sources */, - DB0CD3EA69E03509B5D10D963FC23982 /* Frameworks */, - E7480350A56733521F4DE17891AC7383 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C1D5FD32A1F2D0A8DEF84322046A8BC4 /* PBXTargetDependency */, - ); - name = "Pods-cimsdk_Tests"; - productName = "Pods-cimsdk_Tests"; - productReference = E53C359EEA5E1C1360945160C05BB74B /* Pods_cimsdk_Tests.framework */; - productType = "com.apple.product-type.framework"; - }; - 52CC9A0C85C680189A25B2E1E8630008 /* Pods-cimsdk_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1E1BA6C3624FFC2CF28B13FC4E7A016C /* Build configuration list for PBXNativeTarget "Pods-cimsdk_Example" */; - buildPhases = ( - 9453BBDBEC7841F4C2B81A77FE927769 /* Headers */, - 8AEC8D1E9E4C03BB905EAE11C4F11E8C /* Sources */, - 69AF2287CE2CD48F8568002AC5F93FC1 /* Frameworks */, - 7E3D61E28ED8A6AE51DB41DEA613BD0D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 946EFB3133182F71DF9020B8F1848798 /* PBXTargetDependency */, - 4003B2AB4DBF277DC9F2769DF55072D3 /* PBXTargetDependency */, - 1AD0D8C47E33A25C64A7E0F54D3CC74F /* PBXTargetDependency */, - ); - name = "Pods-cimsdk_Example"; - productName = "Pods-cimsdk_Example"; - productReference = 487824D03C199792A53925D18AC6D900 /* Pods_cimsdk_Example.framework */; - productType = "com.apple.product-type.framework"; - }; - 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */ = { - isa = PBXNativeTarget; - buildConfigurationList = 559ECA96064FF8D4E520C661A9B10569 /* Build configuration list for PBXNativeTarget "Starscream" */; - buildPhases = ( - 8FBCA80FAEACC5AC57CFF6DC4ED4EB1C /* Headers */, - E7E251548CC3ABEE63D68F3918C56EC9 /* Sources */, - 4CCC188EBE5C479D0F07E724B622C03A /* Frameworks */, - 5724CA8FBD0D73F2A54ABBE5AA5241A2 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Starscream; - productName = Starscream; - productReference = 891B2270823847ED23F2ECFC28F935EC /* Starscream.framework */; - productType = "com.apple.product-type.framework"; - }; - A5F702E0DA383BC1479572581615A916 /* SwiftProtobuf */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1E5A35574AF09A8C04DAD9F9BAF97CAD /* Build configuration list for PBXNativeTarget "SwiftProtobuf" */; - buildPhases = ( - E222B5A06DD3E6512552C88347A2CB2C /* Headers */, - ADD6ACBB61B44C7509D241C5A577EEF2 /* Sources */, - 4D6CDE0C73BB29EDCB4F1F8FA47923E8 /* Frameworks */, - C2565FA3B9A7BFC9A44A80184CEB77A5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SwiftProtobuf; - productName = SwiftProtobuf; - productReference = 943D347E61A2E181A4FA2CA894307B6E /* SwiftProtobuf.framework */; - productType = "com.apple.product-type.framework"; - }; - E47DDA8E7FA6D39367EB49EDE39118BE /* cimsdk */ = { - isa = PBXNativeTarget; - buildConfigurationList = 82EEA20CB0121EE137812D4E8F1F7468 /* Build configuration list for PBXNativeTarget "cimsdk" */; - buildPhases = ( - 4EFD2ECD0AE73BD949362B036B31169C /* Headers */, - F39298E8E65193FB7C7D54BAC3721B6E /* Sources */, - 3CF4B295F376349C4A7D1EBF5063250C /* Frameworks */, - 107B4BFDB33A6EA6FBC41AC7DCD2B3C6 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - F3FD7B31EE2D267297D816397B266FC8 /* PBXTargetDependency */, - 462386E962289E0FEE97E1F7ED37B1D4 /* PBXTargetDependency */, - ); - name = cimsdk; - productName = cimsdk; - productReference = 243E1943F94F7095B1E5F3EFAF67E418 /* cimsdk.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1100; - LastUpgradeCheck = 1100; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 30AF28065654EFA69F73B7083FE63D35 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - E47DDA8E7FA6D39367EB49EDE39118BE /* cimsdk */, - 52CC9A0C85C680189A25B2E1E8630008 /* Pods-cimsdk_Example */, - 4E5B96EF36CF42CE80F0D02EC7672DB5 /* Pods-cimsdk_Tests */, - 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */, - A5F702E0DA383BC1479572581615A916 /* SwiftProtobuf */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 107B4BFDB33A6EA6FBC41AC7DCD2B3C6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5724CA8FBD0D73F2A54ABBE5AA5241A2 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7E3D61E28ED8A6AE51DB41DEA613BD0D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C2565FA3B9A7BFC9A44A80184CEB77A5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E7480350A56733521F4DE17891AC7383 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 7F5BAA1402CCFC1025A3F0484898DAE3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3A3203EF37CD83686FB2AD42EFFBE24B /* Pods-cimsdk_Tests-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8AEC8D1E9E4C03BB905EAE11C4F11E8C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 65DCBFB0CBB4C8D4324459EF2C6A848C /* Pods-cimsdk_Example-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ADD6ACBB61B44C7509D241C5A577EEF2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7E7CCCF2BCC4195E84C84A058B0E075A /* any.pb.swift in Sources */, - C5F24FD19CCE6408CF75E28A90E05756 /* AnyMessageStorage.swift in Sources */, - A561B9D0156C65C2DAEBCE71DA2C53DF /* AnyUnpackError.swift in Sources */, - 7F7E1D8A5291B3D6474415C06801D57B /* api.pb.swift in Sources */, - FA22EE7CEF450AEB7765378565211A54 /* BinaryDecoder.swift in Sources */, - 33B5DB7D5A1E37A29969C66B3FE4A98C /* BinaryDecodingError.swift in Sources */, - F1F832231AE3985E324463E9ECD55838 /* BinaryDecodingOptions.swift in Sources */, - 6C57C1D467061A6BAB31511EF0F979AD /* BinaryDelimited.swift in Sources */, - 2B5E5DC81ED73B5FC422B2339D59F220 /* BinaryEncoder.swift in Sources */, - 809E9B520AFD0771BB71038413BF5F5F /* BinaryEncodingError.swift in Sources */, - 8BE806DD7A18B96C3FE52345CBDDEA88 /* BinaryEncodingSizeVisitor.swift in Sources */, - 4B7AF15082427E0E07DA5BC495F4F309 /* BinaryEncodingVisitor.swift in Sources */, - 1C9A2ACFCBB948407CF608663AAB2006 /* CustomJSONCodable.swift in Sources */, - 64BF9040E5C7FB8667FAA2DA426FA14A /* Data+Extensions.swift in Sources */, - A0978535A85D0ABD7853A0F3D3A374F8 /* Decoder.swift in Sources */, - A5760654DC6480FD5349822F7A5A564E /* descriptor.pb.swift in Sources */, - AA5BAFEE16421EF90FD54A4CA32D5A5E /* DoubleParser.swift in Sources */, - 04A09360324C4E3D58A91E0316DBFCD9 /* duration.pb.swift in Sources */, - 27A16A1A47A8BAFA7E594BE6C9EB1E88 /* empty.pb.swift in Sources */, - 8B7178B35E6AC89720BB13C477829AEE /* Enum.swift in Sources */, - CEE69724BC617259BD6CCD76E1264C45 /* ExtensibleMessage.swift in Sources */, - 38B8B519A9423BC18E06FF93F353A587 /* ExtensionFields.swift in Sources */, - 97E1041159122A0CD31833DBDD7A4D39 /* ExtensionFieldValueSet.swift in Sources */, - 5DC53D35039C2A64A86D102A02EB317D /* ExtensionMap.swift in Sources */, - 11DEEB57C07627A3403CD9BEE3BB2067 /* field_mask.pb.swift in Sources */, - 259BA8DDDCBF4751A69420DE52CD5C41 /* FieldTag.swift in Sources */, - 5FD1905A93213C67218EC852C14FEFC8 /* FieldTypes.swift in Sources */, - 69CAFF8A7FCDA7A383DB93091ABFB6BD /* Google_Protobuf_Any+Extensions.swift in Sources */, - 7E450FDF55944CC90FDA515024C2A810 /* Google_Protobuf_Any+Registry.swift in Sources */, - CB190229F12055E6703484E6ADD44957 /* Google_Protobuf_Duration+Extensions.swift in Sources */, - 0D9D0F76CDE875251CDF8F8CDE304C55 /* Google_Protobuf_FieldMask+Extensions.swift in Sources */, - A353CE6E7868A7C27530CB392F6EE164 /* Google_Protobuf_ListValue+Extensions.swift in Sources */, - CBCB7172A6D172C0C1A6B79A357B343F /* Google_Protobuf_NullValue+Extensions.swift in Sources */, - BDA9F6811D1580ACCB23889ADE665675 /* Google_Protobuf_Struct+Extensions.swift in Sources */, - D161D620532C3D5053A614F2FDBF9DB2 /* Google_Protobuf_Timestamp+Extensions.swift in Sources */, - 6410A9206AD6E96B1392292ED61E4100 /* Google_Protobuf_Value+Extensions.swift in Sources */, - 5B5F7F32B29BA04AD99B9231ABE2D5E4 /* Google_Protobuf_Wrappers+Extensions.swift in Sources */, - 485ED5DC9CEF727F94A9B93087D2B7F4 /* HashVisitor.swift in Sources */, - 0F196866334DA010A59361AB5BC8F620 /* Internal.swift in Sources */, - AA60D16E23144B1EE6F2EEC04467BEF4 /* JSONDecoder.swift in Sources */, - 311172653501A9A63A4891AECD616DD0 /* JSONDecodingError.swift in Sources */, - ECD2D5288E99B87DD90803BC67352068 /* JSONDecodingOptions.swift in Sources */, - F3B99A9638D12BD62ED2FC1FAAB947D4 /* JSONEncoder.swift in Sources */, - 74AC36056519E1696D8373590E570D46 /* JSONEncodingError.swift in Sources */, - F227A646427FC31045D5500E4662D0CF /* JSONEncodingOptions.swift in Sources */, - 81DA4F5F84660F59C7DCB937D121FE97 /* JSONEncodingVisitor.swift in Sources */, - 7724CA45CAC37563208007730FB2D4B4 /* JSONMapEncodingVisitor.swift in Sources */, - 289E1BB0A2A305B35238C9CF40A333DC /* JSONScanner.swift in Sources */, - C4D774FAA9A8B38404FDFA15230ADE1D /* MathUtils.swift in Sources */, - BB658F54DF19D4A60E12BF13E4BEF3DB /* Message+AnyAdditions.swift in Sources */, - 25422B5CCDE38C38B7850160D59070DE /* Message+BinaryAdditions.swift in Sources */, - 5124D90F3E8C2264F5F904B880E252BE /* Message+JSONAdditions.swift in Sources */, - 8841ECAF31A2E82762A83961C04FD2F0 /* Message+JSONArrayAdditions.swift in Sources */, - 0E69C16A6F0FD741C5A3E47DE288D210 /* Message+TextFormatAdditions.swift in Sources */, - E9D10B6577A2016878CC6373C6C86CE0 /* Message.swift in Sources */, - 1B8EA5FC8AF8CD71363B4DF2A788DEEE /* MessageExtension.swift in Sources */, - D0B4605FEE4D68E47DD8F1115FC2D4F9 /* NameMap.swift in Sources */, - AF50952CEE567CC2BF2503314F89F8A8 /* ProtobufAPIVersionCheck.swift in Sources */, - 066CD5B812B62BA16175A36CE621A167 /* ProtobufMap.swift in Sources */, - F1E0BB5DBA5393D8BAA4B0FBB03A9B87 /* ProtoNameProviding.swift in Sources */, - F4F8C02E43A0AE296FB83507B582BCEA /* SelectiveVisitor.swift in Sources */, - A306782DC125A83C5AF8D47C5BEE91AC /* SimpleExtensionMap.swift in Sources */, - 7D7E59D7667AFA1D2368A289F2E3A74A /* source_context.pb.swift in Sources */, - 067610D8E708BCE1B6C30E74313332E0 /* StringUtils.swift in Sources */, - DECB08BC5236EDA9B6B8BC9A6AB66D2A /* struct.pb.swift in Sources */, - FADC9DC2ED64824C3201923CA9A873BC /* SwiftProtobuf-dummy.m in Sources */, - DE368DD73909B1A11AEEC0A985F4C540 /* TextFormatDecoder.swift in Sources */, - 9700BC277A370438D5A39EE8455F8114 /* TextFormatDecodingError.swift in Sources */, - 27517E97FA894A4ECA5AE2AE5BD8830B /* TextFormatDecodingOptions.swift in Sources */, - 3EAD27947630860DF24FE1F57E717964 /* TextFormatEncoder.swift in Sources */, - 3D9D54BFB87F305B262115312973A761 /* TextFormatEncodingOptions.swift in Sources */, - D160E8E1FB946251AC041DA5F6A4A143 /* TextFormatEncodingVisitor.swift in Sources */, - 68730349221D00296B9692F0A495186C /* TextFormatScanner.swift in Sources */, - B1AE14625C1AA370FA24336948BBBE40 /* timestamp.pb.swift in Sources */, - 92C7080E4889E845FFA5C4F0048FC70D /* TimeUtils.swift in Sources */, - A9279E81A7C7E0A19A28B71840B8A6B3 /* type.pb.swift in Sources */, - B8C4123A152381BD2F8FF7C04B10A9DA /* UnknownStorage.swift in Sources */, - 6C39258AAA8906B9BAEE1BAF64492844 /* UnsafeBufferPointer+Shims.swift in Sources */, - 22153764D197F250775890A6B1E47351 /* UnsafeRawPointer+Shims.swift in Sources */, - CC06E899B113296F76CCC62687CCFDE1 /* Varint.swift in Sources */, - D2575BB9D350056D5DF177425F26A288 /* Version.swift in Sources */, - 3D6170DFAF288775DC288291FC04EA84 /* Visitor.swift in Sources */, - 7203B31C393204BF7C08AF811CBEA363 /* WireFormat.swift in Sources */, - A096A65BFDA5E88AE6E7667F64F3DB37 /* wrappers.pb.swift in Sources */, - C3015CEC822A6D87F4D750A076CC3FB8 /* ZigZag.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E7E251548CC3ABEE63D68F3918C56EC9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C07413B05F2A3CD997EBCE9D8EE5FD08 /* Compression.swift in Sources */, - 37E36C07C168E5737FBA757736AB1263 /* Data+Extensions.swift in Sources */, - 0A0E8476402B53B091B91A7DE07E0008 /* Engine.swift in Sources */, - DA25193E27ABCAC731A9549A566C5FDB /* FoundationHTTPHandler.swift in Sources */, - 190BC16FCBB53F6C6F2C0618B6BE7DDA /* FoundationHTTPServerHandler.swift in Sources */, - 946911E4FFC48BF8F84D076D258A1322 /* FoundationSecurity.swift in Sources */, - 19E712862F3F845060EA7DADEAD9BC59 /* FoundationTransport.swift in Sources */, - 36D1530899987EF165D0AFC6D2B9EAF2 /* FrameCollector.swift in Sources */, - 4572F22239A84AC23B262764D429E2EB /* Framer.swift in Sources */, - 894E47358149672D5810C31E4B64AF0D /* HTTPHandler.swift in Sources */, - CCDFE079D2DA1E51162E69A3A28BF23F /* NativeEngine.swift in Sources */, - F4D86DAACC44D52F4580AD0721D10459 /* Security.swift in Sources */, - 195E17A825CB18759C7D6511DACCB3E9 /* Server.swift in Sources */, - 703C0586C478A922E21934D3B149A71E /* Starscream-dummy.m in Sources */, - 1BCEC1C72A76476B70CE4B032A9D9B32 /* StringHTTPHandler.swift in Sources */, - 359D3455A362843977E8E3076B7D8162 /* TCPTransport.swift in Sources */, - C2809B4763602D15A7384398343AE406 /* Transport.swift in Sources */, - 0CC54E4D0945262C1B835B699345B034 /* WebSocket.swift in Sources */, - C808D0298CC1CD6C13E283663535B259 /* WebSocketServer.swift in Sources */, - 793D18E42CC454D1C4225339797DB9EB /* WSCompression.swift in Sources */, - 4D322C7978617308B276D6F4902C2335 /* WSEngine.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F39298E8E65193FB7C7D54BAC3721B6E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5119FDA29109DD57C9A5040A264B4794 /* CIMClient.swift in Sources */, - D8689BE762D1845E7796FB8430CF0C12 /* cimsdk-dummy.m in Sources */, - E8E10B1A2706D2EA00A09591 /* WebsocketClient.swift in Sources */, - 01BB21813DC5EA743DC9750D5301DA01 /* Constant.swift in Sources */, - E8E10B1C2706D3CF00A09591 /* HeartInterceptor.swift in Sources */, - E8E10B2427070F6900A09591 /* Account.swift in Sources */, - 3E925F93A435B48FE86620988C39F551 /* Date+Extension.swift in Sources */, - D99A061996AEB317D7D137C320B3F5E9 /* Message.swift in Sources */, - 579C34CE35184A7591B5BD9B2F499033 /* MessageFactory.swift in Sources */, - 7749B1FD9E5FB8F3B34365527354FBDC /* MessageProto.pb.swift in Sources */, - E8E10B162706CBE000A09591 /* MessageInterceptor.swift in Sources */, - E8E10B182706CD8D00A09591 /* MessageLogInterceptor.swift in Sources */, - 3C89065008FF7D8DEF1DDAC3D7A5E042 /* MessageProto.proto in Sources */, - E65415E0BF320B09CF4411DCE7F8F811 /* Ping.swift in Sources */, - E8B8A666DC0251E5861F59C52C674F88 /* Pong.swift in Sources */, - DB1AC33002E6BD6059A74D6168C6B84E /* ReplaceMe.swift in Sources */, - F367C8E3EC417B2180FCCB7AE609E7DF /* ReplyBody.swift in Sources */, - 878D5A96F2E1CBF9DA0A8AE12EA55971 /* ReplyBodyProto.pb.swift in Sources */, - 837A52FA0FC7AF31FC412171AEC106E6 /* ReplyBodyProto.proto in Sources */, - DF6FB0651A2159142D73399EAF84C125 /* SentBody.swift in Sources */, - E8E10B122706C86000A09591 /* ConnectListener.swift in Sources */, - 9B18DC8E1A18947FD1F0536ECE454237 /* SentBodyProto.pb.swift in Sources */, - EEEEB721D87A819B958C75BE4372A508 /* SentBodyProto.proto in Sources */, - 53C3923D44B35F56A523AC3ABDA8AFAA /* translate.sh in Sources */, - 85F80CC5ED316689434C317C2591E1C1 /* Transportable.swift in Sources */, - 81CE32D4E0636ABDE9C3BCF3F61CE35C /* WebMessageDecoder.swift in Sources */, - E8E10B142706C9C800A09591 /* MessageListener.swift in Sources */, - E8E10B222707025800A09591 /* CIMError.swift in Sources */, - E8E10B1E2706E54B00A09591 /* AutoReConnectInterceptor.swift in Sources */, - DDAC8FC07F42F37AD192BDAEA3EE5339 /* WebMessageEncoder.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 1AD0D8C47E33A25C64A7E0F54D3CC74F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = cimsdk; - target = E47DDA8E7FA6D39367EB49EDE39118BE /* cimsdk */; - targetProxy = F57944C9ADC9EC20A9A94EFFA9CF0F3A /* PBXContainerItemProxy */; - }; - 4003B2AB4DBF277DC9F2769DF55072D3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftProtobuf; - target = A5F702E0DA383BC1479572581615A916 /* SwiftProtobuf */; - targetProxy = E369EFD3CD56910D6A837CC88DE06994 /* PBXContainerItemProxy */; - }; - 462386E962289E0FEE97E1F7ED37B1D4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftProtobuf; - target = A5F702E0DA383BC1479572581615A916 /* SwiftProtobuf */; - targetProxy = 76499D10A5F7CBA19F4B90A31DCF68FF /* PBXContainerItemProxy */; - }; - 946EFB3133182F71DF9020B8F1848798 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Starscream; - target = 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */; - targetProxy = C3D9D70731808C62AC7259A44F9C9975 /* PBXContainerItemProxy */; - }; - C1D5FD32A1F2D0A8DEF84322046A8BC4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Pods-cimsdk_Example"; - target = 52CC9A0C85C680189A25B2E1E8630008 /* Pods-cimsdk_Example */; - targetProxy = 1F21564FB0AE1CDE31FA390323FD64B2 /* PBXContainerItemProxy */; - }; - F3FD7B31EE2D267297D816397B266FC8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Starscream; - target = 9B78EE4AF6AE03E79D88886319853FF7 /* Starscream */; - targetProxy = A889F048CB6CDF66588A0CE1FB89AC62 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 3771552AD5BE2C945A4902C237E15487 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C523735DF4C07838CC4C52943DD4A35D /* Pods-cimsdk_Example.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 3CEF5F2CC78E4437FC4218866CA1F79D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 374E97D18C77B0696CC874246B0C9684 /* Pods-cimsdk_Tests.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 3D91D62D6E4D68B47B3D40F9D27BA986 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 224E60216AD47539194DF975F74FBEEF /* cimsdk.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/cimsdk/cimsdk-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/cimsdk/cimsdk-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/cimsdk/cimsdk.modulemap"; - PRODUCT_MODULE_NAME = cimsdk; - PRODUCT_NAME = cimsdk; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 3DC675C2AEF6C5B2C89BA145E9B76D4A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C06703B4F73FAFAE802660AA579CECB1 /* SwiftProtobuf.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SwiftProtobuf/SwiftProtobuf-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftProtobuf/SwiftProtobuf-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftProtobuf/SwiftProtobuf.modulemap"; - PRODUCT_MODULE_NAME = SwiftProtobuf; - PRODUCT_NAME = SwiftProtobuf; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 438CB2662C374641469DF0A7C74C6EDF /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8AD41007A30B520AAD49A4FFFF66A6CA /* Pods-cimsdk_Example.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 5EB582B7263201AEC7954D4829953284 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9CF72FBAFA5F2BCD1BE7C8DB28A6129B /* Starscream.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Starscream/Starscream-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; - PRODUCT_MODULE_NAME = Starscream; - PRODUCT_NAME = Starscream; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8B64069D63789EF70DFD246A4BECDC27 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EA54B99A03A2D9AD4EBC7B1722757997 /* cimsdk.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/cimsdk/cimsdk-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/cimsdk/cimsdk-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/cimsdk/cimsdk.modulemap"; - PRODUCT_MODULE_NAME = cimsdk; - PRODUCT_NAME = cimsdk; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 99491276889077FD01AA3B307FBE4F2D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C014800A6B3BF1033A8BB230458E9F00 /* Starscream.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Starscream/Starscream-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; - PRODUCT_MODULE_NAME = Starscream; - PRODUCT_NAME = Starscream; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - A2BEB2E8D2EAC1223CD20E0895B0673D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D9C714EC619747A0815CD9B7F3658B52 /* Pods-cimsdk_Tests.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - B645EE3BA4D7A53C88BCF9C4CC2F8779 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5A5B79472AFB630F5221D94994434321 /* SwiftProtobuf.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SwiftProtobuf/SwiftProtobuf-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftProtobuf/SwiftProtobuf-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftProtobuf/SwiftProtobuf.modulemap"; - PRODUCT_MODULE_NAME = SwiftProtobuf; - PRODUCT_NAME = SwiftProtobuf; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1E1BA6C3624FFC2CF28B13FC4E7A016C /* Build configuration list for PBXNativeTarget "Pods-cimsdk_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3771552AD5BE2C945A4902C237E15487 /* Debug */, - 438CB2662C374641469DF0A7C74C6EDF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1E5A35574AF09A8C04DAD9F9BAF97CAD /* Build configuration list for PBXNativeTarget "SwiftProtobuf" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B645EE3BA4D7A53C88BCF9C4CC2F8779 /* Debug */, - 3DC675C2AEF6C5B2C89BA145E9B76D4A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */, - CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 559ECA96064FF8D4E520C661A9B10569 /* Build configuration list for PBXNativeTarget "Starscream" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 99491276889077FD01AA3B307FBE4F2D /* Debug */, - 5EB582B7263201AEC7954D4829953284 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 783D5A7F6DEFC292D919CCE060F5F4AB /* Build configuration list for PBXNativeTarget "Pods-cimsdk_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3CEF5F2CC78E4437FC4218866CA1F79D /* Debug */, - A2BEB2E8D2EAC1223CD20E0895B0673D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 82EEA20CB0121EE137812D4E8F1F7468 /* Build configuration list for PBXNativeTarget "cimsdk" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8B64069D63789EF70DFD246A4BECDC27 /* Debug */, - 3D91D62D6E4D68B47B3D40F9D27BA986 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/LICENSE b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/LICENSE deleted file mode 100644 index d6ab2f1..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - Copyright (c) 2014-2016 Dalton Cherry. - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. \ No newline at end of file diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/README.md b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/README.md deleted file mode 100644 index 634723a..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/README.md +++ /dev/null @@ -1,308 +0,0 @@ -![starscream](https://raw.githubusercontent.com/daltoniam/starscream/assets/starscream.jpg) - -Starscream is a conforming WebSocket ([RFC 6455](http://tools.ietf.org/html/rfc6455)) library in Swift. - -## Features - -- Conforms to all of the base [Autobahn test suite](https://crossbar.io/autobahn/). -- Nonblocking. Everything happens in the background, thanks to GCD. -- TLS/WSS support. -- Compression Extensions support ([RFC 7692](https://tools.ietf.org/html/rfc7692)) - -### Import the framework - -First thing is to import the framework. See the Installation instructions on how to add the framework to your project. - -```swift -import Starscream -``` - -### Connect to the WebSocket Server - -Once imported, you can open a connection to your WebSocket server. Note that `socket` is probably best as a property, so it doesn't get deallocated right after being setup. - -```swift -var request = URLRequest(url: URL(string: "http://localhost:8080")!) -request.timeoutInterval = 5 -socket = WebSocket(request: request) -socket.delegate = self -socket.connect() -``` - -After you are connected, there is either a delegate or closure you can use for process WebSocket events. - -### Receiving data from a WebSocket - -`didReceive` receives all the WebSocket events in a single easy to handle enum. - -```swift -func didReceive(event: WebSocketEvent, client: WebSocket) { - switch event { - case .connected(let headers): - isConnected = true - print("websocket is connected: \(headers)") - case .disconnected(let reason, let code): - isConnected = false - print("websocket is disconnected: \(reason) with code: \(code)") - case .text(let string): - print("Received text: \(string)") - case .binary(let data): - print("Received data: \(data.count)") - case .ping(_): - break - case .pong(_): - break - case .viabilityChanged(_): - break - case .reconnectSuggested(_): - break - case .cancelled: - isConnected = false - case .error(let error): - isConnected = false - handleError(error) - } -} -``` - -The closure of this would be: - -```swift -socket.onEvent = { event in - switch event { - // handle events just like above... - } -} -``` - -### Writing to a WebSocket - -### write a binary frame - -The writeData method gives you a simple way to send `Data` (binary) data to the server. - -```swift -socket.write(data: data) //write some Data over the socket! -``` - -### write a string frame - -The writeString method is the same as writeData, but sends text/string. - -```swift -socket.write(string: "Hi Server!") //example on how to write text over the socket! -``` - -### write a ping frame - -The writePing method is the same as write, but sends a ping control frame. - -```swift -socket.write(ping: Data()) //example on how to write a ping control frame over the socket! -``` - -### write a pong frame - - -the writePong method is the same as writePing, but sends a pong control frame. - -```swift -socket.write(pong: Data()) //example on how to write a pong control frame over the socket! -``` - -Starscream will automatically respond to incoming `ping` control frames so you do not need to manually send `pong`s. - -However if for some reason you need to control this process you can turn off the automatic `ping` response by disabling `respondToPingWithPong`. - -```swift -socket.respondToPingWithPong = false //Do not automaticaly respond to incoming pings with pongs. -``` - -In most cases you will not need to do this. - -### disconnect - -The disconnect method does what you would expect and closes the socket. - -```swift -socket.disconnect() -``` - -The disconnect method can also send a custom close code if desired. - -```swift -socket.disconnect(closeCode: CloseCode.normal.rawValue) -``` - -### Custom Headers, Protocols and Timeout - -You can override the default websocket headers, add your own custom ones and set a timeout: - -```swift -var request = URLRequest(url: URL(string: "ws://localhost:8080/")!) -request.timeoutInterval = 5 // Sets the timeout for the connection -request.setValue("someother protocols", forHTTPHeaderField: "Sec-WebSocket-Protocol") -request.setValue("14", forHTTPHeaderField: "Sec-WebSocket-Version") -request.setValue("chat,superchat", forHTTPHeaderField: "Sec-WebSocket-Protocol") -request.setValue("Everything is Awesome!", forHTTPHeaderField: "My-Awesome-Header") -let socket = WebSocket(request: request) -``` - -### SSL Pinning - -SSL Pinning is also supported in Starscream. - - -Allow Self-signed certificates: - -```swift -var request = URLRequest(url: URL(string: "ws://localhost:8080/")!) -let pinner = FoundationSecurity(allowSelfSigned: true) // don't validate SSL certificates -let socket = WebSocket(request: request, certPinner: pinner) -``` - -TODO: Update docs on how to load certificates and public keys into an app bundle, use the builtin pinner and TrustKit. - -### Compression Extensions - -Compression Extensions ([RFC 7692](https://tools.ietf.org/html/rfc7692)) is supported in Starscream. Compression is enabled by default, however compression will only be used if it is supported by the server as well. You may enable or disable compression via the `.enableCompression` property: - -```swift -var request = URLRequest(url: URL(string: "ws://localhost:8080/")!) -let compression = WSCompression() -let socket = WebSocket(request: request, compressionHandler: compression) -``` - -Compression should be disabled if your application is transmitting already-compressed, random, or other uncompressable data. - -### Custom Queue - -A custom queue can be specified when delegate methods are called. By default `DispatchQueue.main` is used, thus making all delegate methods calls run on the main thread. It is important to note that all WebSocket processing is done on a background thread, only the delegate method calls are changed when modifying the queue. The actual processing is always on a background thread and will not pause your app. - -```swift -socket = WebSocket(url: URL(string: "ws://localhost:8080/")!, protocols: ["chat","superchat"]) -//create a custom queue -socket.callbackQueue = DispatchQueue(label: "com.vluxe.starscream.myapp") -``` - -## Example Project - -Check out the SimpleTest project in the examples directory to see how to setup a simple connection to a WebSocket server. - -## Requirements - -Starscream works with iOS 8/10.10 or above for CocoaPods/framework support. To use Starscream with a project targeting iOS 7, you must include all Swift files directly in your project. - -## Installation - -### CocoaPods - -Check out [Get Started](http://cocoapods.org/) tab on [cocoapods.org](http://cocoapods.org/). - -To use Starscream in your project add the following 'Podfile' to your project - - source 'https://github.com/CocoaPods/Specs.git' - platform :ios, '9.0' - use_frameworks! - - pod 'Starscream', '~> 4.0.0' - -Then run: - - pod install - -### Carthage - -Check out the [Carthage](https://github.com/Carthage/Carthage) docs on how to add a install. The `Starscream` framework is already setup with shared schemes. - -[Carthage Install](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) - -You can install Carthage with [Homebrew](http://brew.sh/) using the following command: - -```bash -$ brew update -$ brew install carthage -``` - -To integrate Starscream into your Xcode project using Carthage, specify it in your `Cartfile`: - -``` -github "daltoniam/Starscream" >= 4.0.0 -``` - -### Accio - -Check out the [Accio](https://github.com/JamitLabs/Accio) docs on how to add a install. - -Add the following to your Package.swift: - -```swift -.package(url: "https://github.com/daltoniam/Starscream.git", .upToNextMajor(from: "4.0.0")), -``` - -Next, add `Starscream` to your App targets dependencies like so: - -```swift -.target( - name: "App", - dependencies: [ - "Starscream", - ] -), -``` - -Then run `accio update`. - -### Rogue - -First see the [installation docs](https://github.com/acmacalister/Rogue) for how to install Rogue. - -To install Starscream run the command below in the directory you created the rogue file. - -``` -rogue add https://github.com/daltoniam/Starscream -``` - -Next open the `libs` folder and add the `Starscream.xcodeproj` to your Xcode project. Once that is complete, in your "Build Phases" add the `Starscream.framework` to your "Link Binary with Libraries" phase. Make sure to add the `libs` folder to your `.gitignore` file. - -### Swift Package Manager - -The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. - -Once you have your Swift package set up, adding Starscream as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. - -```swift -dependencies: [ - .Package(url: "https://github.com/daltoniam/Starscream.git", majorVersion: 4) -] -``` - -### Other - -Simply grab the framework (either via git submodule or another package manager). - -Add the `Starscream.xcodeproj` to your Xcode project. Once that is complete, in your "Build Phases" add the `Starscream.framework` to your "Link Binary with Libraries" phase. - -### Add Copy Frameworks Phase - -If you are running this in an OSX app or on a physical iOS device you will need to make sure you add the `Starscream.framework` to be included in your app bundle. To do this, in Xcode, navigate to the target configuration window by clicking on the blue project icon, and selecting the application target under the "Targets" heading in the sidebar. In the tab bar at the top of that window, open the "Build Phases" panel. Expand the "Link Binary with Libraries" group, and add `Starscream.framework`. Click on the + button at the top left of the panel and select "New Copy Files Phase". Rename this new phase to "Copy Frameworks", set the "Destination" to "Frameworks", and add `Starscream.framework` respectively. - -## TODOs - -- [ ] Proxy support - -## License - -Starscream is licensed under the Apache v2 License. - -## Contact - -### Dalton Cherry -* https://github.com/daltoniam -* http://twitter.com/daltoniam -* http://daltoniam.com - -### Austin Cherry ### -* https://github.com/acmacalister -* http://twitter.com/acmacalister -* http://austincherry.me diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Compression/Compression.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Compression/Compression.swift deleted file mode 100644 index 0e7fae5..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Compression/Compression.swift +++ /dev/null @@ -1,29 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Compression.swift -// Starscream -// -// Created by Dalton Cherry on 2/4/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -public protocol CompressionHandler { - func load(headers: [String: String]) - func decompress(data: Data, isFinal: Bool) -> Data? - func compress(data: Data) -> Data? -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Compression/WSCompression.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Compression/WSCompression.swift deleted file mode 100644 index 2129584..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Compression/WSCompression.swift +++ /dev/null @@ -1,247 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// WSCompression.swift -// -// Created by Joseph Ross on 7/16/14. -// Copyright © 2017 Joseph Ross & Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Compression implementation is implemented in conformance with RFC 7692 Compression Extensions -// for WebSocket: https://tools.ietf.org/html/rfc7692 -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation -import zlib - -public class WSCompression: CompressionHandler { - let headerWSExtensionName = "Sec-WebSocket-Extensions" - var decompressor: Decompressor? - var compressor: Compressor? - var decompressorTakeOver = false - var compressorTakeOver = false - - public init() { - - } - - public func load(headers: [String: String]) { - guard let extensionHeader = headers[headerWSExtensionName] else { return } - decompressorTakeOver = false - compressorTakeOver = false - - let parts = extensionHeader.components(separatedBy: ";") - for p in parts { - let part = p.trimmingCharacters(in: .whitespaces) - if part.hasPrefix("server_max_window_bits=") { - let valString = part.components(separatedBy: "=")[1] - if let val = Int(valString.trimmingCharacters(in: .whitespaces)) { - decompressor = Decompressor(windowBits: val) - } - } else if part.hasPrefix("client_max_window_bits=") { - let valString = part.components(separatedBy: "=")[1] - if let val = Int(valString.trimmingCharacters(in: .whitespaces)) { - compressor = Compressor(windowBits: val) - } - } else if part == "client_no_context_takeover" { - compressorTakeOver = true - } else if part == "server_no_context_takeover" { - decompressorTakeOver = true - } - } - } - - public func decompress(data: Data, isFinal: Bool) -> Data? { - guard let decompressor = decompressor else { return nil } - do { - let decompressedData = try decompressor.decompress(data, finish: isFinal) - if decompressorTakeOver { - try decompressor.reset() - } - return decompressedData - } catch { - //do nothing with the error for now - } - return nil - } - - public func compress(data: Data) -> Data? { - guard let compressor = compressor else { return nil } - do { - let compressedData = try compressor.compress(data) - if compressorTakeOver { - try compressor.reset() - } - return compressedData - } catch { - //do nothing with the error for now - } - return nil - } - - -} - -class Decompressor { - private var strm = z_stream() - private var buffer = [UInt8](repeating: 0, count: 0x2000) - private var inflateInitialized = false - private let windowBits: Int - - init?(windowBits: Int) { - self.windowBits = windowBits - guard initInflate() else { return nil } - } - - private func initInflate() -> Bool { - if Z_OK == inflateInit2_(&strm, -CInt(windowBits), - ZLIB_VERSION, CInt(MemoryLayout.size)) - { - inflateInitialized = true - return true - } - return false - } - - func reset() throws { - teardownInflate() - guard initInflate() else { throw WSError(type: .compressionError, message: "Error for decompressor on reset", code: 0) } - } - - func decompress(_ data: Data, finish: Bool) throws -> Data { - return try data.withUnsafeBytes { (bytes: UnsafePointer) -> Data in - return try decompress(bytes: bytes, count: data.count, finish: finish) - } - } - - func decompress(bytes: UnsafePointer, count: Int, finish: Bool) throws -> Data { - var decompressed = Data() - try decompress(bytes: bytes, count: count, out: &decompressed) - - if finish { - let tail:[UInt8] = [0x00, 0x00, 0xFF, 0xFF] - try decompress(bytes: tail, count: tail.count, out: &decompressed) - } - - return decompressed - } - - private func decompress(bytes: UnsafePointer, count: Int, out: inout Data) throws { - var res: CInt = 0 - strm.next_in = UnsafeMutablePointer(mutating: bytes) - strm.avail_in = CUnsignedInt(count) - - repeat { - buffer.withUnsafeMutableBytes { (bufferPtr) in - strm.next_out = bufferPtr.bindMemory(to: UInt8.self).baseAddress - strm.avail_out = CUnsignedInt(bufferPtr.count) - - res = inflate(&strm, 0) - } - - let byteCount = buffer.count - Int(strm.avail_out) - out.append(buffer, count: byteCount) - } while res == Z_OK && strm.avail_out == 0 - - guard (res == Z_OK && strm.avail_out > 0) - || (res == Z_BUF_ERROR && Int(strm.avail_out) == buffer.count) - else { - throw WSError(type: .compressionError, message: "Error on decompressing", code: 0) - } - } - - private func teardownInflate() { - if inflateInitialized, Z_OK == inflateEnd(&strm) { - inflateInitialized = false - } - } - - deinit { - teardownInflate() - } -} - -class Compressor { - private var strm = z_stream() - private var buffer = [UInt8](repeating: 0, count: 0x2000) - private var deflateInitialized = false - private let windowBits: Int - - init?(windowBits: Int) { - self.windowBits = windowBits - guard initDeflate() else { return nil } - } - - private func initDeflate() -> Bool { - if Z_OK == deflateInit2_(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, - -CInt(windowBits), 8, Z_DEFAULT_STRATEGY, - ZLIB_VERSION, CInt(MemoryLayout.size)) - { - deflateInitialized = true - return true - } - return false - } - - func reset() throws { - teardownDeflate() - guard initDeflate() else { throw WSError(type: .compressionError, message: "Error for compressor on reset", code: 0) } - } - - func compress(_ data: Data) throws -> Data { - var compressed = Data() - var res: CInt = 0 - data.withUnsafeBytes { (ptr:UnsafePointer) -> Void in - strm.next_in = UnsafeMutablePointer(mutating: ptr) - strm.avail_in = CUnsignedInt(data.count) - - repeat { - buffer.withUnsafeMutableBytes { (bufferPtr) in - strm.next_out = bufferPtr.bindMemory(to: UInt8.self).baseAddress - strm.avail_out = CUnsignedInt(bufferPtr.count) - - res = deflate(&strm, Z_SYNC_FLUSH) - } - - let byteCount = buffer.count - Int(strm.avail_out) - compressed.append(buffer, count: byteCount) - } - while res == Z_OK && strm.avail_out == 0 - - } - - guard res == Z_OK && strm.avail_out > 0 - || (res == Z_BUF_ERROR && Int(strm.avail_out) == buffer.count) - else { - throw WSError(type: .compressionError, message: "Error on compressing", code: 0) - } - - compressed.removeLast(4) - return compressed - } - - private func teardownDeflate() { - if deflateInitialized, Z_OK == deflateEnd(&strm) { - deflateInitialized = false - } - } - - deinit { - teardownDeflate() - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/DataBytes/Data+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/DataBytes/Data+Extensions.swift deleted file mode 100644 index 1d0852d..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/DataBytes/Data+Extensions.swift +++ /dev/null @@ -1,53 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Data+Extensions.swift -// Starscream -// -// Created by Dalton Cherry on 3/27/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Fix for deprecation warnings -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -internal extension Data { - struct ByteError: Swift.Error {} - - #if swift(>=5.0) - func withUnsafeBytes(_ completion: (UnsafePointer) throws -> ResultType) rethrows -> ResultType { - return try withUnsafeBytes { - if let baseAddress = $0.baseAddress, $0.count > 0 { - return try completion(baseAddress.assumingMemoryBound(to: ContentType.self)) - } else { - throw ByteError() - } - } - } - #endif - - #if swift(>=5.0) - mutating func withUnsafeMutableBytes(_ completion: (UnsafeMutablePointer) throws -> ResultType) rethrows -> ResultType { - return try withUnsafeMutableBytes { - if let baseAddress = $0.baseAddress, $0.count > 0 { - return try completion(baseAddress.assumingMemoryBound(to: ContentType.self)) - } else { - throw ByteError() - } - } - } - #endif -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/Engine.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/Engine.swift deleted file mode 100644 index a60ef7e..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/Engine.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// Engine.swift -// Starscream -// -// Created by Dalton Cherry on 6/15/19. -// Copyright © 2019 Vluxe. All rights reserved. -// - -import Foundation - -public protocol EngineDelegate: class { - func didReceive(event: WebSocketEvent) -} - -public protocol Engine { - func register(delegate: EngineDelegate) - func start(request: URLRequest) - func stop(closeCode: UInt16) - func forceStop() - func write(data: Data, opcode: FrameOpCode, completion: (() -> ())?) - func write(string: String, completion: (() -> ())?) -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/NativeEngine.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/NativeEngine.swift deleted file mode 100644 index 7294e36..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/NativeEngine.swift +++ /dev/null @@ -1,96 +0,0 @@ -// -// NativeEngine.swift -// Starscream -// -// Created by Dalton Cherry on 6/15/19. -// Copyright © 2019 Vluxe. All rights reserved. -// - -import Foundation - -@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) -public class NativeEngine: NSObject, Engine, URLSessionDataDelegate, URLSessionWebSocketDelegate { - private var task: URLSessionWebSocketTask? - weak var delegate: EngineDelegate? - - public func register(delegate: EngineDelegate) { - self.delegate = delegate - } - - public func start(request: URLRequest) { - let session = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: nil) - task = session.webSocketTask(with: request) - doRead() - task?.resume() - } - - public func stop(closeCode: UInt16) { - let closeCode = URLSessionWebSocketTask.CloseCode(rawValue: Int(closeCode)) ?? .normalClosure - task?.cancel(with: closeCode, reason: nil) - } - - public func forceStop() { - stop(closeCode: UInt16(URLSessionWebSocketTask.CloseCode.abnormalClosure.rawValue)) - } - - public func write(string: String, completion: (() -> ())?) { - task?.send(.string(string), completionHandler: { (error) in - completion?() - }) - } - - public func write(data: Data, opcode: FrameOpCode, completion: (() -> ())?) { - switch opcode { - case .binaryFrame: - task?.send(.data(data), completionHandler: { (error) in - completion?() - }) - case .textFrame: - let text = String(data: data, encoding: .utf8)! - write(string: text, completion: completion) - case .ping: - task?.sendPing(pongReceiveHandler: { (error) in - completion?() - }) - default: - break //unsupported - } - } - - private func doRead() { - task?.receive { [weak self] (result) in - switch result { - case .success(let message): - switch message { - case .string(let string): - self?.broadcast(event: .text(string)) - case .data(let data): - self?.broadcast(event: .binary(data)) - @unknown default: - break - } - break - case .failure(let error): - self?.broadcast(event: .error(error)) - } - self?.doRead() - } - } - - private func broadcast(event: WebSocketEvent) { - delegate?.didReceive(event: event) - } - - public func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didOpenWithProtocol protocol: String?) { - let p = `protocol` ?? "" - broadcast(event: .connected([HTTPWSHeader.protocolName: p])) - } - - public func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didCloseWith closeCode: URLSessionWebSocketTask.CloseCode, reason: Data?) { - var r = "" - if let d = reason { - r = String(data: d, encoding: .utf8) ?? "" - } - broadcast(event: .disconnected(r, UInt16(closeCode.rawValue))) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/WSEngine.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/WSEngine.swift deleted file mode 100644 index decca64..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Engine/WSEngine.swift +++ /dev/null @@ -1,234 +0,0 @@ -// -// WSEngine.swift -// Starscream -// -// Created by Dalton Cherry on 6/15/19. -// Copyright © 2019 Vluxe. All rights reserved. -// - -import Foundation - -public class WSEngine: Engine, TransportEventClient, FramerEventClient, -FrameCollectorDelegate, HTTPHandlerDelegate { - private let transport: Transport - private let framer: Framer - private let httpHandler: HTTPHandler - private let compressionHandler: CompressionHandler? - private let certPinner: CertificatePinning? - private let headerChecker: HeaderValidator - private var request: URLRequest! - - private let frameHandler = FrameCollector() - private var didUpgrade = false - private var secKeyValue = "" - private let writeQueue = DispatchQueue(label: "com.vluxe.starscream.writequeue") - private let mutex = DispatchSemaphore(value: 1) - private var canSend = false - - weak var delegate: EngineDelegate? - public var respondToPingWithPong: Bool = true - - public init(transport: Transport, - certPinner: CertificatePinning? = nil, - headerValidator: HeaderValidator = FoundationSecurity(), - httpHandler: HTTPHandler = FoundationHTTPHandler(), - framer: Framer = WSFramer(), - compressionHandler: CompressionHandler? = nil) { - self.transport = transport - self.framer = framer - self.httpHandler = httpHandler - self.certPinner = certPinner - self.headerChecker = headerValidator - self.compressionHandler = compressionHandler - framer.updateCompression(supports: compressionHandler != nil) - frameHandler.delegate = self - } - - public func register(delegate: EngineDelegate) { - self.delegate = delegate - } - - public func start(request: URLRequest) { - mutex.wait() - let isConnected = canSend - mutex.signal() - if isConnected { - return - } - - self.request = request - transport.register(delegate: self) - framer.register(delegate: self) - httpHandler.register(delegate: self) - frameHandler.delegate = self - guard let url = request.url else { - return - } - transport.connect(url: url, timeout: request.timeoutInterval, certificatePinning: certPinner) - } - - public func stop(closeCode: UInt16 = CloseCode.normal.rawValue) { - let capacity = MemoryLayout.size - var pointer = [UInt8](repeating: 0, count: capacity) - writeUint16(&pointer, offset: 0, value: closeCode) - let payload = Data(bytes: pointer, count: MemoryLayout.size) - write(data: payload, opcode: .connectionClose, completion: { [weak self] in - self?.reset() - self?.forceStop() - }) - } - - public func forceStop() { - transport.disconnect() - } - - public func write(string: String, completion: (() -> ())?) { - let data = string.data(using: .utf8)! - write(data: data, opcode: .textFrame, completion: completion) - } - - public func write(data: Data, opcode: FrameOpCode, completion: (() -> ())?) { - writeQueue.async { [weak self] in - guard let s = self else { return } - s.mutex.wait() - let canWrite = s.canSend - s.mutex.signal() - if !canWrite { - return - } - - var isCompressed = false - var sendData = data - if let compressedData = s.compressionHandler?.compress(data: data) { - sendData = compressedData - isCompressed = true - } - - let frameData = s.framer.createWriteFrame(opcode: opcode, payload: sendData, isCompressed: isCompressed) - s.transport.write(data: frameData, completion: {_ in - completion?() - }) - } - } - - // MARK: - TransportEventClient - - public func connectionChanged(state: ConnectionState) { - switch state { - case .connected: - secKeyValue = HTTPWSHeader.generateWebSocketKey() - let wsReq = HTTPWSHeader.createUpgrade(request: request, supportsCompression: framer.supportsCompression(), secKeyValue: secKeyValue) - let data = httpHandler.convert(request: wsReq) - transport.write(data: data, completion: {_ in }) - case .waiting: - break - case .failed(let error): - handleError(error) - case .viability(let isViable): - broadcast(event: .viabilityChanged(isViable)) - case .shouldReconnect(let status): - broadcast(event: .reconnectSuggested(status)) - case .receive(let data): - if didUpgrade { - framer.add(data: data) - } else { - let offset = httpHandler.parse(data: data) - if offset > 0 { - let extraData = data.subdata(in: offset.. Data? { - return compressionHandler?.decompress(data: data, isFinal: isFinal) - } - - public func didForm(event: FrameCollector.Event) { - switch event { - case .text(let string): - broadcast(event: .text(string)) - case .binary(let data): - broadcast(event: .binary(data)) - case .pong(let data): - broadcast(event: .pong(data)) - case .ping(let data): - broadcast(event: .ping(data)) - if respondToPingWithPong { - write(data: data ?? Data(), opcode: .pong, completion: nil) - } - case .closed(let reason, let code): - broadcast(event: .disconnected(reason, code)) - stop(closeCode: code) - case .error(let error): - handleError(error) - } - } - - private func broadcast(event: WebSocketEvent) { - delegate?.didReceive(event: event) - } - - //This call can be coming from a lot of different queues/threads. - //be aware of that when modifying shared variables - private func handleError(_ error: Error?) { - if let wsError = error as? WSError { - stop(closeCode: wsError.code) - } else { - stop() - } - - delegate?.didReceive(event: .error(error)) - } - - private func reset() { - mutex.wait() - canSend = false - didUpgrade = false - mutex.signal() - } - - -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/FoundationHTTPHandler.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/FoundationHTTPHandler.swift deleted file mode 100644 index fb024aa..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/FoundationHTTPHandler.swift +++ /dev/null @@ -1,123 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// FoundationHTTPHandler.swift -// Starscream -// -// Created by Dalton Cherry on 1/25/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation -#if os(watchOS) -public typealias FoundationHTTPHandler = StringHTTPHandler -#else -public class FoundationHTTPHandler: HTTPHandler { - - var buffer = Data() - weak var delegate: HTTPHandlerDelegate? - - public init() { - - } - - public func convert(request: URLRequest) -> Data { - let msg = CFHTTPMessageCreateRequest(kCFAllocatorDefault, request.httpMethod! as CFString, - request.url! as CFURL, kCFHTTPVersion1_1).takeRetainedValue() - if let headers = request.allHTTPHeaderFields { - for (aKey, aValue) in headers { - CFHTTPMessageSetHeaderFieldValue(msg, aKey as CFString, aValue as CFString) - } - } - if let body = request.httpBody { - CFHTTPMessageSetBody(msg, body as CFData) - } - guard let data = CFHTTPMessageCopySerializedMessage(msg) else { - return Data() - } - return data.takeRetainedValue() as Data - } - - public func parse(data: Data) -> Int { - let offset = findEndOfHTTP(data: data) - if offset > 0 { - buffer.append(data.subdata(in: 0.. Bool { - var pointer = [UInt8]() - data.withUnsafeBytes { pointer.append(contentsOf: $0) } - - let response = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, false).takeRetainedValue() - if !CFHTTPMessageAppendBytes(response, pointer, data.count) { - return false //not enough data, wait for more - } - if !CFHTTPMessageIsHeaderComplete(response) { - return false //not enough data, wait for more - } - - let code = CFHTTPMessageGetResponseStatusCode(response) - if code != HTTPWSHeader.switchProtocolCode { - delegate?.didReceiveHTTP(event: .failure(HTTPUpgradeError.notAnUpgrade(code))) - return true - } - - if let cfHeaders = CFHTTPMessageCopyAllHeaderFields(response) { - let nsHeaders = cfHeaders.takeRetainedValue() as NSDictionary - var headers = [String: String]() - for (key, value) in nsHeaders { - if let key = key as? String, let value = value as? String { - headers[key] = value - } - } - delegate?.didReceiveHTTP(event: .success(headers)) - return true - } - - delegate?.didReceiveHTTP(event: .failure(HTTPUpgradeError.invalidData)) - return true - } - - public func register(delegate: HTTPHandlerDelegate) { - self.delegate = delegate - } - - private func findEndOfHTTP(data: Data) -> Int { - let endBytes = [UInt8(ascii: "\r"), UInt8(ascii: "\n"), UInt8(ascii: "\r"), UInt8(ascii: "\n")] - var pointer = [UInt8]() - data.withUnsafeBytes { pointer.append(contentsOf: $0) } - var k = 0 - for i in 0.. Data { - #if os(watchOS) - //TODO: build response header - return Data() - #else - let response = CFHTTPMessageCreateResponse(kCFAllocatorDefault, HTTPWSHeader.switchProtocolCode, - nil, kCFHTTPVersion1_1).takeRetainedValue() - - //TODO: add other values to make a proper response here... - //TODO: also sec key thing (Sec-WebSocket-Key) - for (key, value) in headers { - CFHTTPMessageSetHeaderFieldValue(response, key as CFString, value as CFString) - } - guard let cfData = CFHTTPMessageCopySerializedMessage(response)?.takeRetainedValue() else { - return Data() - } - return cfData as Data - #endif - } - - public func parse(data: Data) { - buffer.append(data) - if parseContent(data: buffer) { - buffer = Data() - } - } - - //returns true when the buffer should be cleared - func parseContent(data: Data) -> Bool { - var pointer = [UInt8]() - data.withUnsafeBytes { pointer.append(contentsOf: $0) } - #if os(watchOS) - //TODO: parse data - return false - #else - let response = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, true).takeRetainedValue() - if !CFHTTPMessageAppendBytes(response, pointer, data.count) { - return false //not enough data, wait for more - } - if !CFHTTPMessageIsHeaderComplete(response) { - return false //not enough data, wait for more - } - if let method = CFHTTPMessageCopyRequestMethod(response)?.takeRetainedValue() { - if (method as NSString) != getVerb { - delegate?.didReceive(event: .failure(HTTPUpgradeError.invalidData)) - return true - } - } - - if let cfHeaders = CFHTTPMessageCopyAllHeaderFields(response) { - let nsHeaders = cfHeaders.takeRetainedValue() as NSDictionary - var headers = [String: String]() - for (key, value) in nsHeaders { - if let key = key as? String, let value = value as? String { - headers[key] = value - } - } - delegate?.didReceive(event: .success(headers)) - return true - } - - delegate?.didReceive(event: .failure(HTTPUpgradeError.invalidData)) - return true - #endif - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/FrameCollector.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/FrameCollector.swift deleted file mode 100644 index 3ec1084..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/FrameCollector.swift +++ /dev/null @@ -1,107 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// FrameCollector.swift -// Starscream -// -// Created by Dalton Cherry on 1/24/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -public protocol FrameCollectorDelegate: class { - func didForm(event: FrameCollector.Event) - func decompress(data: Data, isFinal: Bool) -> Data? -} - -public class FrameCollector { - public enum Event { - case text(String) - case binary(Data) - case pong(Data?) - case ping(Data?) - case error(Error) - case closed(String, UInt16) - } - weak var delegate: FrameCollectorDelegate? - var buffer = Data() - var frameCount = 0 - var isText = false //was the first frame a text frame or a binary frame? - var needsDecompression = false - - public func add(frame: Frame) { - //check single frame action and out of order frames - if frame.opcode == .connectionClose { - var code = frame.closeCode - var reason = "connection closed by server" - if let customCloseReason = String(data: frame.payload, encoding: .utf8) { - reason = customCloseReason - } else { - code = CloseCode.protocolError.rawValue - } - delegate?.didForm(event: .closed(reason, code)) - return - } else if frame.opcode == .pong { - delegate?.didForm(event: .pong(frame.payload)) - return - } else if frame.opcode == .ping { - delegate?.didForm(event: .ping(frame.payload)) - return - } else if frame.opcode == .continueFrame && frameCount == 0 { - let errCode = CloseCode.protocolError.rawValue - delegate?.didForm(event: .error(WSError(type: .protocolError, message: "first frame can't be a continue frame", code: errCode))) - reset() - return - } else if frameCount > 0 && frame.opcode != .continueFrame { - let errCode = CloseCode.protocolError.rawValue - delegate?.didForm(event: .error(WSError(type: .protocolError, message: "second and beyond of fragment message must be a continue frame", code: errCode))) - reset() - return - } - if frameCount == 0 { - isText = frame.opcode == .textFrame - needsDecompression = frame.needsDecompression - } - - let payload: Data - if needsDecompression { - payload = delegate?.decompress(data: frame.payload, isFinal: frame.isFin) ?? frame.payload - } else { - payload = frame.payload - } - buffer.append(payload) - frameCount += 1 - - if frame.isFin { - if isText { - if let string = String(data: buffer, encoding: .utf8) { - delegate?.didForm(event: .text(string)) - } else { - let errCode = CloseCode.protocolError.rawValue - delegate?.didForm(event: .error(WSError(type: .protocolError, message: "not valid UTF-8 data", code: errCode))) - } - } else { - delegate?.didForm(event: .binary(buffer)) - } - reset() - } - } - - func reset() { - buffer = Data() - frameCount = 0 - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/Framer.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/Framer.swift deleted file mode 100644 index f77d5b8..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/Framer.swift +++ /dev/null @@ -1,365 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Framer.swift -// Starscream -// -// Created by Dalton Cherry on 1/23/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -let FinMask: UInt8 = 0x80 -let OpCodeMask: UInt8 = 0x0F -let RSVMask: UInt8 = 0x70 -let RSV1Mask: UInt8 = 0x40 -let MaskMask: UInt8 = 0x80 -let PayloadLenMask: UInt8 = 0x7F -let MaxFrameSize: Int = 32 - -// Standard WebSocket close codes -public enum CloseCode: UInt16 { - case normal = 1000 - case goingAway = 1001 - case protocolError = 1002 - case protocolUnhandledType = 1003 - // 1004 reserved. - case noStatusReceived = 1005 - //1006 reserved. - case encoding = 1007 - case policyViolated = 1008 - case messageTooBig = 1009 -} - -public enum FrameOpCode: UInt8 { - case continueFrame = 0x0 - case textFrame = 0x1 - case binaryFrame = 0x2 - // 3-7 are reserved. - case connectionClose = 0x8 - case ping = 0x9 - case pong = 0xA - // B-F reserved. - case unknown = 100 -} - -public struct Frame { - let isFin: Bool - let needsDecompression: Bool - let isMasked: Bool - let opcode: FrameOpCode - let payloadLength: UInt64 - let payload: Data - let closeCode: UInt16 //only used by connectionClose opcode -} - -public enum FrameEvent { - case frame(Frame) - case error(Error) -} - -public protocol FramerEventClient: class { - func frameProcessed(event: FrameEvent) -} - -public protocol Framer { - func add(data: Data) - func register(delegate: FramerEventClient) - func createWriteFrame(opcode: FrameOpCode, payload: Data, isCompressed: Bool) -> Data - func updateCompression(supports: Bool) - func supportsCompression() -> Bool -} - -public class WSFramer: Framer { - private let queue = DispatchQueue(label: "com.vluxe.starscream.wsframer", attributes: []) - private weak var delegate: FramerEventClient? - private var buffer = Data() - public var compressionEnabled = false - private let isServer: Bool - - public init(isServer: Bool = false) { - self.isServer = isServer - } - - public func updateCompression(supports: Bool) { - compressionEnabled = supports - } - - public func supportsCompression() -> Bool { - return compressionEnabled - } - - enum ProcessEvent { - case needsMoreData - case processedFrame(Frame, Int) - case failed(Error) - } - - public func add(data: Data) { - queue.async { [weak self] in - self?.buffer.append(data) - while(true) { - let event = self?.process() ?? .needsMoreData - switch event { - case .needsMoreData: - return - case .processedFrame(let frame, let split): - guard let s = self else { return } - s.delegate?.frameProcessed(event: .frame(frame)) - if split >= s.buffer.count { - s.buffer = Data() - return - } - s.buffer = s.buffer.advanced(by: split) - case .failed(let error): - self?.delegate?.frameProcessed(event: .error(error)) - self?.buffer = Data() - return - } - } - } - } - - public func register(delegate: FramerEventClient) { - self.delegate = delegate - } - - private func process() -> ProcessEvent { - if buffer.count < 2 { - return .needsMoreData - } - var pointer = [UInt8]() - buffer.withUnsafeBytes { pointer.append(contentsOf: $0) } - - let isFin = (FinMask & pointer[0]) - let opcodeRawValue = (OpCodeMask & pointer[0]) - let opcode = FrameOpCode(rawValue: opcodeRawValue) ?? .unknown - let isMasked = (MaskMask & pointer[1]) - let payloadLen = (PayloadLenMask & pointer[1]) - let RSV1 = (RSVMask & pointer[0]) - var needsDecompression = false - - if compressionEnabled && opcode != .continueFrame { - needsDecompression = (RSV1Mask & pointer[0]) > 0 - } - if !isServer && (isMasked > 0 || RSV1 > 0) && opcode != .pong && !needsDecompression { - let errCode = CloseCode.protocolError.rawValue - return .failed(WSError(type: .protocolError, message: "masked and rsv data is not currently supported", code: errCode)) - } - let isControlFrame = (opcode == .connectionClose || opcode == .ping) - if !isControlFrame && (opcode != .binaryFrame && opcode != .continueFrame && - opcode != .textFrame && opcode != .pong) { - let errCode = CloseCode.protocolError.rawValue - return .failed(WSError(type: .protocolError, message: "unknown opcode: \(opcodeRawValue)", code: errCode)) - } - if isControlFrame && isFin == 0 { - let errCode = CloseCode.protocolError.rawValue - return .failed(WSError(type: .protocolError, message: "control frames can't be fragmented", code: errCode)) - } - - var offset = 2 - - if isControlFrame && payloadLen > 125 { - return .failed(WSError(type: .protocolError, message: "payload length is longer than allowed for a control frame", code: CloseCode.protocolError.rawValue)) - } - - var dataLength = UInt64(payloadLen) - var closeCode = CloseCode.normal.rawValue - if opcode == .connectionClose { - if payloadLen == 1 { - closeCode = CloseCode.protocolError.rawValue - dataLength = 0 - } else if payloadLen > 1 { - if pointer.count < 4 { - return .needsMoreData - } - let size = MemoryLayout.size - closeCode = pointer.readUint16(offset: offset) - offset += size - dataLength -= UInt64(size) - if closeCode < 1000 || (closeCode > 1003 && closeCode < 1007) || (closeCode > 1013 && closeCode < 3000) { - closeCode = CloseCode.protocolError.rawValue - } - } - } - - if payloadLen == 127 { - let size = MemoryLayout.size - if size + offset > pointer.count { - return .needsMoreData - } - dataLength = pointer.readUint64(offset: offset) - offset += size - } else if payloadLen == 126 { - let size = MemoryLayout.size - if size + offset > pointer.count { - return .needsMoreData - } - dataLength = UInt64(pointer.readUint16(offset: offset)) - offset += size - } - - let maskStart = offset - if isServer { - offset += MemoryLayout.size - } - - if dataLength > (pointer.count - offset) { - return .needsMoreData - } - - //I don't like this cast, but Data's count returns an Int. - //Might be a problem with huge payloads. Need to revisit. - let readDataLength = Int(dataLength) - - let payload: Data - if readDataLength == 0 { - payload = Data() - } else { - if isServer { - payload = pointer.unmaskData(maskStart: maskStart, offset: offset, length: readDataLength) - } else { - let end = offset + readDataLength - payload = Data(pointer[offset.. 0, needsDecompression: needsDecompression, isMasked: isMasked > 0, opcode: opcode, payloadLength: dataLength, payload: payload, closeCode: closeCode) - return .processedFrame(frame, offset) - } - - public func createWriteFrame(opcode: FrameOpCode, payload: Data, isCompressed: Bool) -> Data { - let payloadLength = payload.count - - let capacity = payloadLength + MaxFrameSize - var pointer = [UInt8](repeating: 0, count: capacity) - - //set the framing info - pointer[0] = FinMask | opcode.rawValue - if isCompressed { - pointer[0] |= RSV1Mask - } - - var offset = 2 //skip pass the framing info - if payloadLength < 126 { - pointer[1] = UInt8(payloadLength) - } else if payloadLength <= Int(UInt16.max) { - pointer[1] = 126 - writeUint16(&pointer, offset: offset, value: UInt16(payloadLength)) - offset += MemoryLayout.size - } else { - pointer[1] = 127 - writeUint64(&pointer, offset: offset, value: UInt64(payloadLength)) - offset += MemoryLayout.size - } - - //clients are required to mask the payload data, but server don't according to the RFC - if !isServer { - pointer[1] |= MaskMask - - //write the random mask key in - let maskKey: UInt32 = UInt32.random(in: 0...UInt32.max) - - writeUint32(&pointer, offset: offset, value: maskKey) - let maskStart = offset - offset += MemoryLayout.size - - //now write the payload data in - for i in 0...size)] - offset += 1 - } - } else { - for i in 0.. UInt16 { - return (UInt16(self[offset + 0]) << 8) | UInt16(self[offset + 1]) - } - - /** - Read a UInt64 from a buffer. - - parameter offset: is the offset index to start the read from (e.g. buffer[0], buffer[1], etc). - - returns: a UInt64 of the value from the buffer - */ - func readUint64(offset: Int) -> UInt64 { - var value = UInt64(0) - for i in 0...7 { - value = (value << 8) | UInt64(self[offset + i]) - } - return value - } - - func unmaskData(maskStart: Int, offset: Int, length: Int) -> Data { - var unmaskedBytes = [UInt8](repeating: 0, count: length) - let maskSize = MemoryLayout.size - for i in 0..> 8) - buffer[offset + 1] = UInt8(value & 0xff) -} - -/** - Write a UInt32 to the buffer. It fills the 4 array "slots" of the UInt8 array. - - parameter buffer: is the UInt8 array (pointer) to write the value too. - - parameter offset: is the offset index to start the write from (e.g. buffer[0], buffer[1], etc). - */ -public func writeUint32( _ buffer: inout [UInt8], offset: Int, value: UInt32) { - for i in 0...3 { - buffer[offset + i] = UInt8((value >> (8*UInt32(3 - i))) & 0xff) - } -} - -/** - Write a UInt64 to the buffer. It fills the 8 array "slots" of the UInt8 array. - - parameter buffer: is the UInt8 array (pointer) to write the value too. - - parameter offset: is the offset index to start the write from (e.g. buffer[0], buffer[1], etc). - */ -public func writeUint64( _ buffer: inout [UInt8], offset: Int, value: UInt64) { - for i in 0...7 { - buffer[offset + i] = UInt8((value >> (8*UInt64(7 - i))) & 0xff) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/HTTPHandler.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/HTTPHandler.swift deleted file mode 100644 index 70941e7..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/HTTPHandler.swift +++ /dev/null @@ -1,148 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// HTTPHandler.swift -// Starscream -// -// Created by Dalton Cherry on 1/24/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -public enum HTTPUpgradeError: Error { - case notAnUpgrade(Int) - case invalidData -} - -public struct HTTPWSHeader { - static let upgradeName = "Upgrade" - static let upgradeValue = "websocket" - static let hostName = "Host" - static let connectionName = "Connection" - static let connectionValue = "Upgrade" - static let protocolName = "Sec-WebSocket-Protocol" - static let versionName = "Sec-WebSocket-Version" - static let versionValue = "13" - static let extensionName = "Sec-WebSocket-Extensions" - static let keyName = "Sec-WebSocket-Key" - static let originName = "Origin" - static let acceptName = "Sec-WebSocket-Accept" - static let switchProtocolCode = 101 - static let defaultSSLSchemes = ["wss", "https"] - - /// Creates a new URLRequest based off the source URLRequest. - /// - Parameter request: the request to "upgrade" the WebSocket request by adding headers. - /// - Parameter supportsCompression: set if the client support text compression. - /// - Parameter secKeyName: the security key to use in the WebSocket request. https://tools.ietf.org/html/rfc6455#section-1.3 - /// - returns: A URLRequest request to be converted to data and sent to the server. - public static func createUpgrade(request: URLRequest, supportsCompression: Bool, secKeyValue: String) -> URLRequest { - guard let url = request.url, let parts = url.getParts() else { - return request - } - - var req = request - if request.value(forHTTPHeaderField: HTTPWSHeader.originName) == nil { - var origin = url.absoluteString - if let hostUrl = URL (string: "/", relativeTo: url) { - origin = hostUrl.absoluteString - origin.remove(at: origin.index(before: origin.endIndex)) - } - req.setValue(origin, forHTTPHeaderField: HTTPWSHeader.originName) - } - req.setValue(HTTPWSHeader.upgradeValue, forHTTPHeaderField: HTTPWSHeader.upgradeName) - req.setValue(HTTPWSHeader.connectionValue, forHTTPHeaderField: HTTPWSHeader.connectionName) - req.setValue(HTTPWSHeader.versionValue, forHTTPHeaderField: HTTPWSHeader.versionName) - req.setValue(secKeyValue, forHTTPHeaderField: HTTPWSHeader.keyName) - - if let cookies = HTTPCookieStorage.shared.cookies(for: url), !cookies.isEmpty { - let headers = HTTPCookie.requestHeaderFields(with: cookies) - for (key, val) in headers { - req.setValue(val, forHTTPHeaderField: key) - } - } - - if supportsCompression { - let val = "permessage-deflate; client_max_window_bits; server_max_window_bits=15" - req.setValue(val, forHTTPHeaderField: HTTPWSHeader.extensionName) - } - let hostValue = req.allHTTPHeaderFields?[HTTPWSHeader.hostName] ?? "\(parts.host):\(parts.port)" - req.setValue(hostValue, forHTTPHeaderField: HTTPWSHeader.hostName) - return req - } - - // generateWebSocketKey 16 random characters between a-z and return them as a base64 string - public static func generateWebSocketKey() -> String { - return Data((0..<16).map{ _ in UInt8.random(in: 97...122) }).base64EncodedString() - } -} - -public enum HTTPEvent { - case success([String: String]) - case failure(Error) -} - -public protocol HTTPHandlerDelegate: class { - func didReceiveHTTP(event: HTTPEvent) -} - -public protocol HTTPHandler { - func register(delegate: HTTPHandlerDelegate) - func convert(request: URLRequest) -> Data - func parse(data: Data) -> Int -} - -public protocol HTTPServerDelegate: class { - func didReceive(event: HTTPEvent) -} - -public protocol HTTPServerHandler { - func register(delegate: HTTPServerDelegate) - func parse(data: Data) - func createResponse(headers: [String: String]) -> Data -} - -public struct URLParts { - let port: Int - let host: String - let isTLS: Bool -} - -public extension URL { - /// isTLSScheme returns true if the scheme is https or wss - var isTLSScheme: Bool { - guard let scheme = self.scheme else { - return false - } - return HTTPWSHeader.defaultSSLSchemes.contains(scheme) - } - - /// getParts pulls host and port from the url. - func getParts() -> URLParts? { - guard let host = self.host else { - return nil // no host, this isn't a valid url - } - let isTLS = isTLSScheme - var port = self.port ?? 0 - if self.port == nil { - if isTLS { - port = 443 - } else { - port = 80 - } - } - return URLParts(port: port, host: host, isTLS: isTLS) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/StringHTTPHandler.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/StringHTTPHandler.swift deleted file mode 100644 index 33f5f9b..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Framer/StringHTTPHandler.swift +++ /dev/null @@ -1,143 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// StringHTTPHandler.swift -// Starscream -// -// Created by Dalton Cherry on 8/25/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -public class StringHTTPHandler: HTTPHandler { - - var buffer = Data() - weak var delegate: HTTPHandlerDelegate? - - public init() { - - } - - public func convert(request: URLRequest) -> Data { - guard let url = request.url else { - return Data() - } - - var path = url.absoluteString - let offset = (url.scheme?.count ?? 2) + 3 - path = String(path[path.index(path.startIndex, offsetBy: offset).. Int { - let offset = findEndOfHTTP(data: data) - if offset > 0 { - buffer.append(data.subdata(in: 0.. Bool { - guard let str = String(data: data, encoding: .utf8) else { - delegate?.didReceiveHTTP(event: .failure(HTTPUpgradeError.invalidData)) - return true - } - let splitArr = str.components(separatedBy: "\r\n") - var code = -1 - var i = 0 - var headers = [String: String]() - for str in splitArr { - if i == 0 { - let responseSplit = str.components(separatedBy: .whitespaces) - guard responseSplit.count > 1 else { - delegate?.didReceiveHTTP(event: .failure(HTTPUpgradeError.invalidData)) - return true - } - if let c = Int(responseSplit[1]) { - code = c - } - } else { - guard let separatorIndex = str.firstIndex(of: ":") else { break } - let key = str.prefix(upTo: separatorIndex).trimmingCharacters(in: .whitespaces) - let val = str.suffix(from: str.index(after: separatorIndex)).trimmingCharacters(in: .whitespaces) - headers[key.lowercased()] = val - } - i += 1 - } - - if code != HTTPWSHeader.switchProtocolCode { - delegate?.didReceiveHTTP(event: .failure(HTTPUpgradeError.notAnUpgrade(code))) - return true - } - - delegate?.didReceiveHTTP(event: .success(headers)) - return true - } - - public func register(delegate: HTTPHandlerDelegate) { - self.delegate = delegate - } - - private func findEndOfHTTP(data: Data) -> Int { - let endBytes = [UInt8(ascii: "\r"), UInt8(ascii: "\n"), UInt8(ascii: "\r"), UInt8(ascii: "\n")] - var pointer = [UInt8]() - data.withUnsafeBytes { pointer.append(contentsOf: $0) } - var k = 0 - for i in 0.. ())) { - if allowSelfSigned { - completion(.success) - return - } - - if let validateDomain = domain { - SecTrustSetPolicies(trust, SecPolicyCreateSSL(true, validateDomain as NSString?)) - } - - handleSecurityTrust(trust: trust, completion: completion) - } - - private func handleSecurityTrust(trust: SecTrust, completion: ((PinningState) -> ())) { - if #available(iOS 12.0, OSX 10.14, watchOS 5.0, tvOS 12.0, *) { - var error: CFError? - if SecTrustEvaluateWithError(trust, &error) { - completion(.success) - } else { - completion(.failed(error)) - } - } else { - handleOldSecurityTrust(trust: trust, completion: completion) - } - } - - private func handleOldSecurityTrust(trust: SecTrust, completion: ((PinningState) -> ())) { - var result: SecTrustResultType = .unspecified - SecTrustEvaluate(trust, &result) - if result == .unspecified || result == .proceed { - completion(.success) - } else { - let e = CFErrorCreate(kCFAllocatorDefault, "FoundationSecurityError" as NSString?, Int(result.rawValue), nil) - completion(.failed(e)) - } - } -} - -extension FoundationSecurity: HeaderValidator { - public func validate(headers: [String: String], key: String) -> Error? { - if let acceptKey = headers[HTTPWSHeader.acceptName] { - let sha = "\(key)258EAFA5-E914-47DA-95CA-C5AB0DC85B11".sha1Base64() - if sha != acceptKey { - return WSError(type: .securityError, message: "accept header doesn't match", code: SecurityErrorCode.acceptFailed.rawValue) - } - } - return nil - } -} - -private extension String { - func sha1Base64() -> String { - let data = self.data(using: .utf8)! - let pointer = data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) -> [UInt8] in - var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH)) - CC_SHA1(bytes.baseAddress, CC_LONG(data.count), &digest) - return digest - } - return Data(pointer).base64EncodedString() - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Security/Security.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Security/Security.swift deleted file mode 100644 index a64a771..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Security/Security.swift +++ /dev/null @@ -1,45 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Security.swift -// Starscream -// -// Created by Dalton Cherry on 3/16/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -public enum SecurityErrorCode: UInt16 { - case acceptFailed = 1 - case pinningFailed = 2 -} - -public enum PinningState { - case success - case failed(CFError?) -} - -// CertificatePinning protocol provides an interface for Transports to handle Certificate -// or Public Key Pinning. -public protocol CertificatePinning: class { - func evaluateTrust(trust: SecTrust, domain: String?, completion: ((PinningState) -> ())) -} - -// validates the "Sec-WebSocket-Accept" header as defined 1.3 of the RFC 6455 -// https://tools.ietf.org/html/rfc6455#section-1.3 -public protocol HeaderValidator: class { - func validate(headers: [String: String], key: String) -> Error? -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Server/Server.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Server/Server.swift deleted file mode 100644 index 527c851..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Server/Server.swift +++ /dev/null @@ -1,56 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Server.swift -// Starscream -// -// Created by Dalton Cherry on 4/2/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -public enum ConnectionEvent { - case connected([String: String]) - case disconnected(String, UInt16) - case text(String) - case binary(Data) - case pong(Data?) - case ping(Data?) - case error(Error) -} - -public protocol Connection { - func write(data: Data, opcode: FrameOpCode) -} - -public protocol ConnectionDelegate: class { - func didReceive(event: ServerEvent) -} - -public enum ServerEvent { - case connected(Connection, [String: String]) - case disconnected(Connection, String, UInt16) - case text(Connection, String) - case binary(Connection, Data) - case pong(Connection, Data?) - case ping(Connection, Data?) -} - -public protocol Server { - func start(address: String, port: UInt16) -> Error? -} - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Server/WebSocketServer.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Server/WebSocketServer.swift deleted file mode 100644 index 4d3b9af..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Server/WebSocketServer.swift +++ /dev/null @@ -1,196 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// WebSocketServer.swift -// Starscream -// -// Created by Dalton Cherry on 4/5/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -#if canImport(Network) -import Foundation -import Network - -/// WebSocketServer is a Network.framework implementation of a WebSocket server -@available(watchOS, unavailable) -@available(macOS 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *) -public class WebSocketServer: Server, ConnectionDelegate { - public var onEvent: ((ServerEvent) -> Void)? - private var connections = [String: ServerConnection]() - private var listener: NWListener? - private let queue = DispatchQueue(label: "com.vluxe.starscream.server.networkstream", attributes: []) - - public init() { - - } - - public func start(address: String, port: UInt16) -> Error? { - //TODO: support TLS cert adding/binding - let parameters = NWParameters(tls: nil, tcp: NWProtocolTCP.Options()) - let p = NWEndpoint.Port(rawValue: port)! - parameters.requiredLocalEndpoint = NWEndpoint.hostPort(host: NWEndpoint.Host.name(address, nil), port: p) - - guard let listener = try? NWListener(using: parameters, on: p) else { - return WSError(type: .serverError, message: "unable to start the listener at: \(address):\(port)", code: 0) - } - listener.newConnectionHandler = {[weak self] conn in - let transport = TCPTransport(connection: conn) - let c = ServerConnection(transport: transport) - c.delegate = self - self?.connections[c.uuid] = c - } -// listener.stateUpdateHandler = { state in -// switch state { -// case .ready: -// print("ready to get sockets!") -// case .setup: -// print("setup to get sockets!") -// case .cancelled: -// print("server cancelled!") -// case .waiting(let error): -// print("waiting error: \(error)") -// case .failed(let error): -// print("server failed: \(error)") -// @unknown default: -// print("wat?") -// } -// } - self.listener = listener - listener.start(queue: queue) - return nil - } - - public func didReceive(event: ServerEvent) { - onEvent?(event) - switch event { - case .disconnected(let conn, _, _): - guard let conn = conn as? ServerConnection else { - return - } - connections.removeValue(forKey: conn.uuid) - default: - break - } - } -} - -@available(macOS 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *) -public class ServerConnection: Connection, HTTPServerDelegate, FramerEventClient, FrameCollectorDelegate, TransportEventClient { - let transport: TCPTransport - private let httpHandler = FoundationHTTPServerHandler() - private let framer = WSFramer(isServer: true) - private let frameHandler = FrameCollector() - private var didUpgrade = false - public var onEvent: ((ConnectionEvent) -> Void)? - public weak var delegate: ConnectionDelegate? - private let id: String - var uuid: String { - return id - } - - init(transport: TCPTransport) { - self.id = UUID().uuidString - self.transport = transport - transport.register(delegate: self) - httpHandler.register(delegate: self) - framer.register(delegate: self) - frameHandler.delegate = self - } - - public func write(data: Data, opcode: FrameOpCode) { - let wsData = framer.createWriteFrame(opcode: opcode, payload: data, isCompressed: false) - transport.write(data: wsData, completion: {_ in }) - } - - // MARK: - TransportEventClient - - public func connectionChanged(state: ConnectionState) { - switch state { - case .connected: - break - case .waiting: - break - case .failed(let error): - print("server connection error: \(error ?? WSError(type: .protocolError, message: "default error, no extra data", code: 0))") //handleError(error) - case .viability(_): - break - case .shouldReconnect(_): - break - case .receive(let data): - if didUpgrade { - framer.add(data: data) - } else { - httpHandler.parse(data: data) - } - case .cancelled: - print("server connection cancelled!") - //broadcast(event: .cancelled) - } - } - - /// MARK: - HTTPServerDelegate - - public func didReceive(event: HTTPEvent) { - switch event { - case .success(let headers): - didUpgrade = true - let response = httpHandler.createResponse(headers: [:]) - transport.write(data: response, completion: {_ in }) - delegate?.didReceive(event: .connected(self, headers)) - onEvent?(.connected(headers)) - case .failure(let error): - onEvent?(.error(error)) - } - } - - /// MARK: - FrameCollectorDelegate - - public func frameProcessed(event: FrameEvent) { - switch event { - case .frame(let frame): - frameHandler.add(frame: frame) - case .error(let error): - onEvent?(.error(error)) - } - } - - public func didForm(event: FrameCollector.Event) { - switch event { - case .text(let string): - delegate?.didReceive(event: .text(self, string)) - onEvent?(.text(string)) - case .binary(let data): - delegate?.didReceive(event: .binary(self, data)) - onEvent?(.binary(data)) - case .pong(let data): - delegate?.didReceive(event: .pong(self, data)) - onEvent?(.pong(data)) - case .ping(let data): - delegate?.didReceive(event: .ping(self, data)) - onEvent?(.ping(data)) - case .closed(let reason, let code): - delegate?.didReceive(event: .disconnected(self, reason, code)) - onEvent?(.disconnected(reason, code)) - case .error(let error): - onEvent?(.error(error)) - } - } - - public func decompress(data: Data, isFinal: Bool) -> Data? { - return nil - } -} -#endif diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Starscream/WebSocket.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Starscream/WebSocket.swift deleted file mode 100644 index 1d3545c..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Starscream/WebSocket.swift +++ /dev/null @@ -1,178 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Websocket.swift -// Starscream -// -// Created by Dalton Cherry on 7/16/14. -// Copyright (c) 2014-2019 Dalton Cherry. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -public enum ErrorType: Error { - case compressionError - case securityError - case protocolError //There was an error parsing the WebSocket frames - case serverError -} - -public struct WSError: Error { - public let type: ErrorType - public let message: String - public let code: UInt16 - - public init(type: ErrorType, message: String, code: UInt16) { - self.type = type - self.message = message - self.code = code - } -} - -public protocol WebSocketClient: class { - func connect() - func disconnect(closeCode: UInt16) - func write(string: String, completion: (() -> ())?) - func write(stringData: Data, completion: (() -> ())?) - func write(data: Data, completion: (() -> ())?) - func write(ping: Data, completion: (() -> ())?) - func write(pong: Data, completion: (() -> ())?) -} - -//implements some of the base behaviors -extension WebSocketClient { - public func write(string: String) { - write(string: string, completion: nil) - } - - public func write(data: Data) { - write(data: data, completion: nil) - } - - public func write(ping: Data) { - write(ping: ping, completion: nil) - } - - public func write(pong: Data) { - write(pong: pong, completion: nil) - } - - public func disconnect() { - disconnect(closeCode: CloseCode.normal.rawValue) - } -} - -public enum WebSocketEvent { - case connected([String: String]) - case disconnected(String, UInt16) - case text(String) - case binary(Data) - case pong(Data?) - case ping(Data?) - case error(Error?) - case viabilityChanged(Bool) - case reconnectSuggested(Bool) - case cancelled -} - -public protocol WebSocketDelegate: class { - func didReceive(event: WebSocketEvent, client: WebSocket) -} - -open class WebSocket: WebSocketClient, EngineDelegate { - private let engine: Engine - public weak var delegate: WebSocketDelegate? - public var onEvent: ((WebSocketEvent) -> Void)? - - public var request: URLRequest - // Where the callback is executed. It defaults to the main UI thread queue. - public var callbackQueue = DispatchQueue.main - public var respondToPingWithPong: Bool { - set { - guard let e = engine as? WSEngine else { return } - e.respondToPingWithPong = newValue - } - get { - guard let e = engine as? WSEngine else { return true } - return e.respondToPingWithPong - } - } - - // serial write queue to ensure writes happen in order - private let writeQueue = DispatchQueue(label: "com.vluxe.starscream.writequeue") - private var canSend = false - private let mutex = DispatchSemaphore(value: 1) - - public init(request: URLRequest, engine: Engine) { - self.request = request - self.engine = engine - } - - public convenience init(request: URLRequest, certPinner: CertificatePinning? = FoundationSecurity(), compressionHandler: CompressionHandler? = nil, useCustomEngine: Bool = true) { - if #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *), !useCustomEngine { - self.init(request: request, engine: NativeEngine()) - } else if #available(macOS 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *) { - self.init(request: request, engine: WSEngine(transport: TCPTransport(), certPinner: certPinner, compressionHandler: compressionHandler)) - } else { - self.init(request: request, engine: WSEngine(transport: FoundationTransport(), certPinner: certPinner, compressionHandler: compressionHandler)) - } - } - - public func connect() { - engine.register(delegate: self) - engine.start(request: request) - } - - public func disconnect(closeCode: UInt16 = CloseCode.normal.rawValue) { - engine.stop(closeCode: closeCode) - } - - public func forceDisconnect() { - engine.forceStop() - } - - public func write(data: Data, completion: (() -> ())?) { - write(data: data, opcode: .binaryFrame, completion: completion) - } - - public func write(string: String, completion: (() -> ())?) { - engine.write(string: string, completion: completion) - } - - public func write(stringData: Data, completion: (() -> ())?) { - write(data: stringData, opcode: .textFrame, completion: completion) - } - - public func write(ping: Data, completion: (() -> ())?) { - write(data: ping, opcode: .ping, completion: completion) - } - - public func write(pong: Data, completion: (() -> ())?) { - write(data: pong, opcode: .pong, completion: completion) - } - - private func write(data: Data, opcode: FrameOpCode, completion: (() -> ())?) { - engine.write(data: data, opcode: opcode, completion: completion) - } - - // MARK: - EngineDelegate - public func didReceive(event: WebSocketEvent) { - callbackQueue.async { [weak self] in - guard let s = self else { return } - s.delegate?.didReceive(event: event, client: s) - s.onEvent?(event) - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/FoundationTransport.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/FoundationTransport.swift deleted file mode 100644 index 8d304f8..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/FoundationTransport.swift +++ /dev/null @@ -1,218 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// FoundationTransport.swift -// Starscream -// -// Created by Dalton Cherry on 1/23/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -public enum FoundationTransportError: Error { - case invalidRequest - case invalidOutputStream - case timeout -} - -public class FoundationTransport: NSObject, Transport, StreamDelegate { - private weak var delegate: TransportEventClient? - private let workQueue = DispatchQueue(label: "com.vluxe.starscream.websocket", attributes: []) - private var inputStream: InputStream? - private var outputStream: OutputStream? - private var isOpen = false - private var onConnect: ((InputStream, OutputStream) -> Void)? - private var isTLS = false - private var certPinner: CertificatePinning? - - public var usingTLS: Bool { - return self.isTLS - } - - public init(streamConfiguration: ((InputStream, OutputStream) -> Void)? = nil) { - super.init() - onConnect = streamConfiguration - } - - deinit { - inputStream?.delegate = nil - outputStream?.delegate = nil - } - - public func connect(url: URL, timeout: Double = 10, certificatePinning: CertificatePinning? = nil) { - guard let parts = url.getParts() else { - delegate?.connectionChanged(state: .failed(FoundationTransportError.invalidRequest)) - return - } - self.certPinner = certificatePinning - self.isTLS = parts.isTLS - var readStream: Unmanaged? - var writeStream: Unmanaged? - let h = parts.host as NSString - CFStreamCreatePairWithSocketToHost(nil, h, UInt32(parts.port), &readStream, &writeStream) - inputStream = readStream!.takeRetainedValue() - outputStream = writeStream!.takeRetainedValue() - guard let inStream = inputStream, let outStream = outputStream else { - return - } - inStream.delegate = self - outStream.delegate = self - - if isTLS { - let key = CFStreamPropertyKey(rawValue: kCFStreamPropertySocketSecurityLevel) - CFReadStreamSetProperty(inStream, key, kCFStreamSocketSecurityLevelNegotiatedSSL) - CFWriteStreamSetProperty(outStream, key, kCFStreamSocketSecurityLevelNegotiatedSSL) - } - - onConnect?(inStream, outStream) - - isOpen = false - CFReadStreamSetDispatchQueue(inStream, workQueue) - CFWriteStreamSetDispatchQueue(outStream, workQueue) - inStream.open() - outStream.open() - - - workQueue.asyncAfter(deadline: .now() + timeout, execute: { [weak self] in - guard let s = self else { return } - if !s.isOpen { - s.delegate?.connectionChanged(state: .failed(FoundationTransportError.timeout)) - } - }) - } - - public func disconnect() { - if let stream = inputStream { - stream.delegate = nil - CFReadStreamSetDispatchQueue(stream, nil) - stream.close() - } - if let stream = outputStream { - stream.delegate = nil - CFWriteStreamSetDispatchQueue(stream, nil) - stream.close() - } - isOpen = false - outputStream = nil - inputStream = nil - } - - public func register(delegate: TransportEventClient) { - self.delegate = delegate - } - - public func write(data: Data, completion: @escaping ((Error?) -> ())) { - guard let outStream = outputStream else { - completion(FoundationTransportError.invalidOutputStream) - return - } - var total = 0 - let buffer = UnsafeRawPointer((data as NSData).bytes).assumingMemoryBound(to: UInt8.self) - //NOTE: this might need to be dispatched to the work queue instead of being written inline. TBD. - while total < data.count { - let written = outStream.write(buffer, maxLength: data.count) - if written < 0 { - completion(FoundationTransportError.invalidOutputStream) - return - } - total += written - } - completion(nil) - } - - private func getSecurityData() -> (SecTrust?, String?) { - #if os(watchOS) - return (nil, nil) - #else - guard let outputStream = outputStream else { - return (nil, nil) - } - let trust = outputStream.property(forKey: kCFStreamPropertySSLPeerTrust as Stream.PropertyKey) as! SecTrust? - var domain = outputStream.property(forKey: kCFStreamSSLPeerName as Stream.PropertyKey) as! String? - - if domain == nil, - let sslContextOut = CFWriteStreamCopyProperty(outputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext? { - var peerNameLen: Int = 0 - SSLGetPeerDomainNameLength(sslContextOut, &peerNameLen) - var peerName = Data(count: peerNameLen) - let _ = peerName.withUnsafeMutableBytes { (peerNamePtr: UnsafeMutablePointer) in - SSLGetPeerDomainName(sslContextOut, peerNamePtr, &peerNameLen) - } - if let peerDomain = String(bytes: peerName, encoding: .utf8), peerDomain.count > 0 { - domain = peerDomain - } - } - return (trust, domain) - #endif - } - - private func read() { - guard let stream = inputStream else { - return - } - let maxBuffer = 4096 - let buf = NSMutableData(capacity: maxBuffer) - let buffer = UnsafeMutableRawPointer(mutating: buf!.bytes).assumingMemoryBound(to: UInt8.self) - let length = stream.read(buffer, maxLength: maxBuffer) - if length < 1 { - return - } - let data = Data(bytes: buffer, count: length) - delegate?.connectionChanged(state: .receive(data)) - } - - // MARK: - StreamDelegate - - open func stream(_ aStream: Stream, handle eventCode: Stream.Event) { - switch eventCode { - case .hasBytesAvailable: - if aStream == inputStream { - read() - } - case .errorOccurred: - delegate?.connectionChanged(state: .failed(aStream.streamError)) - case .endEncountered: - if aStream == inputStream { - delegate?.connectionChanged(state: .cancelled) - } - case .openCompleted: - if aStream == inputStream { - let (trust, domain) = getSecurityData() - if let pinner = certPinner, let trust = trust { - pinner.evaluateTrust(trust: trust, domain: domain, completion: { [weak self] (state) in - switch state { - case .success: - self?.isOpen = true - self?.delegate?.connectionChanged(state: .connected) - case .failed(let error): - self?.delegate?.connectionChanged(state: .failed(error)) - } - - }) - } else { - isOpen = true - delegate?.connectionChanged(state: .connected) - } - } - case .endEncountered: - if aStream == inputStream { - delegate?.connectionChanged(state: .cancelled) - } - default: - break - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/TCPTransport.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/TCPTransport.swift deleted file mode 100644 index 459cb2e..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/TCPTransport.swift +++ /dev/null @@ -1,159 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// HTTPTransport.swift -// Starscream -// -// Created by Dalton Cherry on 1/23/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -#if canImport(Network) -import Foundation -import Network - -public enum TCPTransportError: Error { - case invalidRequest -} - -@available(macOS 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *) -public class TCPTransport: Transport { - private var connection: NWConnection? - private let queue = DispatchQueue(label: "com.vluxe.starscream.networkstream", attributes: []) - private weak var delegate: TransportEventClient? - private var isRunning = false - private var isTLS = false - - public var usingTLS: Bool { - return self.isTLS - } - - public init(connection: NWConnection) { - self.connection = connection - start() - } - - public init() { - //normal connection, will use the "connect" method below - } - - public func connect(url: URL, timeout: Double = 10, certificatePinning: CertificatePinning? = nil) { - guard let parts = url.getParts() else { - delegate?.connectionChanged(state: .failed(TCPTransportError.invalidRequest)) - return - } - self.isTLS = parts.isTLS - let options = NWProtocolTCP.Options() - options.connectionTimeout = Int(timeout.rounded(.up)) - - let tlsOptions = isTLS ? NWProtocolTLS.Options() : nil - if let tlsOpts = tlsOptions { - sec_protocol_options_set_verify_block(tlsOpts.securityProtocolOptions, { (sec_protocol_metadata, sec_trust, sec_protocol_verify_complete) in - let trust = sec_trust_copy_ref(sec_trust).takeRetainedValue() - guard let pinner = certificatePinning else { - sec_protocol_verify_complete(true) - return - } - pinner.evaluateTrust(trust: trust, domain: parts.host, completion: { (state) in - switch state { - case .success: - sec_protocol_verify_complete(true) - case .failed(_): - sec_protocol_verify_complete(false) - } - }) - }, queue) - } - let parameters = NWParameters(tls: tlsOptions, tcp: options) - let conn = NWConnection(host: NWEndpoint.Host.name(parts.host, nil), port: NWEndpoint.Port(rawValue: UInt16(parts.port))!, using: parameters) - connection = conn - start() - } - - public func disconnect() { - isRunning = false - connection?.cancel() - } - - public func register(delegate: TransportEventClient) { - self.delegate = delegate - } - - public func write(data: Data, completion: @escaping ((Error?) -> ())) { - connection?.send(content: data, completion: .contentProcessed { (error) in - completion(error) - }) - } - - private func start() { - guard let conn = connection else { - return - } - conn.stateUpdateHandler = { [weak self] (newState) in - switch newState { - case .ready: - self?.delegate?.connectionChanged(state: .connected) - case .waiting: - self?.delegate?.connectionChanged(state: .waiting) - case .cancelled: - self?.delegate?.connectionChanged(state: .cancelled) - case .failed(let error): - self?.delegate?.connectionChanged(state: .failed(error)) - case .setup, .preparing: - break - @unknown default: - break - } - } - - conn.viabilityUpdateHandler = { [weak self] (isViable) in - self?.delegate?.connectionChanged(state: .viability(isViable)) - } - - conn.betterPathUpdateHandler = { [weak self] (isBetter) in - self?.delegate?.connectionChanged(state: .shouldReconnect(isBetter)) - } - - conn.start(queue: queue) - isRunning = true - readLoop() - } - - //readLoop keeps reading from the connection to get the latest content - private func readLoop() { - if !isRunning { - return - } - connection?.receive(minimumIncompleteLength: 2, maximumLength: 4096, completion: {[weak self] (data, context, isComplete, error) in - guard let s = self else {return} - if let data = data { - s.delegate?.connectionChanged(state: .receive(data)) - } - - // Refer to https://developer.apple.com/documentation/network/implementing_netcat_with_network_framework - if let context = context, context.isFinal, isComplete { - return - } - - if error == nil { - s.readLoop() - } - - }) - } -} -#else -typealias TCPTransport = FoundationTransport -#endif diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/Transport.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/Transport.swift deleted file mode 100644 index e645651..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Starscream/Sources/Transport/Transport.swift +++ /dev/null @@ -1,55 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Transport.swift -// Starscream -// -// Created by Dalton Cherry on 1/23/19. -// Copyright © 2019 Vluxe. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -////////////////////////////////////////////////////////////////////////////////////////////////// - -import Foundation - -public enum ConnectionState { - case connected - case waiting - case cancelled - case failed(Error?) - - //the viability (connection status) of the connection has updated - //e.g. connection is down, connection came back up, etc - case viability(Bool) - - //the connection has upgrade to wifi from cellular. - //you should consider reconnecting to take advantage of this - case shouldReconnect(Bool) - - //the connection receive data - case receive(Data) -} - -public protocol TransportEventClient: class { - func connectionChanged(state: ConnectionState) -} - -public protocol Transport: class { - func register(delegate: TransportEventClient) - func connect(url: URL, timeout: Double, certificatePinning: CertificatePinning?) - func disconnect() - func write(data: Data, completion: @escaping ((Error?) -> ())) - var usingTLS: Bool { get } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/LICENSE.txt b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/LICENSE.txt deleted file mode 100644 index 4b3ed03..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/LICENSE.txt +++ /dev/null @@ -1,211 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - -## Runtime Library Exception to the Apache 2.0 License: ## - - - As an exception, if you use this Software to compile your source code and - portions of this Software are embedded into the binary product as a result, - you may redistribute such product without providing attribution as would - otherwise be required by Sections 4(a), 4(b) and 4(d) of the License. diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/README.md b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/README.md deleted file mode 100644 index 9956ee0..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/README.md +++ /dev/null @@ -1,303 +0,0 @@ -Swift logo - -# Swift Protobuf - -**Welcome to Swift Protobuf!** - -[Apple's Swift programming language](https://swift.org/) is a perfect -complement to [Google's Protocol -Buffer](https://developers.google.com/protocol-buffers/) ("protobuf") serialization -technology. -They both emphasize high performance and programmer safety. - -This project provides both the command-line program that adds Swift -code generation to Google's `protoc` and the runtime library that is -necessary for using the generated code. -After using the protoc plugin to generate Swift code from your .proto -files, you will need to add this library to your project. - -[![Build and Test](https://github.com/apple/swift-protobuf/workflows/Build%20and%20Test/badge.svg)](https://github.com/apple/swift-protobuf/actions?query=workflow%3A%22Build+and+Test%22) -[![Check Upstream Protos](https://github.com/apple/swift-protobuf/workflows/Check%20Upstream%20Proto%20Files/badge.svg)](https://github.com/apple/swift-protobuf/actions?query=workflow%3A%22Check+Upstream+Proto+Files%22) -[![Run Conformance Tests](https://github.com/apple/swift-protobuf/workflows/Run%20Conformance%20Tests/badge.svg)](https://github.com/apple/swift-protobuf/actions?query=workflow%3A%22Run+Conformance+Tests%22) - -# Features of SwiftProtobuf - -SwiftProtobuf offers many advantages over alternative serialization -systems: - -* Safety: The protobuf code-generation system avoids the - errors that are common with hand-built serialization code. -* Correctness: SwiftProtobuf passes both its own extensive - test suite and Google's full conformance test for protobuf - correctness. -* Schema-driven: Defining your data structures in a separate - `.proto` schema file clearly documents your communications - conventions. -* Idiomatic: SwiftProtobuf takes full advantage of the Swift language. - In particular, all generated types provide full Swift copy-on-write - value semantics. -* Efficient binary serialization: The `.serializedData()` - method returns a `Data` with a compact binary form of your data. - You can deserialize the data using the `init(serializedData:)` - initializer. -* Standard JSON serialization: The `.jsonUTF8Data()` method returns a JSON - form of your data that can be parsed with the `init(jsonUTF8Data:)` - initializer. -* Hashable, Equatable: The generated struct can be put into a - `Set<>` or `Dictionary<>`. -* Performant: The binary and JSON serializers have been - extensively optimized. -* Extensible: You can add your own Swift extensions to any - of the generated types. - -Best of all, you can take the same `.proto` file and generate -Java, C++, Python, or Objective-C for use on other platforms. The -generated code for those languages will use the exact same -serialization and deserialization conventions as SwiftProtobuf, making -it easy to exchange serialized data in binary or JSON forms, with no -additional effort on your part. - -# Documentation - -More information is available in the associated documentation: - - * [Google's protobuf documentation](https://developers.google.com/protocol-buffers/) - provides general information about protocol buffers, the protoc compiler, - and how to use protocol buffers with C++, Java, and other languages. - * [PLUGIN.md](Documentation/PLUGIN.md) documents the `protoc-gen-swift` - plugin that adds Swift support to the `protoc` program - * [API.md](Documentation/API.md) documents how to use the generated code. - This is recommended reading for anyone using SwiftProtobuf in their - project. - * [cocoadocs.org](http://cocoadocs.org/docsets/SwiftProtobuf/) has the generated - API documentation - * [INTERNALS.md](Documentation/INTERNALS.md) documents the internal structure - of the generated code and the library. This - should only be needed by folks interested in working on SwiftProtobuf - itself. - * [STYLE_GUIDELINES.md](Documentation/STYLE_GUIDELINES.md) documents the style - guidelines we have adopted in our codebase if you are interested in - contributing - -# Getting Started - -If you've worked with Protocol Buffers before, adding Swift support is very -simple: you just need to build the `protoc-gen-swift` program and copy it into -your PATH. -The `protoc` program will find and use it automatically, allowing you -to build Swift sources for your proto files. -You will also, of course, need to add the SwiftProtobuf runtime library to -your project as explained below. - -## System Requirements - -To use Swift with Protocol buffers, you'll need: - -* A Swift 4.2 or later compiler (Xcode 10.0 or later). Support is included -for the Swift Package Manager; or using the included Xcode project. The Swift -protobuf project is being developed and tested against the latest release -version of Swift available from [Swift.org](https://swift.org) - -* Google's protoc compiler. The Swift protoc plugin is being actively -developed and tested against the latest protobuf sources. -The SwiftProtobuf tests need a version of protoc which supports the -`swift_prefix` option (introduced in protoc 3.2.0). -It may work with earlier versions of protoc. -You can get recent versions from -[Google's github repository](https://github.com/protocolbuffers/protobuf). - -## Building and Installing the Code Generator Plugin - -To translate `.proto` files into Swift, you will need both Google's -protoc compiler and the SwiftProtobuf code generator plugin. - -Building the plugin should be simple on any supported Swift platform: - -``` -$ git clone https://github.com/apple/swift-protobuf.git -$ cd swift-protobuf -``` - -Pick what released version of SwiftProtobuf you are going to use. You can get -a list of tags with: - -``` -$ git tag -l -``` - -Once you pick the version you will use, set your local state to match, and -build the protoc plugin: - -``` -$ git checkout tags/[tag_name] -$ swift build -c release -``` - -This will create a binary called `protoc-gen-swift` in the `.build/release` -directory. - -To install, just copy this one executable into a directory that is -part of your `PATH` environment variable. - -NOTE: The Swift runtime support is now included with macOS. If you are -using old Xcode versions or are on older system versions, you might need -to use also use `--static-swift-stdlib` with `swift build`. - -### Alternatively install via Homebrew - -If you prefer using [Homebrew](https://brew.sh): - -``` -$ brew install swift-protobuf -``` - -This will install `protoc` compiler and Swift code generator plugin. - -## Converting .proto files into Swift - -To generate Swift output for your .proto files, you run the `protoc` command as -usual, using the `--swift_out=` option: - -``` -$ protoc --swift_out=. my.proto -``` - -The `protoc` program will automatically look for `protoc-gen-swift` in your -`PATH` and use it. - -Each `.proto` input file will get translated to a corresponding `.pb.swift` -file in the output directory. - -More information about building and using `protoc-gen-swift` can be found -in the [detailed Plugin documentation](Documentation/PLUGIN.md). - -## Adding the SwiftProtobuf library to your project... - -To use the generated code, you need to include the `SwiftProtobuf` library -module in your project. How you do this will vary depending on how -you're building your project. Note that in all cases, we strongly recommend -that you use the version of the SwiftProtobuf library that corresponds to -the version of `protoc-gen-swift` you used to generate the code. - -### ...using `swift build` - -After copying the `.pb.swift` files into your project, you will need to add the -[SwiftProtobuf library](https://github.com/apple/swift-protobuf) to your -project to support the generated code. -If you are using the Swift Package Manager, add a dependency to your -`Package.swift` file and import the `SwiftProtobuf` library into the desired -targets. Adjust the `"1.6.0"` here to match the `[tag_name]` you used to build -the plugin above: - -```swift -dependencies: [ - .package(name: "SwiftProtobuf", url: "https://github.com/apple/swift-protobuf.git", from: "1.6.0"), -], -targets: [ - .target(name: "MyTarget", dependencies: ["SwiftProtobuf"]), -] -``` - -### ...using Xcode - -If you are using Xcode, then you should: - -* Add the `.pb.swift` source files generated from your protos directly to your - project -* Add the appropriate `SwiftProtobuf_` target from the Xcode project - in this package to your project. - -### ...using CocoaPods - -If you're using CocoaPods, add this to your `Podfile` adjusting the `:tag` to -match the `[tag_name]` you used to build the plugin above: - -```ruby -pod 'SwiftProtobuf', '~> 1.0' -``` - -And run `pod install`. - -NOTE: CocoaPods 1.7 or newer is required. - -### ...using Carthage - -If you're using Carthage, add this to your `Cartfile` but adjust the tag to match the `[tag_name]` you used to build the plugin above: - -```ruby -github "apple/swift-protobuf" ~> 1.0 -``` - -Run `carthage update` and drag `SwiftProtobuf.framework` into your Xcode.project. - -# Quick Start - -Once you have installed the code generator, used it to -generate Swift code from your `.proto` file, and -added the SwiftProtobuf library to your project, you can -just use the generated types as you would any other Swift -struct. - -For example, you might start with the following very simple -proto file: -```protobuf -syntax = "proto3"; - -message BookInfo { - int64 id = 1; - string title = 2; - string author = 3; -} -``` - -Then generate Swift code using: -``` -$ protoc --swift_out=. DataModel.proto -``` - -The generated code will expose a Swift property for -each of the proto fields as well as a selection -of serialization and deserialization capabilities: -```swift -// Create a BookInfo object and populate it: -var info = BookInfo() -info.id = 1734 -info.title = "Really Interesting Book" -info.author = "Jane Smith" - -// As above, but generating a read-only value: -let info2 = BookInfo.with { - $0.id = 1735 - $0.title = "Even More Interesting" - $0.author = "Jane Q. Smith" - } - -// Serialize to binary protobuf format: -let binaryData: Data = try info.serializedData() - -// Deserialize a received Data object from `binaryData` -let decodedInfo = try BookInfo(serializedData: binaryData) - -// Serialize to JSON format as a Data object -let jsonData: Data = try info.jsonUTF8Data() - -// Deserialize from JSON format from `jsonData` -let receivedFromJSON = try BookInfo(jsonUTF8Data: jsonData) -``` - -You can find more information in the detailed -[API Documentation](Documentation/API.md). - -## Report any issues - -If you run into problems, please send us a detailed report. -At a minimum, please include: - -* The specific operating system and version (for example, "macOS 10.12.1" or - "Ubuntu 16.10") -* The version of Swift you have installed (from `swift --version`) -* The version of the protoc compiler you are working with from - `protoc --version` -* The specific version of this source code (you can use `git log -1` to get the - latest commit ID) -* Any local changes you may have diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/AnyMessageStorage.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/AnyMessageStorage.swift deleted file mode 100644 index 01e5b4d..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/AnyMessageStorage.swift +++ /dev/null @@ -1,476 +0,0 @@ -// Sources/SwiftProtobuf/AnyMessageStorage.swift - Custom stroage for Any WKT -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Hand written storage class for Google_Protobuf_Any to support on demand -/// transforms between the formats. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -#if !swift(>=4.2) -private let i_2166136261 = Int(bitPattern: 2166136261) -private let i_16777619 = Int(16777619) -#endif - -fileprivate func serializeAnyJSON( - for message: Message, - typeURL: String, - options: JSONEncodingOptions -) throws -> String { - var visitor = try JSONEncodingVisitor(type: type(of: message), options: options) - visitor.startObject(message: message) - visitor.encodeField(name: "@type", stringValue: typeURL) - if let m = message as? _CustomJSONCodable { - let value = try m.encodedJSONString(options: options) - visitor.encodeField(name: "value", jsonText: value) - } else { - try message.traverse(visitor: &visitor) - } - visitor.endObject() - return visitor.stringResult -} - -fileprivate func emitVerboseTextForm(visitor: inout TextFormatEncodingVisitor, message: Message, typeURL: String) { - let url: String - if typeURL.isEmpty { - url = buildTypeURL(forMessage: message, typePrefix: defaultAnyTypeURLPrefix) - } else { - url = typeURL - } - visitor.visitAnyVerbose(value: message, typeURL: url) -} - -fileprivate func asJSONObject(body: Data) -> Data { - let asciiOpenCurlyBracket = UInt8(ascii: "{") - let asciiCloseCurlyBracket = UInt8(ascii: "}") - var result = Data([asciiOpenCurlyBracket]) - result.append(body) - result.append(asciiCloseCurlyBracket) - return result -} - -fileprivate func unpack(contentJSON: Data, - extensions: ExtensionMap, - options: JSONDecodingOptions, - as messageType: Message.Type) throws -> Message { - guard messageType is _CustomJSONCodable.Type else { - let contentJSONAsObject = asJSONObject(body: contentJSON) - return try messageType.init(jsonUTF8Data: contentJSONAsObject, extensions: extensions, options: options) - } - - var value = String() - try contentJSON.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - if body.count > 0 { - var scanner = JSONScanner(source: body, options: options, extensions: extensions) - let key = try scanner.nextQuotedString() - if key != "value" { - // The only thing within a WKT should be "value". - throw AnyUnpackError.malformedWellKnownTypeJSON - } - try scanner.skipRequiredColon() // Can't fail - value = try scanner.skip() - if !scanner.complete { - // If that wasn't the end, then there was another key, - // and WKTs should only have the one. - throw AnyUnpackError.malformedWellKnownTypeJSON - } - } - } - return try messageType.init(jsonString: value, extensions: extensions, options: options) -} - -internal class AnyMessageStorage { - // The two properties generated Google_Protobuf_Any will reference. - var _typeURL = String() - var _value: Data { - // Remapped to the internal `state`. - get { - switch state { - case .binary(let value): - return value - case .message(let message): - do { - return try message.serializedData(partial: true) - } catch { - return Data() - } - case .contentJSON(let contentJSON, let options): - guard let messageType = Google_Protobuf_Any.messageType(forTypeURL: _typeURL) else { - return Data() - } - do { - let m = try unpack(contentJSON: contentJSON, - extensions: SimpleExtensionMap(), - options: options, - as: messageType) - return try m.serializedData(partial: true) - } catch { - return Data() - } - } - } - set { - state = .binary(newValue) - } - } - - enum InternalState { - // a serialized binary - // Note: Unlike contentJSON below, binary does not bother to capture the - // decoding options. This is because the actual binary format is the binary - // blob, i.e. - when decoding from binary, the spec doesn't include decoding - // the binary blob, it is pass through. Instead there is a public api for - // unpacking that takes new options when a developer decides to decode it. - case binary(Data) - // a message - case message(Message) - // parsed JSON with the @type removed and the decoding options. - case contentJSON(Data, JSONDecodingOptions) - } - var state: InternalState = .binary(Data()) - - static let defaultInstance = AnyMessageStorage() - - private init() {} - - init(copying source: AnyMessageStorage) { - _typeURL = source._typeURL - state = source.state - } - - func isA(_ type: M.Type) -> Bool { - if _typeURL.isEmpty { - return false - } - let encodedType = typeName(fromURL: _typeURL) - return encodedType == M.protoMessageName - } - - // This is only ever called with the expectation that target will be fully - // replaced during the unpacking and never as a merge. - func unpackTo( - target: inout M, - extensions: ExtensionMap?, - options: BinaryDecodingOptions - ) throws { - guard isA(M.self) else { - throw AnyUnpackError.typeMismatch - } - - switch state { - case .binary(let data): - target = try M(serializedData: data, extensions: extensions, partial: true, options: options) - - case .message(let msg): - if let message = msg as? M { - // Already right type, copy it over. - target = message - } else { - // Different type, serialize and parse. - let data = try msg.serializedData(partial: true) - target = try M(serializedData: data, extensions: extensions, partial: true) - } - - case .contentJSON(let contentJSON, let options): - target = try unpack(contentJSON: contentJSON, - extensions: extensions ?? SimpleExtensionMap(), - options: options, - as: M.self) as! M - } - } - - // Called before the message is traversed to do any error preflights. - // Since traverse() will use _value, this is our chance to throw - // when _value can't. - func preTraverse() throws { - switch state { - case .binary: - // Nothing to be checked. - break - - case .message: - // When set from a developer provided message, partial support - // is done. Any message that comes in from another format isn't - // checked, and transcoding the isInitialized requirement is - // never inserted. - break - - case .contentJSON(let contentJSON, let options): - // contentJSON requires we have the type available for decoding - guard let messageType = Google_Protobuf_Any.messageType(forTypeURL: _typeURL) else { - throw BinaryEncodingError.anyTranscodeFailure - } - do { - // Decodes the full JSON and then discard the result. - // The regular traversal will decode this again by querying the - // `value` field, but that has no way to fail. As a result, - // we need this to accurately handle decode errors. - _ = try unpack(contentJSON: contentJSON, - extensions: SimpleExtensionMap(), - options: options, - as: messageType) - } catch { - throw BinaryEncodingError.anyTranscodeFailure - } - } - } -} - -/// Custom handling for Text format. -extension AnyMessageStorage { - func decodeTextFormat(typeURL url: String, decoder: inout TextFormatDecoder) throws { - // Decoding the verbose form requires knowing the type. - _typeURL = url - guard let messageType = Google_Protobuf_Any.messageType(forTypeURL: url) else { - // The type wasn't registered, can't parse it. - throw TextFormatDecodingError.malformedText - } - let terminator = try decoder.scanner.skipObjectStart() - var subDecoder = try TextFormatDecoder(messageType: messageType, scanner: decoder.scanner, terminator: terminator) - if messageType == Google_Protobuf_Any.self { - var any = Google_Protobuf_Any() - try any.decodeTextFormat(decoder: &subDecoder) - state = .message(any) - } else { - var m = messageType.init() - try m.decodeMessage(decoder: &subDecoder) - state = .message(m) - } - decoder.scanner = subDecoder.scanner - if try decoder.nextFieldNumber() != nil { - // Verbose any can never have additional keys. - throw TextFormatDecodingError.malformedText - } - } - - // Specialized traverse for writing out a Text form of the Any. - // This prefers the more-legible "verbose" format if it can - // use it, otherwise will fall back to simpler forms. - internal func textTraverse(visitor: inout TextFormatEncodingVisitor) { - switch state { - case .binary(let valueData): - if let messageType = Google_Protobuf_Any.messageType(forTypeURL: _typeURL) { - // If we can decode it, we can write the readable verbose form: - do { - let m = try messageType.init(serializedData: valueData, partial: true) - emitVerboseTextForm(visitor: &visitor, message: m, typeURL: _typeURL) - return - } catch { - // Fall through to just print the type and raw binary data - } - } - if !_typeURL.isEmpty { - try! visitor.visitSingularStringField(value: _typeURL, fieldNumber: 1) - } - if !valueData.isEmpty { - try! visitor.visitSingularBytesField(value: valueData, fieldNumber: 2) - } - - case .message(let msg): - emitVerboseTextForm(visitor: &visitor, message: msg, typeURL: _typeURL) - - case .contentJSON(let contentJSON, let options): - // If we can decode it, we can write the readable verbose form: - if let messageType = Google_Protobuf_Any.messageType(forTypeURL: _typeURL) { - do { - let m = try unpack(contentJSON: contentJSON, - extensions: SimpleExtensionMap(), - options: options, - as: messageType) - emitVerboseTextForm(visitor: &visitor, message: m, typeURL: _typeURL) - return - } catch { - // Fall through to just print the raw JSON data - } - } - if !_typeURL.isEmpty { - try! visitor.visitSingularStringField(value: _typeURL, fieldNumber: 1) - } - // Build a readable form of the JSON: - let contentJSONAsObject = asJSONObject(body: contentJSON) - visitor.visitAnyJSONDataField(value: contentJSONAsObject) - } - } -} - -/// The obvious goal for Hashable/Equatable conformance would be for -/// hash and equality to behave as if we always decoded the inner -/// object and hashed or compared that. Unfortunately, Any typically -/// stores serialized contents and we don't always have the ability to -/// deserialize it. Since none of our supported serializations are -/// fully deterministic, we can't even ensure that equality will -/// behave this way when the Any contents are in the same -/// serialization. -/// -/// As a result, we can only really perform a "best effort" equality -/// test. Of course, regardless of the above, we must guarantee that -/// hashValue is compatible with equality. -extension AnyMessageStorage { -#if swift(>=4.2) - // Can't use _valueData for a few reasons: - // 1. Since decode is done on demand, two objects could be equal - // but created differently (one from JSON, one for Message, etc.), - // and the hash values have to be equal even if we don't have data - // yet. - // 2. map<> serialization order is undefined. At the time of writing - // the Swift, Objective-C, and Go runtimes all tend to have random - // orders, so the messages could be identical, but in binary form - // they could differ. - public func hash(into hasher: inout Hasher) { - if !_typeURL.isEmpty { - hasher.combine(_typeURL) - } - } -#else // swift(>=4.2) - var hashValue: Int { - var hash: Int = i_2166136261 - if !_typeURL.isEmpty { - hash = (hash &* i_16777619) ^ _typeURL.hashValue - } - return hash - } -#endif // swift(>=4.2) - - func isEqualTo(other: AnyMessageStorage) -> Bool { - if (_typeURL != other._typeURL) { - return false - } - - // Since the library does lazy Any decode, equality is a very hard problem. - // It things exactly match, that's pretty easy, otherwise, one ends up having - // to error on saying they aren't equal. - // - // The best option would be to have Message forms and compare those, as that - // removes issues like map<> serialization order, some other protocol buffer - // implementation details/bugs around serialized form order, etc.; but that - // would also greatly slow down equality tests. - // - // Do our best to compare what is present have... - - // If both have messages, check if they are the same. - if case .message(let myMsg) = state, case .message(let otherMsg) = other.state, type(of: myMsg) == type(of: otherMsg) { - // Since the messages are known to be same type, we can claim both equal and - // not equal based on the equality comparison. - return myMsg.isEqualTo(message: otherMsg) - } - - // If both have serialized data, and they exactly match; the messages are equal. - // Because there could be map in the message, the fact that the data isn't the - // same doesn't always mean the messages aren't equal. Likewise, the binary could - // have been created by a library that doesn't order the fields, or the binary was - // created using the appending ability in of the binary format. - if case .binary(let myValue) = state, case .binary(let otherValue) = other.state, myValue == otherValue { - return true - } - - // If both have contentJSON, and they exactly match; the messages are equal. - // Because there could be map in the message (or the JSON could just be in a different - // order), the fact that the JSON isn't the same doesn't always mean the messages - // aren't equal. - if case .contentJSON(let myJSON, _) = state, - case .contentJSON(let otherJSON, _) = other.state, - myJSON == otherJSON { - return true - } - - // Out of options. To do more compares, the states conversions would have to be - // done to do comparisions; and since equality can be used somewhat removed from - // a developer (if they put protos in a Set, use them as keys to a Dictionary, etc), - // the conversion cost might be to high for those uses. Give up and say they aren't equal. - return false - } -} - -// _CustomJSONCodable support for Google_Protobuf_Any -extension AnyMessageStorage { - // Override the traversal-based JSON encoding - // This builds an Any JSON representation from one of: - // * The message we were initialized with, - // * The JSON fields we last deserialized, or - // * The protobuf field we were deserialized from. - // The last case requires locating the type, deserializing - // into an object, then reserializing back to JSON. - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - switch state { - case .binary(let valueData): - // Transcode by decoding the binary data to a message object - // and then recode back into JSON. - guard let messageType = Google_Protobuf_Any.messageType(forTypeURL: _typeURL) else { - // If we don't have the type available, we can't decode the - // binary value, so we're stuck. (The Google spec does not - // provide a way to just package the binary value for someone - // else to decode later.) - throw JSONEncodingError.anyTranscodeFailure - } - let m = try messageType.init(serializedData: valueData, partial: true) - return try serializeAnyJSON(for: m, typeURL: _typeURL, options: options) - - case .message(let msg): - // We should have been initialized with a typeURL, but - // ensure it wasn't cleared. - let url = !_typeURL.isEmpty ? _typeURL : buildTypeURL(forMessage: msg, typePrefix: defaultAnyTypeURLPrefix) - return try serializeAnyJSON(for: msg, typeURL: url, options: options) - - case .contentJSON(let contentJSON, _): - var jsonEncoder = JSONEncoder() - jsonEncoder.startObject() - jsonEncoder.startField(name: "@type") - jsonEncoder.putStringValue(value: _typeURL) - if !contentJSON.isEmpty { - jsonEncoder.append(staticText: ",") - // NOTE: This doesn't really take `options` into account since it is - // just reflecting out what was taken in originally. - jsonEncoder.append(utf8Data: contentJSON) - } - jsonEncoder.endObject() - return jsonEncoder.stringResult - } - } - - // TODO: If the type is well-known or has already been registered, - // we should consider decoding eagerly. Eager decoding would - // catch certain errors earlier (good) but would probably be - // a performance hit if the Any contents were never accessed (bad). - // Of course, we can't always decode eagerly (we don't always have the - // message type available), so the deferred logic here is still needed. - func decodeJSON(from decoder: inout JSONDecoder) throws { - try decoder.scanner.skipRequiredObjectStart() - // Reset state - _typeURL = String() - state = .binary(Data()) - if decoder.scanner.skipOptionalObjectEnd() { - return - } - - var jsonEncoder = JSONEncoder() - while true { - let key = try decoder.scanner.nextQuotedString() - try decoder.scanner.skipRequiredColon() - if key == "@type" { - _typeURL = try decoder.scanner.nextQuotedString() - } else { - jsonEncoder.startField(name: key) - let keyValueJSON = try decoder.scanner.skip() - jsonEncoder.append(text: keyValueJSON) - } - if decoder.scanner.skipOptionalObjectEnd() { - // Capture the options, but set the messageDepthLimit to be what - // was left right now, as that is the limit when the JSON is finally - // parsed. - var updatedOptions = decoder.options - updatedOptions.messageDepthLimit = decoder.scanner.recursionBudget - state = .contentJSON(jsonEncoder.dataResult, updatedOptions) - return - } - try decoder.scanner.skipRequiredComma() - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/AnyUnpackError.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/AnyUnpackError.swift deleted file mode 100644 index 738b0fe..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/AnyUnpackError.swift +++ /dev/null @@ -1,37 +0,0 @@ -// Sources/SwiftProtobuf/AnyUnpackError.swift - Any Unpacking Errors -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Errors that can be throw when unpacking a Google_Protobuf_Any. -/// -// ----------------------------------------------------------------------------- - -/// Describes errors that can occur when unpacking an `Google_Protobuf_Any` -/// message. -/// -/// `Google_Protobuf_Any` messages can be decoded from protobuf binary, text -/// format, or JSON. The contents are not parsed immediately; the raw data is -/// held in the `Google_Protobuf_Any` message until you `unpack()` it into a -/// message. At this time, any error can occur that might have occurred from a -/// regular decoding operation. There are also other errors that can occur due -/// to problems with the `Any` value's structure. -public enum AnyUnpackError: Error { - /// The `type_url` field in the `Google_Protobuf_Any` message did not match - /// the message type provided to the `unpack()` method. - case typeMismatch - - /// Well-known types being decoded from JSON must have only two fields: the - /// `@type` field and a `value` field containing the specialized JSON coding - /// of the well-known type. - case malformedWellKnownTypeJSON - - /// The `Google_Protobuf_Any` message was malformed in some other way not - /// covered by the other error cases. - case malformedAnyField -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecoder.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecoder.swift deleted file mode 100644 index f15c839..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecoder.swift +++ /dev/null @@ -1,1493 +0,0 @@ -// Sources/SwiftProtobuf/BinaryDecoder.swift - Binary decoding -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Protobuf binary format decoding engine. -/// -/// This provides the Decoder interface that interacts directly -/// with the generated code. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -internal struct BinaryDecoder: Decoder { - // Current position - private var p : UnsafeRawPointer - // Remaining bytes in input. - private var available : Int - // Position of start of field currently being parsed - private var fieldStartP : UnsafeRawPointer - // Position of end of field currently being parsed, nil if we don't know. - private var fieldEndP : UnsafeRawPointer? - // Whether or not the field value has actually been parsed - private var consumed = true - // Wire format for last-examined field - internal var fieldWireFormat = WireFormat.varint - // Field number for last-parsed field tag - private var fieldNumber: Int = 0 - // Collection of extension fields for this decode - private var extensions: ExtensionMap? - // The current group number. See decodeFullGroup(group:fieldNumber:) for how - // this is used. - private var groupFieldNumber: Int? - // The options for decoding. - private var options: BinaryDecodingOptions - - private var recursionBudget: Int - - // Collects the unknown data found while decoding a message. - private var unknownData: Data? - // Custom data to use as the unknown data while parsing a field. Used only by - // packed repeated enums; see below - private var unknownOverride: Data? - - private var complete: Bool {return available == 0} - - internal init( - forReadingFrom pointer: UnsafeRawPointer, - count: Int, - options: BinaryDecodingOptions, - extensions: ExtensionMap? = nil - ) { - // Assuming baseAddress is not nil. - p = pointer - available = count - fieldStartP = p - self.extensions = extensions - self.options = options - recursionBudget = options.messageDepthLimit - } - - internal init( - forReadingFrom pointer: UnsafeRawPointer, - count: Int, - parent: BinaryDecoder - ) { - self.init(forReadingFrom: pointer, - count: count, - options: parent.options, - extensions: parent.extensions) - recursionBudget = parent.recursionBudget - } - - private mutating func incrementRecursionDepth() throws { - recursionBudget -= 1 - if recursionBudget < 0 { - throw BinaryDecodingError.messageDepthLimit - } - } - - private mutating func decrementRecursionDepth() { - recursionBudget += 1 - // This should never happen, if it does, something is probably corrupting memory, and - // simply throwing doesn't make much sense. - if recursionBudget > options.messageDepthLimit { - fatalError("Somehow BinaryDecoding unwound more objects than it started") - } - } - - internal mutating func handleConflictingOneOf() throws { - /// Protobuf simply allows conflicting oneof values to overwrite - } - - /// Return the next field number or nil if there are no more fields. - internal mutating func nextFieldNumber() throws -> Int? { - // Since this is called for every field, I've taken some pains - // to optimize it, including unrolling a tweaked version of - // the varint parser. - if fieldNumber > 0 { - if let override = unknownOverride { - assert(!options.discardUnknownFields) - assert(fieldWireFormat != .startGroup && fieldWireFormat != .endGroup) - if unknownData == nil { - unknownData = override - } else { - unknownData!.append(override) - } - unknownOverride = nil - } else if !consumed { - if options.discardUnknownFields { - try skip() - } else { - let u = try getRawField() - if unknownData == nil { - unknownData = u - } else { - unknownData!.append(u) - } - } - } - } - - // Quit if end of input - if available == 0 { - return nil - } - - // Get the next field number - fieldStartP = p - fieldEndP = nil - let start = p - let c0 = start[0] - if let wireFormat = WireFormat(rawValue: c0 & 7) { - fieldWireFormat = wireFormat - } else { - throw BinaryDecodingError.malformedProtobuf - } - if (c0 & 0x80) == 0 { - p += 1 - available -= 1 - fieldNumber = Int(c0) >> 3 - } else { - fieldNumber = Int(c0 & 0x7f) >> 3 - if available < 2 { - throw BinaryDecodingError.malformedProtobuf - } - let c1 = start[1] - if (c1 & 0x80) == 0 { - p += 2 - available -= 2 - fieldNumber |= Int(c1) << 4 - } else { - fieldNumber |= Int(c1 & 0x7f) << 4 - if available < 3 { - throw BinaryDecodingError.malformedProtobuf - } - let c2 = start[2] - fieldNumber |= Int(c2 & 0x7f) << 11 - if (c2 & 0x80) == 0 { - p += 3 - available -= 3 - } else { - if available < 4 { - throw BinaryDecodingError.malformedProtobuf - } - let c3 = start[3] - fieldNumber |= Int(c3 & 0x7f) << 18 - if (c3 & 0x80) == 0 { - p += 4 - available -= 4 - } else { - if available < 5 { - throw BinaryDecodingError.malformedProtobuf - } - let c4 = start[4] - if c4 > 15 { - throw BinaryDecodingError.malformedProtobuf - } - fieldNumber |= Int(c4 & 0x7f) << 25 - p += 5 - available -= 5 - } - } - } - } - if fieldNumber != 0 { - consumed = false - - if fieldWireFormat == .endGroup { - if groupFieldNumber == fieldNumber { - // Reached the end of the current group, single the - // end of the message. - return nil - } else { - // .endGroup when not in a group or for a different - // group is an invalid binary. - throw BinaryDecodingError.malformedProtobuf - } - } - return fieldNumber - } - throw BinaryDecodingError.malformedProtobuf - } - - internal mutating func decodeSingularFloatField(value: inout Float) throws { - guard fieldWireFormat == WireFormat.fixed32 else { - return - } - try decodeFourByteNumber(value: &value) - consumed = true - } - - internal mutating func decodeSingularFloatField(value: inout Float?) throws { - guard fieldWireFormat == WireFormat.fixed32 else { - return - } - value = try decodeFloat() - consumed = true - } - - internal mutating func decodeRepeatedFloatField(value: inout [Float]) throws { - switch fieldWireFormat { - case WireFormat.fixed32: - let i = try decodeFloat() - value.append(i) - consumed = true - case WireFormat.lengthDelimited: - let bodyBytes = try decodeVarint() - if bodyBytes > 0 { - let itemSize = UInt64(MemoryLayout.size) - let itemCount = bodyBytes / itemSize - if bodyBytes % itemSize != 0 || bodyBytes > available { - throw BinaryDecodingError.truncated - } - value.reserveCapacity(value.count + Int(truncatingIfNeeded: itemCount)) - for _ in 1...itemCount { - value.append(try decodeFloat()) - } - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularDoubleField(value: inout Double) throws { - guard fieldWireFormat == WireFormat.fixed64 else { - return - } - value = try decodeDouble() - consumed = true - } - - internal mutating func decodeSingularDoubleField(value: inout Double?) throws { - guard fieldWireFormat == WireFormat.fixed64 else { - return - } - value = try decodeDouble() - consumed = true - } - - internal mutating func decodeRepeatedDoubleField(value: inout [Double]) throws { - switch fieldWireFormat { - case WireFormat.fixed64: - let i = try decodeDouble() - value.append(i) - consumed = true - case WireFormat.lengthDelimited: - let bodyBytes = try decodeVarint() - if bodyBytes > 0 { - let itemSize = UInt64(MemoryLayout.size) - let itemCount = bodyBytes / itemSize - if bodyBytes % itemSize != 0 || bodyBytes > available { - throw BinaryDecodingError.truncated - } - value.reserveCapacity(value.count + Int(truncatingIfNeeded: itemCount)) - for _ in 1...itemCount { - let i = try decodeDouble() - value.append(i) - } - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularInt32Field(value: inout Int32) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - value = Int32(truncatingIfNeeded: varint) - consumed = true - } - - internal mutating func decodeSingularInt32Field(value: inout Int32?) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - value = Int32(truncatingIfNeeded: varint) - consumed = true - } - - internal mutating func decodeRepeatedInt32Field(value: inout [Int32]) throws { - switch fieldWireFormat { - case WireFormat.varint: - let varint = try decodeVarint() - value.append(Int32(truncatingIfNeeded: varint)) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - let ints = Varint.countVarintsInBuffer(start: p, count: n) - value.reserveCapacity(value.count + ints) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - while !decoder.complete { - let varint = try decoder.decodeVarint() - value.append(Int32(truncatingIfNeeded: varint)) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularInt64Field(value: inout Int64) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let v = try decodeVarint() - value = Int64(bitPattern: v) - consumed = true - } - - internal mutating func decodeSingularInt64Field(value: inout Int64?) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - value = Int64(bitPattern: varint) - consumed = true - } - - internal mutating func decodeRepeatedInt64Field(value: inout [Int64]) throws { - switch fieldWireFormat { - case WireFormat.varint: - let varint = try decodeVarint() - value.append(Int64(bitPattern: varint)) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - let ints = Varint.countVarintsInBuffer(start: p, count: n) - value.reserveCapacity(value.count + ints) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - while !decoder.complete { - let varint = try decoder.decodeVarint() - value.append(Int64(bitPattern: varint)) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularUInt32Field(value: inout UInt32) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - value = UInt32(truncatingIfNeeded: varint) - consumed = true - } - - internal mutating func decodeSingularUInt32Field(value: inout UInt32?) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - value = UInt32(truncatingIfNeeded: varint) - consumed = true - } - - internal mutating func decodeRepeatedUInt32Field(value: inout [UInt32]) throws { - switch fieldWireFormat { - case WireFormat.varint: - let varint = try decodeVarint() - value.append(UInt32(truncatingIfNeeded: varint)) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - let ints = Varint.countVarintsInBuffer(start: p, count: n) - value.reserveCapacity(value.count + ints) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - while !decoder.complete { - let t = try decoder.decodeVarint() - value.append(UInt32(truncatingIfNeeded: t)) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularUInt64Field(value: inout UInt64) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - value = try decodeVarint() - consumed = true - } - - internal mutating func decodeSingularUInt64Field(value: inout UInt64?) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - value = try decodeVarint() - consumed = true - } - - internal mutating func decodeRepeatedUInt64Field(value: inout [UInt64]) throws { - switch fieldWireFormat { - case WireFormat.varint: - let varint = try decodeVarint() - value.append(varint) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - let ints = Varint.countVarintsInBuffer(start: p, count: n) - value.reserveCapacity(value.count + ints) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - while !decoder.complete { - let t = try decoder.decodeVarint() - value.append(t) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularSInt32Field(value: inout Int32) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - let t = UInt32(truncatingIfNeeded: varint) - value = ZigZag.decoded(t) - consumed = true - } - - internal mutating func decodeSingularSInt32Field(value: inout Int32?) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - let t = UInt32(truncatingIfNeeded: varint) - value = ZigZag.decoded(t) - consumed = true - } - - internal mutating func decodeRepeatedSInt32Field(value: inout [Int32]) throws { - switch fieldWireFormat { - case WireFormat.varint: - let varint = try decodeVarint() - let t = UInt32(truncatingIfNeeded: varint) - value.append(ZigZag.decoded(t)) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - let ints = Varint.countVarintsInBuffer(start: p, count: n) - value.reserveCapacity(value.count + ints) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - while !decoder.complete { - let varint = try decoder.decodeVarint() - let t = UInt32(truncatingIfNeeded: varint) - value.append(ZigZag.decoded(t)) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularSInt64Field(value: inout Int64) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - value = ZigZag.decoded(varint) - consumed = true - } - - internal mutating func decodeSingularSInt64Field(value: inout Int64?) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - value = ZigZag.decoded(varint) - consumed = true - } - - internal mutating func decodeRepeatedSInt64Field(value: inout [Int64]) throws { - switch fieldWireFormat { - case WireFormat.varint: - let varint = try decodeVarint() - value.append(ZigZag.decoded(varint)) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - let ints = Varint.countVarintsInBuffer(start: p, count: n) - value.reserveCapacity(value.count + ints) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - while !decoder.complete { - let varint = try decoder.decodeVarint() - value.append(ZigZag.decoded(varint)) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularFixed32Field(value: inout UInt32) throws { - guard fieldWireFormat == WireFormat.fixed32 else { - return - } - var i: UInt32 = 0 - try decodeFourByteNumber(value: &i) - value = UInt32(littleEndian: i) - consumed = true - } - - internal mutating func decodeSingularFixed32Field(value: inout UInt32?) throws { - guard fieldWireFormat == WireFormat.fixed32 else { - return - } - var i: UInt32 = 0 - try decodeFourByteNumber(value: &i) - value = UInt32(littleEndian: i) - consumed = true - } - - internal mutating func decodeRepeatedFixed32Field(value: inout [UInt32]) throws { - switch fieldWireFormat { - case WireFormat.fixed32: - var i: UInt32 = 0 - try decodeFourByteNumber(value: &i) - value.append(UInt32(littleEndian: i)) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - value.reserveCapacity(value.count + n / MemoryLayout.size) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - var i: UInt32 = 0 - while !decoder.complete { - try decoder.decodeFourByteNumber(value: &i) - value.append(UInt32(littleEndian: i)) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularFixed64Field(value: inout UInt64) throws { - guard fieldWireFormat == WireFormat.fixed64 else { - return - } - var i: UInt64 = 0 - try decodeEightByteNumber(value: &i) - value = UInt64(littleEndian: i) - consumed = true - } - - internal mutating func decodeSingularFixed64Field(value: inout UInt64?) throws { - guard fieldWireFormat == WireFormat.fixed64 else { - return - } - var i: UInt64 = 0 - try decodeEightByteNumber(value: &i) - value = UInt64(littleEndian: i) - consumed = true - } - - internal mutating func decodeRepeatedFixed64Field(value: inout [UInt64]) throws { - switch fieldWireFormat { - case WireFormat.fixed64: - var i: UInt64 = 0 - try decodeEightByteNumber(value: &i) - value.append(UInt64(littleEndian: i)) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - value.reserveCapacity(value.count + n / MemoryLayout.size) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - var i: UInt64 = 0 - while !decoder.complete { - try decoder.decodeEightByteNumber(value: &i) - value.append(UInt64(littleEndian: i)) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularSFixed32Field(value: inout Int32) throws { - guard fieldWireFormat == WireFormat.fixed32 else { - return - } - var i: Int32 = 0 - try decodeFourByteNumber(value: &i) - value = Int32(littleEndian: i) - consumed = true - } - - internal mutating func decodeSingularSFixed32Field(value: inout Int32?) throws { - guard fieldWireFormat == WireFormat.fixed32 else { - return - } - var i: Int32 = 0 - try decodeFourByteNumber(value: &i) - value = Int32(littleEndian: i) - consumed = true - } - - internal mutating func decodeRepeatedSFixed32Field(value: inout [Int32]) throws { - switch fieldWireFormat { - case WireFormat.fixed32: - var i: Int32 = 0 - try decodeFourByteNumber(value: &i) - value.append(Int32(littleEndian: i)) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - value.reserveCapacity(value.count + n / MemoryLayout.size) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - var i: Int32 = 0 - while !decoder.complete { - try decoder.decodeFourByteNumber(value: &i) - value.append(Int32(littleEndian: i)) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularSFixed64Field(value: inout Int64) throws { - guard fieldWireFormat == WireFormat.fixed64 else { - return - } - var i: Int64 = 0 - try decodeEightByteNumber(value: &i) - value = Int64(littleEndian: i) - consumed = true - } - - internal mutating func decodeSingularSFixed64Field(value: inout Int64?) throws { - guard fieldWireFormat == WireFormat.fixed64 else { - return - } - var i: Int64 = 0 - try decodeEightByteNumber(value: &i) - value = Int64(littleEndian: i) - consumed = true - } - - internal mutating func decodeRepeatedSFixed64Field(value: inout [Int64]) throws { - switch fieldWireFormat { - case WireFormat.fixed64: - var i: Int64 = 0 - try decodeEightByteNumber(value: &i) - value.append(Int64(littleEndian: i)) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - value.reserveCapacity(value.count + n / MemoryLayout.size) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - var i: Int64 = 0 - while !decoder.complete { - try decoder.decodeEightByteNumber(value: &i) - value.append(Int64(littleEndian: i)) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularBoolField(value: inout Bool) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - value = try decodeVarint() != 0 - consumed = true - } - - internal mutating func decodeSingularBoolField(value: inout Bool?) throws { - guard fieldWireFormat == WireFormat.varint else { - return - } - value = try decodeVarint() != 0 - consumed = true - } - - internal mutating func decodeRepeatedBoolField(value: inout [Bool]) throws { - switch fieldWireFormat { - case WireFormat.varint: - let varint = try decodeVarint() - value.append(varint != 0) - consumed = true - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - let ints = Varint.countVarintsInBuffer(start: p, count: n) - value.reserveCapacity(value.count + ints) - var decoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - while !decoder.complete { - let t = try decoder.decodeVarint() - value.append(t != 0) - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularStringField(value: inout String) throws { - guard fieldWireFormat == WireFormat.lengthDelimited else { - return - } - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - if let s = utf8ToString(bytes: p, count: n) { - value = s - consumed = true - } else { - throw BinaryDecodingError.invalidUTF8 - } - } - - internal mutating func decodeSingularStringField(value: inout String?) throws { - guard fieldWireFormat == WireFormat.lengthDelimited else { - return - } - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - if let s = utf8ToString(bytes: p, count: n) { - value = s - consumed = true - } else { - throw BinaryDecodingError.invalidUTF8 - } - } - - internal mutating func decodeRepeatedStringField(value: inout [String]) throws { - switch fieldWireFormat { - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - if let s = utf8ToString(bytes: p, count: n) { - value.append(s) - consumed = true - } else { - throw BinaryDecodingError.invalidUTF8 - } - default: - return - } - } - - internal mutating func decodeSingularBytesField(value: inout Data) throws { - guard fieldWireFormat == WireFormat.lengthDelimited else { - return - } - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - value = Data(bytes: p, count: n) - consumed = true - } - - internal mutating func decodeSingularBytesField(value: inout Data?) throws { - guard fieldWireFormat == WireFormat.lengthDelimited else { - return - } - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - value = Data(bytes: p, count: n) - consumed = true - } - - internal mutating func decodeRepeatedBytesField(value: inout [Data]) throws { - switch fieldWireFormat { - case WireFormat.lengthDelimited: - var n: Int = 0 - let p = try getFieldBodyBytes(count: &n) - value.append(Data(bytes: p, count: n)) - consumed = true - default: - return - } - } - - internal mutating func decodeSingularEnumField(value: inout E?) throws where E.RawValue == Int { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - if let v = E(rawValue: Int(Int32(truncatingIfNeeded: varint))) { - value = v - consumed = true - } - } - - internal mutating func decodeSingularEnumField(value: inout E) throws where E.RawValue == Int { - guard fieldWireFormat == WireFormat.varint else { - return - } - let varint = try decodeVarint() - if let v = E(rawValue: Int(Int32(truncatingIfNeeded: varint))) { - value = v - consumed = true - } - } - - internal mutating func decodeRepeatedEnumField(value: inout [E]) throws where E.RawValue == Int { - switch fieldWireFormat { - case WireFormat.varint: - let varint = try decodeVarint() - if let v = E(rawValue: Int(Int32(truncatingIfNeeded: varint))) { - value.append(v) - consumed = true - } - case WireFormat.lengthDelimited: - var n: Int = 0 - var extras: [Int32]? - let p = try getFieldBodyBytes(count: &n) - let ints = Varint.countVarintsInBuffer(start: p, count: n) - value.reserveCapacity(value.count + ints) - var subdecoder = BinaryDecoder(forReadingFrom: p, count: n, parent: self) - while !subdecoder.complete { - let u64 = try subdecoder.decodeVarint() - let i32 = Int32(truncatingIfNeeded: u64) - if let v = E(rawValue: Int(i32)) { - value.append(v) - } else if !options.discardUnknownFields { - if extras == nil { - extras = [] - } - extras!.append(i32) - } - } - if let extras = extras { - let fieldTag = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - let bodySize = extras.reduce(0) { $0 + Varint.encodedSize(of: Int64($1)) } - let fieldSize = Varint.encodedSize(of: fieldTag.rawValue) + Varint.encodedSize(of: Int64(bodySize)) + bodySize - var field = Data(count: fieldSize) - field.withUnsafeMutableBytes { (body: UnsafeMutableRawBufferPointer) in - if let baseAddress = body.baseAddress, body.count > 0 { - var encoder = BinaryEncoder(forWritingInto: baseAddress) - encoder.startField(tag: fieldTag) - encoder.putVarInt(value: Int64(bodySize)) - for v in extras { - encoder.putVarInt(value: Int64(v)) - } - } - } - unknownOverride = field - } - consumed = true - default: - return - } - } - - internal mutating func decodeSingularMessageField(value: inout M?) throws { - guard fieldWireFormat == WireFormat.lengthDelimited else { - return - } - var count: Int = 0 - let p = try getFieldBodyBytes(count: &count) - if value == nil { - value = M() - } - var subDecoder = BinaryDecoder(forReadingFrom: p, count: count, parent: self) - try subDecoder.decodeFullMessage(message: &value!) - consumed = true - } - - internal mutating func decodeRepeatedMessageField(value: inout [M]) throws { - guard fieldWireFormat == WireFormat.lengthDelimited else { - return - } - var count: Int = 0 - let p = try getFieldBodyBytes(count: &count) - var newValue = M() - var subDecoder = BinaryDecoder(forReadingFrom: p, count: count, parent: self) - try subDecoder.decodeFullMessage(message: &newValue) - value.append(newValue) - consumed = true - } - - internal mutating func decodeFullMessage(message: inout M) throws { - assert(unknownData == nil) - try incrementRecursionDepth() - try message.decodeMessage(decoder: &self) - decrementRecursionDepth() - guard complete else { - throw BinaryDecodingError.trailingGarbage - } - if let unknownData = unknownData { - message.unknownFields.append(protobufData: unknownData) - } - } - - internal mutating func decodeSingularGroupField(value: inout G?) throws { - var group = value ?? G() - if try decodeFullGroup(group: &group, fieldNumber: fieldNumber) { - value = group - consumed = true - } - } - - internal mutating func decodeRepeatedGroupField(value: inout [G]) throws { - var group = G() - if try decodeFullGroup(group: &group, fieldNumber: fieldNumber) { - value.append(group) - consumed = true - } - } - - private mutating func decodeFullGroup(group: inout G, fieldNumber: Int) throws -> Bool { - guard fieldWireFormat == WireFormat.startGroup else { - return false - } - try incrementRecursionDepth() - - // This works by making a clone of the current decoder state and - // setting `groupFieldNumber` to signal `nextFieldNumber()` to watch - // for that as a marker for having reached the end of a group/message. - // Groups within groups works because this effectively makes a stack - // of decoders, each one looking for their ending tag. - - var subDecoder = self - subDecoder.groupFieldNumber = fieldNumber - // startGroup was read, so current tag/data is done (otherwise the - // startTag will end up in the unknowns of the first thing decoded). - subDecoder.consumed = true - // The group (message) doesn't get any existing unknown fields from - // the parent. - subDecoder.unknownData = nil - try group.decodeMessage(decoder: &subDecoder) - guard subDecoder.fieldNumber == fieldNumber && subDecoder.fieldWireFormat == .endGroup else { - throw BinaryDecodingError.truncated - } - if let groupUnknowns = subDecoder.unknownData { - group.unknownFields.append(protobufData: groupUnknowns) - } - // Advance over what was parsed. - consume(length: available - subDecoder.available) - assert(recursionBudget == subDecoder.recursionBudget) - decrementRecursionDepth() - return true - } - - internal mutating func decodeMapField(fieldType: _ProtobufMap.Type, value: inout _ProtobufMap.BaseType) throws { - guard fieldWireFormat == WireFormat.lengthDelimited else { - return - } - var k: KeyType.BaseType? - var v: ValueType.BaseType? - var count: Int = 0 - let p = try getFieldBodyBytes(count: &count) - var subdecoder = BinaryDecoder(forReadingFrom: p, count: count, parent: self) - while let tag = try subdecoder.getTag() { - if tag.wireFormat == .endGroup { - throw BinaryDecodingError.malformedProtobuf - } - let fieldNumber = tag.fieldNumber - switch fieldNumber { - case 1: - try KeyType.decodeSingular(value: &k, from: &subdecoder) - case 2: - try ValueType.decodeSingular(value: &v, from: &subdecoder) - default: // Skip any other fields within the map entry object - try subdecoder.skip() - } - } - if !subdecoder.complete { - throw BinaryDecodingError.trailingGarbage - } - // A map<> definition can't provide a default value for the keys/values, - // so it is safe to use the proto3 default to get the right - // integer/string/bytes. The one catch is a proto2 enum (which can be the - // value) can have a non zero value, but that case is the next - // custom decodeMapField<>() method and handles it. - value[k ?? KeyType.proto3DefaultValue] = v ?? ValueType.proto3DefaultValue - consumed = true - } - - internal mutating func decodeMapField(fieldType: _ProtobufEnumMap.Type, value: inout _ProtobufEnumMap.BaseType) throws where ValueType.RawValue == Int { - guard fieldWireFormat == WireFormat.lengthDelimited else { - return - } - var k: KeyType.BaseType? - var v: ValueType? - var count: Int = 0 - let p = try getFieldBodyBytes(count: &count) - var subdecoder = BinaryDecoder(forReadingFrom: p, count: count, parent: self) - while let tag = try subdecoder.getTag() { - if tag.wireFormat == .endGroup { - throw BinaryDecodingError.malformedProtobuf - } - let fieldNumber = tag.fieldNumber - switch fieldNumber { - case 1: // Keys are basic types - try KeyType.decodeSingular(value: &k, from: &subdecoder) - case 2: // Value is an Enum type - try subdecoder.decodeSingularEnumField(value: &v) - if v == nil && tag.wireFormat == .varint { - // Enum decode fail and wire format was varint, so this had to - // have been a proto2 unknown enum value. This whole map entry - // into the parent message's unknown fields. If the wire format - // was wrong, treat it like an unknown field and drop it with - // the map entry. - return - } - default: // Skip any other fields within the map entry object - try subdecoder.skip() - } - } - if !subdecoder.complete { - throw BinaryDecodingError.trailingGarbage - } - // A map<> definition can't provide a default value for the keys, so it - // is safe to use the proto3 default to get the right integer/string/bytes. - value[k ?? KeyType.proto3DefaultValue] = v ?? ValueType() - consumed = true - } - - internal mutating func decodeMapField(fieldType: _ProtobufMessageMap.Type, value: inout _ProtobufMessageMap.BaseType) throws { - guard fieldWireFormat == WireFormat.lengthDelimited else { - return - } - var k: KeyType.BaseType? - var v: ValueType? - var count: Int = 0 - let p = try getFieldBodyBytes(count: &count) - var subdecoder = BinaryDecoder(forReadingFrom: p, count: count, parent: self) - while let tag = try subdecoder.getTag() { - if tag.wireFormat == .endGroup { - throw BinaryDecodingError.malformedProtobuf - } - let fieldNumber = tag.fieldNumber - switch fieldNumber { - case 1: // Keys are basic types - try KeyType.decodeSingular(value: &k, from: &subdecoder) - case 2: // Value is a message type - try subdecoder.decodeSingularMessageField(value: &v) - default: // Skip any other fields within the map entry object - try subdecoder.skip() - } - } - if !subdecoder.complete { - throw BinaryDecodingError.trailingGarbage - } - // A map<> definition can't provide a default value for the keys, so it - // is safe to use the proto3 default to get the right integer/string/bytes. - value[k ?? KeyType.proto3DefaultValue] = v ?? ValueType() - consumed = true - } - - internal mutating func decodeExtensionField( - values: inout ExtensionFieldValueSet, - messageType: Message.Type, - fieldNumber: Int - ) throws { - if let ext = extensions?[messageType, fieldNumber] { - try decodeExtensionField(values: &values, - messageType: messageType, - fieldNumber: fieldNumber, - messageExtension: ext) - } - } - - /// Helper to reuse between Extension decoding and MessageSet Extension decoding. - private mutating func decodeExtensionField( - values: inout ExtensionFieldValueSet, - messageType: Message.Type, - fieldNumber: Int, - messageExtension ext: AnyMessageExtension - ) throws { - assert(!consumed) - assert(fieldNumber == ext.fieldNumber) - - try values.modify(index: fieldNumber) { fieldValue in - // Message/Group extensions both will call back into the matching - // decode methods, so the recursion depth will be tracked there. - if fieldValue != nil { - try fieldValue!.decodeExtensionField(decoder: &self) - } else { - fieldValue = try ext._protobuf_newField(decoder: &self) - } - if consumed && fieldValue == nil { - // Really things should never get here, if the decoder says - // the bytes were consumed, then there should have been a - // field that consumed them (existing or created). This - // specific error result is to allow this to be more detectable. - throw BinaryDecodingError.internalExtensionError - } - } - } - - internal mutating func decodeExtensionFieldsAsMessageSet( - values: inout ExtensionFieldValueSet, - messageType: Message.Type - ) throws { - // Spin looking for the Item group, everything else will end up in unknown fields. - while let fieldNumber = try self.nextFieldNumber() { - guard fieldNumber == WireFormat.MessageSet.FieldNumbers.item && - fieldWireFormat == WireFormat.startGroup else { - continue - } - - // This is similiar to decodeFullGroup - - try incrementRecursionDepth() - var subDecoder = self - subDecoder.groupFieldNumber = fieldNumber - subDecoder.consumed = true - - let itemResult = try subDecoder.decodeMessageSetItem(values: &values, - messageType: messageType) - switch itemResult { - case .success: - // Advance over what was parsed. - consume(length: available - subDecoder.available) - consumed = true - case .handleAsUnknown: - // Nothing to do. - break - - case .malformed: - throw BinaryDecodingError.malformedProtobuf - } - - assert(recursionBudget == subDecoder.recursionBudget) - decrementRecursionDepth() - } - } - - private enum DecodeMessageSetItemResult { - case success - case handleAsUnknown - case malformed - } - - private mutating func decodeMessageSetItem( - values: inout ExtensionFieldValueSet, - messageType: Message.Type - ) throws -> DecodeMessageSetItemResult { - // This is loosely based on the C++: - // ExtensionSet::ParseMessageSetItem() - // WireFormat::ParseAndMergeMessageSetItem() - // (yes, there have two versions that are almost the same) - - var msgExtension: AnyMessageExtension? - var fieldData: Data? - - // In this loop, if wire types are wrong, things don't decode, - // just bail instead of letting things go into unknown fields. - // Wrongly formed MessageSets don't seem don't have real - // spelled out behaviors. - while let fieldNumber = try self.nextFieldNumber() { - switch fieldNumber { - case WireFormat.MessageSet.FieldNumbers.typeId: - var extensionFieldNumber: Int32 = 0 - try decodeSingularInt32Field(value: &extensionFieldNumber) - if extensionFieldNumber == 0 { return .malformed } - guard let ext = extensions?[messageType, Int(extensionFieldNumber)] else { - return .handleAsUnknown // Unknown extension. - } - msgExtension = ext - - // If there already was fieldData, decode it. - if let data = fieldData { - var wasDecoded = false - try data.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - if let baseAddress = body.baseAddress, body.count > 0 { - var extDecoder = BinaryDecoder(forReadingFrom: baseAddress, - count: body.count, - parent: self) - // Prime the decode to be correct. - extDecoder.consumed = false - extDecoder.fieldWireFormat = .lengthDelimited - try extDecoder.decodeExtensionField(values: &values, - messageType: messageType, - fieldNumber: fieldNumber, - messageExtension: ext) - wasDecoded = extDecoder.consumed - } - } - if !wasDecoded { - return .malformed - } - fieldData = nil - } - - case WireFormat.MessageSet.FieldNumbers.message: - if let ext = msgExtension { - assert(consumed == false) - try decodeExtensionField(values: &values, - messageType: messageType, - fieldNumber: ext.fieldNumber, - messageExtension: ext) - if !consumed { - return .malformed - } - } else { - // The C++ references ends up appending the blocks together as length - // delimited blocks, but the parsing will only use the first block. - // So just capture a block, and then skip any others that happen to - // be found. - if fieldData == nil { - var d: Data? - try decodeSingularBytesField(value: &d) - guard let data = d else { return .malformed } - // Save it as length delimited - let payloadSize = Varint.encodedSize(of: Int64(data.count)) + data.count - var payload = Data(count: payloadSize) - payload.withUnsafeMutableBytes { (body: UnsafeMutableRawBufferPointer) in - if let baseAddress = body.baseAddress, body.count > 0 { - var encoder = BinaryEncoder(forWritingInto: baseAddress) - encoder.putBytesValue(value: data) - } - } - fieldData = payload - } else { - guard fieldWireFormat == .lengthDelimited else { return .malformed } - try skip() - consumed = true - } - } - - default: - // Skip everything else - try skip() - consumed = true - } - } - - return .success - } - - // - // Private building blocks for the parsing above. - // - // Having these be private gives the compiler maximum latitude for - // inlining. - // - - /// Private: Advance the current position. - private mutating func consume(length: Int) { - available -= length - p += length - } - - /// Private: Skip the body for the given tag. If the given tag is - /// a group, it parses up through the corresponding group end. - private mutating func skipOver(tag: FieldTag) throws { - switch tag.wireFormat { - case .varint: - if available < 1 { - throw BinaryDecodingError.truncated - } - var c = p.load(fromByteOffset: 0, as: UInt8.self) - while (c & 0x80) != 0 { - p += 1 - available -= 1 - if available < 1 { - throw BinaryDecodingError.truncated - } - c = p.load(fromByteOffset: 0, as: UInt8.self) - } - p += 1 - available -= 1 - case .fixed64: - if available < 8 { - throw BinaryDecodingError.truncated - } - p += 8 - available -= 8 - case .lengthDelimited: - let n = try decodeVarint() - if n <= UInt64(available) { - p += Int(n) - available -= Int(n) - } else { - throw BinaryDecodingError.truncated - } - case .startGroup: - try incrementRecursionDepth() - while true { - if let innerTag = try getTagWithoutUpdatingFieldStart() { - if innerTag.wireFormat == .endGroup { - if innerTag.fieldNumber == tag.fieldNumber { - decrementRecursionDepth() - break - } else { - // .endGroup for a something other than the current - // group is an invalid binary. - throw BinaryDecodingError.malformedProtobuf - } - } else { - try skipOver(tag: innerTag) - } - } else { - throw BinaryDecodingError.truncated - } - } - case .endGroup: - throw BinaryDecodingError.malformedProtobuf - case .fixed32: - if available < 4 { - throw BinaryDecodingError.truncated - } - p += 4 - available -= 4 - } - } - - /// Private: Skip to the end of the current field. - /// - /// Assumes that fieldStartP was bookmarked by a previous - /// call to getTagType(). - /// - /// On exit, fieldStartP points to the first byte of the tag, fieldEndP points - /// to the first byte after the field contents, and p == fieldEndP. - private mutating func skip() throws { - if let end = fieldEndP { - p = end - } else { - // Rewind to start of current field. - available += p - fieldStartP - p = fieldStartP - guard let tag = try getTagWithoutUpdatingFieldStart() else { - throw BinaryDecodingError.truncated - } - try skipOver(tag: tag) - fieldEndP = p - } - } - - /// Private: Parse the next raw varint from the input. - private mutating func decodeVarint() throws -> UInt64 { - if available < 1 { - throw BinaryDecodingError.truncated - } - var start = p - var length = available - var c = start.load(fromByteOffset: 0, as: UInt8.self) - start += 1 - length -= 1 - if c & 0x80 == 0 { - p = start - available = length - return UInt64(c) - } - var value = UInt64(c & 0x7f) - var shift = UInt64(7) - while true { - if length < 1 || shift > 63 { - throw BinaryDecodingError.malformedProtobuf - } - c = start.load(fromByteOffset: 0, as: UInt8.self) - start += 1 - length -= 1 - value |= UInt64(c & 0x7f) << shift - if c & 0x80 == 0 { - p = start - available = length - return value - } - shift += 7 - } - } - - /// Private: Get the tag that starts a new field. - /// This also bookmarks the start of field for a possible skip(). - internal mutating func getTag() throws -> FieldTag? { - fieldStartP = p - fieldEndP = nil - return try getTagWithoutUpdatingFieldStart() - } - - /// Private: Parse and validate the next tag without - /// bookmarking the start of the field. This is used within - /// skip() to skip over fields within a group. - private mutating func getTagWithoutUpdatingFieldStart() throws -> FieldTag? { - if available < 1 { - return nil - } - let t = try decodeVarint() - if t < UInt64(UInt32.max) { - guard let tag = FieldTag(rawValue: UInt32(truncatingIfNeeded: t)) else { - throw BinaryDecodingError.malformedProtobuf - } - fieldWireFormat = tag.wireFormat - fieldNumber = tag.fieldNumber - return tag - } else { - throw BinaryDecodingError.malformedProtobuf - } - } - - /// Private: Return a Data containing the entirety of - /// the current field, including tag. - private mutating func getRawField() throws -> Data { - try skip() - return Data(bytes: fieldStartP, count: fieldEndP! - fieldStartP) - } - - /// Private: decode a fixed-length four-byte number. This generic - /// helper handles all four-byte number types. - private mutating func decodeFourByteNumber(value: inout T) throws { - guard available >= 4 else {throw BinaryDecodingError.truncated} - withUnsafeMutableBytes(of: &value) { dest -> Void in - dest.copyMemory(from: UnsafeRawBufferPointer(start: p, count: 4)) - } - consume(length: 4) - } - - /// Private: decode a fixed-length eight-byte number. This generic - /// helper handles all eight-byte number types. - private mutating func decodeEightByteNumber(value: inout T) throws { - guard available >= 8 else {throw BinaryDecodingError.truncated} - withUnsafeMutableBytes(of: &value) { dest -> Void in - dest.copyMemory(from: UnsafeRawBufferPointer(start: p, count: 8)) - } - consume(length: 8) - } - - private mutating func decodeFloat() throws -> Float { - var littleEndianBytes: UInt32 = 0 - try decodeFourByteNumber(value: &littleEndianBytes) - var nativeEndianBytes = UInt32(littleEndian: littleEndianBytes) - var float: Float = 0 - let n = MemoryLayout.size - memcpy(&float, &nativeEndianBytes, n) - return float - } - - private mutating func decodeDouble() throws -> Double { - var littleEndianBytes: UInt64 = 0 - try decodeEightByteNumber(value: &littleEndianBytes) - var nativeEndianBytes = UInt64(littleEndian: littleEndianBytes) - var double: Double = 0 - let n = MemoryLayout.size - memcpy(&double, &nativeEndianBytes, n) - return double - } - - /// Private: Get the start and length for the body of - // a length-delimited field. - private mutating func getFieldBodyBytes(count: inout Int) throws -> UnsafeRawPointer { - let length = try decodeVarint() - if length <= UInt64(available) { - count = Int(length) - let body = p - consume(length: count) - return body - } - throw BinaryDecodingError.truncated - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecodingError.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecodingError.swift deleted file mode 100644 index 016d8ad..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecodingError.swift +++ /dev/null @@ -1,44 +0,0 @@ -// Sources/SwiftProtobuf/BinaryDecodingError.swift - Protobuf binary decoding errors -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Protobuf binary format decoding errors -/// -// ----------------------------------------------------------------------------- - -/// Describes errors that can occur when decoding a message from binary format. -public enum BinaryDecodingError: Error { - /// Extraneous data remained after decoding should have been complete. - case trailingGarbage - - /// The decoder unexpectedly reached the end of the data before it was - /// expected. - case truncated - - /// A string field was not encoded as valid UTF-8. - case invalidUTF8 - - /// The binary data was malformed in some way, such as an invalid wire format - /// or field tag. - case malformedProtobuf - - /// The definition of the message or one of its nested messages has required - /// fields but the binary data did not include values for them. You must pass - /// `partial: true` during decoding if you wish to explicitly ignore missing - /// required fields. - case missingRequiredFields - - /// An internal error happened while decoding. If this is ever encountered, - /// please file an issue with SwiftProtobuf with as much details as possible - /// for what happened (proto definitions, bytes being decoded (if possible)). - case internalExtensionError - - /// Reached the nesting limit for messages within messages while decoding. - case messageDepthLimit -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecodingOptions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecodingOptions.swift deleted file mode 100644 index 0432acd..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDecodingOptions.swift +++ /dev/null @@ -1,39 +0,0 @@ -// Sources/SwiftProtobuf/BinaryDecodingOptions.swift - Binary decoding options -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Binary decoding options -/// -// ----------------------------------------------------------------------------- - -/// Options for JSONDecoding. -public struct BinaryDecodingOptions { - /// The maximum nesting of message with messages. The default is 100. - /// - /// To prevent corrupt or malicious messages from causing stack overflows, - /// this controls how deep messages can be nested within other messages - /// while parsing. - public var messageDepthLimit: Int = 100 - - /// Discard unknown fields while parsing. The default is false, so parsering - /// does not discard unknown fields. - /// - /// The Protobuf binary format allows unknown fields to be still parsed - /// so the schema can be expanded without requiring all readers to be updated. - /// This works in part by haivng any unknown fields preserved so they can - /// be relayed on without loss. For a while the proto3 syntax definition - /// called for unknown fields to be dropped, but that lead to problems in - /// some case. The default is to follow the spec and keep them, but setting - /// this option to `true` allows a developer to strip them during a parse - /// in case they have a specific need to drop the unknown fields from the - /// object graph being created. - public var discardUnknownFields: Bool = false - - public init() {} -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDelimited.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDelimited.swift deleted file mode 100644 index bc2894c..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryDelimited.swift +++ /dev/null @@ -1,232 +0,0 @@ -// Sources/SwiftProtobuf/BinaryDelimited.swift - Delimited support -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Helpers to read/write message with a length prefix. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Helper methods for reading/writing messages with a length prefix. -public enum BinaryDelimited { - /// Additional errors for delimited message handing. - public enum Error: Swift.Error { - /// If a read/write to the stream fails, but the stream's `streamError` is nil, - /// this error will be throw instead since the stream didn't provide anything - /// more specific. A common cause for this can be failing to open the stream - /// before trying to read/write to it. - case unknownStreamError - - /// While reading/writing to the stream, less than the expected bytes was - /// read/written. - case truncated - } - - /// Serialize a single size-delimited message from the given stream. Delimited - /// format allows a single file or stream to contain multiple messages, - /// whereas normally writing multiple non-delimited messages to the same - /// stream would cause them to be merged. A delimited message is a varint - /// encoding the message size followed by a message of exactly that size. - /// - /// - Parameters: - /// - message: The message to be written. - /// - to: The `OutputStream` to write the message to. The stream is - /// is assumed to be ready to be written to. - /// - partial: If `false` (the default), this method will check - /// `Message.isInitialized` before encoding to verify that all required - /// fields are present. If any are missing, this method throws - /// `BinaryEncodingError.missingRequiredFields`. - /// - Throws: `BinaryEncodingError` if encoding fails, throws - /// `BinaryDelimited.Error` for some writing errors, or the - /// underlying `OutputStream.streamError` for a stream error. - public static func serialize( - message: Message, - to stream: OutputStream, - partial: Bool = false - ) throws { - // TODO: Revisit to avoid the extra buffering when encoding is streamed in general. - let serialized = try message.serializedData(partial: partial) - let totalSize = Varint.encodedSize(of: UInt64(serialized.count)) + serialized.count - var data = Data(count: totalSize) - data.withUnsafeMutableBytes { (body: UnsafeMutableRawBufferPointer) in - if let baseAddress = body.baseAddress, body.count > 0 { - var encoder = BinaryEncoder(forWritingInto: baseAddress) - encoder.putBytesValue(value: serialized) - } - } - - var written: Int = 0 - data.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - if let baseAddress = body.baseAddress, body.count > 0 { - // This assumingMemoryBound is technically unsafe, but without SR-11078 - // (https://bugs.swift.org/browse/SR-11087) we don't have another option. - // It should be "safe enough". - let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) - written = stream.write(pointer, maxLength: totalSize) - } - } - - if written != totalSize { - if written == -1 { - if let streamError = stream.streamError { - throw streamError - } - throw BinaryDelimited.Error.unknownStreamError - } - throw BinaryDelimited.Error.truncated - } - } - - /// Reads a single size-delimited message from the given stream. Delimited - /// format allows a single file or stream to contain multiple messages, - /// whereas normally parsing consumes the entire input. A delimited message - /// is a varint encoding the message size followed by a message of exactly - /// exactly that size. - /// - /// - Parameters: - /// - messageType: The type of message to read. - /// - from: The `InputStream` to read the data from. The stream is assumed - /// to be ready to read from. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - partial: If `false` (the default), this method will check - /// `Message.isInitialized` before encoding to verify that all required - /// fields are present. If any are missing, this method throws - /// `BinaryEncodingError.missingRequiredFields`. - /// - options: The BinaryDecodingOptions to use. - /// - Returns: The message read. - /// - Throws: `BinaryDecodingError` if decoding fails, throws - /// `BinaryDelimited.Error` for some reading errors, and the - /// underlying InputStream.streamError for a stream error. - public static func parse( - messageType: M.Type, - from stream: InputStream, - extensions: ExtensionMap? = nil, - partial: Bool = false, - options: BinaryDecodingOptions = BinaryDecodingOptions() - ) throws -> M { - var message = M() - try merge(into: &message, - from: stream, - extensions: extensions, - partial: partial, - options: options) - return message - } - - /// Updates the message by reading a single size-delimited message from - /// the given stream. Delimited format allows a single file or stream to - /// contain multiple messages, whereas normally parsing consumes the entire - /// input. A delimited message is a varint encoding the message size - /// followed by a message of exactly that size. - /// - /// - Note: If this method throws an error, the message may still have been - /// partially mutated by the binary data that was decoded before the error - /// occurred. - /// - /// - Parameters: - /// - mergingTo: The message to merge the data into. - /// - from: The `InputStream` to read the data from. The stream is assumed - /// to be ready to read from. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - partial: If `false` (the default), this method will check - /// `Message.isInitialized` before encoding to verify that all required - /// fields are present. If any are missing, this method throws - /// `BinaryEncodingError.missingRequiredFields`. - /// - options: The BinaryDecodingOptions to use. - /// - Throws: `BinaryDecodingError` if decoding fails, throws - /// `BinaryDelimited.Error` for some reading errors, and the - /// underlying InputStream.streamError for a stream error. - public static func merge( - into message: inout M, - from stream: InputStream, - extensions: ExtensionMap? = nil, - partial: Bool = false, - options: BinaryDecodingOptions = BinaryDecodingOptions() - ) throws { - let length = try Int(decodeVarint(stream)) - if length == 0 { - // The message was all defaults, nothing to actually read. - return - } - - var data = Data(count: length) - var bytesRead: Int = 0 - data.withUnsafeMutableBytes { (body: UnsafeMutableRawBufferPointer) in - if let baseAddress = body.baseAddress, body.count > 0 { - // This assumingMemoryBound is technically unsafe, but without SR-11078 - // (https://bugs.swift.org/browse/SR-11087) we don't have another option. - // It should be "safe enough". - let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) - bytesRead = stream.read(pointer, maxLength: length) - } - } - - if bytesRead != length { - if bytesRead == -1 { - if let streamError = stream.streamError { - throw streamError - } - throw BinaryDelimited.Error.unknownStreamError - } - throw BinaryDelimited.Error.truncated - } - - try message.merge(serializedData: data, - extensions: extensions, - partial: partial, - options: options) - } -} - -// TODO: This should go away when encoding/decoding are more stream based -// as that should provide a more direct way to do this. This is basically -// a rewrite of BinaryDecoder.decodeVarint(). -internal func decodeVarint(_ stream: InputStream) throws -> UInt64 { - - // Buffer to reuse within nextByte. - let readBuffer = UnsafeMutablePointer.allocate(capacity: 1) - #if swift(>=4.1) - defer { readBuffer.deallocate() } - #else - defer { readBuffer.deallocate(capacity: 1) } - #endif - - func nextByte() throws -> UInt8 { - let bytesRead = stream.read(readBuffer, maxLength: 1) - if bytesRead != 1 { - if bytesRead == -1 { - if let streamError = stream.streamError { - throw streamError - } - throw BinaryDelimited.Error.unknownStreamError - } - throw BinaryDelimited.Error.truncated - } - return readBuffer[0] - } - - var value: UInt64 = 0 - var shift: UInt64 = 0 - while true { - let c = try nextByte() - value |= UInt64(c & 0x7f) << shift - if c & 0x80 == 0 { - return value - } - shift += 7 - if shift > 63 { - throw BinaryDecodingError.malformedProtobuf - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncoder.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncoder.swift deleted file mode 100644 index 0a2b250..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncoder.swift +++ /dev/null @@ -1,155 +0,0 @@ -// Sources/SwiftProtobuf/BinaryEncoder.swift - Binary encoding support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Core support for protobuf binary encoding. Note that this is built -/// on the general traversal machinery. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/* - * Encoder for Binary Protocol Buffer format - */ -internal struct BinaryEncoder { - private var pointer: UnsafeMutableRawPointer - - init(forWritingInto pointer: UnsafeMutableRawPointer) { - self.pointer = pointer - } - - private mutating func append(_ byte: UInt8) { - pointer.storeBytes(of: byte, as: UInt8.self) - pointer = pointer.advanced(by: 1) - } - - private mutating func append(contentsOf data: Data) { - data.withUnsafeBytes { dataPointer in - if let baseAddress = dataPointer.baseAddress, dataPointer.count > 0 { - pointer.copyMemory(from: baseAddress, byteCount: dataPointer.count) - pointer = pointer.advanced(by: dataPointer.count) - } - } - } - - @discardableResult - private mutating func append(contentsOf bufferPointer: UnsafeRawBufferPointer) -> Int { - let count = bufferPointer.count - if let baseAddress = bufferPointer.baseAddress, count > 0 { - memcpy(pointer, baseAddress, count) - } - pointer = pointer.advanced(by: count) - return count - } - - func distance(pointer: UnsafeMutableRawPointer) -> Int { - return pointer.distance(to: self.pointer) - } - - mutating func appendUnknown(data: Data) { - append(contentsOf: data) - } - - mutating func startField(fieldNumber: Int, wireFormat: WireFormat) { - startField(tag: FieldTag(fieldNumber: fieldNumber, wireFormat: wireFormat)) - } - - mutating func startField(tag: FieldTag) { - putVarInt(value: UInt64(tag.rawValue)) - } - - mutating func putVarInt(value: UInt64) { - var v = value - while v > 127 { - append(UInt8(v & 0x7f | 0x80)) - v >>= 7 - } - append(UInt8(v)) - } - - mutating func putVarInt(value: Int64) { - putVarInt(value: UInt64(bitPattern: value)) - } - - mutating func putVarInt(value: Int) { - putVarInt(value: Int64(value)) - } - - mutating func putZigZagVarInt(value: Int64) { - let coded = ZigZag.encoded(value) - putVarInt(value: coded) - } - - mutating func putBoolValue(value: Bool) { - append(value ? 1 : 0) - } - - mutating func putFixedUInt64(value: UInt64) { - var v = value.littleEndian - let n = MemoryLayout.size - memcpy(pointer, &v, n) - pointer = pointer.advanced(by: n) - } - - mutating func putFixedUInt32(value: UInt32) { - var v = value.littleEndian - let n = MemoryLayout.size - memcpy(pointer, &v, n) - pointer = pointer.advanced(by: n) - } - - mutating func putFloatValue(value: Float) { - let n = MemoryLayout.size - var v = value - var nativeBytes: UInt32 = 0 - memcpy(&nativeBytes, &v, n) - var littleEndianBytes = nativeBytes.littleEndian - memcpy(pointer, &littleEndianBytes, n) - pointer = pointer.advanced(by: n) - } - - mutating func putDoubleValue(value: Double) { - let n = MemoryLayout.size - var v = value - var nativeBytes: UInt64 = 0 - memcpy(&nativeBytes, &v, n) - var littleEndianBytes = nativeBytes.littleEndian - memcpy(pointer, &littleEndianBytes, n) - pointer = pointer.advanced(by: n) - } - - // Write a string field, including the leading index/tag value. - mutating func putStringValue(value: String) { - let utf8 = value.utf8 - #if swift(>=5.0) - // If the String does not support an internal representation in a form - // of contiguous storage, body is not called and nil is returned. - let isAvailable = utf8.withContiguousStorageIfAvailable { (body: UnsafeBufferPointer) -> Int in - putVarInt(value: body.count) - return append(contentsOf: UnsafeRawBufferPointer(body)) - } - #else - let isAvailable: Int? = nil - #endif - if isAvailable == nil { - let count = utf8.count - putVarInt(value: count) - for b in utf8 { - pointer.storeBytes(of: b, as: UInt8.self) - pointer = pointer.advanced(by: 1) - } - } - } - - mutating func putBytesValue(value: Data) { - putVarInt(value: value.count) - append(contentsOf: value) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingError.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingError.swift deleted file mode 100644 index cbf29b5..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingError.swift +++ /dev/null @@ -1,27 +0,0 @@ -// Sources/SwiftProtobuf/BinaryEncodingError.swift - Error constants -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Enum constants that identify the particular error. -/// -// ----------------------------------------------------------------------------- - -/// Describes errors that can occur when decoding a message from binary format. -public enum BinaryEncodingError: Error { - /// `Any` fields that were decoded from JSON cannot be re-encoded to binary - /// unless the object they hold is a well-known type or a type registered via - /// `Google_Protobuf_Any.register()`. - case anyTranscodeFailure - - /// The definition of the message or one of its nested messages has required - /// fields but the message being encoded did not include values for them. You - /// must pass `partial: true` during encoding if you wish to explicitly ignore - /// missing required fields. - case missingRequiredFields -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingSizeVisitor.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingSizeVisitor.swift deleted file mode 100644 index 2db485d..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingSizeVisitor.swift +++ /dev/null @@ -1,473 +0,0 @@ -// Sources/SwiftProtobuf/BinaryEncodingSizeVisitor.swift - Binary size calculation support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Visitor used during binary encoding that precalcuates the size of a -/// serialized message. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Visitor that calculates the binary-encoded size of a message so that a -/// properly sized `Data` or `UInt8` array can be pre-allocated before -/// serialization. -internal struct BinaryEncodingSizeVisitor: Visitor { - - /// Accumulates the required size of the message during traversal. - var serializedSize: Int = 0 - - init() {} - - mutating func visitUnknown(bytes: Data) throws { - serializedSize += bytes.count - } - - mutating func visitSingularFloatField(value: Float, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed32).encodedSize - serializedSize += tagSize + MemoryLayout.size - } - - mutating func visitSingularDoubleField(value: Double, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed64).encodedSize - serializedSize += tagSize + MemoryLayout.size - } - - mutating func visitSingularInt32Field(value: Int32, fieldNumber: Int) throws { - try visitSingularInt64Field(value: Int64(value), fieldNumber: fieldNumber) - } - - mutating func visitSingularInt64Field(value: Int64, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - serializedSize += tagSize + Varint.encodedSize(of: value) - } - - mutating func visitSingularUInt32Field(value: UInt32, fieldNumber: Int) throws { - try visitSingularUInt64Field(value: UInt64(value), fieldNumber: fieldNumber) - } - - mutating func visitSingularUInt64Field(value: UInt64, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - serializedSize += tagSize + Varint.encodedSize(of: value) - } - - mutating func visitSingularSInt32Field(value: Int32, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - serializedSize += tagSize + Varint.encodedSize(of: ZigZag.encoded(value)) - } - - mutating func visitSingularSInt64Field(value: Int64, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - serializedSize += tagSize + Varint.encodedSize(of: ZigZag.encoded(value)) - } - - mutating func visitSingularFixed32Field(value: UInt32, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed32).encodedSize - serializedSize += tagSize + MemoryLayout.size - } - - mutating func visitSingularFixed64Field(value: UInt64, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed64).encodedSize - serializedSize += tagSize + MemoryLayout.size - } - - mutating func visitSingularSFixed32Field(value: Int32, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed32).encodedSize - serializedSize += tagSize + MemoryLayout.size - } - - mutating func visitSingularSFixed64Field(value: Int64, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed64).encodedSize - serializedSize += tagSize + MemoryLayout.size - } - - mutating func visitSingularBoolField(value: Bool, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - serializedSize += tagSize + 1 - } - - mutating func visitSingularStringField(value: String, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let count = value.utf8.count - serializedSize += tagSize + Varint.encodedSize(of: Int64(count)) + count - } - - mutating func visitSingularBytesField(value: Data, fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let count = value.count - serializedSize += tagSize + Varint.encodedSize(of: Int64(count)) + count - } - - // The default impls for visitRepeated*Field would work, but by implementing - // these directly, the calculation for the tag overhead can be optimized and - // the fixed width fields can be simple multiplication. - - mutating func visitRepeatedFloatField(value: [Float], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed32).encodedSize - serializedSize += tagSize * value.count + MemoryLayout.size * value.count - } - - mutating func visitRepeatedDoubleField(value: [Double], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed64).encodedSize - serializedSize += tagSize * value.count + MemoryLayout.size * value.count - } - - mutating func visitRepeatedInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - serializedSize += tagSize * value.count + dataSize - } - - mutating func visitRepeatedInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - serializedSize += tagSize * value.count + dataSize - } - - mutating func visitRepeatedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - serializedSize += tagSize * value.count + dataSize - } - - mutating func visitRepeatedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - serializedSize += tagSize * value.count + dataSize - } - - mutating func visitRepeatedSInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: ZigZag.encoded($1)) } - serializedSize += tagSize * value.count + dataSize - } - - mutating func visitRepeatedSInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: ZigZag.encoded($1)) } - serializedSize += tagSize * value.count + dataSize - } - - mutating func visitRepeatedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed32).encodedSize - serializedSize += tagSize * value.count + MemoryLayout.size * value.count - } - - mutating func visitRepeatedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed64).encodedSize - serializedSize += tagSize * value.count + MemoryLayout.size * value.count - } - - mutating func visitRepeatedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed32).encodedSize - serializedSize += tagSize * value.count + MemoryLayout.size * value.count - } - - mutating func visitRepeatedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .fixed64).encodedSize - serializedSize += tagSize * value.count + MemoryLayout.size * value.count - } - - mutating func visitRepeatedBoolField(value: [Bool], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .varint).encodedSize - serializedSize += tagSize * value.count + 1 * value.count - } - - mutating func visitRepeatedStringField(value: [String], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.reduce(0) { - let count = $1.utf8.count - return $0 + Varint.encodedSize(of: Int64(count)) + count - } - serializedSize += tagSize * value.count + dataSize - } - - mutating func visitRepeatedBytesField(value: [Data], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.reduce(0) { - let count = $1.count - return $0 + Varint.encodedSize(of: Int64(count)) + count - } - serializedSize += tagSize * value.count + dataSize - } - - // Packed field handling. - - mutating func visitPackedFloatField(value: [Float], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.count * MemoryLayout.size - serializedSize += tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedDoubleField(value: [Double], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.count * MemoryLayout.size - serializedSize += tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - serializedSize += - tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - serializedSize += - tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedSInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: ZigZag.encoded($1)) } - serializedSize += - tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedSInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: ZigZag.encoded($1)) } - serializedSize += - tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - serializedSize += - tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - serializedSize += - tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.count * MemoryLayout.size - serializedSize += tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.count * MemoryLayout.size - serializedSize += tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.count * MemoryLayout.size - serializedSize += tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.count * MemoryLayout.size - serializedSize += tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitPackedBoolField(value: [Bool], fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, wireFormat: .lengthDelimited).encodedSize - let dataSize = value.count - serializedSize += tagSize + Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitSingularEnumField(value: E, - fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .varint).encodedSize - serializedSize += tagSize - let dataSize = Varint.encodedSize(of: Int32(truncatingIfNeeded: value.rawValue)) - serializedSize += dataSize - } - - mutating func visitRepeatedEnumField(value: [E], - fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .varint).encodedSize - serializedSize += value.count * tagSize - let dataSize = value.reduce(0) { - $0 + Varint.encodedSize(of: Int32(truncatingIfNeeded: $1.rawValue)) - } - serializedSize += dataSize - } - - mutating func visitPackedEnumField(value: [E], - fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .varint).encodedSize - serializedSize += tagSize - let dataSize = value.reduce(0) { - $0 + Varint.encodedSize(of: Int32(truncatingIfNeeded: $1.rawValue)) - } - serializedSize += Varint.encodedSize(of: Int64(dataSize)) + dataSize - } - - mutating func visitSingularMessageField(value: M, - fieldNumber: Int) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .lengthDelimited).encodedSize - let messageSize = try value.serializedDataSize() - serializedSize += - tagSize + Varint.encodedSize(of: UInt64(messageSize)) + messageSize - } - - mutating func visitRepeatedMessageField(value: [M], - fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .lengthDelimited).encodedSize - serializedSize += value.count * tagSize - let dataSize = try value.reduce(0) { - let messageSize = try $1.serializedDataSize() - return $0 + Varint.encodedSize(of: UInt64(messageSize)) + messageSize - } - serializedSize += dataSize - } - - mutating func visitSingularGroupField(value: G, fieldNumber: Int) throws { - // The wire format doesn't matter here because the encoded size of the - // integer won't change based on the low three bits. - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .startGroup).encodedSize - serializedSize += 2 * tagSize - try value.traverse(visitor: &self) - } - - mutating func visitRepeatedGroupField(value: [G], - fieldNumber: Int) throws { - assert(!value.isEmpty) - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .startGroup).encodedSize - serializedSize += 2 * value.count * tagSize - for v in value { - try v.traverse(visitor: &self) - } - } - - mutating func visitMapField( - fieldType: _ProtobufMap.Type, - value: _ProtobufMap.BaseType, - fieldNumber: Int - ) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .lengthDelimited).encodedSize - for (k,v) in value { - var sizer = BinaryEncodingSizeVisitor() - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &sizer) - try ValueType.visitSingular(value: v, fieldNumber: 2, with: &sizer) - let entrySize = sizer.serializedSize - serializedSize += Varint.encodedSize(of: Int64(entrySize)) + entrySize - } - serializedSize += value.count * tagSize - } - - mutating func visitMapField( - fieldType: _ProtobufEnumMap.Type, - value: _ProtobufEnumMap.BaseType, - fieldNumber: Int - ) throws where ValueType.RawValue == Int { - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .lengthDelimited).encodedSize - for (k,v) in value { - var sizer = BinaryEncodingSizeVisitor() - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &sizer) - try sizer.visitSingularEnumField(value: v, fieldNumber: 2) - let entrySize = sizer.serializedSize - serializedSize += Varint.encodedSize(of: Int64(entrySize)) + entrySize - } - serializedSize += value.count * tagSize - } - - mutating func visitMapField( - fieldType: _ProtobufMessageMap.Type, - value: _ProtobufMessageMap.BaseType, - fieldNumber: Int - ) throws { - let tagSize = FieldTag(fieldNumber: fieldNumber, - wireFormat: .lengthDelimited).encodedSize - for (k,v) in value { - var sizer = BinaryEncodingSizeVisitor() - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &sizer) - try sizer.visitSingularMessageField(value: v, fieldNumber: 2) - let entrySize = sizer.serializedSize - serializedSize += Varint.encodedSize(of: Int64(entrySize)) + entrySize - } - serializedSize += value.count * tagSize - } - - mutating func visitExtensionFieldsAsMessageSet( - fields: ExtensionFieldValueSet, - start: Int, - end: Int - ) throws { - var sizer = BinaryEncodingMessageSetSizeVisitor() - try fields.traverse(visitor: &sizer, start: start, end: end) - serializedSize += sizer.serializedSize - } -} - -extension BinaryEncodingSizeVisitor { - - // Helper Visitor to compute the sizes when writing out the extensions as MessageSets. - internal struct BinaryEncodingMessageSetSizeVisitor: SelectiveVisitor { - var serializedSize: Int = 0 - - init() {} - - mutating func visitSingularMessageField(value: M, fieldNumber: Int) throws { - var groupSize = WireFormat.MessageSet.itemTagsEncodedSize - - groupSize += Varint.encodedSize(of: Int32(fieldNumber)) - - let messageSize = try value.serializedDataSize() - groupSize += Varint.encodedSize(of: UInt64(messageSize)) + messageSize - - serializedSize += groupSize - } - - // SelectiveVisitor handles the rest. - } - -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingVisitor.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingVisitor.swift deleted file mode 100644 index 748de25..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/BinaryEncodingVisitor.swift +++ /dev/null @@ -1,355 +0,0 @@ -// Sources/SwiftProtobuf/BinaryEncodingVisitor.swift - Binary encoding support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Core support for protobuf binary encoding. Note that this is built -/// on the general traversal machinery. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Visitor that encodes a message graph in the protobuf binary wire format. -internal struct BinaryEncodingVisitor: Visitor { - - var encoder: BinaryEncoder - - /// Creates a new visitor that writes the binary-coded message into the memory - /// at the given pointer. - /// - /// - Precondition: `pointer` must point to an allocated block of memory that - /// is large enough to hold the entire encoded message. For performance - /// reasons, the encoder does not make any attempts to verify this. - init(forWritingInto pointer: UnsafeMutableRawPointer) { - encoder = BinaryEncoder(forWritingInto: pointer) - } - - init(encoder: BinaryEncoder) { - self.encoder = encoder - } - - mutating func visitUnknown(bytes: Data) throws { - encoder.appendUnknown(data: bytes) - } - - mutating func visitSingularFloatField(value: Float, fieldNumber: Int) throws { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .fixed32) - encoder.putFloatValue(value: value) - } - - mutating func visitSingularDoubleField(value: Double, fieldNumber: Int) throws { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .fixed64) - encoder.putDoubleValue(value: value) - } - - mutating func visitSingularInt64Field(value: Int64, fieldNumber: Int) throws { - try visitSingularUInt64Field(value: UInt64(bitPattern: value), fieldNumber: fieldNumber) - } - - mutating func visitSingularUInt64Field(value: UInt64, fieldNumber: Int) throws { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .varint) - encoder.putVarInt(value: value) - } - - mutating func visitSingularSInt32Field(value: Int32, fieldNumber: Int) throws { - try visitSingularSInt64Field(value: Int64(value), fieldNumber: fieldNumber) - } - - mutating func visitSingularSInt64Field(value: Int64, fieldNumber: Int) throws { - try visitSingularUInt64Field(value: ZigZag.encoded(value), fieldNumber: fieldNumber) - } - - mutating func visitSingularFixed32Field(value: UInt32, fieldNumber: Int) throws { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .fixed32) - encoder.putFixedUInt32(value: value) - } - - mutating func visitSingularFixed64Field(value: UInt64, fieldNumber: Int) throws { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .fixed64) - encoder.putFixedUInt64(value: value) - } - - mutating func visitSingularSFixed32Field(value: Int32, fieldNumber: Int) throws { - try visitSingularFixed32Field(value: UInt32(bitPattern: value), fieldNumber: fieldNumber) - } - - mutating func visitSingularSFixed64Field(value: Int64, fieldNumber: Int) throws { - try visitSingularFixed64Field(value: UInt64(bitPattern: value), fieldNumber: fieldNumber) - } - - mutating func visitSingularBoolField(value: Bool, fieldNumber: Int) throws { - try visitSingularUInt64Field(value: value ? 1 : 0, fieldNumber: fieldNumber) - } - - mutating func visitSingularStringField(value: String, fieldNumber: Int) throws { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - encoder.putStringValue(value: value) - } - - mutating func visitSingularBytesField(value: Data, fieldNumber: Int) throws { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - encoder.putBytesValue(value: value) - } - - mutating func visitSingularEnumField(value: E, - fieldNumber: Int) throws { - try visitSingularUInt64Field(value: UInt64(bitPattern: Int64(value.rawValue)), - fieldNumber: fieldNumber) - } - - mutating func visitSingularMessageField(value: M, - fieldNumber: Int) throws { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - let length = try value.serializedDataSize() - encoder.putVarInt(value: length) - try value.traverse(visitor: &self) - } - - mutating func visitSingularGroupField(value: G, fieldNumber: Int) throws { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .startGroup) - try value.traverse(visitor: &self) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .endGroup) - } - - // Repeated fields are handled by the default implementations in Visitor.swift - - - // Packed Fields - - mutating func visitPackedFloatField(value: [Float], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - encoder.putVarInt(value: value.count * MemoryLayout.size) - for v in value { - encoder.putFloatValue(value: v) - } - } - - mutating func visitPackedDoubleField(value: [Double], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - encoder.putVarInt(value: value.count * MemoryLayout.size) - for v in value { - encoder.putDoubleValue(value: v) - } - } - - mutating func visitPackedInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - let packedSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - encoder.putVarInt(value: packedSize) - for v in value { - encoder.putVarInt(value: Int64(v)) - } - } - - mutating func visitPackedInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - let packedSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - encoder.putVarInt(value: packedSize) - for v in value { - encoder.putVarInt(value: v) - } - } - - mutating func visitPackedSInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - let packedSize = value.reduce(0) { $0 + Varint.encodedSize(of: ZigZag.encoded($1)) } - encoder.putVarInt(value: packedSize) - for v in value { - encoder.putZigZagVarInt(value: Int64(v)) - } - } - - mutating func visitPackedSInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - let packedSize = value.reduce(0) { $0 + Varint.encodedSize(of: ZigZag.encoded($1)) } - encoder.putVarInt(value: packedSize) - for v in value { - encoder.putZigZagVarInt(value: v) - } - } - - mutating func visitPackedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - let packedSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - encoder.putVarInt(value: packedSize) - for v in value { - encoder.putVarInt(value: UInt64(v)) - } - } - - mutating func visitPackedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - let packedSize = value.reduce(0) { $0 + Varint.encodedSize(of: $1) } - encoder.putVarInt(value: packedSize) - for v in value { - encoder.putVarInt(value: v) - } - } - - mutating func visitPackedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - encoder.putVarInt(value: value.count * MemoryLayout.size) - for v in value { - encoder.putFixedUInt32(value: v) - } - } - - mutating func visitPackedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - encoder.putVarInt(value: value.count * MemoryLayout.size) - for v in value { - encoder.putFixedUInt64(value: v) - } - } - - mutating func visitPackedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - encoder.putVarInt(value: value.count * MemoryLayout.size) - for v in value { - encoder.putFixedUInt32(value: UInt32(bitPattern: v)) - } - } - - mutating func visitPackedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - encoder.putVarInt(value: value.count * MemoryLayout.size) - for v in value { - encoder.putFixedUInt64(value: UInt64(bitPattern: v)) - } - } - - mutating func visitPackedBoolField(value: [Bool], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - encoder.putVarInt(value: value.count) - for v in value { - encoder.putVarInt(value: v ? 1 : 0) - } - } - - mutating func visitPackedEnumField(value: [E], fieldNumber: Int) throws { - assert(!value.isEmpty) - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - let packedSize = value.reduce(0) { - $0 + Varint.encodedSize(of: Int32(truncatingIfNeeded: $1.rawValue)) - } - encoder.putVarInt(value: packedSize) - for v in value { - encoder.putVarInt(value: v.rawValue) - } - } - - mutating func visitMapField( - fieldType: _ProtobufMap.Type, - value: _ProtobufMap.BaseType, - fieldNumber: Int - ) throws { - for (k,v) in value { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - var sizer = BinaryEncodingSizeVisitor() - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &sizer) - try ValueType.visitSingular(value: v, fieldNumber: 2, with: &sizer) - let entrySize = sizer.serializedSize - encoder.putVarInt(value: entrySize) - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &self) - try ValueType.visitSingular(value: v, fieldNumber: 2, with: &self) - } - } - - mutating func visitMapField( - fieldType: _ProtobufEnumMap.Type, - value: _ProtobufEnumMap.BaseType, - fieldNumber: Int - ) throws where ValueType.RawValue == Int { - for (k,v) in value { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - var sizer = BinaryEncodingSizeVisitor() - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &sizer) - try sizer.visitSingularEnumField(value: v, fieldNumber: 2) - let entrySize = sizer.serializedSize - encoder.putVarInt(value: entrySize) - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &self) - try visitSingularEnumField(value: v, fieldNumber: 2) - } - } - - mutating func visitMapField( - fieldType: _ProtobufMessageMap.Type, - value: _ProtobufMessageMap.BaseType, - fieldNumber: Int - ) throws { - for (k,v) in value { - encoder.startField(fieldNumber: fieldNumber, wireFormat: .lengthDelimited) - var sizer = BinaryEncodingSizeVisitor() - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &sizer) - try sizer.visitSingularMessageField(value: v, fieldNumber: 2) - let entrySize = sizer.serializedSize - encoder.putVarInt(value: entrySize) - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &self) - try visitSingularMessageField(value: v, fieldNumber: 2) - } - } - - mutating func visitExtensionFieldsAsMessageSet( - fields: ExtensionFieldValueSet, - start: Int, - end: Int - ) throws { - var subVisitor = BinaryEncodingMessageSetVisitor(encoder: encoder) - try fields.traverse(visitor: &subVisitor, start: start, end: end) - encoder = subVisitor.encoder - } -} - -extension BinaryEncodingVisitor { - - // Helper Visitor to when writing out the extensions as MessageSets. - internal struct BinaryEncodingMessageSetVisitor: SelectiveVisitor { - var encoder: BinaryEncoder - - init(encoder: BinaryEncoder) { - self.encoder = encoder - } - - mutating func visitSingularMessageField(value: M, fieldNumber: Int) throws { - encoder.putVarInt(value: Int64(WireFormat.MessageSet.Tags.itemStart.rawValue)) - - encoder.putVarInt(value: Int64(WireFormat.MessageSet.Tags.typeId.rawValue)) - encoder.putVarInt(value: fieldNumber) - - encoder.putVarInt(value: Int64(WireFormat.MessageSet.Tags.message.rawValue)) - - // Use a normal BinaryEncodingVisitor so any message fields end up in the - // normal wire format (instead of MessageSet format). - let length = try value.serializedDataSize() - encoder.putVarInt(value: length) - // Create the sub encoder after writing the length. - var subVisitor = BinaryEncodingVisitor(encoder: encoder) - try value.traverse(visitor: &subVisitor) - encoder = subVisitor.encoder - - encoder.putVarInt(value: Int64(WireFormat.MessageSet.Tags.itemEnd.rawValue)) - } - - // SelectiveVisitor handles the rest. - } - -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/CustomJSONCodable.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/CustomJSONCodable.swift deleted file mode 100644 index 2e1fd34..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/CustomJSONCodable.swift +++ /dev/null @@ -1,36 +0,0 @@ -// Sources/SwiftProtobuf/CustomJSONCodable.swift - Custom JSON support for WKTs -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Custom protocol for the WKTs to support their custom JSON encodings. -/// -// ----------------------------------------------------------------------------- - -/// Allows WKTs to provide their custom JSON encodings. -internal protocol _CustomJSONCodable { - func encodedJSONString(options: JSONEncodingOptions) throws -> String - mutating func decodeJSON(from: inout JSONDecoder) throws - - /// Called when the JSON `null` literal is encountered in a position where - /// a message of the conforming type is expected. The message type can then - /// handle the `null` value differently, if needed; for example, - /// `Google_Protobuf_Value` returns a special instance whose `kind` is set to - /// `.nullValue(.nullValue)`. - /// - /// The default behavior is to return `nil`, which indicates that `null` - /// should be treated as the absence of a message. - static func decodedFromJSONNull() throws -> Self? -} - -extension _CustomJSONCodable { - internal static func decodedFromJSONNull() -> Self? { - // Return nil by default. Concrete types can provide custom logic. - return nil - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Data+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Data+Extensions.swift deleted file mode 100644 index 3e359d7..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Data+Extensions.swift +++ /dev/null @@ -1,34 +0,0 @@ -// Sources/SwiftProtobuf/Data+Extensions.swift - Extension exposing new Data API -// -// Copyright (c) 2014 - 2019 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extension exposing new Data API to Swift versions < 5.0. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -#if !swift(>=5.0) -internal extension Data { - @usableFromInline - func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> T) rethrows -> T { - let c = count - return try withUnsafeBytes { (p: UnsafePointer) throws -> T in - try body(UnsafeRawBufferPointer(start: p, count: c)) - } - } - - mutating func withUnsafeMutableBytes(_ body: (UnsafeMutableRawBufferPointer) throws -> T) rethrows -> T { - let c = count - return try withUnsafeMutableBytes { (p: UnsafeMutablePointer) throws -> T in - try body(UnsafeMutableRawBufferPointer(start: p, count: c)) - } - } -} -#endif diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Decoder.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Decoder.swift deleted file mode 100644 index 76c28f3..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Decoder.swift +++ /dev/null @@ -1,150 +0,0 @@ -// Sources/SwiftProtobuf/Decoder.swift - Basic field setting -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// In this way, the generated code only knows about schema -/// information; the decoder logic knows how to decode particular -/// wire types based on that information. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// This is the abstract protocol used by the generated code -/// to deserialize data. -/// -/// The generated code looks roughly like this: -/// -/// ``` -/// while fieldNumber = try decoder.nextFieldNumber() { -/// switch fieldNumber { -/// case 1: decoder.decodeRepeatedInt32Field(value: &_field) -/// ... etc ... -/// } -/// ``` -/// -/// For performance, this is mostly broken out into a separate method -/// for singular/repeated fields of every supported type. Note that -/// we don't distinguish "packed" here, since all existing decoders -/// treat "packed" the same as "repeated" at this level. (That is, -/// even when the serializer distinguishes packed and non-packed -/// forms, the deserializer always accepts both.) -/// -/// Generics come into play at only a few points: `Enum`s and `Message`s -/// use a generic type to locate the correct initializer. Maps and -/// extensions use generics to avoid the method explosion of having to -/// support a separate method for every map and extension type. Maps -/// do distinguish `Enum`-valued and `Message`-valued maps to avoid -/// polluting the generated `Enum` and `Message` types with all of the -/// necessary generic methods to support this. -public protocol Decoder { - /// Called by a `oneof` when it already has a value and is being asked to - /// accept a new value. Some formats require `oneof` decoding to fail in this - /// case. - mutating func handleConflictingOneOf() throws - - /// Returns the next field number, or nil when the end of the input is - /// reached. - /// - /// For JSON and text format, the decoder translates the field name to a - /// number at this point, based on information it obtained from the message - /// when it was initialized. - mutating func nextFieldNumber() throws -> Int? - - // Primitive field decoders - mutating func decodeSingularFloatField(value: inout Float) throws - mutating func decodeSingularFloatField(value: inout Float?) throws - mutating func decodeRepeatedFloatField(value: inout [Float]) throws - mutating func decodeSingularDoubleField(value: inout Double) throws - mutating func decodeSingularDoubleField(value: inout Double?) throws - mutating func decodeRepeatedDoubleField(value: inout [Double]) throws - mutating func decodeSingularInt32Field(value: inout Int32) throws - mutating func decodeSingularInt32Field(value: inout Int32?) throws - mutating func decodeRepeatedInt32Field(value: inout [Int32]) throws - mutating func decodeSingularInt64Field(value: inout Int64) throws - mutating func decodeSingularInt64Field(value: inout Int64?) throws - mutating func decodeRepeatedInt64Field(value: inout [Int64]) throws - mutating func decodeSingularUInt32Field(value: inout UInt32) throws - mutating func decodeSingularUInt32Field(value: inout UInt32?) throws - mutating func decodeRepeatedUInt32Field(value: inout [UInt32]) throws - mutating func decodeSingularUInt64Field(value: inout UInt64) throws - mutating func decodeSingularUInt64Field(value: inout UInt64?) throws - mutating func decodeRepeatedUInt64Field(value: inout [UInt64]) throws - mutating func decodeSingularSInt32Field(value: inout Int32) throws - mutating func decodeSingularSInt32Field(value: inout Int32?) throws - mutating func decodeRepeatedSInt32Field(value: inout [Int32]) throws - mutating func decodeSingularSInt64Field(value: inout Int64) throws - mutating func decodeSingularSInt64Field(value: inout Int64?) throws - mutating func decodeRepeatedSInt64Field(value: inout [Int64]) throws - mutating func decodeSingularFixed32Field(value: inout UInt32) throws - mutating func decodeSingularFixed32Field(value: inout UInt32?) throws - mutating func decodeRepeatedFixed32Field(value: inout [UInt32]) throws - mutating func decodeSingularFixed64Field(value: inout UInt64) throws - mutating func decodeSingularFixed64Field(value: inout UInt64?) throws - mutating func decodeRepeatedFixed64Field(value: inout [UInt64]) throws - mutating func decodeSingularSFixed32Field(value: inout Int32) throws - mutating func decodeSingularSFixed32Field(value: inout Int32?) throws - mutating func decodeRepeatedSFixed32Field(value: inout [Int32]) throws - mutating func decodeSingularSFixed64Field(value: inout Int64) throws - mutating func decodeSingularSFixed64Field(value: inout Int64?) throws - mutating func decodeRepeatedSFixed64Field(value: inout [Int64]) throws - mutating func decodeSingularBoolField(value: inout Bool) throws - mutating func decodeSingularBoolField(value: inout Bool?) throws - mutating func decodeRepeatedBoolField(value: inout [Bool]) throws - mutating func decodeSingularStringField(value: inout String) throws - mutating func decodeSingularStringField(value: inout String?) throws - mutating func decodeRepeatedStringField(value: inout [String]) throws - mutating func decodeSingularBytesField(value: inout Data) throws - mutating func decodeSingularBytesField(value: inout Data?) throws - mutating func decodeRepeatedBytesField(value: inout [Data]) throws - - // Decode Enum fields - mutating func decodeSingularEnumField(value: inout E) throws where E.RawValue == Int - mutating func decodeSingularEnumField(value: inout E?) throws where E.RawValue == Int - mutating func decodeRepeatedEnumField(value: inout [E]) throws where E.RawValue == Int - - // Decode Message fields - mutating func decodeSingularMessageField(value: inout M?) throws - mutating func decodeRepeatedMessageField(value: inout [M]) throws - - // Decode Group fields - mutating func decodeSingularGroupField(value: inout G?) throws - mutating func decodeRepeatedGroupField(value: inout [G]) throws - - // Decode Map fields. - // This is broken into separate methods depending on whether the value - // type is primitive (_ProtobufMap), enum (_ProtobufEnumMap), or message - // (_ProtobufMessageMap) - mutating func decodeMapField(fieldType: _ProtobufMap.Type, value: inout _ProtobufMap.BaseType) throws - mutating func decodeMapField(fieldType: _ProtobufEnumMap.Type, value: inout _ProtobufEnumMap.BaseType) throws where ValueType.RawValue == Int - mutating func decodeMapField(fieldType: _ProtobufMessageMap.Type, value: inout _ProtobufMessageMap.BaseType) throws - - // Decode extension fields - mutating func decodeExtensionField(values: inout ExtensionFieldValueSet, messageType: Message.Type, fieldNumber: Int) throws - - // Run a decode loop decoding the MessageSet format for Extensions. - mutating func decodeExtensionFieldsAsMessageSet(values: inout ExtensionFieldValueSet, - messageType: Message.Type) throws -} - -/// Most Decoders won't care about Extension handing as in MessageSet -/// format, so provide a default implementation simply looping on the -/// fieldNumbers and feeding through to extension decoding. -extension Decoder { - public mutating func decodeExtensionFieldsAsMessageSet( - values: inout ExtensionFieldValueSet, - messageType: Message.Type - ) throws { - while let fieldNumber = try self.nextFieldNumber() { - try self.decodeExtensionField(values: &values, - messageType: messageType, - fieldNumber: fieldNumber) - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/DoubleParser.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/DoubleParser.swift deleted file mode 100644 index 92edb15..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/DoubleParser.swift +++ /dev/null @@ -1,61 +0,0 @@ -// Sources/SwiftProtobuf/DoubleParser.swift - Generally useful mathematical functions -// -// Copyright (c) 2014 - 2019 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Numeric parsing helper for float and double strings -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Support parsing float/double values from UTF-8 -internal class DoubleParser { - // Temporary buffer so we can null-terminate the UTF-8 string - // before calling the C standard libray to parse it. - // In theory, JSON writers should be able to represent any IEEE Double - // in at most 25 bytes, but many writers will emit more digits than - // necessary, so we size this generously. - private var work = - UnsafeMutableBufferPointer.allocate(capacity: 128) - - deinit { - work.deallocate() - } - - func utf8ToDouble(bytes: UnsafeRawBufferPointer, - start: UnsafeRawBufferPointer.Index, - end: UnsafeRawBufferPointer.Index) -> Double? { - return utf8ToDouble(bytes: UnsafeRawBufferPointer(rebasing: bytes[start.. Double? { - // Reject unreasonably long or short UTF8 number - if work.count <= bytes.count || bytes.count < 1 { - return nil - } - - #if swift(>=4.1) - UnsafeMutableRawBufferPointer(work).copyMemory(from: bytes) - #else - UnsafeMutableRawBufferPointer(work).copyBytes(from: bytes) - #endif - work[bytes.count] = 0 - - // Use C library strtod() to parse it - var e: UnsafeMutablePointer? = work.baseAddress - let d = strtod(work.baseAddress!, &e) - - // Fail if strtod() did not consume everything we expected - // or if strtod() thought the number was out of range. - if e != work.baseAddress! + bytes.count || !d.isFinite { - return nil - } - return d - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Enum.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Enum.swift deleted file mode 100644 index c04558d..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Enum.swift +++ /dev/null @@ -1,93 +0,0 @@ -// Sources/SwiftProtobuf/Enum.swift - Enum support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Generated enums conform to SwiftProtobuf.Enum -/// -/// See ProtobufTypes and JSONTypes for extension -/// methods to support binary and JSON coding. -/// -// ----------------------------------------------------------------------------- - -/// Generated enum types conform to this protocol. -public protocol Enum: RawRepresentable, Hashable { - /// Creates a new instance of the enum initialized to its default value. - init() - - /// Creates a new instance of the enum from the given raw integer value. - /// - /// For proto2 enums, this initializer will fail if the raw value does not - /// correspond to a valid enum value. For proto3 enums, this initializer never - /// fails; unknown values are created as instances of the `UNRECOGNIZED` case. - /// - /// - Parameter rawValue: The raw integer value from which to create the enum - /// value. - init?(rawValue: Int) - - /// The raw integer value of the enum value. - /// - /// For a recognized enum case, this is the integer value of the case as - /// defined in the .proto file. For `UNRECOGNIZED` cases in proto3, this is - /// the value that was originally decoded. - var rawValue: Int { get } -} - -extension Enum { -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - hasher.combine(rawValue) - } -#else // swift(>=4.2) - public var hashValue: Int { - return rawValue - } -#endif // swift(>=4.2) - - /// Internal convenience property representing the name of the enum value (or - /// `nil` if it is an `UNRECOGNIZED` value or doesn't provide names). - /// - /// Since the text format and JSON names are always identical, we don't need - /// to distinguish them. - internal var name: _NameMap.Name? { - guard let nameProviding = Self.self as? _ProtoNameProviding.Type else { - return nil - } - return nameProviding._protobuf_nameMap.names(for: rawValue)?.proto - } - - /// Internal convenience initializer that returns the enum value with the - /// given name, if it provides names. - /// - /// Since the text format and JSON names are always identical, we don't need - /// to distinguish them. - /// - /// - Parameter name: The name of the enum case. - internal init?(name: String) { - guard let nameProviding = Self.self as? _ProtoNameProviding.Type, - let number = nameProviding._protobuf_nameMap.number(forJSONName: name) else { - return nil - } - self.init(rawValue: number) - } - - /// Internal convenience initializer that returns the enum value with the - /// given name, if it provides names. - /// - /// Since the text format and JSON names are always identical, we don't need - /// to distinguish them. - /// - /// - Parameter name: Buffer holding the UTF-8 bytes of the desired name. - internal init?(rawUTF8: UnsafeRawBufferPointer) { - guard let nameProviding = Self.self as? _ProtoNameProviding.Type, - let number = nameProviding._protobuf_nameMap.number(forJSONName: rawUTF8) else { - return nil - } - self.init(rawValue: number) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensibleMessage.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensibleMessage.swift deleted file mode 100644 index f1fb991..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensibleMessage.swift +++ /dev/null @@ -1,73 +0,0 @@ -// Sources/SwiftProtobuf/ExtensibleMessage.swift - Extension support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Additional capabilities needed by messages that allow extensions. -/// -// ----------------------------------------------------------------------------- - -// Messages that support extensions implement this protocol -public protocol ExtensibleMessage: Message { - var _protobuf_extensionFieldValues: ExtensionFieldValueSet { get set } -} - -extension ExtensibleMessage { - public mutating func setExtensionValue(ext: MessageExtension, value: F.ValueType) { - _protobuf_extensionFieldValues[ext.fieldNumber] = F(protobufExtension: ext, value: value) - } - - public func getExtensionValue(ext: MessageExtension) -> F.ValueType? { - if let fieldValue = _protobuf_extensionFieldValues[ext.fieldNumber] as? F { - return fieldValue.value - } - return nil - } - - public func hasExtensionValue(ext: MessageExtension) -> Bool { - return _protobuf_extensionFieldValues[ext.fieldNumber] is F - } - - public mutating func clearExtensionValue(ext: MessageExtension) { - _protobuf_extensionFieldValues[ext.fieldNumber] = nil - } -} - -// Additional specializations for the different types of repeated fields so -// setting them to an empty array clears them from the map. -extension ExtensibleMessage { - public mutating func setExtensionValue(ext: MessageExtension, Self>, value: [T.BaseType]) { - _protobuf_extensionFieldValues[ext.fieldNumber] = - value.isEmpty ? nil : RepeatedExtensionField(protobufExtension: ext, value: value) - } - - public mutating func setExtensionValue(ext: MessageExtension, Self>, value: [T.BaseType]) { - _protobuf_extensionFieldValues[ext.fieldNumber] = - value.isEmpty ? nil : PackedExtensionField(protobufExtension: ext, value: value) - } - - public mutating func setExtensionValue(ext: MessageExtension, Self>, value: [E]) { - _protobuf_extensionFieldValues[ext.fieldNumber] = - value.isEmpty ? nil : RepeatedEnumExtensionField(protobufExtension: ext, value: value) - } - - public mutating func setExtensionValue(ext: MessageExtension, Self>, value: [E]) { - _protobuf_extensionFieldValues[ext.fieldNumber] = - value.isEmpty ? nil : PackedEnumExtensionField(protobufExtension: ext, value: value) - } - - public mutating func setExtensionValue(ext: MessageExtension, Self>, value: [M]) { - _protobuf_extensionFieldValues[ext.fieldNumber] = - value.isEmpty ? nil : RepeatedMessageExtensionField(protobufExtension: ext, value: value) - } - - public mutating func setExtensionValue(ext: MessageExtension, Self>, value: [M]) { - _protobuf_extensionFieldValues[ext.fieldNumber] = - value.isEmpty ? nil : RepeatedGroupExtensionField(protobufExtension: ext, value: value) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionFieldValueSet.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionFieldValueSet.swift deleted file mode 100644 index 5472f9f..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionFieldValueSet.swift +++ /dev/null @@ -1,95 +0,0 @@ -// Sources/SwiftProtobuf/ExtensionFieldValueSet.swift - Extension support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// A collection of extension field values on a particular object. -/// This is only used within messages to manage the values of extension fields; -/// it does not need to be very sophisticated. -/// -// ----------------------------------------------------------------------------- - -public struct ExtensionFieldValueSet: Hashable { - fileprivate var values = [Int : AnyExtensionField]() - - public static func ==(lhs: ExtensionFieldValueSet, - rhs: ExtensionFieldValueSet) -> Bool { - guard lhs.values.count == rhs.values.count else { - return false - } - for (index, l) in lhs.values { - if let r = rhs.values[index] { - if type(of: l) != type(of: r) { - return false - } - if !l.isEqual(other: r) { - return false - } - } else { - return false - } - } - return true - } - - public init() {} - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - // AnyExtensionField is not Hashable, and the Self constraint that would - // add breaks some of the uses of it; so the only choice is to manually - // mix things in. However, one must remember to do things in an order - // independent manner. - var hash = 16777619 - for (fieldNumber, v) in values { - var localHasher = hasher - localHasher.combine(fieldNumber) - v.hash(into: &localHasher) - hash = hash &+ localHasher.finalize() - } - hasher.combine(hash) - } -#else // swift(>=4.2) - public var hashValue: Int { - var hash = 16777619 - for (fieldNumber, v) in values { - // Note: This calculation cannot depend on the order of the items. - hash = hash &+ fieldNumber &+ v.hashValue - } - return hash - } -#endif // swift(>=4.2) - - public func traverse(visitor: inout V, start: Int, end: Int) throws { - let validIndexes = values.keys.filter {$0 >= start && $0 < end} - for i in validIndexes.sorted() { - let value = values[i]! - try value.traverse(visitor: &visitor) - } - } - - public subscript(index: Int) -> AnyExtensionField? { - get { return values[index] } - set { values[index] = newValue } - } - - mutating func modify(index: Int, _ modifier: (inout AnyExtensionField?) throws -> ReturnType) rethrows -> ReturnType { - // This internal helper exists to invoke the _modify accessor on Dictionary for the given operation, which can avoid CoWs - // during the modification operation. - return try modifier(&values[index]) - } - - public var isInitialized: Bool { - for (_, v) in values { - if !v.isInitialized { - return false - } - } - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionFields.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionFields.swift deleted file mode 100644 index 9883c26..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionFields.swift +++ /dev/null @@ -1,708 +0,0 @@ -// Sources/SwiftProtobuf/ExtensionFields.swift - Extension support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Core protocols implemented by generated extensions. -/// -// ----------------------------------------------------------------------------- - -#if !swift(>=4.2) -private let i_2166136261 = Int(bitPattern: 2166136261) -private let i_16777619 = Int(16777619) -#endif - -// -// Type-erased Extension field implementation. -// Note that it has no "self or associated type" references, so can -// be used as a protocol type. (In particular, although it does have -// a hashValue property, it cannot be Hashable.) -// -// This can encode, decode, return a hashValue and test for -// equality with some other extension field; but it's type-sealed -// so you can't actually access the contained value itself. -// -public protocol AnyExtensionField: CustomDebugStringConvertible { -#if swift(>=4.2) - func hash(into hasher: inout Hasher) -#else - var hashValue: Int { get } -#endif - var protobufExtension: AnyMessageExtension { get } - func isEqual(other: AnyExtensionField) -> Bool - - /// Merging field decoding - mutating func decodeExtensionField(decoder: inout T) throws - - /// Fields know their own type, so can dispatch to a visitor - func traverse(visitor: inout V) throws - - /// Check if the field is initialized. - var isInitialized: Bool { get } -} - -extension AnyExtensionField { - // Default implementation for extensions fields. The message types below provide - // custom versions. - public var isInitialized: Bool { return true } -} - -/// -/// The regular ExtensionField type exposes the value directly. -/// -public protocol ExtensionField: AnyExtensionField, Hashable { - associatedtype ValueType - var value: ValueType { get set } - init(protobufExtension: AnyMessageExtension, value: ValueType) - init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws -} - -/// -/// Singular field -/// -public struct OptionalExtensionField: ExtensionField { - public typealias BaseType = T.BaseType - public typealias ValueType = BaseType - public var value: ValueType - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: OptionalExtensionField, - rhs: OptionalExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - - public var debugDescription: String { - get { - return String(reflecting: value) - } - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - hasher.combine(value) - } -#else // swift(>=4.2) - public var hashValue: Int { - get { return value.hashValue } - } -#endif // swift(>=4.2) - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! OptionalExtensionField - return self == o - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - var v: ValueType? - try T.decodeSingular(value: &v, from: &decoder) - if let v = v { - value = v - } - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType? - try T.decodeSingular(value: &v, from: &decoder) - if let v = v { - self.init(protobufExtension: protobufExtension, value: v) - } else { - return nil - } - } - - public func traverse(visitor: inout V) throws { - try T.visitSingular(value: value, fieldNumber: protobufExtension.fieldNumber, with: &visitor) - } -} - -/// -/// Repeated fields -/// -public struct RepeatedExtensionField: ExtensionField { - public typealias BaseType = T.BaseType - public typealias ValueType = [BaseType] - public var value: ValueType - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: RepeatedExtensionField, - rhs: RepeatedExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - hasher.combine(value) - } -#else // swift(>=4.2) - public var hashValue: Int { - get { - var hash = i_2166136261 - for e in value { - hash = (hash &* i_16777619) ^ e.hashValue - } - return hash - } - } -#endif // swift(>=4.2) - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! RepeatedExtensionField - return self == o - } - - public var debugDescription: String { - return "[" + value.map{String(reflecting: $0)}.joined(separator: ",") + "]" - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - try T.decodeRepeated(value: &value, from: &decoder) - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType = [] - try T.decodeRepeated(value: &v, from: &decoder) - self.init(protobufExtension: protobufExtension, value: v) - } - - public func traverse(visitor: inout V) throws { - if value.count > 0 { - try T.visitRepeated(value: value, fieldNumber: protobufExtension.fieldNumber, with: &visitor) - } - } -} - -/// -/// Packed Repeated fields -/// -/// TODO: This is almost (but not quite) identical to RepeatedFields; -/// find a way to collapse the implementations. -/// -public struct PackedExtensionField: ExtensionField { - public typealias BaseType = T.BaseType - public typealias ValueType = [BaseType] - public var value: ValueType - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: PackedExtensionField, - rhs: PackedExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - hasher.combine(value) - } -#else // swift(>=4.2) - public var hashValue: Int { - get { - var hash = i_2166136261 - for e in value { - hash = (hash &* i_16777619) ^ e.hashValue - } - return hash - } - } -#endif // swift(>=4.2) - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! PackedExtensionField - return self == o - } - - public var debugDescription: String { - return "[" + value.map{String(reflecting: $0)}.joined(separator: ",") + "]" - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - try T.decodeRepeated(value: &value, from: &decoder) - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType = [] - try T.decodeRepeated(value: &v, from: &decoder) - self.init(protobufExtension: protobufExtension, value: v) - } - - public func traverse(visitor: inout V) throws { - if value.count > 0 { - try T.visitPacked(value: value, fieldNumber: protobufExtension.fieldNumber, with: &visitor) - } - } -} - -/// -/// Enum extensions -/// -public struct OptionalEnumExtensionField: ExtensionField where E.RawValue == Int { - public typealias BaseType = E - public typealias ValueType = E - public var value: ValueType - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: OptionalEnumExtensionField, - rhs: OptionalEnumExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - - public var debugDescription: String { - get { - return String(reflecting: value) - } - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - hasher.combine(value) - } -#else // swift(>=4.2) - public var hashValue: Int { - get { return value.hashValue } - } -#endif // swift(>=4.2) - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! OptionalEnumExtensionField - return self == o - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - var v: ValueType? - try decoder.decodeSingularEnumField(value: &v) - if let v = v { - value = v - } - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType? - try decoder.decodeSingularEnumField(value: &v) - if let v = v { - self.init(protobufExtension: protobufExtension, value: v) - } else { - return nil - } - } - - public func traverse(visitor: inout V) throws { - try visitor.visitSingularEnumField( - value: value, - fieldNumber: protobufExtension.fieldNumber) - } -} - -/// -/// Repeated Enum fields -/// -public struct RepeatedEnumExtensionField: ExtensionField where E.RawValue == Int { - public typealias BaseType = E - public typealias ValueType = [E] - public var value: ValueType - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: RepeatedEnumExtensionField, - rhs: RepeatedEnumExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - hasher.combine(value) - } -#else // swift(>=4.2) - public var hashValue: Int { - get { - var hash = i_2166136261 - for e in value { - hash = (hash &* i_16777619) ^ e.hashValue - } - return hash - } - } -#endif // swift(>=4.2) - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! RepeatedEnumExtensionField - return self == o - } - - public var debugDescription: String { - return "[" + value.map{String(reflecting: $0)}.joined(separator: ",") + "]" - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - try decoder.decodeRepeatedEnumField(value: &value) - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType = [] - try decoder.decodeRepeatedEnumField(value: &v) - self.init(protobufExtension: protobufExtension, value: v) - } - - public func traverse(visitor: inout V) throws { - if value.count > 0 { - try visitor.visitRepeatedEnumField( - value: value, - fieldNumber: protobufExtension.fieldNumber) - } - } -} - -/// -/// Packed Repeated Enum fields -/// -/// TODO: This is almost (but not quite) identical to RepeatedEnumFields; -/// find a way to collapse the implementations. -/// -public struct PackedEnumExtensionField: ExtensionField where E.RawValue == Int { - public typealias BaseType = E - public typealias ValueType = [E] - public var value: ValueType - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: PackedEnumExtensionField, - rhs: PackedEnumExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - hasher.combine(value) - } -#else // swift(>=4.2) - public var hashValue: Int { - get { - var hash = i_2166136261 - for e in value { - hash = (hash &* i_16777619) ^ e.hashValue - } - return hash - } - } -#endif // swift(>=4.2) - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! PackedEnumExtensionField - return self == o - } - - public var debugDescription: String { - return "[" + value.map{String(reflecting: $0)}.joined(separator: ",") + "]" - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - try decoder.decodeRepeatedEnumField(value: &value) - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType = [] - try decoder.decodeRepeatedEnumField(value: &v) - self.init(protobufExtension: protobufExtension, value: v) - } - - public func traverse(visitor: inout V) throws { - if value.count > 0 { - try visitor.visitPackedEnumField( - value: value, - fieldNumber: protobufExtension.fieldNumber) - } - } -} - -// -// ========== Message ========== -// -public struct OptionalMessageExtensionField: - ExtensionField { - public typealias BaseType = M - public typealias ValueType = BaseType - public var value: ValueType - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: OptionalMessageExtensionField, - rhs: OptionalMessageExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - - public var debugDescription: String { - get { - return String(reflecting: value) - } - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - value.hash(into: &hasher) - } -#else // swift(>=4.2) - public var hashValue: Int {return value.hashValue} -#endif // swift(>=4.2) - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! OptionalMessageExtensionField - return self == o - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - var v: ValueType? = value - try decoder.decodeSingularMessageField(value: &v) - if let v = v { - self.value = v - } - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType? - try decoder.decodeSingularMessageField(value: &v) - if let v = v { - self.init(protobufExtension: protobufExtension, value: v) - } else { - return nil - } - } - - public func traverse(visitor: inout V) throws { - try visitor.visitSingularMessageField( - value: value, fieldNumber: protobufExtension.fieldNumber) - } - - public var isInitialized: Bool { - return value.isInitialized - } -} - -public struct RepeatedMessageExtensionField: - ExtensionField { - public typealias BaseType = M - public typealias ValueType = [BaseType] - public var value: ValueType - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: RepeatedMessageExtensionField, - rhs: RepeatedMessageExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - for e in value { - e.hash(into: &hasher) - } - } -#else // swift(>=4.2) - public var hashValue: Int { - get { - var hash = i_2166136261 - for e in value { - hash = (hash &* i_16777619) ^ e.hashValue - } - return hash - } - } -#endif // swift(>=4.2) - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! RepeatedMessageExtensionField - return self == o - } - - public var debugDescription: String { - return "[" + value.map{String(reflecting: $0)}.joined(separator: ",") + "]" - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - try decoder.decodeRepeatedMessageField(value: &value) - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType = [] - try decoder.decodeRepeatedMessageField(value: &v) - self.init(protobufExtension: protobufExtension, value: v) - } - - public func traverse(visitor: inout V) throws { - if value.count > 0 { - try visitor.visitRepeatedMessageField( - value: value, fieldNumber: protobufExtension.fieldNumber) - } - } - - public var isInitialized: Bool { - return Internal.areAllInitialized(value) - } -} - -// -// ======== Groups within Messages ======== -// -// Protoc internally treats groups the same as messages, but -// they serialize very differently, so we have separate serialization -// handling here... -public struct OptionalGroupExtensionField: - ExtensionField { - public typealias BaseType = G - public typealias ValueType = BaseType - public var value: G - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: OptionalGroupExtensionField, - rhs: OptionalGroupExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - hasher.combine(value) - } -#else // swift(>=4.2) - public var hashValue: Int {return value.hashValue} -#endif // swift(>=4.2) - - public var debugDescription: String { get {return value.debugDescription} } - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! OptionalGroupExtensionField - return self == o - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - var v: ValueType? = value - try decoder.decodeSingularGroupField(value: &v) - if let v = v { - value = v - } - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType? - try decoder.decodeSingularGroupField(value: &v) - if let v = v { - self.init(protobufExtension: protobufExtension, value: v) - } else { - return nil - } - } - - public func traverse(visitor: inout V) throws { - try visitor.visitSingularGroupField( - value: value, fieldNumber: protobufExtension.fieldNumber) - } - - public var isInitialized: Bool { - return value.isInitialized - } -} - -public struct RepeatedGroupExtensionField: - ExtensionField { - public typealias BaseType = G - public typealias ValueType = [BaseType] - public var value: ValueType - public var protobufExtension: AnyMessageExtension - - public static func ==(lhs: RepeatedGroupExtensionField, - rhs: RepeatedGroupExtensionField) -> Bool { - return lhs.value == rhs.value - } - - public init(protobufExtension: AnyMessageExtension, value: ValueType) { - self.protobufExtension = protobufExtension - self.value = value - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - hasher.combine(value) - } -#else // swift(>=4.2) - public var hashValue: Int { - get { - var hash = i_2166136261 - for e in value { - hash = (hash &* i_16777619) ^ e.hashValue - } - return hash - } - } -#endif // swift(>=4.2) - - public var debugDescription: String { - return "[" + value.map{$0.debugDescription}.joined(separator: ",") + "]" - } - - public func isEqual(other: AnyExtensionField) -> Bool { - let o = other as! RepeatedGroupExtensionField - return self == o - } - - public mutating func decodeExtensionField(decoder: inout D) throws { - try decoder.decodeRepeatedGroupField(value: &value) - } - - public init?(protobufExtension: AnyMessageExtension, decoder: inout D) throws { - var v: ValueType = [] - try decoder.decodeRepeatedGroupField(value: &v) - self.init(protobufExtension: protobufExtension, value: v) - } - - public func traverse(visitor: inout V) throws { - if value.count > 0 { - try visitor.visitRepeatedGroupField( - value: value, fieldNumber: protobufExtension.fieldNumber) - } - } - - public var isInitialized: Bool { - return Internal.areAllInitialized(value) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionMap.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionMap.swift deleted file mode 100644 index e83b1c9..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ExtensionMap.swift +++ /dev/null @@ -1,38 +0,0 @@ -// Sources/SwiftProtobuf/ExtensionMap.swift - Extension support -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// A set of extensions that can be passed into deserializers -/// to provide details of the particular extensions that should -/// be recognized. -/// -// ----------------------------------------------------------------------------- - -/// A collection of extension objects. -/// -/// An `ExtensionMap` is used during decoding to look up -/// extension objects corresponding to the serialized data. -/// -/// This is a protocol so that developers can build their own -/// extension handling if they need something more complex than the -/// standard `SimpleExtensionMap` implementation. -public protocol ExtensionMap { - /// Returns the extension object describing an extension or nil - subscript(messageType: Message.Type, fieldNumber: Int) -> AnyMessageExtension? { get } - - /// Returns the field number for a message with a specific field name - /// - /// The field name here matches the format used by the protobuf - /// Text serialization: it typically looks like - /// `package.message.field_name`, where `package` is the package - /// for the proto file and `message` is the name of the message in - /// which the extension was defined. (This is different from the - /// message that is being extended!) - func fieldNumberForProto(messageType: Message.Type, protoFieldName: String) -> Int? -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/FieldTag.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/FieldTag.swift deleted file mode 100644 index 0a92cbb..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/FieldTag.swift +++ /dev/null @@ -1,69 +0,0 @@ -// Sources/SwiftProtobuf/FieldTag.swift - Describes a binary field tag -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Types related to binary encoded tags (field numbers and wire formats). -/// -// ----------------------------------------------------------------------------- - -/// Encapsulates the number and wire format of a field, which together form the -/// "tag". -/// -/// This type also validates tags in that it will never allow a tag with an -/// improper field number (such as zero) or wire format (such as 6 or 7) to -/// exist. In other words, a `FieldTag`'s properties never need to be tested -/// for validity because they are guaranteed correct at initialization time. -internal struct FieldTag: RawRepresentable { - - typealias RawValue = UInt32 - - /// The raw numeric value of the tag, which contains both the field number and - /// wire format. - let rawValue: UInt32 - - /// The field number component of the tag. - var fieldNumber: Int { - return Int(rawValue >> 3) - } - - /// The wire format component of the tag. - var wireFormat: WireFormat { - // This force-unwrap is safe because there are only two initialization - // paths: one that takes a WireFormat directly (and is guaranteed valid at - // compile-time), or one that takes a raw value but which only lets valid - // wire formats through. - return WireFormat(rawValue: UInt8(rawValue & 7))! - } - - /// A helper property that returns the number of bytes required to - /// varint-encode this tag. - var encodedSize: Int { - return Varint.encodedSize(of: rawValue) - } - - /// Creates a new tag from its raw numeric representation. - /// - /// Note that if the raw value given here is not a valid tag (for example, it - /// has an invalid wire format), this initializer will fail. - init?(rawValue: UInt32) { - // Verify that the field number and wire format are valid and fail if they - // are not. - guard rawValue & ~0x07 != 0, - let _ = WireFormat(rawValue: UInt8(rawValue % 8)) else { - return nil - } - self.rawValue = rawValue - } - - /// Creates a new tag by composing the given field number and wire format. - init(fieldNumber: Int, wireFormat: WireFormat) { - self.rawValue = UInt32(truncatingIfNeeded: fieldNumber) << 3 | - UInt32(wireFormat.rawValue) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/FieldTypes.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/FieldTypes.swift deleted file mode 100644 index 2cf130b..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/FieldTypes.swift +++ /dev/null @@ -1,431 +0,0 @@ -// Sources/SwiftProtobuf/FieldTypes.swift - Proto data types -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Serialization/deserialization support for each proto field type. -/// -/// Note that we cannot just extend the standard Int32, etc, types -/// with serialization information since proto language supports -/// distinct types (with different codings) that use the same -/// in-memory representation. For example, proto "sint32" and -/// "sfixed32" both are represented in-memory as Int32. -/// -/// These types are used generically and also passed into -/// various coding/decoding functions to provide type-specific -/// information. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -// Note: The protobuf- and JSON-specific methods here are defined -// in ProtobufTypeAdditions.swift and JSONTypeAdditions.swift -public protocol FieldType { - // The Swift type used to store data for this field. For example, - // proto "sint32" fields use Swift "Int32" type. - associatedtype BaseType: Hashable - - // The default value for this field type before it has been set. - // This is also used, for example, when JSON decodes a "null" - // value for a field. - static var proto3DefaultValue: BaseType { get } - - // Generic reflector methods for looking up the correct - // encoding/decoding for extension fields, map keys, and map - // values. - static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws - static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws - static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws - static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws - static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws -} - -/// -/// Marker protocol for types that can be used as map keys -/// -public protocol MapKeyType: FieldType { - /// A comparision function for where order is needed. Can't use `Comparable` - /// because `Bool` doesn't conform, and since it is `public` there is no way - /// to add a conformance internal to SwiftProtobuf. - static func _lessThan(lhs: BaseType, rhs: BaseType) -> Bool -} - -// Default impl for anything `Comparable` -extension MapKeyType where BaseType: Comparable { - public static func _lessThan(lhs: BaseType, rhs: BaseType) -> Bool { - return lhs < rhs - } -} - -/// -/// Marker Protocol for types that can be used as map values. -/// -public protocol MapValueType: FieldType { -} - -// -// We have a struct for every basic proto field type which provides -// serialization/deserialization support as static methods. -// - -/// -/// Float traits -/// -public struct ProtobufFloat: FieldType, MapValueType { - public typealias BaseType = Float - public static var proto3DefaultValue: Float {return 0.0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularFloatField(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedFloatField(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularFloatField(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedFloatField(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedFloatField(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// Double -/// -public struct ProtobufDouble: FieldType, MapValueType { - public typealias BaseType = Double - public static var proto3DefaultValue: Double {return 0.0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularDoubleField(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedDoubleField(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularDoubleField(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedDoubleField(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedDoubleField(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// Int32 -/// -public struct ProtobufInt32: FieldType, MapKeyType, MapValueType { - public typealias BaseType = Int32 - public static var proto3DefaultValue: Int32 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularInt32Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedInt32Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularInt32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedInt32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedInt32Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// Int64 -/// - -public struct ProtobufInt64: FieldType, MapKeyType, MapValueType { - public typealias BaseType = Int64 - public static var proto3DefaultValue: Int64 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularInt64Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedInt64Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularInt64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedInt64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedInt64Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// UInt32 -/// -public struct ProtobufUInt32: FieldType, MapKeyType, MapValueType { - public typealias BaseType = UInt32 - public static var proto3DefaultValue: UInt32 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularUInt32Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedUInt32Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularUInt32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedUInt32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedUInt32Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// UInt64 -/// - -public struct ProtobufUInt64: FieldType, MapKeyType, MapValueType { - public typealias BaseType = UInt64 - public static var proto3DefaultValue: UInt64 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularUInt64Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedUInt64Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularUInt64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedUInt64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedUInt64Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// SInt32 -/// -public struct ProtobufSInt32: FieldType, MapKeyType, MapValueType { - public typealias BaseType = Int32 - public static var proto3DefaultValue: Int32 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularSInt32Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedSInt32Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularSInt32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedSInt32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedSInt32Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// SInt64 -/// - -public struct ProtobufSInt64: FieldType, MapKeyType, MapValueType { - public typealias BaseType = Int64 - public static var proto3DefaultValue: Int64 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularSInt64Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedSInt64Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularSInt64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedSInt64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedSInt64Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// Fixed32 -/// -public struct ProtobufFixed32: FieldType, MapKeyType, MapValueType { - public typealias BaseType = UInt32 - public static var proto3DefaultValue: UInt32 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularFixed32Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedFixed32Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularFixed32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedFixed32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedFixed32Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// Fixed64 -/// -public struct ProtobufFixed64: FieldType, MapKeyType, MapValueType { - public typealias BaseType = UInt64 - public static var proto3DefaultValue: UInt64 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularFixed64Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedFixed64Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularFixed64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedFixed64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedFixed64Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// SFixed32 -/// -public struct ProtobufSFixed32: FieldType, MapKeyType, MapValueType { - public typealias BaseType = Int32 - public static var proto3DefaultValue: Int32 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularSFixed32Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedSFixed32Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularSFixed32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedSFixed32Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedSFixed32Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// SFixed64 -/// -public struct ProtobufSFixed64: FieldType, MapKeyType, MapValueType { - public typealias BaseType = Int64 - public static var proto3DefaultValue: Int64 {return 0} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularSFixed64Field(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedSFixed64Field(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularSFixed64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedSFixed64Field(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedSFixed64Field(value: value, fieldNumber: fieldNumber) - } -} - -/// -/// Bool -/// -public struct ProtobufBool: FieldType, MapKeyType, MapValueType { - public typealias BaseType = Bool - public static var proto3DefaultValue: Bool {return false} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularBoolField(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedBoolField(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularBoolField(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedBoolField(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitPackedBoolField(value: value, fieldNumber: fieldNumber) - } - - /// Custom _lessThan since `Bool` isn't `Comparable`. - public static func _lessThan(lhs: BaseType, rhs: BaseType) -> Bool { - if !lhs { - return rhs - } - return false - } -} - -/// -/// String -/// -public struct ProtobufString: FieldType, MapKeyType, MapValueType { - public typealias BaseType = String - public static var proto3DefaultValue: String {return String()} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularStringField(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedStringField(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularStringField(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedStringField(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - assert(false) - } -} - -/// -/// Bytes -/// -public struct ProtobufBytes: FieldType, MapValueType { - public typealias BaseType = Data - public static var proto3DefaultValue: Data {return Data()} - public static func decodeSingular(value: inout BaseType?, from decoder: inout D) throws { - try decoder.decodeSingularBytesField(value: &value) - } - public static func decodeRepeated(value: inout [BaseType], from decoder: inout D) throws { - try decoder.decodeRepeatedBytesField(value: &value) - } - public static func visitSingular(value: BaseType, fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitSingularBytesField(value: value, fieldNumber: fieldNumber) - } - public static func visitRepeated(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - try visitor.visitRepeatedBytesField(value: value, fieldNumber: fieldNumber) - } - public static func visitPacked(value: [BaseType], fieldNumber: Int, with visitor: inout V) throws { - assert(false) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Any+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Any+Extensions.swift deleted file mode 100644 index b680088..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Any+Extensions.swift +++ /dev/null @@ -1,174 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_Any+Extensions.swift - Well-known Any type -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extends the `Google_Protobuf_Any` type with various custom behaviors. -/// -// ----------------------------------------------------------------------------- - -// Explicit import of Foundation is necessary on Linux, -// don't remove unless obsolete on all platforms -import Foundation - -public let defaultAnyTypeURLPrefix: String = "type.googleapis.com" - -extension Google_Protobuf_Any { - /// Initialize an Any object from the provided message. - /// - /// This corresponds to the `pack` operation in the C++ API. - /// - /// Unlike the C++ implementation, the message is not immediately - /// serialized; it is merely stored until the Any object itself - /// needs to be serialized. This design avoids unnecessary - /// decoding/recoding when writing JSON format. - /// - /// - Parameters: - /// - partial: If `false` (the default), this method will check - /// `Message.isInitialized` before encoding to verify that all required - /// fields are present. If any are missing, this method throws - /// `BinaryEncodingError.missingRequiredFields`. - /// - typePrefix: The prefix to be used when building the `type_url`. - /// Defaults to "type.googleapis.com". - /// - Throws: `BinaryEncodingError.missingRequiredFields` if `partial` is - /// false and `message` wasn't fully initialized. - public init( - message: Message, - partial: Bool = false, - typePrefix: String = defaultAnyTypeURLPrefix - ) throws { - if !partial && !message.isInitialized { - throw BinaryEncodingError.missingRequiredFields - } - self.init() - typeURL = buildTypeURL(forMessage:message, typePrefix: typePrefix) - _storage.state = .message(message) - } - - /// Creates a new `Google_Protobuf_Any` by decoding the given string - /// containing a serialized message in Protocol Buffer text format. - /// - /// - Parameters: - /// - textFormatString: The text format string to decode. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - Throws: an instance of `TextFormatDecodingError` on failure. - public init( - textFormatString: String, - extensions: ExtensionMap? = nil - ) throws { - // TODO: Remove this api and default the options instead. This api has to - // exist for anything compiled against an older version of the library. - try self.init(textFormatString: textFormatString, - options: TextFormatDecodingOptions(), - extensions: extensions) - } - - /// Creates a new `Google_Protobuf_Any` by decoding the given string - /// containing a serialized message in Protocol Buffer text format. - /// - /// - Parameters: - /// - textFormatString: The text format string to decode. - /// - options: The `TextFormatDencodingOptions` to use. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - Throws: an instance of `TextFormatDecodingError` on failure. - public init( - textFormatString: String, - options: TextFormatDecodingOptions, - extensions: ExtensionMap? = nil - ) throws { - self.init() - if !textFormatString.isEmpty { - if let data = textFormatString.data(using: String.Encoding.utf8) { - try data.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - if let baseAddress = body.baseAddress, body.count > 0 { - var textDecoder = try TextFormatDecoder( - messageType: Google_Protobuf_Any.self, - utf8Pointer: baseAddress, - count: body.count, - options: options, - extensions: extensions) - try decodeTextFormat(decoder: &textDecoder) - if !textDecoder.complete { - throw TextFormatDecodingError.trailingGarbage - } - } - } - } - } - } - - /// Returns true if this `Google_Protobuf_Any` message contains the given - /// message type. - /// - /// The check is performed by looking at the passed `Message.Type` and the - /// `typeURL` of this message. - /// - /// - Parameter type: The concrete message type. - /// - Returns: True if the receiver contains the given message type. - public func isA(_ type: M.Type) -> Bool { - return _storage.isA(type) - } - -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - _storage.hash(into: &hasher) - } -#else // swift(>=4.2) - public var hashValue: Int { - return _storage.hashValue - } -#endif // swift(>=4.2) -} - -extension Google_Protobuf_Any { - internal func textTraverse(visitor: inout TextFormatEncodingVisitor) { - _storage.textTraverse(visitor: &visitor) - try! unknownFields.traverse(visitor: &visitor) - } -} - -extension Google_Protobuf_Any { - // Custom text format decoding support for Any objects. - // (Note: This is not a part of any protocol; it's invoked - // directly from TextFormatDecoder whenever it sees an attempt - // to decode an Any object) - internal mutating func decodeTextFormat( - decoder: inout TextFormatDecoder - ) throws { - // First, check if this uses the "verbose" Any encoding. - // If it does, and we have the type available, we can - // eagerly decode the contained Message object. - if let url = try decoder.scanner.nextOptionalAnyURL() { - try _uniqueStorage().decodeTextFormat(typeURL: url, decoder: &decoder) - } else { - // This is not using the specialized encoding, so we can use the - // standard path to decode the binary value. - // First, clear the fields so we don't waste time re-serializing - // the previous contents as this instances get replaced with a - // new value (can happen when a field name/number is repeated in - // the TextFormat input). - self.typeURL = "" - self.value = Data() - try decodeMessage(decoder: &decoder) - } - } -} - -extension Google_Protobuf_Any: _CustomJSONCodable { - internal func encodedJSONString(options: JSONEncodingOptions) throws -> String { - return try _storage.encodedJSONString(options: options) - } - - internal mutating func decodeJSON(from decoder: inout JSONDecoder) throws { - try _uniqueStorage().decodeJSON(from: &decoder) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Any+Registry.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Any+Registry.swift deleted file mode 100644 index 5db9575..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Any+Registry.swift +++ /dev/null @@ -1,137 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_Any+Registry.swift - Registry for JSON support -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Support for registering and looking up Message types. Used -/// in support of Google_Protobuf_Any. -/// -// ----------------------------------------------------------------------------- - -import Foundation -import Dispatch - -// TODO: Should these first four be exposed as methods to go with -// the general registry support? - -internal func buildTypeURL(forMessage message: Message, typePrefix: String) -> String { - var url = typePrefix - let needsSlash = typePrefix.isEmpty || typePrefix.last != "/" - if needsSlash { - url += "/" - } - return url + typeName(fromMessage: message) -} - -internal func typeName(fromMessage message: Message) -> String { - let messageType = type(of: message) - return messageType.protoMessageName -} - -internal func typeName(fromURL s: String) -> String { - var typeStart = s.startIndex - var i = typeStart - while i < s.endIndex { - let c = s[i] - i = s.index(after: i) - if c == "/" { - typeStart = i - } - } - - return String(s[typeStart.. Bool { - let messageTypeName = messageType.protoMessageName - var result: Bool = false - knownTypesQueue.sync(flags: .barrier) { - if let alreadyRegistered = knownTypes[messageTypeName] { - // Success/failure when something was already registered is - // based on if they are registering the same class or trying - // to register a different type - result = alreadyRegistered == messageType - } else { - knownTypes[messageTypeName] = messageType - result = true - } - } - return result - } - - /// Returns the Message.Type expected for the given type URL. - public static func messageType(forTypeURL url: String) -> Message.Type? { - let messageTypeName = typeName(fromURL: url) - return messageType(forMessageName: messageTypeName) - } - - /// Returns the Message.Type expected for the given proto message name. - public static func messageType(forMessageName name: String) -> Message.Type? { - var result: Message.Type? - knownTypesQueue.sync { - result = knownTypes[name] - } - return result - } - -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Duration+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Duration+Extensions.swift deleted file mode 100644 index f957f7f..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Duration+Extensions.swift +++ /dev/null @@ -1,226 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_Duration+Extensions.swift - Extensions for Duration type -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extends the generated Duration struct with various custom behaviors: -/// * JSON coding and decoding -/// * Arithmetic operations -/// -// ----------------------------------------------------------------------------- - -import Foundation - -private let minDurationSeconds: Int64 = -maxDurationSeconds -private let maxDurationSeconds: Int64 = 315576000000 - -private func parseDuration(text: String) throws -> (Int64, Int32) { - var digits = [Character]() - var digitCount = 0 - var total = 0 - var chars = text.makeIterator() - var seconds: Int64? - var nanos: Int32 = 0 - while let c = chars.next() { - switch c { - case "-": - // Only accept '-' as very first character - if total > 0 { - throw JSONDecodingError.malformedDuration - } - digits.append(c) - case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9": - digits.append(c) - digitCount += 1 - case ".": - if let _ = seconds { - throw JSONDecodingError.malformedDuration - } - let digitString = String(digits) - if let s = Int64(digitString), - s >= minDurationSeconds && s <= maxDurationSeconds { - seconds = s - } else { - throw JSONDecodingError.malformedDuration - } - digits.removeAll() - digitCount = 0 - case "s": - if let seconds = seconds { - // Seconds already set, digits holds nanos - while (digitCount < 9) { - digits.append(Character("0")) - digitCount += 1 - } - while digitCount > 9 { - digits.removeLast() - digitCount -= 1 - } - let digitString = String(digits) - if let rawNanos = Int32(digitString) { - if seconds < 0 { - nanos = -rawNanos - } else { - nanos = rawNanos - } - } else { - throw JSONDecodingError.malformedDuration - } - } else { - // No fraction, we just have an integral number of seconds - let digitString = String(digits) - if let s = Int64(digitString), - s >= minDurationSeconds && s <= maxDurationSeconds { - seconds = s - } else { - throw JSONDecodingError.malformedDuration - } - } - // Fail if there are characters after 's' - if chars.next() != nil { - throw JSONDecodingError.malformedDuration - } - return (seconds!, nanos) - default: - throw JSONDecodingError.malformedDuration - } - total += 1 - } - throw JSONDecodingError.malformedDuration -} - -private func formatDuration(seconds: Int64, nanos: Int32) -> String? { - let (seconds, nanos) = normalizeForDuration(seconds: seconds, nanos: nanos) - guard seconds >= minDurationSeconds && seconds <= maxDurationSeconds else { - return nil - } - let nanosString = nanosToString(nanos: nanos) // Includes leading '.' if needed - return "\(seconds)\(nanosString)s" -} - -extension Google_Protobuf_Duration { - /// Creates a new `Google_Protobuf_Duration` equal to the given number of - /// seconds and nanoseconds. - /// - /// - Parameter seconds: The number of seconds. - /// - Parameter nanos: The number of nanoseconds. - public init(seconds: Int64 = 0, nanos: Int32 = 0) { - self.init() - self.seconds = seconds - self.nanos = nanos - } -} - -extension Google_Protobuf_Duration: _CustomJSONCodable { - mutating func decodeJSON(from decoder: inout JSONDecoder) throws { - let s = try decoder.scanner.nextQuotedString() - (seconds, nanos) = try parseDuration(text: s) - } - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - if let formatted = formatDuration(seconds: seconds, nanos: nanos) { - return "\"\(formatted)\"" - } else { - throw JSONEncodingError.durationRange - } - } -} - -extension Google_Protobuf_Duration: ExpressibleByFloatLiteral { - public typealias FloatLiteralType = Double - - /// Creates a new `Google_Protobuf_Duration` from a floating point literal - /// that is interpreted as a duration in seconds, rounded to the nearest - /// nanosecond. - public init(floatLiteral value: Double) { - let sd = trunc(value) - let nd = round((value - sd) * TimeInterval(nanosPerSecond)) - let (s, n) = normalizeForDuration(seconds: Int64(sd), nanos: Int32(nd)) - self.init(seconds: s, nanos: n) - } -} - -extension Google_Protobuf_Duration { - /// Creates a new `Google_Protobuf_Duration` that is equal to the given - /// `TimeInterval` (measured in seconds), rounded to the nearest nanosecond. - /// - /// - Parameter timeInterval: The `TimeInterval`. - public init(timeInterval: TimeInterval) { - let sd = trunc(timeInterval) - let nd = round((timeInterval - sd) * TimeInterval(nanosPerSecond)) - let (s, n) = normalizeForDuration(seconds: Int64(sd), nanos: Int32(nd)) - self.init(seconds: s, nanos: n) - } - - /// The `TimeInterval` (measured in seconds) equal to this duration. - public var timeInterval: TimeInterval { - return TimeInterval(self.seconds) + - TimeInterval(self.nanos) / TimeInterval(nanosPerSecond) - } -} - -private func normalizeForDuration( - seconds: Int64, - nanos: Int32 -) -> (seconds: Int64, nanos: Int32) { - var s = seconds - var n = nanos - - // If the magnitude of n exceeds a second then - // we need to factor it into s instead. - if n >= nanosPerSecond || n <= -nanosPerSecond { - s += Int64(n / nanosPerSecond) - n = n % nanosPerSecond - } - - // The Duration spec says that when s != 0, s and - // n must have the same sign. - if s > 0 && n < 0 { - n += nanosPerSecond - s -= 1 - } else if s < 0 && n > 0 { - n -= nanosPerSecond - s += 1 - } - - return (seconds: s, nanos: n) -} - -public prefix func - ( - operand: Google_Protobuf_Duration -) -> Google_Protobuf_Duration { - let (s, n) = normalizeForDuration(seconds: -operand.seconds, - nanos: -operand.nanos) - return Google_Protobuf_Duration(seconds: s, nanos: n) -} - -public func + ( - lhs: Google_Protobuf_Duration, - rhs: Google_Protobuf_Duration -) -> Google_Protobuf_Duration { - let (s, n) = normalizeForDuration(seconds: lhs.seconds + rhs.seconds, - nanos: lhs.nanos + rhs.nanos) - return Google_Protobuf_Duration(seconds: s, nanos: n) -} - -public func - ( - lhs: Google_Protobuf_Duration, - rhs: Google_Protobuf_Duration -) -> Google_Protobuf_Duration { - let (s, n) = normalizeForDuration(seconds: lhs.seconds - rhs.seconds, - nanos: lhs.nanos - rhs.nanos) - return Google_Protobuf_Duration(seconds: s, nanos: n) -} - -public func - ( - lhs: Google_Protobuf_Timestamp, - rhs: Google_Protobuf_Timestamp -) -> Google_Protobuf_Duration { - let (s, n) = normalizeForDuration(seconds: lhs.seconds - rhs.seconds, - nanos: lhs.nanos - rhs.nanos) - return Google_Protobuf_Duration(seconds: s, nanos: n) -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_FieldMask+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_FieldMask+Extensions.swift deleted file mode 100644 index a3cb6b5..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_FieldMask+Extensions.swift +++ /dev/null @@ -1,163 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_FieldMask+Extensions.swift - Fieldmask extensions -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extend the generated FieldMask message with customized JSON coding and -/// convenience methods. -/// -// ----------------------------------------------------------------------------- - -// TODO: We should have utilities to apply a fieldmask to an arbitrary -// message, intersect two fieldmasks, etc. - -private func ProtoToJSON(name: String) -> String? { - var jsonPath = String() - var chars = name.makeIterator() - while let c = chars.next() { - switch c { - case "_": - if let toupper = chars.next() { - switch toupper { - case "a"..."z": - jsonPath.append(String(toupper).uppercased()) - default: - return nil - } - } else { - return nil - } - case "A"..."Z": - return nil - default: - jsonPath.append(c) - } - } - return jsonPath -} - -private func JSONToProto(name: String) -> String? { - var path = String() - for c in name { - switch c { - case "_": - return nil - case "A"..."Z": - path.append(Character("_")) - path.append(String(c).lowercased()) - default: - path.append(c) - } - } - return path -} - -private func parseJSONFieldNames(names: String) -> [String]? { - // An empty field mask is the empty string (no paths). - guard !names.isEmpty else { return [] } - var fieldNameCount = 0 - var fieldName = String() - var split = [String]() - for c in names { - switch c { - case ",": - if fieldNameCount == 0 { - return nil - } - if let pbName = JSONToProto(name: fieldName) { - split.append(pbName) - } else { - return nil - } - fieldName = String() - fieldNameCount = 0 - default: - fieldName.append(c) - fieldNameCount += 1 - } - } - if fieldNameCount == 0 { // Last field name can't be empty - return nil - } - if let pbName = JSONToProto(name: fieldName) { - split.append(pbName) - } else { - return nil - } - return split -} - -extension Google_Protobuf_FieldMask { - /// Creates a new `Google_Protobuf_FieldMask` from the given array of paths. - /// - /// The paths should match the names used in the .proto file, which may be - /// different than the corresponding Swift property names. - /// - /// - Parameter protoPaths: The paths from which to create the field mask, - /// defined using the .proto names for the fields. - public init(protoPaths: [String]) { - self.init() - paths = protoPaths - } - - /// Creates a new `Google_Protobuf_FieldMask` from the given paths. - /// - /// The paths should match the names used in the .proto file, which may be - /// different than the corresponding Swift property names. - /// - /// - Parameter protoPaths: The paths from which to create the field mask, - /// defined using the .proto names for the fields. - public init(protoPaths: String...) { - self.init(protoPaths: protoPaths) - } - - /// Creates a new `Google_Protobuf_FieldMask` from the given paths. - /// - /// The paths should match the JSON names of the fields, which may be - /// different than the corresponding Swift property names. - /// - /// - Parameter jsonPaths: The paths from which to create the field mask, - /// defined using the JSON names for the fields. - public init?(jsonPaths: String...) { - // TODO: This should fail if any of the conversions from JSON fails - #if swift(>=4.1) - self.init(protoPaths: jsonPaths.compactMap(JSONToProto)) - #else - self.init(protoPaths: jsonPaths.flatMap(JSONToProto)) - #endif - } - - // It would be nice if to have an initializer that accepted Swift property - // names, but translating between swift and protobuf/json property - // names is not entirely deterministic. -} - -extension Google_Protobuf_FieldMask: _CustomJSONCodable { - mutating func decodeJSON(from decoder: inout JSONDecoder) throws { - let s = try decoder.scanner.nextQuotedString() - if let names = parseJSONFieldNames(names: s) { - paths = names - } else { - throw JSONDecodingError.malformedFieldMask - } - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - // Note: Proto requires alphanumeric field names, so there - // cannot be a ',' or '"' character to mess up this formatting. - var jsonPaths = [String]() - for p in paths { - if let jsonPath = ProtoToJSON(name: p) { - jsonPaths.append(jsonPath) - } else { - throw JSONEncodingError.fieldMaskConversion - } - } - return "\"" + jsonPaths.joined(separator: ",") + "\"" - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_ListValue+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_ListValue+Extensions.swift deleted file mode 100644 index bbeffff..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_ListValue+Extensions.swift +++ /dev/null @@ -1,80 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_ListValue+Extensions.swift - ListValue extensions -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// ListValue is a well-known message type that can be used to parse or encode -/// arbitrary JSON arrays without a predefined schema. -/// -// ----------------------------------------------------------------------------- - -extension Google_Protobuf_ListValue: ExpressibleByArrayLiteral { - // TODO: Give this a direct array interface by proxying the interesting - // bits down to values - public typealias Element = Google_Protobuf_Value - - /// Creates a new `Google_Protobuf_ListValue` from an array literal containing - /// `Google_Protobuf_Value` elements. - public init(arrayLiteral elements: Element...) { - self.init(values: elements) - } -} - -extension Google_Protobuf_ListValue: _CustomJSONCodable { - internal func encodedJSONString(options: JSONEncodingOptions) throws -> String { - var jsonEncoder = JSONEncoder() - jsonEncoder.append(text: "[") - var separator: StaticString = "" - for v in values { - jsonEncoder.append(staticText: separator) - try v.serializeJSONValue(to: &jsonEncoder, options: options) - separator = "," - } - jsonEncoder.append(text: "]") - return jsonEncoder.stringResult - } - - internal mutating func decodeJSON(from decoder: inout JSONDecoder) throws { - if decoder.scanner.skipOptionalNull() { - return - } - try decoder.scanner.skipRequiredArrayStart() - if decoder.scanner.skipOptionalArrayEnd() { - return - } - while true { - var v = Google_Protobuf_Value() - try v.decodeJSON(from: &decoder) - values.append(v) - if decoder.scanner.skipOptionalArrayEnd() { - return - } - try decoder.scanner.skipRequiredComma() - } - } -} - -extension Google_Protobuf_ListValue { - /// Creates a new `Google_Protobuf_ListValue` from the given array of - /// `Google_Protobuf_Value` elements. - /// - /// - Parameter values: The list of `Google_Protobuf_Value` messages from - /// which to create the `Google_Protobuf_ListValue`. - public init(values: [Google_Protobuf_Value]) { - self.init() - self.values = values - } - - /// Accesses the `Google_Protobuf_Value` at the specified position. - /// - /// - Parameter index: The position of the element to access. - public subscript(index: Int) -> Google_Protobuf_Value { - get {return values[index]} - set(newValue) {values[index] = newValue} - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_NullValue+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_NullValue+Extensions.swift deleted file mode 100644 index 3e88bfd..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_NullValue+Extensions.swift +++ /dev/null @@ -1,28 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_NullValue+Extensions.swift - NullValue extensions -// -// Copyright (c) 2014 - 2020 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// NullValue is a well-known message type that can be used to parse or encode -/// JSON Null values. -/// -// ----------------------------------------------------------------------------- - -extension Google_Protobuf_NullValue: _CustomJSONCodable { - internal func encodedJSONString(options: JSONEncodingOptions) throws -> String { - return "null" - } - internal mutating func decodeJSON(from decoder: inout JSONDecoder) throws { - if decoder.scanner.skipOptionalNull() { - return - } - } - static func decodedFromJSONNull() -> Google_Protobuf_NullValue? { - return .nullValue - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Struct+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Struct+Extensions.swift deleted file mode 100644 index 681f821..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Struct+Extensions.swift +++ /dev/null @@ -1,85 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_Struct+Extensions.swift - Struct extensions -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Struct is a well-known message type that can be used to parse or encode -/// arbitrary JSON objects without a predefined schema. -/// -// ----------------------------------------------------------------------------- - -extension Google_Protobuf_Struct: ExpressibleByDictionaryLiteral { - public typealias Key = String - public typealias Value = Google_Protobuf_Value - - /// Creates a new `Google_Protobuf_Struct` from a dictionary of string keys to - /// values of type `Google_Protobuf_Value`. - public init(dictionaryLiteral: (String, Google_Protobuf_Value)...) { - self.init() - for (k,v) in dictionaryLiteral { - fields[k] = v - } - } -} - -extension Google_Protobuf_Struct: _CustomJSONCodable { - internal func encodedJSONString(options: JSONEncodingOptions) throws -> String { - var jsonEncoder = JSONEncoder() - jsonEncoder.startObject() - var mapVisitor = JSONMapEncodingVisitor(encoder: jsonEncoder, options: options) - for (k,v) in fields { - try mapVisitor.visitSingularStringField(value: k, fieldNumber: 1) - try mapVisitor.visitSingularMessageField(value: v, fieldNumber: 2) - } - mapVisitor.encoder.endObject() - return mapVisitor.encoder.stringResult - } - - internal mutating func decodeJSON(from decoder: inout JSONDecoder) throws { - try decoder.scanner.skipRequiredObjectStart() - if decoder.scanner.skipOptionalObjectEnd() { - return - } - while true { - let key = try decoder.scanner.nextQuotedString() - try decoder.scanner.skipRequiredColon() - var value = Google_Protobuf_Value() - try value.decodeJSON(from: &decoder) - fields[key] = value - if decoder.scanner.skipOptionalObjectEnd() { - return - } - try decoder.scanner.skipRequiredComma() - } - } -} - -extension Google_Protobuf_Struct { - /// Creates a new `Google_Protobuf_Struct` from a dictionary of string keys to - /// values of type `Google_Protobuf_Value`. - /// - /// - Parameter fields: The dictionary from field names to - /// `Google_Protobuf_Value` messages that should be used to create the - /// `Struct`. - public init(fields: [String: Google_Protobuf_Value]) { - self.init() - self.fields = fields - } - - /// Accesses the `Google_Protobuf_Value` with the given key for reading and - /// writing. - /// - /// This key-based subscript returns the `Value` for the given key if the key - /// is found in the `Struct`, or nil if the key is not found. If you assign - /// nil as the `Value` for the given key, the `Struct` removes that key and - /// its associated `Value`. - public subscript(key: String) -> Google_Protobuf_Value? { - get {return fields[key]} - set(newValue) {fields[key] = newValue} - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Timestamp+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Timestamp+Extensions.swift deleted file mode 100644 index 646ef93..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Timestamp+Extensions.swift +++ /dev/null @@ -1,329 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_Timestamp+Extensions.swift - Timestamp extensions -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extend the generated Timestamp message with customized JSON coding, -/// arithmetic operations, and convenience methods. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -private let minTimestampSeconds: Int64 = -62135596800 // 0001-01-01T00:00:00Z -private let maxTimestampSeconds: Int64 = 253402300799 // 9999-12-31T23:59:59Z - -// TODO: Add convenience methods to interoperate with standard -// date/time classes: an initializer that accepts Unix timestamp as -// Int or Double, an easy way to convert to/from Foundation's -// NSDateTime (on Apple platforms only?), others? - - -// Parse an RFC3339 timestamp into a pair of seconds-since-1970 and nanos. -private func parseTimestamp(s: String) throws -> (Int64, Int32) { - // Convert to an array of integer character values - let value = s.utf8.map{Int($0)} - if value.count < 20 { - throw JSONDecodingError.malformedTimestamp - } - // Since the format is fixed-layout, we can just decode - // directly as follows. - let zero = Int(48) - let nine = Int(57) - let dash = Int(45) - let colon = Int(58) - let plus = Int(43) - let letterT = Int(84) - let letterZ = Int(90) - let period = Int(46) - - func fromAscii2(_ digit0: Int, _ digit1: Int) throws -> Int { - if digit0 < zero || digit0 > nine || digit1 < zero || digit1 > nine { - throw JSONDecodingError.malformedTimestamp - } - return digit0 * 10 + digit1 - 528 - } - - func fromAscii4( - _ digit0: Int, - _ digit1: Int, - _ digit2: Int, - _ digit3: Int - ) throws -> Int { - if (digit0 < zero || digit0 > nine - || digit1 < zero || digit1 > nine - || digit2 < zero || digit2 > nine - || digit3 < zero || digit3 > nine) { - throw JSONDecodingError.malformedTimestamp - } - return digit0 * 1000 + digit1 * 100 + digit2 * 10 + digit3 - 53328 - } - - // Year: 4 digits followed by '-' - let year = try fromAscii4(value[0], value[1], value[2], value[3]) - if value[4] != dash || year < Int(1) || year > Int(9999) { - throw JSONDecodingError.malformedTimestamp - } - - // Month: 2 digits followed by '-' - let month = try fromAscii2(value[5], value[6]) - if value[7] != dash || month < Int(1) || month > Int(12) { - throw JSONDecodingError.malformedTimestamp - } - - // Day: 2 digits followed by 'T' - let mday = try fromAscii2(value[8], value[9]) - if value[10] != letterT || mday < Int(1) || mday > Int(31) { - throw JSONDecodingError.malformedTimestamp - } - - // Hour: 2 digits followed by ':' - let hour = try fromAscii2(value[11], value[12]) - if value[13] != colon || hour > Int(23) { - throw JSONDecodingError.malformedTimestamp - } - - // Minute: 2 digits followed by ':' - let minute = try fromAscii2(value[14], value[15]) - if value[16] != colon || minute > Int(59) { - throw JSONDecodingError.malformedTimestamp - } - - // Second: 2 digits (following char is checked below) - let second = try fromAscii2(value[17], value[18]) - if second > Int(61) { - throw JSONDecodingError.malformedTimestamp - } - - // timegm() is almost entirely useless. It's nonexistent on - // some platforms, broken on others. Everything else I've tried - // is even worse. Hence the code below. - // (If you have a better way to do this, try it and see if it - // passes the test suite on both Linux and OS X.) - - // Day of year - let mdayStart: [Int] = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] - var yday = Int64(mdayStart[month - 1]) - let isleap = (year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0)) - if isleap && (month > 2) { - yday += 1 - } - yday += Int64(mday - 1) - - // Days since start of epoch (including leap days) - var daysSinceEpoch = yday - daysSinceEpoch += Int64(365 * year) - Int64(719527) - daysSinceEpoch += Int64((year - 1) / 4) - daysSinceEpoch -= Int64((year - 1) / 100) - daysSinceEpoch += Int64((year - 1) / 400) - - // Second within day - var daySec = Int64(hour) - daySec *= 60 - daySec += Int64(minute) - daySec *= 60 - daySec += Int64(second) - - // Seconds since start of epoch - let t = daysSinceEpoch * Int64(86400) + daySec - - // After seconds, comes various optional bits - var pos = 19 - - var nanos: Int32 = 0 - if value[pos] == period { // "." begins fractional seconds - pos += 1 - var digitValue = 100000000 - while pos < value.count && value[pos] >= zero && value[pos] <= nine { - nanos += Int32(digitValue * (value[pos] - zero)) - digitValue /= 10 - pos += 1 - } - } - - var seconds: Int64 = 0 - // "+" or "-" starts Timezone offset - if value[pos] == plus || value[pos] == dash { - if pos + 6 > value.count { - throw JSONDecodingError.malformedTimestamp - } - let hourOffset = try fromAscii2(value[pos + 1], value[pos + 2]) - let minuteOffset = try fromAscii2(value[pos + 4], value[pos + 5]) - if hourOffset > Int(13) || minuteOffset > Int(59) || value[pos + 3] != colon { - throw JSONDecodingError.malformedTimestamp - } - var adjusted: Int64 = t - if value[pos] == plus { - adjusted -= Int64(hourOffset) * Int64(3600) - adjusted -= Int64(minuteOffset) * Int64(60) - } else { - adjusted += Int64(hourOffset) * Int64(3600) - adjusted += Int64(minuteOffset) * Int64(60) - } - if adjusted < minTimestampSeconds || adjusted > maxTimestampSeconds { - throw JSONDecodingError.malformedTimestamp - } - seconds = adjusted - pos += 6 - } else if value[pos] == letterZ { // "Z" indicator for UTC - seconds = t - pos += 1 - } else { - throw JSONDecodingError.malformedTimestamp - } - if pos != value.count { - throw JSONDecodingError.malformedTimestamp - } - return (seconds, nanos) -} - -private func formatTimestamp(seconds: Int64, nanos: Int32) -> String? { - let (seconds, nanos) = normalizeForTimestamp(seconds: seconds, nanos: nanos) - guard seconds >= minTimestampSeconds && seconds <= maxTimestampSeconds else { - return nil - } - - let (hh, mm, ss) = timeOfDayFromSecondsSince1970(seconds: seconds) - let (YY, MM, DD) = gregorianDateFromSecondsSince1970(seconds: seconds) - - let dateString = "\(fourDigit(YY))-\(twoDigit(MM))-\(twoDigit(DD))" - let timeString = "\(twoDigit(hh)):\(twoDigit(mm)):\(twoDigit(ss))" - let nanosString = nanosToString(nanos: nanos) // Includes leading '.' if needed - - return "\(dateString)T\(timeString)\(nanosString)Z" -} - -extension Google_Protobuf_Timestamp { - /// Creates a new `Google_Protobuf_Timestamp` equal to the given number of - /// seconds and nanoseconds. - /// - /// - Parameter seconds: The number of seconds. - /// - Parameter nanos: The number of nanoseconds. - public init(seconds: Int64 = 0, nanos: Int32 = 0) { - self.init() - self.seconds = seconds - self.nanos = nanos - } -} - -extension Google_Protobuf_Timestamp: _CustomJSONCodable { - mutating func decodeJSON(from decoder: inout JSONDecoder) throws { - let s = try decoder.scanner.nextQuotedString() - (seconds, nanos) = try parseTimestamp(s: s) - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - if let formatted = formatTimestamp(seconds: seconds, nanos: nanos) { - return "\"\(formatted)\"" - } else { - throw JSONEncodingError.timestampRange - } - } -} - -extension Google_Protobuf_Timestamp { - /// Creates a new `Google_Protobuf_Timestamp` initialized relative to 00:00:00 - /// UTC on 1 January 1970 by a given number of seconds. - /// - /// - Parameter timeIntervalSince1970: The `TimeInterval`, interpreted as - /// seconds relative to 00:00:00 UTC on 1 January 1970. - public init(timeIntervalSince1970: TimeInterval) { - let sd = floor(timeIntervalSince1970) - let nd = round((timeIntervalSince1970 - sd) * TimeInterval(nanosPerSecond)) - let (s, n) = normalizeForTimestamp(seconds: Int64(sd), nanos: Int32(nd)) - self.init(seconds: s, nanos: n) - } - - /// Creates a new `Google_Protobuf_Timestamp` initialized relative to 00:00:00 - /// UTC on 1 January 2001 by a given number of seconds. - /// - /// - Parameter timeIntervalSinceReferenceDate: The `TimeInterval`, - /// interpreted as seconds relative to 00:00:00 UTC on 1 January 2001. - public init(timeIntervalSinceReferenceDate: TimeInterval) { - let sd = floor(timeIntervalSinceReferenceDate) - let nd = round( - (timeIntervalSinceReferenceDate - sd) * TimeInterval(nanosPerSecond)) - // The addition of timeIntervalBetween1970And... is deliberately delayed - // until the input is separated into an integer part and a fraction - // part, so that we don't unnecessarily lose precision. - let (s, n) = normalizeForTimestamp( - seconds: Int64(sd) + Int64(Date.timeIntervalBetween1970AndReferenceDate), - nanos: Int32(nd)) - self.init(seconds: s, nanos: n) - } - - /// Creates a new `Google_Protobuf_Timestamp` initialized to the same time as - /// the given `Date`. - /// - /// - Parameter date: The `Date` with which to initialize the timestamp. - public init(date: Date) { - // Note: Internally, Date uses the "reference date," not the 1970 date. - // We use it when interacting with Dates so that Date doesn't perform - // any double arithmetic on our behalf, which might cost us precision. - self.init( - timeIntervalSinceReferenceDate: date.timeIntervalSinceReferenceDate) - } - - /// The interval between the timestamp and 00:00:00 UTC on 1 January 1970. - public var timeIntervalSince1970: TimeInterval { - return TimeInterval(self.seconds) + - TimeInterval(self.nanos) / TimeInterval(nanosPerSecond) - } - - /// The interval between the timestamp and 00:00:00 UTC on 1 January 2001. - public var timeIntervalSinceReferenceDate: TimeInterval { - return TimeInterval( - self.seconds - Int64(Date.timeIntervalBetween1970AndReferenceDate)) + - TimeInterval(self.nanos) / TimeInterval(nanosPerSecond) - } - - /// A `Date` initialized to the same time as the timestamp. - public var date: Date { - return Date( - timeIntervalSinceReferenceDate: self.timeIntervalSinceReferenceDate) - } -} - -private func normalizeForTimestamp( - seconds: Int64, - nanos: Int32 -) -> (seconds: Int64, nanos: Int32) { - // The Timestamp spec says that nanos must be in the range [0, 999999999), - // as in actual modular arithmetic. - - let s = seconds + Int64(div(nanos, nanosPerSecond)) - let n = mod(nanos, nanosPerSecond) - return (seconds: s, nanos: n) -} - -public func + ( - lhs: Google_Protobuf_Timestamp, - rhs: Google_Protobuf_Duration -) -> Google_Protobuf_Timestamp { - let (s, n) = normalizeForTimestamp(seconds: lhs.seconds + rhs.seconds, - nanos: lhs.nanos + rhs.nanos) - return Google_Protobuf_Timestamp(seconds: s, nanos: n) -} - -public func + ( - lhs: Google_Protobuf_Duration, - rhs: Google_Protobuf_Timestamp -) -> Google_Protobuf_Timestamp { - let (s, n) = normalizeForTimestamp(seconds: lhs.seconds + rhs.seconds, - nanos: lhs.nanos + rhs.nanos) - return Google_Protobuf_Timestamp(seconds: s, nanos: n) -} - -public func - ( - lhs: Google_Protobuf_Timestamp, - rhs: Google_Protobuf_Duration -) -> Google_Protobuf_Timestamp { - let (s, n) = normalizeForTimestamp(seconds: lhs.seconds - rhs.seconds, - nanos: lhs.nanos - rhs.nanos) - return Google_Protobuf_Timestamp(seconds: s, nanos: n) -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Value+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Value+Extensions.swift deleted file mode 100644 index 63301dc..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Value+Extensions.swift +++ /dev/null @@ -1,163 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_Value+Extensions.swift - Value extensions -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Value is a well-known message type that can be used to parse or encode -/// arbitrary JSON without a predefined schema. -/// -// ----------------------------------------------------------------------------- - -extension Google_Protobuf_Value: ExpressibleByIntegerLiteral { - public typealias IntegerLiteralType = Int64 - - /// Creates a new `Google_Protobuf_Value` from an integer literal. - public init(integerLiteral value: Int64) { - self.init(kind: .numberValue(Double(value))) - } -} - -extension Google_Protobuf_Value: ExpressibleByFloatLiteral { - public typealias FloatLiteralType = Double - - /// Creates a new `Google_Protobuf_Value` from a floating point literal. - public init(floatLiteral value: Double) { - self.init(kind: .numberValue(value)) - } -} - -extension Google_Protobuf_Value: ExpressibleByBooleanLiteral { - public typealias BooleanLiteralType = Bool - - /// Creates a new `Google_Protobuf_Value` from a boolean literal. - public init(booleanLiteral value: Bool) { - self.init(kind: .boolValue(value)) - } -} - -extension Google_Protobuf_Value: ExpressibleByStringLiteral { - public typealias StringLiteralType = String - public typealias ExtendedGraphemeClusterLiteralType = String - public typealias UnicodeScalarLiteralType = String - - /// Creates a new `Google_Protobuf_Value` from a string literal. - public init(stringLiteral value: String) { - self.init(kind: .stringValue(value)) - } - - /// Creates a new `Google_Protobuf_Value` from a Unicode scalar literal. - public init(unicodeScalarLiteral value: String) { - self.init(kind: .stringValue(value)) - } - - /// Creates a new `Google_Protobuf_Value` from a character literal. - public init(extendedGraphemeClusterLiteral value: String) { - self.init(kind: .stringValue(value)) - } -} - -extension Google_Protobuf_Value: ExpressibleByNilLiteral { - /// Creates a new `Google_Protobuf_Value` from the nil literal. - public init(nilLiteral: ()) { - self.init(kind: .nullValue(.nullValue)) - } -} - -extension Google_Protobuf_Value: _CustomJSONCodable { - internal func encodedJSONString(options: JSONEncodingOptions) throws -> String { - var jsonEncoder = JSONEncoder() - try serializeJSONValue(to: &jsonEncoder, options: options) - return jsonEncoder.stringResult - } - - internal mutating func decodeJSON(from decoder: inout JSONDecoder) throws { - let c = try decoder.scanner.peekOneCharacter() - switch c { - case "n": - if !decoder.scanner.skipOptionalNull() { - throw JSONDecodingError.failure - } - kind = .nullValue(.nullValue) - case "[": - var l = Google_Protobuf_ListValue() - try l.decodeJSON(from: &decoder) - kind = .listValue(l) - case "{": - var s = Google_Protobuf_Struct() - try s.decodeJSON(from: &decoder) - kind = .structValue(s) - case "t", "f": - let b = try decoder.scanner.nextBool() - kind = .boolValue(b) - case "\"": - let s = try decoder.scanner.nextQuotedString() - kind = .stringValue(s) - default: - let d = try decoder.scanner.nextDouble() - kind = .numberValue(d) - } - } - - internal static func decodedFromJSONNull() -> Google_Protobuf_Value? { - return Google_Protobuf_Value(kind: .nullValue(.nullValue)) - } -} - -extension Google_Protobuf_Value { - /// Creates a new `Google_Protobuf_Value` with the given kind. - fileprivate init(kind: OneOf_Kind) { - self.init() - self.kind = kind - } - - /// Creates a new `Google_Protobuf_Value` whose `kind` is `numberValue` with - /// the given floating-point value. - public init(numberValue: Double) { - self.init(kind: .numberValue(numberValue)) - } - - /// Creates a new `Google_Protobuf_Value` whose `kind` is `stringValue` with - /// the given string value. - public init(stringValue: String) { - self.init(kind: .stringValue(stringValue)) - } - - /// Creates a new `Google_Protobuf_Value` whose `kind` is `boolValue` with the - /// given boolean value. - public init(boolValue: Bool) { - self.init(kind: .boolValue(boolValue)) - } - - /// Creates a new `Google_Protobuf_Value` whose `kind` is `structValue` with - /// the given `Google_Protobuf_Struct` value. - public init(structValue: Google_Protobuf_Struct) { - self.init(kind: .structValue(structValue)) - } - - /// Creates a new `Google_Protobuf_Value` whose `kind` is `listValue` with the - /// given `Google_Struct_ListValue` value. - public init(listValue: Google_Protobuf_ListValue) { - self.init(kind: .listValue(listValue)) - } - - /// Writes out the JSON representation of the value to the given encoder. - internal func serializeJSONValue( - to encoder: inout JSONEncoder, - options: JSONEncodingOptions - ) throws { - switch kind { - case .nullValue?: encoder.putNullValue() - case .numberValue(let v)?: encoder.putDoubleValue(value: v) - case .stringValue(let v)?: encoder.putStringValue(value: v) - case .boolValue(let v)?: encoder.putBoolValue(value: v) - case .structValue(let v)?: encoder.append(text: try v.jsonString(options: options)) - case .listValue(let v)?: encoder.append(text: try v.jsonString(options: options)) - case nil: throw JSONEncodingError.missingValue - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Wrappers+Extensions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Wrappers+Extensions.swift deleted file mode 100644 index 625262d..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Google_Protobuf_Wrappers+Extensions.swift +++ /dev/null @@ -1,247 +0,0 @@ -// Sources/SwiftProtobuf/Google_Protobuf_Wrappers+Extensions.swift - Well-known wrapper type extensions -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extensions to the well-known types in wrapper.proto that customize the JSON -/// format of those messages and provide convenience initializers from literals. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Internal protocol that minimizes the code duplication across the multiple -/// wrapper types extended below. -protocol ProtobufWrapper { - - /// The wrapped protobuf type (for example, `ProtobufDouble`). - associatedtype WrappedType: FieldType - - /// Exposes the generated property to the extensions here. - var value: WrappedType.BaseType { get set } - - /// Exposes the parameterless initializer to the extensions here. - init() - - /// Creates a new instance of the wrapper with the given value. - init(_ value: WrappedType.BaseType) -} - -extension ProtobufWrapper { - mutating func decodeJSON(from decoder: inout JSONDecoder) throws { - var v: WrappedType.BaseType? - try WrappedType.decodeSingular(value: &v, from: &decoder) - value = v ?? WrappedType.proto3DefaultValue - } -} - -extension Google_Protobuf_DoubleValue: - ProtobufWrapper, ExpressibleByFloatLiteral, _CustomJSONCodable { - - public typealias WrappedType = ProtobufDouble - public typealias FloatLiteralType = WrappedType.BaseType - - public init(_ value: WrappedType.BaseType) { - self.init() - self.value = value - } - - public init(floatLiteral: FloatLiteralType) { - self.init(floatLiteral) - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - if value.isFinite { - // Swift 4.2 and later guarantees that this is accurate - // enough to parse back to the exact value on the other end. - return value.description - } else { - // Protobuf-specific handling of NaN and infinities - var encoder = JSONEncoder() - encoder.putDoubleValue(value: value) - return encoder.stringResult - } - } -} - -extension Google_Protobuf_FloatValue: - ProtobufWrapper, ExpressibleByFloatLiteral, _CustomJSONCodable { - - public typealias WrappedType = ProtobufFloat - public typealias FloatLiteralType = Float - - public init(_ value: WrappedType.BaseType) { - self.init() - self.value = value - } - - public init(floatLiteral: FloatLiteralType) { - self.init(floatLiteral) - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - if value.isFinite { - // Swift 4.2 and later guarantees that this is accurate - // enough to parse back to the exact value on the other end. - return value.description - } else { - // Protobuf-specific handling of NaN and infinities - var encoder = JSONEncoder() - encoder.putFloatValue(value: value) - return encoder.stringResult - } - } -} - -extension Google_Protobuf_Int64Value: - ProtobufWrapper, ExpressibleByIntegerLiteral, _CustomJSONCodable { - - public typealias WrappedType = ProtobufInt64 - public typealias IntegerLiteralType = WrappedType.BaseType - - public init(_ value: WrappedType.BaseType) { - self.init() - self.value = value - } - - public init(integerLiteral: IntegerLiteralType) { - self.init(integerLiteral) - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - return "\"" + String(value) + "\"" - } -} - -extension Google_Protobuf_UInt64Value: - ProtobufWrapper, ExpressibleByIntegerLiteral, _CustomJSONCodable { - - public typealias WrappedType = ProtobufUInt64 - public typealias IntegerLiteralType = WrappedType.BaseType - - public init(_ value: WrappedType.BaseType) { - self.init() - self.value = value - } - - public init(integerLiteral: IntegerLiteralType) { - self.init(integerLiteral) - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - return "\"" + String(value) + "\"" - } -} - -extension Google_Protobuf_Int32Value: - ProtobufWrapper, ExpressibleByIntegerLiteral, _CustomJSONCodable { - - public typealias WrappedType = ProtobufInt32 - public typealias IntegerLiteralType = WrappedType.BaseType - - public init(_ value: WrappedType.BaseType) { - self.init() - self.value = value - } - - public init(integerLiteral: IntegerLiteralType) { - self.init(integerLiteral) - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - return String(value) - } -} - -extension Google_Protobuf_UInt32Value: - ProtobufWrapper, ExpressibleByIntegerLiteral, _CustomJSONCodable { - - public typealias WrappedType = ProtobufUInt32 - public typealias IntegerLiteralType = WrappedType.BaseType - - public init(_ value: WrappedType.BaseType) { - self.init() - self.value = value - } - - public init(integerLiteral: IntegerLiteralType) { - self.init(integerLiteral) - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - return String(value) - } -} - -extension Google_Protobuf_BoolValue: - ProtobufWrapper, ExpressibleByBooleanLiteral, _CustomJSONCodable { - - public typealias WrappedType = ProtobufBool - public typealias BooleanLiteralType = Bool - - public init(_ value: WrappedType.BaseType) { - self.init() - self.value = value - } - - public init(booleanLiteral: Bool) { - self.init(booleanLiteral) - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - return value ? "true" : "false" - } -} - -extension Google_Protobuf_StringValue: - ProtobufWrapper, ExpressibleByStringLiteral, _CustomJSONCodable { - - public typealias WrappedType = ProtobufString - public typealias StringLiteralType = String - public typealias ExtendedGraphemeClusterLiteralType = String - public typealias UnicodeScalarLiteralType = String - - public init(_ value: WrappedType.BaseType) { - self.init() - self.value = value - } - - public init(stringLiteral: String) { - self.init(stringLiteral) - } - - public init(extendedGraphemeClusterLiteral: String) { - self.init(extendedGraphemeClusterLiteral) - } - - public init(unicodeScalarLiteral: String) { - self.init(unicodeScalarLiteral) - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - var encoder = JSONEncoder() - encoder.putStringValue(value: value) - return encoder.stringResult - } -} - -extension Google_Protobuf_BytesValue: ProtobufWrapper, _CustomJSONCodable { - - public typealias WrappedType = ProtobufBytes - - public init(_ value: WrappedType.BaseType) { - self.init() - self.value = value - } - - func encodedJSONString(options: JSONEncodingOptions) throws -> String { - var encoder = JSONEncoder() - encoder.putBytesValue(value: value) - return encoder.stringResult - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/HashVisitor.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/HashVisitor.swift deleted file mode 100644 index 395af2a..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/HashVisitor.swift +++ /dev/null @@ -1,426 +0,0 @@ -// Sources/SwiftProtobuf/HashVisitor.swift - Hashing support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Hashing is basically a serialization problem, so we can leverage the -/// generated traversal methods for that. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -private let i_2166136261 = Int(bitPattern: 2166136261) -private let i_16777619 = Int(16777619) - -/// Computes the hash of a message by visiting its fields recursively. -/// -/// Note that because this visits every field, it has the potential to be slow -/// for large or deeply nested messages. Users who need to use such messages as -/// dictionary keys or set members can use a wrapper struct around the message -/// and use a custom Hashable implementation that looks at the subset of the -/// message fields they want to include. -internal struct HashVisitor: Visitor { - -#if swift(>=4.2) - internal private(set) var hasher: Hasher -#else // swift(>=4.2) - // Roughly based on FNV hash: http://tools.ietf.org/html/draft-eastlake-fnv-03 - private(set) var hashValue = i_2166136261 - - private mutating func mix(_ hash: Int) { - hashValue = (hashValue ^ hash) &* i_16777619 - } - - private mutating func mixMap(map: Dictionary) { - var mapHash = 0 - for (k, v) in map { - // Note: This calculation cannot depend on the order of the items. - mapHash = mapHash &+ (k.hashValue ^ v.hashValue) - } - mix(mapHash) - } -#endif // swift(>=4.2) - -#if swift(>=4.2) - init(_ hasher: Hasher) { - self.hasher = hasher - } -#else - init() {} -#endif - - mutating func visitUnknown(bytes: Data) throws { - #if swift(>=4.2) - hasher.combine(bytes) - #else - mix(bytes.hashValue) - #endif - } - - mutating func visitSingularDoubleField(value: Double, fieldNumber: Int) throws { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mix(value.hashValue) - #endif - } - - mutating func visitSingularInt64Field(value: Int64, fieldNumber: Int) throws { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mix(value.hashValue) - #endif - } - - mutating func visitSingularUInt64Field(value: UInt64, fieldNumber: Int) throws { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mix(value.hashValue) - #endif - } - - mutating func visitSingularBoolField(value: Bool, fieldNumber: Int) throws { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mix(value.hashValue) - #endif - } - - mutating func visitSingularStringField(value: String, fieldNumber: Int) throws { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mix(value.hashValue) - #endif - } - - mutating func visitSingularBytesField(value: Data, fieldNumber: Int) throws { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mix(value.hashValue) - #endif - } - - mutating func visitSingularEnumField(value: E, - fieldNumber: Int) { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mix(value.hashValue) - #endif - } - - mutating func visitSingularMessageField(value: M, fieldNumber: Int) { - #if swift(>=4.2) - hasher.combine(fieldNumber) - value.hash(into: &hasher) - #else - mix(fieldNumber) - mix(value.hashValue) - #endif - } - - mutating func visitRepeatedFloatField(value: [Float], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedDoubleField(value: [Double], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedSInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedSInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedBoolField(value: [Bool], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedStringField(value: [String], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedBytesField(value: [Data], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedEnumField(value: [E], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedMessageField(value: [M], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - for v in value { - v.hash(into: &hasher) - } - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitRepeatedGroupField(value: [G], fieldNumber: Int) throws { - assert(!value.isEmpty) - #if swift(>=4.2) - hasher.combine(fieldNumber) - for v in value { - v.hash(into: &hasher) - } - #else - mix(fieldNumber) - for v in value { - mix(v.hashValue) - } - #endif - } - - mutating func visitMapField( - fieldType: _ProtobufMap.Type, - value: _ProtobufMap.BaseType, - fieldNumber: Int - ) throws { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mixMap(map: value) - #endif - } - - mutating func visitMapField( - fieldType: _ProtobufEnumMap.Type, - value: _ProtobufEnumMap.BaseType, - fieldNumber: Int - ) throws where ValueType.RawValue == Int { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mixMap(map: value) - #endif - } - - mutating func visitMapField( - fieldType: _ProtobufMessageMap.Type, - value: _ProtobufMessageMap.BaseType, - fieldNumber: Int - ) throws { - #if swift(>=4.2) - hasher.combine(fieldNumber) - hasher.combine(value) - #else - mix(fieldNumber) - mixMap(map: value) - #endif - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Internal.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Internal.swift deleted file mode 100644 index 8619bbd..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Internal.swift +++ /dev/null @@ -1,51 +0,0 @@ -// Sources/SwiftProtobuf/Internal.swift - Message support -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Internal helpers on Messages for the library. These are public -/// just so the generated code can call them, but shouldn't be called -/// by developers directly. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Functions that are public only because they are used by generated message -/// implementations. NOT INTENDED TO BE CALLED BY CLIENTS. -public enum Internal { - - /// A singleton instance of an empty data that is used by the generated code - /// for default values. This is a performance enhancement to work around the - /// fact that the `Data` type in Swift involves a new heap allocation every - /// time an empty instance is initialized, instead of sharing a common empty - /// backing storage. - public static let emptyData = Data() - - /// Helper to loop over a list of Messages to see if they are all - /// initialized (see Message.isInitialized for what that means). - public static func areAllInitialized(_ listOfMessages: [Message]) -> Bool { - for msg in listOfMessages { - if !msg.isInitialized { - return false - } - } - return true - } - - /// Helper to loop over dictionary with values that are Messages to see if - /// they are all initialized (see Message.isInitialized for what that means). - public static func areAllInitialized(_ mapToMessages: [K: Message]) -> Bool { - for (_, msg) in mapToMessages { - if !msg.isInitialized { - return false - } - } - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecoder.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecoder.swift deleted file mode 100644 index 5f085e4..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecoder.swift +++ /dev/null @@ -1,735 +0,0 @@ -// Sources/SwiftProtobuf/JSONDecoder.swift - JSON format decoding -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// JSON format decoding engine. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -internal struct JSONDecoder: Decoder { - internal var scanner: JSONScanner - internal var messageType: Message.Type - private var fieldCount = 0 - private var isMapKey = false - private var fieldNameMap: _NameMap? - - internal var options: JSONDecodingOptions { - return scanner.options - } - - mutating func handleConflictingOneOf() throws { - throw JSONDecodingError.conflictingOneOf - } - - internal init(source: UnsafeRawBufferPointer, options: JSONDecodingOptions, - messageType: Message.Type, extensions: ExtensionMap?) { - let scanner = JSONScanner(source: source, - options: options, - extensions: extensions) - self.init(scanner: scanner, messageType: messageType) - } - - private init(scanner: JSONScanner, messageType: Message.Type) { - self.scanner = scanner - self.messageType = messageType - } - - mutating func nextFieldNumber() throws -> Int? { - if scanner.skipOptionalObjectEnd() { - return nil - } - if fieldCount > 0 { - try scanner.skipRequiredComma() - } - let fieldNumber = try scanner.nextFieldNumber(names: fieldNameMap!, - messageType: messageType) - if let fieldNumber = fieldNumber { - fieldCount += 1 - return fieldNumber - } - return nil - } - - mutating func decodeSingularFloatField(value: inout Float) throws { - if scanner.skipOptionalNull() { - value = 0 - return - } - value = try scanner.nextFloat() - } - - mutating func decodeSingularFloatField(value: inout Float?) throws { - if scanner.skipOptionalNull() { - value = nil - return - } - value = try scanner.nextFloat() - } - - mutating func decodeRepeatedFloatField(value: inout [Float]) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - let n = try scanner.nextFloat() - value.append(n) - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularDoubleField(value: inout Double) throws { - if scanner.skipOptionalNull() { - value = 0 - return - } - value = try scanner.nextDouble() - } - - mutating func decodeSingularDoubleField(value: inout Double?) throws { - if scanner.skipOptionalNull() { - value = nil - return - } - value = try scanner.nextDouble() - } - - mutating func decodeRepeatedDoubleField(value: inout [Double]) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - let n = try scanner.nextDouble() - value.append(n) - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularInt32Field(value: inout Int32) throws { - if scanner.skipOptionalNull() { - value = 0 - return - } - let n = try scanner.nextSInt() - if n > Int64(Int32.max) || n < Int64(Int32.min) { - throw JSONDecodingError.numberRange - } - value = Int32(truncatingIfNeeded: n) - } - - mutating func decodeSingularInt32Field(value: inout Int32?) throws { - if scanner.skipOptionalNull() { - value = nil - return - } - let n = try scanner.nextSInt() - if n > Int64(Int32.max) || n < Int64(Int32.min) { - throw JSONDecodingError.numberRange - } - value = Int32(truncatingIfNeeded: n) - } - - mutating func decodeRepeatedInt32Field(value: inout [Int32]) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - let n = try scanner.nextSInt() - if n > Int64(Int32.max) || n < Int64(Int32.min) { - throw JSONDecodingError.numberRange - } - value.append(Int32(truncatingIfNeeded: n)) - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularInt64Field(value: inout Int64) throws { - if scanner.skipOptionalNull() { - value = 0 - return - } - value = try scanner.nextSInt() - } - - mutating func decodeSingularInt64Field(value: inout Int64?) throws { - if scanner.skipOptionalNull() { - value = nil - return - } - value = try scanner.nextSInt() - } - - mutating func decodeRepeatedInt64Field(value: inout [Int64]) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - let n = try scanner.nextSInt() - value.append(n) - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularUInt32Field(value: inout UInt32) throws { - if scanner.skipOptionalNull() { - value = 0 - return - } - let n = try scanner.nextUInt() - if n > UInt64(UInt32.max) { - throw JSONDecodingError.numberRange - } - value = UInt32(truncatingIfNeeded: n) - } - - mutating func decodeSingularUInt32Field(value: inout UInt32?) throws { - if scanner.skipOptionalNull() { - value = nil - return - } - let n = try scanner.nextUInt() - if n > UInt64(UInt32.max) { - throw JSONDecodingError.numberRange - } - value = UInt32(truncatingIfNeeded: n) - } - - mutating func decodeRepeatedUInt32Field(value: inout [UInt32]) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - let n = try scanner.nextUInt() - if n > UInt64(UInt32.max) { - throw JSONDecodingError.numberRange - } - value.append(UInt32(truncatingIfNeeded: n)) - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularUInt64Field(value: inout UInt64) throws { - if scanner.skipOptionalNull() { - value = 0 - return - } - value = try scanner.nextUInt() - } - - mutating func decodeSingularUInt64Field(value: inout UInt64?) throws { - if scanner.skipOptionalNull() { - value = nil - return - } - value = try scanner.nextUInt() - } - - mutating func decodeRepeatedUInt64Field(value: inout [UInt64]) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - let n = try scanner.nextUInt() - value.append(n) - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularSInt32Field(value: inout Int32) throws { - try decodeSingularInt32Field(value: &value) - } - - mutating func decodeSingularSInt32Field(value: inout Int32?) throws { - try decodeSingularInt32Field(value: &value) - } - - mutating func decodeRepeatedSInt32Field(value: inout [Int32]) throws { - try decodeRepeatedInt32Field(value: &value) - } - - mutating func decodeSingularSInt64Field(value: inout Int64) throws { - try decodeSingularInt64Field(value: &value) - } - - mutating func decodeSingularSInt64Field(value: inout Int64?) throws { - try decodeSingularInt64Field(value: &value) - } - - mutating func decodeRepeatedSInt64Field(value: inout [Int64]) throws { - try decodeRepeatedInt64Field(value: &value) - } - - mutating func decodeSingularFixed32Field(value: inout UInt32) throws { - try decodeSingularUInt32Field(value: &value) - } - - mutating func decodeSingularFixed32Field(value: inout UInt32?) throws { - try decodeSingularUInt32Field(value: &value) - } - - mutating func decodeRepeatedFixed32Field(value: inout [UInt32]) throws { - try decodeRepeatedUInt32Field(value: &value) - } - - mutating func decodeSingularFixed64Field(value: inout UInt64) throws { - try decodeSingularUInt64Field(value: &value) - } - - mutating func decodeSingularFixed64Field(value: inout UInt64?) throws { - try decodeSingularUInt64Field(value: &value) - } - - mutating func decodeRepeatedFixed64Field(value: inout [UInt64]) throws { - try decodeRepeatedUInt64Field(value: &value) - } - - mutating func decodeSingularSFixed32Field(value: inout Int32) throws { - try decodeSingularInt32Field(value: &value) - } - - mutating func decodeSingularSFixed32Field(value: inout Int32?) throws { - try decodeSingularInt32Field(value: &value) - } - - mutating func decodeRepeatedSFixed32Field(value: inout [Int32]) throws { - try decodeRepeatedInt32Field(value: &value) - } - - mutating func decodeSingularSFixed64Field(value: inout Int64) throws { - try decodeSingularInt64Field(value: &value) - } - - mutating func decodeSingularSFixed64Field(value: inout Int64?) throws { - try decodeSingularInt64Field(value: &value) - } - - mutating func decodeRepeatedSFixed64Field(value: inout [Int64]) throws { - try decodeRepeatedInt64Field(value: &value) - } - - mutating func decodeSingularBoolField(value: inout Bool) throws { - if scanner.skipOptionalNull() { - value = false - return - } - if isMapKey { - value = try scanner.nextQuotedBool() - } else { - value = try scanner.nextBool() - } - } - - mutating func decodeSingularBoolField(value: inout Bool?) throws { - if scanner.skipOptionalNull() { - value = nil - return - } - if isMapKey { - value = try scanner.nextQuotedBool() - } else { - value = try scanner.nextBool() - } - } - - mutating func decodeRepeatedBoolField(value: inout [Bool]) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - let n = try scanner.nextBool() - value.append(n) - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularStringField(value: inout String) throws { - if scanner.skipOptionalNull() { - value = String() - return - } - value = try scanner.nextQuotedString() - } - - mutating func decodeSingularStringField(value: inout String?) throws { - if scanner.skipOptionalNull() { - value = nil - return - } - value = try scanner.nextQuotedString() - } - - mutating func decodeRepeatedStringField(value: inout [String]) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - let n = try scanner.nextQuotedString() - value.append(n) - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularBytesField(value: inout Data) throws { - if scanner.skipOptionalNull() { - value = Data() - return - } - value = try scanner.nextBytesValue() - } - - mutating func decodeSingularBytesField(value: inout Data?) throws { - if scanner.skipOptionalNull() { - value = nil - return - } - value = try scanner.nextBytesValue() - } - - mutating func decodeRepeatedBytesField(value: inout [Data]) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - let n = try scanner.nextBytesValue() - value.append(n) - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularEnumField(value: inout E?) throws - where E.RawValue == Int { - if scanner.skipOptionalNull() { - if let customDecodable = E.self as? _CustomJSONCodable.Type { - value = try customDecodable.decodedFromJSONNull() as? E - return - } - value = nil - return - } - value = try scanner.nextEnumValue() as E - } - - mutating func decodeSingularEnumField(value: inout E) throws - where E.RawValue == Int { - if scanner.skipOptionalNull() { - if let customDecodable = E.self as? _CustomJSONCodable.Type { - value = try customDecodable.decodedFromJSONNull() as! E - return - } - value = E() - return - } - value = try scanner.nextEnumValue() - } - - mutating func decodeRepeatedEnumField(value: inout [E]) throws - where E.RawValue == Int { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - let maybeCustomDecodable = E.self as? _CustomJSONCodable.Type - while true { - if scanner.skipOptionalNull() { - if let customDecodable = maybeCustomDecodable { - let e = try customDecodable.decodedFromJSONNull() as! E - value.append(e) - } else { - throw JSONDecodingError.illegalNull - } - } else { - let e: E = try scanner.nextEnumValue() - value.append(e) - } - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - internal mutating func decodeFullObject(message: inout M) throws { - guard let nameProviding = (M.self as? _ProtoNameProviding.Type) else { - throw JSONDecodingError.missingFieldNames - } - fieldNameMap = nameProviding._protobuf_nameMap - if let m = message as? _CustomJSONCodable { - var customCodable = m - try customCodable.decodeJSON(from: &self) - message = customCodable as! M - } else { - try scanner.skipRequiredObjectStart() - if scanner.skipOptionalObjectEnd() { - return - } - try message.decodeMessage(decoder: &self) - } - } - - mutating func decodeSingularMessageField(value: inout M?) throws { - if scanner.skipOptionalNull() { - if M.self is _CustomJSONCodable.Type { - value = - try (M.self as! _CustomJSONCodable.Type).decodedFromJSONNull() as? M - return - } - // All other message field types treat 'null' as an unset - value = nil - return - } - if value == nil { - value = M() - } - var subDecoder = JSONDecoder(scanner: scanner, messageType: M.self) - try subDecoder.decodeFullObject(message: &value!) - assert(scanner.recursionBudget == subDecoder.scanner.recursionBudget) - scanner = subDecoder.scanner - } - - mutating func decodeRepeatedMessageField( - value: inout [M] - ) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredArrayStart() - if scanner.skipOptionalArrayEnd() { - return - } - while true { - if scanner.skipOptionalNull() { - var appended = false - if M.self is _CustomJSONCodable.Type { - if let message = try (M.self as! _CustomJSONCodable.Type) - .decodedFromJSONNull() as? M { - value.append(message) - appended = true - } - } - if !appended { - throw JSONDecodingError.illegalNull - } - } else { - var message = M() - var subDecoder = JSONDecoder(scanner: scanner, messageType: M.self) - try subDecoder.decodeFullObject(message: &message) - value.append(message) - assert(scanner.recursionBudget == subDecoder.scanner.recursionBudget) - scanner = subDecoder.scanner - } - if scanner.skipOptionalArrayEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeSingularGroupField(value: inout G?) throws { - throw JSONDecodingError.schemaMismatch - } - - mutating func decodeRepeatedGroupField(value: inout [G]) throws { - throw JSONDecodingError.schemaMismatch - } - - mutating func decodeMapField( - fieldType: _ProtobufMap.Type, - value: inout _ProtobufMap.BaseType - ) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredObjectStart() - if scanner.skipOptionalObjectEnd() { - return - } - while true { - // Next character must be double quote, because - // map keys must always be quoted strings. - let c = try scanner.peekOneCharacter() - if c != "\"" { - throw JSONDecodingError.unquotedMapKey - } - isMapKey = true - var keyField: KeyType.BaseType? - try KeyType.decodeSingular(value: &keyField, from: &self) - isMapKey = false - try scanner.skipRequiredColon() - var valueField: ValueType.BaseType? - try ValueType.decodeSingular(value: &valueField, from: &self) - if let keyField = keyField, let valueField = valueField { - value[keyField] = valueField - } else { - throw JSONDecodingError.malformedMap - } - if scanner.skipOptionalObjectEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeMapField( - fieldType: _ProtobufEnumMap.Type, - value: inout _ProtobufEnumMap.BaseType - ) throws where ValueType.RawValue == Int { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredObjectStart() - if scanner.skipOptionalObjectEnd() { - return - } - while true { - // Next character must be double quote, because - // map keys must always be quoted strings. - let c = try scanner.peekOneCharacter() - if c != "\"" { - throw JSONDecodingError.unquotedMapKey - } - isMapKey = true - var keyField: KeyType.BaseType? - try KeyType.decodeSingular(value: &keyField, from: &self) - isMapKey = false - try scanner.skipRequiredColon() - var valueField: ValueType? - try decodeSingularEnumField(value: &valueField) - if let keyField = keyField, let valueField = valueField { - value[keyField] = valueField - } else { - throw JSONDecodingError.malformedMap - } - if scanner.skipOptionalObjectEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeMapField( - fieldType: _ProtobufMessageMap.Type, - value: inout _ProtobufMessageMap.BaseType - ) throws { - if scanner.skipOptionalNull() { - return - } - try scanner.skipRequiredObjectStart() - if scanner.skipOptionalObjectEnd() { - return - } - while true { - // Next character must be double quote, because - // map keys must always be quoted strings. - let c = try scanner.peekOneCharacter() - if c != "\"" { - throw JSONDecodingError.unquotedMapKey - } - isMapKey = true - var keyField: KeyType.BaseType? - try KeyType.decodeSingular(value: &keyField, from: &self) - isMapKey = false - try scanner.skipRequiredColon() - var valueField: ValueType? - try decodeSingularMessageField(value: &valueField) - if let keyField = keyField, let valueField = valueField { - value[keyField] = valueField - } else { - throw JSONDecodingError.malformedMap - } - if scanner.skipOptionalObjectEnd() { - return - } - try scanner.skipRequiredComma() - } - } - - mutating func decodeExtensionField( - values: inout ExtensionFieldValueSet, - messageType: Message.Type, - fieldNumber: Int - ) throws { - // Force-unwrap: we can only get here if the extension exists. - let ext = scanner.extensions[messageType, fieldNumber]! - - try values.modify(index: fieldNumber) { fieldValue in - if fieldValue != nil { - try fieldValue!.decodeExtensionField(decoder: &self) - } else { - fieldValue = try ext._protobuf_newField(decoder: &self) - } - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecodingError.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecodingError.swift deleted file mode 100644 index 35a407c..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecodingError.swift +++ /dev/null @@ -1,62 +0,0 @@ -// Sources/SwiftProtobuf/JSONDecodingError.swift - JSON decoding errors -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// JSON decoding errors -/// -// ----------------------------------------------------------------------------- - -public enum JSONDecodingError: Error { - /// Something was wrong - case failure - /// A number could not be parsed - case malformedNumber - /// Numeric value was out of range or was not an integer value when expected - case numberRange - /// A map could not be parsed - case malformedMap - /// A bool could not be parsed - case malformedBool - /// We expected a quoted string, or a quoted string has a malformed backslash sequence - case malformedString - /// We encountered malformed UTF8 - case invalidUTF8 - /// The message does not have fieldName information - case missingFieldNames - /// The data type does not match the schema description - case schemaMismatch - /// A value (text or numeric) for an enum was not found on the enum - case unrecognizedEnumValue - /// A 'null' token appeared in an illegal location. - /// For example, Protobuf JSON does not allow 'null' tokens to appear - /// in lists. - case illegalNull - /// A map key was not quoted - case unquotedMapKey - /// JSON RFC 7519 does not allow numbers to have extra leading zeros - case leadingZero - /// We hit the end of the JSON string and expected something more... - case truncated - /// A JSON Duration could not be parsed - case malformedDuration - /// A JSON Timestamp could not be parsed - case malformedTimestamp - /// A FieldMask could not be parsed - case malformedFieldMask - /// Extraneous data remained after decoding should have been complete - case trailingGarbage - /// More than one value was specified for the same oneof field - case conflictingOneOf - /// Reached the nesting limit for messages within messages while decoding. - case messageDepthLimit - /// Encountered an unknown field with the given name. When parsing JSON, you - /// can instead instruct the library to ignore this via - /// JSONDecodingOptions.ignoreUnknownFields. - case unknownField(String) -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecodingOptions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecodingOptions.swift deleted file mode 100644 index 2f06e39..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONDecodingOptions.swift +++ /dev/null @@ -1,29 +0,0 @@ -// Sources/SwiftProtobuf/JSONDecodingOptions.swift - JSON decoding options -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// JSON decoding options -/// -// ----------------------------------------------------------------------------- - -/// Options for JSONDecoding. -public struct JSONDecodingOptions { - /// The maximum nesting of message with messages. The default is 100. - /// - /// To prevent corrupt or malicious messages from causing stack overflows, - /// this controls how deep messages can be nested within other messages - /// while parsing. - public var messageDepthLimit: Int = 100 - - /// If unknown fields in the JSON should be ignored. If they aren't - /// ignored, an error will be raised if one is encountered. - public var ignoreUnknownFields: Bool = false - - public init() {} -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncoder.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncoder.swift deleted file mode 100644 index 61c53f7..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncoder.swift +++ /dev/null @@ -1,386 +0,0 @@ -// Sources/SwiftProtobuf/JSONEncoder.swift - JSON Encoding support -// -// Copyright (c) 2014 - 2019 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// JSON serialization engine. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -private let asciiZero = UInt8(ascii: "0") -private let asciiOne = UInt8(ascii: "1") -private let asciiTwo = UInt8(ascii: "2") -private let asciiThree = UInt8(ascii: "3") -private let asciiFour = UInt8(ascii: "4") -private let asciiFive = UInt8(ascii: "5") -private let asciiSix = UInt8(ascii: "6") -private let asciiSeven = UInt8(ascii: "7") -private let asciiEight = UInt8(ascii: "8") -private let asciiNine = UInt8(ascii: "9") -private let asciiMinus = UInt8(ascii: "-") -private let asciiPlus = UInt8(ascii: "+") -private let asciiEquals = UInt8(ascii: "=") -private let asciiColon = UInt8(ascii: ":") -private let asciiComma = UInt8(ascii: ",") -private let asciiDoubleQuote = UInt8(ascii: "\"") -private let asciiBackslash = UInt8(ascii: "\\") -private let asciiForwardSlash = UInt8(ascii: "/") -private let asciiOpenSquareBracket = UInt8(ascii: "[") -private let asciiCloseSquareBracket = UInt8(ascii: "]") -private let asciiOpenCurlyBracket = UInt8(ascii: "{") -private let asciiCloseCurlyBracket = UInt8(ascii: "}") -private let asciiUpperA = UInt8(ascii: "A") -private let asciiUpperB = UInt8(ascii: "B") -private let asciiUpperC = UInt8(ascii: "C") -private let asciiUpperD = UInt8(ascii: "D") -private let asciiUpperE = UInt8(ascii: "E") -private let asciiUpperF = UInt8(ascii: "F") -private let asciiUpperZ = UInt8(ascii: "Z") -private let asciiLowerA = UInt8(ascii: "a") -private let asciiLowerZ = UInt8(ascii: "z") - -private let base64Digits: [UInt8] = { - var digits = [UInt8]() - digits.append(contentsOf: asciiUpperA...asciiUpperZ) - digits.append(contentsOf: asciiLowerA...asciiLowerZ) - digits.append(contentsOf: asciiZero...asciiNine) - digits.append(asciiPlus) - digits.append(asciiForwardSlash) - return digits -}() - -private let hexDigits: [UInt8] = { - var digits = [UInt8]() - digits.append(contentsOf: asciiZero...asciiNine) - digits.append(contentsOf: asciiUpperA...asciiUpperF) - return digits -}() - -internal struct JSONEncoder { - private var data = [UInt8]() - private var separator: UInt8? - - internal init() {} - - internal var dataResult: Data { return Data(data) } - - internal var stringResult: String { - get { - return String(bytes: data, encoding: String.Encoding.utf8)! - } - } - - /// Append a `StaticString` to the JSON text. Because - /// `StaticString` is already UTF8 internally, this is faster - /// than appending a regular `String`. - internal mutating func append(staticText: StaticString) { - let buff = UnsafeBufferPointer(start: staticText.utf8Start, count: staticText.utf8CodeUnitCount) - data.append(contentsOf: buff) - } - - /// Append a `_NameMap.Name` to the JSON text surrounded by quotes. - /// As with StaticString above, a `_NameMap.Name` provides pre-converted - /// UTF8 bytes, so this is much faster than appending a regular - /// `String`. - internal mutating func appendQuoted(name: _NameMap.Name) { - data.append(asciiDoubleQuote) - data.append(contentsOf: name.utf8Buffer) - data.append(asciiDoubleQuote) - } - - /// Append a `String` to the JSON text. - internal mutating func append(text: String) { - data.append(contentsOf: text.utf8) - } - - /// Append a raw utf8 in a `Data` to the JSON text. - internal mutating func append(utf8Data: Data) { - data.append(contentsOf: utf8Data) - } - - /// Begin a new field whose name is given as a `_NameMap.Name` - internal mutating func startField(name: _NameMap.Name) { - if let s = separator { - data.append(s) - } - appendQuoted(name: name) - data.append(asciiColon) - separator = asciiComma - } - - /// Begin a new field whose name is given as a `String`. - internal mutating func startField(name: String) { - if let s = separator { - data.append(s) - } - data.append(asciiDoubleQuote) - // Can avoid overhead of putStringValue, since - // the JSON field names are always clean ASCII. - data.append(contentsOf: name.utf8) - append(staticText: "\":") - separator = asciiComma - } - - /// Begin a new extension field - internal mutating func startExtensionField(name: String) { - if let s = separator { - data.append(s) - } - append(staticText: "\"[") - data.append(contentsOf: name.utf8) - append(staticText: "]\":") - separator = asciiComma - } - - /// Append an open square bracket `[` to the JSON. - internal mutating func startArray() { - data.append(asciiOpenSquareBracket) - separator = nil - } - - /// Append a close square bracket `]` to the JSON. - internal mutating func endArray() { - data.append(asciiCloseSquareBracket) - separator = asciiComma - } - - /// Append a comma `,` to the JSON. - internal mutating func comma() { - data.append(asciiComma) - } - - /// Append an open curly brace `{` to the JSON. - /// Assumes this object is part of an array of objects. - internal mutating func startArrayObject() { - if let s = separator { - data.append(s) - } - data.append(asciiOpenCurlyBracket) - separator = nil - } - - /// Append an open curly brace `{` to the JSON. - internal mutating func startObject() { - data.append(asciiOpenCurlyBracket) - separator = nil - } - - /// Append a close curly brace `}` to the JSON. - internal mutating func endObject() { - data.append(asciiCloseCurlyBracket) - separator = asciiComma - } - - /// Write a JSON `null` token to the output. - internal mutating func putNullValue() { - append(staticText: "null") - } - - /// Append a float value to the output. - /// This handles Nan and infinite values by - /// writing well-known string values. - internal mutating func putFloatValue(value: Float) { - if value.isNaN { - append(staticText: "\"NaN\"") - } else if !value.isFinite { - if value < 0 { - append(staticText: "\"-Infinity\"") - } else { - append(staticText: "\"Infinity\"") - } - } else { - data.append(contentsOf: value.debugDescription.utf8) - } - } - - /// Append a double value to the output. - /// This handles Nan and infinite values by - /// writing well-known string values. - internal mutating func putDoubleValue(value: Double) { - if value.isNaN { - append(staticText: "\"NaN\"") - } else if !value.isFinite { - if value < 0 { - append(staticText: "\"-Infinity\"") - } else { - append(staticText: "\"Infinity\"") - } - } else { - data.append(contentsOf: value.debugDescription.utf8) - } - } - - /// Append a UInt64 to the output (without quoting). - private mutating func appendUInt(value: UInt64) { - if value >= 10 { - appendUInt(value: value / 10) - } - data.append(asciiZero + UInt8(value % 10)) - } - - /// Append an Int64 to the output (without quoting). - private mutating func appendInt(value: Int64) { - if value < 0 { - data.append(asciiMinus) - // This is the twos-complement negation of value, - // computed in a way that won't overflow a 64-bit - // signed integer. - appendUInt(value: 1 + ~UInt64(bitPattern: value)) - } else { - appendUInt(value: UInt64(bitPattern: value)) - } - } - - /// Write an Enum as an int. - internal mutating func putEnumInt(value: Int) { - appendInt(value: Int64(value)) - } - - /// Write an `Int64` using protobuf JSON quoting conventions. - internal mutating func putInt64(value: Int64) { - data.append(asciiDoubleQuote) - appendInt(value: value) - data.append(asciiDoubleQuote) - } - - /// Write an `Int32` with quoting suitable for - /// using the value as a map key. - internal mutating func putQuotedInt32(value: Int32) { - data.append(asciiDoubleQuote) - appendInt(value: Int64(value)) - data.append(asciiDoubleQuote) - } - - /// Write an `Int32` in the default format. - internal mutating func putInt32(value: Int32) { - appendInt(value: Int64(value)) - } - - /// Write a `UInt64` using protobuf JSON quoting conventions. - internal mutating func putUInt64(value: UInt64) { - data.append(asciiDoubleQuote) - appendUInt(value: value) - data.append(asciiDoubleQuote) - } - - /// Write a `UInt32` with quoting suitable for - /// using the value as a map key. - internal mutating func putQuotedUInt32(value: UInt32) { - data.append(asciiDoubleQuote) - appendUInt(value: UInt64(value)) - data.append(asciiDoubleQuote) - } - - /// Write a `UInt32` in the default format. - internal mutating func putUInt32(value: UInt32) { - appendUInt(value: UInt64(value)) - } - - /// Write a `Bool` with quoting suitable for - /// using the value as a map key. - internal mutating func putQuotedBoolValue(value: Bool) { - data.append(asciiDoubleQuote) - putBoolValue(value: value) - data.append(asciiDoubleQuote) - } - - /// Write a `Bool` in the default format. - internal mutating func putBoolValue(value: Bool) { - if value { - append(staticText: "true") - } else { - append(staticText: "false") - } - } - - /// Append a string value escaping special characters as needed. - internal mutating func putStringValue(value: String) { - data.append(asciiDoubleQuote) - for c in value.unicodeScalars { - switch c.value { - // Special two-byte escapes - case 8: append(staticText: "\\b") - case 9: append(staticText: "\\t") - case 10: append(staticText: "\\n") - case 12: append(staticText: "\\f") - case 13: append(staticText: "\\r") - case 34: append(staticText: "\\\"") - case 92: append(staticText: "\\\\") - case 0...31, 127...159: // Hex form for C0 control chars - append(staticText: "\\u00") - data.append(hexDigits[Int(c.value / 16)]) - data.append(hexDigits[Int(c.value & 15)]) - case 23...126: - data.append(UInt8(truncatingIfNeeded: c.value)) - case 0x80...0x7ff: - data.append(0xc0 + UInt8(truncatingIfNeeded: c.value >> 6)) - data.append(0x80 + UInt8(truncatingIfNeeded: c.value & 0x3f)) - case 0x800...0xffff: - data.append(0xe0 + UInt8(truncatingIfNeeded: c.value >> 12)) - data.append(0x80 + UInt8(truncatingIfNeeded: (c.value >> 6) & 0x3f)) - data.append(0x80 + UInt8(truncatingIfNeeded: c.value & 0x3f)) - default: - data.append(0xf0 + UInt8(truncatingIfNeeded: c.value >> 18)) - data.append(0x80 + UInt8(truncatingIfNeeded: (c.value >> 12) & 0x3f)) - data.append(0x80 + UInt8(truncatingIfNeeded: (c.value >> 6) & 0x3f)) - data.append(0x80 + UInt8(truncatingIfNeeded: c.value & 0x3f)) - } - } - data.append(asciiDoubleQuote) - } - - /// Append a bytes value using protobuf JSON Base-64 encoding. - internal mutating func putBytesValue(value: Data) { - data.append(asciiDoubleQuote) - if value.count > 0 { - value.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - if let p = body.baseAddress, body.count > 0 { - var t: Int = 0 - var bytesInGroup: Int = 0 - for i in 0..> 18) & 63]) - data.append(base64Digits[(t >> 12) & 63]) - data.append(base64Digits[(t >> 6) & 63]) - data.append(base64Digits[t & 63]) - t = 0 - bytesInGroup = 0 - } - t = (t << 8) + Int(p[i]) - bytesInGroup += 1 - } - switch bytesInGroup { - case 3: - data.append(base64Digits[(t >> 18) & 63]) - data.append(base64Digits[(t >> 12) & 63]) - data.append(base64Digits[(t >> 6) & 63]) - data.append(base64Digits[t & 63]) - case 2: - t <<= 8 - data.append(base64Digits[(t >> 18) & 63]) - data.append(base64Digits[(t >> 12) & 63]) - data.append(base64Digits[(t >> 6) & 63]) - data.append(asciiEquals) - case 1: - t <<= 16 - data.append(base64Digits[(t >> 18) & 63]) - data.append(base64Digits[(t >> 12) & 63]) - data.append(asciiEquals) - data.append(asciiEquals) - default: - break - } - } - } - } - data.append(asciiDoubleQuote) - } -} - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingError.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingError.swift deleted file mode 100644 index 567f949..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingError.swift +++ /dev/null @@ -1,35 +0,0 @@ -// Sources/SwiftProtobuf/JSONEncodingError.swift - Error constants -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Enum constants that identify the particular error. -/// -// ----------------------------------------------------------------------------- - -public enum JSONEncodingError: Error { - /// Any fields that were decoded from binary format cannot be - /// re-encoded into JSON unless the object they hold is a - /// well-known type or a type registered with via - /// Google_Protobuf_Any.register() - case anyTranscodeFailure - /// Timestamp values can only be JSON encoded if they hold a value - /// between 0001-01-01Z00:00:00 and 9999-12-31Z23:59:59. - case timestampRange - /// Duration values can only be JSON encoded if they hold a value - /// less than +/- 100 years. - case durationRange - /// Field masks get edited when converting between JSON and protobuf - case fieldMaskConversion - /// Field names were not compiled into the binary - case missingFieldNames - /// Instances of `Google_Protobuf_Value` can only be encoded if they have a - /// valid `kind` (that is, they represent a null value, number, boolean, - /// string, struct, or list). - case missingValue -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingOptions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingOptions.swift deleted file mode 100644 index 9541909..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingOptions.swift +++ /dev/null @@ -1,26 +0,0 @@ -// Sources/SwiftProtobuf/JSONEncodingOptions.swift - JSON encoding options -// -// Copyright (c) 2014 - 2018 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// JSON encoding options -/// -// ----------------------------------------------------------------------------- - -/// Options for JSONEncoding. -public struct JSONEncodingOptions { - - /// Always print enums as ints. By default they are printed as strings. - public var alwaysPrintEnumsAsInts: Bool = false - - /// Whether to preserve proto field names. - /// By default they are converted to JSON(lowerCamelCase) names. - public var preserveProtoFieldNames: Bool = false - - public init() {} -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingVisitor.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingVisitor.swift deleted file mode 100644 index 4a7a046..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONEncodingVisitor.swift +++ /dev/null @@ -1,404 +0,0 @@ -// Sources/SwiftProtobuf/JSONEncodingVisitor.swift - JSON encoding visitor -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Visitor that writes a message in JSON format. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Visitor that serializes a message into JSON format. -internal struct JSONEncodingVisitor: Visitor { - - private var encoder = JSONEncoder() - private var nameMap: _NameMap - private var extensions: ExtensionFieldValueSet? - private let options: JSONEncodingOptions - - /// The JSON text produced by the visitor, as raw UTF8 bytes. - var dataResult: Data { - return encoder.dataResult - } - - /// The JSON text produced by the visitor, as a String. - internal var stringResult: String { - return encoder.stringResult - } - - /// Creates a new visitor for serializing a message of the given type to JSON - /// format. - init(type: Message.Type, options: JSONEncodingOptions) throws { - if let nameProviding = type as? _ProtoNameProviding.Type { - self.nameMap = nameProviding._protobuf_nameMap - } else { - throw JSONEncodingError.missingFieldNames - } - self.options = options - } - - mutating func startArray() { - encoder.startArray() - } - - mutating func endArray() { - encoder.endArray() - } - - mutating func startObject(message: Message) { - self.extensions = (message as? ExtensibleMessage)?._protobuf_extensionFieldValues - encoder.startObject() - } - - mutating func startArrayObject(message: Message) { - self.extensions = (message as? ExtensibleMessage)?._protobuf_extensionFieldValues - encoder.startArrayObject() - } - - mutating func endObject() { - encoder.endObject() - } - - mutating func encodeField(name: String, stringValue value: String) { - encoder.startField(name: name) - encoder.putStringValue(value: value) - } - - mutating func encodeField(name: String, jsonText text: String) { - encoder.startField(name: name) - encoder.append(text: text) - } - - mutating func visitUnknown(bytes: Data) throws { - // JSON encoding has no provision for carrying proto2 unknown fields. - } - - mutating func visitSingularFloatField(value: Float, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putFloatValue(value: value) - } - - mutating func visitSingularDoubleField(value: Double, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putDoubleValue(value: value) - } - - mutating func visitSingularInt32Field(value: Int32, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putInt32(value: value) - } - - mutating func visitSingularInt64Field(value: Int64, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putInt64(value: value) - } - - mutating func visitSingularUInt32Field(value: UInt32, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putUInt32(value: value) - } - - mutating func visitSingularUInt64Field(value: UInt64, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putUInt64(value: value) - } - - mutating func visitSingularFixed32Field(value: UInt32, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putUInt32(value: value) - } - - mutating func visitSingularSFixed32Field(value: Int32, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putInt32(value: value) - } - - mutating func visitSingularBoolField(value: Bool, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putBoolValue(value: value) - } - - mutating func visitSingularStringField(value: String, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putStringValue(value: value) - } - - mutating func visitSingularBytesField(value: Data, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.putBytesValue(value: value) - } - - private mutating func _visitRepeated( - value: [T], - fieldNumber: Int, - encode: (inout JSONEncoder, T) throws -> () - ) throws { - assert(!value.isEmpty) - try startField(for: fieldNumber) - var comma = false - encoder.startArray() - for v in value { - if comma { - encoder.comma() - } - comma = true - try encode(&encoder, v) - } - encoder.endArray() - } - - mutating func visitSingularEnumField(value: E, fieldNumber: Int) throws { - try startField(for: fieldNumber) - if let e = value as? _CustomJSONCodable { - let json = try e.encodedJSONString(options: options) - encoder.append(text: json) - } else if !options.alwaysPrintEnumsAsInts, let n = value.name { - encoder.appendQuoted(name: n) - } else { - encoder.putEnumInt(value: value.rawValue) - } - } - - mutating func visitSingularMessageField(value: M, fieldNumber: Int) throws { - try startField(for: fieldNumber) - if let m = value as? _CustomJSONCodable { - let json = try m.encodedJSONString(options: options) - encoder.append(text: json) - } else if let newNameMap = (M.self as? _ProtoNameProviding.Type)?._protobuf_nameMap { - // Preserve outer object's name and extension maps; restore them before returning - let oldNameMap = self.nameMap - let oldExtensions = self.extensions - defer { - self.nameMap = oldNameMap - self.extensions = oldExtensions - } - // Install inner object's name and extension maps - self.nameMap = newNameMap - startObject(message: value) - try value.traverse(visitor: &self) - endObject() - } else { - throw JSONEncodingError.missingFieldNames - } - } - - mutating func visitSingularGroupField(value: G, fieldNumber: Int) throws { - // Google does not serialize groups into JSON - } - - mutating func visitRepeatedFloatField(value: [Float], fieldNumber: Int) throws { - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: Float) in - encoder.putFloatValue(value: v) - } - } - - mutating func visitRepeatedDoubleField(value: [Double], fieldNumber: Int) throws { - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: Double) in - encoder.putDoubleValue(value: v) - } - } - - mutating func visitRepeatedInt32Field(value: [Int32], fieldNumber: Int) throws { - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: Int32) in - encoder.putInt32(value: v) - } - } - - mutating func visitRepeatedInt64Field(value: [Int64], fieldNumber: Int) throws { - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: Int64) in - encoder.putInt64(value: v) - } - } - - mutating func visitRepeatedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: UInt32) in - encoder.putUInt32(value: v) - } - } - - mutating func visitRepeatedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: UInt64) in - encoder.putUInt64(value: v) - } - } - - mutating func visitRepeatedSInt32Field(value: [Int32], fieldNumber: Int) throws { - try visitRepeatedInt32Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitRepeatedSInt64Field(value: [Int64], fieldNumber: Int) throws { - try visitRepeatedInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitRepeatedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - try visitRepeatedUInt32Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitRepeatedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - try visitRepeatedUInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitRepeatedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - try visitRepeatedInt32Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitRepeatedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - try visitRepeatedInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitRepeatedBoolField(value: [Bool], fieldNumber: Int) throws { - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: Bool) in - encoder.putBoolValue(value: v) - } - } - - mutating func visitRepeatedStringField(value: [String], fieldNumber: Int) throws { - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: String) in - encoder.putStringValue(value: v) - } - } - - mutating func visitRepeatedBytesField(value: [Data], fieldNumber: Int) throws { - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: Data) in - encoder.putBytesValue(value: v) - } - } - - mutating func visitRepeatedEnumField(value: [E], fieldNumber: Int) throws { - if let _ = E.self as? _CustomJSONCodable.Type { - let options = self.options - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: E) throws in - let e = v as! _CustomJSONCodable - let json = try e.encodedJSONString(options: options) - encoder.append(text: json) - } - } else { - let alwaysPrintEnumsAsInts = options.alwaysPrintEnumsAsInts - try _visitRepeated(value: value, fieldNumber: fieldNumber) { - (encoder: inout JSONEncoder, v: E) throws in - if !alwaysPrintEnumsAsInts, let n = v.name { - encoder.appendQuoted(name: n) - } else { - encoder.putEnumInt(value: v.rawValue) - } - } - } - } - - mutating func visitRepeatedMessageField(value: [M], fieldNumber: Int) throws { - assert(!value.isEmpty) - try startField(for: fieldNumber) - var comma = false - encoder.startArray() - if let _ = M.self as? _CustomJSONCodable.Type { - for v in value { - if comma { - encoder.comma() - } - comma = true - let json = try v.jsonString(options: options) - encoder.append(text: json) - } - } else if let newNameMap = (M.self as? _ProtoNameProviding.Type)?._protobuf_nameMap { - // Preserve name and extension maps for outer object - let oldNameMap = self.nameMap - let oldExtensions = self.extensions - // Restore outer object's name and extension maps before returning - defer { - self.nameMap = oldNameMap - self.extensions = oldExtensions - } - self.nameMap = newNameMap - for v in value { - startArrayObject(message: v) - try v.traverse(visitor: &self) - encoder.endObject() - } - } else { - throw JSONEncodingError.missingFieldNames - } - encoder.endArray() - } - - mutating func visitRepeatedGroupField(value: [G], fieldNumber: Int) throws { - assert(!value.isEmpty) - // Google does not serialize groups into JSON - } - - // Packed fields are handled the same as non-packed fields, so JSON just - // relies on the default implementations in Visitor.swift - - - - mutating func visitMapField(fieldType: _ProtobufMap.Type, value: _ProtobufMap.BaseType, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.append(text: "{") - var mapVisitor = JSONMapEncodingVisitor(encoder: encoder, options: options) - for (k,v) in value { - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &mapVisitor) - try ValueType.visitSingular(value: v, fieldNumber: 2, with: &mapVisitor) - } - encoder = mapVisitor.encoder - encoder.append(text: "}") - } - - mutating func visitMapField(fieldType: _ProtobufEnumMap.Type, value: _ProtobufEnumMap.BaseType, fieldNumber: Int) throws where ValueType.RawValue == Int { - try startField(for: fieldNumber) - encoder.append(text: "{") - var mapVisitor = JSONMapEncodingVisitor(encoder: encoder, options: options) - for (k, v) in value { - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &mapVisitor) - try mapVisitor.visitSingularEnumField(value: v, fieldNumber: 2) - } - encoder = mapVisitor.encoder - encoder.append(text: "}") - } - - mutating func visitMapField(fieldType: _ProtobufMessageMap.Type, value: _ProtobufMessageMap.BaseType, fieldNumber: Int) throws { - try startField(for: fieldNumber) - encoder.append(text: "{") - var mapVisitor = JSONMapEncodingVisitor(encoder: encoder, options: options) - for (k,v) in value { - try KeyType.visitSingular(value: k, fieldNumber: 1, with: &mapVisitor) - try mapVisitor.visitSingularMessageField(value: v, fieldNumber: 2) - } - encoder = mapVisitor.encoder - encoder.append(text: "}") - } - - /// Helper function that throws an error if the field number could not be - /// resolved. - private mutating func startField(for number: Int) throws { - let name: _NameMap.Name? - - if options.preserveProtoFieldNames { - name = nameMap.names(for: number)?.proto - } else { - name = nameMap.names(for: number)?.json - } - - if let name = name { - encoder.startField(name: name) - } else if let name = extensions?[number]?.protobufExtension.fieldName { - encoder.startExtensionField(name: name) - } else { - throw JSONEncodingError.missingFieldNames - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONMapEncodingVisitor.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONMapEncodingVisitor.swift deleted file mode 100644 index e15ac03..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONMapEncodingVisitor.swift +++ /dev/null @@ -1,174 +0,0 @@ -// Sources/SwiftProtobuf/JSONMapEncodingVisitor.swift - JSON map encoding visitor -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Visitor that writes out the key/value pairs for a JSON map. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Visitor that serializes a message into JSON map format. -/// -/// This expects to alternately visit the keys and values for a JSON -/// map. It only accepts singular values. Keys should be identified -/// as `fieldNumber:1`, values should be identified as `fieldNumber:2` -/// -internal struct JSONMapEncodingVisitor: SelectiveVisitor { - private var separator: StaticString? - internal var encoder: JSONEncoder - private let options: JSONEncodingOptions - - init(encoder: JSONEncoder, options: JSONEncodingOptions) { - self.encoder = encoder - self.options = options - } - - private mutating func startKey() { - if let s = separator { - encoder.append(staticText: s) - } else { - separator = "," - } - } - - private mutating func startValue() { - encoder.append(staticText: ":") - } - - mutating func visitSingularFloatField(value: Float, fieldNumber: Int) throws { - // Doubles/Floats can never be map keys, only values - assert(fieldNumber == 2) - startValue() - encoder.putFloatValue(value: value) - } - - mutating func visitSingularDoubleField(value: Double, fieldNumber: Int) throws { - // Doubles/Floats can never be map keys, only values - assert(fieldNumber == 2) - startValue() - encoder.putDoubleValue(value: value) - } - - mutating func visitSingularInt32Field(value: Int32, fieldNumber: Int) throws { - if fieldNumber == 1 { - startKey() - encoder.putQuotedInt32(value: value) - } else { - startValue() - encoder.putInt32(value: value) - } - } - - mutating func visitSingularInt64Field(value: Int64, fieldNumber: Int) throws { - if fieldNumber == 1 { - startKey() - } else { - startValue() - } - // Int64 fields are always quoted anyway - encoder.putInt64(value: value) - } - - mutating func visitSingularUInt32Field(value: UInt32, fieldNumber: Int) throws { - if fieldNumber == 1 { - startKey() - encoder.putQuotedUInt32(value: value) - } else { - startValue() - encoder.putUInt32(value: value) - } - } - - mutating func visitSingularUInt64Field(value: UInt64, fieldNumber: Int) throws { - if fieldNumber == 1 { - startKey() - } else { - startValue() - } - encoder.putUInt64(value: value) - } - - mutating func visitSingularSInt32Field(value: Int32, fieldNumber: Int) throws { - try visitSingularInt32Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitSingularSInt64Field(value: Int64, fieldNumber: Int) throws { - try visitSingularInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitSingularFixed32Field(value: UInt32, fieldNumber: Int) throws { - try visitSingularUInt32Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitSingularFixed64Field(value: UInt64, fieldNumber: Int) throws { - try visitSingularUInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitSingularSFixed32Field(value: Int32, fieldNumber: Int) throws { - try visitSingularInt32Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitSingularSFixed64Field(value: Int64, fieldNumber: Int) throws { - try visitSingularInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitSingularBoolField(value: Bool, fieldNumber: Int) throws { - if fieldNumber == 1 { - startKey() - encoder.putQuotedBoolValue(value: value) - } else { - startValue() - encoder.putBoolValue(value: value) - } - } - - mutating func visitSingularStringField(value: String, fieldNumber: Int) throws { - if fieldNumber == 1 { - startKey() - } else { - startValue() - } - encoder.putStringValue(value: value) - } - - mutating func visitSingularBytesField(value: Data, fieldNumber: Int) throws { - // Bytes can only be map values, never keys - assert(fieldNumber == 2) - startValue() - encoder.putBytesValue(value: value) - } - - mutating func visitSingularEnumField(value: E, fieldNumber: Int) throws { - // Enums can only be map values, never keys - assert(fieldNumber == 2) - startValue() - if !options.alwaysPrintEnumsAsInts, let n = value.name { - encoder.putStringValue(value: String(describing: n)) - } else { - encoder.putEnumInt(value: value.rawValue) - } - } - - mutating func visitSingularMessageField(value: M, fieldNumber: Int) throws { - // Messages can only be map values, never keys - assert(fieldNumber == 2) - startValue() - let json = try value.jsonString(options: options) - encoder.append(text: json) - } - - // SelectiveVisitor will block: - // - single Groups - // - everything repeated - // - everything packed - // - all maps - // - unknown fields - // - extensions -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONScanner.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONScanner.swift deleted file mode 100644 index f7094f6..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/JSONScanner.swift +++ /dev/null @@ -1,1518 +0,0 @@ -// Sources/SwiftProtobuf/JSONScanner.swift - JSON format decoding -// -// Copyright (c) 2014 - 2019 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// JSON format decoding engine. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -private let asciiBell = UInt8(7) -private let asciiBackspace = UInt8(8) -private let asciiTab = UInt8(9) -private let asciiNewLine = UInt8(10) -private let asciiVerticalTab = UInt8(11) -private let asciiFormFeed = UInt8(12) -private let asciiCarriageReturn = UInt8(13) -private let asciiZero = UInt8(ascii: "0") -private let asciiOne = UInt8(ascii: "1") -private let asciiSeven = UInt8(ascii: "7") -private let asciiNine = UInt8(ascii: "9") -private let asciiColon = UInt8(ascii: ":") -private let asciiPeriod = UInt8(ascii: ".") -private let asciiPlus = UInt8(ascii: "+") -private let asciiComma = UInt8(ascii: ",") -private let asciiSemicolon = UInt8(ascii: ";") -private let asciiDoubleQuote = UInt8(ascii: "\"") -private let asciiSingleQuote = UInt8(ascii: "\'") -private let asciiBackslash = UInt8(ascii: "\\") -private let asciiForwardSlash = UInt8(ascii: "/") -private let asciiHash = UInt8(ascii: "#") -private let asciiEqualSign = UInt8(ascii: "=") -private let asciiUnderscore = UInt8(ascii: "_") -private let asciiQuestionMark = UInt8(ascii: "?") -private let asciiSpace = UInt8(ascii: " ") -private let asciiOpenSquareBracket = UInt8(ascii: "[") -private let asciiCloseSquareBracket = UInt8(ascii: "]") -private let asciiOpenCurlyBracket = UInt8(ascii: "{") -private let asciiCloseCurlyBracket = UInt8(ascii: "}") -private let asciiOpenAngleBracket = UInt8(ascii: "<") -private let asciiCloseAngleBracket = UInt8(ascii: ">") -private let asciiMinus = UInt8(ascii: "-") -private let asciiLowerA = UInt8(ascii: "a") -private let asciiUpperA = UInt8(ascii: "A") -private let asciiLowerB = UInt8(ascii: "b") -private let asciiLowerE = UInt8(ascii: "e") -private let asciiUpperE = UInt8(ascii: "E") -private let asciiLowerF = UInt8(ascii: "f") -private let asciiUpperI = UInt8(ascii: "I") -private let asciiLowerL = UInt8(ascii: "l") -private let asciiLowerN = UInt8(ascii: "n") -private let asciiUpperN = UInt8(ascii: "N") -private let asciiLowerR = UInt8(ascii: "r") -private let asciiLowerS = UInt8(ascii: "s") -private let asciiLowerT = UInt8(ascii: "t") -private let asciiLowerU = UInt8(ascii: "u") -private let asciiLowerZ = UInt8(ascii: "z") -private let asciiUpperZ = UInt8(ascii: "Z") - -private func fromHexDigit(_ c: UnicodeScalar) -> UInt32? { - let n = c.value - if n >= 48 && n <= 57 { - return UInt32(n - 48) - } - switch n { - case 65, 97: return 10 - case 66, 98: return 11 - case 67, 99: return 12 - case 68, 100: return 13 - case 69, 101: return 14 - case 70, 102: return 15 - default: - return nil - } -} - -// Decode both the RFC 4648 section 4 Base 64 encoding and the RFC -// 4648 section 5 Base 64 variant. The section 5 variant is also -// known as "base64url" or the "URL-safe alphabet". -// Note that both "-" and "+" decode to 62 and "/" and "_" both -// decode as 63. -let base64Values: [Int] = [ -/* 0x00 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -/* 0x10 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -/* 0x20 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, -/* 0x30 */ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -/* 0x40 */ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -/* 0x50 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63, -/* 0x60 */ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, -/* 0x70 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1, -/* 0x80 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -/* 0x90 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -/* 0xa0 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -/* 0xb0 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -/* 0xc0 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -/* 0xd0 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -/* 0xe0 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -/* 0xf0 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -] - -/// Returns a `Data` value containing bytes equivalent to the given -/// Base64-encoded string, or nil if the conversion fails. -/// -/// Notes on Google's implementation (Base64Unescape() in strutil.cc): -/// * Google's C++ implementation accepts arbitrary whitespace -/// mixed in with the base-64 characters -/// * Google's C++ implementation ignores missing '=' characters -/// but if present, there must be the exact correct number of them. -/// * The conformance test requires us to accept both standard RFC4648 -/// Base 64 encoding and the "URL and Filename Safe Alphabet" variant. -/// -private func parseBytes( - source: UnsafeRawBufferPointer, - index: inout UnsafeRawBufferPointer.Index, - end: UnsafeRawBufferPointer.Index -) throws -> Data { - let c = source[index] - if c != asciiDoubleQuote { - throw JSONDecodingError.malformedString - } - source.formIndex(after: &index) - - // Count the base-64 digits - // Ignore most unrecognized characters in this first pass, - // stop at the closing double quote. - let digitsStart = index - var rawChars = 0 - var sawSection4Characters = false - var sawSection5Characters = false - while index != end { - var digit = source[index] - if digit == asciiDoubleQuote { - break - } - - if digit == asciiBackslash { - source.formIndex(after: &index) - if index == end { - throw JSONDecodingError.malformedString - } - let escaped = source[index] - switch escaped { - case asciiLowerU: - // TODO: Parse hex escapes such as \u0041. Note that - // such escapes are going to be extremely rare, so - // there's little point in optimizing for them. - throw JSONDecodingError.malformedString - case asciiForwardSlash: - digit = escaped - default: - // Reject \b \f \n \r \t \" or \\ and all illegal escapes - throw JSONDecodingError.malformedString - } - } - - if digit == asciiPlus || digit == asciiForwardSlash { - sawSection4Characters = true - } else if digit == asciiMinus || digit == asciiUnderscore { - sawSection5Characters = true - } - let k = base64Values[Int(digit)] - if k >= 0 { - rawChars += 1 - } - source.formIndex(after: &index) - } - - // We reached the end without seeing the close quote - if index == end { - throw JSONDecodingError.malformedString - } - // Reject mixed encodings. - if sawSection4Characters && sawSection5Characters { - throw JSONDecodingError.malformedString - } - - // Allocate a Data object of exactly the right size - var value = Data(count: rawChars * 3 / 4) - - // Scan the digits again and populate the Data object. - // In this pass, we check for (and fail) if there are - // unexpected characters. But we don't check for end-of-input, - // because the loop above already verified that there was - // a closing double quote. - index = digitsStart - try value.withUnsafeMutableBytes { - (body: UnsafeMutableRawBufferPointer) in - if var p = body.baseAddress, body.count > 0 { - var n = 0 - var chars = 0 // # chars in current group - var padding = 0 // # padding '=' chars - digits: while true { - let digit = source[index] - var k = base64Values[Int(digit)] - if k < 0 { - switch digit { - case asciiDoubleQuote: - break digits - case asciiBackslash: - source.formIndex(after: &index) - let escaped = source[index] - switch escaped { - case asciiForwardSlash: - k = base64Values[Int(escaped)] - default: - // Note: Invalid backslash escapes were caught - // above; we should never get here. - throw JSONDecodingError.malformedString - } - case asciiSpace: - source.formIndex(after: &index) - continue digits - case asciiEqualSign: // Count padding - while true { - switch source[index] { - case asciiDoubleQuote: - break digits - case asciiSpace: - break - case 61: - padding += 1 - default: // Only '=' and whitespace permitted - throw JSONDecodingError.malformedString - } - source.formIndex(after: &index) - } - default: - throw JSONDecodingError.malformedString - } - } - n <<= 6 - n |= k - chars += 1 - if chars == 4 { - p[0] = UInt8(truncatingIfNeeded: n >> 16) - p[1] = UInt8(truncatingIfNeeded: n >> 8) - p[2] = UInt8(truncatingIfNeeded: n) - p += 3 - chars = 0 - n = 0 - } - source.formIndex(after: &index) - } - switch chars { - case 3: - p[0] = UInt8(truncatingIfNeeded: n >> 10) - p[1] = UInt8(truncatingIfNeeded: n >> 2) - if padding == 1 || padding == 0 { - return - } - case 2: - p[0] = UInt8(truncatingIfNeeded: n >> 4) - if padding == 2 || padding == 0 { - return - } - case 0: - if padding == 0 { - return - } - default: - break - } - throw JSONDecodingError.malformedString - } - } - source.formIndex(after: &index) - return value -} - -// JSON encoding allows a variety of \-escapes, including -// escaping UTF-16 code points (which may be surrogate pairs). -private func decodeString(_ s: String) -> String? { - var out = String.UnicodeScalarView() - var chars = s.unicodeScalars.makeIterator() - while let c = chars.next() { - switch c.value { - case UInt32(asciiBackslash): // backslash - if let escaped = chars.next() { - switch escaped.value { - case UInt32(asciiLowerU): // "\u" - // Exactly 4 hex digits: - if let digit1 = chars.next(), - let d1 = fromHexDigit(digit1), - let digit2 = chars.next(), - let d2 = fromHexDigit(digit2), - let digit3 = chars.next(), - let d3 = fromHexDigit(digit3), - let digit4 = chars.next(), - let d4 = fromHexDigit(digit4) { - let codePoint = ((d1 * 16 + d2) * 16 + d3) * 16 + d4 - if let scalar = UnicodeScalar(codePoint) { - out.append(scalar) - } else if codePoint < 0xD800 || codePoint >= 0xE000 { - // Not a valid Unicode scalar. - return nil - } else if codePoint >= 0xDC00 { - // Low surrogate without a preceding high surrogate. - return nil - } else { - // We have a high surrogate (in the range 0xD800..<0xDC00), so - // verify that it is followed by a low surrogate. - guard chars.next() == "\\", chars.next() == "u" else { - // High surrogate was not followed by a Unicode escape sequence. - return nil - } - if let digit1 = chars.next(), - let d1 = fromHexDigit(digit1), - let digit2 = chars.next(), - let d2 = fromHexDigit(digit2), - let digit3 = chars.next(), - let d3 = fromHexDigit(digit3), - let digit4 = chars.next(), - let d4 = fromHexDigit(digit4) { - let follower = ((d1 * 16 + d2) * 16 + d3) * 16 + d4 - guard 0xDC00 <= follower && follower < 0xE000 else { - // High surrogate was not followed by a low surrogate. - return nil - } - let high = codePoint - 0xD800 - let low = follower - 0xDC00 - let composed = 0x10000 | high << 10 | low - guard let composedScalar = UnicodeScalar(composed) else { - // Composed value is not a valid Unicode scalar. - return nil - } - out.append(composedScalar) - } else { - // Malformed \u escape for low surrogate - return nil - } - } - } else { - // Malformed \u escape - return nil - } - case UInt32(asciiLowerB): // \b - out.append("\u{08}") - case UInt32(asciiLowerF): // \f - out.append("\u{0c}") - case UInt32(asciiLowerN): // \n - out.append("\u{0a}") - case UInt32(asciiLowerR): // \r - out.append("\u{0d}") - case UInt32(asciiLowerT): // \t - out.append("\u{09}") - case UInt32(asciiDoubleQuote), UInt32(asciiBackslash), - UInt32(asciiForwardSlash): // " \ / - out.append(escaped) - default: - return nil // Unrecognized escape - } - } else { - return nil // Input ends with backslash - } - default: - out.append(c) - } - } - return String(out) -} - -/// -/// The basic scanner support is entirely private -/// -/// For performance, it works directly against UTF-8 bytes in memory. -/// -internal struct JSONScanner { - private let source: UnsafeRawBufferPointer - private var index: UnsafeRawBufferPointer.Index - private var numberParser = DoubleParser() - internal let options: JSONDecodingOptions - internal let extensions: ExtensionMap - internal var recursionBudget: Int - - /// True if the scanner has read all of the data from the source, with the - /// exception of any trailing whitespace (which is consumed by reading this - /// property). - internal var complete: Bool { - mutating get { - skipWhitespace() - return !hasMoreContent - } - } - - /// True if the scanner has not yet reached the end of the source. - private var hasMoreContent: Bool { - return index != source.endIndex - } - - /// The byte (UTF-8 code unit) at the scanner's current position. - private var currentByte: UInt8 { - return source[index] - } - - internal init( - source: UnsafeRawBufferPointer, - options: JSONDecodingOptions, - extensions: ExtensionMap? - ) { - self.source = source - self.index = source.startIndex - self.recursionBudget = options.messageDepthLimit - self.options = options - self.extensions = extensions ?? SimpleExtensionMap() - } - - private mutating func incrementRecursionDepth() throws { - recursionBudget -= 1 - if recursionBudget < 0 { - throw JSONDecodingError.messageDepthLimit - } - } - - private mutating func decrementRecursionDepth() { - recursionBudget += 1 - // This should never happen, if it does, something is probably corrupting memory, and - // simply throwing doesn't make much sense. - if recursionBudget > options.messageDepthLimit { - fatalError("Somehow JSONDecoding unwound more objects than it started") - } - } - - /// Advances the scanner to the next position in the source. - private mutating func advance() { - source.formIndex(after: &index) - } - - /// Skip whitespace - private mutating func skipWhitespace() { - while hasMoreContent { - let u = currentByte - switch u { - case asciiSpace, asciiTab, asciiNewLine, asciiCarriageReturn: - advance() - default: - return - } - } - } - - /// Returns (but does not consume) the next non-whitespace - /// character. This is used by google.protobuf.Value, for - /// example, for custom JSON parsing. - internal mutating func peekOneCharacter() throws -> Character { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - return Character(UnicodeScalar(UInt32(currentByte))!) - } - - // Parse the leading UInt64 from the provided utf8 bytes. - // - // This is called in three different situations: - // - // * Unquoted number. - // - // * Simple quoted number. If a number is quoted but has no - // backslashes, the caller can use this directly on the UTF8 by - // just verifying the quote marks. This code returns `nil` if it - // sees a backslash, in which case the caller will need to handle ... - // - // * Complex quoted number. In this case, the caller must parse the - // quoted value as a string, then convert the string to utf8 and - // use this to parse the result. This is slow but fortunately - // rare. - // - // In the common case where the number is written in integer form, - // this code does a simple straight conversion. If the number is in - // floating-point format, this uses a slower and less accurate - // approach: it identifies a substring comprising a float, and then - // uses Double() and UInt64() to convert that string to an unsigned - // integer. In particular, it cannot preserve full 64-bit integer - // values when they are written in floating-point format. - // - // If it encounters a "\" backslash character, it returns a nil. This - // is used by callers that are parsing quoted numbers. See nextSInt() - // and nextUInt() below. - private func parseBareUInt64( - source: UnsafeRawBufferPointer, - index: inout UnsafeRawBufferPointer.Index, - end: UnsafeRawBufferPointer.Index - ) throws -> UInt64? { - if index == end { - throw JSONDecodingError.truncated - } - let start = index - let c = source[index] - switch c { - case asciiZero: // 0 - source.formIndex(after: &index) - if index != end { - let after = source[index] - switch after { - case asciiZero...asciiNine: // 0...9 - // leading '0' forbidden unless it is the only digit - throw JSONDecodingError.leadingZero - case asciiPeriod, asciiLowerE, asciiUpperE: // . e - // Slow path: JSON numbers can be written in floating-point notation - index = start - if let d = try parseBareDouble(source: source, - index: &index, - end: end) { - if let u = UInt64(exactly: d) { - return u - } - } - throw JSONDecodingError.malformedNumber - case asciiBackslash: - return nil - default: - return 0 - } - } - return 0 - case asciiOne...asciiNine: // 1...9 - var n = 0 as UInt64 - while index != end { - let digit = source[index] - switch digit { - case asciiZero...asciiNine: // 0...9 - let val = UInt64(digit - asciiZero) - if n > UInt64.max / 10 || n * 10 > UInt64.max - val { - throw JSONDecodingError.numberRange - } - source.formIndex(after: &index) - n = n * 10 + val - case asciiPeriod, asciiLowerE, asciiUpperE: // . e - // Slow path: JSON allows floating-point notation for integers - index = start - if let d = try parseBareDouble(source: source, - index: &index, - end: end) { - if let u = UInt64(exactly: d) { - return u - } - } - throw JSONDecodingError.malformedNumber - case asciiBackslash: - return nil - default: - return n - } - } - return n - case asciiBackslash: - return nil - default: - throw JSONDecodingError.malformedNumber - } - } - - // Parse the leading Int64 from the provided utf8. - // - // This uses parseBareUInt64() to do the heavy lifting; - // we just check for a leading minus and negate the result - // as necessary. - // - // As with parseBareUInt64(), if it encounters a "\" backslash - // character, it returns a nil. This allows callers to use this to - // do a "fast-path" decode of simple quoted numbers by parsing the - // UTF8 directly, only falling back to a full String decode when - // absolutely necessary. - private func parseBareSInt64( - source: UnsafeRawBufferPointer, - index: inout UnsafeRawBufferPointer.Index, - end: UnsafeRawBufferPointer.Index - ) throws -> Int64? { - if index == end { - throw JSONDecodingError.truncated - } - let c = source[index] - if c == asciiMinus { // - - source.formIndex(after: &index) - if index == end { - throw JSONDecodingError.truncated - } - // character after '-' must be digit - let digit = source[index] - if digit < asciiZero || digit > asciiNine { - throw JSONDecodingError.malformedNumber - } - if let n = try parseBareUInt64(source: source, index: &index, end: end) { - let limit: UInt64 = 0x8000000000000000 // -Int64.min - if n >= limit { - if n > limit { - // Too large negative number - throw JSONDecodingError.numberRange - } else { - return Int64.min // Special case for Int64.min - } - } - return -Int64(bitPattern: n) - } else { - return nil - } - } else if let n = try parseBareUInt64(source: source, index: &index, end: end) { - if n > UInt64(bitPattern: Int64.max) { - throw JSONDecodingError.numberRange - } - return Int64(bitPattern: n) - } else { - return nil - } - } - - // Identify a floating-point token in the upcoming UTF8 bytes. - // - // This implements the full grammar defined by the JSON RFC 7159. - // Note that Swift's string-to-number conversions are much more - // lenient, so this is necessary if we want to accurately reject - // malformed JSON numbers. - // - // This is used by nextDouble() and nextFloat() to parse double and - // floating-point values, including values that happen to be in quotes. - // It's also used by the slow path in parseBareSInt64() and parseBareUInt64() - // above to handle integer values that are written in float-point notation. - private func parseBareDouble( - source: UnsafeRawBufferPointer, - index: inout UnsafeRawBufferPointer.Index, - end: UnsafeRawBufferPointer.Index - ) throws -> Double? { - // RFC 7159 defines the grammar for JSON numbers as: - // number = [ minus ] int [ frac ] [ exp ] - if index == end { - throw JSONDecodingError.truncated - } - let start = index - var c = source[index] - if c == asciiBackslash { - return nil - } - - // Optional leading minus sign - if c == asciiMinus { // - - source.formIndex(after: &index) - if index == end { - index = start - throw JSONDecodingError.truncated - } - c = source[index] - if c == asciiBackslash { - return nil - } - } else if c == asciiUpperN { // Maybe NaN? - // Return nil, let the caller deal with it. - return nil - } - - if c == asciiUpperI { // Maybe Infinity, Inf, -Infinity, or -Inf ? - // Return nil, let the caller deal with it. - return nil - } - - // Integer part can be zero or a series of digits not starting with zero - // int = zero / (digit1-9 *DIGIT) - switch c { - case asciiZero: - // First digit can be zero only if not followed by a digit - source.formIndex(after: &index) - if index == end { - return 0.0 - } - c = source[index] - if c == asciiBackslash { - return nil - } - if c >= asciiZero && c <= asciiNine { - throw JSONDecodingError.leadingZero - } - case asciiOne...asciiNine: - while c >= asciiZero && c <= asciiNine { - source.formIndex(after: &index) - if index == end { - if let d = numberParser.utf8ToDouble(bytes: source, start: start, end: index) { - return d - } else { - throw JSONDecodingError.invalidUTF8 - } - } - c = source[index] - if c == asciiBackslash { - return nil - } - } - default: - // Integer part cannot be empty - throw JSONDecodingError.malformedNumber - } - - // frac = decimal-point 1*DIGIT - if c == asciiPeriod { - source.formIndex(after: &index) - if index == end { - // decimal point must have a following digit - throw JSONDecodingError.truncated - } - c = source[index] - switch c { - case asciiZero...asciiNine: // 0...9 - while c >= asciiZero && c <= asciiNine { - source.formIndex(after: &index) - if index == end { - if let d = numberParser.utf8ToDouble(bytes: source, start: start, end: index) { - return d - } else { - throw JSONDecodingError.invalidUTF8 - } - } - c = source[index] - if c == asciiBackslash { - return nil - } - } - case asciiBackslash: - return nil - default: - // decimal point must be followed by at least one digit - throw JSONDecodingError.malformedNumber - } - } - - // exp = e [ minus / plus ] 1*DIGIT - if c == asciiLowerE || c == asciiUpperE { - source.formIndex(after: &index) - if index == end { - // "e" must be followed by +,-, or digit - throw JSONDecodingError.truncated - } - c = source[index] - if c == asciiBackslash { - return nil - } - if c == asciiPlus || c == asciiMinus { // + - - source.formIndex(after: &index) - if index == end { - // must be at least one digit in exponent - throw JSONDecodingError.truncated - } - c = source[index] - if c == asciiBackslash { - return nil - } - } - switch c { - case asciiZero...asciiNine: - while c >= asciiZero && c <= asciiNine { - source.formIndex(after: &index) - if index == end { - if let d = numberParser.utf8ToDouble(bytes: source, start: start, end: index) { - return d - } else { - throw JSONDecodingError.invalidUTF8 - } - } - c = source[index] - if c == asciiBackslash { - return nil - } - } - default: - // must be at least one digit in exponent - throw JSONDecodingError.malformedNumber - } - } - if let d = numberParser.utf8ToDouble(bytes: source, start: start, end: index) { - return d - } else { - throw JSONDecodingError.invalidUTF8 - } - } - - /// Returns a fully-parsed string with all backslash escapes - /// correctly processed, or nil if next token is not a string. - /// - /// Assumes the leading quote has been verified (but not consumed) - private mutating func parseOptionalQuotedString() -> String? { - // Caller has already asserted that currentByte == quote here - var sawBackslash = false - advance() - let start = index - while hasMoreContent { - switch currentByte { - case asciiDoubleQuote: // " - let s = utf8ToString(bytes: source, start: start, end: index) - advance() - if let t = s { - if sawBackslash { - return decodeString(t) - } else { - return t - } - } else { - return nil // Invalid UTF8 - } - case asciiBackslash: // \ - advance() - guard hasMoreContent else { - return nil // Unterminated escape - } - sawBackslash = true - default: - break - } - advance() - } - return nil // Unterminated quoted string - } - - /// Parse an unsigned integer, whether or not its quoted. - /// This also handles cases such as quoted numbers that have - /// backslash escapes in them. - /// - /// This supports the full range of UInt64 (whether quoted or not) - /// unless the number is written in floating-point format. In that - /// case, we decode it with only Double precision. - internal mutating func nextUInt() throws -> UInt64 { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - let c = currentByte - if c == asciiDoubleQuote { - let start = index - advance() - if let u = try parseBareUInt64(source: source, - index: &index, - end: source.endIndex) { - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - if currentByte != asciiDoubleQuote { - throw JSONDecodingError.malformedNumber - } - advance() - return u - } else { - // Couldn't parse because it had a "\" in the string, - // so parse out the quoted string and then reparse - // the result to get a UInt - index = start - let s = try nextQuotedString() - let raw = s.data(using: String.Encoding.utf8)! - let n = try raw.withUnsafeBytes { - (body: UnsafeRawBufferPointer) -> UInt64? in - if body.count > 0 { - var index = body.startIndex - let end = body.endIndex - if let u = try parseBareUInt64(source: body, - index: &index, - end: end) { - if index == end { - return u - } - } - } - return nil - } - if let n = n { - return n - } - } - } else if let u = try parseBareUInt64(source: source, - index: &index, - end: source.endIndex) { - return u - } - throw JSONDecodingError.malformedNumber - } - - /// Parse a signed integer, quoted or not, including handling - /// backslash escapes for quoted values. - /// - /// This supports the full range of Int64 (whether quoted or not) - /// unless the number is written in floating-point format. In that - /// case, we decode it with only Double precision. - internal mutating func nextSInt() throws -> Int64 { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - let c = currentByte - if c == asciiDoubleQuote { - let start = index - advance() - if let s = try parseBareSInt64(source: source, - index: &index, - end: source.endIndex) { - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - if currentByte != asciiDoubleQuote { - throw JSONDecodingError.malformedNumber - } - advance() - return s - } else { - // Couldn't parse because it had a "\" in the string, - // so parse out the quoted string and then reparse - // the result as an SInt - index = start - let s = try nextQuotedString() - let raw = s.data(using: String.Encoding.utf8)! - let n = try raw.withUnsafeBytes { - (body: UnsafeRawBufferPointer) -> Int64? in - if body.count > 0 { - var index = body.startIndex - let end = body.endIndex - if let s = try parseBareSInt64(source: body, - index: &index, - end: end) { - if index == end { - return s - } - } - } - return nil - } - if let n = n { - return n - } - } - } else if let s = try parseBareSInt64(source: source, - index: &index, - end: source.endIndex) { - return s - } - throw JSONDecodingError.malformedNumber - } - - /// Parse the next Float value, regardless of whether it - /// is quoted, including handling backslash escapes for - /// quoted strings. - internal mutating func nextFloat() throws -> Float { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - let c = currentByte - if c == asciiDoubleQuote { // " - let start = index - advance() - if let d = try parseBareDouble(source: source, - index: &index, - end: source.endIndex) { - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - if currentByte != asciiDoubleQuote { - throw JSONDecodingError.malformedNumber - } - advance() - return Float(d) - } else { - // Slow Path: parseBareDouble returned nil: It might be - // a valid float, but had something that - // parseBareDouble cannot directly handle. So we reset, - // try a full string parse, then examine the result: - index = start - let s = try nextQuotedString() - switch s { - case "NaN": return Float.nan - case "Inf": return Float.infinity - case "-Inf": return -Float.infinity - case "Infinity": return Float.infinity - case "-Infinity": return -Float.infinity - default: - let raw = s.data(using: String.Encoding.utf8)! - let n = try raw.withUnsafeBytes { - (body: UnsafeRawBufferPointer) -> Float? in - if body.count > 0 { - var index = body.startIndex - let end = body.endIndex - if let d = try parseBareDouble(source: body, - index: &index, - end: end) { - let f = Float(d) - if index == end && f.isFinite { - return f - } - } - } - return nil - } - if let n = n { - return n - } - } - } - } else { - if let d = try parseBareDouble(source: source, - index: &index, - end: source.endIndex) { - let f = Float(d) - if f.isFinite { - return f - } - } - } - throw JSONDecodingError.malformedNumber - } - - /// Parse the next Double value, regardless of whether it - /// is quoted, including handling backslash escapes for - /// quoted strings. - internal mutating func nextDouble() throws -> Double { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - let c = currentByte - if c == asciiDoubleQuote { // " - let start = index - advance() - if let d = try parseBareDouble(source: source, - index: &index, - end: source.endIndex) { - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - if currentByte != asciiDoubleQuote { - throw JSONDecodingError.malformedNumber - } - advance() - return d - } else { - // Slow Path: parseBareDouble returned nil: It might be - // a valid float, but had something that - // parseBareDouble cannot directly handle. So we reset, - // try a full string parse, then examine the result: - index = start - let s = try nextQuotedString() - switch s { - case "NaN": return Double.nan - case "Inf": return Double.infinity - case "-Inf": return -Double.infinity - case "Infinity": return Double.infinity - case "-Infinity": return -Double.infinity - default: - let raw = s.data(using: String.Encoding.utf8)! - let n = try raw.withUnsafeBytes { - (body: UnsafeRawBufferPointer) -> Double? in - if body.count > 0 { - var index = body.startIndex - let end = body.endIndex - if let d = try parseBareDouble(source: body, - index: &index, - end: end) { - if index == end { - return d - } - } - } - return nil - } - if let n = n { - return n - } - } - } - } else { - if let d = try parseBareDouble(source: source, - index: &index, - end: source.endIndex) { - return d - } - } - throw JSONDecodingError.malformedNumber - } - - /// Return the contents of the following quoted string, - /// or throw an error if the next token is not a string. - internal mutating func nextQuotedString() throws -> String { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - let c = currentByte - if c != asciiDoubleQuote { - throw JSONDecodingError.malformedString - } - if let s = parseOptionalQuotedString() { - return s - } else { - throw JSONDecodingError.malformedString - } - } - - /// Return the contents of the following quoted string, - /// or nil if the next token is not a string. - /// This will only throw an error if the next token starts - /// out as a string but is malformed in some way. - internal mutating func nextOptionalQuotedString() throws -> String? { - skipWhitespace() - guard hasMoreContent else { - return nil - } - let c = currentByte - if c != asciiDoubleQuote { - return nil - } - return try nextQuotedString() - } - - /// Return a Data with the decoded contents of the - /// following base-64 string. - /// - /// Notes on Google's implementation: - /// * Google's C++ implementation accepts arbitrary whitespace - /// mixed in with the base-64 characters - /// * Google's C++ implementation ignores missing '=' characters - /// but if present, there must be the exact correct number of them. - /// * Google's C++ implementation accepts both "regular" and - /// "web-safe" base-64 variants (it seems to prefer the - /// web-safe version as defined in RFC 4648 - internal mutating func nextBytesValue() throws -> Data { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - return try parseBytes(source: source, index: &index, end: source.endIndex) - } - - /// Private function to help parse keywords. - private mutating func skipOptionalKeyword(bytes: [UInt8]) -> Bool { - let start = index - for b in bytes { - guard hasMoreContent else { - index = start - return false - } - let c = currentByte - if c != b { - index = start - return false - } - advance() - } - if hasMoreContent { - let c = currentByte - if (c >= asciiUpperA && c <= asciiUpperZ) || - (c >= asciiLowerA && c <= asciiLowerZ) { - index = start - return false - } - } - return true - } - - /// If the next token is the identifier "null", consume it and return true. - internal mutating func skipOptionalNull() -> Bool { - skipWhitespace() - if hasMoreContent && currentByte == asciiLowerN { - return skipOptionalKeyword(bytes: [ - asciiLowerN, asciiLowerU, asciiLowerL, asciiLowerL - ]) - } - return false - } - - /// Return the following Bool "true" or "false", including - /// full processing of quoted boolean values. (Used in map - /// keys, for instance.) - internal mutating func nextBool() throws -> Bool { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - let c = currentByte - switch c { - case asciiLowerF: // f - if skipOptionalKeyword(bytes: [ - asciiLowerF, asciiLowerA, asciiLowerL, asciiLowerS, asciiLowerE - ]) { - return false - } - case asciiLowerT: // t - if skipOptionalKeyword(bytes: [ - asciiLowerT, asciiLowerR, asciiLowerU, asciiLowerE - ]) { - return true - } - default: - break - } - throw JSONDecodingError.malformedBool - } - - /// Return the following Bool "true" or "false", including - /// full processing of quoted boolean values. (Used in map - /// keys, for instance.) - internal mutating func nextQuotedBool() throws -> Bool { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - if currentByte != asciiDoubleQuote { - throw JSONDecodingError.unquotedMapKey - } - if let s = parseOptionalQuotedString() { - switch s { - case "false": return false - case "true": return true - default: break - } - } - throw JSONDecodingError.malformedBool - } - - /// Returns pointer/count spanning the UTF8 bytes of the next regular - /// key or nil if the key contains a backslash (and therefore requires - /// the full string-parsing logic to properly parse). - private mutating func nextOptionalKey() throws -> UnsafeRawBufferPointer? { - skipWhitespace() - let stringStart = index - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - if currentByte != asciiDoubleQuote { - return nil - } - advance() - let nameStart = index - while hasMoreContent && currentByte != asciiDoubleQuote { - if currentByte == asciiBackslash { - index = stringStart // Reset to open quote - return nil - } - advance() - } - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - let buff = UnsafeRawBufferPointer( - start: source.baseAddress! + nameStart, - count: index - nameStart) - advance() - return buff - } - - /// Parse a field name, look it up in the provided field name map, - /// and return the corresponding field number. - /// - /// Throws if field name cannot be parsed. - /// If it encounters an unknown field name, it throws - /// unless `options.ignoreUnknownFields` is set, in which case - /// it silently skips it. - internal mutating func nextFieldNumber( - names: _NameMap, - messageType: Message.Type - ) throws -> Int? { - while true { - var fieldName: String - if let key = try nextOptionalKey() { - // Fast path: We parsed it as UTF8 bytes... - try skipRequiredCharacter(asciiColon) // : - if let fieldNumber = names.number(forJSONName: key) { - return fieldNumber - } - if let s = utf8ToString(bytes: key.baseAddress!, count: key.count) { - fieldName = s - } else { - throw JSONDecodingError.invalidUTF8 - } - } else { - // Slow path: We parsed a String; lookups from String are slower. - fieldName = try nextQuotedString() - try skipRequiredCharacter(asciiColon) // : - if let fieldNumber = names.number(forJSONName: fieldName) { - return fieldNumber - } - } - if let first = fieldName.utf8.first, first == UInt8(ascii: "["), - let last = fieldName.utf8.last, last == UInt8(ascii: "]") - { - fieldName.removeFirst() - fieldName.removeLast() - if let fieldNumber = extensions.fieldNumberForProto(messageType: messageType, protoFieldName: fieldName) { - return fieldNumber - } - } - if !options.ignoreUnknownFields { - throw JSONDecodingError.unknownField(fieldName) - } - // Unknown field, skip it and try to parse the next field name - try skipValue() - if skipOptionalObjectEnd() { - return nil - } - try skipRequiredComma() - } - } - - /// Parse the next token as a string or numeric enum value. Throws - /// unrecognizedEnumValue if the string/number can't initialize the - /// enum. Will throw other errors if the JSON is malformed. - internal mutating func nextEnumValue() throws -> E { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - if currentByte == asciiDoubleQuote { - if let name = try nextOptionalKey() { - if let e = E(rawUTF8: name) { - return e - } else { - throw JSONDecodingError.unrecognizedEnumValue - } - } - let name = try nextQuotedString() - if let e = E(name: name) { - return e - } else { - throw JSONDecodingError.unrecognizedEnumValue - } - } else { - let n = try nextSInt() - if let i = Int(exactly: n) { - if let e = E(rawValue: i) { - return e - } else { - throw JSONDecodingError.unrecognizedEnumValue - } - } else { - throw JSONDecodingError.numberRange - } - } - } - - /// Helper for skipping a single-character token. - private mutating func skipRequiredCharacter(_ required: UInt8) throws { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - let next = currentByte - if next == required { - advance() - return - } - throw JSONDecodingError.failure - } - - /// Skip "{", throw if that's not the next character - internal mutating func skipRequiredObjectStart() throws { - try skipRequiredCharacter(asciiOpenCurlyBracket) // { - try incrementRecursionDepth() - } - - /// Skip ",", throw if that's not the next character - internal mutating func skipRequiredComma() throws { - try skipRequiredCharacter(asciiComma) - } - - /// Skip ":", throw if that's not the next character - internal mutating func skipRequiredColon() throws { - try skipRequiredCharacter(asciiColon) - } - - /// Skip "[", throw if that's not the next character - internal mutating func skipRequiredArrayStart() throws { - try skipRequiredCharacter(asciiOpenSquareBracket) // [ - } - - /// Helper for skipping optional single-character tokens - private mutating func skipOptionalCharacter(_ c: UInt8) -> Bool { - skipWhitespace() - if hasMoreContent && currentByte == c { - advance() - return true - } - return false - } - - /// If the next non-whitespace character is "]", skip it - /// and return true. Otherwise, return false. - internal mutating func skipOptionalArrayEnd() -> Bool { - return skipOptionalCharacter(asciiCloseSquareBracket) // ] - } - - /// If the next non-whitespace character is "}", skip it - /// and return true. Otherwise, return false. - internal mutating func skipOptionalObjectEnd() -> Bool { - let result = skipOptionalCharacter(asciiCloseCurlyBracket) // } - if result { - decrementRecursionDepth() - } - return result - } - - /// Return the next complete JSON structure as a string. - /// For example, this might return "true", or "123.456", - /// or "{\"foo\": 7, \"bar\": [8, 9]}" - /// - /// Used by Any to get the upcoming JSON value as a string. - /// Note: The value might be an object or array. - internal mutating func skip() throws -> String { - skipWhitespace() - let start = index - try skipValue() - if let s = utf8ToString(bytes: source, start: start, end: index) { - return s - } else { - throw JSONDecodingError.invalidUTF8 - } - } - - /// Advance index past the next value. This is used - /// by skip() and by unknown field handling. - private mutating func skipValue() throws { - skipWhitespace() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - switch currentByte { - case asciiDoubleQuote: // " begins a string - try skipString() - case asciiOpenCurlyBracket: // { begins an object - try skipObject() - case asciiOpenSquareBracket: // [ begins an array - try skipArray() - case asciiLowerN: // n must be null - if !skipOptionalKeyword(bytes: [ - asciiLowerN, asciiLowerU, asciiLowerL, asciiLowerL - ]) { - throw JSONDecodingError.truncated - } - case asciiLowerF: // f must be false - if !skipOptionalKeyword(bytes: [ - asciiLowerF, asciiLowerA, asciiLowerL, asciiLowerS, asciiLowerE - ]) { - throw JSONDecodingError.truncated - } - case asciiLowerT: // t must be true - if !skipOptionalKeyword(bytes: [ - asciiLowerT, asciiLowerR, asciiLowerU, asciiLowerE - ]) { - throw JSONDecodingError.truncated - } - default: // everything else is a number token - _ = try nextDouble() - } - } - - /// Advance the index past the next complete {...} construct. - private mutating func skipObject() throws { - try skipRequiredObjectStart() - if skipOptionalObjectEnd() { - return - } - while true { - skipWhitespace() - try skipString() - try skipRequiredColon() - try skipValue() - if skipOptionalObjectEnd() { - return - } - try skipRequiredComma() - } - } - - /// Advance the index past the next complete [...] construct. - private mutating func skipArray() throws { - try skipRequiredArrayStart() - if skipOptionalArrayEnd() { - return - } - while true { - try skipValue() - if skipOptionalArrayEnd() { - return - } - try skipRequiredComma() - } - } - - /// Advance the index past the next complete quoted string. - /// - // Caveat: This does not fully validate; it will accept - // strings that have malformed \ escapes. - // - // It would be nice to do better, but I don't think it's critical, - // since there are many reasons that strings (and other tokens for - // that matter) may be skippable but not parseable. For example: - // Old clients that don't know new field types will skip fields - // they don't know; newer clients may reject the same input due to - // schema mismatches or other issues. - private mutating func skipString() throws { - if currentByte != asciiDoubleQuote { - throw JSONDecodingError.malformedString - } - advance() - while hasMoreContent { - let c = currentByte - switch c { - case asciiDoubleQuote: - advance() - return - case asciiBackslash: - advance() - guard hasMoreContent else { - throw JSONDecodingError.truncated - } - advance() - default: - advance() - } - } - throw JSONDecodingError.truncated - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/MathUtils.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/MathUtils.swift deleted file mode 100644 index 2e8550b..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/MathUtils.swift +++ /dev/null @@ -1,40 +0,0 @@ -// Sources/SwiftProtobuf/MathUtils.swift - Generally useful mathematical functions -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Generally useful mathematical and arithmetic functions. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Remainder in standard modular arithmetic (modulo). This coincides with (%) -/// when a > 0. -/// -/// - Parameters: -/// - a: The dividend. Can be positive, 0 or negative. -/// - b: The divisor. This must be positive, and is an error if 0 or negative. -/// - Returns: The unique value r such that 0 <= r < b and b * q + r = a for some q. -internal func mod(_ a: T, _ b: T) -> T { - assert(b > 0) - let r = a % b - return r >= 0 ? r : r + b -} - -/// Quotient in standard modular arithmetic (Euclidean division). This coincides -/// with (/) when a > 0. -/// -/// - Parameters: -/// - a: The dividend. Can be positive, 0 or negative. -/// - b: The divisor. This must be positive, and is an error if 0 or negative. -/// - Returns: The unique value q such that for some 0 <= r < b, b * q + r = a. -internal func div(_ a: T, _ b: T) -> T { - assert(b > 0) - return a >= 0 ? a / b : (a + 1) / b - 1 -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+AnyAdditions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+AnyAdditions.swift deleted file mode 100644 index 67d3178..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+AnyAdditions.swift +++ /dev/null @@ -1,45 +0,0 @@ -// Sources/SwiftProtobuf/Message+AnyAdditions.swift - Any-related Message extensions -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extends the `Message` type with `Google_Protobuf_Any`-specific behavior. -/// -// ----------------------------------------------------------------------------- - -extension Message { - /// Initialize this message from the provided `google.protobuf.Any` - /// well-known type. - /// - /// This corresponds to the `unpack` method in the Google C++ API. - /// - /// If the Any object was decoded from Protobuf Binary or JSON - /// format, then the enclosed field data was stored and is not - /// fully decoded until you unpack the Any object into a message. - /// As such, this method will typically need to perform a full - /// deserialization of the enclosed data and can fail for any - /// reason that deserialization can fail. - /// - /// See `Google_Protobuf_Any.unpackTo()` for more discussion. - /// - /// - Parameter unpackingAny: the message to decode. - /// - Parameter extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - Parameter options: The BinaryDecodingOptions to use. - /// - Throws: an instance of `AnyUnpackError`, `JSONDecodingError`, or - /// `BinaryDecodingError` on failure. - public init( - unpackingAny: Google_Protobuf_Any, - extensions: ExtensionMap? = nil, - options: BinaryDecodingOptions = BinaryDecodingOptions() - ) throws { - self.init() - try unpackingAny._storage.unpackTo(target: &self, extensions: extensions, options: options) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+BinaryAdditions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+BinaryAdditions.swift deleted file mode 100644 index 173cff9..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+BinaryAdditions.swift +++ /dev/null @@ -1,204 +0,0 @@ -// Sources/SwiftProtobuf/Message+BinaryAdditions.swift - Per-type binary coding -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extensions to `Message` to provide binary coding and decoding. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Binary encoding and decoding methods for messages. -extension Message { - /// Returns a `Data` value containing the Protocol Buffer binary format - /// serialization of the message. - /// - /// - Parameters: - /// - partial: If `false` (the default), this method will check - /// `Message.isInitialized` before encoding to verify that all required - /// fields are present. If any are missing, this method throws - /// `BinaryEncodingError.missingRequiredFields`. - /// - Returns: A `Data` value containing the binary serialization of the - /// message. - /// - Throws: `BinaryEncodingError` if encoding fails. - public func serializedData(partial: Bool = false) throws -> Data { - if !partial && !isInitialized { - throw BinaryEncodingError.missingRequiredFields - } - let requiredSize = try serializedDataSize() - var data = Data(count: requiredSize) - try data.withUnsafeMutableBytes { (body: UnsafeMutableRawBufferPointer) in - if let baseAddress = body.baseAddress, body.count > 0 { - var visitor = BinaryEncodingVisitor(forWritingInto: baseAddress) - try traverse(visitor: &visitor) - // Currently not exposing this from the api because it really would be - // an internal error in the library and should never happen. - assert(requiredSize == visitor.encoder.distance(pointer: baseAddress)) - } - } - return data - } - - /// Returns the size in bytes required to encode the message in binary format. - /// This is used by `serializedData()` to precalculate the size of the buffer - /// so that encoding can proceed without bounds checks or reallocation. - internal func serializedDataSize() throws -> Int { - // Note: since this api is internal, it doesn't currently worry about - // needing a partial argument to handle proto2 syntax required fields. - // If this become public, it will need that added. - var visitor = BinaryEncodingSizeVisitor() - try traverse(visitor: &visitor) - return visitor.serializedSize - } - - /// Creates a new message by decoding the given `Data` value containing a - /// serialized message in Protocol Buffer binary format. - /// - /// - Parameters: - /// - serializedData: The binary-encoded message data to decode. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - partial: If `false` (the default), this method will check - /// `Message.isInitialized` before encoding to verify that all required - /// fields are present. If any are missing, this method throws - /// `BinaryEncodingError.missingRequiredFields`. - /// - options: The BinaryDecodingOptions to use. - /// - Throws: `BinaryDecodingError` if decoding fails. - @inlinable - public init( - serializedData data: Data, - extensions: ExtensionMap? = nil, - partial: Bool = false, - options: BinaryDecodingOptions = BinaryDecodingOptions() - ) throws { - self.init() -#if swift(>=5.0) - try merge(contiguousBytes: data, extensions: extensions, partial: partial, options: options) -#else - try merge(serializedData: data, extensions: extensions, partial: partial, options: options) -#endif - } - -#if swift(>=5.0) - /// Creates a new message by decoding the given `ContiguousBytes` value - /// containing a serialized message in Protocol Buffer binary format. - /// - /// - Parameters: - /// - contiguousBytes: The binary-encoded message data to decode. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - partial: If `false` (the default), this method will check - /// `Message.isInitialized` before encoding to verify that all required - /// fields are present. If any are missing, this method throws - /// `BinaryEncodingError.missingRequiredFields`. - /// - options: The BinaryDecodingOptions to use. - /// - Throws: `BinaryDecodingError` if decoding fails. - @inlinable - public init( - contiguousBytes bytes: Bytes, - extensions: ExtensionMap? = nil, - partial: Bool = false, - options: BinaryDecodingOptions = BinaryDecodingOptions() - ) throws { - self.init() - try merge(contiguousBytes: bytes, extensions: extensions, partial: partial, options: options) - } -#endif // #if swift(>=5.0) - - /// Updates the message by decoding the given `Data` value containing a - /// serialized message in Protocol Buffer binary format into the receiver. - /// - /// - Note: If this method throws an error, the message may still have been - /// partially mutated by the binary data that was decoded before the error - /// occurred. - /// - /// - Parameters: - /// - serializedData: The binary-encoded message data to decode. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - partial: If `false` (the default), this method will check - /// `Message.isInitialized` before encoding to verify that all required - /// fields are present. If any are missing, this method throws - /// `BinaryEncodingError.missingRequiredFields`. - /// - options: The BinaryDecodingOptions to use. - /// - Throws: `BinaryDecodingError` if decoding fails. - @inlinable - public mutating func merge( - serializedData data: Data, - extensions: ExtensionMap? = nil, - partial: Bool = false, - options: BinaryDecodingOptions = BinaryDecodingOptions() - ) throws { -#if swift(>=5.0) - try merge(contiguousBytes: data, extensions: extensions, partial: partial, options: options) -#else - try data.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - try _merge(rawBuffer: body, extensions: extensions, partial: partial, options: options) - } -#endif // swift(>=5.0) - } - -#if swift(>=5.0) - /// Updates the message by decoding the given `ContiguousBytes` value - /// containing a serialized message in Protocol Buffer binary format into the - /// receiver. - /// - /// - Note: If this method throws an error, the message may still have been - /// partially mutated by the binary data that was decoded before the error - /// occurred. - /// - /// - Parameters: - /// - contiguousBytes: The binary-encoded message data to decode. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - partial: If `false` (the default), this method will check - /// `Message.isInitialized` before encoding to verify that all required - /// fields are present. If any are missing, this method throws - /// `BinaryEncodingError.missingRequiredFields`. - /// - options: The BinaryDecodingOptions to use. - /// - Throws: `BinaryDecodingError` if decoding fails. - @inlinable - public mutating func merge( - contiguousBytes bytes: Bytes, - extensions: ExtensionMap? = nil, - partial: Bool = false, - options: BinaryDecodingOptions = BinaryDecodingOptions() - ) throws { - try bytes.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - try _merge(rawBuffer: body, extensions: extensions, partial: partial, options: options) - } - } -#endif // swift(>=5.0) - - // Helper for `merge()`s to keep the Decoder internal to SwiftProtobuf while - // allowing the generic over ContiguousBytes to get better codegen from the - // compiler by being `@inlinable`. - @usableFromInline - internal mutating func _merge( - rawBuffer body: UnsafeRawBufferPointer, - extensions: ExtensionMap?, - partial: Bool, - options: BinaryDecodingOptions - ) throws { - if let baseAddress = body.baseAddress, body.count > 0 { - var decoder = BinaryDecoder(forReadingFrom: baseAddress, - count: body.count, - options: options, - extensions: extensions) - try decoder.decodeFullMessage(message: &self) - } - if !partial && !isInitialized { - throw BinaryDecodingError.missingRequiredFields - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+JSONAdditions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+JSONAdditions.swift deleted file mode 100644 index 56236db..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+JSONAdditions.swift +++ /dev/null @@ -1,150 +0,0 @@ -// Sources/SwiftProtobuf/Message+JSONAdditions.swift - JSON format primitive types -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extensions to `Message` to support JSON encoding/decoding. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// JSON encoding and decoding methods for messages. -extension Message { - /// Returns a string containing the JSON serialization of the message. - /// - /// Unlike binary encoding, presence of required fields is not enforced when - /// serializing to JSON. - /// - /// - Returns: A string containing the JSON serialization of the message. - /// - Parameters: - /// - options: The JSONEncodingOptions to use. - /// - Throws: `JSONEncodingError` if encoding fails. - public func jsonString( - options: JSONEncodingOptions = JSONEncodingOptions() - ) throws -> String { - if let m = self as? _CustomJSONCodable { - return try m.encodedJSONString(options: options) - } - let data = try jsonUTF8Data(options: options) - return String(data: data, encoding: String.Encoding.utf8)! - } - - /// Returns a Data containing the UTF-8 JSON serialization of the message. - /// - /// Unlike binary encoding, presence of required fields is not enforced when - /// serializing to JSON. - /// - /// - Returns: A Data containing the JSON serialization of the message. - /// - Parameters: - /// - options: The JSONEncodingOptions to use. - /// - Throws: `JSONEncodingError` if encoding fails. - public func jsonUTF8Data( - options: JSONEncodingOptions = JSONEncodingOptions() - ) throws -> Data { - if let m = self as? _CustomJSONCodable { - let string = try m.encodedJSONString(options: options) - let data = string.data(using: String.Encoding.utf8)! // Cannot fail! - return data - } - var visitor = try JSONEncodingVisitor(type: Self.self, options: options) - visitor.startObject(message: self) - try traverse(visitor: &visitor) - visitor.endObject() - return visitor.dataResult - } - - /// Creates a new message by decoding the given string containing a - /// serialized message in JSON format. - /// - /// - Parameter jsonString: The JSON-formatted string to decode. - /// - Parameter options: The JSONDecodingOptions to use. - /// - Throws: `JSONDecodingError` if decoding fails. - public init( - jsonString: String, - options: JSONDecodingOptions = JSONDecodingOptions() - ) throws { - try self.init(jsonString: jsonString, extensions: nil, options: options) - } - - /// Creates a new message by decoding the given string containing a - /// serialized message in JSON format. - /// - /// - Parameter jsonString: The JSON-formatted string to decode. - /// - Parameter extensions: An ExtensionMap for looking up extensions by name - /// - Parameter options: The JSONDecodingOptions to use. - /// - Throws: `JSONDecodingError` if decoding fails. - public init( - jsonString: String, - extensions: ExtensionMap? = nil, - options: JSONDecodingOptions = JSONDecodingOptions() - ) throws { - if jsonString.isEmpty { - throw JSONDecodingError.truncated - } - if let data = jsonString.data(using: String.Encoding.utf8) { - try self.init(jsonUTF8Data: data, extensions: extensions, options: options) - } else { - throw JSONDecodingError.truncated - } - } - - /// Creates a new message by decoding the given `Data` containing a - /// serialized message in JSON format, interpreting the data as UTF-8 encoded - /// text. - /// - /// - Parameter jsonUTF8Data: The JSON-formatted data to decode, represented - /// as UTF-8 encoded text. - /// - Parameter options: The JSONDecodingOptions to use. - /// - Throws: `JSONDecodingError` if decoding fails. - public init( - jsonUTF8Data: Data, - options: JSONDecodingOptions = JSONDecodingOptions() - ) throws { - try self.init(jsonUTF8Data: jsonUTF8Data, extensions: nil, options: options) - } - - /// Creates a new message by decoding the given `Data` containing a - /// serialized message in JSON format, interpreting the data as UTF-8 encoded - /// text. - /// - /// - Parameter jsonUTF8Data: The JSON-formatted data to decode, represented - /// as UTF-8 encoded text. - /// - Parameter extensions: The extension map to use with this decode - /// - Parameter options: The JSONDecodingOptions to use. - /// - Throws: `JSONDecodingError` if decoding fails. - public init( - jsonUTF8Data: Data, - extensions: ExtensionMap? = nil, - options: JSONDecodingOptions = JSONDecodingOptions() - ) throws { - self.init() - try jsonUTF8Data.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - // Empty input is valid for binary, but not for JSON. - guard body.count > 0 else { - throw JSONDecodingError.truncated - } - var decoder = JSONDecoder(source: body, options: options, - messageType: Self.self, extensions: extensions) - if decoder.scanner.skipOptionalNull() { - if let customCodable = Self.self as? _CustomJSONCodable.Type, - let message = try customCodable.decodedFromJSONNull() { - self = message as! Self - } else { - throw JSONDecodingError.illegalNull - } - } else { - try decoder.decodeFullObject(message: &self) - } - if !decoder.scanner.complete { - throw JSONDecodingError.trailingGarbage - } - } - } -} - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+JSONArrayAdditions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+JSONArrayAdditions.swift deleted file mode 100644 index 4579bf4..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+JSONArrayAdditions.swift +++ /dev/null @@ -1,146 +0,0 @@ -// Sources/SwiftProtobuf/Array+JSONAdditions.swift - JSON format primitive types -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extensions to `Array` to support JSON encoding/decoding. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// JSON encoding and decoding methods for arrays of messages. -extension Message { - /// Returns a string containing the JSON serialization of the messages. - /// - /// Unlike binary encoding, presence of required fields is not enforced when - /// serializing to JSON. - /// - /// - Returns: A string containing the JSON serialization of the messages. - /// - Parameters: - /// - collection: The list of messages to encode. - /// - options: The JSONEncodingOptions to use. - /// - Throws: `JSONEncodingError` if encoding fails. - public static func jsonString( - from collection: C, - options: JSONEncodingOptions = JSONEncodingOptions() - ) throws -> String where C.Iterator.Element == Self { - let data = try jsonUTF8Data(from: collection, options: options) - return String(data: data, encoding: String.Encoding.utf8)! - } - - /// Returns a Data containing the UTF-8 JSON serialization of the messages. - /// - /// Unlike binary encoding, presence of required fields is not enforced when - /// serializing to JSON. - /// - /// - Returns: A Data containing the JSON serialization of the messages. - /// - Parameters: - /// - collection: The list of messages to encode. - /// - options: The JSONEncodingOptions to use. - /// - Throws: `JSONEncodingError` if encoding fails. - public static func jsonUTF8Data( - from collection: C, - options: JSONEncodingOptions = JSONEncodingOptions() - ) throws -> Data where C.Iterator.Element == Self { - var visitor = try JSONEncodingVisitor(type: Self.self, options: options) - visitor.startArray() - for message in collection { - visitor.startArrayObject(message: message) - try message.traverse(visitor: &visitor) - visitor.endObject() - } - visitor.endArray() - return visitor.dataResult - } - - /// Creates a new array of messages by decoding the given string containing a - /// serialized array of messages in JSON format. - /// - /// - Parameter jsonString: The JSON-formatted string to decode. - /// - Parameter options: The JSONDecodingOptions to use. - /// - Throws: `JSONDecodingError` if decoding fails. - public static func array( - fromJSONString jsonString: String, - options: JSONDecodingOptions = JSONDecodingOptions() - ) throws -> [Self] { - return try self.array(fromJSONString: jsonString, - extensions: SimpleExtensionMap(), - options: options) - } - - /// Creates a new array of messages by decoding the given string containing a - /// serialized array of messages in JSON format. - /// - /// - Parameter jsonString: The JSON-formatted string to decode. - /// - Parameter extensions: The extension map to use with this decode - /// - Parameter options: The JSONDecodingOptions to use. - /// - Throws: `JSONDecodingError` if decoding fails. - public static func array( - fromJSONString jsonString: String, - extensions: ExtensionMap = SimpleExtensionMap(), - options: JSONDecodingOptions = JSONDecodingOptions() - ) throws -> [Self] { - if jsonString.isEmpty { - throw JSONDecodingError.truncated - } - if let data = jsonString.data(using: String.Encoding.utf8) { - return try array(fromJSONUTF8Data: data, extensions: extensions, options: options) - } else { - throw JSONDecodingError.truncated - } - } - - /// Creates a new array of messages by decoding the given `Data` containing a - /// serialized array of messages in JSON format, interpreting the data as - /// UTF-8 encoded text. - /// - /// - Parameter jsonUTF8Data: The JSON-formatted data to decode, represented - /// as UTF-8 encoded text. - /// - Parameter options: The JSONDecodingOptions to use. - /// - Throws: `JSONDecodingError` if decoding fails. - public static func array( - fromJSONUTF8Data jsonUTF8Data: Data, - options: JSONDecodingOptions = JSONDecodingOptions() - ) throws -> [Self] { - return try self.array(fromJSONUTF8Data: jsonUTF8Data, - extensions: SimpleExtensionMap(), - options: options) - } - - /// Creates a new array of messages by decoding the given `Data` containing a - /// serialized array of messages in JSON format, interpreting the data as - /// UTF-8 encoded text. - /// - /// - Parameter jsonUTF8Data: The JSON-formatted data to decode, represented - /// as UTF-8 encoded text. - /// - Parameter extensions: The extension map to use with this decode - /// - Parameter options: The JSONDecodingOptions to use. - /// - Throws: `JSONDecodingError` if decoding fails. - public static func array( - fromJSONUTF8Data jsonUTF8Data: Data, - extensions: ExtensionMap = SimpleExtensionMap(), - options: JSONDecodingOptions = JSONDecodingOptions() - ) throws -> [Self] { - return try jsonUTF8Data.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - var array = [Self]() - - if body.count > 0 { - var decoder = JSONDecoder(source: body, options: options, - messageType: Self.self, extensions: extensions) - try decoder.decodeRepeatedMessageField(value: &array) - if !decoder.scanner.complete { - throw JSONDecodingError.trailingGarbage - } - } - - return array - } - } - -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+TextFormatAdditions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+TextFormatAdditions.swift deleted file mode 100644 index 7a9dc53..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message+TextFormatAdditions.swift +++ /dev/null @@ -1,111 +0,0 @@ -// Sources/SwiftProtobuf/Message+TextFormatAdditions.swift - Text format primitive types -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Extensions to `Message` to support text format encoding/decoding. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Text format encoding and decoding methods for messages. -extension Message { - /// Returns a string containing the Protocol Buffer text format serialization - /// of the message. - /// - /// Unlike binary encoding, presence of required fields is not enforced when - /// serializing to text format. - /// - /// - Returns: A string containing the text format serialization of the - /// message. - public func textFormatString() -> String { - // This is implemented as a separate zero-argument function - // to preserve binary compatibility. - return textFormatString(options: TextFormatEncodingOptions()) - } - - /// Returns a string containing the Protocol Buffer text format serialization - /// of the message. - /// - /// Unlike binary encoding, presence of required fields is not enforced when - /// serializing to JSON. - /// - /// - Returns: A string containing the text format serialization of the message. - /// - Parameters: - /// - options: The TextFormatEncodingOptions to use. - public func textFormatString( - options: TextFormatEncodingOptions - ) -> String { - var visitor = TextFormatEncodingVisitor(message: self, options: options) - if let any = self as? Google_Protobuf_Any { - any._storage.textTraverse(visitor: &visitor) - } else { - // Although the general traversal/encoding infrastructure supports - // throwing errors (needed for JSON/Binary WKTs support, binary format - // missing required fields); TextEncoding never actually does throw. - try! traverse(visitor: &visitor) - } - return visitor.result - } - - /// Creates a new message by decoding the given string containing a - /// serialized message in Protocol Buffer text format. - /// - /// - Parameters: - /// - textFormatString: The text format string to decode. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - Throws: an instance of `TextFormatDecodingError` on failure. - public init( - textFormatString: String, - extensions: ExtensionMap? = nil - ) throws { - // TODO: Remove this api and default the options instead. This api has to - // exist for anything compiled against an older version of the library. - try self.init(textFormatString: textFormatString, - options: TextFormatDecodingOptions(), - extensions: extensions) - } - - /// Creates a new message by decoding the given string containing a - /// serialized message in Protocol Buffer text format. - /// - /// - Parameters: - /// - textFormatString: The text format string to decode. - /// - options: The `TextFormatDencodingOptions` to use. - /// - extensions: An `ExtensionMap` used to look up and decode any - /// extensions in this message or messages nested within this message's - /// fields. - /// - Throws: an instance of `TextFormatDecodingError` on failure. - public init( - textFormatString: String, - options: TextFormatDecodingOptions, - extensions: ExtensionMap? = nil - ) throws { - self.init() - if !textFormatString.isEmpty { - if let data = textFormatString.data(using: String.Encoding.utf8) { - try data.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - if let baseAddress = body.baseAddress, body.count > 0 { - var decoder = try TextFormatDecoder(messageType: Self.self, - utf8Pointer: baseAddress, - count: body.count, - options: options, - extensions: extensions) - try decodeMessage(decoder: &decoder) - if !decoder.complete { - throw TextFormatDecodingError.trailingGarbage - } - } - } - } - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message.swift deleted file mode 100644 index e92e750..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Message.swift +++ /dev/null @@ -1,216 +0,0 @@ -// Sources/SwiftProtobuf/Message.swift - Message support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// - -/// The protocol which all generated protobuf messages implement. -/// `Message` is the protocol type you should use whenever -/// you need an argument or variable which holds "some message". -/// -/// Generated messages also implement `Hashable`, and thus `Equatable`. -/// However, the protocol conformance is declared on a different protocol. -/// This allows you to use `Message` as a type directly: -/// -/// func consume(message: Message) { ... } -/// -/// Instead of needing to use it as a type constraint on a generic declaration: -/// -/// func consume(message: M) { ... } -/// -/// If you need to convince the compiler that your message is `Hashable` so -/// you can insert it into a `Set` or use it as a `Dictionary` key, use -/// a generic declaration with a type constraint: -/// -/// func insertIntoSet(message: M) { -/// mySet.insert(message) -/// } -/// -/// The actual functionality is implemented either in the generated code or in -/// default implementations of the below methods and properties. -public protocol Message: CustomDebugStringConvertible { - /// Creates a new message with all of its fields initialized to their default - /// values. - init() - - // Metadata - // Basic facts about this class and the proto message it was generated from - // Used by various encoders and decoders - - /// The fully-scoped name of the message from the original .proto file, - /// including any relevant package name. - static var protoMessageName: String { get } - - /// True if all required fields (if any) on this message and any nested - /// messages (recursively) have values set; otherwise, false. - var isInitialized: Bool { get } - - /// Some formats include enough information to transport fields that were - /// not known at generation time. When encountered, they are stored here. - var unknownFields: UnknownStorage { get set } - - // - // General serialization/deserialization machinery - // - - /// Decode all of the fields from the given decoder. - /// - /// This is a simple loop that repeatedly gets the next field number - /// from `decoder.nextFieldNumber()` and then uses the number returned - /// and the type information from the original .proto file to decide - /// what type of data should be decoded for that field. The corresponding - /// method on the decoder is then called to get the field value. - /// - /// This is the core method used by the deserialization machinery. It is - /// `public` to enable users to implement their own encoding formats by - /// conforming to `Decoder`; it should not be called otherwise. - /// - /// Note that this is not specific to binary encodng; formats that use - /// textual identifiers translate those to field numbers and also go - /// through this to decode messages. - /// - /// - Parameters: - /// - decoder: a `Decoder`; the `Message` will call the method - /// corresponding to the type of this field. - /// - Throws: an error on failure or type mismatch. The type of error - /// thrown depends on which decoder is used. - mutating func decodeMessage(decoder: inout D) throws - - /// Traverses the fields of the message, calling the appropriate methods - /// of the passed `Visitor` object. - /// - /// This is used internally by: - /// - /// * Protobuf binary serialization - /// * JSON serialization (with some twists to account for specialty JSON) - /// * Protobuf Text serialization - /// * `Hashable` computation - /// - /// Conceptually, serializers create visitor objects that are - /// then passed recursively to every message and field via generated - /// `traverse` methods. The details get a little involved due to - /// the need to allow particular messages to override particular - /// behaviors for specific encodings, but the general idea is quite simple. - func traverse(visitor: inout V) throws - - // Standard utility properties and methods. - // Most of these are simple wrappers on top of the visitor machinery. - // They are implemented in the protocol, not in the generated structs, - // so can be overridden in user code by defining custom extensions to - // the generated struct. - -#if swift(>=4.2) - /// An implementation of hash(into:) to provide conformance with the - /// `Hashable` protocol. - func hash(into hasher: inout Hasher) -#else // swift(>=4.2) - /// The hash value generated from this message's contents, for conformance - /// with the `Hashable` protocol. - var hashValue: Int { get } -#endif // swift(>=4.2) - - /// Helper to compare `Message`s when not having a specific type to use - /// normal `Equatable`. `Equatable` is provided with specific generated - /// types. - func isEqualTo(message: Message) -> Bool -} - -extension Message { - /// Generated proto2 messages that contain required fields, nested messages - /// that contain required fields, and/or extensions will provide their own - /// implementation of this property that tests that all required fields are - /// set. Users of the generated code SHOULD NOT override this property. - public var isInitialized: Bool { - // The generated code will include a specialization as needed. - return true - } - - /// A hash based on the message's full contents. -#if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - var visitor = HashVisitor(hasher) - try? traverse(visitor: &visitor) - hasher = visitor.hasher - } -#else // swift(>=4.2) - public var hashValue: Int { - var visitor = HashVisitor() - try? traverse(visitor: &visitor) - return visitor.hashValue - } -#endif // swift(>=4.2) - - /// A description generated by recursively visiting all fields in the message, - /// including messages. - public var debugDescription: String { - // TODO Ideally there would be something like serializeText() that can - // take a prefix so we could do something like: - // [class name]( - // [text format] - // ) - let className = String(reflecting: type(of: self)) - let header = "\(className):\n" - return header + textFormatString() - } - - /// Creates an instance of the message type on which this method is called, - /// executes the given block passing the message in as its sole `inout` - /// argument, and then returns the message. - /// - /// This method acts essentially as a "builder" in that the initialization of - /// the message is captured within the block, allowing the returned value to - /// be set in an immutable variable. For example, - /// - /// let msg = MyMessage.with { $0.myField = "foo" } - /// msg.myOtherField = 5 // error: msg is immutable - /// - /// - Parameter populator: A block or function that populates the new message, - /// which is passed into the block as an `inout` argument. - /// - Returns: The message after execution of the block. - public static func with( - _ populator: (inout Self) throws -> () - ) rethrows -> Self { - var message = Self() - try populator(&message) - return message - } -} - -/// Implementation base for all messages; not intended for client use. -/// -/// In general, use `SwiftProtobuf.Message` instead when you need a variable or -/// argument that can hold any type of message. Occasionally, you can use -/// `SwiftProtobuf.Message & Equatable` or `SwiftProtobuf.Message & Hashable` as -/// generic constraints if you need to write generic code that can be applied to -/// multiple message types that uses equality tests, puts messages in a `Set`, -/// or uses them as `Dictionary` keys. -public protocol _MessageImplementationBase: Message, Hashable { - - // Legacy function; no longer used, but left to maintain source compatibility. - func _protobuf_generated_isEqualTo(other: Self) -> Bool -} - -extension _MessageImplementationBase { - public func isEqualTo(message: Message) -> Bool { - guard let other = message as? Self else { - return false - } - return self == other - } - - // Legacy default implementation that is used by old generated code, current - // versions of the plugin/generator provide this directly, but this is here - // just to avoid breaking source compatibility. - public static func ==(lhs: Self, rhs: Self) -> Bool { - return lhs._protobuf_generated_isEqualTo(other: rhs) - } - - // Legacy function that is generated by old versions of the plugin/generator, - // defaulted to keep things simple without changing the api surface. - public func _protobuf_generated_isEqualTo(other: Self) -> Bool { - return self == other - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/MessageExtension.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/MessageExtension.swift deleted file mode 100644 index bfbf40c..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/MessageExtension.swift +++ /dev/null @@ -1,41 +0,0 @@ -// Sources/SwiftProtobuf/MessageExtension.swift - Extension support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// A 'Message Extension' is an immutable class object that describes -/// a particular extension field, including string and number -/// identifiers, serialization details, and the identity of the -/// message that is being extended. -/// -// ----------------------------------------------------------------------------- - -/// Type-erased MessageExtension field implementation. -public protocol AnyMessageExtension { - var fieldNumber: Int { get } - var fieldName: String { get } - var messageType: Message.Type { get } - func _protobuf_newField(decoder: inout D) throws -> AnyExtensionField? -} - -/// A "Message Extension" relates a particular extension field to -/// a particular message. The generic constraints allow -/// compile-time compatibility checks. -public class MessageExtension: AnyMessageExtension { - public let fieldNumber: Int - public let fieldName: String - public let messageType: Message.Type - public init(_protobuf_fieldNumber: Int, fieldName: String) { - self.fieldNumber = _protobuf_fieldNumber - self.fieldName = fieldName - self.messageType = MessageType.self - } - public func _protobuf_newField(decoder: inout D) throws -> AnyExtensionField? { - return try FieldType(protobufExtension: self, decoder: &decoder) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/NameMap.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/NameMap.swift deleted file mode 100644 index f2822e8..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/NameMap.swift +++ /dev/null @@ -1,310 +0,0 @@ -// Sources/SwiftProtobuf/NameMap.swift - Bidirectional number/name mapping -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- - -/// TODO: Right now, only the NameMap and the NameDescription enum -/// (which are directly used by the generated code) are public. -/// This means that code outside the library has no way to actually -/// use this data. We should develop and publicize a suitable API -/// for that purpose. (Which might be the same as the internal API.) - -/// This must be exactly the same as the corresponding code in the -/// protoc-gen-swift code generator. Changing it will break -/// compatibility of the library with older generated code. -/// -/// It does not necessarily need to match protoc's JSON field naming -/// logic, however. -private func toJsonFieldName(_ s: String) -> String { - var result = String() - var capitalizeNext = false - for c in s { - if c == "_" { - capitalizeNext = true - } else if capitalizeNext { - result.append(String(c).uppercased()) - capitalizeNext = false - } else { - result.append(String(c)) - } - } - return result -} - -/// Allocate static memory buffers to intern UTF-8 -/// string data. Track the buffers and release all of those buffers -/// in case we ever get deallocated. -fileprivate class InternPool { - private var interned = [UnsafeRawBufferPointer]() - - func intern(utf8: String.UTF8View) -> UnsafeRawBufferPointer { - #if swift(>=4.1) - let mutable = UnsafeMutableRawBufferPointer.allocate(byteCount: utf8.count, - alignment: MemoryLayout.alignment) - #else - let mutable = UnsafeMutableRawBufferPointer.allocate(count: utf8.count) - #endif - mutable.copyBytes(from: utf8) - let immutable = UnsafeRawBufferPointer(mutable) - interned.append(immutable) - return immutable - } - - func intern(utf8Ptr: UnsafeBufferPointer) -> UnsafeRawBufferPointer { - #if swift(>=4.1) - let mutable = UnsafeMutableRawBufferPointer.allocate(byteCount: utf8Ptr.count, - alignment: MemoryLayout.alignment) - #else - let mutable = UnsafeMutableRawBufferPointer.allocate(count: utf8.count) - #endif - mutable.copyBytes(from: utf8Ptr) - let immutable = UnsafeRawBufferPointer(mutable) - interned.append(immutable) - return immutable - } - - deinit { - for buff in interned { - #if swift(>=4.1) - buff.deallocate() - #else - let p = UnsafeMutableRawPointer(mutating: buff.baseAddress)! - p.deallocate(bytes: buff.count, alignedTo: 1) - #endif - } - } -} - -#if !swift(>=4.2) -// Constants for FNV hash http://tools.ietf.org/html/draft-eastlake-fnv-03 -private let i_2166136261 = Int(bitPattern: 2166136261) -private let i_16777619 = Int(16777619) -#endif - -/// An immutable bidirectional mapping between field/enum-case names -/// and numbers, used to record field names for text-based -/// serialization (JSON and text). These maps are lazily instantiated -/// for each message as needed, so there is no run-time overhead for -/// users who do not use text-based serialization formats. -public struct _NameMap: ExpressibleByDictionaryLiteral { - - /// An immutable interned string container. The `utf8Start` pointer - /// is guaranteed valid for the lifetime of the `NameMap` that you - /// fetched it from. Since `NameMap`s are only instantiated as - /// immutable static values, that should be the lifetime of the - /// program. - /// - /// Internally, this uses `StaticString` (which refers to a fixed - /// block of UTF-8 data) where possible. In cases where the string - /// has to be computed, it caches the UTF-8 bytes in an - /// unmovable and immutable heap area. - internal struct Name: Hashable, CustomStringConvertible { - // This should not be used outside of this file, as it requires - // coordinating the lifecycle with the lifecycle of the pool - // where the raw UTF8 gets interned. - fileprivate init(staticString: StaticString, pool: InternPool) { - self.nameString = .staticString(staticString) - if staticString.hasPointerRepresentation { - self.utf8Buffer = UnsafeRawBufferPointer(start: staticString.utf8Start, - count: staticString.utf8CodeUnitCount) - } else { - self.utf8Buffer = staticString.withUTF8Buffer { pool.intern(utf8Ptr: $0) } - } - } - - // This should not be used outside of this file, as it requires - // coordinating the lifecycle with the lifecycle of the pool - // where the raw UTF8 gets interned. - fileprivate init(string: String, pool: InternPool) { - let utf8 = string.utf8 - self.utf8Buffer = pool.intern(utf8: utf8) - self.nameString = .string(string) - } - - // This is for building a transient `Name` object sufficient for lookup purposes. - // It MUST NOT be exposed outside of this file. - fileprivate init(transientUtf8Buffer: UnsafeRawBufferPointer) { - self.nameString = .staticString("") - self.utf8Buffer = transientUtf8Buffer - } - - private(set) var utf8Buffer: UnsafeRawBufferPointer - - private enum NameString { - case string(String) - case staticString(StaticString) - } - private var nameString: NameString - - public var description: String { - switch nameString { - case .string(let s): return s - case .staticString(let s): return s.description - } - } - - #if swift(>=4.2) - public func hash(into hasher: inout Hasher) { - for byte in utf8Buffer { - hasher.combine(byte) - } - } - #else // swift(>=4.2) - public var hashValue: Int { - var h = i_2166136261 - for byte in utf8Buffer { - h = (h ^ Int(byte)) &* i_16777619 - } - return h - } - #endif // swift(>=4.2) - - public static func ==(lhs: Name, rhs: Name) -> Bool { - if lhs.utf8Buffer.count != rhs.utf8Buffer.count { - return false - } - return lhs.utf8Buffer.elementsEqual(rhs.utf8Buffer) - } - } - - /// The JSON and proto names for a particular field, enum case, or extension. - internal struct Names { - private(set) var json: Name? - private(set) var proto: Name - } - - /// A description of the names for a particular field or enum case. - /// The different forms here let us minimize the amount of string - /// data that we store in the binary. - /// - /// These are only used in the generated code to initialize a NameMap. - public enum NameDescription { - - /// The proto (text format) name and the JSON name are the same string. - case same(proto: StaticString) - - /// The JSON name can be computed from the proto string - case standard(proto: StaticString) - - /// The JSON and text format names are just different. - case unique(proto: StaticString, json: StaticString) - - /// Used for enum cases only to represent a value's primary proto name (the - /// first defined case) and its aliases. The JSON and text format names for - /// enums are always the same. - case aliased(proto: StaticString, aliases: [StaticString]) - } - - private var internPool = InternPool() - - /// The mapping from field/enum-case numbers to names. - private var numberToNameMap: [Int: Names] = [:] - - /// The mapping from proto/text names to field/enum-case numbers. - private var protoToNumberMap: [Name: Int] = [:] - - /// The mapping from JSON names to field/enum-case numbers. - /// Note that this also contains all of the proto/text names, - /// as required by Google's spec for protobuf JSON. - private var jsonToNumberMap: [Name: Int] = [:] - - /// Creates a new empty field/enum-case name/number mapping. - public init() {} - - /// Build the bidirectional maps between numbers and proto/JSON names. - public init(dictionaryLiteral elements: (Int, NameDescription)...) { - for (number, description) in elements { - switch description { - - case .same(proto: let p): - let protoName = Name(staticString: p, pool: internPool) - let names = Names(json: protoName, proto: protoName) - numberToNameMap[number] = names - protoToNumberMap[protoName] = number - jsonToNumberMap[protoName] = number - - case .standard(proto: let p): - let protoName = Name(staticString: p, pool: internPool) - let jsonString = toJsonFieldName(protoName.description) - let jsonName = Name(string: jsonString, pool: internPool) - let names = Names(json: jsonName, proto: protoName) - numberToNameMap[number] = names - protoToNumberMap[protoName] = number - jsonToNumberMap[protoName] = number - jsonToNumberMap[jsonName] = number - - case .unique(proto: let p, json: let j): - let jsonName = Name(staticString: j, pool: internPool) - let protoName = Name(staticString: p, pool: internPool) - let names = Names(json: jsonName, proto: protoName) - numberToNameMap[number] = names - protoToNumberMap[protoName] = number - jsonToNumberMap[protoName] = number - jsonToNumberMap[jsonName] = number - - case .aliased(proto: let p, aliases: let aliases): - let protoName = Name(staticString: p, pool: internPool) - let names = Names(json: protoName, proto: protoName) - numberToNameMap[number] = names - protoToNumberMap[protoName] = number - jsonToNumberMap[protoName] = number - for alias in aliases { - let protoName = Name(staticString: alias, pool: internPool) - protoToNumberMap[protoName] = number - jsonToNumberMap[protoName] = number - } - } - } - } - - /// Returns the name bundle for the field/enum-case with the given number, or - /// `nil` if there is no match. - internal func names(for number: Int) -> Names? { - return numberToNameMap[number] - } - - /// Returns the field/enum-case number that has the given JSON name, - /// or `nil` if there is no match. - /// - /// This is used by the Text format parser to look up field or enum - /// names using a direct reference to the un-decoded UTF8 bytes. - internal func number(forProtoName raw: UnsafeRawBufferPointer) -> Int? { - let n = Name(transientUtf8Buffer: raw) - return protoToNumberMap[n] - } - - /// Returns the field/enum-case number that has the given JSON name, - /// or `nil` if there is no match. - /// - /// This accepts a regular `String` and is used in JSON parsing - /// only when a field name or enum name was decoded from a string - /// containing backslash escapes. - /// - /// JSON parsing must interpret *both* the JSON name of the - /// field/enum-case provided by the descriptor *as well as* its - /// original proto/text name. - internal func number(forJSONName name: String) -> Int? { - let utf8 = Array(name.utf8) - return utf8.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in - let n = Name(transientUtf8Buffer: buffer) - return jsonToNumberMap[n] - } - } - - /// Returns the field/enum-case number that has the given JSON name, - /// or `nil` if there is no match. - /// - /// This is used by the JSON parser when a field name or enum name - /// required no special processing. As a result, we can avoid - /// copying the name and look up the number using a direct reference - /// to the un-decoded UTF8 bytes. - internal func number(forJSONName raw: UnsafeRawBufferPointer) -> Int? { - let n = Name(transientUtf8Buffer: raw) - return jsonToNumberMap[n] - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtoNameProviding.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtoNameProviding.swift deleted file mode 100644 index 8b5a81c..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtoNameProviding.swift +++ /dev/null @@ -1,23 +0,0 @@ -// Sources/SwiftProtobuf/ProtoNameProviding.swift - Support for accessing proto names -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- - - -/// SwiftProtobuf Internal: Common support looking up field names. -/// -/// Messages conform to this protocol to provide the proto/text and JSON field -/// names for their fields. This allows these names to be pulled out into -/// extensions in separate files so that users can omit them in release builds -/// (reducing bloat and minimizing leaks of field names). -public protocol _ProtoNameProviding { - - /// The mapping between field numbers and proto/JSON field names defined in - /// the conforming message type. - static var _protobuf_nameMap: _NameMap { get } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtobufAPIVersionCheck.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtobufAPIVersionCheck.swift deleted file mode 100644 index 480305e..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtobufAPIVersionCheck.swift +++ /dev/null @@ -1,43 +0,0 @@ -// Sources/SwiftProtobuf/ProtobufAPIVersionCheck.swift - Version checking -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// A scheme that ensures that generated protos cannot be compiled or linked -/// against a version of the runtime with which they are not compatible. -/// -/// In many cases, API changes themselves might introduce incompatibilities -/// between generated code and the runtime library, but we also want to protect -/// against cases where breaking behavioral changes (without affecting the API) -/// would cause generated code to be incompatible with a particular version of -/// the runtime. -/// -// ----------------------------------------------------------------------------- - - -/// An empty protocol that encodes the version of the runtime library. -/// -/// This protocol will be replaced with one containing a different version -/// number any time that breaking changes are made to the Swift Protobuf API. -/// Combined with the protocol below, this lets us verify that generated code is -/// never compiled against a version of the API with which it is incompatible. -/// -/// The version associated with a particular build of the compiler is defined as -/// `Version.compatibilityVersion` in `protoc-gen-swift`. That version and this -/// version must match for the generated protos to be compatible, so if you -/// update one, make sure to update it here and in the associated type below. -public protocol ProtobufAPIVersion_2 {} - -/// This protocol is expected to be implemented by a `fileprivate` type in each -/// source file emitted by `protoc-gen-swift`. It effectively creates a binding -/// between the version of the generated code and the version of this library, -/// causing a compile-time error (with reasonable diagnostics) if they are -/// incompatible. -public protocol ProtobufAPIVersionCheck { - associatedtype Version: ProtobufAPIVersion_2 -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtobufMap.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtobufMap.swift deleted file mode 100644 index a9c4d80..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ProtobufMap.swift +++ /dev/null @@ -1,39 +0,0 @@ -// Sources/SwiftProtobuf/ProtobufMap.swift - Map<> support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Generic type representing proto map<> fields. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// SwiftProtobuf Internal: Support for Encoding/Decoding. -public struct _ProtobufMap -{ - public typealias Key = KeyType.BaseType - public typealias Value = ValueType.BaseType - public typealias BaseType = Dictionary -} - -/// SwiftProtobuf Internal: Support for Encoding/Decoding. -public struct _ProtobufMessageMap -{ - public typealias Key = KeyType.BaseType - public typealias Value = ValueType - public typealias BaseType = Dictionary -} - -/// SwiftProtobuf Internal: Support for Encoding/Decoding. -public struct _ProtobufEnumMap -{ - public typealias Key = KeyType.BaseType - public typealias Value = ValueType - public typealias BaseType = Dictionary -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/SelectiveVisitor.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/SelectiveVisitor.swift deleted file mode 100644 index e8dc407..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/SelectiveVisitor.swift +++ /dev/null @@ -1,268 +0,0 @@ -// Sources/SwiftProtobuf/SelectiveVisitor.swift - Base for custom Visitors -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// A base for Visitors that only expect a subset of things to called. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// A base for Visitors that only expects a subset of things to called. -internal protocol SelectiveVisitor: Visitor { - // Adds nothing. -} - -/// Default impls for everything so things using this only have to write the -/// methods they expect. Asserts to catch developer errors, but becomes -/// nothing in release to keep code size small. -/// -/// NOTE: This is an impl for *everything*. This means the default impls -/// provided by Visitor to bridge packed->repeated, repeated->singular, etc -/// won't kick in. -extension SelectiveVisitor { - internal mutating func visitSingularFloatField(value: Float, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularDoubleField(value: Double, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularInt32Field(value: Int32, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularInt64Field(value: Int64, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularUInt32Field(value: UInt32, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularUInt64Field(value: UInt64, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularSInt32Field(value: Int32, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularSInt64Field(value: Int64, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularFixed32Field(value: UInt32, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularFixed64Field(value: UInt64, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularSFixed32Field(value: Int32, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularSFixed64Field(value: Int64, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularBoolField(value: Bool, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularStringField(value: String, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularBytesField(value: Data, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularEnumField(value: E, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularMessageField(value: M, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitSingularGroupField(value: G, fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedFloatField(value: [Float], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedDoubleField(value: [Double], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedSInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedSInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedBoolField(value: [Bool], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedStringField(value: [String], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedBytesField(value: [Data], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedEnumField(value: [E], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedMessageField(value: [M], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitRepeatedGroupField(value: [G], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedFloatField(value: [Float], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedDoubleField(value: [Double], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedSInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedSInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedBoolField(value: [Bool], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitPackedEnumField(value: [E], fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitMapField( - fieldType: _ProtobufMap.Type, - value: _ProtobufMap.BaseType, - fieldNumber: Int) throws { - assert(false) - } - - internal mutating func visitMapField( - fieldType: _ProtobufEnumMap.Type, - value: _ProtobufEnumMap.BaseType, - fieldNumber: Int - ) throws where ValueType.RawValue == Int { - assert(false) - } - - internal mutating func visitMapField( - fieldType: _ProtobufMessageMap.Type, - value: _ProtobufMessageMap.BaseType, - fieldNumber: Int - ) throws { - assert(false) - } - - internal mutating func visitExtensionFields(fields: ExtensionFieldValueSet, start: Int, end: Int) throws { - assert(false) - } - - internal mutating func visitExtensionFieldsAsMessageSet( - fields: ExtensionFieldValueSet, - start: Int, - end: Int - ) throws { - assert(false) - } - - internal mutating func visitUnknown(bytes: Data) throws { - assert(false) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/SimpleExtensionMap.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/SimpleExtensionMap.swift deleted file mode 100644 index ad47086..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/SimpleExtensionMap.swift +++ /dev/null @@ -1,112 +0,0 @@ -// Sources/SwiftProtobuf/SimpleExtensionMap.swift - Extension support -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// A default implementation of ExtensionMap. -/// -// ----------------------------------------------------------------------------- - - -// Note: The generated code only relies on ExpressibleByArrayLiteral -public struct SimpleExtensionMap: ExtensionMap, ExpressibleByArrayLiteral, CustomDebugStringConvertible { - public typealias Element = AnyMessageExtension - - // Since type objects aren't Hashable, we can't do much better than this... - internal var fields = [Int: Array]() - - public init() {} - - public init(arrayLiteral: Element...) { - insert(contentsOf: arrayLiteral) - } - - public init(_ others: SimpleExtensionMap...) { - for other in others { - formUnion(other) - } - } - - public subscript(messageType: Message.Type, fieldNumber: Int) -> AnyMessageExtension? { - get { - if let l = fields[fieldNumber] { - for e in l { - if messageType == e.messageType { - return e - } - } - } - return nil - } - } - - public func fieldNumberForProto(messageType: Message.Type, protoFieldName: String) -> Int? { - // TODO: Make this faster... - for (_, list) in fields { - for e in list { - if e.fieldName == protoFieldName && e.messageType == messageType { - return e.fieldNumber - } - } - } - return nil - } - - public mutating func insert(_ newValue: Element) { - let fieldNumber = newValue.fieldNumber - if let l = fields[fieldNumber] { - let messageType = newValue.messageType - var newL = l.filter { return $0.messageType != messageType } - newL.append(newValue) - fields[fieldNumber] = newL - } else { - fields[fieldNumber] = [newValue] - } - } - - public mutating func insert(contentsOf: [Element]) { - for e in contentsOf { - insert(e) - } - } - - public mutating func formUnion(_ other: SimpleExtensionMap) { - for (fieldNumber, otherList) in other.fields { - if let list = fields[fieldNumber] { - var newList = list.filter { - for o in otherList { - if $0.messageType == o.messageType { return false } - } - return true - } - newList.append(contentsOf: otherList) - fields[fieldNumber] = newList - } else { - fields[fieldNumber] = otherList - } - } - } - - public func union(_ other: SimpleExtensionMap) -> SimpleExtensionMap { - var out = self - out.formUnion(other) - return out - } - - public var debugDescription: String { - var names = [String]() - for (_, list) in fields { - for e in list { - names.append("\(e.fieldName):(\(e.fieldNumber))") - } - } - let d = names.joined(separator: ",") - return "SimpleExtensionMap(\(d))" - } - -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/StringUtils.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/StringUtils.swift deleted file mode 100644 index c8d581e..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/StringUtils.swift +++ /dev/null @@ -1,109 +0,0 @@ -// Sources/SwiftProtobuf/StringUtils.swift - String utility functions -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Utility functions for converting UTF8 bytes into Strings. -/// These functions must: -/// * Accept any valid UTF8, including a zero byte (which is -/// a valid UTF8 encoding of U+0000) -/// * Return nil for any invalid UTF8 -/// * Be fast (since they're extensively used by all decoders -/// and even some of the encoders) -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/* - Note: Once our minimum support version is at least Swift 5.3, we - should probably recast the following to use - String(unsafeUninitializedCapacity:) -*/ - -// Note: We're trying to avoid Foundation's String(format:) since that's not -// universally available. - -fileprivate func formatZeroPaddedInt(_ value: Int32, digits: Int) -> String { - precondition(value >= 0) - let s = String(value) - if s.count >= digits { - return s - } else { - let pad = String(repeating: "0", count: digits - s.count) - return pad + s - } -} - -internal func twoDigit(_ value: Int32) -> String { - return formatZeroPaddedInt(value, digits: 2) -} -internal func threeDigit(_ value: Int32) -> String { - return formatZeroPaddedInt(value, digits: 3) -} -internal func fourDigit(_ value: Int32) -> String { - return formatZeroPaddedInt(value, digits: 4) -} -internal func sixDigit(_ value: Int32) -> String { - return formatZeroPaddedInt(value, digits: 6) -} -internal func nineDigit(_ value: Int32) -> String { - return formatZeroPaddedInt(value, digits: 9) -} - -// Wrapper that takes a buffer and start/end offsets -internal func utf8ToString( - bytes: UnsafeRawBufferPointer, - start: UnsafeRawBufferPointer.Index, - end: UnsafeRawBufferPointer.Index -) -> String? { - return utf8ToString(bytes: bytes.baseAddress! + start, count: end - start) -} - - -// Swift 4 introduced new faster String facilities -// that seem to work consistently across all platforms. - -// Notes on performance: -// -// The pre-verification here only takes about 10% of -// the time needed for constructing the string. -// Eliminating it would provide only a very minor -// speed improvement. -// -// On macOS, this is only about 25% faster than -// the Foundation initializer used below for Swift 3. -// On Linux, the Foundation initializer is much -// slower than on macOS, so this is a much bigger -// win there. -internal func utf8ToString(bytes: UnsafeRawPointer, count: Int) -> String? { - if count == 0 { - return String() - } - let codeUnits = UnsafeRawBufferPointer(start: bytes, count: count) - let sourceEncoding = Unicode.UTF8.self - - // Verify that the UTF-8 is valid. - var p = sourceEncoding.ForwardParser() - var i = codeUnits.makeIterator() - Loop: - while true { - switch p.parseScalar(from: &i) { - case .valid(_): - break - case .error: - return nil - case .emptyInput: - break Loop - } - } - - // This initializer is fast but does not reject broken - // UTF-8 (which is why we validate the UTF-8 above). - return String(decoding: codeUnits, as: sourceEncoding) - } diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecoder.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecoder.swift deleted file mode 100644 index 1c99cf4..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecoder.swift +++ /dev/null @@ -1,726 +0,0 @@ -// Sources/SwiftProtobuf/TextFormatDecoder.swift - Text format decoding -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Test format decoding engine. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// -/// Provides a higher-level interface to the token stream coming -/// from a TextFormatScanner. In particular, this provides -/// single-token pushback and convenience functions for iterating -/// over complex structures. -/// -internal struct TextFormatDecoder: Decoder { - internal var scanner: TextFormatScanner - private var fieldCount = 0 - private var terminator: UInt8? - private var fieldNameMap: _NameMap? - private var messageType: Message.Type? - - internal var complete: Bool { - mutating get { - return scanner.complete - } - } - - internal init( - messageType: Message.Type, - utf8Pointer: UnsafeRawPointer, - count: Int, - options: TextFormatDecodingOptions, - extensions: ExtensionMap? - ) throws { - scanner = TextFormatScanner(utf8Pointer: utf8Pointer, count: count, options: options, extensions: extensions) - guard let nameProviding = (messageType as? _ProtoNameProviding.Type) else { - throw TextFormatDecodingError.missingFieldNames - } - fieldNameMap = nameProviding._protobuf_nameMap - self.messageType = messageType - } - - internal init(messageType: Message.Type, scanner: TextFormatScanner, terminator: UInt8?) throws { - self.scanner = scanner - self.terminator = terminator - guard let nameProviding = (messageType as? _ProtoNameProviding.Type) else { - throw TextFormatDecodingError.missingFieldNames - } - fieldNameMap = nameProviding._protobuf_nameMap - self.messageType = messageType - } - - mutating func handleConflictingOneOf() throws { - throw TextFormatDecodingError.conflictingOneOf - } - - mutating func nextFieldNumber() throws -> Int? { - if let terminator = terminator { - if scanner.skipOptionalObjectEnd(terminator) { - return nil - } - } - if fieldCount > 0 { - scanner.skipOptionalSeparator() - } - if let key = try scanner.nextOptionalExtensionKey() { - // Extension key; look up in the extension registry - if let fieldNumber = scanner.extensions?.fieldNumberForProto(messageType: messageType!, protoFieldName: key) { - fieldCount += 1 - return fieldNumber - } else { - throw TextFormatDecodingError.unknownField - } - } else if let fieldNumber = try scanner.nextFieldNumber(names: fieldNameMap!) { - fieldCount += 1 - return fieldNumber - } else if terminator == nil { - return nil - } else { - throw TextFormatDecodingError.truncated - } - - } - - mutating func decodeSingularFloatField(value: inout Float) throws { - try scanner.skipRequiredColon() - value = try scanner.nextFloat() - } - mutating func decodeSingularFloatField(value: inout Float?) throws { - try scanner.skipRequiredColon() - value = try scanner.nextFloat() - } - mutating func decodeRepeatedFloatField(value: inout [Float]) throws { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let n = try scanner.nextFloat() - value.append(n) - } - } else { - let n = try scanner.nextFloat() - value.append(n) - } - } - mutating func decodeSingularDoubleField(value: inout Double) throws { - try scanner.skipRequiredColon() - value = try scanner.nextDouble() - } - mutating func decodeSingularDoubleField(value: inout Double?) throws { - try scanner.skipRequiredColon() - value = try scanner.nextDouble() - } - mutating func decodeRepeatedDoubleField(value: inout [Double]) throws { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let n = try scanner.nextDouble() - value.append(n) - } - } else { - let n = try scanner.nextDouble() - value.append(n) - } - } - mutating func decodeSingularInt32Field(value: inout Int32) throws { - try scanner.skipRequiredColon() - let n = try scanner.nextSInt() - if n > Int64(Int32.max) || n < Int64(Int32.min) { - throw TextFormatDecodingError.malformedNumber - } - value = Int32(truncatingIfNeeded: n) - } - mutating func decodeSingularInt32Field(value: inout Int32?) throws { - try scanner.skipRequiredColon() - let n = try scanner.nextSInt() - if n > Int64(Int32.max) || n < Int64(Int32.min) { - throw TextFormatDecodingError.malformedNumber - } - value = Int32(truncatingIfNeeded: n) - } - mutating func decodeRepeatedInt32Field(value: inout [Int32]) throws { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let n = try scanner.nextSInt() - if n > Int64(Int32.max) || n < Int64(Int32.min) { - throw TextFormatDecodingError.malformedNumber - } - value.append(Int32(truncatingIfNeeded: n)) - } - } else { - let n = try scanner.nextSInt() - if n > Int64(Int32.max) || n < Int64(Int32.min) { - throw TextFormatDecodingError.malformedNumber - } - value.append(Int32(truncatingIfNeeded: n)) - } - } - mutating func decodeSingularInt64Field(value: inout Int64) throws { - try scanner.skipRequiredColon() - value = try scanner.nextSInt() - } - mutating func decodeSingularInt64Field(value: inout Int64?) throws { - try scanner.skipRequiredColon() - value = try scanner.nextSInt() - } - mutating func decodeRepeatedInt64Field(value: inout [Int64]) throws { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let n = try scanner.nextSInt() - value.append(n) - } - } else { - let n = try scanner.nextSInt() - value.append(n) - } - } - mutating func decodeSingularUInt32Field(value: inout UInt32) throws { - try scanner.skipRequiredColon() - let n = try scanner.nextUInt() - if n > UInt64(UInt32.max) { - throw TextFormatDecodingError.malformedNumber - } - value = UInt32(truncatingIfNeeded: n) - } - mutating func decodeSingularUInt32Field(value: inout UInt32?) throws { - try scanner.skipRequiredColon() - let n = try scanner.nextUInt() - if n > UInt64(UInt32.max) { - throw TextFormatDecodingError.malformedNumber - } - value = UInt32(truncatingIfNeeded: n) - } - mutating func decodeRepeatedUInt32Field(value: inout [UInt32]) throws { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let n = try scanner.nextUInt() - if n > UInt64(UInt32.max) { - throw TextFormatDecodingError.malformedNumber - } - value.append(UInt32(truncatingIfNeeded: n)) - } - } else { - let n = try scanner.nextUInt() - if n > UInt64(UInt32.max) { - throw TextFormatDecodingError.malformedNumber - } - value.append(UInt32(truncatingIfNeeded: n)) - } - } - mutating func decodeSingularUInt64Field(value: inout UInt64) throws { - try scanner.skipRequiredColon() - value = try scanner.nextUInt() - } - mutating func decodeSingularUInt64Field(value: inout UInt64?) throws { - try scanner.skipRequiredColon() - value = try scanner.nextUInt() - } - mutating func decodeRepeatedUInt64Field(value: inout [UInt64]) throws { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let n = try scanner.nextUInt() - value.append(n) - } - } else { - let n = try scanner.nextUInt() - value.append(n) - } - } - mutating func decodeSingularSInt32Field(value: inout Int32) throws { - try decodeSingularInt32Field(value: &value) - } - mutating func decodeSingularSInt32Field(value: inout Int32?) throws { - try decodeSingularInt32Field(value: &value) - } - mutating func decodeRepeatedSInt32Field(value: inout [Int32]) throws { - try decodeRepeatedInt32Field(value: &value) - } - mutating func decodeSingularSInt64Field(value: inout Int64) throws { - try decodeSingularInt64Field(value: &value) - } - mutating func decodeSingularSInt64Field(value: inout Int64?) throws { - try decodeSingularInt64Field(value: &value) - } - mutating func decodeRepeatedSInt64Field(value: inout [Int64]) throws { - try decodeRepeatedInt64Field(value: &value) - } - mutating func decodeSingularFixed32Field(value: inout UInt32) throws { - try decodeSingularUInt32Field(value: &value) - } - mutating func decodeSingularFixed32Field(value: inout UInt32?) throws { - try decodeSingularUInt32Field(value: &value) - } - mutating func decodeRepeatedFixed32Field(value: inout [UInt32]) throws { - try decodeRepeatedUInt32Field(value: &value) - } - mutating func decodeSingularFixed64Field(value: inout UInt64) throws { - try decodeSingularUInt64Field(value: &value) - } - mutating func decodeSingularFixed64Field(value: inout UInt64?) throws { - try decodeSingularUInt64Field(value: &value) - } - mutating func decodeRepeatedFixed64Field(value: inout [UInt64]) throws { - try decodeRepeatedUInt64Field(value: &value) - } - mutating func decodeSingularSFixed32Field(value: inout Int32) throws { - try decodeSingularInt32Field(value: &value) - } - mutating func decodeSingularSFixed32Field(value: inout Int32?) throws { - try decodeSingularInt32Field(value: &value) - } - mutating func decodeRepeatedSFixed32Field(value: inout [Int32]) throws { - try decodeRepeatedInt32Field(value: &value) - } - mutating func decodeSingularSFixed64Field(value: inout Int64) throws { - try decodeSingularInt64Field(value: &value) - } - mutating func decodeSingularSFixed64Field(value: inout Int64?) throws { - try decodeSingularInt64Field(value: &value) - } - mutating func decodeRepeatedSFixed64Field(value: inout [Int64]) throws { - try decodeRepeatedInt64Field(value: &value) - } - mutating func decodeSingularBoolField(value: inout Bool) throws { - try scanner.skipRequiredColon() - value = try scanner.nextBool() - } - mutating func decodeSingularBoolField(value: inout Bool?) throws { - try scanner.skipRequiredColon() - value = try scanner.nextBool() - } - mutating func decodeRepeatedBoolField(value: inout [Bool]) throws { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let n = try scanner.nextBool() - value.append(n) - } - } else { - let n = try scanner.nextBool() - value.append(n) - } - } - mutating func decodeSingularStringField(value: inout String) throws { - try scanner.skipRequiredColon() - value = try scanner.nextStringValue() - } - mutating func decodeSingularStringField(value: inout String?) throws { - try scanner.skipRequiredColon() - value = try scanner.nextStringValue() - } - mutating func decodeRepeatedStringField(value: inout [String]) throws { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let n = try scanner.nextStringValue() - value.append(n) - } - } else { - let n = try scanner.nextStringValue() - value.append(n) - } - } - mutating func decodeSingularBytesField(value: inout Data) throws { - try scanner.skipRequiredColon() - value = try scanner.nextBytesValue() - } - mutating func decodeSingularBytesField(value: inout Data?) throws { - try scanner.skipRequiredColon() - value = try scanner.nextBytesValue() - } - mutating func decodeRepeatedBytesField(value: inout [Data]) throws { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let n = try scanner.nextBytesValue() - value.append(n) - } - } else { - let n = try scanner.nextBytesValue() - value.append(n) - } - } - - private mutating func decodeEnum() throws -> E where E.RawValue == Int { - if let name = try scanner.nextOptionalEnumName() { - if let b = E(rawUTF8: name) { - return b - } else { - throw TextFormatDecodingError.unrecognizedEnumValue - } - } - let number = try scanner.nextSInt() - if number >= Int64(Int32.min) && number <= Int64(Int32.max) { - let n = Int32(truncatingIfNeeded: number) - if let e = E(rawValue: Int(n)) { - return e - } else { - throw TextFormatDecodingError.unrecognizedEnumValue - } - } - throw TextFormatDecodingError.malformedText - - } - - mutating func decodeSingularEnumField(value: inout E?) throws where E.RawValue == Int { - try scanner.skipRequiredColon() - let e: E = try decodeEnum() - value = e - } - - mutating func decodeSingularEnumField(value: inout E) throws where E.RawValue == Int { - try scanner.skipRequiredColon() - let e: E = try decodeEnum() - value = e - } - - mutating func decodeRepeatedEnumField(value: inout [E]) throws where E.RawValue == Int { - try scanner.skipRequiredColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let e: E = try decodeEnum() - value.append(e) - } - } else { - let e: E = try decodeEnum() - value.append(e) - } - } - - mutating func decodeSingularMessageField(value: inout M?) throws { - _ = scanner.skipOptionalColon() - if value == nil { - value = M() - } - let terminator = try scanner.skipObjectStart() - var subDecoder = try TextFormatDecoder(messageType: M.self, scanner: scanner, terminator: terminator) - if M.self == Google_Protobuf_Any.self { - var any = value as! Google_Protobuf_Any? - try any!.decodeTextFormat(decoder: &subDecoder) - value = any as! M? - } else { - try value!.decodeMessage(decoder: &subDecoder) - } - assert((scanner.recursionBudget + 1) == subDecoder.scanner.recursionBudget) - scanner = subDecoder.scanner - } - - mutating func decodeRepeatedMessageField(value: inout [M]) throws { - _ = scanner.skipOptionalColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - let terminator = try scanner.skipObjectStart() - var subDecoder = try TextFormatDecoder(messageType: M.self, scanner: scanner, terminator: terminator) - if M.self == Google_Protobuf_Any.self { - var message = Google_Protobuf_Any() - try message.decodeTextFormat(decoder: &subDecoder) - value.append(message as! M) - } else { - var message = M() - try message.decodeMessage(decoder: &subDecoder) - value.append(message) - } - assert((scanner.recursionBudget + 1) == subDecoder.scanner.recursionBudget) - scanner = subDecoder.scanner - } - } else { - let terminator = try scanner.skipObjectStart() - var subDecoder = try TextFormatDecoder(messageType: M.self, scanner: scanner, terminator: terminator) - if M.self == Google_Protobuf_Any.self { - var message = Google_Protobuf_Any() - try message.decodeTextFormat(decoder: &subDecoder) - value.append(message as! M) - } else { - var message = M() - try message.decodeMessage(decoder: &subDecoder) - value.append(message) - } - assert((scanner.recursionBudget + 1) == subDecoder.scanner.recursionBudget) - scanner = subDecoder.scanner - } - } - - mutating func decodeSingularGroupField(value: inout G?) throws { - try decodeSingularMessageField(value: &value) - } - - mutating func decodeRepeatedGroupField(value: inout [G]) throws { - try decodeRepeatedMessageField(value: &value) - } - - private mutating func decodeMapEntry(mapType: _ProtobufMap.Type, value: inout _ProtobufMap.BaseType) throws { - var keyField: KeyType.BaseType? - var valueField: ValueType.BaseType? - let terminator = try scanner.skipObjectStart() - while true { - if scanner.skipOptionalObjectEnd(terminator) { - if let keyField = keyField, let valueField = valueField { - value[keyField] = valueField - return - } else { - throw TextFormatDecodingError.malformedText - } - } - if let key = try scanner.nextKey() { - switch key { - case "key", "1": - try KeyType.decodeSingular(value: &keyField, from: &self) - case "value", "2": - try ValueType.decodeSingular(value: &valueField, from: &self) - default: - throw TextFormatDecodingError.unknownField - } - scanner.skipOptionalSeparator() - } else { - throw TextFormatDecodingError.malformedText - } - } - } - - mutating func decodeMapField(fieldType: _ProtobufMap.Type, value: inout _ProtobufMap.BaseType) throws { - _ = scanner.skipOptionalColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - try decodeMapEntry(mapType: fieldType, value: &value) - } - } else { - try decodeMapEntry(mapType: fieldType, value: &value) - } - } - - private mutating func decodeMapEntry(mapType: _ProtobufEnumMap.Type, value: inout _ProtobufEnumMap.BaseType) throws where ValueType.RawValue == Int { - var keyField: KeyType.BaseType? - var valueField: ValueType? - let terminator = try scanner.skipObjectStart() - while true { - if scanner.skipOptionalObjectEnd(terminator) { - if let keyField = keyField, let valueField = valueField { - value[keyField] = valueField - return - } else { - throw TextFormatDecodingError.malformedText - } - } - if let key = try scanner.nextKey() { - switch key { - case "key", "1": - try KeyType.decodeSingular(value: &keyField, from: &self) - case "value", "2": - try decodeSingularEnumField(value: &valueField) - default: - throw TextFormatDecodingError.unknownField - } - scanner.skipOptionalSeparator() - } else { - throw TextFormatDecodingError.malformedText - } - } - } - - mutating func decodeMapField(fieldType: _ProtobufEnumMap.Type, value: inout _ProtobufEnumMap.BaseType) throws where ValueType.RawValue == Int { - _ = scanner.skipOptionalColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - try decodeMapEntry(mapType: fieldType, value: &value) - } - } else { - try decodeMapEntry(mapType: fieldType, value: &value) - } - } - - private mutating func decodeMapEntry(mapType: _ProtobufMessageMap.Type, value: inout _ProtobufMessageMap.BaseType) throws { - var keyField: KeyType.BaseType? - var valueField: ValueType? - let terminator = try scanner.skipObjectStart() - while true { - if scanner.skipOptionalObjectEnd(terminator) { - if let keyField = keyField, let valueField = valueField { - value[keyField] = valueField - return - } else { - throw TextFormatDecodingError.malformedText - } - } - if let key = try scanner.nextKey() { - switch key { - case "key", "1": - try KeyType.decodeSingular(value: &keyField, from: &self) - case "value", "2": - try decodeSingularMessageField(value: &valueField) - default: - throw TextFormatDecodingError.unknownField - } - scanner.skipOptionalSeparator() - } else { - throw TextFormatDecodingError.malformedText - } - } - } - - mutating func decodeMapField(fieldType: _ProtobufMessageMap.Type, value: inout _ProtobufMessageMap.BaseType) throws { - _ = scanner.skipOptionalColon() - if scanner.skipOptionalBeginArray() { - var firstItem = true - while true { - if scanner.skipOptionalEndArray() { - return - } - if firstItem { - firstItem = false - } else { - try scanner.skipRequiredComma() - } - try decodeMapEntry(mapType: fieldType, value: &value) - } - } else { - try decodeMapEntry(mapType: fieldType, value: &value) - } - } - - mutating func decodeExtensionField(values: inout ExtensionFieldValueSet, messageType: Message.Type, fieldNumber: Int) throws { - if let ext = scanner.extensions?[messageType, fieldNumber] { - try values.modify(index: fieldNumber) { fieldValue in - if fieldValue != nil { - try fieldValue!.decodeExtensionField(decoder: &self) - } else { - fieldValue = try ext._protobuf_newField(decoder: &self) - } - if fieldValue == nil { - // Really things should never get here, for TextFormat, decoding - // the value should always work or throw an error. This specific - // error result is to allow this to be more detectable. - throw TextFormatDecodingError.internalExtensionError - } - } - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecodingError.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecodingError.swift deleted file mode 100644 index ea57bf5..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecodingError.swift +++ /dev/null @@ -1,42 +0,0 @@ -// Sources/SwiftProtobuf/TextFormatDecodingError.swift - Protobuf text format decoding errors -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Protobuf text format decoding errors -/// -// ----------------------------------------------------------------------------- - -public enum TextFormatDecodingError: Error { - /// Text data could not be parsed - case malformedText - /// A number could not be parsed - case malformedNumber - /// Extraneous data remained after decoding should have been complete - case trailingGarbage - /// The data stopped before we expected - case truncated - /// A string was not valid UTF8 - case invalidUTF8 - /// The data being parsed does not match the type specified in the proto file - case schemaMismatch - /// Field names were not compiled into the binary - case missingFieldNames - /// A field identifier (name or number) was not found on the message - case unknownField - /// The enum value was not recognized - case unrecognizedEnumValue - /// Text format rejects conflicting values for the same oneof field - case conflictingOneOf - /// An internal error happened while decoding. If this is ever encountered, - /// please file an issue with SwiftProtobuf with as much details as possible - /// for what happened (proto definitions, bytes being decoded (if possible)). - case internalExtensionError - /// Reached the nesting limit for messages within messages while decoding. - case messageDepthLimit -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecodingOptions.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecodingOptions.swift deleted file mode 100644 index 4713eba..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatDecodingOptions.swift +++ /dev/null @@ -1,25 +0,0 @@ -// Sources/SwiftProtobuf/TextFormatDecodingOptions.swift - Text format decoding options -// -// Copyright (c) 2014 - 2021 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Text format decoding options -/// -// ----------------------------------------------------------------------------- - -/// Options for TextFormatDecoding. -public struct TextFormatDecodingOptions { - /// The maximum nesting of message with messages. The default is 100. - /// - /// To prevent corrupt or malicious messages from causing stack overflows, - /// this controls how deep messages can be nested within other messages - /// while parsing. - public var messageDepthLimit: Int = 100 - - public init() {} -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatEncoder.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatEncoder.swift deleted file mode 100644 index 6fe217c..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatEncoder.swift +++ /dev/null @@ -1,296 +0,0 @@ -// Sources/SwiftProtobuf/TextFormatEncoder.swift - Text format encoding support -// -// Copyright (c) 2014 - 2019 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Text format serialization engine. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -private let asciiSpace = UInt8(ascii: " ") -private let asciiColon = UInt8(ascii: ":") -private let asciiComma = UInt8(ascii: ",") -private let asciiMinus = UInt8(ascii: "-") -private let asciiBackslash = UInt8(ascii: "\\") -private let asciiDoubleQuote = UInt8(ascii: "\"") -private let asciiZero = UInt8(ascii: "0") -private let asciiOpenCurlyBracket = UInt8(ascii: "{") -private let asciiCloseCurlyBracket = UInt8(ascii: "}") -private let asciiOpenSquareBracket = UInt8(ascii: "[") -private let asciiCloseSquareBracket = UInt8(ascii: "]") -private let asciiNewline = UInt8(ascii: "\n") -private let asciiUpperA = UInt8(ascii: "A") - -private let tabSize = 2 -private let tab = [UInt8](repeating: asciiSpace, count: tabSize) - -/// TextFormatEncoder has no public members. -internal struct TextFormatEncoder { - private var data = [UInt8]() - private var indentString: [UInt8] = [] - var stringResult: String { - get { - return String(bytes: data, encoding: String.Encoding.utf8)! - } - } - - internal mutating func append(staticText: StaticString) { - let buff = UnsafeBufferPointer(start: staticText.utf8Start, count: staticText.utf8CodeUnitCount) - data.append(contentsOf: buff) - } - - internal mutating func append(name: _NameMap.Name) { - data.append(contentsOf: name.utf8Buffer) - } - - internal mutating func append(bytes: [UInt8]) { - data.append(contentsOf: bytes) - } - - private mutating func append(text: String) { - data.append(contentsOf: text.utf8) - } - - init() {} - - internal mutating func indent() { - data.append(contentsOf: indentString) - } - - mutating func emitFieldName(name: UnsafeRawBufferPointer) { - indent() - data.append(contentsOf: name) - } - - mutating func emitFieldName(name: StaticString) { - let buff = UnsafeRawBufferPointer(start: name.utf8Start, count: name.utf8CodeUnitCount) - emitFieldName(name: buff) - } - - mutating func emitFieldName(name: [UInt8]) { - indent() - data.append(contentsOf: name) - } - - mutating func emitExtensionFieldName(name: String) { - indent() - data.append(asciiOpenSquareBracket) - append(text: name) - data.append(asciiCloseSquareBracket) - } - - mutating func emitFieldNumber(number: Int) { - indent() - appendUInt(value: UInt64(number)) - } - - mutating func startRegularField() { - append(staticText: ": ") - } - mutating func endRegularField() { - data.append(asciiNewline) - } - - // In Text format, a message-valued field writes the name - // without a trailing colon: - // name_of_field {key: value key2: value2} - mutating func startMessageField() { - append(staticText: " {\n") - indentString.append(contentsOf: tab) - } - - mutating func endMessageField() { - indentString.removeLast(tabSize) - indent() - append(staticText: "}\n") - } - - mutating func startArray() { - data.append(asciiOpenSquareBracket) - } - - mutating func arraySeparator() { - append(staticText: ", ") - } - - mutating func endArray() { - data.append(asciiCloseSquareBracket) - } - - mutating func putEnumValue(value: E) { - if let name = value.name { - data.append(contentsOf: name.utf8Buffer) - } else { - appendInt(value: Int64(value.rawValue)) - } - } - - mutating func putFloatValue(value: Float) { - if value.isNaN { - append(staticText: "nan") - } else if !value.isFinite { - if value < 0 { - append(staticText: "-inf") - } else { - append(staticText: "inf") - } - } else { - data.append(contentsOf: value.debugDescription.utf8) - } - } - - mutating func putDoubleValue(value: Double) { - if value.isNaN { - append(staticText: "nan") - } else if !value.isFinite { - if value < 0 { - append(staticText: "-inf") - } else { - append(staticText: "inf") - } - } else { - data.append(contentsOf: value.debugDescription.utf8) - } - } - - private mutating func appendUInt(value: UInt64) { - if value >= 1000 { - appendUInt(value: value / 1000) - } - if value >= 100 { - data.append(asciiZero + UInt8((value / 100) % 10)) - } - if value >= 10 { - data.append(asciiZero + UInt8((value / 10) % 10)) - } - data.append(asciiZero + UInt8(value % 10)) - } - private mutating func appendInt(value: Int64) { - if value < 0 { - data.append(asciiMinus) - // This is the twos-complement negation of value, - // computed in a way that won't overflow a 64-bit - // signed integer. - appendUInt(value: 1 + ~UInt64(bitPattern: value)) - } else { - appendUInt(value: UInt64(bitPattern: value)) - } - } - - mutating func putInt64(value: Int64) { - appendInt(value: value) - } - - mutating func putUInt64(value: UInt64) { - appendUInt(value: value) - } - - mutating func appendUIntHex(value: UInt64, digits: Int) { - if digits == 0 { - append(staticText: "0x") - } else { - appendUIntHex(value: value >> 4, digits: digits - 1) - let d = UInt8(truncatingIfNeeded: value % 16) - data.append(d < 10 ? asciiZero + d : asciiUpperA + d - 10) - } - } - - mutating func putUInt64Hex(value: UInt64, digits: Int) { - appendUIntHex(value: value, digits: digits) - } - - mutating func putBoolValue(value: Bool) { - append(staticText: value ? "true" : "false") - } - - mutating func putStringValue(value: String) { - data.append(asciiDoubleQuote) - for c in value.unicodeScalars { - switch c.value { - // Special two-byte escapes - case 8: - append(staticText: "\\b") - case 9: - append(staticText: "\\t") - case 10: - append(staticText: "\\n") - case 11: - append(staticText: "\\v") - case 12: - append(staticText: "\\f") - case 13: - append(staticText: "\\r") - case 34: - append(staticText: "\\\"") - case 92: - append(staticText: "\\\\") - case 0...31, 127: // Octal form for C0 control chars - data.append(asciiBackslash) - data.append(asciiZero + UInt8(c.value / 64)) - data.append(asciiZero + UInt8(c.value / 8 % 8)) - data.append(asciiZero + UInt8(c.value % 8)) - case 0...127: // ASCII - data.append(UInt8(truncatingIfNeeded: c.value)) - case 0x80...0x7ff: - data.append(0xc0 + UInt8(c.value / 64)) - data.append(0x80 + UInt8(c.value % 64)) - case 0x800...0xffff: - data.append(0xe0 + UInt8(truncatingIfNeeded: c.value >> 12)) - data.append(0x80 + UInt8(truncatingIfNeeded: (c.value >> 6) & 0x3f)) - data.append(0x80 + UInt8(truncatingIfNeeded: c.value & 0x3f)) - default: - data.append(0xf0 + UInt8(truncatingIfNeeded: c.value >> 18)) - data.append(0x80 + UInt8(truncatingIfNeeded: (c.value >> 12) & 0x3f)) - data.append(0x80 + UInt8(truncatingIfNeeded: (c.value >> 6) & 0x3f)) - data.append(0x80 + UInt8(truncatingIfNeeded: c.value & 0x3f)) - } - } - data.append(asciiDoubleQuote) - } - - mutating func putBytesValue(value: Data) { - data.append(asciiDoubleQuote) - value.withUnsafeBytes { (body: UnsafeRawBufferPointer) in - if let p = body.baseAddress, body.count > 0 { - for i in 0.. [UInt8] { - var bytes = [UInt8]() - if let protoName = nameMap?.names(for: fieldNumber)?.proto { - bytes.append(contentsOf: protoName.utf8Buffer) - } else if let protoName = nameResolver[fieldNumber] { - let buff = UnsafeBufferPointer(start: protoName.utf8Start, count: protoName.utf8CodeUnitCount) - bytes.append(contentsOf: buff) - } else if let extensionName = extensions?[fieldNumber]?.protobufExtension.fieldName { - bytes.append(UInt8(ascii: "[")) - bytes.append(contentsOf: extensionName.utf8) - bytes.append(UInt8(ascii: "]")) - } else { - bytes.append(contentsOf: fieldNumber.description.utf8) - } - return bytes - } - - private mutating func emitFieldName(lookingUp fieldNumber: Int) { - if let protoName = nameMap?.names(for: fieldNumber)?.proto { - encoder.emitFieldName(name: protoName.utf8Buffer) - } else if let protoName = nameResolver[fieldNumber] { - encoder.emitFieldName(name: protoName) - } else if let extensionName = extensions?[fieldNumber]?.protobufExtension.fieldName { - encoder.emitExtensionFieldName(name: extensionName) - } else { - encoder.emitFieldNumber(number: fieldNumber) - } - } - - mutating func visitUnknown(bytes: Data) throws { - if options.printUnknownFields { - try bytes.withUnsafeBytes { (body: UnsafeRawBufferPointer) -> () in - if let baseAddress = body.baseAddress, body.count > 0 { - // All fields will be directly handled, so there is no need for - // the unknown field buffering/collection (when scannings to see - // if something is a message, this would be extremely wasteful). - var binaryOptions = BinaryDecodingOptions() - binaryOptions.discardUnknownFields = true - var decoder = BinaryDecoder(forReadingFrom: baseAddress, - count: body.count, - options: binaryOptions) - try visitUnknown(decoder: &decoder) - } - } - } - } - - /// Helper for printing out unknowns. - /// - /// The implementation tries to be "helpful" and if a length delimited field - /// appears to be a submessage, it prints it as such. However, that opens the - /// door to someone sending a message with an unknown field that is a stack - /// bomb, i.e. - it causes this code to recurse, exhausing the stack and - /// thus opening up an attack vector. To keep this "help", but avoid the - /// attack, a limit is placed on how many times it will recurse before just - /// treating the length delimted fields as bytes and not trying to decode - /// them. - private mutating func visitUnknown( - decoder: inout BinaryDecoder, - recursionBudget: Int = 10 - ) throws { - // This stack serves to avoid recursion for groups within groups within - // groups..., this avoid the stack attack that the message detection - // hits. No limit is placed on this because there is no stack risk with - // recursion, and because if a limit was hit, there is no other way to - // encode the group (the message field can just print as length - // delimited, groups don't have an option like that). - var groupFieldNumberStack: [Int] = [] - - while let tag = try decoder.getTag() { - switch tag.wireFormat { - case .varint: - encoder.emitFieldNumber(number: tag.fieldNumber) - var value: UInt64 = 0 - encoder.startRegularField() - try decoder.decodeSingularUInt64Field(value: &value) - encoder.putUInt64(value: value) - encoder.endRegularField() - case .fixed64: - encoder.emitFieldNumber(number: tag.fieldNumber) - var value: UInt64 = 0 - encoder.startRegularField() - try decoder.decodeSingularFixed64Field(value: &value) - encoder.putUInt64Hex(value: value, digits: 16) - encoder.endRegularField() - case .lengthDelimited: - encoder.emitFieldNumber(number: tag.fieldNumber) - var bytes = Data() - try decoder.decodeSingularBytesField(value: &bytes) - bytes.withUnsafeBytes { (body: UnsafeRawBufferPointer) -> () in - if let baseAddress = body.baseAddress, body.count > 0 { - var encodeAsBytes: Bool - if (recursionBudget > 0) { - do { - // Walk all the fields to test if it looks like a message - var testDecoder = BinaryDecoder(forReadingFrom: baseAddress, - count: body.count, - parent: decoder) - while let _ = try testDecoder.nextFieldNumber() { - } - // No error? Output the message body. - encodeAsBytes = false - var subDecoder = BinaryDecoder(forReadingFrom: baseAddress, - count: bytes.count, - parent: decoder) - encoder.startMessageField() - try visitUnknown(decoder: &subDecoder, - recursionBudget: recursionBudget - 1) - encoder.endMessageField() - } catch { - encodeAsBytes = true - } - } else { - encodeAsBytes = true - } - if (encodeAsBytes) { - encoder.startRegularField() - encoder.putBytesValue(value: bytes) - encoder.endRegularField() - } - } - } - case .startGroup: - encoder.emitFieldNumber(number: tag.fieldNumber) - encoder.startMessageField() - groupFieldNumberStack.append(tag.fieldNumber) - case .endGroup: - let groupFieldNumber = groupFieldNumberStack.popLast() - // Unknown data is scanned and verified by the - // binary parser, so this can never fail. - assert(tag.fieldNumber == groupFieldNumber) - encoder.endMessageField() - case .fixed32: - encoder.emitFieldNumber(number: tag.fieldNumber) - var value: UInt32 = 0 - encoder.startRegularField() - try decoder.decodeSingularFixed32Field(value: &value) - encoder.putUInt64Hex(value: UInt64(value), digits: 8) - encoder.endRegularField() - } - } - - // Unknown data is scanned and verified by the binary parser, so this can - // never fail. - assert(groupFieldNumberStack.isEmpty) - } - - // Visitor.swift defines default versions for other singular field types - // that simply widen and dispatch to one of the following. Since Text format - // does not distinguish e.g., Fixed64 vs. UInt64, this is sufficient. - - mutating func visitSingularFloatField(value: Float, fieldNumber: Int) throws { - emitFieldName(lookingUp: fieldNumber) - encoder.startRegularField() - encoder.putFloatValue(value: value) - encoder.endRegularField() - } - - mutating func visitSingularDoubleField(value: Double, fieldNumber: Int) throws { - emitFieldName(lookingUp: fieldNumber) - encoder.startRegularField() - encoder.putDoubleValue(value: value) - encoder.endRegularField() - } - - mutating func visitSingularInt64Field(value: Int64, fieldNumber: Int) throws { - emitFieldName(lookingUp: fieldNumber) - encoder.startRegularField() - encoder.putInt64(value: value) - encoder.endRegularField() - } - - mutating func visitSingularUInt64Field(value: UInt64, fieldNumber: Int) throws { - emitFieldName(lookingUp: fieldNumber) - encoder.startRegularField() - encoder.putUInt64(value: value) - encoder.endRegularField() - } - - mutating func visitSingularBoolField(value: Bool, fieldNumber: Int) throws { - emitFieldName(lookingUp: fieldNumber) - encoder.startRegularField() - encoder.putBoolValue(value: value) - encoder.endRegularField() - } - - mutating func visitSingularStringField(value: String, fieldNumber: Int) throws { - emitFieldName(lookingUp: fieldNumber) - encoder.startRegularField() - encoder.putStringValue(value: value) - encoder.endRegularField() - } - - mutating func visitSingularBytesField(value: Data, fieldNumber: Int) throws { - emitFieldName(lookingUp: fieldNumber) - encoder.startRegularField() - encoder.putBytesValue(value: value) - encoder.endRegularField() - } - - mutating func visitSingularEnumField(value: E, fieldNumber: Int) throws { - emitFieldName(lookingUp: fieldNumber) - encoder.startRegularField() - encoder.putEnumValue(value: value) - encoder.endRegularField() - } - - mutating func visitSingularMessageField(value: M, - fieldNumber: Int) throws { - emitFieldName(lookingUp: fieldNumber) - - // Cache old encoder state - let oldNameMap = self.nameMap - let oldNameResolver = self.nameResolver - let oldExtensions = self.extensions - // Update encoding state for new message - self.nameMap = (M.self as? _ProtoNameProviding.Type)?._protobuf_nameMap - self.nameResolver = [:] - self.extensions = (value as? ExtensibleMessage)?._protobuf_extensionFieldValues - // Restore state before returning - defer { - self.extensions = oldExtensions - self.nameResolver = oldNameResolver - self.nameMap = oldNameMap - } - // Encode submessage - encoder.startMessageField() - if let any = value as? Google_Protobuf_Any { - any.textTraverse(visitor: &self) - } else { - try! value.traverse(visitor: &self) - } - encoder.endMessageField() - } - - // Emit the full "verbose" form of an Any. This writes the typeURL - // as a field name in `[...]` followed by the fields of the - // contained message. - internal mutating func visitAnyVerbose(value: Message, typeURL: String) { - encoder.emitExtensionFieldName(name: typeURL) - encoder.startMessageField() - var visitor = TextFormatEncodingVisitor(message: value, encoder: encoder, options: options) - if let any = value as? Google_Protobuf_Any { - any.textTraverse(visitor: &visitor) - } else { - try! value.traverse(visitor: &visitor) - } - encoder = visitor.encoder - encoder.endMessageField() - } - - // Write a single special field called "#json". This - // is used for Any objects with undecoded JSON contents. - internal mutating func visitAnyJSONDataField(value: Data) { - encoder.indent() - encoder.append(staticText: "#json: ") - encoder.putBytesValue(value: value) - encoder.append(staticText: "\n") - } - - // The default implementations in Visitor.swift provide the correct - // results, but we get significantly better performance by only doing - // the name lookup once for the array, rather than once for each element: - - mutating func visitRepeatedFloatField(value: [Float], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putFloatValue(value: v) - encoder.endRegularField() - } - } - - mutating func visitRepeatedDoubleField(value: [Double], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putDoubleValue(value: v) - encoder.endRegularField() - } - } - - mutating func visitRepeatedInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putInt64(value: Int64(v)) - encoder.endRegularField() - } - } - - mutating func visitRepeatedInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putInt64(value: v) - encoder.endRegularField() - } - } - - mutating func visitRepeatedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putUInt64(value: UInt64(v)) - encoder.endRegularField() - } - } - - mutating func visitRepeatedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putUInt64(value: v) - encoder.endRegularField() - } - } - - mutating func visitRepeatedSInt32Field(value: [Int32], fieldNumber: Int) throws { - try visitRepeatedInt32Field(value: value, fieldNumber: fieldNumber) - } - mutating func visitRepeatedSInt64Field(value: [Int64], fieldNumber: Int) throws { - try visitRepeatedInt64Field(value: value, fieldNumber: fieldNumber) - } - mutating func visitRepeatedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - try visitRepeatedUInt32Field(value: value, fieldNumber: fieldNumber) - } - mutating func visitRepeatedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - try visitRepeatedUInt64Field(value: value, fieldNumber: fieldNumber) - } - mutating func visitRepeatedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - try visitRepeatedInt32Field(value: value, fieldNumber: fieldNumber) - } - mutating func visitRepeatedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - try visitRepeatedInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitRepeatedBoolField(value: [Bool], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putBoolValue(value: v) - encoder.endRegularField() - } - } - - mutating func visitRepeatedStringField(value: [String], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putStringValue(value: v) - encoder.endRegularField() - } - } - - mutating func visitRepeatedBytesField(value: [Data], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putBytesValue(value: v) - encoder.endRegularField() - } - } - - mutating func visitRepeatedEnumField(value: [E], fieldNumber: Int) throws { - assert(!value.isEmpty) - let fieldName = formatFieldName(lookingUp: fieldNumber) - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startRegularField() - encoder.putEnumValue(value: v) - encoder.endRegularField() - } - } - - // Messages and groups - mutating func visitRepeatedMessageField(value: [M], - fieldNumber: Int) throws { - assert(!value.isEmpty) - // Look up field name against outer message encoding state - let fieldName = formatFieldName(lookingUp: fieldNumber) - // Cache old encoder state - let oldNameMap = self.nameMap - let oldNameResolver = self.nameResolver - let oldExtensions = self.extensions - // Update encoding state for new message type - self.nameMap = (M.self as? _ProtoNameProviding.Type)?._protobuf_nameMap - self.nameResolver = [:] - self.extensions = (value as? ExtensibleMessage)?._protobuf_extensionFieldValues - // Iterate and encode each message - for v in value { - encoder.emitFieldName(name: fieldName) - encoder.startMessageField() - if let any = v as? Google_Protobuf_Any { - any.textTraverse(visitor: &self) - } else { - try! v.traverse(visitor: &self) - } - encoder.endMessageField() - } - // Restore state - self.extensions = oldExtensions - self.nameResolver = oldNameResolver - self.nameMap = oldNameMap - } - - // Google's C++ implementation of Text format supports two formats - // for repeated numeric fields: "short" format writes the list as a - // single field with values enclosed in `[...]`, "long" format - // writes a separate field name/value for each item. They provide - // an option for callers to select which output version they prefer. - - // Since this distinction mirrors the difference in Protobuf Binary - // between "packed" and "non-packed", I've chosen to use the short - // format for packed fields and the long version for repeated - // fields. This provides a clear visual distinction between these - // fields (including proto3's default use of packed) without - // introducing the baggage of a separate option. - - private mutating func _visitPacked( - value: [T], fieldNumber: Int, - encode: (T, inout TextFormatEncoder) -> () - ) throws { - assert(!value.isEmpty) - emitFieldName(lookingUp: fieldNumber) - encoder.startRegularField() - var firstItem = true - encoder.startArray() - for v in value { - if !firstItem { - encoder.arraySeparator() - } - encode(v, &encoder) - firstItem = false - } - encoder.endArray() - encoder.endRegularField() - } - - mutating func visitPackedFloatField(value: [Float], fieldNumber: Int) throws { - try _visitPacked(value: value, fieldNumber: fieldNumber) { - (v: Float, encoder: inout TextFormatEncoder) in - encoder.putFloatValue(value: v) - } - } - - mutating func visitPackedDoubleField(value: [Double], fieldNumber: Int) throws { - try _visitPacked(value: value, fieldNumber: fieldNumber) { - (v: Double, encoder: inout TextFormatEncoder) in - encoder.putDoubleValue(value: v) - } - } - - mutating func visitPackedInt32Field(value: [Int32], fieldNumber: Int) throws { - try _visitPacked(value: value, fieldNumber: fieldNumber) { - (v: Int32, encoder: inout TextFormatEncoder) in - encoder.putInt64(value: Int64(v)) - } - } - - mutating func visitPackedInt64Field(value: [Int64], fieldNumber: Int) throws { - try _visitPacked(value: value, fieldNumber: fieldNumber) { - (v: Int64, encoder: inout TextFormatEncoder) in - encoder.putInt64(value: v) - } - } - - mutating func visitPackedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - try _visitPacked(value: value, fieldNumber: fieldNumber) { - (v: UInt32, encoder: inout TextFormatEncoder) in - encoder.putUInt64(value: UInt64(v)) - } - } - - mutating func visitPackedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - try _visitPacked(value: value, fieldNumber: fieldNumber) { - (v: UInt64, encoder: inout TextFormatEncoder) in - encoder.putUInt64(value: v) - } - } - - mutating func visitPackedSInt32Field(value: [Int32], fieldNumber: Int) throws { - try visitPackedInt32Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitPackedSInt64Field(value: [Int64], fieldNumber: Int) throws { - try visitPackedInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitPackedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - try visitPackedUInt32Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitPackedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - try visitPackedUInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitPackedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - try visitPackedInt32Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitPackedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - try visitPackedInt64Field(value: value, fieldNumber: fieldNumber) - } - - mutating func visitPackedBoolField(value: [Bool], fieldNumber: Int) throws { - try _visitPacked(value: value, fieldNumber: fieldNumber) { - (v: Bool, encoder: inout TextFormatEncoder) in - encoder.putBoolValue(value: v) - } - } - - mutating func visitPackedEnumField(value: [E], fieldNumber: Int) throws { - try _visitPacked(value: value, fieldNumber: fieldNumber) { - (v: E, encoder: inout TextFormatEncoder) in - encoder.putEnumValue(value: v) - } - } - - /// Helper to encapsulate the common structure of iterating over a map - /// and encoding the keys and values. - private mutating func _visitMap( - map: Dictionary, - fieldNumber: Int, - isOrderedBefore: (K, K) -> Bool, - coder: (inout TextFormatEncodingVisitor, K, V) throws -> () - ) throws { - for (k,v) in map.sorted(by: { isOrderedBefore( $0.0, $1.0) }) { - emitFieldName(lookingUp: fieldNumber) - encoder.startMessageField() - var visitor = TextFormatEncodingVisitor(nameMap: nil, nameResolver: mapNameResolver, extensions: nil, encoder: encoder, options: options) - try coder(&visitor, k, v) - encoder = visitor.encoder - encoder.endMessageField() - } - } - - mutating func visitMapField( - fieldType: _ProtobufMap.Type, - value: _ProtobufMap.BaseType, - fieldNumber: Int - ) throws { - try _visitMap(map: value, fieldNumber: fieldNumber, isOrderedBefore: KeyType._lessThan) { - (visitor: inout TextFormatEncodingVisitor, key, value) throws -> () in - try KeyType.visitSingular(value: key, fieldNumber: 1, with: &visitor) - try ValueType.visitSingular(value: value, fieldNumber: 2, with: &visitor) - } - } - - mutating func visitMapField( - fieldType: _ProtobufEnumMap.Type, - value: _ProtobufEnumMap.BaseType, - fieldNumber: Int - ) throws where ValueType.RawValue == Int { - try _visitMap(map: value, fieldNumber: fieldNumber, isOrderedBefore: KeyType._lessThan) { - (visitor: inout TextFormatEncodingVisitor, key, value) throws -> () in - try KeyType.visitSingular(value: key, fieldNumber: 1, with: &visitor) - try visitor.visitSingularEnumField(value: value, fieldNumber: 2) - } - } - - mutating func visitMapField( - fieldType: _ProtobufMessageMap.Type, - value: _ProtobufMessageMap.BaseType, - fieldNumber: Int - ) throws { - try _visitMap(map: value, fieldNumber: fieldNumber, isOrderedBefore: KeyType._lessThan) { - (visitor: inout TextFormatEncodingVisitor, key, value) throws -> () in - try KeyType.visitSingular(value: key, fieldNumber: 1, with: &visitor) - try visitor.visitSingularMessageField(value: value, fieldNumber: 2) - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatScanner.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatScanner.swift deleted file mode 100644 index 0e27908..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TextFormatScanner.swift +++ /dev/null @@ -1,1248 +0,0 @@ -// Sources/SwiftProtobuf/TextFormatScanner.swift - Text format decoding -// -// Copyright (c) 2014 - 2019 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Test format decoding engine. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -private let asciiBell = UInt8(7) -private let asciiBackspace = UInt8(8) -private let asciiTab = UInt8(9) -private let asciiNewLine = UInt8(10) -private let asciiVerticalTab = UInt8(11) -private let asciiFormFeed = UInt8(12) -private let asciiCarriageReturn = UInt8(13) -private let asciiZero = UInt8(ascii: "0") -private let asciiOne = UInt8(ascii: "1") -private let asciiThree = UInt8(ascii: "3") -private let asciiSeven = UInt8(ascii: "7") -private let asciiNine = UInt8(ascii: "9") -private let asciiColon = UInt8(ascii: ":") -private let asciiPeriod = UInt8(ascii: ".") -private let asciiPlus = UInt8(ascii: "+") -private let asciiComma = UInt8(ascii: ",") -private let asciiSemicolon = UInt8(ascii: ";") -private let asciiDoubleQuote = UInt8(ascii: "\"") -private let asciiSingleQuote = UInt8(ascii: "\'") -private let asciiBackslash = UInt8(ascii: "\\") -private let asciiForwardSlash = UInt8(ascii: "/") -private let asciiHash = UInt8(ascii: "#") -private let asciiUnderscore = UInt8(ascii: "_") -private let asciiQuestionMark = UInt8(ascii: "?") -private let asciiSpace = UInt8(ascii: " ") -private let asciiOpenSquareBracket = UInt8(ascii: "[") -private let asciiCloseSquareBracket = UInt8(ascii: "]") -private let asciiOpenCurlyBracket = UInt8(ascii: "{") -private let asciiCloseCurlyBracket = UInt8(ascii: "}") -private let asciiOpenAngleBracket = UInt8(ascii: "<") -private let asciiCloseAngleBracket = UInt8(ascii: ">") -private let asciiMinus = UInt8(ascii: "-") -private let asciiLowerA = UInt8(ascii: "a") -private let asciiUpperA = UInt8(ascii: "A") -private let asciiLowerB = UInt8(ascii: "b") -private let asciiLowerE = UInt8(ascii: "e") -private let asciiUpperE = UInt8(ascii: "E") -private let asciiLowerF = UInt8(ascii: "f") -private let asciiUpperF = UInt8(ascii: "F") -private let asciiLowerI = UInt8(ascii: "i") -private let asciiLowerL = UInt8(ascii: "l") -private let asciiLowerN = UInt8(ascii: "n") -private let asciiLowerR = UInt8(ascii: "r") -private let asciiLowerS = UInt8(ascii: "s") -private let asciiLowerT = UInt8(ascii: "t") -private let asciiUpperT = UInt8(ascii: "T") -private let asciiLowerU = UInt8(ascii: "u") -private let asciiUpperU = UInt8(ascii: "U") -private let asciiLowerV = UInt8(ascii: "v") -private let asciiLowerX = UInt8(ascii: "x") -private let asciiLowerY = UInt8(ascii: "y") -private let asciiLowerZ = UInt8(ascii: "z") -private let asciiUpperZ = UInt8(ascii: "Z") - -private func fromHexDigit(_ c: UInt8) -> UInt8? { - if c >= asciiZero && c <= asciiNine { - return c - asciiZero - } - if c >= asciiUpperA && c <= asciiUpperF { - return c - asciiUpperA + UInt8(10) - } - if c >= asciiLowerA && c <= asciiLowerF { - return c - asciiLowerA + UInt8(10) - } - return nil -} - -private func uint32FromHexDigit(_ c: UInt8) -> UInt32? { - guard let u8 = fromHexDigit(c) else { - return nil - } - return UInt32(u8) -} - -// Protobuf Text encoding assumes that you're working directly -// in UTF-8. So this implementation converts the string to UTF8, -// then decodes it into a sequence of bytes, then converts -// it back into a string. -private func decodeString(_ s: String) -> String? { - - // Helper to read 4 hex digits as a UInt32 - func read4HexDigits(_ i: inout String.UTF8View.Iterator) -> UInt32? { - if let digit1 = i.next(), - let d1 = uint32FromHexDigit(digit1), - let digit2 = i.next(), - let d2 = uint32FromHexDigit(digit2), - let digit3 = i.next(), - let d3 = uint32FromHexDigit(digit3), - let digit4 = i.next(), - let d4 = uint32FromHexDigit(digit4) { - return (d1 << 12) + (d2 << 8) + (d3 << 4) + d4 - } - return nil - } - - var out = [UInt8]() - var bytes = s.utf8.makeIterator() - while let byte = bytes.next() { - switch byte { - case asciiBackslash: // backslash - if let escaped = bytes.next() { - switch escaped { - case asciiZero...asciiSeven: // 0...7 - // C standard allows 1, 2, or 3 octal digits. - let savedPosition = bytes - let digit1 = escaped - let digit1Value = digit1 - asciiZero - if let digit2 = bytes.next(), - digit2 >= asciiZero && digit2 <= asciiSeven { - let digit2Value = digit2 - asciiZero - let innerSavedPosition = bytes - if let digit3 = bytes.next(), - digit3 >= asciiZero && digit3 <= asciiSeven { - let digit3Value = digit3 - asciiZero - // The max octal digit is actually \377, but looking at the C++ - // protobuf code in strutil.cc:UnescapeCEscapeSequences(), it - // decodes with rollover, so just duplicate that behavior for - // consistency between languages. - let n = digit1Value &* 64 &+ digit2Value &* 8 &+ digit3Value - out.append(n) - } else { - let n = digit1Value * 8 + digit2Value - out.append(n) - bytes = innerSavedPosition - } - } else { - let n = digit1Value - out.append(n) - bytes = savedPosition - } - case asciiLowerU, asciiUpperU: // "u" - // \u - 4 hex digits, \U 8 hex digits: - guard let first = read4HexDigits(&bytes) else { return nil } - var codePoint = first - if escaped == asciiUpperU { - guard let second = read4HexDigits(&bytes) else { return nil } - codePoint = (codePoint << 16) + second - } - switch codePoint { - case 0...0x7f: - // 1 byte encoding - out.append(UInt8(truncatingIfNeeded: codePoint)) - case 0x80...0x7ff: - // 2 byte encoding - out.append(0xC0 + UInt8(truncatingIfNeeded: codePoint >> 6)) - out.append(0x80 + UInt8(truncatingIfNeeded: codePoint & 0x3F)) - case 0x800...0xffff: - // 3 byte encoding - out.append(0xE0 + UInt8(truncatingIfNeeded: codePoint >> 12)) - out.append(0x80 + UInt8(truncatingIfNeeded: (codePoint >> 6) & 0x3F)) - out.append(0x80 + UInt8(truncatingIfNeeded: codePoint & 0x3F)) - case 0x10000...0x10FFFF: - // 4 byte encoding - out.append(0xF0 + UInt8(truncatingIfNeeded: codePoint >> 18)) - out.append(0x80 + UInt8(truncatingIfNeeded: (codePoint >> 12) & 0x3F)) - out.append(0x80 + UInt8(truncatingIfNeeded: (codePoint >> 6) & 0x3F)) - out.append(0x80 + UInt8(truncatingIfNeeded: codePoint & 0x3F)) - default: - return nil - } - case asciiLowerX: // "x" - // Unlike C/C++, protobuf only allows 1 or 2 digits here: - if let byte = bytes.next(), let digit = fromHexDigit(byte) { - var n = digit - let savedPosition = bytes - if let byte = bytes.next(), let digit = fromHexDigit(byte) { - n = n &* 16 + digit - } else { - // No second digit; reset the iterator - bytes = savedPosition - } - out.append(n) - } else { - return nil // Hex escape must have at least 1 digit - } - case asciiLowerA: // \a - out.append(asciiBell) - case asciiLowerB: // \b - out.append(asciiBackspace) - case asciiLowerF: // \f - out.append(asciiFormFeed) - case asciiLowerN: // \n - out.append(asciiNewLine) - case asciiLowerR: // \r - out.append(asciiCarriageReturn) - case asciiLowerT: // \t - out.append(asciiTab) - case asciiLowerV: // \v - out.append(asciiVerticalTab) - case asciiDoubleQuote, - asciiSingleQuote, - asciiQuestionMark, - asciiBackslash: // " ' ? \ - out.append(escaped) - default: - return nil // Unrecognized escape - } - } else { - return nil // Input ends with backslash - } - default: - out.append(byte) - } - } - // There has got to be an easier way to convert a [UInt8] into a String. - return out.withUnsafeBufferPointer { ptr in - if let addr = ptr.baseAddress { - return utf8ToString(bytes: addr, count: ptr.count) - } else { - return String() - } - } -} - -/// -/// TextFormatScanner has no public members. -/// -internal struct TextFormatScanner { - internal var extensions: ExtensionMap? - private var p: UnsafeRawPointer - private var end: UnsafeRawPointer - private var doubleParser = DoubleParser() - - private let options: TextFormatDecodingOptions - internal var recursionBudget: Int - - internal var complete: Bool { - mutating get { - return p == end - } - } - - internal init( - utf8Pointer: UnsafeRawPointer, - count: Int, - options: TextFormatDecodingOptions, - extensions: ExtensionMap? = nil - ) { - p = utf8Pointer - end = p + count - self.extensions = extensions - self.options = options - // Since the root message doesn't start with a `skipObjectStart`, the - // budget starts with one less depth to cover that top message. - recursionBudget = options.messageDepthLimit - 1 - skipWhitespace() - } - - internal mutating func incrementRecursionDepth() throws { - recursionBudget -= 1 - if recursionBudget < 0 { - throw TextFormatDecodingError.messageDepthLimit - } - } - - private mutating func decrementRecursionDepth() { - recursionBudget += 1 - // This should never happen, if it does, something is probably - // corrupting memory, and simply throwing doesn't make much sense. - if recursionBudget > options.messageDepthLimit { - fatalError("Somehow TextFormatDecoding unwound more objects than it started") - } - } - - /// Skip whitespace - private mutating func skipWhitespace() { - while p != end { - let u = p[0] - switch u { - case asciiSpace, - asciiTab, - asciiNewLine, - asciiCarriageReturn: // space, tab, NL, CR - p += 1 - case asciiHash: // # comment - p += 1 - while p != end { - // Skip until end of line - let c = p[0] - p += 1 - if c == asciiNewLine || c == asciiCarriageReturn { - break - } - } - default: - return - } - } - } - - /// Return a buffer containing the raw UTF8 for an identifier. - /// Assumes that you already know the current byte is a valid - /// start of identifier. - private mutating func parseUTF8Identifier() -> UnsafeRawBufferPointer { - let start = p - loop: while p != end { - let c = p[0] - switch c { - case asciiLowerA...asciiLowerZ, - asciiUpperA...asciiUpperZ, - asciiZero...asciiNine, - asciiUnderscore: - p += 1 - default: - break loop - } - } - let s = UnsafeRawBufferPointer(start: start, count: p - start) - skipWhitespace() - return s - } - - /// Return a String containing the next identifier. - private mutating func parseIdentifier() -> String { - let buff = parseUTF8Identifier() - let s = utf8ToString(bytes: buff.baseAddress!, count: buff.count) - // Force-unwrap is OK: we never have invalid UTF8 at this point. - return s! - } - - /// Parse the rest of an [extension_field_name] in the input, assuming the - /// initial "[" character has already been read (and is in the prefix) - /// This is also used for AnyURL, so we include "/", "." - private mutating func parseExtensionKey() -> String? { - let start = p - if p == end { - return nil - } - let c = p[0] - switch c { - case asciiLowerA...asciiLowerZ, asciiUpperA...asciiUpperZ: - p += 1 - default: - return nil - } - while p != end { - let c = p[0] - switch c { - case asciiLowerA...asciiLowerZ, - asciiUpperA...asciiUpperZ, - asciiZero...asciiNine, - asciiUnderscore, - asciiPeriod, - asciiForwardSlash: - p += 1 - case asciiCloseSquareBracket: // ] - return utf8ToString(bytes: start, count: p - start) - default: - return nil - } - } - return nil - } - - /// Scan a string that encodes a byte field, return a count of - /// the number of bytes that should be decoded from it - private mutating func validateAndCountBytesFromString(terminator: UInt8, sawBackslash: inout Bool) throws -> Int { - var count = 0 - let start = p - sawBackslash = false - while p != end { - let byte = p[0] - p += 1 - if byte == terminator { - p = start - return count - } - switch byte { - case asciiNewLine, asciiCarriageReturn: - // Can't have a newline in the middle of a bytes string. - throw TextFormatDecodingError.malformedText - case asciiBackslash: // "\\" - sawBackslash = true - if p != end { - let escaped = p[0] - p += 1 - switch escaped { - case asciiZero...asciiSeven: // '0'...'7' - // C standard allows 1, 2, or 3 octal digits. - if p != end, p[0] >= asciiZero, p[0] <= asciiSeven { - p += 1 - if p != end, p[0] >= asciiZero, p[0] <= asciiSeven { - if escaped > asciiThree { - // Out of range octal: three digits and first digit is greater than 3 - throw TextFormatDecodingError.malformedText - } - p += 1 - } - } - count += 1 - case asciiLowerU, asciiUpperU: // 'u' or 'U' unicode escape - let numDigits = (escaped == asciiLowerU) ? 4 : 8 - guard (end - p) >= numDigits else { - throw TextFormatDecodingError.malformedText // unicode escape must 4/8 digits - } - var codePoint: UInt32 = 0 - for i in 0.. 0 { - while p[0] != terminator { - let byte = p[0] - p += 1 - switch byte { - case asciiBackslash: // "\\" - let escaped = p[0] - p += 1 - switch escaped { - case asciiZero...asciiSeven: // '0'...'7' - // C standard allows 1, 2, or 3 octal digits. - let digit1Value = escaped - asciiZero - let digit2 = p[0] - if digit2 >= asciiZero, digit2 <= asciiSeven { - p += 1 - let digit2Value = digit2 - asciiZero - let digit3 = p[0] - if digit3 >= asciiZero, digit3 <= asciiSeven { - p += 1 - let digit3Value = digit3 - asciiZero - out[0] = digit1Value &* 64 + digit2Value * 8 + digit3Value - out += 1 - } else { - out[0] = digit1Value * 8 + digit2Value - out += 1 - } - } else { - out[0] = digit1Value - out += 1 - } - case asciiLowerU, asciiUpperU: - let numDigits = (escaped == asciiLowerU) ? 4 : 8 - var codePoint: UInt32 = 0 - for i in 0..> 6) - out[1] = 0x80 + UInt8(truncatingIfNeeded: codePoint & 0x3F) - out += 2 - case 0x800...0xffff: - // 3 byte encoding - out[0] = 0xE0 + UInt8(truncatingIfNeeded: codePoint >> 12) - out[1] = 0x80 + UInt8(truncatingIfNeeded: (codePoint >> 6) & 0x3F) - out[2] = 0x80 + UInt8(truncatingIfNeeded: codePoint & 0x3F) - out += 3 - case 0x10000...0x10FFFF: - // 4 byte encoding - out[0] = 0xF0 + UInt8(truncatingIfNeeded: codePoint >> 18) - out[1] = 0x80 + UInt8(truncatingIfNeeded: (codePoint >> 12) & 0x3F) - out[2] = 0x80 + UInt8(truncatingIfNeeded: (codePoint >> 6) & 0x3F) - out[3] = 0x80 + UInt8(truncatingIfNeeded: codePoint & 0x3F) - out += 4 - default: - preconditionFailure() // Already validated, can't happen - } - case asciiLowerX: // 'x' hexadecimal escape - // We already validated, so we know there's at least one digit: - var n = fromHexDigit(p[0])! - p += 1 - if let digit = fromHexDigit(p[0]) { - n = n &* 16 &+ digit - p += 1 - } - out[0] = n - out += 1 - case asciiLowerA: // \a ("alert") - out[0] = asciiBell - out += 1 - case asciiLowerB: // \b - out[0] = asciiBackspace - out += 1 - case asciiLowerF: // \f - out[0] = asciiFormFeed - out += 1 - case asciiLowerN: // \n - out[0] = asciiNewLine - out += 1 - case asciiLowerR: // \r - out[0] = asciiCarriageReturn - out += 1 - case asciiLowerT: // \t - out[0] = asciiTab - out += 1 - case asciiLowerV: // \v - out[0] = asciiVerticalTab - out += 1 - default: - out[0] = escaped - out += 1 - } - default: - out[0] = byte - out += 1 - } - } - p += 1 // Consume terminator - } - } - } - - /// Assumes the leading quote has already been consumed - private mutating func parseStringSegment(terminator: UInt8) -> String? { - let start = p - var sawBackslash = false - while p != end { - let c = p[0] - if c == terminator { - let s = utf8ToString(bytes: start, count: p - start) - p += 1 - skipWhitespace() - if let s = s, sawBackslash { - return decodeString(s) - } else { - return s - } - } - p += 1 - if c == asciiBackslash { // \ - if p == end { - return nil - } - sawBackslash = true - p += 1 - } - if c == asciiNewLine || c == asciiCarriageReturn { - // Can't have a newline in the middle of a raw string. - return nil - } - } - return nil // Unterminated quoted string - } - - internal mutating func nextUInt() throws -> UInt64 { - if p == end { - throw TextFormatDecodingError.malformedNumber - } - let c = p[0] - p += 1 - if c == asciiZero { // leading '0' precedes octal or hex - if p == end { - // The TextFormat ended with a field value of zero. - return 0 - } - if p[0] == asciiLowerX { // 'x' => hex - p += 1 - var n: UInt64 = 0 - while p != end { - let digit = p[0] - let val: UInt64 - switch digit { - case asciiZero...asciiNine: // 0...9 - val = UInt64(digit - asciiZero) - case asciiLowerA...asciiLowerF: // a...f - val = UInt64(digit - asciiLowerA + 10) - case asciiUpperA...asciiUpperF: - val = UInt64(digit - asciiUpperA + 10) - case asciiLowerU: // trailing 'u' - p += 1 - skipWhitespace() - return n - default: - skipWhitespace() - return n - } - if n > UInt64.max / 16 { - throw TextFormatDecodingError.malformedNumber - } - p += 1 - n = n * 16 + val - } - skipWhitespace() - return n - } else { // octal - var n: UInt64 = 0 - while p != end { - let digit = p[0] - if digit == asciiLowerU { // trailing 'u' - p += 1 - skipWhitespace() - return n - } - if digit < asciiZero || digit > asciiSeven { - skipWhitespace() - return n // not octal digit - } - let val = UInt64(digit - asciiZero) - if n > UInt64.max / 8 { - throw TextFormatDecodingError.malformedNumber - } - p += 1 - n = n * 8 + val - } - skipWhitespace() - return n - } - } else if c > asciiZero && c <= asciiNine { // 1...9 - var n = UInt64(c - asciiZero) - while p != end { - let digit = p[0] - if digit == asciiLowerU { // trailing 'u' - p += 1 - skipWhitespace() - return n - } - if digit < asciiZero || digit > asciiNine { - skipWhitespace() - return n // not a digit - } - let val = UInt64(digit - asciiZero) - if n > UInt64.max / 10 || n * 10 > UInt64.max - val { - throw TextFormatDecodingError.malformedNumber - } - p += 1 - n = n * 10 + val - } - skipWhitespace() - return n - } - throw TextFormatDecodingError.malformedNumber - } - - internal mutating func nextSInt() throws -> Int64 { - if p == end { - throw TextFormatDecodingError.malformedNumber - } - let c = p[0] - if c == asciiMinus { // - - p += 1 - if p == end { - throw TextFormatDecodingError.malformedNumber - } - // character after '-' must be digit - let digit = p[0] - if digit < asciiZero || digit > asciiNine { - throw TextFormatDecodingError.malformedNumber - } - let n = try nextUInt() - let limit: UInt64 = 0x8000000000000000 // -Int64.min - if n >= limit { - if n > limit { - // Too large negative number - throw TextFormatDecodingError.malformedNumber - } else { - return Int64.min // Special case for Int64.min - } - } - return -Int64(bitPattern: n) - } else { - let n = try nextUInt() - if n > UInt64(bitPattern: Int64.max) { - throw TextFormatDecodingError.malformedNumber - } - return Int64(bitPattern: n) - } - } - - internal mutating func nextStringValue() throws -> String { - var result: String - skipWhitespace() - if p == end { - throw TextFormatDecodingError.malformedText - } - let c = p[0] - if c != asciiSingleQuote && c != asciiDoubleQuote { - throw TextFormatDecodingError.malformedText - } - p += 1 - if let s = parseStringSegment(terminator: c) { - result = s - } else { - throw TextFormatDecodingError.malformedText - } - - while true { - if p == end { - return result - } - let c = p[0] - if c != asciiSingleQuote && c != asciiDoubleQuote { - return result - } - p += 1 - if let s = parseStringSegment(terminator: c) { - result.append(s) - } else { - throw TextFormatDecodingError.malformedText - } - } - } - - /// Protobuf Text Format allows a single bytes field to - /// contain multiple quoted strings. The values - /// are separately decoded and then concatenated: - /// field1: "bytes" 'more bytes' - /// "and even more bytes" - internal mutating func nextBytesValue() throws -> Data { - // Get the first string's contents - var result: Data - skipWhitespace() - if p == end { - throw TextFormatDecodingError.malformedText - } - let c = p[0] - if c != asciiSingleQuote && c != asciiDoubleQuote { - throw TextFormatDecodingError.malformedText - } - p += 1 - var sawBackslash = false - let n = try validateAndCountBytesFromString(terminator: c, sawBackslash: &sawBackslash) - if sawBackslash { - result = Data(count: n) - parseBytesFromString(terminator: c, into: &result) - } else { - result = Data(bytes: p, count: n) - p += n + 1 // Skip string body + close quote - } - - // If there are more strings, decode them - // and append to the result: - while true { - skipWhitespace() - if p == end { - return result - } - let c = p[0] - if c != asciiSingleQuote && c != asciiDoubleQuote { - return result - } - p += 1 - var sawBackslash = false - let n = try validateAndCountBytesFromString(terminator: c, sawBackslash: &sawBackslash) - if sawBackslash { - var b = Data(count: n) - parseBytesFromString(terminator: c, into: &b) - result.append(b) - } else { - result.append(Data(bytes: p, count: n)) - p += n + 1 // Skip string body + close quote - } - } - } - - // Tries to identify a sequence of UTF8 characters - // that represent a numeric floating-point value. - private mutating func tryParseFloatString() -> Double? { - guard p != end else {return nil} - let start = p - var c = p[0] - if c == asciiMinus { - p += 1 - guard p != end else {p = start; return nil} - c = p[0] - } - switch c { - case asciiZero: // '0' as first character is not allowed followed by digit - p += 1 - guard p != end else {break} - c = p[0] - if c >= asciiZero && c <= asciiNine { - p = start - return nil - } - case asciiPeriod: // '.' as first char only if followed by digit - p += 1 - guard p != end else {p = start; return nil} - c = p[0] - if c < asciiZero || c > asciiNine { - p = start - return nil - } - case asciiOne...asciiNine: - break - default: - p = start - return nil - } - loop: while p != end { - let c = p[0] - switch c { - case asciiZero...asciiNine, - asciiPeriod, - asciiPlus, - asciiMinus, - asciiLowerE, - asciiUpperE: // 0...9, ., +, -, e, E - p += 1 - case asciiLowerF: // f - // proto1 allowed floats to be suffixed with 'f' - let d = doubleParser.utf8ToDouble(bytes: UnsafeRawBufferPointer(start: start, count: p - start)) - // Just skip the 'f' - p += 1 - skipWhitespace() - return d - default: - break loop - } - } - let d = doubleParser.utf8ToDouble(bytes: UnsafeRawBufferPointer(start: start, count: p - start)) - skipWhitespace() - return d - } - - // Skip specified characters if they all match - private mutating func skipOptionalCharacters(bytes: [UInt8]) { - let start = p - for b in bytes { - if p == end || p[0] != b { - p = start - return - } - p += 1 - } - } - - // Skip following keyword if it matches (case-insensitively) - // the given keyword (specified as a series of bytes). - private mutating func skipOptionalKeyword(bytes: [UInt8]) -> Bool { - let start = p - for b in bytes { - if p == end { - p = start - return false - } - var c = p[0] - if c >= asciiUpperA && c <= asciiUpperZ { - // Convert to lower case - // (Protobuf text keywords are case insensitive) - c += asciiLowerA - asciiUpperA - } - if c != b { - p = start - return false - } - p += 1 - } - if p == end { - return true - } - let c = p[0] - if ((c >= asciiUpperA && c <= asciiUpperZ) - || (c >= asciiLowerA && c <= asciiLowerZ)) { - p = start - return false - } - skipWhitespace() - return true - } - - // If the next token is the identifier "nan", return true. - private mutating func skipOptionalNaN() -> Bool { - return skipOptionalKeyword(bytes: - [asciiLowerN, asciiLowerA, asciiLowerN]) - } - - // If the next token is a recognized spelling of "infinity", - // return Float.infinity or -Float.infinity - private mutating func skipOptionalInfinity() -> Float? { - if p == end { - return nil - } - let c = p[0] - let negated: Bool - if c == asciiMinus { - negated = true - p += 1 - } else { - negated = false - } - let inf = [asciiLowerI, asciiLowerN, asciiLowerF] - let infinity = [asciiLowerI, asciiLowerN, asciiLowerF, asciiLowerI, - asciiLowerN, asciiLowerI, asciiLowerT, asciiLowerY] - if (skipOptionalKeyword(bytes: inf) - || skipOptionalKeyword(bytes: infinity)) { - return negated ? -Float.infinity : Float.infinity - } - return nil - } - - internal mutating func nextFloat() throws -> Float { - if let d = tryParseFloatString() { - return Float(d) - } - if skipOptionalNaN() { - return Float.nan - } - if let inf = skipOptionalInfinity() { - return inf - } - throw TextFormatDecodingError.malformedNumber - } - - internal mutating func nextDouble() throws -> Double { - if let d = tryParseFloatString() { - return d - } - if skipOptionalNaN() { - return Double.nan - } - if let inf = skipOptionalInfinity() { - return Double(inf) - } - throw TextFormatDecodingError.malformedNumber - } - - internal mutating func nextBool() throws -> Bool { - skipWhitespace() - if p == end { - throw TextFormatDecodingError.malformedText - } - let c = p[0] - p += 1 - let result: Bool - switch c { - case asciiZero: - result = false - case asciiOne: - result = true - case asciiLowerF, asciiUpperF: - if p != end { - let alse = [asciiLowerA, asciiLowerL, asciiLowerS, asciiLowerE] - skipOptionalCharacters(bytes: alse) - } - result = false - case asciiLowerT, asciiUpperT: - if p != end { - let rue = [asciiLowerR, asciiLowerU, asciiLowerE] - skipOptionalCharacters(bytes: rue) - } - result = true - default: - throw TextFormatDecodingError.malformedText - } - if p == end { - return result - } - switch p[0] { - case asciiSpace, - asciiTab, - asciiNewLine, - asciiCarriageReturn, - asciiHash, - asciiComma, - asciiSemicolon, - asciiCloseSquareBracket, - asciiCloseCurlyBracket, - asciiCloseAngleBracket: - skipWhitespace() - return result - default: - throw TextFormatDecodingError.malformedText - } - } - - internal mutating func nextOptionalEnumName() throws -> UnsafeRawBufferPointer? { - skipWhitespace() - if p == end { - throw TextFormatDecodingError.malformedText - } - switch p[0] { - case asciiLowerA...asciiLowerZ, asciiUpperA...asciiUpperZ: - return parseUTF8Identifier() - default: - return nil - } - } - - /// Any URLs are syntactically (almost) identical to extension - /// keys, so we share the code for those. - internal mutating func nextOptionalAnyURL() throws -> String? { - return try nextOptionalExtensionKey() - } - - /// Returns next extension key or nil if end-of-input or - /// if next token is not an extension key. - /// - /// Throws an error if the next token starts with '[' but - /// cannot be parsed as an extension key. - /// - /// Note: This accepts / characters to support Any URL parsing. - /// Technically, Any URLs can contain / characters and extension - /// key names cannot. But in practice, accepting / chracters for - /// extension keys works fine, since the result just gets rejected - /// when the key is looked up. - internal mutating func nextOptionalExtensionKey() throws -> String? { - skipWhitespace() - if p == end { - return nil - } - if p[0] == asciiOpenSquareBracket { // [ - p += 1 - if let s = parseExtensionKey() { - if p == end || p[0] != asciiCloseSquareBracket { - throw TextFormatDecodingError.malformedText - } - // Skip ] - p += 1 - skipWhitespace() - return s - } else { - throw TextFormatDecodingError.malformedText - } - } - return nil - } - - /// Returns text of next regular key or nil if end-of-input. - /// This considers an extension key [keyname] to be an - /// error, so call nextOptionalExtensionKey first if you - /// want to handle extension keys. - /// - /// This is only used by map parsing; we should be able to - /// rework that to use nextFieldNumber instead. - internal mutating func nextKey() throws -> String? { - skipWhitespace() - if p == end { - return nil - } - let c = p[0] - switch c { - case asciiOpenSquareBracket: // [ - throw TextFormatDecodingError.malformedText - case asciiLowerA...asciiLowerZ, - asciiUpperA...asciiUpperZ, - asciiOne...asciiNine: // a...z, A...Z, 1...9 - return parseIdentifier() - default: - throw TextFormatDecodingError.malformedText - } - } - - /// Parse a field name, look it up, and return the corresponding - /// field number. - /// - /// returns nil at end-of-input - /// - /// Throws if field name cannot be parsed or if field name is - /// unknown. - /// - /// This function accounts for as much as 2/3 of the total run - /// time of the entire parse. - internal mutating func nextFieldNumber(names: _NameMap) throws -> Int? { - if p == end { - return nil - } - let c = p[0] - switch c { - case asciiLowerA...asciiLowerZ, - asciiUpperA...asciiUpperZ: // a...z, A...Z - let key = parseUTF8Identifier() - if let fieldNumber = names.number(forProtoName: key) { - return fieldNumber - } else { - throw TextFormatDecodingError.unknownField - } - case asciiOne...asciiNine: // 1-9 (field numbers are 123, not 0123) - var fieldNum = Int(c) - Int(asciiZero) - p += 1 - while p != end { - let c = p[0] - if c >= asciiZero && c <= asciiNine { - fieldNum = fieldNum &* 10 &+ (Int(c) - Int(asciiZero)) - } else { - break - } - p += 1 - } - skipWhitespace() - if names.names(for: fieldNum) != nil { - return fieldNum - } else { - // It was a number that isn't a known field. - // The C++ version (TextFormat::Parser::ParserImpl::ConsumeField()), - // supports an option to file or skip the field's value (this is true - // of unknown names or numbers). - throw TextFormatDecodingError.unknownField - } - default: - break - } - throw TextFormatDecodingError.malformedText - } - - private mutating func skipRequiredCharacter(_ c: UInt8) throws { - skipWhitespace() - if p != end && p[0] == c { - p += 1 - skipWhitespace() - } else { - throw TextFormatDecodingError.malformedText - } - } - - internal mutating func skipRequiredComma() throws { - try skipRequiredCharacter(asciiComma) - } - - internal mutating func skipRequiredColon() throws { - try skipRequiredCharacter(asciiColon) - } - - private mutating func skipOptionalCharacter(_ c: UInt8) -> Bool { - if p != end && p[0] == c { - p += 1 - skipWhitespace() - return true - } - return false - } - - internal mutating func skipOptionalColon() -> Bool { - return skipOptionalCharacter(asciiColon) - } - - internal mutating func skipOptionalEndArray() -> Bool { - return skipOptionalCharacter(asciiCloseSquareBracket) - } - - internal mutating func skipOptionalBeginArray() -> Bool { - return skipOptionalCharacter(asciiOpenSquareBracket) - } - - internal mutating func skipOptionalObjectEnd(_ c: UInt8) -> Bool { - let result = skipOptionalCharacter(c) - if result { - decrementRecursionDepth() - } - return result - } - - internal mutating func skipOptionalSeparator() { - if p != end { - let c = p[0] - if c == asciiComma || c == asciiSemicolon { // comma or semicolon - p += 1 - skipWhitespace() - } - } - } - - /// Returns the character that should end this field. - /// E.g., if object starts with "{", returns "}" - internal mutating func skipObjectStart() throws -> UInt8 { - try incrementRecursionDepth() - if p != end { - let c = p[0] - p += 1 - skipWhitespace() - switch c { - case asciiOpenCurlyBracket: // { - return asciiCloseCurlyBracket // } - case asciiOpenAngleBracket: // < - return asciiCloseAngleBracket // > - default: - break - } - } - throw TextFormatDecodingError.malformedText - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TimeUtils.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TimeUtils.swift deleted file mode 100644 index a7d142b..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/TimeUtils.swift +++ /dev/null @@ -1,65 +0,0 @@ -// Sources/SwiftProtobuf/TimeUtils.swift - Generally useful time/calendar functions -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Generally useful time/calendar functions and constants -/// -// ----------------------------------------------------------------------------- - -let minutesPerDay: Int32 = 1440 -let minutesPerHour: Int32 = 60 -let secondsPerDay: Int32 = 86400 -let secondsPerHour: Int32 = 3600 -let secondsPerMinute: Int32 = 60 -let nanosPerSecond: Int32 = 1000000000 - -internal func timeOfDayFromSecondsSince1970(seconds: Int64) -> (hh: Int32, mm: Int32, ss: Int32) { - let secondsSinceMidnight = Int32(mod(seconds, Int64(secondsPerDay))) - let ss = mod(secondsSinceMidnight, secondsPerMinute) - let mm = mod(div(secondsSinceMidnight, secondsPerMinute), minutesPerHour) - let hh = Int32(div(secondsSinceMidnight, secondsPerHour)) - - return (hh: hh, mm: mm, ss: ss) -} - -internal func julianDayNumberFromSecondsSince1970(seconds: Int64) -> Int64 { - // January 1, 1970 is Julian Day Number 2440588. - // See http://aa.usno.navy.mil/faq/docs/JD_Formula.php - return div(seconds + 2440588 * Int64(secondsPerDay), Int64(secondsPerDay)) -} - -internal func gregorianDateFromSecondsSince1970(seconds: Int64) -> (YY: Int32, MM: Int32, DD: Int32) { - // The following implements Richards' algorithm (see the Wikipedia article - // for "Julian day"). - // If you touch this code, please test it exhaustively by playing with - // Test_Timestamp.testJSON_range. - - let JJ = julianDayNumberFromSecondsSince1970(seconds: seconds) - let f = JJ + 1401 + div(div(4 * JJ + 274277, 146097) * 3, 4) - 38 - let e = 4 * f + 3 - let g = Int64(div(mod(e, 1461), 4)) - let h = 5 * g + 2 - let DD = div(mod(h, 153), 5) + 1 - let MM = mod(div(h, 153) + 2, 12) + 1 - let YY = div(e, 1461) - 4716 + div(12 + 2 - MM, 12) - - return (YY: Int32(YY), MM: Int32(MM), DD: Int32(DD)) -} - -internal func nanosToString(nanos: Int32) -> String { - if nanos == 0 { - return "" - } else if nanos % 1000000 == 0 { - return ".\(threeDigit(abs(nanos) / 1000000))" - } else if nanos % 1000 == 0 { - return ".\(sixDigit(abs(nanos) / 1000))" - } else { - return ".\(nineDigit(abs(nanos)))" - } -} \ No newline at end of file diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnknownStorage.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnknownStorage.swift deleted file mode 100644 index f6535f6..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnknownStorage.swift +++ /dev/null @@ -1,46 +0,0 @@ -// Sources/SwiftProtobuf/UnknownStorage.swift - Handling unknown fields -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Proto2 binary coding requires storing and recoding of unknown fields. -/// This simple support class handles that requirement. A property of this type -/// is compiled into every proto2 message. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// Contains any unknown fields in a decoded message; that is, fields that were -/// sent on the wire but were not recognized by the generated message -/// implementation or were valid field numbers but with mismatching wire -/// formats (for example, a field encoded as a varint when a fixed32 integer -/// was expected). -public struct UnknownStorage: Equatable { - /// The raw protocol buffer binary-encoded bytes that represent the unknown - /// fields of a decoded message. - public private(set) var data = Data() - -#if !swift(>=4.1) - public static func ==(lhs: UnknownStorage, rhs: UnknownStorage) -> Bool { - return lhs.data == rhs.data - } -#endif - - public init() {} - - internal mutating func append(protobufData: Data) { - data.append(protobufData) - } - - public func traverse(visitor: inout V) throws { - if !data.isEmpty { - try visitor.visitUnknown(bytes: data) - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnsafeBufferPointer+Shims.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnsafeBufferPointer+Shims.swift deleted file mode 100644 index 64f3b81..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnsafeBufferPointer+Shims.swift +++ /dev/null @@ -1,37 +0,0 @@ -// Sources/SwiftProtobuf/UnsafeBufferPointer+Shims.swift - Shims for UnsafeBufferPointer -// -// Copyright (c) 2019 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Shims for UnsafeBufferPointer -/// -// ----------------------------------------------------------------------------- - - -extension UnsafeMutableBufferPointer { - #if !swift(>=4.2) - internal static func allocate(capacity: Int) -> UnsafeMutableBufferPointer { - let pointer = UnsafeMutablePointer.allocate(capacity: capacity) - return UnsafeMutableBufferPointer(start: pointer, count: capacity) - } - #endif - - #if !swift(>=4.1) - internal func deallocate() { - self.baseAddress?.deallocate(capacity: self.count) - } - #endif -} - -extension UnsafeMutableRawBufferPointer { - #if !swift(>=4.1) - internal func copyMemory(from source: C) where C.Element == UInt8 { - self.copyBytes(from: source) - } - #endif -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnsafeRawPointer+Shims.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnsafeRawPointer+Shims.swift deleted file mode 100644 index 9818bce..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/UnsafeRawPointer+Shims.swift +++ /dev/null @@ -1,45 +0,0 @@ -// Sources/SwiftProtobuf/UnsafeRawPointer+Shims.swift - Shims for UnsafeRawPointer and friends -// -// Copyright (c) 2019 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Shims for UnsafeRawPointer and friends. -/// -// ----------------------------------------------------------------------------- - - -extension UnsafeRawPointer { - /// A shim subscript for UnsafeRawPointer aiming to maintain code consistency. - /// - /// We can remove this shim when we rewrite the code to use buffer pointers. - internal subscript(_ offset: Int) -> UInt8 { - get { - return self.load(fromByteOffset: offset, as: UInt8.self) - } - } -} - -extension UnsafeMutableRawPointer { - /// A shim subscript for UnsafeMutableRawPointer aiming to maintain code consistency. - /// - /// We can remove this shim when we rewrite the code to use buffer pointers. - internal subscript(_ offset: Int) -> UInt8 { - get { - return self.load(fromByteOffset: offset, as: UInt8.self) - } - set { - self.storeBytes(of: newValue, toByteOffset: offset, as: UInt8.self) - } - } - - #if !swift(>=4.1) - internal mutating func copyMemory(from source: UnsafeRawPointer, byteCount: Int) { - self.copyBytes(from: source, count: byteCount) - } - #endif -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Varint.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Varint.swift deleted file mode 100644 index d928d93..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Varint.swift +++ /dev/null @@ -1,108 +0,0 @@ -// Sources/SwiftProtobuf/Varint.swift - Varint encoding/decoding helpers -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Helper functions to varint-encode and decode integers. -/// -// ----------------------------------------------------------------------------- - - -/// Contains helper methods to varint-encode and decode integers. -internal enum Varint { - - /// Computes the number of bytes that would be needed to store a 32-bit varint. - /// - /// - Parameter value: The number whose varint size should be calculated. - /// - Returns: The size, in bytes, of the 32-bit varint. - static func encodedSize(of value: UInt32) -> Int { - if (value & (~0 << 7)) == 0 { - return 1 - } - if (value & (~0 << 14)) == 0 { - return 2 - } - if (value & (~0 << 21)) == 0 { - return 3 - } - if (value & (~0 << 28)) == 0 { - return 4 - } - return 5 - } - - /// Computes the number of bytes that would be needed to store a signed 32-bit varint, if it were - /// treated as an unsigned integer with the same bit pattern. - /// - /// - Parameter value: The number whose varint size should be calculated. - /// - Returns: The size, in bytes, of the 32-bit varint. - static func encodedSize(of value: Int32) -> Int { - if value >= 0 { - return encodedSize(of: UInt32(bitPattern: value)) - } else { - // Must sign-extend. - return encodedSize(of: Int64(value)) - } - } - - /// Computes the number of bytes that would be needed to store a 64-bit varint. - /// - /// - Parameter value: The number whose varint size should be calculated. - /// - Returns: The size, in bytes, of the 64-bit varint. - static func encodedSize(of value: Int64) -> Int { - // Handle two common special cases up front. - if (value & (~0 << 7)) == 0 { - return 1 - } - if value < 0 { - return 10 - } - - // Divide and conquer the remaining eight cases. - var value = value - var n = 2 - - if (value & (~0 << 35)) != 0 { - n += 4 - value >>= 28 - } - if (value & (~0 << 21)) != 0 { - n += 2 - value >>= 14 - } - if (value & (~0 << 14)) != 0 { - n += 1 - } - return n - } - - /// Computes the number of bytes that would be needed to store an unsigned 64-bit varint, if it - /// were treated as a signed integer witht he same bit pattern. - /// - /// - Parameter value: The number whose varint size should be calculated. - /// - Returns: The size, in bytes, of the 64-bit varint. - static func encodedSize(of value: UInt64) -> Int { - return encodedSize(of: Int64(bitPattern: value)) - } - - /// Counts the number of distinct varints in a packed byte buffer. - static func countVarintsInBuffer(start: UnsafeRawPointer, count: Int) -> Int { - // We don't need to decode all the varints to count how many there - // are. Just observe that every varint has exactly one byte with - // value < 128. So we just count those... - var n = 0 - var ints = 0 - while n < count { - if start.load(fromByteOffset: n, as: UInt8.self) < 128 { - ints += 1 - } - n += 1 - } - return ints - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Version.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Version.swift deleted file mode 100644 index f257855..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Version.swift +++ /dev/null @@ -1,28 +0,0 @@ -// Sources/SwiftProtobuf/Version.swift - Runtime Version info -// -// Copyright (c) 2014 - 2017 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// A interface for exposing the version of the runtime. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -// Expose version information about the library. -public struct Version { - /// Major version. - public static let major = 1 - /// Minor version. - public static let minor = 17 - /// Revision number. - public static let revision = 0 - - /// String form of the version number. - public static let versionString = "\(major).\(minor).\(revision)" -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Visitor.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Visitor.swift deleted file mode 100644 index b41c7c9..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/Visitor.swift +++ /dev/null @@ -1,725 +0,0 @@ -// Sources/SwiftProtobuf/Visitor.swift - Basic serialization machinery -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Protocol for traversing the object tree. -/// -/// This is used by: -/// = Protobuf serialization -/// = JSON serialization (with some twists to account for specialty JSON -/// encodings) -/// = Protobuf text serialization -/// = Hashable computation -/// -/// Conceptually, serializers create visitor objects that are -/// then passed recursively to every message and field via generated -/// 'traverse' methods. The details get a little involved due to -/// the need to allow particular messages to override particular -/// behaviors for specific encodings, but the general idea is quite simple. -/// -// ----------------------------------------------------------------------------- - -import Foundation - -/// This is the key interface used by the generated `traverse()` methods -/// used for serialization. It is implemented by each serialization protocol: -/// Protobuf Binary, Protobuf Text, JSON, and the Hash encoder. -public protocol Visitor { - - /// Called for each non-repeated float field - /// - /// A default implementation is provided that just widens the value - /// and calls `visitSingularDoubleField` - mutating func visitSingularFloatField(value: Float, fieldNumber: Int) throws - - /// Called for each non-repeated double field - /// - /// There is no default implementation. This must be implemented. - mutating func visitSingularDoubleField(value: Double, fieldNumber: Int) throws - - /// Called for each non-repeated int32 field - /// - /// A default implementation is provided that just widens the value - /// and calls `visitSingularInt64Field` - mutating func visitSingularInt32Field(value: Int32, fieldNumber: Int) throws - - /// Called for each non-repeated int64 field - /// - /// There is no default implementation. This must be implemented. - mutating func visitSingularInt64Field(value: Int64, fieldNumber: Int) throws - - /// Called for each non-repeated uint32 field - /// - /// A default implementation is provided that just widens the value - /// and calls `visitSingularUInt64Field` - mutating func visitSingularUInt32Field(value: UInt32, fieldNumber: Int) throws - - /// Called for each non-repeated uint64 field - /// - /// There is no default implementation. This must be implemented. - mutating func visitSingularUInt64Field(value: UInt64, fieldNumber: Int) throws - - /// Called for each non-repeated sint32 field - /// - /// A default implementation is provided that just forwards to - /// `visitSingularInt32Field` - mutating func visitSingularSInt32Field(value: Int32, fieldNumber: Int) throws - - /// Called for each non-repeated sint64 field - /// - /// A default implementation is provided that just forwards to - /// `visitSingularInt64Field` - mutating func visitSingularSInt64Field(value: Int64, fieldNumber: Int) throws - - /// Called for each non-repeated fixed32 field - /// - /// A default implementation is provided that just forwards to - /// `visitSingularUInt32Field` - mutating func visitSingularFixed32Field(value: UInt32, fieldNumber: Int) throws - - /// Called for each non-repeated fixed64 field - /// - /// A default implementation is provided that just forwards to - /// `visitSingularUInt64Field` - mutating func visitSingularFixed64Field(value: UInt64, fieldNumber: Int) throws - - /// Called for each non-repeated sfixed32 field - /// - /// A default implementation is provided that just forwards to - /// `visitSingularInt32Field` - mutating func visitSingularSFixed32Field(value: Int32, fieldNumber: Int) throws - - /// Called for each non-repeated sfixed64 field - /// - /// A default implementation is provided that just forwards to - /// `visitSingularInt64Field` - mutating func visitSingularSFixed64Field(value: Int64, fieldNumber: Int) throws - - /// Called for each non-repeated bool field - /// - /// There is no default implementation. This must be implemented. - mutating func visitSingularBoolField(value: Bool, fieldNumber: Int) throws - - /// Called for each non-repeated string field - /// - /// There is no default implementation. This must be implemented. - mutating func visitSingularStringField(value: String, fieldNumber: Int) throws - - /// Called for each non-repeated bytes field - /// - /// There is no default implementation. This must be implemented. - mutating func visitSingularBytesField(value: Data, fieldNumber: Int) throws - - /// Called for each non-repeated enum field - /// - /// There is no default implementation. This must be implemented. - mutating func visitSingularEnumField(value: E, fieldNumber: Int) throws - - /// Called for each non-repeated nested message field. - /// - /// There is no default implementation. This must be implemented. - mutating func visitSingularMessageField(value: M, fieldNumber: Int) throws - - /// Called for each non-repeated proto2 group field. - /// - /// A default implementation is provided that simply forwards to - /// `visitSingularMessageField`. Implementors who need to handle groups - /// differently than nested messages can override this and provide distinct - /// implementations. - mutating func visitSingularGroupField(value: G, fieldNumber: Int) throws - - // Called for each non-packed repeated float field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularFloatField` once for each item in the array. - mutating func visitRepeatedFloatField(value: [Float], fieldNumber: Int) throws - - // Called for each non-packed repeated double field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularDoubleField` once for each item in the array. - mutating func visitRepeatedDoubleField(value: [Double], fieldNumber: Int) throws - - // Called for each non-packed repeated int32 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularInt32Field` once for each item in the array. - mutating func visitRepeatedInt32Field(value: [Int32], fieldNumber: Int) throws - - // Called for each non-packed repeated int64 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularInt64Field` once for each item in the array. - mutating func visitRepeatedInt64Field(value: [Int64], fieldNumber: Int) throws - - // Called for each non-packed repeated uint32 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularUInt32Field` once for each item in the array. - mutating func visitRepeatedUInt32Field(value: [UInt32], fieldNumber: Int) throws - - // Called for each non-packed repeated uint64 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularUInt64Field` once for each item in the array. - mutating func visitRepeatedUInt64Field(value: [UInt64], fieldNumber: Int) throws - - // Called for each non-packed repeated sint32 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularSInt32Field` once for each item in the array. - mutating func visitRepeatedSInt32Field(value: [Int32], fieldNumber: Int) throws - - // Called for each non-packed repeated sint64 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularSInt64Field` once for each item in the array. - mutating func visitRepeatedSInt64Field(value: [Int64], fieldNumber: Int) throws - - // Called for each non-packed repeated fixed32 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularFixed32Field` once for each item in the array. - mutating func visitRepeatedFixed32Field(value: [UInt32], fieldNumber: Int) throws - - // Called for each non-packed repeated fixed64 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularFixed64Field` once for each item in the array. - mutating func visitRepeatedFixed64Field(value: [UInt64], fieldNumber: Int) throws - - // Called for each non-packed repeated sfixed32 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularSFixed32Field` once for each item in the array. - mutating func visitRepeatedSFixed32Field(value: [Int32], fieldNumber: Int) throws - - // Called for each non-packed repeated sfixed64 field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularSFixed64Field` once for each item in the array. - mutating func visitRepeatedSFixed64Field(value: [Int64], fieldNumber: Int) throws - - // Called for each non-packed repeated bool field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularBoolField` once for each item in the array. - mutating func visitRepeatedBoolField(value: [Bool], fieldNumber: Int) throws - - // Called for each non-packed repeated string field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularStringField` once for each item in the array. - mutating func visitRepeatedStringField(value: [String], fieldNumber: Int) throws - - // Called for each non-packed repeated bytes field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularBytesField` once for each item in the array. - mutating func visitRepeatedBytesField(value: [Data], fieldNumber: Int) throws - - /// Called for each repeated, unpacked enum field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularEnumField` once for each item in the array. - mutating func visitRepeatedEnumField(value: [E], fieldNumber: Int) throws - - /// Called for each repeated nested message field. The method is called once - /// with the complete array of values for the field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularMessageField` once for each item in the array. - mutating func visitRepeatedMessageField(value: [M], - fieldNumber: Int) throws - - /// Called for each repeated proto2 group field. - /// - /// A default implementation is provided that simply calls - /// `visitSingularGroupField` once for each item in the array. - mutating func visitRepeatedGroupField(value: [G], fieldNumber: Int) throws - - // Called for each packed, repeated float field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedFloatField(value: [Float], fieldNumber: Int) throws - - // Called for each packed, repeated double field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedDoubleField(value: [Double], fieldNumber: Int) throws - - // Called for each packed, repeated int32 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedInt32Field(value: [Int32], fieldNumber: Int) throws - - // Called for each packed, repeated int64 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedInt64Field(value: [Int64], fieldNumber: Int) throws - - // Called for each packed, repeated uint32 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedUInt32Field(value: [UInt32], fieldNumber: Int) throws - - // Called for each packed, repeated uint64 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedUInt64Field(value: [UInt64], fieldNumber: Int) throws - - // Called for each packed, repeated sint32 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedSInt32Field(value: [Int32], fieldNumber: Int) throws - - // Called for each packed, repeated sint64 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedSInt64Field(value: [Int64], fieldNumber: Int) throws - - // Called for each packed, repeated fixed32 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedFixed32Field(value: [UInt32], fieldNumber: Int) throws - - // Called for each packed, repeated fixed64 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedFixed64Field(value: [UInt64], fieldNumber: Int) throws - - // Called for each packed, repeated sfixed32 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedSFixed32Field(value: [Int32], fieldNumber: Int) throws - - // Called for each packed, repeated sfixed64 field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedSFixed64Field(value: [Int64], fieldNumber: Int) throws - - // Called for each packed, repeated bool field. - /// - /// This is called once with the complete array of values for - /// the field. - /// - /// There is a default implementation that forwards to the non-packed - /// function. - mutating func visitPackedBoolField(value: [Bool], fieldNumber: Int) throws - - /// Called for each repeated, packed enum field. - /// The method is called once with the complete array of values for - /// the field. - /// - /// A default implementation is provided that simply forwards to - /// `visitRepeatedEnumField`. Implementors who need to handle packed fields - /// differently than unpacked fields can override this and provide distinct - /// implementations. - mutating func visitPackedEnumField(value: [E], fieldNumber: Int) throws - - /// Called for each map field with primitive values. The method is - /// called once with the complete dictionary of keys/values for the - /// field. - /// - /// There is no default implementation. This must be implemented. - mutating func visitMapField( - fieldType: _ProtobufMap.Type, - value: _ProtobufMap.BaseType, - fieldNumber: Int) throws - - /// Called for each map field with enum values. The method is called - /// once with the complete dictionary of keys/values for the field. - /// - /// There is no default implementation. This must be implemented. - mutating func visitMapField( - fieldType: _ProtobufEnumMap.Type, - value: _ProtobufEnumMap.BaseType, - fieldNumber: Int) throws where ValueType.RawValue == Int - - /// Called for each map field with message values. The method is - /// called once with the complete dictionary of keys/values for the - /// field. - /// - /// There is no default implementation. This must be implemented. - mutating func visitMapField( - fieldType: _ProtobufMessageMap.Type, - value: _ProtobufMessageMap.BaseType, - fieldNumber: Int) throws - - /// Called for each extension range. - mutating func visitExtensionFields(fields: ExtensionFieldValueSet, start: Int, end: Int) throws - - /// Called for each extension range. - mutating func visitExtensionFieldsAsMessageSet( - fields: ExtensionFieldValueSet, - start: Int, - end: Int) throws - - /// Called with the raw bytes that represent any unknown fields. - mutating func visitUnknown(bytes: Data) throws -} - -/// Forwarding default implementations of some visitor methods, for convenience. -extension Visitor { - - // Default definitions of numeric serializations. - // - // The 32-bit versions widen and delegate to 64-bit versions. - // The specialized integer codings delegate to standard Int/UInt. - // - // These "just work" for Hash and Text formats. Most of these work - // for JSON (32-bit integers are overridden to suppress quoting), - // and a few even work for Protobuf Binary (thanks to varint coding - // which erases the size difference between 32-bit and 64-bit ints). - - public mutating func visitSingularFloatField(value: Float, fieldNumber: Int) throws { - try visitSingularDoubleField(value: Double(value), fieldNumber: fieldNumber) - } - public mutating func visitSingularInt32Field(value: Int32, fieldNumber: Int) throws { - try visitSingularInt64Field(value: Int64(value), fieldNumber: fieldNumber) - } - public mutating func visitSingularUInt32Field(value: UInt32, fieldNumber: Int) throws { - try visitSingularUInt64Field(value: UInt64(value), fieldNumber: fieldNumber) - } - public mutating func visitSingularSInt32Field(value: Int32, fieldNumber: Int) throws { - try visitSingularInt32Field(value: value, fieldNumber: fieldNumber) - } - public mutating func visitSingularSInt64Field(value: Int64, fieldNumber: Int) throws { - try visitSingularInt64Field(value: value, fieldNumber: fieldNumber) - } - public mutating func visitSingularFixed32Field(value: UInt32, fieldNumber: Int) throws { - try visitSingularUInt32Field(value: value, fieldNumber: fieldNumber) - } - public mutating func visitSingularFixed64Field(value: UInt64, fieldNumber: Int) throws { - try visitSingularUInt64Field(value: value, fieldNumber: fieldNumber) - } - public mutating func visitSingularSFixed32Field(value: Int32, fieldNumber: Int) throws { - try visitSingularInt32Field(value: value, fieldNumber: fieldNumber) - } - public mutating func visitSingularSFixed64Field(value: Int64, fieldNumber: Int) throws { - try visitSingularInt64Field(value: value, fieldNumber: fieldNumber) - } - - // Default definitions of repeated serializations that just iterate and - // invoke the singular encoding. These "just work" for Protobuf Binary (encoder - // and size visitor), Protobuf Text, and Hash visitors. JSON format stores - // repeated values differently from singular, so overrides these. - - public mutating func visitRepeatedFloatField(value: [Float], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularFloatField(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedDoubleField(value: [Double], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularDoubleField(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularInt32Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularInt64Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularUInt32Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularUInt64Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedSInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularSInt32Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedSInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularSInt64Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularFixed32Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularFixed64Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularSFixed32Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularSFixed64Field(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedBoolField(value: [Bool], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularBoolField(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedStringField(value: [String], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularStringField(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedBytesField(value: [Data], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularBytesField(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedEnumField(value: [E], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularEnumField(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedMessageField(value: [M], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularMessageField(value: v, fieldNumber: fieldNumber) - } - } - - public mutating func visitRepeatedGroupField(value: [G], fieldNumber: Int) throws { - assert(!value.isEmpty) - for v in value { - try visitSingularGroupField(value: v, fieldNumber: fieldNumber) - } - } - - // Default definitions of packed serialization just defer to the - // repeated implementation. This works for Hash and JSON visitors - // (which do not distinguish packed vs. non-packed) but are - // overridden by Protobuf Binary and Text. - - public mutating func visitPackedFloatField(value: [Float], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitRepeatedFloatField(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedDoubleField(value: [Double], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitRepeatedDoubleField(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitRepeatedInt32Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitRepeatedInt64Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedUInt32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitRepeatedUInt32Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedUInt64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitRepeatedUInt64Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedSInt32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitPackedInt32Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedSInt64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitPackedInt64Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedFixed32Field(value: [UInt32], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitPackedUInt32Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedFixed64Field(value: [UInt64], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitPackedUInt64Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedSFixed32Field(value: [Int32], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitPackedInt32Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedSFixed64Field(value: [Int64], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitPackedInt64Field(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedBoolField(value: [Bool], fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitRepeatedBoolField(value: value, fieldNumber: fieldNumber) - } - - public mutating func visitPackedEnumField(value: [E], - fieldNumber: Int) throws { - assert(!value.isEmpty) - try visitRepeatedEnumField(value: value, fieldNumber: fieldNumber) - } - - // Default handling for Groups is to treat them just like messages. - // This works for Text and Hash, but is overridden by Protobuf Binary - // format (which has a different encoding for groups) and JSON - // (which explicitly ignores all groups). - - public mutating func visitSingularGroupField(value: G, - fieldNumber: Int) throws { - try visitSingularMessageField(value: value, fieldNumber: fieldNumber) - } - - // Default handling of Extensions as a MessageSet to handing them just - // as plain extensions. Formats that what custom behavior can override - // it. - - public mutating func visitExtensionFieldsAsMessageSet( - fields: ExtensionFieldValueSet, - start: Int, - end: Int) throws { - try visitExtensionFields(fields: fields, start: start, end: end) - } - - // Default handling for Extensions is to forward the traverse to - // the ExtensionFieldValueSet. Formats that don't care about extensions - // can override to avoid it. - - /// Called for each extension range. - public mutating func visitExtensionFields(fields: ExtensionFieldValueSet, start: Int, end: Int) throws { - try fields.traverse(visitor: &self, start: start, end: end) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/WireFormat.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/WireFormat.swift deleted file mode 100644 index d1e67ac..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/WireFormat.swift +++ /dev/null @@ -1,70 +0,0 @@ -// Sources/SwiftProtobuf/WireFormat.swift - Describes proto wire formats -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Types related to binary wire formats of encoded values. -/// -// ----------------------------------------------------------------------------- - -/// Denotes the wire format by which a value is encoded in binary form. -internal enum WireFormat: UInt8 { - case varint = 0 - case fixed64 = 1 - case lengthDelimited = 2 - case startGroup = 3 - case endGroup = 4 - case fixed32 = 5 -} - -extension WireFormat { - /// Information about the "MessageSet" format. Used when a Message has - /// the message_set_wire_format option enabled. - /// - /// Writing in MessageSet form means instead of writing the Extesions - /// normally as a simple fields, each gets written wrapped in a group: - /// repeated group Item = 1 { - /// required int32 type_id = 2; - /// required bytes message = 3; - /// } - /// Where the field number is the type_id, and the message is serilaized - /// into the bytes. - /// - /// The handling of unknown fields is ill defined. In proto1, they were - /// dropped. In the C++ for proto2, since it stores them in the unknowns - /// storage, if preserves any that are length delimited data (since that's - /// how the message also goes out). While the C++ is parsing, where the - /// unknowns fall in the flow of the group, sorta decides what happens. - /// Since it is ill defined, currently SwiftProtobuf will reflect out - /// anything set in the unknownStorage. During parsing, unknowns on the - /// message are preserved, but unknowns within the group are dropped (like - /// map items). Any extension in the MessageSet that isn't in the Regisry - /// being used at parse time will remain in a group and go into the - /// Messages's unknown fields (this way it reflects back out correctly). - internal enum MessageSet { - - enum FieldNumbers { - static let item = 1; - static let typeId = 2; - static let message = 3; - } - - enum Tags { - static let itemStart = FieldTag(fieldNumber: FieldNumbers.item, wireFormat: .startGroup) - static let itemEnd = FieldTag(fieldNumber: FieldNumbers.item, wireFormat: .endGroup) - static let typeId = FieldTag(fieldNumber: FieldNumbers.typeId, wireFormat: .varint) - static let message = FieldTag(fieldNumber: FieldNumbers.message, wireFormat: .lengthDelimited) - } - - // The size of all the tags needed to write out an Extension in MessageSet format. - static let itemTagsEncodedSize = - Tags.itemStart.encodedSize + Tags.itemEnd.encodedSize + - Tags.typeId.encodedSize + - Tags.message.encodedSize - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ZigZag.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ZigZag.swift deleted file mode 100644 index e5a534b..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/ZigZag.swift +++ /dev/null @@ -1,66 +0,0 @@ -// Sources/SwiftProtobuf/ZigZag.swift - ZigZag encoding/decoding helpers -// -// Copyright (c) 2014 - 2016 Apple Inc. and the project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See LICENSE.txt for license information: -// https://github.com/apple/swift-protobuf/blob/main/LICENSE.txt -// -// ----------------------------------------------------------------------------- -/// -/// Helper functions to ZigZag encode and decode signed integers. -/// -// ----------------------------------------------------------------------------- - - -/// Contains helper methods to ZigZag encode and decode signed integers. -internal enum ZigZag { - - /// Return a 32-bit ZigZag-encoded value. - /// - /// ZigZag encodes signed integers into values that can be efficiently encoded with varint. - /// (Otherwise, negative values must be sign-extended to 64 bits to be varint encoded, always - /// taking 10 bytes on the wire.) - /// - /// - Parameter value: A signed 32-bit integer. - /// - Returns: An unsigned 32-bit integer representing the ZigZag-encoded value. - static func encoded(_ value: Int32) -> UInt32 { - return UInt32(bitPattern: (value << 1) ^ (value >> 31)) - } - - /// Return a 64-bit ZigZag-encoded value. - /// - /// ZigZag encodes signed integers into values that can be efficiently encoded with varint. - /// (Otherwise, negative values must be sign-extended to 64 bits to be varint encoded, always - /// taking 10 bytes on the wire.) - /// - /// - Parameter value: A signed 64-bit integer. - /// - Returns: An unsigned 64-bit integer representing the ZigZag-encoded value. - static func encoded(_ value: Int64) -> UInt64 { - return UInt64(bitPattern: (value << 1) ^ (value >> 63)) - } - - /// Return a 32-bit ZigZag-decoded value. - /// - /// ZigZag enocdes signed integers into values that can be efficiently encoded with varint. - /// (Otherwise, negative values must be sign-extended to 64 bits to be varint encoded, always - /// taking 10 bytes on the wire.) - /// - /// - Parameter value: An unsigned 32-bit ZagZag-encoded integer. - /// - Returns: The signed 32-bit decoded value. - static func decoded(_ value: UInt32) -> Int32 { - return Int32(value >> 1) ^ -Int32(value & 1) - } - - /// Return a 64-bit ZigZag-decoded value. - /// - /// ZigZag enocdes signed integers into values that can be efficiently encoded with varint. - /// (Otherwise, negative values must be sign-extended to 64 bits to be varint encoded, always - /// taking 10 bytes on the wire.) - /// - /// - Parameter value: An unsigned 64-bit ZigZag-encoded integer. - /// - Returns: The signed 64-bit decoded value. - static func decoded(_ value: UInt64) -> Int64 { - return Int64(value >> 1) ^ -Int64(value & 1) - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/any.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/any.pb.swift deleted file mode 100644 index f1e80c8..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/any.pb.swift +++ /dev/null @@ -1,241 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/any.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// `Any` contains an arbitrary serialized protocol buffer message along with a -/// URL that describes the type of the serialized message. -/// -/// Protobuf library provides support to pack/unpack Any values in the form -/// of utility functions or additional generated methods of the Any type. -/// -/// Example 1: Pack and unpack a message in C++. -/// -/// Foo foo = ...; -/// Any any; -/// any.PackFrom(foo); -/// ... -/// if (any.UnpackTo(&foo)) { -/// ... -/// } -/// -/// Example 2: Pack and unpack a message in Java. -/// -/// Foo foo = ...; -/// Any any = Any.pack(foo); -/// ... -/// if (any.is(Foo.class)) { -/// foo = any.unpack(Foo.class); -/// } -/// -/// Example 3: Pack and unpack a message in Python. -/// -/// foo = Foo(...) -/// any = Any() -/// any.Pack(foo) -/// ... -/// if any.Is(Foo.DESCRIPTOR): -/// any.Unpack(foo) -/// ... -/// -/// Example 4: Pack and unpack a message in Go -/// -/// foo := &pb.Foo{...} -/// any, err := anypb.New(foo) -/// if err != nil { -/// ... -/// } -/// ... -/// foo := &pb.Foo{} -/// if err := any.UnmarshalTo(foo); err != nil { -/// ... -/// } -/// -/// The pack methods provided by protobuf library will by default use -/// 'type.googleapis.com/full.type.name' as the type URL and the unpack -/// methods only use the fully qualified type name after the last '/' -/// in the type URL, for example "foo.bar.com/x/y.z" will yield type -/// name "y.z". -/// -/// -/// JSON -/// ==== -/// The JSON representation of an `Any` value uses the regular -/// representation of the deserialized, embedded message, with an -/// additional field `@type` which contains the type URL. Example: -/// -/// package google.profile; -/// message Person { -/// string first_name = 1; -/// string last_name = 2; -/// } -/// -/// { -/// "@type": "type.googleapis.com/google.profile.Person", -/// "firstName": , -/// "lastName": -/// } -/// -/// If the embedded message type is well-known and has a custom JSON -/// representation, that representation will be embedded adding a field -/// `value` which holds the custom JSON in addition to the `@type` -/// field. Example (for message [google.protobuf.Duration][]): -/// -/// { -/// "@type": "type.googleapis.com/google.protobuf.Duration", -/// "value": "1.212s" -/// } -public struct Google_Protobuf_Any { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// A URL/resource name that uniquely identifies the type of the serialized - /// protocol buffer message. This string must contain at least - /// one "/" character. The last segment of the URL's path must represent - /// the fully qualified name of the type (as in - /// `path/google.protobuf.Duration`). The name should be in a canonical form - /// (e.g., leading "." is not accepted). - /// - /// In practice, teams usually precompile into the binary all types that they - /// expect it to use in the context of Any. However, for URLs which use the - /// scheme `http`, `https`, or no scheme, one can optionally set up a type - /// server that maps type URLs to message definitions as follows: - /// - /// * If no scheme is provided, `https` is assumed. - /// * An HTTP GET on the URL must yield a [google.protobuf.Type][] - /// value in binary format, or produce an error. - /// * Applications are allowed to cache lookup results based on the - /// URL, or have them precompiled into a binary to avoid any - /// lookup. Therefore, binary compatibility needs to be preserved - /// on changes to types. (Use versioned type names to manage - /// breaking changes.) - /// - /// Note: this functionality is not currently available in the official - /// protobuf release, and it is not used for type URLs beginning with - /// type.googleapis.com. - /// - /// Schemes other than `http`, `https` (or the empty scheme) might be - /// used with implementation specific semantics. - public var typeURL: String { - get {return _storage._typeURL} - set {_uniqueStorage()._typeURL = newValue} - } - - /// Must be a valid serialized protocol buffer of the above specified type. - public var value: Data { - get {return _storage._value} - set {_uniqueStorage()._value = newValue} - } - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - internal var _storage = _StorageClass.defaultInstance -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_Any: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Any" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "type_url"), - 2: .same(proto: "value"), - ] - - typealias _StorageClass = AnyMessageStorage - - internal mutating func _uniqueStorage() -> _StorageClass { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _StorageClass(copying: _storage) - } - return _storage - } - - public mutating func decodeMessage(decoder: inout D) throws { - _ = _uniqueStorage() - try withExtendedLifetime(_storage) { (_storage: _StorageClass) in - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &_storage._typeURL) }() - case 2: try { try decoder.decodeSingularBytesField(value: &_storage._value) }() - default: break - } - } - } - } - - public func traverse(visitor: inout V) throws { - try withExtendedLifetime(_storage) { (_storage: _StorageClass) in - try _storage.preTraverse() - if !_storage._typeURL.isEmpty { - try visitor.visitSingularStringField(value: _storage._typeURL, fieldNumber: 1) - } - if !_storage._value.isEmpty { - try visitor.visitSingularBytesField(value: _storage._value, fieldNumber: 2) - } - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Any, rhs: Google_Protobuf_Any) -> Bool { - if lhs._storage !== rhs._storage { - let storagesAreEqual: Bool = lhs._storage.isEqualTo(other: rhs._storage) - if !storagesAreEqual {return false} - } - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/api.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/api.pb.swift deleted file mode 100644 index 98fc8ee..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/api.pb.swift +++ /dev/null @@ -1,424 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/api.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// Api is a light-weight descriptor for an API Interface. -/// -/// Interfaces are also described as "protocol buffer services" in some contexts, -/// such as by the "service" keyword in a .proto file, but they are different -/// from API Services, which represent a concrete implementation of an interface -/// as opposed to simply a description of methods and bindings. They are also -/// sometimes simply referred to as "APIs" in other contexts, such as the name of -/// this message itself. See https://cloud.google.com/apis/design/glossary for -/// detailed terminology. -public struct Google_Protobuf_Api { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The fully qualified name of this interface, including package name - /// followed by the interface's simple name. - public var name: String = String() - - /// The methods of this interface, in unspecified order. - public var methods: [Google_Protobuf_Method] = [] - - /// Any metadata attached to the interface. - public var options: [Google_Protobuf_Option] = [] - - /// A version string for this interface. If specified, must have the form - /// `major-version.minor-version`, as in `1.10`. If the minor version is - /// omitted, it defaults to zero. If the entire version field is empty, the - /// major version is derived from the package name, as outlined below. If the - /// field is not empty, the version in the package name will be verified to be - /// consistent with what is provided here. - /// - /// The versioning schema uses [semantic - /// versioning](http://semver.org) where the major version number - /// indicates a breaking change and the minor version an additive, - /// non-breaking change. Both version numbers are signals to users - /// what to expect from different versions, and should be carefully - /// chosen based on the product plan. - /// - /// The major version is also reflected in the package name of the - /// interface, which must end in `v`, as in - /// `google.feature.v1`. For major versions 0 and 1, the suffix can - /// be omitted. Zero major versions must only be used for - /// experimental, non-GA interfaces. - public var version: String = String() - - /// Source context for the protocol buffer service represented by this - /// message. - public var sourceContext: Google_Protobuf_SourceContext { - get {return _sourceContext ?? Google_Protobuf_SourceContext()} - set {_sourceContext = newValue} - } - /// Returns true if `sourceContext` has been explicitly set. - public var hasSourceContext: Bool {return self._sourceContext != nil} - /// Clears the value of `sourceContext`. Subsequent reads from it will return its default value. - public mutating func clearSourceContext() {self._sourceContext = nil} - - /// Included interfaces. See [Mixin][]. - public var mixins: [Google_Protobuf_Mixin] = [] - - /// The source syntax of the service. - public var syntax: Google_Protobuf_Syntax = .proto2 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _sourceContext: Google_Protobuf_SourceContext? = nil -} - -/// Method represents a method of an API interface. -public struct Google_Protobuf_Method { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The simple name of this method. - public var name: String = String() - - /// A URL of the input message type. - public var requestTypeURL: String = String() - - /// If true, the request is streamed. - public var requestStreaming: Bool = false - - /// The URL of the output message type. - public var responseTypeURL: String = String() - - /// If true, the response is streamed. - public var responseStreaming: Bool = false - - /// Any metadata attached to the method. - public var options: [Google_Protobuf_Option] = [] - - /// The source syntax of this method. - public var syntax: Google_Protobuf_Syntax = .proto2 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Declares an API Interface to be included in this interface. The including -/// interface must redeclare all the methods from the included interface, but -/// documentation and options are inherited as follows: -/// -/// - If after comment and whitespace stripping, the documentation -/// string of the redeclared method is empty, it will be inherited -/// from the original method. -/// -/// - Each annotation belonging to the service config (http, -/// visibility) which is not set in the redeclared method will be -/// inherited. -/// -/// - If an http annotation is inherited, the path pattern will be -/// modified as follows. Any version prefix will be replaced by the -/// version of the including interface plus the [root][] path if -/// specified. -/// -/// Example of a simple mixin: -/// -/// package google.acl.v1; -/// service AccessControl { -/// // Get the underlying ACL object. -/// rpc GetAcl(GetAclRequest) returns (Acl) { -/// option (google.api.http).get = "/v1/{resource=**}:getAcl"; -/// } -/// } -/// -/// package google.storage.v2; -/// service Storage { -/// rpc GetAcl(GetAclRequest) returns (Acl); -/// -/// // Get a data record. -/// rpc GetData(GetDataRequest) returns (Data) { -/// option (google.api.http).get = "/v2/{resource=**}"; -/// } -/// } -/// -/// Example of a mixin configuration: -/// -/// apis: -/// - name: google.storage.v2.Storage -/// mixins: -/// - name: google.acl.v1.AccessControl -/// -/// The mixin construct implies that all methods in `AccessControl` are -/// also declared with same name and request/response types in -/// `Storage`. A documentation generator or annotation processor will -/// see the effective `Storage.GetAcl` method after inheriting -/// documentation and annotations as follows: -/// -/// service Storage { -/// // Get the underlying ACL object. -/// rpc GetAcl(GetAclRequest) returns (Acl) { -/// option (google.api.http).get = "/v2/{resource=**}:getAcl"; -/// } -/// ... -/// } -/// -/// Note how the version in the path pattern changed from `v1` to `v2`. -/// -/// If the `root` field in the mixin is specified, it should be a -/// relative path under which inherited HTTP paths are placed. Example: -/// -/// apis: -/// - name: google.storage.v2.Storage -/// mixins: -/// - name: google.acl.v1.AccessControl -/// root: acls -/// -/// This implies the following inherited HTTP annotation: -/// -/// service Storage { -/// // Get the underlying ACL object. -/// rpc GetAcl(GetAclRequest) returns (Acl) { -/// option (google.api.http).get = "/v2/acls/{resource=**}:getAcl"; -/// } -/// ... -/// } -public struct Google_Protobuf_Mixin { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The fully qualified name of the interface which is included. - public var name: String = String() - - /// If non-empty specifies a path under which inherited HTTP paths - /// are rooted. - public var root: String = String() - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_Api: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Api" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "methods"), - 3: .same(proto: "options"), - 4: .same(proto: "version"), - 5: .standard(proto: "source_context"), - 6: .same(proto: "mixins"), - 7: .same(proto: "syntax"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self.name) }() - case 2: try { try decoder.decodeRepeatedMessageField(value: &self.methods) }() - case 3: try { try decoder.decodeRepeatedMessageField(value: &self.options) }() - case 4: try { try decoder.decodeSingularStringField(value: &self.version) }() - case 5: try { try decoder.decodeSingularMessageField(value: &self._sourceContext) }() - case 6: try { try decoder.decodeRepeatedMessageField(value: &self.mixins) }() - case 7: try { try decoder.decodeSingularEnumField(value: &self.syntax) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.name.isEmpty { - try visitor.visitSingularStringField(value: self.name, fieldNumber: 1) - } - if !self.methods.isEmpty { - try visitor.visitRepeatedMessageField(value: self.methods, fieldNumber: 2) - } - if !self.options.isEmpty { - try visitor.visitRepeatedMessageField(value: self.options, fieldNumber: 3) - } - if !self.version.isEmpty { - try visitor.visitSingularStringField(value: self.version, fieldNumber: 4) - } - if let v = self._sourceContext { - try visitor.visitSingularMessageField(value: v, fieldNumber: 5) - } - if !self.mixins.isEmpty { - try visitor.visitRepeatedMessageField(value: self.mixins, fieldNumber: 6) - } - if self.syntax != .proto2 { - try visitor.visitSingularEnumField(value: self.syntax, fieldNumber: 7) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Api, rhs: Google_Protobuf_Api) -> Bool { - if lhs.name != rhs.name {return false} - if lhs.methods != rhs.methods {return false} - if lhs.options != rhs.options {return false} - if lhs.version != rhs.version {return false} - if lhs._sourceContext != rhs._sourceContext {return false} - if lhs.mixins != rhs.mixins {return false} - if lhs.syntax != rhs.syntax {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_Method: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Method" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .standard(proto: "request_type_url"), - 3: .standard(proto: "request_streaming"), - 4: .standard(proto: "response_type_url"), - 5: .standard(proto: "response_streaming"), - 6: .same(proto: "options"), - 7: .same(proto: "syntax"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self.name) }() - case 2: try { try decoder.decodeSingularStringField(value: &self.requestTypeURL) }() - case 3: try { try decoder.decodeSingularBoolField(value: &self.requestStreaming) }() - case 4: try { try decoder.decodeSingularStringField(value: &self.responseTypeURL) }() - case 5: try { try decoder.decodeSingularBoolField(value: &self.responseStreaming) }() - case 6: try { try decoder.decodeRepeatedMessageField(value: &self.options) }() - case 7: try { try decoder.decodeSingularEnumField(value: &self.syntax) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.name.isEmpty { - try visitor.visitSingularStringField(value: self.name, fieldNumber: 1) - } - if !self.requestTypeURL.isEmpty { - try visitor.visitSingularStringField(value: self.requestTypeURL, fieldNumber: 2) - } - if self.requestStreaming != false { - try visitor.visitSingularBoolField(value: self.requestStreaming, fieldNumber: 3) - } - if !self.responseTypeURL.isEmpty { - try visitor.visitSingularStringField(value: self.responseTypeURL, fieldNumber: 4) - } - if self.responseStreaming != false { - try visitor.visitSingularBoolField(value: self.responseStreaming, fieldNumber: 5) - } - if !self.options.isEmpty { - try visitor.visitRepeatedMessageField(value: self.options, fieldNumber: 6) - } - if self.syntax != .proto2 { - try visitor.visitSingularEnumField(value: self.syntax, fieldNumber: 7) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Method, rhs: Google_Protobuf_Method) -> Bool { - if lhs.name != rhs.name {return false} - if lhs.requestTypeURL != rhs.requestTypeURL {return false} - if lhs.requestStreaming != rhs.requestStreaming {return false} - if lhs.responseTypeURL != rhs.responseTypeURL {return false} - if lhs.responseStreaming != rhs.responseStreaming {return false} - if lhs.options != rhs.options {return false} - if lhs.syntax != rhs.syntax {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_Mixin: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Mixin" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "root"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self.name) }() - case 2: try { try decoder.decodeSingularStringField(value: &self.root) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.name.isEmpty { - try visitor.visitSingularStringField(value: self.name, fieldNumber: 1) - } - if !self.root.isEmpty { - try visitor.visitSingularStringField(value: self.root, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Mixin, rhs: Google_Protobuf_Mixin) -> Bool { - if lhs.name != rhs.name {return false} - if lhs.root != rhs.root {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/descriptor.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/descriptor.pb.swift deleted file mode 100644 index 66f47d7..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/descriptor.pb.swift +++ /dev/null @@ -1,3836 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/descriptor.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// The messages in this file describe the definitions found in .proto files. -// A valid .proto file can be translated directly to a FileDescriptorProto -// without any other information (e.g. without reading its imports). - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// The protocol compiler can output a FileDescriptorSet containing the .proto -/// files it parses. -public struct Google_Protobuf_FileDescriptorSet { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var file: [Google_Protobuf_FileDescriptorProto] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Describes a complete .proto file. -public struct Google_Protobuf_FileDescriptorProto { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// file name, relative to root of source tree - public var name: String { - get {return _name ?? String()} - set {_name = newValue} - } - /// Returns true if `name` has been explicitly set. - public var hasName: Bool {return self._name != nil} - /// Clears the value of `name`. Subsequent reads from it will return its default value. - public mutating func clearName() {self._name = nil} - - /// e.g. "foo", "foo.bar", etc. - public var package: String { - get {return _package ?? String()} - set {_package = newValue} - } - /// Returns true if `package` has been explicitly set. - public var hasPackage: Bool {return self._package != nil} - /// Clears the value of `package`. Subsequent reads from it will return its default value. - public mutating func clearPackage() {self._package = nil} - - /// Names of files imported by this file. - public var dependency: [String] = [] - - /// Indexes of the public imported files in the dependency list above. - public var publicDependency: [Int32] = [] - - /// Indexes of the weak imported files in the dependency list. - /// For Google-internal migration only. Do not use. - public var weakDependency: [Int32] = [] - - /// All top-level definitions in this file. - public var messageType: [Google_Protobuf_DescriptorProto] = [] - - public var enumType: [Google_Protobuf_EnumDescriptorProto] = [] - - public var service: [Google_Protobuf_ServiceDescriptorProto] = [] - - public var `extension`: [Google_Protobuf_FieldDescriptorProto] = [] - - public var options: Google_Protobuf_FileOptions { - get {return _options ?? Google_Protobuf_FileOptions()} - set {_options = newValue} - } - /// Returns true if `options` has been explicitly set. - public var hasOptions: Bool {return self._options != nil} - /// Clears the value of `options`. Subsequent reads from it will return its default value. - public mutating func clearOptions() {self._options = nil} - - /// This field contains optional information about the original source code. - /// You may safely remove this entire field without harming runtime - /// functionality of the descriptors -- the information is needed only by - /// development tools. - public var sourceCodeInfo: Google_Protobuf_SourceCodeInfo { - get {return _sourceCodeInfo ?? Google_Protobuf_SourceCodeInfo()} - set {_sourceCodeInfo = newValue} - } - /// Returns true if `sourceCodeInfo` has been explicitly set. - public var hasSourceCodeInfo: Bool {return self._sourceCodeInfo != nil} - /// Clears the value of `sourceCodeInfo`. Subsequent reads from it will return its default value. - public mutating func clearSourceCodeInfo() {self._sourceCodeInfo = nil} - - /// The syntax of the proto file. - /// The supported values are "proto2" and "proto3". - public var syntax: String { - get {return _syntax ?? String()} - set {_syntax = newValue} - } - /// Returns true if `syntax` has been explicitly set. - public var hasSyntax: Bool {return self._syntax != nil} - /// Clears the value of `syntax`. Subsequent reads from it will return its default value. - public mutating func clearSyntax() {self._syntax = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _name: String? = nil - fileprivate var _package: String? = nil - fileprivate var _options: Google_Protobuf_FileOptions? = nil - fileprivate var _sourceCodeInfo: Google_Protobuf_SourceCodeInfo? = nil - fileprivate var _syntax: String? = nil -} - -/// Describes a message type. -public struct Google_Protobuf_DescriptorProto { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var name: String { - get {return _name ?? String()} - set {_name = newValue} - } - /// Returns true if `name` has been explicitly set. - public var hasName: Bool {return self._name != nil} - /// Clears the value of `name`. Subsequent reads from it will return its default value. - public mutating func clearName() {self._name = nil} - - public var field: [Google_Protobuf_FieldDescriptorProto] = [] - - public var `extension`: [Google_Protobuf_FieldDescriptorProto] = [] - - public var nestedType: [Google_Protobuf_DescriptorProto] = [] - - public var enumType: [Google_Protobuf_EnumDescriptorProto] = [] - - public var extensionRange: [Google_Protobuf_DescriptorProto.ExtensionRange] = [] - - public var oneofDecl: [Google_Protobuf_OneofDescriptorProto] = [] - - public var options: Google_Protobuf_MessageOptions { - get {return _options ?? Google_Protobuf_MessageOptions()} - set {_options = newValue} - } - /// Returns true if `options` has been explicitly set. - public var hasOptions: Bool {return self._options != nil} - /// Clears the value of `options`. Subsequent reads from it will return its default value. - public mutating func clearOptions() {self._options = nil} - - public var reservedRange: [Google_Protobuf_DescriptorProto.ReservedRange] = [] - - /// Reserved field names, which may not be used by fields in the same message. - /// A given name may only be reserved once. - public var reservedName: [String] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public struct ExtensionRange { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Inclusive. - public var start: Int32 { - get {return _start ?? 0} - set {_start = newValue} - } - /// Returns true if `start` has been explicitly set. - public var hasStart: Bool {return self._start != nil} - /// Clears the value of `start`. Subsequent reads from it will return its default value. - public mutating func clearStart() {self._start = nil} - - /// Exclusive. - public var end: Int32 { - get {return _end ?? 0} - set {_end = newValue} - } - /// Returns true if `end` has been explicitly set. - public var hasEnd: Bool {return self._end != nil} - /// Clears the value of `end`. Subsequent reads from it will return its default value. - public mutating func clearEnd() {self._end = nil} - - public var options: Google_Protobuf_ExtensionRangeOptions { - get {return _options ?? Google_Protobuf_ExtensionRangeOptions()} - set {_options = newValue} - } - /// Returns true if `options` has been explicitly set. - public var hasOptions: Bool {return self._options != nil} - /// Clears the value of `options`. Subsequent reads from it will return its default value. - public mutating func clearOptions() {self._options = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _start: Int32? = nil - fileprivate var _end: Int32? = nil - fileprivate var _options: Google_Protobuf_ExtensionRangeOptions? = nil - } - - /// Range of reserved tag numbers. Reserved tag numbers may not be used by - /// fields or extension ranges in the same message. Reserved ranges may - /// not overlap. - public struct ReservedRange { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Inclusive. - public var start: Int32 { - get {return _start ?? 0} - set {_start = newValue} - } - /// Returns true if `start` has been explicitly set. - public var hasStart: Bool {return self._start != nil} - /// Clears the value of `start`. Subsequent reads from it will return its default value. - public mutating func clearStart() {self._start = nil} - - /// Exclusive. - public var end: Int32 { - get {return _end ?? 0} - set {_end = newValue} - } - /// Returns true if `end` has been explicitly set. - public var hasEnd: Bool {return self._end != nil} - /// Clears the value of `end`. Subsequent reads from it will return its default value. - public mutating func clearEnd() {self._end = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _start: Int32? = nil - fileprivate var _end: Int32? = nil - } - - public init() {} - - fileprivate var _name: String? = nil - fileprivate var _options: Google_Protobuf_MessageOptions? = nil -} - -public struct Google_Protobuf_ExtensionRangeOptions: SwiftProtobuf.ExtensibleMessage { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The parser stores options it doesn't recognize here. See above. - public var uninterpretedOption: [Google_Protobuf_UninterpretedOption] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - public var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet() -} - -/// Describes a field within a message. -public struct Google_Protobuf_FieldDescriptorProto { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var name: String { - get {return _storage._name ?? String()} - set {_uniqueStorage()._name = newValue} - } - /// Returns true if `name` has been explicitly set. - public var hasName: Bool {return _storage._name != nil} - /// Clears the value of `name`. Subsequent reads from it will return its default value. - public mutating func clearName() {_uniqueStorage()._name = nil} - - public var number: Int32 { - get {return _storage._number ?? 0} - set {_uniqueStorage()._number = newValue} - } - /// Returns true if `number` has been explicitly set. - public var hasNumber: Bool {return _storage._number != nil} - /// Clears the value of `number`. Subsequent reads from it will return its default value. - public mutating func clearNumber() {_uniqueStorage()._number = nil} - - public var label: Google_Protobuf_FieldDescriptorProto.Label { - get {return _storage._label ?? .optional} - set {_uniqueStorage()._label = newValue} - } - /// Returns true if `label` has been explicitly set. - public var hasLabel: Bool {return _storage._label != nil} - /// Clears the value of `label`. Subsequent reads from it will return its default value. - public mutating func clearLabel() {_uniqueStorage()._label = nil} - - /// If type_name is set, this need not be set. If both this and type_name - /// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. - public var type: Google_Protobuf_FieldDescriptorProto.TypeEnum { - get {return _storage._type ?? .double} - set {_uniqueStorage()._type = newValue} - } - /// Returns true if `type` has been explicitly set. - public var hasType: Bool {return _storage._type != nil} - /// Clears the value of `type`. Subsequent reads from it will return its default value. - public mutating func clearType() {_uniqueStorage()._type = nil} - - /// For message and enum types, this is the name of the type. If the name - /// starts with a '.', it is fully-qualified. Otherwise, C++-like scoping - /// rules are used to find the type (i.e. first the nested types within this - /// message are searched, then within the parent, on up to the root - /// namespace). - public var typeName: String { - get {return _storage._typeName ?? String()} - set {_uniqueStorage()._typeName = newValue} - } - /// Returns true if `typeName` has been explicitly set. - public var hasTypeName: Bool {return _storage._typeName != nil} - /// Clears the value of `typeName`. Subsequent reads from it will return its default value. - public mutating func clearTypeName() {_uniqueStorage()._typeName = nil} - - /// For extensions, this is the name of the type being extended. It is - /// resolved in the same manner as type_name. - public var extendee: String { - get {return _storage._extendee ?? String()} - set {_uniqueStorage()._extendee = newValue} - } - /// Returns true if `extendee` has been explicitly set. - public var hasExtendee: Bool {return _storage._extendee != nil} - /// Clears the value of `extendee`. Subsequent reads from it will return its default value. - public mutating func clearExtendee() {_uniqueStorage()._extendee = nil} - - /// For numeric types, contains the original text representation of the value. - /// For booleans, "true" or "false". - /// For strings, contains the default text contents (not escaped in any way). - /// For bytes, contains the C escaped value. All bytes >= 128 are escaped. - /// TODO(kenton): Base-64 encode? - public var defaultValue: String { - get {return _storage._defaultValue ?? String()} - set {_uniqueStorage()._defaultValue = newValue} - } - /// Returns true if `defaultValue` has been explicitly set. - public var hasDefaultValue: Bool {return _storage._defaultValue != nil} - /// Clears the value of `defaultValue`. Subsequent reads from it will return its default value. - public mutating func clearDefaultValue() {_uniqueStorage()._defaultValue = nil} - - /// If set, gives the index of a oneof in the containing type's oneof_decl - /// list. This field is a member of that oneof. - public var oneofIndex: Int32 { - get {return _storage._oneofIndex ?? 0} - set {_uniqueStorage()._oneofIndex = newValue} - } - /// Returns true if `oneofIndex` has been explicitly set. - public var hasOneofIndex: Bool {return _storage._oneofIndex != nil} - /// Clears the value of `oneofIndex`. Subsequent reads from it will return its default value. - public mutating func clearOneofIndex() {_uniqueStorage()._oneofIndex = nil} - - /// JSON name of this field. The value is set by protocol compiler. If the - /// user has set a "json_name" option on this field, that option's value - /// will be used. Otherwise, it's deduced from the field's name by converting - /// it to camelCase. - public var jsonName: String { - get {return _storage._jsonName ?? String()} - set {_uniqueStorage()._jsonName = newValue} - } - /// Returns true if `jsonName` has been explicitly set. - public var hasJsonName: Bool {return _storage._jsonName != nil} - /// Clears the value of `jsonName`. Subsequent reads from it will return its default value. - public mutating func clearJsonName() {_uniqueStorage()._jsonName = nil} - - public var options: Google_Protobuf_FieldOptions { - get {return _storage._options ?? Google_Protobuf_FieldOptions()} - set {_uniqueStorage()._options = newValue} - } - /// Returns true if `options` has been explicitly set. - public var hasOptions: Bool {return _storage._options != nil} - /// Clears the value of `options`. Subsequent reads from it will return its default value. - public mutating func clearOptions() {_uniqueStorage()._options = nil} - - /// If true, this is a proto3 "optional". When a proto3 field is optional, it - /// tracks presence regardless of field type. - /// - /// When proto3_optional is true, this field must be belong to a oneof to - /// signal to old proto3 clients that presence is tracked for this field. This - /// oneof is known as a "synthetic" oneof, and this field must be its sole - /// member (each proto3 optional field gets its own synthetic oneof). Synthetic - /// oneofs exist in the descriptor only, and do not generate any API. Synthetic - /// oneofs must be ordered after all "real" oneofs. - /// - /// For message fields, proto3_optional doesn't create any semantic change, - /// since non-repeated message fields always track presence. However it still - /// indicates the semantic detail of whether the user wrote "optional" or not. - /// This can be useful for round-tripping the .proto file. For consistency we - /// give message fields a synthetic oneof also, even though it is not required - /// to track presence. This is especially important because the parser can't - /// tell if a field is a message or an enum, so it must always create a - /// synthetic oneof. - /// - /// Proto2 optional fields do not set this flag, because they already indicate - /// optional with `LABEL_OPTIONAL`. - public var proto3Optional: Bool { - get {return _storage._proto3Optional ?? false} - set {_uniqueStorage()._proto3Optional = newValue} - } - /// Returns true if `proto3Optional` has been explicitly set. - public var hasProto3Optional: Bool {return _storage._proto3Optional != nil} - /// Clears the value of `proto3Optional`. Subsequent reads from it will return its default value. - public mutating func clearProto3Optional() {_uniqueStorage()._proto3Optional = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public enum TypeEnum: SwiftProtobuf.Enum { - public typealias RawValue = Int - - /// 0 is reserved for errors. - /// Order is weird for historical reasons. - case double // = 1 - case float // = 2 - - /// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if - /// negative values are likely. - case int64 // = 3 - case uint64 // = 4 - - /// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if - /// negative values are likely. - case int32 // = 5 - case fixed64 // = 6 - case fixed32 // = 7 - case bool // = 8 - case string // = 9 - - /// Tag-delimited aggregate. - /// Group type is deprecated and not supported in proto3. However, Proto3 - /// implementations should still be able to parse the group wire format and - /// treat group fields as unknown fields. - case group // = 10 - - /// Length-delimited aggregate. - case message // = 11 - - /// New in version 2. - case bytes // = 12 - case uint32 // = 13 - case `enum` // = 14 - case sfixed32 // = 15 - case sfixed64 // = 16 - - /// Uses ZigZag encoding. - case sint32 // = 17 - - /// Uses ZigZag encoding. - case sint64 // = 18 - - public init() { - self = .double - } - - public init?(rawValue: Int) { - switch rawValue { - case 1: self = .double - case 2: self = .float - case 3: self = .int64 - case 4: self = .uint64 - case 5: self = .int32 - case 6: self = .fixed64 - case 7: self = .fixed32 - case 8: self = .bool - case 9: self = .string - case 10: self = .group - case 11: self = .message - case 12: self = .bytes - case 13: self = .uint32 - case 14: self = .enum - case 15: self = .sfixed32 - case 16: self = .sfixed64 - case 17: self = .sint32 - case 18: self = .sint64 - default: return nil - } - } - - public var rawValue: Int { - switch self { - case .double: return 1 - case .float: return 2 - case .int64: return 3 - case .uint64: return 4 - case .int32: return 5 - case .fixed64: return 6 - case .fixed32: return 7 - case .bool: return 8 - case .string: return 9 - case .group: return 10 - case .message: return 11 - case .bytes: return 12 - case .uint32: return 13 - case .enum: return 14 - case .sfixed32: return 15 - case .sfixed64: return 16 - case .sint32: return 17 - case .sint64: return 18 - } - } - - } - - public enum Label: SwiftProtobuf.Enum { - public typealias RawValue = Int - - /// 0 is reserved for errors - case `optional` // = 1 - case `required` // = 2 - case repeated // = 3 - - public init() { - self = .optional - } - - public init?(rawValue: Int) { - switch rawValue { - case 1: self = .optional - case 2: self = .required - case 3: self = .repeated - default: return nil - } - } - - public var rawValue: Int { - switch self { - case .optional: return 1 - case .required: return 2 - case .repeated: return 3 - } - } - - } - - public init() {} - - fileprivate var _storage = _StorageClass.defaultInstance -} - -#if swift(>=4.2) - -extension Google_Protobuf_FieldDescriptorProto.TypeEnum: CaseIterable { - // Support synthesized by the compiler. -} - -extension Google_Protobuf_FieldDescriptorProto.Label: CaseIterable { - // Support synthesized by the compiler. -} - -#endif // swift(>=4.2) - -/// Describes a oneof. -public struct Google_Protobuf_OneofDescriptorProto { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var name: String { - get {return _name ?? String()} - set {_name = newValue} - } - /// Returns true if `name` has been explicitly set. - public var hasName: Bool {return self._name != nil} - /// Clears the value of `name`. Subsequent reads from it will return its default value. - public mutating func clearName() {self._name = nil} - - public var options: Google_Protobuf_OneofOptions { - get {return _options ?? Google_Protobuf_OneofOptions()} - set {_options = newValue} - } - /// Returns true if `options` has been explicitly set. - public var hasOptions: Bool {return self._options != nil} - /// Clears the value of `options`. Subsequent reads from it will return its default value. - public mutating func clearOptions() {self._options = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _name: String? = nil - fileprivate var _options: Google_Protobuf_OneofOptions? = nil -} - -/// Describes an enum type. -public struct Google_Protobuf_EnumDescriptorProto { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var name: String { - get {return _name ?? String()} - set {_name = newValue} - } - /// Returns true if `name` has been explicitly set. - public var hasName: Bool {return self._name != nil} - /// Clears the value of `name`. Subsequent reads from it will return its default value. - public mutating func clearName() {self._name = nil} - - public var value: [Google_Protobuf_EnumValueDescriptorProto] = [] - - public var options: Google_Protobuf_EnumOptions { - get {return _options ?? Google_Protobuf_EnumOptions()} - set {_options = newValue} - } - /// Returns true if `options` has been explicitly set. - public var hasOptions: Bool {return self._options != nil} - /// Clears the value of `options`. Subsequent reads from it will return its default value. - public mutating func clearOptions() {self._options = nil} - - /// Range of reserved numeric values. Reserved numeric values may not be used - /// by enum values in the same enum declaration. Reserved ranges may not - /// overlap. - public var reservedRange: [Google_Protobuf_EnumDescriptorProto.EnumReservedRange] = [] - - /// Reserved enum value names, which may not be reused. A given name may only - /// be reserved once. - public var reservedName: [String] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - /// Range of reserved numeric values. Reserved values may not be used by - /// entries in the same enum. Reserved ranges may not overlap. - /// - /// Note that this is distinct from DescriptorProto.ReservedRange in that it - /// is inclusive such that it can appropriately represent the entire int32 - /// domain. - public struct EnumReservedRange { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Inclusive. - public var start: Int32 { - get {return _start ?? 0} - set {_start = newValue} - } - /// Returns true if `start` has been explicitly set. - public var hasStart: Bool {return self._start != nil} - /// Clears the value of `start`. Subsequent reads from it will return its default value. - public mutating func clearStart() {self._start = nil} - - /// Inclusive. - public var end: Int32 { - get {return _end ?? 0} - set {_end = newValue} - } - /// Returns true if `end` has been explicitly set. - public var hasEnd: Bool {return self._end != nil} - /// Clears the value of `end`. Subsequent reads from it will return its default value. - public mutating func clearEnd() {self._end = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _start: Int32? = nil - fileprivate var _end: Int32? = nil - } - - public init() {} - - fileprivate var _name: String? = nil - fileprivate var _options: Google_Protobuf_EnumOptions? = nil -} - -/// Describes a value within an enum. -public struct Google_Protobuf_EnumValueDescriptorProto { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var name: String { - get {return _name ?? String()} - set {_name = newValue} - } - /// Returns true if `name` has been explicitly set. - public var hasName: Bool {return self._name != nil} - /// Clears the value of `name`. Subsequent reads from it will return its default value. - public mutating func clearName() {self._name = nil} - - public var number: Int32 { - get {return _number ?? 0} - set {_number = newValue} - } - /// Returns true if `number` has been explicitly set. - public var hasNumber: Bool {return self._number != nil} - /// Clears the value of `number`. Subsequent reads from it will return its default value. - public mutating func clearNumber() {self._number = nil} - - public var options: Google_Protobuf_EnumValueOptions { - get {return _options ?? Google_Protobuf_EnumValueOptions()} - set {_options = newValue} - } - /// Returns true if `options` has been explicitly set. - public var hasOptions: Bool {return self._options != nil} - /// Clears the value of `options`. Subsequent reads from it will return its default value. - public mutating func clearOptions() {self._options = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _name: String? = nil - fileprivate var _number: Int32? = nil - fileprivate var _options: Google_Protobuf_EnumValueOptions? = nil -} - -/// Describes a service. -public struct Google_Protobuf_ServiceDescriptorProto { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var name: String { - get {return _name ?? String()} - set {_name = newValue} - } - /// Returns true if `name` has been explicitly set. - public var hasName: Bool {return self._name != nil} - /// Clears the value of `name`. Subsequent reads from it will return its default value. - public mutating func clearName() {self._name = nil} - - public var method: [Google_Protobuf_MethodDescriptorProto] = [] - - public var options: Google_Protobuf_ServiceOptions { - get {return _options ?? Google_Protobuf_ServiceOptions()} - set {_options = newValue} - } - /// Returns true if `options` has been explicitly set. - public var hasOptions: Bool {return self._options != nil} - /// Clears the value of `options`. Subsequent reads from it will return its default value. - public mutating func clearOptions() {self._options = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _name: String? = nil - fileprivate var _options: Google_Protobuf_ServiceOptions? = nil -} - -/// Describes a method of a service. -public struct Google_Protobuf_MethodDescriptorProto { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var name: String { - get {return _name ?? String()} - set {_name = newValue} - } - /// Returns true if `name` has been explicitly set. - public var hasName: Bool {return self._name != nil} - /// Clears the value of `name`. Subsequent reads from it will return its default value. - public mutating func clearName() {self._name = nil} - - /// Input and output type names. These are resolved in the same way as - /// FieldDescriptorProto.type_name, but must refer to a message type. - public var inputType: String { - get {return _inputType ?? String()} - set {_inputType = newValue} - } - /// Returns true if `inputType` has been explicitly set. - public var hasInputType: Bool {return self._inputType != nil} - /// Clears the value of `inputType`. Subsequent reads from it will return its default value. - public mutating func clearInputType() {self._inputType = nil} - - public var outputType: String { - get {return _outputType ?? String()} - set {_outputType = newValue} - } - /// Returns true if `outputType` has been explicitly set. - public var hasOutputType: Bool {return self._outputType != nil} - /// Clears the value of `outputType`. Subsequent reads from it will return its default value. - public mutating func clearOutputType() {self._outputType = nil} - - public var options: Google_Protobuf_MethodOptions { - get {return _options ?? Google_Protobuf_MethodOptions()} - set {_options = newValue} - } - /// Returns true if `options` has been explicitly set. - public var hasOptions: Bool {return self._options != nil} - /// Clears the value of `options`. Subsequent reads from it will return its default value. - public mutating func clearOptions() {self._options = nil} - - /// Identifies if client streams multiple client messages - public var clientStreaming: Bool { - get {return _clientStreaming ?? false} - set {_clientStreaming = newValue} - } - /// Returns true if `clientStreaming` has been explicitly set. - public var hasClientStreaming: Bool {return self._clientStreaming != nil} - /// Clears the value of `clientStreaming`. Subsequent reads from it will return its default value. - public mutating func clearClientStreaming() {self._clientStreaming = nil} - - /// Identifies if server streams multiple server messages - public var serverStreaming: Bool { - get {return _serverStreaming ?? false} - set {_serverStreaming = newValue} - } - /// Returns true if `serverStreaming` has been explicitly set. - public var hasServerStreaming: Bool {return self._serverStreaming != nil} - /// Clears the value of `serverStreaming`. Subsequent reads from it will return its default value. - public mutating func clearServerStreaming() {self._serverStreaming = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _name: String? = nil - fileprivate var _inputType: String? = nil - fileprivate var _outputType: String? = nil - fileprivate var _options: Google_Protobuf_MethodOptions? = nil - fileprivate var _clientStreaming: Bool? = nil - fileprivate var _serverStreaming: Bool? = nil -} - -public struct Google_Protobuf_FileOptions: SwiftProtobuf.ExtensibleMessage { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Sets the Java package where classes generated from this .proto will be - /// placed. By default, the proto package is used, but this is often - /// inappropriate because proto packages do not normally start with backwards - /// domain names. - public var javaPackage: String { - get {return _storage._javaPackage ?? String()} - set {_uniqueStorage()._javaPackage = newValue} - } - /// Returns true if `javaPackage` has been explicitly set. - public var hasJavaPackage: Bool {return _storage._javaPackage != nil} - /// Clears the value of `javaPackage`. Subsequent reads from it will return its default value. - public mutating func clearJavaPackage() {_uniqueStorage()._javaPackage = nil} - - /// Controls the name of the wrapper Java class generated for the .proto file. - /// That class will always contain the .proto file's getDescriptor() method as - /// well as any top-level extensions defined in the .proto file. - /// If java_multiple_files is disabled, then all the other classes from the - /// .proto file will be nested inside the single wrapper outer class. - public var javaOuterClassname: String { - get {return _storage._javaOuterClassname ?? String()} - set {_uniqueStorage()._javaOuterClassname = newValue} - } - /// Returns true if `javaOuterClassname` has been explicitly set. - public var hasJavaOuterClassname: Bool {return _storage._javaOuterClassname != nil} - /// Clears the value of `javaOuterClassname`. Subsequent reads from it will return its default value. - public mutating func clearJavaOuterClassname() {_uniqueStorage()._javaOuterClassname = nil} - - /// If enabled, then the Java code generator will generate a separate .java - /// file for each top-level message, enum, and service defined in the .proto - /// file. Thus, these types will *not* be nested inside the wrapper class - /// named by java_outer_classname. However, the wrapper class will still be - /// generated to contain the file's getDescriptor() method as well as any - /// top-level extensions defined in the file. - public var javaMultipleFiles: Bool { - get {return _storage._javaMultipleFiles ?? false} - set {_uniqueStorage()._javaMultipleFiles = newValue} - } - /// Returns true if `javaMultipleFiles` has been explicitly set. - public var hasJavaMultipleFiles: Bool {return _storage._javaMultipleFiles != nil} - /// Clears the value of `javaMultipleFiles`. Subsequent reads from it will return its default value. - public mutating func clearJavaMultipleFiles() {_uniqueStorage()._javaMultipleFiles = nil} - - /// This option does nothing. - public var javaGenerateEqualsAndHash: Bool { - get {return _storage._javaGenerateEqualsAndHash ?? false} - set {_uniqueStorage()._javaGenerateEqualsAndHash = newValue} - } - /// Returns true if `javaGenerateEqualsAndHash` has been explicitly set. - public var hasJavaGenerateEqualsAndHash: Bool {return _storage._javaGenerateEqualsAndHash != nil} - /// Clears the value of `javaGenerateEqualsAndHash`. Subsequent reads from it will return its default value. - public mutating func clearJavaGenerateEqualsAndHash() {_uniqueStorage()._javaGenerateEqualsAndHash = nil} - - /// If set true, then the Java2 code generator will generate code that - /// throws an exception whenever an attempt is made to assign a non-UTF-8 - /// byte sequence to a string field. - /// Message reflection will do the same. - /// However, an extension field still accepts non-UTF-8 byte sequences. - /// This option has no effect on when used with the lite runtime. - public var javaStringCheckUtf8: Bool { - get {return _storage._javaStringCheckUtf8 ?? false} - set {_uniqueStorage()._javaStringCheckUtf8 = newValue} - } - /// Returns true if `javaStringCheckUtf8` has been explicitly set. - public var hasJavaStringCheckUtf8: Bool {return _storage._javaStringCheckUtf8 != nil} - /// Clears the value of `javaStringCheckUtf8`. Subsequent reads from it will return its default value. - public mutating func clearJavaStringCheckUtf8() {_uniqueStorage()._javaStringCheckUtf8 = nil} - - public var optimizeFor: Google_Protobuf_FileOptions.OptimizeMode { - get {return _storage._optimizeFor ?? .speed} - set {_uniqueStorage()._optimizeFor = newValue} - } - /// Returns true if `optimizeFor` has been explicitly set. - public var hasOptimizeFor: Bool {return _storage._optimizeFor != nil} - /// Clears the value of `optimizeFor`. Subsequent reads from it will return its default value. - public mutating func clearOptimizeFor() {_uniqueStorage()._optimizeFor = nil} - - /// Sets the Go package where structs generated from this .proto will be - /// placed. If omitted, the Go package will be derived from the following: - /// - The basename of the package import path, if provided. - /// - Otherwise, the package statement in the .proto file, if present. - /// - Otherwise, the basename of the .proto file, without extension. - public var goPackage: String { - get {return _storage._goPackage ?? String()} - set {_uniqueStorage()._goPackage = newValue} - } - /// Returns true if `goPackage` has been explicitly set. - public var hasGoPackage: Bool {return _storage._goPackage != nil} - /// Clears the value of `goPackage`. Subsequent reads from it will return its default value. - public mutating func clearGoPackage() {_uniqueStorage()._goPackage = nil} - - /// Should generic services be generated in each language? "Generic" services - /// are not specific to any particular RPC system. They are generated by the - /// main code generators in each language (without additional plugins). - /// Generic services were the only kind of service generation supported by - /// early versions of google.protobuf. - /// - /// Generic services are now considered deprecated in favor of using plugins - /// that generate code specific to your particular RPC system. Therefore, - /// these default to false. Old code which depends on generic services should - /// explicitly set them to true. - public var ccGenericServices: Bool { - get {return _storage._ccGenericServices ?? false} - set {_uniqueStorage()._ccGenericServices = newValue} - } - /// Returns true if `ccGenericServices` has been explicitly set. - public var hasCcGenericServices: Bool {return _storage._ccGenericServices != nil} - /// Clears the value of `ccGenericServices`. Subsequent reads from it will return its default value. - public mutating func clearCcGenericServices() {_uniqueStorage()._ccGenericServices = nil} - - public var javaGenericServices: Bool { - get {return _storage._javaGenericServices ?? false} - set {_uniqueStorage()._javaGenericServices = newValue} - } - /// Returns true if `javaGenericServices` has been explicitly set. - public var hasJavaGenericServices: Bool {return _storage._javaGenericServices != nil} - /// Clears the value of `javaGenericServices`. Subsequent reads from it will return its default value. - public mutating func clearJavaGenericServices() {_uniqueStorage()._javaGenericServices = nil} - - public var pyGenericServices: Bool { - get {return _storage._pyGenericServices ?? false} - set {_uniqueStorage()._pyGenericServices = newValue} - } - /// Returns true if `pyGenericServices` has been explicitly set. - public var hasPyGenericServices: Bool {return _storage._pyGenericServices != nil} - /// Clears the value of `pyGenericServices`. Subsequent reads from it will return its default value. - public mutating func clearPyGenericServices() {_uniqueStorage()._pyGenericServices = nil} - - public var phpGenericServices: Bool { - get {return _storage._phpGenericServices ?? false} - set {_uniqueStorage()._phpGenericServices = newValue} - } - /// Returns true if `phpGenericServices` has been explicitly set. - public var hasPhpGenericServices: Bool {return _storage._phpGenericServices != nil} - /// Clears the value of `phpGenericServices`. Subsequent reads from it will return its default value. - public mutating func clearPhpGenericServices() {_uniqueStorage()._phpGenericServices = nil} - - /// Is this file deprecated? - /// Depending on the target platform, this can emit Deprecated annotations - /// for everything in the file, or it will be completely ignored; in the very - /// least, this is a formalization for deprecating files. - public var deprecated: Bool { - get {return _storage._deprecated ?? false} - set {_uniqueStorage()._deprecated = newValue} - } - /// Returns true if `deprecated` has been explicitly set. - public var hasDeprecated: Bool {return _storage._deprecated != nil} - /// Clears the value of `deprecated`. Subsequent reads from it will return its default value. - public mutating func clearDeprecated() {_uniqueStorage()._deprecated = nil} - - /// Enables the use of arenas for the proto messages in this file. This applies - /// only to generated classes for C++. - public var ccEnableArenas: Bool { - get {return _storage._ccEnableArenas ?? true} - set {_uniqueStorage()._ccEnableArenas = newValue} - } - /// Returns true if `ccEnableArenas` has been explicitly set. - public var hasCcEnableArenas: Bool {return _storage._ccEnableArenas != nil} - /// Clears the value of `ccEnableArenas`. Subsequent reads from it will return its default value. - public mutating func clearCcEnableArenas() {_uniqueStorage()._ccEnableArenas = nil} - - /// Sets the objective c class prefix which is prepended to all objective c - /// generated classes from this .proto. There is no default. - public var objcClassPrefix: String { - get {return _storage._objcClassPrefix ?? String()} - set {_uniqueStorage()._objcClassPrefix = newValue} - } - /// Returns true if `objcClassPrefix` has been explicitly set. - public var hasObjcClassPrefix: Bool {return _storage._objcClassPrefix != nil} - /// Clears the value of `objcClassPrefix`. Subsequent reads from it will return its default value. - public mutating func clearObjcClassPrefix() {_uniqueStorage()._objcClassPrefix = nil} - - /// Namespace for generated classes; defaults to the package. - public var csharpNamespace: String { - get {return _storage._csharpNamespace ?? String()} - set {_uniqueStorage()._csharpNamespace = newValue} - } - /// Returns true if `csharpNamespace` has been explicitly set. - public var hasCsharpNamespace: Bool {return _storage._csharpNamespace != nil} - /// Clears the value of `csharpNamespace`. Subsequent reads from it will return its default value. - public mutating func clearCsharpNamespace() {_uniqueStorage()._csharpNamespace = nil} - - /// By default Swift generators will take the proto package and CamelCase it - /// replacing '.' with underscore and use that to prefix the types/symbols - /// defined. When this options is provided, they will use this value instead - /// to prefix the types/symbols defined. - public var swiftPrefix: String { - get {return _storage._swiftPrefix ?? String()} - set {_uniqueStorage()._swiftPrefix = newValue} - } - /// Returns true if `swiftPrefix` has been explicitly set. - public var hasSwiftPrefix: Bool {return _storage._swiftPrefix != nil} - /// Clears the value of `swiftPrefix`. Subsequent reads from it will return its default value. - public mutating func clearSwiftPrefix() {_uniqueStorage()._swiftPrefix = nil} - - /// Sets the php class prefix which is prepended to all php generated classes - /// from this .proto. Default is empty. - public var phpClassPrefix: String { - get {return _storage._phpClassPrefix ?? String()} - set {_uniqueStorage()._phpClassPrefix = newValue} - } - /// Returns true if `phpClassPrefix` has been explicitly set. - public var hasPhpClassPrefix: Bool {return _storage._phpClassPrefix != nil} - /// Clears the value of `phpClassPrefix`. Subsequent reads from it will return its default value. - public mutating func clearPhpClassPrefix() {_uniqueStorage()._phpClassPrefix = nil} - - /// Use this option to change the namespace of php generated classes. Default - /// is empty. When this option is empty, the package name will be used for - /// determining the namespace. - public var phpNamespace: String { - get {return _storage._phpNamespace ?? String()} - set {_uniqueStorage()._phpNamespace = newValue} - } - /// Returns true if `phpNamespace` has been explicitly set. - public var hasPhpNamespace: Bool {return _storage._phpNamespace != nil} - /// Clears the value of `phpNamespace`. Subsequent reads from it will return its default value. - public mutating func clearPhpNamespace() {_uniqueStorage()._phpNamespace = nil} - - /// Use this option to change the namespace of php generated metadata classes. - /// Default is empty. When this option is empty, the proto file name will be - /// used for determining the namespace. - public var phpMetadataNamespace: String { - get {return _storage._phpMetadataNamespace ?? String()} - set {_uniqueStorage()._phpMetadataNamespace = newValue} - } - /// Returns true if `phpMetadataNamespace` has been explicitly set. - public var hasPhpMetadataNamespace: Bool {return _storage._phpMetadataNamespace != nil} - /// Clears the value of `phpMetadataNamespace`. Subsequent reads from it will return its default value. - public mutating func clearPhpMetadataNamespace() {_uniqueStorage()._phpMetadataNamespace = nil} - - /// Use this option to change the package of ruby generated classes. Default - /// is empty. When this option is not set, the package name will be used for - /// determining the ruby package. - public var rubyPackage: String { - get {return _storage._rubyPackage ?? String()} - set {_uniqueStorage()._rubyPackage = newValue} - } - /// Returns true if `rubyPackage` has been explicitly set. - public var hasRubyPackage: Bool {return _storage._rubyPackage != nil} - /// Clears the value of `rubyPackage`. Subsequent reads from it will return its default value. - public mutating func clearRubyPackage() {_uniqueStorage()._rubyPackage = nil} - - /// The parser stores options it doesn't recognize here. - /// See the documentation for the "Options" section above. - public var uninterpretedOption: [Google_Protobuf_UninterpretedOption] { - get {return _storage._uninterpretedOption} - set {_uniqueStorage()._uninterpretedOption = newValue} - } - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - /// Generated classes can be optimized for speed or code size. - public enum OptimizeMode: SwiftProtobuf.Enum { - public typealias RawValue = Int - - /// Generate complete code for parsing, serialization, - case speed // = 1 - - /// etc. - case codeSize // = 2 - - /// Generate code using MessageLite and the lite runtime. - case liteRuntime // = 3 - - public init() { - self = .speed - } - - public init?(rawValue: Int) { - switch rawValue { - case 1: self = .speed - case 2: self = .codeSize - case 3: self = .liteRuntime - default: return nil - } - } - - public var rawValue: Int { - switch self { - case .speed: return 1 - case .codeSize: return 2 - case .liteRuntime: return 3 - } - } - - } - - public init() {} - - public var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet() - fileprivate var _storage = _StorageClass.defaultInstance -} - -#if swift(>=4.2) - -extension Google_Protobuf_FileOptions.OptimizeMode: CaseIterable { - // Support synthesized by the compiler. -} - -#endif // swift(>=4.2) - -public struct Google_Protobuf_MessageOptions: SwiftProtobuf.ExtensibleMessage { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Set true to use the old proto1 MessageSet wire format for extensions. - /// This is provided for backwards-compatibility with the MessageSet wire - /// format. You should not use this for any other reason: It's less - /// efficient, has fewer features, and is more complicated. - /// - /// The message must be defined exactly as follows: - /// message Foo { - /// option message_set_wire_format = true; - /// extensions 4 to max; - /// } - /// Note that the message cannot have any defined fields; MessageSets only - /// have extensions. - /// - /// All extensions of your type must be singular messages; e.g. they cannot - /// be int32s, enums, or repeated messages. - /// - /// Because this is an option, the above two restrictions are not enforced by - /// the protocol compiler. - public var messageSetWireFormat: Bool { - get {return _messageSetWireFormat ?? false} - set {_messageSetWireFormat = newValue} - } - /// Returns true if `messageSetWireFormat` has been explicitly set. - public var hasMessageSetWireFormat: Bool {return self._messageSetWireFormat != nil} - /// Clears the value of `messageSetWireFormat`. Subsequent reads from it will return its default value. - public mutating func clearMessageSetWireFormat() {self._messageSetWireFormat = nil} - - /// Disables the generation of the standard "descriptor()" accessor, which can - /// conflict with a field of the same name. This is meant to make migration - /// from proto1 easier; new code should avoid fields named "descriptor". - public var noStandardDescriptorAccessor: Bool { - get {return _noStandardDescriptorAccessor ?? false} - set {_noStandardDescriptorAccessor = newValue} - } - /// Returns true if `noStandardDescriptorAccessor` has been explicitly set. - public var hasNoStandardDescriptorAccessor: Bool {return self._noStandardDescriptorAccessor != nil} - /// Clears the value of `noStandardDescriptorAccessor`. Subsequent reads from it will return its default value. - public mutating func clearNoStandardDescriptorAccessor() {self._noStandardDescriptorAccessor = nil} - - /// Is this message deprecated? - /// Depending on the target platform, this can emit Deprecated annotations - /// for the message, or it will be completely ignored; in the very least, - /// this is a formalization for deprecating messages. - public var deprecated: Bool { - get {return _deprecated ?? false} - set {_deprecated = newValue} - } - /// Returns true if `deprecated` has been explicitly set. - public var hasDeprecated: Bool {return self._deprecated != nil} - /// Clears the value of `deprecated`. Subsequent reads from it will return its default value. - public mutating func clearDeprecated() {self._deprecated = nil} - - /// Whether the message is an automatically generated map entry type for the - /// maps field. - /// - /// For maps fields: - /// map map_field = 1; - /// The parsed descriptor looks like: - /// message MapFieldEntry { - /// option map_entry = true; - /// optional KeyType key = 1; - /// optional ValueType value = 2; - /// } - /// repeated MapFieldEntry map_field = 1; - /// - /// Implementations may choose not to generate the map_entry=true message, but - /// use a native map in the target language to hold the keys and values. - /// The reflection APIs in such implementations still need to work as - /// if the field is a repeated message field. - /// - /// NOTE: Do not set the option in .proto files. Always use the maps syntax - /// instead. The option should only be implicitly set by the proto compiler - /// parser. - public var mapEntry: Bool { - get {return _mapEntry ?? false} - set {_mapEntry = newValue} - } - /// Returns true if `mapEntry` has been explicitly set. - public var hasMapEntry: Bool {return self._mapEntry != nil} - /// Clears the value of `mapEntry`. Subsequent reads from it will return its default value. - public mutating func clearMapEntry() {self._mapEntry = nil} - - /// The parser stores options it doesn't recognize here. See above. - public var uninterpretedOption: [Google_Protobuf_UninterpretedOption] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - public var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet() - fileprivate var _messageSetWireFormat: Bool? = nil - fileprivate var _noStandardDescriptorAccessor: Bool? = nil - fileprivate var _deprecated: Bool? = nil - fileprivate var _mapEntry: Bool? = nil -} - -public struct Google_Protobuf_FieldOptions: SwiftProtobuf.ExtensibleMessage { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The ctype option instructs the C++ code generator to use a different - /// representation of the field than it normally would. See the specific - /// options below. This option is not yet implemented in the open source - /// release -- sorry, we'll try to include it in a future version! - public var ctype: Google_Protobuf_FieldOptions.CType { - get {return _ctype ?? .string} - set {_ctype = newValue} - } - /// Returns true if `ctype` has been explicitly set. - public var hasCtype: Bool {return self._ctype != nil} - /// Clears the value of `ctype`. Subsequent reads from it will return its default value. - public mutating func clearCtype() {self._ctype = nil} - - /// The packed option can be enabled for repeated primitive fields to enable - /// a more efficient representation on the wire. Rather than repeatedly - /// writing the tag and type for each element, the entire array is encoded as - /// a single length-delimited blob. In proto3, only explicit setting it to - /// false will avoid using packed encoding. - public var packed: Bool { - get {return _packed ?? false} - set {_packed = newValue} - } - /// Returns true if `packed` has been explicitly set. - public var hasPacked: Bool {return self._packed != nil} - /// Clears the value of `packed`. Subsequent reads from it will return its default value. - public mutating func clearPacked() {self._packed = nil} - - /// The jstype option determines the JavaScript type used for values of the - /// field. The option is permitted only for 64 bit integral and fixed types - /// (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING - /// is represented as JavaScript string, which avoids loss of precision that - /// can happen when a large value is converted to a floating point JavaScript. - /// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to - /// use the JavaScript "number" type. The behavior of the default option - /// JS_NORMAL is implementation dependent. - /// - /// This option is an enum to permit additional types to be added, e.g. - /// goog.math.Integer. - public var jstype: Google_Protobuf_FieldOptions.JSType { - get {return _jstype ?? .jsNormal} - set {_jstype = newValue} - } - /// Returns true if `jstype` has been explicitly set. - public var hasJstype: Bool {return self._jstype != nil} - /// Clears the value of `jstype`. Subsequent reads from it will return its default value. - public mutating func clearJstype() {self._jstype = nil} - - /// Should this field be parsed lazily? Lazy applies only to message-type - /// fields. It means that when the outer message is initially parsed, the - /// inner message's contents will not be parsed but instead stored in encoded - /// form. The inner message will actually be parsed when it is first accessed. - /// - /// This is only a hint. Implementations are free to choose whether to use - /// eager or lazy parsing regardless of the value of this option. However, - /// setting this option true suggests that the protocol author believes that - /// using lazy parsing on this field is worth the additional bookkeeping - /// overhead typically needed to implement it. - /// - /// This option does not affect the public interface of any generated code; - /// all method signatures remain the same. Furthermore, thread-safety of the - /// interface is not affected by this option; const methods remain safe to - /// call from multiple threads concurrently, while non-const methods continue - /// to require exclusive access. - /// - /// - /// Note that implementations may choose not to check required fields within - /// a lazy sub-message. That is, calling IsInitialized() on the outer message - /// may return true even if the inner message has missing required fields. - /// This is necessary because otherwise the inner message would have to be - /// parsed in order to perform the check, defeating the purpose of lazy - /// parsing. An implementation which chooses not to check required fields - /// must be consistent about it. That is, for any particular sub-message, the - /// implementation must either *always* check its required fields, or *never* - /// check its required fields, regardless of whether or not the message has - /// been parsed. - public var lazy: Bool { - get {return _lazy ?? false} - set {_lazy = newValue} - } - /// Returns true if `lazy` has been explicitly set. - public var hasLazy: Bool {return self._lazy != nil} - /// Clears the value of `lazy`. Subsequent reads from it will return its default value. - public mutating func clearLazy() {self._lazy = nil} - - /// Is this field deprecated? - /// Depending on the target platform, this can emit Deprecated annotations - /// for accessors, or it will be completely ignored; in the very least, this - /// is a formalization for deprecating fields. - public var deprecated: Bool { - get {return _deprecated ?? false} - set {_deprecated = newValue} - } - /// Returns true if `deprecated` has been explicitly set. - public var hasDeprecated: Bool {return self._deprecated != nil} - /// Clears the value of `deprecated`. Subsequent reads from it will return its default value. - public mutating func clearDeprecated() {self._deprecated = nil} - - /// For Google-internal migration only. Do not use. - public var weak: Bool { - get {return _weak ?? false} - set {_weak = newValue} - } - /// Returns true if `weak` has been explicitly set. - public var hasWeak: Bool {return self._weak != nil} - /// Clears the value of `weak`. Subsequent reads from it will return its default value. - public mutating func clearWeak() {self._weak = nil} - - /// The parser stores options it doesn't recognize here. See above. - public var uninterpretedOption: [Google_Protobuf_UninterpretedOption] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public enum CType: SwiftProtobuf.Enum { - public typealias RawValue = Int - - /// Default mode. - case string // = 0 - case cord // = 1 - case stringPiece // = 2 - - public init() { - self = .string - } - - public init?(rawValue: Int) { - switch rawValue { - case 0: self = .string - case 1: self = .cord - case 2: self = .stringPiece - default: return nil - } - } - - public var rawValue: Int { - switch self { - case .string: return 0 - case .cord: return 1 - case .stringPiece: return 2 - } - } - - } - - public enum JSType: SwiftProtobuf.Enum { - public typealias RawValue = Int - - /// Use the default type. - case jsNormal // = 0 - - /// Use JavaScript strings. - case jsString // = 1 - - /// Use JavaScript numbers. - case jsNumber // = 2 - - public init() { - self = .jsNormal - } - - public init?(rawValue: Int) { - switch rawValue { - case 0: self = .jsNormal - case 1: self = .jsString - case 2: self = .jsNumber - default: return nil - } - } - - public var rawValue: Int { - switch self { - case .jsNormal: return 0 - case .jsString: return 1 - case .jsNumber: return 2 - } - } - - } - - public init() {} - - public var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet() - fileprivate var _ctype: Google_Protobuf_FieldOptions.CType? = nil - fileprivate var _packed: Bool? = nil - fileprivate var _jstype: Google_Protobuf_FieldOptions.JSType? = nil - fileprivate var _lazy: Bool? = nil - fileprivate var _deprecated: Bool? = nil - fileprivate var _weak: Bool? = nil -} - -#if swift(>=4.2) - -extension Google_Protobuf_FieldOptions.CType: CaseIterable { - // Support synthesized by the compiler. -} - -extension Google_Protobuf_FieldOptions.JSType: CaseIterable { - // Support synthesized by the compiler. -} - -#endif // swift(>=4.2) - -public struct Google_Protobuf_OneofOptions: SwiftProtobuf.ExtensibleMessage { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The parser stores options it doesn't recognize here. See above. - public var uninterpretedOption: [Google_Protobuf_UninterpretedOption] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - public var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet() -} - -public struct Google_Protobuf_EnumOptions: SwiftProtobuf.ExtensibleMessage { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Set this option to true to allow mapping different tag names to the same - /// value. - public var allowAlias: Bool { - get {return _allowAlias ?? false} - set {_allowAlias = newValue} - } - /// Returns true if `allowAlias` has been explicitly set. - public var hasAllowAlias: Bool {return self._allowAlias != nil} - /// Clears the value of `allowAlias`. Subsequent reads from it will return its default value. - public mutating func clearAllowAlias() {self._allowAlias = nil} - - /// Is this enum deprecated? - /// Depending on the target platform, this can emit Deprecated annotations - /// for the enum, or it will be completely ignored; in the very least, this - /// is a formalization for deprecating enums. - public var deprecated: Bool { - get {return _deprecated ?? false} - set {_deprecated = newValue} - } - /// Returns true if `deprecated` has been explicitly set. - public var hasDeprecated: Bool {return self._deprecated != nil} - /// Clears the value of `deprecated`. Subsequent reads from it will return its default value. - public mutating func clearDeprecated() {self._deprecated = nil} - - /// The parser stores options it doesn't recognize here. See above. - public var uninterpretedOption: [Google_Protobuf_UninterpretedOption] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - public var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet() - fileprivate var _allowAlias: Bool? = nil - fileprivate var _deprecated: Bool? = nil -} - -public struct Google_Protobuf_EnumValueOptions: SwiftProtobuf.ExtensibleMessage { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Is this enum value deprecated? - /// Depending on the target platform, this can emit Deprecated annotations - /// for the enum value, or it will be completely ignored; in the very least, - /// this is a formalization for deprecating enum values. - public var deprecated: Bool { - get {return _deprecated ?? false} - set {_deprecated = newValue} - } - /// Returns true if `deprecated` has been explicitly set. - public var hasDeprecated: Bool {return self._deprecated != nil} - /// Clears the value of `deprecated`. Subsequent reads from it will return its default value. - public mutating func clearDeprecated() {self._deprecated = nil} - - /// The parser stores options it doesn't recognize here. See above. - public var uninterpretedOption: [Google_Protobuf_UninterpretedOption] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - public var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet() - fileprivate var _deprecated: Bool? = nil -} - -public struct Google_Protobuf_ServiceOptions: SwiftProtobuf.ExtensibleMessage { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Is this service deprecated? - /// Depending on the target platform, this can emit Deprecated annotations - /// for the service, or it will be completely ignored; in the very least, - /// this is a formalization for deprecating services. - public var deprecated: Bool { - get {return _deprecated ?? false} - set {_deprecated = newValue} - } - /// Returns true if `deprecated` has been explicitly set. - public var hasDeprecated: Bool {return self._deprecated != nil} - /// Clears the value of `deprecated`. Subsequent reads from it will return its default value. - public mutating func clearDeprecated() {self._deprecated = nil} - - /// The parser stores options it doesn't recognize here. See above. - public var uninterpretedOption: [Google_Protobuf_UninterpretedOption] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - public var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet() - fileprivate var _deprecated: Bool? = nil -} - -public struct Google_Protobuf_MethodOptions: SwiftProtobuf.ExtensibleMessage { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Is this method deprecated? - /// Depending on the target platform, this can emit Deprecated annotations - /// for the method, or it will be completely ignored; in the very least, - /// this is a formalization for deprecating methods. - public var deprecated: Bool { - get {return _deprecated ?? false} - set {_deprecated = newValue} - } - /// Returns true if `deprecated` has been explicitly set. - public var hasDeprecated: Bool {return self._deprecated != nil} - /// Clears the value of `deprecated`. Subsequent reads from it will return its default value. - public mutating func clearDeprecated() {self._deprecated = nil} - - public var idempotencyLevel: Google_Protobuf_MethodOptions.IdempotencyLevel { - get {return _idempotencyLevel ?? .idempotencyUnknown} - set {_idempotencyLevel = newValue} - } - /// Returns true if `idempotencyLevel` has been explicitly set. - public var hasIdempotencyLevel: Bool {return self._idempotencyLevel != nil} - /// Clears the value of `idempotencyLevel`. Subsequent reads from it will return its default value. - public mutating func clearIdempotencyLevel() {self._idempotencyLevel = nil} - - /// The parser stores options it doesn't recognize here. See above. - public var uninterpretedOption: [Google_Protobuf_UninterpretedOption] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - /// Is this method side-effect-free (or safe in HTTP parlance), or idempotent, - /// or neither? HTTP based RPC implementation may choose GET verb for safe - /// methods, and PUT verb for idempotent methods instead of the default POST. - public enum IdempotencyLevel: SwiftProtobuf.Enum { - public typealias RawValue = Int - case idempotencyUnknown // = 0 - - /// implies idempotent - case noSideEffects // = 1 - - /// idempotent, but may have side effects - case idempotent // = 2 - - public init() { - self = .idempotencyUnknown - } - - public init?(rawValue: Int) { - switch rawValue { - case 0: self = .idempotencyUnknown - case 1: self = .noSideEffects - case 2: self = .idempotent - default: return nil - } - } - - public var rawValue: Int { - switch self { - case .idempotencyUnknown: return 0 - case .noSideEffects: return 1 - case .idempotent: return 2 - } - } - - } - - public init() {} - - public var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet() - fileprivate var _deprecated: Bool? = nil - fileprivate var _idempotencyLevel: Google_Protobuf_MethodOptions.IdempotencyLevel? = nil -} - -#if swift(>=4.2) - -extension Google_Protobuf_MethodOptions.IdempotencyLevel: CaseIterable { - // Support synthesized by the compiler. -} - -#endif // swift(>=4.2) - -/// A message representing a option the parser does not recognize. This only -/// appears in options protos created by the compiler::Parser class. -/// DescriptorPool resolves these when building Descriptor objects. Therefore, -/// options protos in descriptor objects (e.g. returned by Descriptor::options(), -/// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions -/// in them. -public struct Google_Protobuf_UninterpretedOption { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var name: [Google_Protobuf_UninterpretedOption.NamePart] = [] - - /// The value of the uninterpreted option, in whatever type the tokenizer - /// identified it as during parsing. Exactly one of these should be set. - public var identifierValue: String { - get {return _identifierValue ?? String()} - set {_identifierValue = newValue} - } - /// Returns true if `identifierValue` has been explicitly set. - public var hasIdentifierValue: Bool {return self._identifierValue != nil} - /// Clears the value of `identifierValue`. Subsequent reads from it will return its default value. - public mutating func clearIdentifierValue() {self._identifierValue = nil} - - public var positiveIntValue: UInt64 { - get {return _positiveIntValue ?? 0} - set {_positiveIntValue = newValue} - } - /// Returns true if `positiveIntValue` has been explicitly set. - public var hasPositiveIntValue: Bool {return self._positiveIntValue != nil} - /// Clears the value of `positiveIntValue`. Subsequent reads from it will return its default value. - public mutating func clearPositiveIntValue() {self._positiveIntValue = nil} - - public var negativeIntValue: Int64 { - get {return _negativeIntValue ?? 0} - set {_negativeIntValue = newValue} - } - /// Returns true if `negativeIntValue` has been explicitly set. - public var hasNegativeIntValue: Bool {return self._negativeIntValue != nil} - /// Clears the value of `negativeIntValue`. Subsequent reads from it will return its default value. - public mutating func clearNegativeIntValue() {self._negativeIntValue = nil} - - public var doubleValue: Double { - get {return _doubleValue ?? 0} - set {_doubleValue = newValue} - } - /// Returns true if `doubleValue` has been explicitly set. - public var hasDoubleValue: Bool {return self._doubleValue != nil} - /// Clears the value of `doubleValue`. Subsequent reads from it will return its default value. - public mutating func clearDoubleValue() {self._doubleValue = nil} - - public var stringValue: Data { - get {return _stringValue ?? Data()} - set {_stringValue = newValue} - } - /// Returns true if `stringValue` has been explicitly set. - public var hasStringValue: Bool {return self._stringValue != nil} - /// Clears the value of `stringValue`. Subsequent reads from it will return its default value. - public mutating func clearStringValue() {self._stringValue = nil} - - public var aggregateValue: String { - get {return _aggregateValue ?? String()} - set {_aggregateValue = newValue} - } - /// Returns true if `aggregateValue` has been explicitly set. - public var hasAggregateValue: Bool {return self._aggregateValue != nil} - /// Clears the value of `aggregateValue`. Subsequent reads from it will return its default value. - public mutating func clearAggregateValue() {self._aggregateValue = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - /// The name of the uninterpreted option. Each string represents a segment in - /// a dot-separated name. is_extension is true iff a segment represents an - /// extension (denoted with parentheses in options specs in .proto files). - /// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents - /// "foo.(bar.baz).qux". - public struct NamePart { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var namePart: String { - get {return _namePart ?? String()} - set {_namePart = newValue} - } - /// Returns true if `namePart` has been explicitly set. - public var hasNamePart: Bool {return self._namePart != nil} - /// Clears the value of `namePart`. Subsequent reads from it will return its default value. - public mutating func clearNamePart() {self._namePart = nil} - - public var isExtension: Bool { - get {return _isExtension ?? false} - set {_isExtension = newValue} - } - /// Returns true if `isExtension` has been explicitly set. - public var hasIsExtension: Bool {return self._isExtension != nil} - /// Clears the value of `isExtension`. Subsequent reads from it will return its default value. - public mutating func clearIsExtension() {self._isExtension = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _namePart: String? = nil - fileprivate var _isExtension: Bool? = nil - } - - public init() {} - - fileprivate var _identifierValue: String? = nil - fileprivate var _positiveIntValue: UInt64? = nil - fileprivate var _negativeIntValue: Int64? = nil - fileprivate var _doubleValue: Double? = nil - fileprivate var _stringValue: Data? = nil - fileprivate var _aggregateValue: String? = nil -} - -/// Encapsulates information about the original source file from which a -/// FileDescriptorProto was generated. -public struct Google_Protobuf_SourceCodeInfo { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// A Location identifies a piece of source code in a .proto file which - /// corresponds to a particular definition. This information is intended - /// to be useful to IDEs, code indexers, documentation generators, and similar - /// tools. - /// - /// For example, say we have a file like: - /// message Foo { - /// optional string foo = 1; - /// } - /// Let's look at just the field definition: - /// optional string foo = 1; - /// ^ ^^ ^^ ^ ^^^ - /// a bc de f ghi - /// We have the following locations: - /// span path represents - /// [a,i) [ 4, 0, 2, 0 ] The whole field definition. - /// [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). - /// [c,d) [ 4, 0, 2, 0, 5 ] The type (string). - /// [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). - /// [g,h) [ 4, 0, 2, 0, 3 ] The number (1). - /// - /// Notes: - /// - A location may refer to a repeated field itself (i.e. not to any - /// particular index within it). This is used whenever a set of elements are - /// logically enclosed in a single code segment. For example, an entire - /// extend block (possibly containing multiple extension definitions) will - /// have an outer location whose path refers to the "extensions" repeated - /// field without an index. - /// - Multiple locations may have the same path. This happens when a single - /// logical declaration is spread out across multiple places. The most - /// obvious example is the "extend" block again -- there may be multiple - /// extend blocks in the same scope, each of which will have the same path. - /// - A location's span is not always a subset of its parent's span. For - /// example, the "extendee" of an extension declaration appears at the - /// beginning of the "extend" block and is shared by all extensions within - /// the block. - /// - Just because a location's span is a subset of some other location's span - /// does not mean that it is a descendant. For example, a "group" defines - /// both a type and a field in a single declaration. Thus, the locations - /// corresponding to the type and field and their components will overlap. - /// - Code which tries to interpret locations should probably be designed to - /// ignore those that it doesn't understand, as more types of locations could - /// be recorded in the future. - public var location: [Google_Protobuf_SourceCodeInfo.Location] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public struct Location { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Identifies which part of the FileDescriptorProto was defined at this - /// location. - /// - /// Each element is a field number or an index. They form a path from - /// the root FileDescriptorProto to the place where the definition. For - /// example, this path: - /// [ 4, 3, 2, 7, 1 ] - /// refers to: - /// file.message_type(3) // 4, 3 - /// .field(7) // 2, 7 - /// .name() // 1 - /// This is because FileDescriptorProto.message_type has field number 4: - /// repeated DescriptorProto message_type = 4; - /// and DescriptorProto.field has field number 2: - /// repeated FieldDescriptorProto field = 2; - /// and FieldDescriptorProto.name has field number 1: - /// optional string name = 1; - /// - /// Thus, the above path gives the location of a field name. If we removed - /// the last element: - /// [ 4, 3, 2, 7 ] - /// this path refers to the whole field declaration (from the beginning - /// of the label to the terminating semicolon). - public var path: [Int32] = [] - - /// Always has exactly three or four elements: start line, start column, - /// end line (optional, otherwise assumed same as start line), end column. - /// These are packed into a single field for efficiency. Note that line - /// and column numbers are zero-based -- typically you will want to add - /// 1 to each before displaying to a user. - public var span: [Int32] = [] - - /// If this SourceCodeInfo represents a complete declaration, these are any - /// comments appearing before and after the declaration which appear to be - /// attached to the declaration. - /// - /// A series of line comments appearing on consecutive lines, with no other - /// tokens appearing on those lines, will be treated as a single comment. - /// - /// leading_detached_comments will keep paragraphs of comments that appear - /// before (but not connected to) the current element. Each paragraph, - /// separated by empty lines, will be one comment element in the repeated - /// field. - /// - /// Only the comment content is provided; comment markers (e.g. //) are - /// stripped out. For block comments, leading whitespace and an asterisk - /// will be stripped from the beginning of each line other than the first. - /// Newlines are included in the output. - /// - /// Examples: - /// - /// optional int32 foo = 1; // Comment attached to foo. - /// // Comment attached to bar. - /// optional int32 bar = 2; - /// - /// optional string baz = 3; - /// // Comment attached to baz. - /// // Another line attached to baz. - /// - /// // Comment attached to qux. - /// // - /// // Another line attached to qux. - /// optional double qux = 4; - /// - /// // Detached comment for corge. This is not leading or trailing comments - /// // to qux or corge because there are blank lines separating it from - /// // both. - /// - /// // Detached comment for corge paragraph 2. - /// - /// optional string corge = 5; - /// /* Block comment attached - /// * to corge. Leading asterisks - /// * will be removed. */ - /// /* Block comment attached to - /// * grault. */ - /// optional int32 grault = 6; - /// - /// // ignored detached comments. - public var leadingComments: String { - get {return _leadingComments ?? String()} - set {_leadingComments = newValue} - } - /// Returns true if `leadingComments` has been explicitly set. - public var hasLeadingComments: Bool {return self._leadingComments != nil} - /// Clears the value of `leadingComments`. Subsequent reads from it will return its default value. - public mutating func clearLeadingComments() {self._leadingComments = nil} - - public var trailingComments: String { - get {return _trailingComments ?? String()} - set {_trailingComments = newValue} - } - /// Returns true if `trailingComments` has been explicitly set. - public var hasTrailingComments: Bool {return self._trailingComments != nil} - /// Clears the value of `trailingComments`. Subsequent reads from it will return its default value. - public mutating func clearTrailingComments() {self._trailingComments = nil} - - public var leadingDetachedComments: [String] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _leadingComments: String? = nil - fileprivate var _trailingComments: String? = nil - } - - public init() {} -} - -/// Describes the relationship between generated code and its original source -/// file. A GeneratedCodeInfo message is associated with only one generated -/// source file, but may contain references to different source .proto files. -public struct Google_Protobuf_GeneratedCodeInfo { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// An Annotation connects some span of text in generated code to an element - /// of its generating .proto file. - public var annotation: [Google_Protobuf_GeneratedCodeInfo.Annotation] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public struct Annotation { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Identifies the element in the original source .proto file. This field - /// is formatted the same as SourceCodeInfo.Location.path. - public var path: [Int32] = [] - - /// Identifies the filesystem path to the original source .proto. - public var sourceFile: String { - get {return _sourceFile ?? String()} - set {_sourceFile = newValue} - } - /// Returns true if `sourceFile` has been explicitly set. - public var hasSourceFile: Bool {return self._sourceFile != nil} - /// Clears the value of `sourceFile`. Subsequent reads from it will return its default value. - public mutating func clearSourceFile() {self._sourceFile = nil} - - /// Identifies the starting offset in bytes in the generated code - /// that relates to the identified object. - public var begin: Int32 { - get {return _begin ?? 0} - set {_begin = newValue} - } - /// Returns true if `begin` has been explicitly set. - public var hasBegin: Bool {return self._begin != nil} - /// Clears the value of `begin`. Subsequent reads from it will return its default value. - public mutating func clearBegin() {self._begin = nil} - - /// Identifies the ending offset in bytes in the generated code that - /// relates to the identified offset. The end offset should be one past - /// the last relevant byte (so the length of the text = end - begin). - public var end: Int32 { - get {return _end ?? 0} - set {_end = newValue} - } - /// Returns true if `end` has been explicitly set. - public var hasEnd: Bool {return self._end != nil} - /// Clears the value of `end`. Subsequent reads from it will return its default value. - public mutating func clearEnd() {self._end = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _sourceFile: String? = nil - fileprivate var _begin: Int32? = nil - fileprivate var _end: Int32? = nil - } - - public init() {} -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_FileDescriptorSet: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".FileDescriptorSet" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "file"), - ] - - public var isInitialized: Bool { - if !SwiftProtobuf.Internal.areAllInitialized(self.file) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeRepeatedMessageField(value: &self.file) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.file.isEmpty { - try visitor.visitRepeatedMessageField(value: self.file, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_FileDescriptorSet, rhs: Google_Protobuf_FileDescriptorSet) -> Bool { - if lhs.file != rhs.file {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_FileDescriptorProto: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".FileDescriptorProto" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "package"), - 3: .same(proto: "dependency"), - 10: .standard(proto: "public_dependency"), - 11: .standard(proto: "weak_dependency"), - 4: .standard(proto: "message_type"), - 5: .standard(proto: "enum_type"), - 6: .same(proto: "service"), - 7: .same(proto: "extension"), - 8: .same(proto: "options"), - 9: .standard(proto: "source_code_info"), - 12: .same(proto: "syntax"), - ] - - public var isInitialized: Bool { - if !SwiftProtobuf.Internal.areAllInitialized(self.messageType) {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.enumType) {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.service) {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.`extension`) {return false} - if let v = self._options, !v.isInitialized {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self._name) }() - case 2: try { try decoder.decodeSingularStringField(value: &self._package) }() - case 3: try { try decoder.decodeRepeatedStringField(value: &self.dependency) }() - case 4: try { try decoder.decodeRepeatedMessageField(value: &self.messageType) }() - case 5: try { try decoder.decodeRepeatedMessageField(value: &self.enumType) }() - case 6: try { try decoder.decodeRepeatedMessageField(value: &self.service) }() - case 7: try { try decoder.decodeRepeatedMessageField(value: &self.`extension`) }() - case 8: try { try decoder.decodeSingularMessageField(value: &self._options) }() - case 9: try { try decoder.decodeSingularMessageField(value: &self._sourceCodeInfo) }() - case 10: try { try decoder.decodeRepeatedInt32Field(value: &self.publicDependency) }() - case 11: try { try decoder.decodeRepeatedInt32Field(value: &self.weakDependency) }() - case 12: try { try decoder.decodeSingularStringField(value: &self._syntax) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._name { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if let v = self._package { - try visitor.visitSingularStringField(value: v, fieldNumber: 2) - } - if !self.dependency.isEmpty { - try visitor.visitRepeatedStringField(value: self.dependency, fieldNumber: 3) - } - if !self.messageType.isEmpty { - try visitor.visitRepeatedMessageField(value: self.messageType, fieldNumber: 4) - } - if !self.enumType.isEmpty { - try visitor.visitRepeatedMessageField(value: self.enumType, fieldNumber: 5) - } - if !self.service.isEmpty { - try visitor.visitRepeatedMessageField(value: self.service, fieldNumber: 6) - } - if !self.`extension`.isEmpty { - try visitor.visitRepeatedMessageField(value: self.`extension`, fieldNumber: 7) - } - if let v = self._options { - try visitor.visitSingularMessageField(value: v, fieldNumber: 8) - } - if let v = self._sourceCodeInfo { - try visitor.visitSingularMessageField(value: v, fieldNumber: 9) - } - if !self.publicDependency.isEmpty { - try visitor.visitRepeatedInt32Field(value: self.publicDependency, fieldNumber: 10) - } - if !self.weakDependency.isEmpty { - try visitor.visitRepeatedInt32Field(value: self.weakDependency, fieldNumber: 11) - } - if let v = self._syntax { - try visitor.visitSingularStringField(value: v, fieldNumber: 12) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_FileDescriptorProto, rhs: Google_Protobuf_FileDescriptorProto) -> Bool { - if lhs._name != rhs._name {return false} - if lhs._package != rhs._package {return false} - if lhs.dependency != rhs.dependency {return false} - if lhs.publicDependency != rhs.publicDependency {return false} - if lhs.weakDependency != rhs.weakDependency {return false} - if lhs.messageType != rhs.messageType {return false} - if lhs.enumType != rhs.enumType {return false} - if lhs.service != rhs.service {return false} - if lhs.`extension` != rhs.`extension` {return false} - if lhs._options != rhs._options {return false} - if lhs._sourceCodeInfo != rhs._sourceCodeInfo {return false} - if lhs._syntax != rhs._syntax {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_DescriptorProto: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".DescriptorProto" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "field"), - 6: .same(proto: "extension"), - 3: .standard(proto: "nested_type"), - 4: .standard(proto: "enum_type"), - 5: .standard(proto: "extension_range"), - 8: .standard(proto: "oneof_decl"), - 7: .same(proto: "options"), - 9: .standard(proto: "reserved_range"), - 10: .standard(proto: "reserved_name"), - ] - - public var isInitialized: Bool { - if !SwiftProtobuf.Internal.areAllInitialized(self.field) {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.`extension`) {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.nestedType) {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.enumType) {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.extensionRange) {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.oneofDecl) {return false} - if let v = self._options, !v.isInitialized {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self._name) }() - case 2: try { try decoder.decodeRepeatedMessageField(value: &self.field) }() - case 3: try { try decoder.decodeRepeatedMessageField(value: &self.nestedType) }() - case 4: try { try decoder.decodeRepeatedMessageField(value: &self.enumType) }() - case 5: try { try decoder.decodeRepeatedMessageField(value: &self.extensionRange) }() - case 6: try { try decoder.decodeRepeatedMessageField(value: &self.`extension`) }() - case 7: try { try decoder.decodeSingularMessageField(value: &self._options) }() - case 8: try { try decoder.decodeRepeatedMessageField(value: &self.oneofDecl) }() - case 9: try { try decoder.decodeRepeatedMessageField(value: &self.reservedRange) }() - case 10: try { try decoder.decodeRepeatedStringField(value: &self.reservedName) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._name { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if !self.field.isEmpty { - try visitor.visitRepeatedMessageField(value: self.field, fieldNumber: 2) - } - if !self.nestedType.isEmpty { - try visitor.visitRepeatedMessageField(value: self.nestedType, fieldNumber: 3) - } - if !self.enumType.isEmpty { - try visitor.visitRepeatedMessageField(value: self.enumType, fieldNumber: 4) - } - if !self.extensionRange.isEmpty { - try visitor.visitRepeatedMessageField(value: self.extensionRange, fieldNumber: 5) - } - if !self.`extension`.isEmpty { - try visitor.visitRepeatedMessageField(value: self.`extension`, fieldNumber: 6) - } - if let v = self._options { - try visitor.visitSingularMessageField(value: v, fieldNumber: 7) - } - if !self.oneofDecl.isEmpty { - try visitor.visitRepeatedMessageField(value: self.oneofDecl, fieldNumber: 8) - } - if !self.reservedRange.isEmpty { - try visitor.visitRepeatedMessageField(value: self.reservedRange, fieldNumber: 9) - } - if !self.reservedName.isEmpty { - try visitor.visitRepeatedStringField(value: self.reservedName, fieldNumber: 10) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_DescriptorProto, rhs: Google_Protobuf_DescriptorProto) -> Bool { - if lhs._name != rhs._name {return false} - if lhs.field != rhs.field {return false} - if lhs.`extension` != rhs.`extension` {return false} - if lhs.nestedType != rhs.nestedType {return false} - if lhs.enumType != rhs.enumType {return false} - if lhs.extensionRange != rhs.extensionRange {return false} - if lhs.oneofDecl != rhs.oneofDecl {return false} - if lhs._options != rhs._options {return false} - if lhs.reservedRange != rhs.reservedRange {return false} - if lhs.reservedName != rhs.reservedName {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_DescriptorProto.ExtensionRange: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = Google_Protobuf_DescriptorProto.protoMessageName + ".ExtensionRange" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "start"), - 2: .same(proto: "end"), - 3: .same(proto: "options"), - ] - - public var isInitialized: Bool { - if let v = self._options, !v.isInitialized {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularInt32Field(value: &self._start) }() - case 2: try { try decoder.decodeSingularInt32Field(value: &self._end) }() - case 3: try { try decoder.decodeSingularMessageField(value: &self._options) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._start { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 1) - } - if let v = self._end { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 2) - } - if let v = self._options { - try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_DescriptorProto.ExtensionRange, rhs: Google_Protobuf_DescriptorProto.ExtensionRange) -> Bool { - if lhs._start != rhs._start {return false} - if lhs._end != rhs._end {return false} - if lhs._options != rhs._options {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_DescriptorProto.ReservedRange: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = Google_Protobuf_DescriptorProto.protoMessageName + ".ReservedRange" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "start"), - 2: .same(proto: "end"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularInt32Field(value: &self._start) }() - case 2: try { try decoder.decodeSingularInt32Field(value: &self._end) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._start { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 1) - } - if let v = self._end { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_DescriptorProto.ReservedRange, rhs: Google_Protobuf_DescriptorProto.ReservedRange) -> Bool { - if lhs._start != rhs._start {return false} - if lhs._end != rhs._end {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_ExtensionRangeOptions: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".ExtensionRangeOptions" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 999: .standard(proto: "uninterpreted_option"), - ] - - public var isInitialized: Bool { - if !_protobuf_extensionFieldValues.isInitialized {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.uninterpretedOption) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 999: try { try decoder.decodeRepeatedMessageField(value: &self.uninterpretedOption) }() - case 1000..<536870912: - try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: Google_Protobuf_ExtensionRangeOptions.self, fieldNumber: fieldNumber) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.uninterpretedOption.isEmpty { - try visitor.visitRepeatedMessageField(value: self.uninterpretedOption, fieldNumber: 999) - } - try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912) - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_ExtensionRangeOptions, rhs: Google_Protobuf_ExtensionRangeOptions) -> Bool { - if lhs.uninterpretedOption != rhs.uninterpretedOption {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false} - return true - } -} - -extension Google_Protobuf_FieldDescriptorProto: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".FieldDescriptorProto" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 3: .same(proto: "number"), - 4: .same(proto: "label"), - 5: .same(proto: "type"), - 6: .standard(proto: "type_name"), - 2: .same(proto: "extendee"), - 7: .standard(proto: "default_value"), - 9: .standard(proto: "oneof_index"), - 10: .standard(proto: "json_name"), - 8: .same(proto: "options"), - 17: .standard(proto: "proto3_optional"), - ] - - fileprivate class _StorageClass { - var _name: String? = nil - var _number: Int32? = nil - var _label: Google_Protobuf_FieldDescriptorProto.Label? = nil - var _type: Google_Protobuf_FieldDescriptorProto.TypeEnum? = nil - var _typeName: String? = nil - var _extendee: String? = nil - var _defaultValue: String? = nil - var _oneofIndex: Int32? = nil - var _jsonName: String? = nil - var _options: Google_Protobuf_FieldOptions? = nil - var _proto3Optional: Bool? = nil - - static let defaultInstance = _StorageClass() - - private init() {} - - init(copying source: _StorageClass) { - _name = source._name - _number = source._number - _label = source._label - _type = source._type - _typeName = source._typeName - _extendee = source._extendee - _defaultValue = source._defaultValue - _oneofIndex = source._oneofIndex - _jsonName = source._jsonName - _options = source._options - _proto3Optional = source._proto3Optional - } - } - - fileprivate mutating func _uniqueStorage() -> _StorageClass { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _StorageClass(copying: _storage) - } - return _storage - } - - public var isInitialized: Bool { - return withExtendedLifetime(_storage) { (_storage: _StorageClass) in - if let v = _storage._options, !v.isInitialized {return false} - return true - } - } - - public mutating func decodeMessage(decoder: inout D) throws { - _ = _uniqueStorage() - try withExtendedLifetime(_storage) { (_storage: _StorageClass) in - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &_storage._name) }() - case 2: try { try decoder.decodeSingularStringField(value: &_storage._extendee) }() - case 3: try { try decoder.decodeSingularInt32Field(value: &_storage._number) }() - case 4: try { try decoder.decodeSingularEnumField(value: &_storage._label) }() - case 5: try { try decoder.decodeSingularEnumField(value: &_storage._type) }() - case 6: try { try decoder.decodeSingularStringField(value: &_storage._typeName) }() - case 7: try { try decoder.decodeSingularStringField(value: &_storage._defaultValue) }() - case 8: try { try decoder.decodeSingularMessageField(value: &_storage._options) }() - case 9: try { try decoder.decodeSingularInt32Field(value: &_storage._oneofIndex) }() - case 10: try { try decoder.decodeSingularStringField(value: &_storage._jsonName) }() - case 17: try { try decoder.decodeSingularBoolField(value: &_storage._proto3Optional) }() - default: break - } - } - } - } - - public func traverse(visitor: inout V) throws { - try withExtendedLifetime(_storage) { (_storage: _StorageClass) in - if let v = _storage._name { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if let v = _storage._extendee { - try visitor.visitSingularStringField(value: v, fieldNumber: 2) - } - if let v = _storage._number { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 3) - } - if let v = _storage._label { - try visitor.visitSingularEnumField(value: v, fieldNumber: 4) - } - if let v = _storage._type { - try visitor.visitSingularEnumField(value: v, fieldNumber: 5) - } - if let v = _storage._typeName { - try visitor.visitSingularStringField(value: v, fieldNumber: 6) - } - if let v = _storage._defaultValue { - try visitor.visitSingularStringField(value: v, fieldNumber: 7) - } - if let v = _storage._options { - try visitor.visitSingularMessageField(value: v, fieldNumber: 8) - } - if let v = _storage._oneofIndex { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 9) - } - if let v = _storage._jsonName { - try visitor.visitSingularStringField(value: v, fieldNumber: 10) - } - if let v = _storage._proto3Optional { - try visitor.visitSingularBoolField(value: v, fieldNumber: 17) - } - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_FieldDescriptorProto, rhs: Google_Protobuf_FieldDescriptorProto) -> Bool { - if lhs._storage !== rhs._storage { - let storagesAreEqual: Bool = withExtendedLifetime((lhs._storage, rhs._storage)) { (_args: (_StorageClass, _StorageClass)) in - let _storage = _args.0 - let rhs_storage = _args.1 - if _storage._name != rhs_storage._name {return false} - if _storage._number != rhs_storage._number {return false} - if _storage._label != rhs_storage._label {return false} - if _storage._type != rhs_storage._type {return false} - if _storage._typeName != rhs_storage._typeName {return false} - if _storage._extendee != rhs_storage._extendee {return false} - if _storage._defaultValue != rhs_storage._defaultValue {return false} - if _storage._oneofIndex != rhs_storage._oneofIndex {return false} - if _storage._jsonName != rhs_storage._jsonName {return false} - if _storage._options != rhs_storage._options {return false} - if _storage._proto3Optional != rhs_storage._proto3Optional {return false} - return true - } - if !storagesAreEqual {return false} - } - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_FieldDescriptorProto.TypeEnum: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "TYPE_DOUBLE"), - 2: .same(proto: "TYPE_FLOAT"), - 3: .same(proto: "TYPE_INT64"), - 4: .same(proto: "TYPE_UINT64"), - 5: .same(proto: "TYPE_INT32"), - 6: .same(proto: "TYPE_FIXED64"), - 7: .same(proto: "TYPE_FIXED32"), - 8: .same(proto: "TYPE_BOOL"), - 9: .same(proto: "TYPE_STRING"), - 10: .same(proto: "TYPE_GROUP"), - 11: .same(proto: "TYPE_MESSAGE"), - 12: .same(proto: "TYPE_BYTES"), - 13: .same(proto: "TYPE_UINT32"), - 14: .same(proto: "TYPE_ENUM"), - 15: .same(proto: "TYPE_SFIXED32"), - 16: .same(proto: "TYPE_SFIXED64"), - 17: .same(proto: "TYPE_SINT32"), - 18: .same(proto: "TYPE_SINT64"), - ] -} - -extension Google_Protobuf_FieldDescriptorProto.Label: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "LABEL_OPTIONAL"), - 2: .same(proto: "LABEL_REQUIRED"), - 3: .same(proto: "LABEL_REPEATED"), - ] -} - -extension Google_Protobuf_OneofDescriptorProto: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".OneofDescriptorProto" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "options"), - ] - - public var isInitialized: Bool { - if let v = self._options, !v.isInitialized {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self._name) }() - case 2: try { try decoder.decodeSingularMessageField(value: &self._options) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._name { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if let v = self._options { - try visitor.visitSingularMessageField(value: v, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_OneofDescriptorProto, rhs: Google_Protobuf_OneofDescriptorProto) -> Bool { - if lhs._name != rhs._name {return false} - if lhs._options != rhs._options {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_EnumDescriptorProto: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".EnumDescriptorProto" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "value"), - 3: .same(proto: "options"), - 4: .standard(proto: "reserved_range"), - 5: .standard(proto: "reserved_name"), - ] - - public var isInitialized: Bool { - if !SwiftProtobuf.Internal.areAllInitialized(self.value) {return false} - if let v = self._options, !v.isInitialized {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self._name) }() - case 2: try { try decoder.decodeRepeatedMessageField(value: &self.value) }() - case 3: try { try decoder.decodeSingularMessageField(value: &self._options) }() - case 4: try { try decoder.decodeRepeatedMessageField(value: &self.reservedRange) }() - case 5: try { try decoder.decodeRepeatedStringField(value: &self.reservedName) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._name { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if !self.value.isEmpty { - try visitor.visitRepeatedMessageField(value: self.value, fieldNumber: 2) - } - if let v = self._options { - try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } - if !self.reservedRange.isEmpty { - try visitor.visitRepeatedMessageField(value: self.reservedRange, fieldNumber: 4) - } - if !self.reservedName.isEmpty { - try visitor.visitRepeatedStringField(value: self.reservedName, fieldNumber: 5) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_EnumDescriptorProto, rhs: Google_Protobuf_EnumDescriptorProto) -> Bool { - if lhs._name != rhs._name {return false} - if lhs.value != rhs.value {return false} - if lhs._options != rhs._options {return false} - if lhs.reservedRange != rhs.reservedRange {return false} - if lhs.reservedName != rhs.reservedName {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_EnumDescriptorProto.EnumReservedRange: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = Google_Protobuf_EnumDescriptorProto.protoMessageName + ".EnumReservedRange" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "start"), - 2: .same(proto: "end"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularInt32Field(value: &self._start) }() - case 2: try { try decoder.decodeSingularInt32Field(value: &self._end) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._start { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 1) - } - if let v = self._end { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_EnumDescriptorProto.EnumReservedRange, rhs: Google_Protobuf_EnumDescriptorProto.EnumReservedRange) -> Bool { - if lhs._start != rhs._start {return false} - if lhs._end != rhs._end {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_EnumValueDescriptorProto: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".EnumValueDescriptorProto" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "number"), - 3: .same(proto: "options"), - ] - - public var isInitialized: Bool { - if let v = self._options, !v.isInitialized {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self._name) }() - case 2: try { try decoder.decodeSingularInt32Field(value: &self._number) }() - case 3: try { try decoder.decodeSingularMessageField(value: &self._options) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._name { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if let v = self._number { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 2) - } - if let v = self._options { - try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_EnumValueDescriptorProto, rhs: Google_Protobuf_EnumValueDescriptorProto) -> Bool { - if lhs._name != rhs._name {return false} - if lhs._number != rhs._number {return false} - if lhs._options != rhs._options {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_ServiceDescriptorProto: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".ServiceDescriptorProto" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "method"), - 3: .same(proto: "options"), - ] - - public var isInitialized: Bool { - if !SwiftProtobuf.Internal.areAllInitialized(self.method) {return false} - if let v = self._options, !v.isInitialized {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self._name) }() - case 2: try { try decoder.decodeRepeatedMessageField(value: &self.method) }() - case 3: try { try decoder.decodeSingularMessageField(value: &self._options) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._name { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if !self.method.isEmpty { - try visitor.visitRepeatedMessageField(value: self.method, fieldNumber: 2) - } - if let v = self._options { - try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_ServiceDescriptorProto, rhs: Google_Protobuf_ServiceDescriptorProto) -> Bool { - if lhs._name != rhs._name {return false} - if lhs.method != rhs.method {return false} - if lhs._options != rhs._options {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_MethodDescriptorProto: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".MethodDescriptorProto" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .standard(proto: "input_type"), - 3: .standard(proto: "output_type"), - 4: .same(proto: "options"), - 5: .standard(proto: "client_streaming"), - 6: .standard(proto: "server_streaming"), - ] - - public var isInitialized: Bool { - if let v = self._options, !v.isInitialized {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self._name) }() - case 2: try { try decoder.decodeSingularStringField(value: &self._inputType) }() - case 3: try { try decoder.decodeSingularStringField(value: &self._outputType) }() - case 4: try { try decoder.decodeSingularMessageField(value: &self._options) }() - case 5: try { try decoder.decodeSingularBoolField(value: &self._clientStreaming) }() - case 6: try { try decoder.decodeSingularBoolField(value: &self._serverStreaming) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._name { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if let v = self._inputType { - try visitor.visitSingularStringField(value: v, fieldNumber: 2) - } - if let v = self._outputType { - try visitor.visitSingularStringField(value: v, fieldNumber: 3) - } - if let v = self._options { - try visitor.visitSingularMessageField(value: v, fieldNumber: 4) - } - if let v = self._clientStreaming { - try visitor.visitSingularBoolField(value: v, fieldNumber: 5) - } - if let v = self._serverStreaming { - try visitor.visitSingularBoolField(value: v, fieldNumber: 6) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_MethodDescriptorProto, rhs: Google_Protobuf_MethodDescriptorProto) -> Bool { - if lhs._name != rhs._name {return false} - if lhs._inputType != rhs._inputType {return false} - if lhs._outputType != rhs._outputType {return false} - if lhs._options != rhs._options {return false} - if lhs._clientStreaming != rhs._clientStreaming {return false} - if lhs._serverStreaming != rhs._serverStreaming {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_FileOptions: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".FileOptions" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "java_package"), - 8: .standard(proto: "java_outer_classname"), - 10: .standard(proto: "java_multiple_files"), - 20: .standard(proto: "java_generate_equals_and_hash"), - 27: .standard(proto: "java_string_check_utf8"), - 9: .standard(proto: "optimize_for"), - 11: .standard(proto: "go_package"), - 16: .standard(proto: "cc_generic_services"), - 17: .standard(proto: "java_generic_services"), - 18: .standard(proto: "py_generic_services"), - 42: .standard(proto: "php_generic_services"), - 23: .same(proto: "deprecated"), - 31: .standard(proto: "cc_enable_arenas"), - 36: .standard(proto: "objc_class_prefix"), - 37: .standard(proto: "csharp_namespace"), - 39: .standard(proto: "swift_prefix"), - 40: .standard(proto: "php_class_prefix"), - 41: .standard(proto: "php_namespace"), - 44: .standard(proto: "php_metadata_namespace"), - 45: .standard(proto: "ruby_package"), - 999: .standard(proto: "uninterpreted_option"), - ] - - fileprivate class _StorageClass { - var _javaPackage: String? = nil - var _javaOuterClassname: String? = nil - var _javaMultipleFiles: Bool? = nil - var _javaGenerateEqualsAndHash: Bool? = nil - var _javaStringCheckUtf8: Bool? = nil - var _optimizeFor: Google_Protobuf_FileOptions.OptimizeMode? = nil - var _goPackage: String? = nil - var _ccGenericServices: Bool? = nil - var _javaGenericServices: Bool? = nil - var _pyGenericServices: Bool? = nil - var _phpGenericServices: Bool? = nil - var _deprecated: Bool? = nil - var _ccEnableArenas: Bool? = nil - var _objcClassPrefix: String? = nil - var _csharpNamespace: String? = nil - var _swiftPrefix: String? = nil - var _phpClassPrefix: String? = nil - var _phpNamespace: String? = nil - var _phpMetadataNamespace: String? = nil - var _rubyPackage: String? = nil - var _uninterpretedOption: [Google_Protobuf_UninterpretedOption] = [] - - static let defaultInstance = _StorageClass() - - private init() {} - - init(copying source: _StorageClass) { - _javaPackage = source._javaPackage - _javaOuterClassname = source._javaOuterClassname - _javaMultipleFiles = source._javaMultipleFiles - _javaGenerateEqualsAndHash = source._javaGenerateEqualsAndHash - _javaStringCheckUtf8 = source._javaStringCheckUtf8 - _optimizeFor = source._optimizeFor - _goPackage = source._goPackage - _ccGenericServices = source._ccGenericServices - _javaGenericServices = source._javaGenericServices - _pyGenericServices = source._pyGenericServices - _phpGenericServices = source._phpGenericServices - _deprecated = source._deprecated - _ccEnableArenas = source._ccEnableArenas - _objcClassPrefix = source._objcClassPrefix - _csharpNamespace = source._csharpNamespace - _swiftPrefix = source._swiftPrefix - _phpClassPrefix = source._phpClassPrefix - _phpNamespace = source._phpNamespace - _phpMetadataNamespace = source._phpMetadataNamespace - _rubyPackage = source._rubyPackage - _uninterpretedOption = source._uninterpretedOption - } - } - - fileprivate mutating func _uniqueStorage() -> _StorageClass { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _StorageClass(copying: _storage) - } - return _storage - } - - public var isInitialized: Bool { - if !_protobuf_extensionFieldValues.isInitialized {return false} - return withExtendedLifetime(_storage) { (_storage: _StorageClass) in - if !SwiftProtobuf.Internal.areAllInitialized(_storage._uninterpretedOption) {return false} - return true - } - } - - public mutating func decodeMessage(decoder: inout D) throws { - _ = _uniqueStorage() - try withExtendedLifetime(_storage) { (_storage: _StorageClass) in - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &_storage._javaPackage) }() - case 8: try { try decoder.decodeSingularStringField(value: &_storage._javaOuterClassname) }() - case 9: try { try decoder.decodeSingularEnumField(value: &_storage._optimizeFor) }() - case 10: try { try decoder.decodeSingularBoolField(value: &_storage._javaMultipleFiles) }() - case 11: try { try decoder.decodeSingularStringField(value: &_storage._goPackage) }() - case 16: try { try decoder.decodeSingularBoolField(value: &_storage._ccGenericServices) }() - case 17: try { try decoder.decodeSingularBoolField(value: &_storage._javaGenericServices) }() - case 18: try { try decoder.decodeSingularBoolField(value: &_storage._pyGenericServices) }() - case 20: try { try decoder.decodeSingularBoolField(value: &_storage._javaGenerateEqualsAndHash) }() - case 23: try { try decoder.decodeSingularBoolField(value: &_storage._deprecated) }() - case 27: try { try decoder.decodeSingularBoolField(value: &_storage._javaStringCheckUtf8) }() - case 31: try { try decoder.decodeSingularBoolField(value: &_storage._ccEnableArenas) }() - case 36: try { try decoder.decodeSingularStringField(value: &_storage._objcClassPrefix) }() - case 37: try { try decoder.decodeSingularStringField(value: &_storage._csharpNamespace) }() - case 39: try { try decoder.decodeSingularStringField(value: &_storage._swiftPrefix) }() - case 40: try { try decoder.decodeSingularStringField(value: &_storage._phpClassPrefix) }() - case 41: try { try decoder.decodeSingularStringField(value: &_storage._phpNamespace) }() - case 42: try { try decoder.decodeSingularBoolField(value: &_storage._phpGenericServices) }() - case 44: try { try decoder.decodeSingularStringField(value: &_storage._phpMetadataNamespace) }() - case 45: try { try decoder.decodeSingularStringField(value: &_storage._rubyPackage) }() - case 999: try { try decoder.decodeRepeatedMessageField(value: &_storage._uninterpretedOption) }() - case 1000..<536870912: - try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: Google_Protobuf_FileOptions.self, fieldNumber: fieldNumber) }() - default: break - } - } - } - } - - public func traverse(visitor: inout V) throws { - try withExtendedLifetime(_storage) { (_storage: _StorageClass) in - if let v = _storage._javaPackage { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if let v = _storage._javaOuterClassname { - try visitor.visitSingularStringField(value: v, fieldNumber: 8) - } - if let v = _storage._optimizeFor { - try visitor.visitSingularEnumField(value: v, fieldNumber: 9) - } - if let v = _storage._javaMultipleFiles { - try visitor.visitSingularBoolField(value: v, fieldNumber: 10) - } - if let v = _storage._goPackage { - try visitor.visitSingularStringField(value: v, fieldNumber: 11) - } - if let v = _storage._ccGenericServices { - try visitor.visitSingularBoolField(value: v, fieldNumber: 16) - } - if let v = _storage._javaGenericServices { - try visitor.visitSingularBoolField(value: v, fieldNumber: 17) - } - if let v = _storage._pyGenericServices { - try visitor.visitSingularBoolField(value: v, fieldNumber: 18) - } - if let v = _storage._javaGenerateEqualsAndHash { - try visitor.visitSingularBoolField(value: v, fieldNumber: 20) - } - if let v = _storage._deprecated { - try visitor.visitSingularBoolField(value: v, fieldNumber: 23) - } - if let v = _storage._javaStringCheckUtf8 { - try visitor.visitSingularBoolField(value: v, fieldNumber: 27) - } - if let v = _storage._ccEnableArenas { - try visitor.visitSingularBoolField(value: v, fieldNumber: 31) - } - if let v = _storage._objcClassPrefix { - try visitor.visitSingularStringField(value: v, fieldNumber: 36) - } - if let v = _storage._csharpNamespace { - try visitor.visitSingularStringField(value: v, fieldNumber: 37) - } - if let v = _storage._swiftPrefix { - try visitor.visitSingularStringField(value: v, fieldNumber: 39) - } - if let v = _storage._phpClassPrefix { - try visitor.visitSingularStringField(value: v, fieldNumber: 40) - } - if let v = _storage._phpNamespace { - try visitor.visitSingularStringField(value: v, fieldNumber: 41) - } - if let v = _storage._phpGenericServices { - try visitor.visitSingularBoolField(value: v, fieldNumber: 42) - } - if let v = _storage._phpMetadataNamespace { - try visitor.visitSingularStringField(value: v, fieldNumber: 44) - } - if let v = _storage._rubyPackage { - try visitor.visitSingularStringField(value: v, fieldNumber: 45) - } - if !_storage._uninterpretedOption.isEmpty { - try visitor.visitRepeatedMessageField(value: _storage._uninterpretedOption, fieldNumber: 999) - } - try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_FileOptions, rhs: Google_Protobuf_FileOptions) -> Bool { - if lhs._storage !== rhs._storage { - let storagesAreEqual: Bool = withExtendedLifetime((lhs._storage, rhs._storage)) { (_args: (_StorageClass, _StorageClass)) in - let _storage = _args.0 - let rhs_storage = _args.1 - if _storage._javaPackage != rhs_storage._javaPackage {return false} - if _storage._javaOuterClassname != rhs_storage._javaOuterClassname {return false} - if _storage._javaMultipleFiles != rhs_storage._javaMultipleFiles {return false} - if _storage._javaGenerateEqualsAndHash != rhs_storage._javaGenerateEqualsAndHash {return false} - if _storage._javaStringCheckUtf8 != rhs_storage._javaStringCheckUtf8 {return false} - if _storage._optimizeFor != rhs_storage._optimizeFor {return false} - if _storage._goPackage != rhs_storage._goPackage {return false} - if _storage._ccGenericServices != rhs_storage._ccGenericServices {return false} - if _storage._javaGenericServices != rhs_storage._javaGenericServices {return false} - if _storage._pyGenericServices != rhs_storage._pyGenericServices {return false} - if _storage._phpGenericServices != rhs_storage._phpGenericServices {return false} - if _storage._deprecated != rhs_storage._deprecated {return false} - if _storage._ccEnableArenas != rhs_storage._ccEnableArenas {return false} - if _storage._objcClassPrefix != rhs_storage._objcClassPrefix {return false} - if _storage._csharpNamespace != rhs_storage._csharpNamespace {return false} - if _storage._swiftPrefix != rhs_storage._swiftPrefix {return false} - if _storage._phpClassPrefix != rhs_storage._phpClassPrefix {return false} - if _storage._phpNamespace != rhs_storage._phpNamespace {return false} - if _storage._phpMetadataNamespace != rhs_storage._phpMetadataNamespace {return false} - if _storage._rubyPackage != rhs_storage._rubyPackage {return false} - if _storage._uninterpretedOption != rhs_storage._uninterpretedOption {return false} - return true - } - if !storagesAreEqual {return false} - } - if lhs.unknownFields != rhs.unknownFields {return false} - if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false} - return true - } -} - -extension Google_Protobuf_FileOptions.OptimizeMode: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "SPEED"), - 2: .same(proto: "CODE_SIZE"), - 3: .same(proto: "LITE_RUNTIME"), - ] -} - -extension Google_Protobuf_MessageOptions: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".MessageOptions" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "message_set_wire_format"), - 2: .standard(proto: "no_standard_descriptor_accessor"), - 3: .same(proto: "deprecated"), - 7: .standard(proto: "map_entry"), - 999: .standard(proto: "uninterpreted_option"), - ] - - public var isInitialized: Bool { - if !_protobuf_extensionFieldValues.isInitialized {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.uninterpretedOption) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularBoolField(value: &self._messageSetWireFormat) }() - case 2: try { try decoder.decodeSingularBoolField(value: &self._noStandardDescriptorAccessor) }() - case 3: try { try decoder.decodeSingularBoolField(value: &self._deprecated) }() - case 7: try { try decoder.decodeSingularBoolField(value: &self._mapEntry) }() - case 999: try { try decoder.decodeRepeatedMessageField(value: &self.uninterpretedOption) }() - case 1000..<536870912: - try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: Google_Protobuf_MessageOptions.self, fieldNumber: fieldNumber) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._messageSetWireFormat { - try visitor.visitSingularBoolField(value: v, fieldNumber: 1) - } - if let v = self._noStandardDescriptorAccessor { - try visitor.visitSingularBoolField(value: v, fieldNumber: 2) - } - if let v = self._deprecated { - try visitor.visitSingularBoolField(value: v, fieldNumber: 3) - } - if let v = self._mapEntry { - try visitor.visitSingularBoolField(value: v, fieldNumber: 7) - } - if !self.uninterpretedOption.isEmpty { - try visitor.visitRepeatedMessageField(value: self.uninterpretedOption, fieldNumber: 999) - } - try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912) - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_MessageOptions, rhs: Google_Protobuf_MessageOptions) -> Bool { - if lhs._messageSetWireFormat != rhs._messageSetWireFormat {return false} - if lhs._noStandardDescriptorAccessor != rhs._noStandardDescriptorAccessor {return false} - if lhs._deprecated != rhs._deprecated {return false} - if lhs._mapEntry != rhs._mapEntry {return false} - if lhs.uninterpretedOption != rhs.uninterpretedOption {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false} - return true - } -} - -extension Google_Protobuf_FieldOptions: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".FieldOptions" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "ctype"), - 2: .same(proto: "packed"), - 6: .same(proto: "jstype"), - 5: .same(proto: "lazy"), - 3: .same(proto: "deprecated"), - 10: .same(proto: "weak"), - 999: .standard(proto: "uninterpreted_option"), - ] - - public var isInitialized: Bool { - if !_protobuf_extensionFieldValues.isInitialized {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.uninterpretedOption) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularEnumField(value: &self._ctype) }() - case 2: try { try decoder.decodeSingularBoolField(value: &self._packed) }() - case 3: try { try decoder.decodeSingularBoolField(value: &self._deprecated) }() - case 5: try { try decoder.decodeSingularBoolField(value: &self._lazy) }() - case 6: try { try decoder.decodeSingularEnumField(value: &self._jstype) }() - case 10: try { try decoder.decodeSingularBoolField(value: &self._weak) }() - case 999: try { try decoder.decodeRepeatedMessageField(value: &self.uninterpretedOption) }() - case 1000..<536870912: - try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: Google_Protobuf_FieldOptions.self, fieldNumber: fieldNumber) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._ctype { - try visitor.visitSingularEnumField(value: v, fieldNumber: 1) - } - if let v = self._packed { - try visitor.visitSingularBoolField(value: v, fieldNumber: 2) - } - if let v = self._deprecated { - try visitor.visitSingularBoolField(value: v, fieldNumber: 3) - } - if let v = self._lazy { - try visitor.visitSingularBoolField(value: v, fieldNumber: 5) - } - if let v = self._jstype { - try visitor.visitSingularEnumField(value: v, fieldNumber: 6) - } - if let v = self._weak { - try visitor.visitSingularBoolField(value: v, fieldNumber: 10) - } - if !self.uninterpretedOption.isEmpty { - try visitor.visitRepeatedMessageField(value: self.uninterpretedOption, fieldNumber: 999) - } - try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912) - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_FieldOptions, rhs: Google_Protobuf_FieldOptions) -> Bool { - if lhs._ctype != rhs._ctype {return false} - if lhs._packed != rhs._packed {return false} - if lhs._jstype != rhs._jstype {return false} - if lhs._lazy != rhs._lazy {return false} - if lhs._deprecated != rhs._deprecated {return false} - if lhs._weak != rhs._weak {return false} - if lhs.uninterpretedOption != rhs.uninterpretedOption {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false} - return true - } -} - -extension Google_Protobuf_FieldOptions.CType: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 0: .same(proto: "STRING"), - 1: .same(proto: "CORD"), - 2: .same(proto: "STRING_PIECE"), - ] -} - -extension Google_Protobuf_FieldOptions.JSType: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 0: .same(proto: "JS_NORMAL"), - 1: .same(proto: "JS_STRING"), - 2: .same(proto: "JS_NUMBER"), - ] -} - -extension Google_Protobuf_OneofOptions: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".OneofOptions" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 999: .standard(proto: "uninterpreted_option"), - ] - - public var isInitialized: Bool { - if !_protobuf_extensionFieldValues.isInitialized {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.uninterpretedOption) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 999: try { try decoder.decodeRepeatedMessageField(value: &self.uninterpretedOption) }() - case 1000..<536870912: - try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: Google_Protobuf_OneofOptions.self, fieldNumber: fieldNumber) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.uninterpretedOption.isEmpty { - try visitor.visitRepeatedMessageField(value: self.uninterpretedOption, fieldNumber: 999) - } - try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912) - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_OneofOptions, rhs: Google_Protobuf_OneofOptions) -> Bool { - if lhs.uninterpretedOption != rhs.uninterpretedOption {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false} - return true - } -} - -extension Google_Protobuf_EnumOptions: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".EnumOptions" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 2: .standard(proto: "allow_alias"), - 3: .same(proto: "deprecated"), - 999: .standard(proto: "uninterpreted_option"), - ] - - public var isInitialized: Bool { - if !_protobuf_extensionFieldValues.isInitialized {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.uninterpretedOption) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 2: try { try decoder.decodeSingularBoolField(value: &self._allowAlias) }() - case 3: try { try decoder.decodeSingularBoolField(value: &self._deprecated) }() - case 999: try { try decoder.decodeRepeatedMessageField(value: &self.uninterpretedOption) }() - case 1000..<536870912: - try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: Google_Protobuf_EnumOptions.self, fieldNumber: fieldNumber) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._allowAlias { - try visitor.visitSingularBoolField(value: v, fieldNumber: 2) - } - if let v = self._deprecated { - try visitor.visitSingularBoolField(value: v, fieldNumber: 3) - } - if !self.uninterpretedOption.isEmpty { - try visitor.visitRepeatedMessageField(value: self.uninterpretedOption, fieldNumber: 999) - } - try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912) - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_EnumOptions, rhs: Google_Protobuf_EnumOptions) -> Bool { - if lhs._allowAlias != rhs._allowAlias {return false} - if lhs._deprecated != rhs._deprecated {return false} - if lhs.uninterpretedOption != rhs.uninterpretedOption {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false} - return true - } -} - -extension Google_Protobuf_EnumValueOptions: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".EnumValueOptions" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "deprecated"), - 999: .standard(proto: "uninterpreted_option"), - ] - - public var isInitialized: Bool { - if !_protobuf_extensionFieldValues.isInitialized {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.uninterpretedOption) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularBoolField(value: &self._deprecated) }() - case 999: try { try decoder.decodeRepeatedMessageField(value: &self.uninterpretedOption) }() - case 1000..<536870912: - try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: Google_Protobuf_EnumValueOptions.self, fieldNumber: fieldNumber) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._deprecated { - try visitor.visitSingularBoolField(value: v, fieldNumber: 1) - } - if !self.uninterpretedOption.isEmpty { - try visitor.visitRepeatedMessageField(value: self.uninterpretedOption, fieldNumber: 999) - } - try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912) - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_EnumValueOptions, rhs: Google_Protobuf_EnumValueOptions) -> Bool { - if lhs._deprecated != rhs._deprecated {return false} - if lhs.uninterpretedOption != rhs.uninterpretedOption {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false} - return true - } -} - -extension Google_Protobuf_ServiceOptions: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".ServiceOptions" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 33: .same(proto: "deprecated"), - 999: .standard(proto: "uninterpreted_option"), - ] - - public var isInitialized: Bool { - if !_protobuf_extensionFieldValues.isInitialized {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.uninterpretedOption) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 33: try { try decoder.decodeSingularBoolField(value: &self._deprecated) }() - case 999: try { try decoder.decodeRepeatedMessageField(value: &self.uninterpretedOption) }() - case 1000..<536870912: - try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: Google_Protobuf_ServiceOptions.self, fieldNumber: fieldNumber) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._deprecated { - try visitor.visitSingularBoolField(value: v, fieldNumber: 33) - } - if !self.uninterpretedOption.isEmpty { - try visitor.visitRepeatedMessageField(value: self.uninterpretedOption, fieldNumber: 999) - } - try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912) - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_ServiceOptions, rhs: Google_Protobuf_ServiceOptions) -> Bool { - if lhs._deprecated != rhs._deprecated {return false} - if lhs.uninterpretedOption != rhs.uninterpretedOption {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false} - return true - } -} - -extension Google_Protobuf_MethodOptions: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".MethodOptions" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 33: .same(proto: "deprecated"), - 34: .standard(proto: "idempotency_level"), - 999: .standard(proto: "uninterpreted_option"), - ] - - public var isInitialized: Bool { - if !_protobuf_extensionFieldValues.isInitialized {return false} - if !SwiftProtobuf.Internal.areAllInitialized(self.uninterpretedOption) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 33: try { try decoder.decodeSingularBoolField(value: &self._deprecated) }() - case 34: try { try decoder.decodeSingularEnumField(value: &self._idempotencyLevel) }() - case 999: try { try decoder.decodeRepeatedMessageField(value: &self.uninterpretedOption) }() - case 1000..<536870912: - try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: Google_Protobuf_MethodOptions.self, fieldNumber: fieldNumber) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._deprecated { - try visitor.visitSingularBoolField(value: v, fieldNumber: 33) - } - if let v = self._idempotencyLevel { - try visitor.visitSingularEnumField(value: v, fieldNumber: 34) - } - if !self.uninterpretedOption.isEmpty { - try visitor.visitRepeatedMessageField(value: self.uninterpretedOption, fieldNumber: 999) - } - try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912) - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_MethodOptions, rhs: Google_Protobuf_MethodOptions) -> Bool { - if lhs._deprecated != rhs._deprecated {return false} - if lhs._idempotencyLevel != rhs._idempotencyLevel {return false} - if lhs.uninterpretedOption != rhs.uninterpretedOption {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false} - return true - } -} - -extension Google_Protobuf_MethodOptions.IdempotencyLevel: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 0: .same(proto: "IDEMPOTENCY_UNKNOWN"), - 1: .same(proto: "NO_SIDE_EFFECTS"), - 2: .same(proto: "IDEMPOTENT"), - ] -} - -extension Google_Protobuf_UninterpretedOption: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".UninterpretedOption" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 2: .same(proto: "name"), - 3: .standard(proto: "identifier_value"), - 4: .standard(proto: "positive_int_value"), - 5: .standard(proto: "negative_int_value"), - 6: .standard(proto: "double_value"), - 7: .standard(proto: "string_value"), - 8: .standard(proto: "aggregate_value"), - ] - - public var isInitialized: Bool { - if !SwiftProtobuf.Internal.areAllInitialized(self.name) {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 2: try { try decoder.decodeRepeatedMessageField(value: &self.name) }() - case 3: try { try decoder.decodeSingularStringField(value: &self._identifierValue) }() - case 4: try { try decoder.decodeSingularUInt64Field(value: &self._positiveIntValue) }() - case 5: try { try decoder.decodeSingularInt64Field(value: &self._negativeIntValue) }() - case 6: try { try decoder.decodeSingularDoubleField(value: &self._doubleValue) }() - case 7: try { try decoder.decodeSingularBytesField(value: &self._stringValue) }() - case 8: try { try decoder.decodeSingularStringField(value: &self._aggregateValue) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.name.isEmpty { - try visitor.visitRepeatedMessageField(value: self.name, fieldNumber: 2) - } - if let v = self._identifierValue { - try visitor.visitSingularStringField(value: v, fieldNumber: 3) - } - if let v = self._positiveIntValue { - try visitor.visitSingularUInt64Field(value: v, fieldNumber: 4) - } - if let v = self._negativeIntValue { - try visitor.visitSingularInt64Field(value: v, fieldNumber: 5) - } - if let v = self._doubleValue { - try visitor.visitSingularDoubleField(value: v, fieldNumber: 6) - } - if let v = self._stringValue { - try visitor.visitSingularBytesField(value: v, fieldNumber: 7) - } - if let v = self._aggregateValue { - try visitor.visitSingularStringField(value: v, fieldNumber: 8) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_UninterpretedOption, rhs: Google_Protobuf_UninterpretedOption) -> Bool { - if lhs.name != rhs.name {return false} - if lhs._identifierValue != rhs._identifierValue {return false} - if lhs._positiveIntValue != rhs._positiveIntValue {return false} - if lhs._negativeIntValue != rhs._negativeIntValue {return false} - if lhs._doubleValue != rhs._doubleValue {return false} - if lhs._stringValue != rhs._stringValue {return false} - if lhs._aggregateValue != rhs._aggregateValue {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_UninterpretedOption.NamePart: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = Google_Protobuf_UninterpretedOption.protoMessageName + ".NamePart" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "name_part"), - 2: .standard(proto: "is_extension"), - ] - - public var isInitialized: Bool { - if self._namePart == nil {return false} - if self._isExtension == nil {return false} - return true - } - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self._namePart) }() - case 2: try { try decoder.decodeSingularBoolField(value: &self._isExtension) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if let v = self._namePart { - try visitor.visitSingularStringField(value: v, fieldNumber: 1) - } - if let v = self._isExtension { - try visitor.visitSingularBoolField(value: v, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_UninterpretedOption.NamePart, rhs: Google_Protobuf_UninterpretedOption.NamePart) -> Bool { - if lhs._namePart != rhs._namePart {return false} - if lhs._isExtension != rhs._isExtension {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_SourceCodeInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".SourceCodeInfo" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "location"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeRepeatedMessageField(value: &self.location) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.location.isEmpty { - try visitor.visitRepeatedMessageField(value: self.location, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_SourceCodeInfo, rhs: Google_Protobuf_SourceCodeInfo) -> Bool { - if lhs.location != rhs.location {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_SourceCodeInfo.Location: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = Google_Protobuf_SourceCodeInfo.protoMessageName + ".Location" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "path"), - 2: .same(proto: "span"), - 3: .standard(proto: "leading_comments"), - 4: .standard(proto: "trailing_comments"), - 6: .standard(proto: "leading_detached_comments"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeRepeatedInt32Field(value: &self.path) }() - case 2: try { try decoder.decodeRepeatedInt32Field(value: &self.span) }() - case 3: try { try decoder.decodeSingularStringField(value: &self._leadingComments) }() - case 4: try { try decoder.decodeSingularStringField(value: &self._trailingComments) }() - case 6: try { try decoder.decodeRepeatedStringField(value: &self.leadingDetachedComments) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.path.isEmpty { - try visitor.visitPackedInt32Field(value: self.path, fieldNumber: 1) - } - if !self.span.isEmpty { - try visitor.visitPackedInt32Field(value: self.span, fieldNumber: 2) - } - if let v = self._leadingComments { - try visitor.visitSingularStringField(value: v, fieldNumber: 3) - } - if let v = self._trailingComments { - try visitor.visitSingularStringField(value: v, fieldNumber: 4) - } - if !self.leadingDetachedComments.isEmpty { - try visitor.visitRepeatedStringField(value: self.leadingDetachedComments, fieldNumber: 6) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_SourceCodeInfo.Location, rhs: Google_Protobuf_SourceCodeInfo.Location) -> Bool { - if lhs.path != rhs.path {return false} - if lhs.span != rhs.span {return false} - if lhs._leadingComments != rhs._leadingComments {return false} - if lhs._trailingComments != rhs._trailingComments {return false} - if lhs.leadingDetachedComments != rhs.leadingDetachedComments {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_GeneratedCodeInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".GeneratedCodeInfo" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "annotation"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeRepeatedMessageField(value: &self.annotation) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.annotation.isEmpty { - try visitor.visitRepeatedMessageField(value: self.annotation, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_GeneratedCodeInfo, rhs: Google_Protobuf_GeneratedCodeInfo) -> Bool { - if lhs.annotation != rhs.annotation {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_GeneratedCodeInfo.Annotation: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = Google_Protobuf_GeneratedCodeInfo.protoMessageName + ".Annotation" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "path"), - 2: .standard(proto: "source_file"), - 3: .same(proto: "begin"), - 4: .same(proto: "end"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeRepeatedInt32Field(value: &self.path) }() - case 2: try { try decoder.decodeSingularStringField(value: &self._sourceFile) }() - case 3: try { try decoder.decodeSingularInt32Field(value: &self._begin) }() - case 4: try { try decoder.decodeSingularInt32Field(value: &self._end) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.path.isEmpty { - try visitor.visitPackedInt32Field(value: self.path, fieldNumber: 1) - } - if let v = self._sourceFile { - try visitor.visitSingularStringField(value: v, fieldNumber: 2) - } - if let v = self._begin { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 3) - } - if let v = self._end { - try visitor.visitSingularInt32Field(value: v, fieldNumber: 4) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_GeneratedCodeInfo.Annotation, rhs: Google_Protobuf_GeneratedCodeInfo.Annotation) -> Bool { - if lhs.path != rhs.path {return false} - if lhs._sourceFile != rhs._sourceFile {return false} - if lhs._begin != rhs._begin {return false} - if lhs._end != rhs._end {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/duration.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/duration.pb.swift deleted file mode 100644 index 6ea4d6c..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/duration.pb.swift +++ /dev/null @@ -1,173 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/duration.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// A Duration represents a signed, fixed-length span of time represented -/// as a count of seconds and fractions of seconds at nanosecond -/// resolution. It is independent of any calendar and concepts like "day" -/// or "month". It is related to Timestamp in that the difference between -/// two Timestamp values is a Duration and it can be added or subtracted -/// from a Timestamp. Range is approximately +-10,000 years. -/// -/// # Examples -/// -/// Example 1: Compute Duration from two Timestamps in pseudo code. -/// -/// Timestamp start = ...; -/// Timestamp end = ...; -/// Duration duration = ...; -/// -/// duration.seconds = end.seconds - start.seconds; -/// duration.nanos = end.nanos - start.nanos; -/// -/// if (duration.seconds < 0 && duration.nanos > 0) { -/// duration.seconds += 1; -/// duration.nanos -= 1000000000; -/// } else if (duration.seconds > 0 && duration.nanos < 0) { -/// duration.seconds -= 1; -/// duration.nanos += 1000000000; -/// } -/// -/// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. -/// -/// Timestamp start = ...; -/// Duration duration = ...; -/// Timestamp end = ...; -/// -/// end.seconds = start.seconds + duration.seconds; -/// end.nanos = start.nanos + duration.nanos; -/// -/// if (end.nanos < 0) { -/// end.seconds -= 1; -/// end.nanos += 1000000000; -/// } else if (end.nanos >= 1000000000) { -/// end.seconds += 1; -/// end.nanos -= 1000000000; -/// } -/// -/// Example 3: Compute Duration from datetime.timedelta in Python. -/// -/// td = datetime.timedelta(days=3, minutes=10) -/// duration = Duration() -/// duration.FromTimedelta(td) -/// -/// # JSON Mapping -/// -/// In JSON format, the Duration type is encoded as a string rather than an -/// object, where the string ends in the suffix "s" (indicating seconds) and -/// is preceded by the number of seconds, with nanoseconds expressed as -/// fractional seconds. For example, 3 seconds with 0 nanoseconds should be -/// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should -/// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 -/// microsecond should be expressed in JSON format as "3.000001s". -public struct Google_Protobuf_Duration { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Signed seconds of the span of time. Must be from -315,576,000,000 - /// to +315,576,000,000 inclusive. Note: these bounds are computed from: - /// 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - public var seconds: Int64 = 0 - - /// Signed fractions of a second at nanosecond resolution of the span - /// of time. Durations less than one second are represented with a 0 - /// `seconds` field and a positive or negative `nanos` field. For durations - /// of one second or more, a non-zero value for the `nanos` field must be - /// of the same sign as the `seconds` field. Must be from -999,999,999 - /// to +999,999,999 inclusive. - public var nanos: Int32 = 0 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_Duration: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Duration" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "seconds"), - 2: .same(proto: "nanos"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularInt64Field(value: &self.seconds) }() - case 2: try { try decoder.decodeSingularInt32Field(value: &self.nanos) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.seconds != 0 { - try visitor.visitSingularInt64Field(value: self.seconds, fieldNumber: 1) - } - if self.nanos != 0 { - try visitor.visitSingularInt32Field(value: self.nanos, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Duration, rhs: Google_Protobuf_Duration) -> Bool { - if lhs.seconds != rhs.seconds {return false} - if lhs.nanos != rhs.nanos {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/empty.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/empty.pb.swift deleted file mode 100644 index bdfdc7f..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/empty.pb.swift +++ /dev/null @@ -1,92 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/empty.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// A generic empty message that you can re-use to avoid defining duplicated -/// empty messages in your APIs. A typical example is to use it as the request -/// or the response type of an API method. For instance: -/// -/// service Foo { -/// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); -/// } -/// -/// The JSON representation for `Empty` is empty JSON object `{}`. -public struct Google_Protobuf_Empty { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_Empty: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Empty" - public static let _protobuf_nameMap = SwiftProtobuf._NameMap() - - public mutating func decodeMessage(decoder: inout D) throws { - while let _ = try decoder.nextFieldNumber() { - } - } - - public func traverse(visitor: inout V) throws { - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Empty, rhs: Google_Protobuf_Empty) -> Bool { - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/field_mask.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/field_mask.pb.swift deleted file mode 100644 index 508015e..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/field_mask.pb.swift +++ /dev/null @@ -1,298 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/field_mask.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// `FieldMask` represents a set of symbolic field paths, for example: -/// -/// paths: "f.a" -/// paths: "f.b.d" -/// -/// Here `f` represents a field in some root message, `a` and `b` -/// fields in the message found in `f`, and `d` a field found in the -/// message in `f.b`. -/// -/// Field masks are used to specify a subset of fields that should be -/// returned by a get operation or modified by an update operation. -/// Field masks also have a custom JSON encoding (see below). -/// -/// # Field Masks in Projections -/// -/// When used in the context of a projection, a response message or -/// sub-message is filtered by the API to only contain those fields as -/// specified in the mask. For example, if the mask in the previous -/// example is applied to a response message as follows: -/// -/// f { -/// a : 22 -/// b { -/// d : 1 -/// x : 2 -/// } -/// y : 13 -/// } -/// z: 8 -/// -/// The result will not contain specific values for fields x,y and z -/// (their value will be set to the default, and omitted in proto text -/// output): -/// -/// -/// f { -/// a : 22 -/// b { -/// d : 1 -/// } -/// } -/// -/// A repeated field is not allowed except at the last position of a -/// paths string. -/// -/// If a FieldMask object is not present in a get operation, the -/// operation applies to all fields (as if a FieldMask of all fields -/// had been specified). -/// -/// Note that a field mask does not necessarily apply to the -/// top-level response message. In case of a REST get operation, the -/// field mask applies directly to the response, but in case of a REST -/// list operation, the mask instead applies to each individual message -/// in the returned resource list. In case of a REST custom method, -/// other definitions may be used. Where the mask applies will be -/// clearly documented together with its declaration in the API. In -/// any case, the effect on the returned resource/resources is required -/// behavior for APIs. -/// -/// # Field Masks in Update Operations -/// -/// A field mask in update operations specifies which fields of the -/// targeted resource are going to be updated. The API is required -/// to only change the values of the fields as specified in the mask -/// and leave the others untouched. If a resource is passed in to -/// describe the updated values, the API ignores the values of all -/// fields not covered by the mask. -/// -/// If a repeated field is specified for an update operation, new values will -/// be appended to the existing repeated field in the target resource. Note that -/// a repeated field is only allowed in the last position of a `paths` string. -/// -/// If a sub-message is specified in the last position of the field mask for an -/// update operation, then new value will be merged into the existing sub-message -/// in the target resource. -/// -/// For example, given the target message: -/// -/// f { -/// b { -/// d: 1 -/// x: 2 -/// } -/// c: [1] -/// } -/// -/// And an update message: -/// -/// f { -/// b { -/// d: 10 -/// } -/// c: [2] -/// } -/// -/// then if the field mask is: -/// -/// paths: ["f.b", "f.c"] -/// -/// then the result will be: -/// -/// f { -/// b { -/// d: 10 -/// x: 2 -/// } -/// c: [1, 2] -/// } -/// -/// An implementation may provide options to override this default behavior for -/// repeated and message fields. -/// -/// In order to reset a field's value to the default, the field must -/// be in the mask and set to the default value in the provided resource. -/// Hence, in order to reset all fields of a resource, provide a default -/// instance of the resource and set all fields in the mask, or do -/// not provide a mask as described below. -/// -/// If a field mask is not present on update, the operation applies to -/// all fields (as if a field mask of all fields has been specified). -/// Note that in the presence of schema evolution, this may mean that -/// fields the client does not know and has therefore not filled into -/// the request will be reset to their default. If this is unwanted -/// behavior, a specific service may require a client to always specify -/// a field mask, producing an error if not. -/// -/// As with get operations, the location of the resource which -/// describes the updated values in the request message depends on the -/// operation kind. In any case, the effect of the field mask is -/// required to be honored by the API. -/// -/// ## Considerations for HTTP REST -/// -/// The HTTP kind of an update operation which uses a field mask must -/// be set to PATCH instead of PUT in order to satisfy HTTP semantics -/// (PUT must only be used for full updates). -/// -/// # JSON Encoding of Field Masks -/// -/// In JSON, a field mask is encoded as a single string where paths are -/// separated by a comma. Fields name in each path are converted -/// to/from lower-camel naming conventions. -/// -/// As an example, consider the following message declarations: -/// -/// message Profile { -/// User user = 1; -/// Photo photo = 2; -/// } -/// message User { -/// string display_name = 1; -/// string address = 2; -/// } -/// -/// In proto a field mask for `Profile` may look as such: -/// -/// mask { -/// paths: "user.display_name" -/// paths: "photo" -/// } -/// -/// In JSON, the same mask is represented as below: -/// -/// { -/// mask: "user.displayName,photo" -/// } -/// -/// # Field Masks and Oneof Fields -/// -/// Field masks treat fields in oneofs just as regular fields. Consider the -/// following message: -/// -/// message SampleMessage { -/// oneof test_oneof { -/// string name = 4; -/// SubMessage sub_message = 9; -/// } -/// } -/// -/// The field mask can be: -/// -/// mask { -/// paths: "name" -/// } -/// -/// Or: -/// -/// mask { -/// paths: "sub_message" -/// } -/// -/// Note that oneof type names ("test_oneof" in this case) cannot be used in -/// paths. -/// -/// ## Field Mask Verification -/// -/// The implementation of any API method which has a FieldMask type field in the -/// request should verify the included field paths, and return an -/// `INVALID_ARGUMENT` error if any path is unmappable. -public struct Google_Protobuf_FieldMask { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The set of field mask paths. - public var paths: [String] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_FieldMask: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".FieldMask" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "paths"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeRepeatedStringField(value: &self.paths) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.paths.isEmpty { - try visitor.visitRepeatedStringField(value: self.paths, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_FieldMask, rhs: Google_Protobuf_FieldMask) -> Bool { - if lhs.paths != rhs.paths {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/source_context.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/source_context.pb.swift deleted file mode 100644 index 8c0aebd..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/source_context.pb.swift +++ /dev/null @@ -1,102 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/source_context.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// `SourceContext` represents information about the source of a -/// protobuf element, like the file in which it is defined. -public struct Google_Protobuf_SourceContext { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The path-qualified name of the .proto file that contained the associated - /// protobuf element. For example: `"google/protobuf/source_context.proto"`. - public var fileName: String = String() - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_SourceContext: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".SourceContext" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "file_name"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self.fileName) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.fileName.isEmpty { - try visitor.visitSingularStringField(value: self.fileName, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_SourceContext, rhs: Google_Protobuf_SourceContext) -> Bool { - if lhs.fileName != rhs.fileName {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/struct.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/struct.pb.swift deleted file mode 100644 index 7ee9f28..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/struct.pb.swift +++ /dev/null @@ -1,448 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/struct.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// `NullValue` is a singleton enumeration to represent the null value for the -/// `Value` type union. -/// -/// The JSON representation for `NullValue` is JSON `null`. -public enum Google_Protobuf_NullValue: SwiftProtobuf.Enum { - public typealias RawValue = Int - - /// Null value. - case nullValue // = 0 - case UNRECOGNIZED(Int) - - public init() { - self = .nullValue - } - - public init?(rawValue: Int) { - switch rawValue { - case 0: self = .nullValue - default: self = .UNRECOGNIZED(rawValue) - } - } - - public var rawValue: Int { - switch self { - case .nullValue: return 0 - case .UNRECOGNIZED(let i): return i - } - } - -} - -#if swift(>=4.2) - -extension Google_Protobuf_NullValue: CaseIterable { - // The compiler won't synthesize support with the UNRECOGNIZED case. - public static var allCases: [Google_Protobuf_NullValue] = [ - .nullValue, - ] -} - -#endif // swift(>=4.2) - -/// `Struct` represents a structured data value, consisting of fields -/// which map to dynamically typed values. In some languages, `Struct` -/// might be supported by a native representation. For example, in -/// scripting languages like JS a struct is represented as an -/// object. The details of that representation are described together -/// with the proto support for the language. -/// -/// The JSON representation for `Struct` is JSON object. -public struct Google_Protobuf_Struct { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Unordered map of dynamically typed values. - public var fields: Dictionary = [:] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// `Value` represents a dynamically typed value which can be either -/// null, a number, a string, a boolean, a recursive struct value, or a -/// list of values. A producer of value is expected to set one of that -/// variants, absence of any variant indicates an error. -/// -/// The JSON representation for `Value` is JSON value. -public struct Google_Protobuf_Value { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The kind of value. - public var kind: Google_Protobuf_Value.OneOf_Kind? = nil - - /// Represents a null value. - public var nullValue: Google_Protobuf_NullValue { - get { - if case .nullValue(let v)? = kind {return v} - return .nullValue - } - set {kind = .nullValue(newValue)} - } - - /// Represents a double value. - public var numberValue: Double { - get { - if case .numberValue(let v)? = kind {return v} - return 0 - } - set {kind = .numberValue(newValue)} - } - - /// Represents a string value. - public var stringValue: String { - get { - if case .stringValue(let v)? = kind {return v} - return String() - } - set {kind = .stringValue(newValue)} - } - - /// Represents a boolean value. - public var boolValue: Bool { - get { - if case .boolValue(let v)? = kind {return v} - return false - } - set {kind = .boolValue(newValue)} - } - - /// Represents a structured value. - public var structValue: Google_Protobuf_Struct { - get { - if case .structValue(let v)? = kind {return v} - return Google_Protobuf_Struct() - } - set {kind = .structValue(newValue)} - } - - /// Represents a repeated `Value`. - public var listValue: Google_Protobuf_ListValue { - get { - if case .listValue(let v)? = kind {return v} - return Google_Protobuf_ListValue() - } - set {kind = .listValue(newValue)} - } - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - /// The kind of value. - public enum OneOf_Kind: Equatable { - /// Represents a null value. - case nullValue(Google_Protobuf_NullValue) - /// Represents a double value. - case numberValue(Double) - /// Represents a string value. - case stringValue(String) - /// Represents a boolean value. - case boolValue(Bool) - /// Represents a structured value. - case structValue(Google_Protobuf_Struct) - /// Represents a repeated `Value`. - case listValue(Google_Protobuf_ListValue) - - #if !swift(>=4.1) - public static func ==(lhs: Google_Protobuf_Value.OneOf_Kind, rhs: Google_Protobuf_Value.OneOf_Kind) -> Bool { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch (lhs, rhs) { - case (.nullValue, .nullValue): return { - guard case .nullValue(let l) = lhs, case .nullValue(let r) = rhs else { preconditionFailure() } - return l == r - }() - case (.numberValue, .numberValue): return { - guard case .numberValue(let l) = lhs, case .numberValue(let r) = rhs else { preconditionFailure() } - return l == r - }() - case (.stringValue, .stringValue): return { - guard case .stringValue(let l) = lhs, case .stringValue(let r) = rhs else { preconditionFailure() } - return l == r - }() - case (.boolValue, .boolValue): return { - guard case .boolValue(let l) = lhs, case .boolValue(let r) = rhs else { preconditionFailure() } - return l == r - }() - case (.structValue, .structValue): return { - guard case .structValue(let l) = lhs, case .structValue(let r) = rhs else { preconditionFailure() } - return l == r - }() - case (.listValue, .listValue): return { - guard case .listValue(let l) = lhs, case .listValue(let r) = rhs else { preconditionFailure() } - return l == r - }() - default: return false - } - } - #endif - } - - public init() {} -} - -/// `ListValue` is a wrapper around a repeated field of values. -/// -/// The JSON representation for `ListValue` is JSON array. -public struct Google_Protobuf_ListValue { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Repeated field of dynamically typed values. - public var values: [Google_Protobuf_Value] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_NullValue: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 0: .same(proto: "NULL_VALUE"), - ] -} - -extension Google_Protobuf_Struct: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Struct" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "fields"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeMapField(fieldType: SwiftProtobuf._ProtobufMessageMap.self, value: &self.fields) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.fields.isEmpty { - try visitor.visitMapField(fieldType: SwiftProtobuf._ProtobufMessageMap.self, value: self.fields, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Struct, rhs: Google_Protobuf_Struct) -> Bool { - if lhs.fields != rhs.fields {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_Value: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Value" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "null_value"), - 2: .standard(proto: "number_value"), - 3: .standard(proto: "string_value"), - 4: .standard(proto: "bool_value"), - 5: .standard(proto: "struct_value"), - 6: .standard(proto: "list_value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { - var v: Google_Protobuf_NullValue? - try decoder.decodeSingularEnumField(value: &v) - if let v = v { - if self.kind != nil {try decoder.handleConflictingOneOf()} - self.kind = .nullValue(v) - } - }() - case 2: try { - var v: Double? - try decoder.decodeSingularDoubleField(value: &v) - if let v = v { - if self.kind != nil {try decoder.handleConflictingOneOf()} - self.kind = .numberValue(v) - } - }() - case 3: try { - var v: String? - try decoder.decodeSingularStringField(value: &v) - if let v = v { - if self.kind != nil {try decoder.handleConflictingOneOf()} - self.kind = .stringValue(v) - } - }() - case 4: try { - var v: Bool? - try decoder.decodeSingularBoolField(value: &v) - if let v = v { - if self.kind != nil {try decoder.handleConflictingOneOf()} - self.kind = .boolValue(v) - } - }() - case 5: try { - var v: Google_Protobuf_Struct? - var hadOneofValue = false - if let current = self.kind { - hadOneofValue = true - if case .structValue(let m) = current {v = m} - } - try decoder.decodeSingularMessageField(value: &v) - if let v = v { - if hadOneofValue {try decoder.handleConflictingOneOf()} - self.kind = .structValue(v) - } - }() - case 6: try { - var v: Google_Protobuf_ListValue? - var hadOneofValue = false - if let current = self.kind { - hadOneofValue = true - if case .listValue(let m) = current {v = m} - } - try decoder.decodeSingularMessageField(value: &v) - if let v = v { - if hadOneofValue {try decoder.handleConflictingOneOf()} - self.kind = .listValue(v) - } - }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch self.kind { - case .nullValue?: try { - guard case .nullValue(let v)? = self.kind else { preconditionFailure() } - try visitor.visitSingularEnumField(value: v, fieldNumber: 1) - }() - case .numberValue?: try { - guard case .numberValue(let v)? = self.kind else { preconditionFailure() } - try visitor.visitSingularDoubleField(value: v, fieldNumber: 2) - }() - case .stringValue?: try { - guard case .stringValue(let v)? = self.kind else { preconditionFailure() } - try visitor.visitSingularStringField(value: v, fieldNumber: 3) - }() - case .boolValue?: try { - guard case .boolValue(let v)? = self.kind else { preconditionFailure() } - try visitor.visitSingularBoolField(value: v, fieldNumber: 4) - }() - case .structValue?: try { - guard case .structValue(let v)? = self.kind else { preconditionFailure() } - try visitor.visitSingularMessageField(value: v, fieldNumber: 5) - }() - case .listValue?: try { - guard case .listValue(let v)? = self.kind else { preconditionFailure() } - try visitor.visitSingularMessageField(value: v, fieldNumber: 6) - }() - case nil: break - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Value, rhs: Google_Protobuf_Value) -> Bool { - if lhs.kind != rhs.kind {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_ListValue: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".ListValue" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "values"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeRepeatedMessageField(value: &self.values) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.values.isEmpty { - try visitor.visitRepeatedMessageField(value: self.values, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_ListValue, rhs: Google_Protobuf_ListValue) -> Bool { - if lhs.values != rhs.values {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/timestamp.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/timestamp.pb.swift deleted file mode 100644 index 1f97147..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/timestamp.pb.swift +++ /dev/null @@ -1,204 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/timestamp.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// A Timestamp represents a point in time independent of any time zone or local -/// calendar, encoded as a count of seconds and fractions of seconds at -/// nanosecond resolution. The count is relative to an epoch at UTC midnight on -/// January 1, 1970, in the proleptic Gregorian calendar which extends the -/// Gregorian calendar backwards to year one. -/// -/// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap -/// second table is needed for interpretation, using a [24-hour linear -/// smear](https://developers.google.com/time/smear). -/// -/// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By -/// restricting to that range, we ensure that we can convert to and from [RFC -/// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. -/// -/// # Examples -/// -/// Example 1: Compute Timestamp from POSIX `time()`. -/// -/// Timestamp timestamp; -/// timestamp.set_seconds(time(NULL)); -/// timestamp.set_nanos(0); -/// -/// Example 2: Compute Timestamp from POSIX `gettimeofday()`. -/// -/// struct timeval tv; -/// gettimeofday(&tv, NULL); -/// -/// Timestamp timestamp; -/// timestamp.set_seconds(tv.tv_sec); -/// timestamp.set_nanos(tv.tv_usec * 1000); -/// -/// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. -/// -/// FILETIME ft; -/// GetSystemTimeAsFileTime(&ft); -/// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; -/// -/// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z -/// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. -/// Timestamp timestamp; -/// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); -/// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); -/// -/// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. -/// -/// long millis = System.currentTimeMillis(); -/// -/// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) -/// .setNanos((int) ((millis % 1000) * 1000000)).build(); -/// -/// -/// Example 5: Compute Timestamp from Java `Instant.now()`. -/// -/// Instant now = Instant.now(); -/// -/// Timestamp timestamp = -/// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) -/// .setNanos(now.getNano()).build(); -/// -/// -/// Example 6: Compute Timestamp from current time in Python. -/// -/// timestamp = Timestamp() -/// timestamp.GetCurrentTime() -/// -/// # JSON Mapping -/// -/// In JSON format, the Timestamp type is encoded as a string in the -/// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the -/// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" -/// where {year} is always expressed using four digits while {month}, {day}, -/// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional -/// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), -/// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone -/// is required. A proto3 JSON serializer should always use UTC (as indicated by -/// "Z") when printing the Timestamp type and a proto3 JSON parser should be -/// able to accept both UTC and other timezones (as indicated by an offset). -/// -/// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past -/// 01:30 UTC on January 15, 2017. -/// -/// In JavaScript, one can convert a Date object to this format using the -/// standard -/// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) -/// method. In Python, a standard `datetime.datetime` object can be converted -/// to this format using -/// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with -/// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use -/// the Joda Time's [`ISODateTimeFormat.dateTime()`]( -/// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D -/// ) to obtain a formatter capable of generating timestamps in this format. -public struct Google_Protobuf_Timestamp { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Represents seconds of UTC time since Unix epoch - /// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - /// 9999-12-31T23:59:59Z inclusive. - public var seconds: Int64 = 0 - - /// Non-negative fractions of a second at nanosecond resolution. Negative - /// second values with fractions must still have non-negative nanos values - /// that count forward in time. Must be from 0 to 999,999,999 - /// inclusive. - public var nanos: Int32 = 0 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_Timestamp: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Timestamp" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "seconds"), - 2: .same(proto: "nanos"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularInt64Field(value: &self.seconds) }() - case 2: try { try decoder.decodeSingularInt32Field(value: &self.nanos) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.seconds != 0 { - try visitor.visitSingularInt64Field(value: self.seconds, fieldNumber: 1) - } - if self.nanos != 0 { - try visitor.visitSingularInt32Field(value: self.nanos, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Timestamp, rhs: Google_Protobuf_Timestamp) -> Bool { - if lhs.seconds != rhs.seconds {return false} - if lhs.nanos != rhs.nanos {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/type.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/type.pb.swift deleted file mode 100644 index 8ce6ea6..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/type.pb.swift +++ /dev/null @@ -1,794 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/type.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// The syntax in which a protocol buffer element is defined. -public enum Google_Protobuf_Syntax: SwiftProtobuf.Enum { - public typealias RawValue = Int - - /// Syntax `proto2`. - case proto2 // = 0 - - /// Syntax `proto3`. - case proto3 // = 1 - case UNRECOGNIZED(Int) - - public init() { - self = .proto2 - } - - public init?(rawValue: Int) { - switch rawValue { - case 0: self = .proto2 - case 1: self = .proto3 - default: self = .UNRECOGNIZED(rawValue) - } - } - - public var rawValue: Int { - switch self { - case .proto2: return 0 - case .proto3: return 1 - case .UNRECOGNIZED(let i): return i - } - } - -} - -#if swift(>=4.2) - -extension Google_Protobuf_Syntax: CaseIterable { - // The compiler won't synthesize support with the UNRECOGNIZED case. - public static var allCases: [Google_Protobuf_Syntax] = [ - .proto2, - .proto3, - ] -} - -#endif // swift(>=4.2) - -/// A protocol buffer message type. -public struct Google_Protobuf_Type { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The fully qualified message name. - public var name: String = String() - - /// The list of fields. - public var fields: [Google_Protobuf_Field] = [] - - /// The list of types appearing in `oneof` definitions in this type. - public var oneofs: [String] = [] - - /// The protocol buffer options. - public var options: [Google_Protobuf_Option] = [] - - /// The source context. - public var sourceContext: Google_Protobuf_SourceContext { - get {return _sourceContext ?? Google_Protobuf_SourceContext()} - set {_sourceContext = newValue} - } - /// Returns true if `sourceContext` has been explicitly set. - public var hasSourceContext: Bool {return self._sourceContext != nil} - /// Clears the value of `sourceContext`. Subsequent reads from it will return its default value. - public mutating func clearSourceContext() {self._sourceContext = nil} - - /// The source syntax. - public var syntax: Google_Protobuf_Syntax = .proto2 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _sourceContext: Google_Protobuf_SourceContext? = nil -} - -/// A single field of a message type. -public struct Google_Protobuf_Field { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The field type. - public var kind: Google_Protobuf_Field.Kind = .typeUnknown - - /// The field cardinality. - public var cardinality: Google_Protobuf_Field.Cardinality = .unknown - - /// The field number. - public var number: Int32 = 0 - - /// The field name. - public var name: String = String() - - /// The field type URL, without the scheme, for message or enumeration - /// types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. - public var typeURL: String = String() - - /// The index of the field type in `Type.oneofs`, for message or enumeration - /// types. The first type has index 1; zero means the type is not in the list. - public var oneofIndex: Int32 = 0 - - /// Whether to use alternative packed wire representation. - public var packed: Bool = false - - /// The protocol buffer options. - public var options: [Google_Protobuf_Option] = [] - - /// The field JSON name. - public var jsonName: String = String() - - /// The string value of the default value of this field. Proto2 syntax only. - public var defaultValue: String = String() - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - /// Basic field types. - public enum Kind: SwiftProtobuf.Enum { - public typealias RawValue = Int - - /// Field type unknown. - case typeUnknown // = 0 - - /// Field type double. - case typeDouble // = 1 - - /// Field type float. - case typeFloat // = 2 - - /// Field type int64. - case typeInt64 // = 3 - - /// Field type uint64. - case typeUint64 // = 4 - - /// Field type int32. - case typeInt32 // = 5 - - /// Field type fixed64. - case typeFixed64 // = 6 - - /// Field type fixed32. - case typeFixed32 // = 7 - - /// Field type bool. - case typeBool // = 8 - - /// Field type string. - case typeString // = 9 - - /// Field type group. Proto2 syntax only, and deprecated. - case typeGroup // = 10 - - /// Field type message. - case typeMessage // = 11 - - /// Field type bytes. - case typeBytes // = 12 - - /// Field type uint32. - case typeUint32 // = 13 - - /// Field type enum. - case typeEnum // = 14 - - /// Field type sfixed32. - case typeSfixed32 // = 15 - - /// Field type sfixed64. - case typeSfixed64 // = 16 - - /// Field type sint32. - case typeSint32 // = 17 - - /// Field type sint64. - case typeSint64 // = 18 - case UNRECOGNIZED(Int) - - public init() { - self = .typeUnknown - } - - public init?(rawValue: Int) { - switch rawValue { - case 0: self = .typeUnknown - case 1: self = .typeDouble - case 2: self = .typeFloat - case 3: self = .typeInt64 - case 4: self = .typeUint64 - case 5: self = .typeInt32 - case 6: self = .typeFixed64 - case 7: self = .typeFixed32 - case 8: self = .typeBool - case 9: self = .typeString - case 10: self = .typeGroup - case 11: self = .typeMessage - case 12: self = .typeBytes - case 13: self = .typeUint32 - case 14: self = .typeEnum - case 15: self = .typeSfixed32 - case 16: self = .typeSfixed64 - case 17: self = .typeSint32 - case 18: self = .typeSint64 - default: self = .UNRECOGNIZED(rawValue) - } - } - - public var rawValue: Int { - switch self { - case .typeUnknown: return 0 - case .typeDouble: return 1 - case .typeFloat: return 2 - case .typeInt64: return 3 - case .typeUint64: return 4 - case .typeInt32: return 5 - case .typeFixed64: return 6 - case .typeFixed32: return 7 - case .typeBool: return 8 - case .typeString: return 9 - case .typeGroup: return 10 - case .typeMessage: return 11 - case .typeBytes: return 12 - case .typeUint32: return 13 - case .typeEnum: return 14 - case .typeSfixed32: return 15 - case .typeSfixed64: return 16 - case .typeSint32: return 17 - case .typeSint64: return 18 - case .UNRECOGNIZED(let i): return i - } - } - - } - - /// Whether a field is optional, required, or repeated. - public enum Cardinality: SwiftProtobuf.Enum { - public typealias RawValue = Int - - /// For fields with unknown cardinality. - case unknown // = 0 - - /// For optional fields. - case `optional` // = 1 - - /// For required fields. Proto2 syntax only. - case `required` // = 2 - - /// For repeated fields. - case repeated // = 3 - case UNRECOGNIZED(Int) - - public init() { - self = .unknown - } - - public init?(rawValue: Int) { - switch rawValue { - case 0: self = .unknown - case 1: self = .optional - case 2: self = .required - case 3: self = .repeated - default: self = .UNRECOGNIZED(rawValue) - } - } - - public var rawValue: Int { - switch self { - case .unknown: return 0 - case .optional: return 1 - case .required: return 2 - case .repeated: return 3 - case .UNRECOGNIZED(let i): return i - } - } - - } - - public init() {} -} - -#if swift(>=4.2) - -extension Google_Protobuf_Field.Kind: CaseIterable { - // The compiler won't synthesize support with the UNRECOGNIZED case. - public static var allCases: [Google_Protobuf_Field.Kind] = [ - .typeUnknown, - .typeDouble, - .typeFloat, - .typeInt64, - .typeUint64, - .typeInt32, - .typeFixed64, - .typeFixed32, - .typeBool, - .typeString, - .typeGroup, - .typeMessage, - .typeBytes, - .typeUint32, - .typeEnum, - .typeSfixed32, - .typeSfixed64, - .typeSint32, - .typeSint64, - ] -} - -extension Google_Protobuf_Field.Cardinality: CaseIterable { - // The compiler won't synthesize support with the UNRECOGNIZED case. - public static var allCases: [Google_Protobuf_Field.Cardinality] = [ - .unknown, - .optional, - .required, - .repeated, - ] -} - -#endif // swift(>=4.2) - -/// Enum type definition. -public struct Google_Protobuf_Enum { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Enum type name. - public var name: String = String() - - /// Enum value definitions. - public var enumvalue: [Google_Protobuf_EnumValue] = [] - - /// Protocol buffer options. - public var options: [Google_Protobuf_Option] = [] - - /// The source context. - public var sourceContext: Google_Protobuf_SourceContext { - get {return _sourceContext ?? Google_Protobuf_SourceContext()} - set {_sourceContext = newValue} - } - /// Returns true if `sourceContext` has been explicitly set. - public var hasSourceContext: Bool {return self._sourceContext != nil} - /// Clears the value of `sourceContext`. Subsequent reads from it will return its default value. - public mutating func clearSourceContext() {self._sourceContext = nil} - - /// The source syntax. - public var syntax: Google_Protobuf_Syntax = .proto2 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _sourceContext: Google_Protobuf_SourceContext? = nil -} - -/// Enum value definition. -public struct Google_Protobuf_EnumValue { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// Enum value name. - public var name: String = String() - - /// Enum value number. - public var number: Int32 = 0 - - /// Protocol buffer options. - public var options: [Google_Protobuf_Option] = [] - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// A protocol buffer option, which can be attached to a message, field, -/// enumeration, etc. -public struct Google_Protobuf_Option { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The option's name. For protobuf built-in options (options defined in - /// descriptor.proto), this is the short name. For example, `"map_entry"`. - /// For custom options, it should be the fully-qualified name. For example, - /// `"google.api.http"`. - public var name: String = String() - - /// The option's value packed in an Any message. If the value is a primitive, - /// the corresponding wrapper type defined in google/protobuf/wrappers.proto - /// should be used. If the value is an enum, it should be stored as an int32 - /// value using the google.protobuf.Int32Value type. - public var value: Google_Protobuf_Any { - get {return _value ?? Google_Protobuf_Any()} - set {_value = newValue} - } - /// Returns true if `value` has been explicitly set. - public var hasValue: Bool {return self._value != nil} - /// Clears the value of `value`. Subsequent reads from it will return its default value. - public mutating func clearValue() {self._value = nil} - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} - - fileprivate var _value: Google_Protobuf_Any? = nil -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_Syntax: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 0: .same(proto: "SYNTAX_PROTO2"), - 1: .same(proto: "SYNTAX_PROTO3"), - ] -} - -extension Google_Protobuf_Type: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Type" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "fields"), - 3: .same(proto: "oneofs"), - 4: .same(proto: "options"), - 5: .standard(proto: "source_context"), - 6: .same(proto: "syntax"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self.name) }() - case 2: try { try decoder.decodeRepeatedMessageField(value: &self.fields) }() - case 3: try { try decoder.decodeRepeatedStringField(value: &self.oneofs) }() - case 4: try { try decoder.decodeRepeatedMessageField(value: &self.options) }() - case 5: try { try decoder.decodeSingularMessageField(value: &self._sourceContext) }() - case 6: try { try decoder.decodeSingularEnumField(value: &self.syntax) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.name.isEmpty { - try visitor.visitSingularStringField(value: self.name, fieldNumber: 1) - } - if !self.fields.isEmpty { - try visitor.visitRepeatedMessageField(value: self.fields, fieldNumber: 2) - } - if !self.oneofs.isEmpty { - try visitor.visitRepeatedStringField(value: self.oneofs, fieldNumber: 3) - } - if !self.options.isEmpty { - try visitor.visitRepeatedMessageField(value: self.options, fieldNumber: 4) - } - if let v = self._sourceContext { - try visitor.visitSingularMessageField(value: v, fieldNumber: 5) - } - if self.syntax != .proto2 { - try visitor.visitSingularEnumField(value: self.syntax, fieldNumber: 6) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Type, rhs: Google_Protobuf_Type) -> Bool { - if lhs.name != rhs.name {return false} - if lhs.fields != rhs.fields {return false} - if lhs.oneofs != rhs.oneofs {return false} - if lhs.options != rhs.options {return false} - if lhs._sourceContext != rhs._sourceContext {return false} - if lhs.syntax != rhs.syntax {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_Field: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Field" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "kind"), - 2: .same(proto: "cardinality"), - 3: .same(proto: "number"), - 4: .same(proto: "name"), - 6: .standard(proto: "type_url"), - 7: .standard(proto: "oneof_index"), - 8: .same(proto: "packed"), - 9: .same(proto: "options"), - 10: .standard(proto: "json_name"), - 11: .standard(proto: "default_value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularEnumField(value: &self.kind) }() - case 2: try { try decoder.decodeSingularEnumField(value: &self.cardinality) }() - case 3: try { try decoder.decodeSingularInt32Field(value: &self.number) }() - case 4: try { try decoder.decodeSingularStringField(value: &self.name) }() - case 6: try { try decoder.decodeSingularStringField(value: &self.typeURL) }() - case 7: try { try decoder.decodeSingularInt32Field(value: &self.oneofIndex) }() - case 8: try { try decoder.decodeSingularBoolField(value: &self.packed) }() - case 9: try { try decoder.decodeRepeatedMessageField(value: &self.options) }() - case 10: try { try decoder.decodeSingularStringField(value: &self.jsonName) }() - case 11: try { try decoder.decodeSingularStringField(value: &self.defaultValue) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.kind != .typeUnknown { - try visitor.visitSingularEnumField(value: self.kind, fieldNumber: 1) - } - if self.cardinality != .unknown { - try visitor.visitSingularEnumField(value: self.cardinality, fieldNumber: 2) - } - if self.number != 0 { - try visitor.visitSingularInt32Field(value: self.number, fieldNumber: 3) - } - if !self.name.isEmpty { - try visitor.visitSingularStringField(value: self.name, fieldNumber: 4) - } - if !self.typeURL.isEmpty { - try visitor.visitSingularStringField(value: self.typeURL, fieldNumber: 6) - } - if self.oneofIndex != 0 { - try visitor.visitSingularInt32Field(value: self.oneofIndex, fieldNumber: 7) - } - if self.packed != false { - try visitor.visitSingularBoolField(value: self.packed, fieldNumber: 8) - } - if !self.options.isEmpty { - try visitor.visitRepeatedMessageField(value: self.options, fieldNumber: 9) - } - if !self.jsonName.isEmpty { - try visitor.visitSingularStringField(value: self.jsonName, fieldNumber: 10) - } - if !self.defaultValue.isEmpty { - try visitor.visitSingularStringField(value: self.defaultValue, fieldNumber: 11) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Field, rhs: Google_Protobuf_Field) -> Bool { - if lhs.kind != rhs.kind {return false} - if lhs.cardinality != rhs.cardinality {return false} - if lhs.number != rhs.number {return false} - if lhs.name != rhs.name {return false} - if lhs.typeURL != rhs.typeURL {return false} - if lhs.oneofIndex != rhs.oneofIndex {return false} - if lhs.packed != rhs.packed {return false} - if lhs.options != rhs.options {return false} - if lhs.jsonName != rhs.jsonName {return false} - if lhs.defaultValue != rhs.defaultValue {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_Field.Kind: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 0: .same(proto: "TYPE_UNKNOWN"), - 1: .same(proto: "TYPE_DOUBLE"), - 2: .same(proto: "TYPE_FLOAT"), - 3: .same(proto: "TYPE_INT64"), - 4: .same(proto: "TYPE_UINT64"), - 5: .same(proto: "TYPE_INT32"), - 6: .same(proto: "TYPE_FIXED64"), - 7: .same(proto: "TYPE_FIXED32"), - 8: .same(proto: "TYPE_BOOL"), - 9: .same(proto: "TYPE_STRING"), - 10: .same(proto: "TYPE_GROUP"), - 11: .same(proto: "TYPE_MESSAGE"), - 12: .same(proto: "TYPE_BYTES"), - 13: .same(proto: "TYPE_UINT32"), - 14: .same(proto: "TYPE_ENUM"), - 15: .same(proto: "TYPE_SFIXED32"), - 16: .same(proto: "TYPE_SFIXED64"), - 17: .same(proto: "TYPE_SINT32"), - 18: .same(proto: "TYPE_SINT64"), - ] -} - -extension Google_Protobuf_Field.Cardinality: SwiftProtobuf._ProtoNameProviding { - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 0: .same(proto: "CARDINALITY_UNKNOWN"), - 1: .same(proto: "CARDINALITY_OPTIONAL"), - 2: .same(proto: "CARDINALITY_REQUIRED"), - 3: .same(proto: "CARDINALITY_REPEATED"), - ] -} - -extension Google_Protobuf_Enum: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Enum" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "enumvalue"), - 3: .same(proto: "options"), - 4: .standard(proto: "source_context"), - 5: .same(proto: "syntax"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self.name) }() - case 2: try { try decoder.decodeRepeatedMessageField(value: &self.enumvalue) }() - case 3: try { try decoder.decodeRepeatedMessageField(value: &self.options) }() - case 4: try { try decoder.decodeSingularMessageField(value: &self._sourceContext) }() - case 5: try { try decoder.decodeSingularEnumField(value: &self.syntax) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.name.isEmpty { - try visitor.visitSingularStringField(value: self.name, fieldNumber: 1) - } - if !self.enumvalue.isEmpty { - try visitor.visitRepeatedMessageField(value: self.enumvalue, fieldNumber: 2) - } - if !self.options.isEmpty { - try visitor.visitRepeatedMessageField(value: self.options, fieldNumber: 3) - } - if let v = self._sourceContext { - try visitor.visitSingularMessageField(value: v, fieldNumber: 4) - } - if self.syntax != .proto2 { - try visitor.visitSingularEnumField(value: self.syntax, fieldNumber: 5) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Enum, rhs: Google_Protobuf_Enum) -> Bool { - if lhs.name != rhs.name {return false} - if lhs.enumvalue != rhs.enumvalue {return false} - if lhs.options != rhs.options {return false} - if lhs._sourceContext != rhs._sourceContext {return false} - if lhs.syntax != rhs.syntax {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_EnumValue: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".EnumValue" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "number"), - 3: .same(proto: "options"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self.name) }() - case 2: try { try decoder.decodeSingularInt32Field(value: &self.number) }() - case 3: try { try decoder.decodeRepeatedMessageField(value: &self.options) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.name.isEmpty { - try visitor.visitSingularStringField(value: self.name, fieldNumber: 1) - } - if self.number != 0 { - try visitor.visitSingularInt32Field(value: self.number, fieldNumber: 2) - } - if !self.options.isEmpty { - try visitor.visitRepeatedMessageField(value: self.options, fieldNumber: 3) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_EnumValue, rhs: Google_Protobuf_EnumValue) -> Bool { - if lhs.name != rhs.name {return false} - if lhs.number != rhs.number {return false} - if lhs.options != rhs.options {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_Option: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Option" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "name"), - 2: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self.name) }() - case 2: try { try decoder.decodeSingularMessageField(value: &self._value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.name.isEmpty { - try visitor.visitSingularStringField(value: self.name, fieldNumber: 1) - } - if let v = self._value { - try visitor.visitSingularMessageField(value: v, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Option, rhs: Google_Protobuf_Option) -> Bool { - if lhs.name != rhs.name {return false} - if lhs._value != rhs._value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/wrappers.pb.swift b/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/wrappers.pb.swift deleted file mode 100644 index 5ce7c98..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/SwiftProtobuf/Sources/SwiftProtobuf/wrappers.pb.swift +++ /dev/null @@ -1,496 +0,0 @@ -// DO NOT EDIT. -// swift-format-ignore-file -// -// Generated by the Swift generator plugin for the protocol buffer compiler. -// Source: google/protobuf/wrappers.proto -// -// For information on using the generated types, please see the documentation: -// https://github.com/apple/swift-protobuf/ - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Wrappers for primitive (non-message) types. These types are useful -// for embedding primitives in the `google.protobuf.Any` type and for places -// where we need to distinguish between the absence of a primitive -// typed field and its default value. -// -// These wrappers have no meaningful use within repeated fields as they lack -// the ability to detect presence on individual elements. -// These wrappers have no meaningful use within a map or a oneof since -// individual entries of a map or fields of a oneof can already detect presence. - -import Foundation - -// If the compiler emits an error on this type, it is because this file -// was generated by a version of the `protoc` Swift plug-in that is -// incompatible with the version of SwiftProtobuf to which you are linking. -// Please ensure that you are building against the same version of the API -// that was used to generate this file. -fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck { - struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {} - typealias Version = _2 -} - -/// Wrapper message for `double`. -/// -/// The JSON representation for `DoubleValue` is JSON number. -public struct Google_Protobuf_DoubleValue { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The double value. - public var value: Double = 0 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Wrapper message for `float`. -/// -/// The JSON representation for `FloatValue` is JSON number. -public struct Google_Protobuf_FloatValue { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The float value. - public var value: Float = 0 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Wrapper message for `int64`. -/// -/// The JSON representation for `Int64Value` is JSON string. -public struct Google_Protobuf_Int64Value { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The int64 value. - public var value: Int64 = 0 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Wrapper message for `uint64`. -/// -/// The JSON representation for `UInt64Value` is JSON string. -public struct Google_Protobuf_UInt64Value { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The uint64 value. - public var value: UInt64 = 0 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Wrapper message for `int32`. -/// -/// The JSON representation for `Int32Value` is JSON number. -public struct Google_Protobuf_Int32Value { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The int32 value. - public var value: Int32 = 0 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Wrapper message for `uint32`. -/// -/// The JSON representation for `UInt32Value` is JSON number. -public struct Google_Protobuf_UInt32Value { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The uint32 value. - public var value: UInt32 = 0 - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Wrapper message for `bool`. -/// -/// The JSON representation for `BoolValue` is JSON `true` and `false`. -public struct Google_Protobuf_BoolValue { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The bool value. - public var value: Bool = false - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Wrapper message for `string`. -/// -/// The JSON representation for `StringValue` is JSON string. -public struct Google_Protobuf_StringValue { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The string value. - public var value: String = String() - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -/// Wrapper message for `bytes`. -/// -/// The JSON representation for `BytesValue` is JSON string. -public struct Google_Protobuf_BytesValue { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// The bytes value. - public var value: Data = Data() - - public var unknownFields = SwiftProtobuf.UnknownStorage() - - public init() {} -} - -// MARK: - Code below here is support for the SwiftProtobuf runtime. - -fileprivate let _protobuf_package = "google.protobuf" - -extension Google_Protobuf_DoubleValue: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".DoubleValue" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularDoubleField(value: &self.value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.value != 0 { - try visitor.visitSingularDoubleField(value: self.value, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_DoubleValue, rhs: Google_Protobuf_DoubleValue) -> Bool { - if lhs.value != rhs.value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_FloatValue: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".FloatValue" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularFloatField(value: &self.value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.value != 0 { - try visitor.visitSingularFloatField(value: self.value, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_FloatValue, rhs: Google_Protobuf_FloatValue) -> Bool { - if lhs.value != rhs.value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_Int64Value: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Int64Value" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularInt64Field(value: &self.value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.value != 0 { - try visitor.visitSingularInt64Field(value: self.value, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Int64Value, rhs: Google_Protobuf_Int64Value) -> Bool { - if lhs.value != rhs.value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_UInt64Value: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".UInt64Value" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularUInt64Field(value: &self.value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.value != 0 { - try visitor.visitSingularUInt64Field(value: self.value, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_UInt64Value, rhs: Google_Protobuf_UInt64Value) -> Bool { - if lhs.value != rhs.value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_Int32Value: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".Int32Value" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularInt32Field(value: &self.value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.value != 0 { - try visitor.visitSingularInt32Field(value: self.value, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_Int32Value, rhs: Google_Protobuf_Int32Value) -> Bool { - if lhs.value != rhs.value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_UInt32Value: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".UInt32Value" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularUInt32Field(value: &self.value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.value != 0 { - try visitor.visitSingularUInt32Field(value: self.value, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_UInt32Value, rhs: Google_Protobuf_UInt32Value) -> Bool { - if lhs.value != rhs.value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_BoolValue: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".BoolValue" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularBoolField(value: &self.value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if self.value != false { - try visitor.visitSingularBoolField(value: self.value, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_BoolValue, rhs: Google_Protobuf_BoolValue) -> Bool { - if lhs.value != rhs.value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_StringValue: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".StringValue" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularStringField(value: &self.value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.value.isEmpty { - try visitor.visitSingularStringField(value: self.value, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_StringValue, rhs: Google_Protobuf_StringValue) -> Bool { - if lhs.value != rhs.value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension Google_Protobuf_BytesValue: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - public static let protoMessageName: String = _protobuf_package + ".BytesValue" - public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "value"), - ] - - public mutating func decodeMessage(decoder: inout D) throws { - while let fieldNumber = try decoder.nextFieldNumber() { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every case branch when no optimizations are - // enabled. https://github.com/apple/swift-protobuf/issues/1034 - switch fieldNumber { - case 1: try { try decoder.decodeSingularBytesField(value: &self.value) }() - default: break - } - } - } - - public func traverse(visitor: inout V) throws { - if !self.value.isEmpty { - try visitor.visitSingularBytesField(value: self.value, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - public static func ==(lhs: Google_Protobuf_BytesValue, rhs: Google_Protobuf_BytesValue) -> Bool { - if lhs.value != rhs.value {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-Info.plist b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-Info.plist deleted file mode 100644 index 2243fe6..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-acknowledgements.markdown b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-acknowledgements.markdown deleted file mode 100644 index a3a98b7..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-acknowledgements.markdown +++ /dev/null @@ -1,420 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## Starscream - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - Copyright (c) 2014-2016 Dalton Cherry. - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -## SwiftProtobuf - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - -## Runtime Library Exception to the Apache 2.0 License: ## - - - As an exception, if you use this Software to compile your source code and - portions of this Software are embedded into the binary product as a result, - you may redistribute such product without providing attribution as would - otherwise be required by Sections 4(a), 4(b) and 4(d) of the License. - - -## cimsdk - -Copyright (c) 2021 飞鱼 <870027381@qq.com> - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -Generated by CocoaPods - https://cocoapods.org diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-acknowledgements.plist b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-acknowledgements.plist deleted file mode 100644 index 9a75d19..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-acknowledgements.plist +++ /dev/null @@ -1,464 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - Copyright (c) 2014-2016 Dalton Cherry. - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - License - Apache License, Version 2.0 - Title - Starscream - Type - PSGroupSpecifier - - - FooterText - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - -## Runtime Library Exception to the Apache 2.0 License: ## - - - As an exception, if you use this Software to compile your source code and - portions of this Software are embedded into the binary product as a result, - you may redistribute such product without providing attribution as would - otherwise be required by Sections 4(a), 4(b) and 4(d) of the License. - - License - Apache 2.0 - Title - SwiftProtobuf - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2021 飞鱼 <870027381@qq.com> - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - License - MIT - Title - cimsdk - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-dummy.m b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-dummy.m deleted file mode 100644 index 2268c10..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_cimsdk_Example : NSObject -@end -@implementation PodsDummy_Pods_cimsdk_Example -@end diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-frameworks.sh b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-frameworks.sh deleted file mode 100755 index c6a850d..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-frameworks.sh +++ /dev/null @@ -1,189 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -function on_error { - echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" -} -trap 'on_error $LINENO' ERR - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" -BCSYMBOLMAP_DIR="BCSymbolMaps" - - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then - # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied - find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do - echo "Installing $f" - install_bcsymbolmap "$f" "$destination" - rm "$f" - done - rmdir "${source}/${BCSYMBOLMAP_DIR}" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - elif [ -L "${binary}" ]; then - echo "Destination binary is symlinked..." - dirname="$(dirname "${binary}")" - binary="${dirname}/$(readlink "${binary}")" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - warn_missing_arch=${2:-true} - if [ -r "$source" ]; then - # Copy the dSYM into the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .dSYM "$source")" - binary_name="$(ls "$source/Contents/Resources/DWARF")" - binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" - - # Strip invalid architectures from the dSYM. - if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then - strip_invalid_archs "$binary" "$warn_missing_arch" - fi - if [[ $STRIP_BINARY_RETVAL == 0 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" - fi - fi -} - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - warn_missing_arch=${2:-true} - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - if [[ "$warn_missing_arch" == "true" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - fi - STRIP_BINARY_RETVAL=1 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=0 -} - -# Copies the bcsymbolmap files of a vendored framework -install_bcsymbolmap() { - local bcsymbolmap_path="$1" - local destination="${BUILT_PRODUCTS_DIR}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identity - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework" - install_framework "${BUILT_PRODUCTS_DIR}/cimsdk/cimsdk.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework" - install_framework "${BUILT_PRODUCTS_DIR}/cimsdk/cimsdk.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-umbrella.h b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-umbrella.h deleted file mode 100644 index d09e373..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_cimsdk_ExampleVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_cimsdk_ExampleVersionString[]; - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.debug.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.debug.xcconfig deleted file mode 100644 index 13688c0..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf" "${PODS_CONFIGURATION_BUILD_DIR}/cimsdk" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/cimsdk/cimsdk.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Starscream" -framework "SwiftProtobuf" -framework "cimsdk" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.modulemap b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.modulemap deleted file mode 100644 index ba01d9e..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_cimsdk_Example { - umbrella header "Pods-cimsdk_Example-umbrella.h" - - export * - module * { export * } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.release.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.release.xcconfig deleted file mode 100644 index 13688c0..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf" "${PODS_CONFIGURATION_BUILD_DIR}/cimsdk" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/cimsdk/cimsdk.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Starscream" -framework "SwiftProtobuf" -framework "cimsdk" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-Info.plist b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-Info.plist deleted file mode 100644 index 2243fe6..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-acknowledgements.markdown b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-acknowledgements.markdown deleted file mode 100644 index 102af75..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-acknowledgements.markdown +++ /dev/null @@ -1,3 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: -Generated by CocoaPods - https://cocoapods.org diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-acknowledgements.plist b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-acknowledgements.plist deleted file mode 100644 index 7acbad1..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-acknowledgements.plist +++ /dev/null @@ -1,29 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-dummy.m b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-dummy.m deleted file mode 100644 index 7b7386d..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_cimsdk_Tests : NSObject -@end -@implementation PodsDummy_Pods_cimsdk_Tests -@end diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-umbrella.h b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-umbrella.h deleted file mode 100644 index 8476f01..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_cimsdk_TestsVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_cimsdk_TestsVersionString[]; - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.debug.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.debug.xcconfig deleted file mode 100644 index 6735ad6..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf" "${PODS_CONFIGURATION_BUILD_DIR}/cimsdk" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/cimsdk/cimsdk.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Starscream" -framework "SwiftProtobuf" -framework "cimsdk" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.modulemap b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.modulemap deleted file mode 100644 index 256180c..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_cimsdk_Tests { - umbrella header "Pods-cimsdk_Tests-umbrella.h" - - export * - module * { export * } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.release.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.release.xcconfig deleted file mode 100644 index 6735ad6..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf" "${PODS_CONFIGURATION_BUILD_DIR}/cimsdk" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf/SwiftProtobuf.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/cimsdk/cimsdk.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Starscream" -framework "SwiftProtobuf" -framework "cimsdk" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-Info.plist b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-Info.plist deleted file mode 100644 index f78cea6..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.0.4 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-dummy.m b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-dummy.m deleted file mode 100644 index 94456b3..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Starscream : NSObject -@end -@implementation PodsDummy_Starscream -@end diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-prefix.pch b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-umbrella.h b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-umbrella.h deleted file mode 100644 index 7bffee0..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double StarscreamVersionNumber; -FOUNDATION_EXPORT const unsigned char StarscreamVersionString[]; - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.debug.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.debug.xcconfig deleted file mode 100644 index 23e1409..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Starscream -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Starscream -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.modulemap b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.modulemap deleted file mode 100644 index 2b90970..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Starscream { - umbrella header "Starscream-umbrella.h" - - export * - module * { export * } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.release.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.release.xcconfig deleted file mode 100644 index 23e1409..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/Starscream/Starscream.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Starscream -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Starscream -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-Info.plist b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-Info.plist deleted file mode 100644 index 823aefa..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.17.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-dummy.m b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-dummy.m deleted file mode 100644 index 95f025a..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_SwiftProtobuf : NSObject -@end -@implementation PodsDummy_SwiftProtobuf -@end diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-prefix.pch b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-umbrella.h b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-umbrella.h deleted file mode 100644 index 6082918..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double SwiftProtobufVersionNumber; -FOUNDATION_EXPORT const unsigned char SwiftProtobufVersionString[]; - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.debug.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.debug.xcconfig deleted file mode 100644 index 51bad09..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftProtobuf -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.modulemap b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.modulemap deleted file mode 100644 index a88eceb..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SwiftProtobuf { - umbrella header "SwiftProtobuf-umbrella.h" - - export * - module * { export * } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.release.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.release.xcconfig deleted file mode 100644 index 51bad09..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/SwiftProtobuf/SwiftProtobuf.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftProtobuf -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-Info.plist b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-Info.plist deleted file mode 100644 index 161a9d3..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-dummy.m b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-dummy.m deleted file mode 100644 index 6689cc3..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_cimsdk : NSObject -@end -@implementation PodsDummy_cimsdk -@end diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-prefix.pch b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-umbrella.h b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-umbrella.h deleted file mode 100644 index c86eff2..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double cimsdkVersionNumber; -FOUNDATION_EXPORT const unsigned char cimsdkVersionString[]; - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.debug.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.debug.xcconfig deleted file mode 100644 index d8ce4a2..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/cimsdk -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.modulemap b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.modulemap deleted file mode 100644 index 8f6487d..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module cimsdk { - umbrella header "cimsdk-umbrella.h" - - export * - module * { export * } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.release.xcconfig b/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.release.xcconfig deleted file mode 100644 index d8ce4a2..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Pods/Target Support Files/cimsdk/cimsdk.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/cimsdk -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftProtobuf" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/cim-client-sdk/cim-swift-sdk/Example/Tests/Info.plist b/cim-client-sdk/cim-swift-sdk/Example/Tests/Info.plist deleted file mode 100644 index ba72822..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Tests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/Tests/Tests.swift b/cim-client-sdk/cim-swift-sdk/Example/Tests/Tests.swift deleted file mode 100644 index 89d42b3..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/Tests/Tests.swift +++ /dev/null @@ -1,28 +0,0 @@ -import XCTest -import cimsdk - -class Tests: XCTestCase { - - override func setUp() { - super.setUp() - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testExample() { - // This is an example of a functional test case. - XCTAssert(true, "Pass") - } - - func testPerformanceExample() { - // This is an example of a performance test case. - self.measure() { - // Put the code you want to measure the time of here. - } - } - -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/project.pbxproj b/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/project.pbxproj deleted file mode 100644 index c057124..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/project.pbxproj +++ /dev/null @@ -1,593 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1D92C78A1645B1A016B6A2BE /* Pods_cimsdk_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56E6656F91892804B9131433 /* Pods_cimsdk_Tests.framework */; }; - 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; - 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; - 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; - 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; - 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; - 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; - D90CC3B96D00065B6DCA4DCD /* Pods_cimsdk_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2D5E37F74277E5F4F18AA14 /* Pods_cimsdk_Example.framework */; }; - E8E10B202706FB0500A09591 /* IMClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8E10B1F2706FB0500A09591 /* IMClient.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 607FACC81AFB9204008FA782 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 607FACCF1AFB9204008FA782; - remoteInfo = cimsdk; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 05E33074DCD9FCD729551F52 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; - 1CC489D08F1BA48DBFACC8A3 /* Pods-cimsdk_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-cimsdk_Example.release.xcconfig"; path = "Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.release.xcconfig"; sourceTree = ""; }; - 56E6656F91892804B9131433 /* Pods_cimsdk_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_cimsdk_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 607FACD01AFB9204008FA782 /* cimsdk_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = cimsdk_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 607FACE51AFB9204008FA782 /* cimsdk_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = cimsdk_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; - 8D0C1EF56669AB5C504DB93B /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - ADCCC7497922239C76995828 /* Pods-cimsdk_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-cimsdk_Example.debug.xcconfig"; path = "Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example.debug.xcconfig"; sourceTree = ""; }; - AF810869F4069334250AA416 /* cimsdk.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = cimsdk.podspec; path = ../cimsdk.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BDB85179BF89098CDFB1BC36 /* Pods-cimsdk_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-cimsdk_Tests.release.xcconfig"; path = "Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.release.xcconfig"; sourceTree = ""; }; - C2D5E37F74277E5F4F18AA14 /* Pods_cimsdk_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_cimsdk_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E03A9A3FDF22770676A4C8C8 /* Pods-cimsdk_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-cimsdk_Tests.debug.xcconfig"; path = "Target Support Files/Pods-cimsdk_Tests/Pods-cimsdk_Tests.debug.xcconfig"; sourceTree = ""; }; - E8E10B1F2706FB0500A09591 /* IMClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMClient.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 607FACCD1AFB9204008FA782 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D90CC3B96D00065B6DCA4DCD /* Pods_cimsdk_Example.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 607FACE21AFB9204008FA782 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1D92C78A1645B1A016B6A2BE /* Pods_cimsdk_Tests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 607FACC71AFB9204008FA782 = { - isa = PBXGroup; - children = ( - 607FACF51AFB993E008FA782 /* Podspec Metadata */, - 607FACD21AFB9204008FA782 /* Example for cimsdk */, - 607FACE81AFB9204008FA782 /* Tests */, - 607FACD11AFB9204008FA782 /* Products */, - 72D35C3647B9D757069E54A2 /* Pods */, - 739504FAA8EBAB2ACBA57026 /* Frameworks */, - ); - sourceTree = ""; - }; - 607FACD11AFB9204008FA782 /* Products */ = { - isa = PBXGroup; - children = ( - 607FACD01AFB9204008FA782 /* cimsdk_Example.app */, - 607FACE51AFB9204008FA782 /* cimsdk_Tests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 607FACD21AFB9204008FA782 /* Example for cimsdk */ = { - isa = PBXGroup; - children = ( - 607FACD51AFB9204008FA782 /* AppDelegate.swift */, - 607FACD71AFB9204008FA782 /* ViewController.swift */, - E8E10B1F2706FB0500A09591 /* IMClient.swift */, - 607FACD91AFB9204008FA782 /* Main.storyboard */, - 607FACDC1AFB9204008FA782 /* Images.xcassets */, - 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, - 607FACD31AFB9204008FA782 /* Supporting Files */, - ); - name = "Example for cimsdk"; - path = cimsdk; - sourceTree = ""; - }; - 607FACD31AFB9204008FA782 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 607FACD41AFB9204008FA782 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 607FACE81AFB9204008FA782 /* Tests */ = { - isa = PBXGroup; - children = ( - 607FACEB1AFB9204008FA782 /* Tests.swift */, - 607FACE91AFB9204008FA782 /* Supporting Files */, - ); - path = Tests; - sourceTree = ""; - }; - 607FACE91AFB9204008FA782 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 607FACEA1AFB9204008FA782 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { - isa = PBXGroup; - children = ( - AF810869F4069334250AA416 /* cimsdk.podspec */, - 05E33074DCD9FCD729551F52 /* README.md */, - 8D0C1EF56669AB5C504DB93B /* LICENSE */, - ); - name = "Podspec Metadata"; - sourceTree = ""; - }; - 72D35C3647B9D757069E54A2 /* Pods */ = { - isa = PBXGroup; - children = ( - ADCCC7497922239C76995828 /* Pods-cimsdk_Example.debug.xcconfig */, - 1CC489D08F1BA48DBFACC8A3 /* Pods-cimsdk_Example.release.xcconfig */, - E03A9A3FDF22770676A4C8C8 /* Pods-cimsdk_Tests.debug.xcconfig */, - BDB85179BF89098CDFB1BC36 /* Pods-cimsdk_Tests.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; - 739504FAA8EBAB2ACBA57026 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C2D5E37F74277E5F4F18AA14 /* Pods_cimsdk_Example.framework */, - 56E6656F91892804B9131433 /* Pods_cimsdk_Tests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 607FACCF1AFB9204008FA782 /* cimsdk_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "cimsdk_Example" */; - buildPhases = ( - A35E21D3642030D4BF67F181 /* [CP] Check Pods Manifest.lock */, - 607FACCC1AFB9204008FA782 /* Sources */, - 607FACCD1AFB9204008FA782 /* Frameworks */, - 607FACCE1AFB9204008FA782 /* Resources */, - E11E3F531ABE925AA48D6D0E /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = cimsdk_Example; - productName = cimsdk; - productReference = 607FACD01AFB9204008FA782 /* cimsdk_Example.app */; - productType = "com.apple.product-type.application"; - }; - 607FACE41AFB9204008FA782 /* cimsdk_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "cimsdk_Tests" */; - buildPhases = ( - 75A30BD6F3453CF91E7E5542 /* [CP] Check Pods Manifest.lock */, - 607FACE11AFB9204008FA782 /* Sources */, - 607FACE21AFB9204008FA782 /* Frameworks */, - 607FACE31AFB9204008FA782 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 607FACE71AFB9204008FA782 /* PBXTargetDependency */, - ); - name = cimsdk_Tests; - productName = Tests; - productReference = 607FACE51AFB9204008FA782 /* cimsdk_Tests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 607FACC81AFB9204008FA782 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0830; - ORGANIZATIONNAME = CocoaPods; - TargetAttributes = { - 607FACCF1AFB9204008FA782 = { - CreatedOnToolsVersion = 6.3.1; - DevelopmentTeam = 86V8T3P4C5; - LastSwiftMigration = 0900; - }; - 607FACE41AFB9204008FA782 = { - CreatedOnToolsVersion = 6.3.1; - DevelopmentTeam = 86V8T3P4C5; - LastSwiftMigration = 0900; - TestTargetID = 607FACCF1AFB9204008FA782; - }; - }; - }; - buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "cimsdk" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - Base, - ); - mainGroup = 607FACC71AFB9204008FA782; - productRefGroup = 607FACD11AFB9204008FA782 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 607FACCF1AFB9204008FA782 /* cimsdk_Example */, - 607FACE41AFB9204008FA782 /* cimsdk_Tests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 607FACCE1AFB9204008FA782 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, - 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, - 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 607FACE31AFB9204008FA782 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 75A30BD6F3453CF91E7E5542 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-cimsdk_Tests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - A35E21D3642030D4BF67F181 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-cimsdk_Example-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - E11E3F531ABE925AA48D6D0E /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework", - "${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework", - "${BUILT_PRODUCTS_DIR}/cimsdk/cimsdk.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Starscream.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/cimsdk.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-cimsdk_Example/Pods-cimsdk_Example-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 607FACCC1AFB9204008FA782 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E8E10B202706FB0500A09591 /* IMClient.swift in Sources */, - 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, - 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 607FACE11AFB9204008FA782 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 607FACCF1AFB9204008FA782 /* cimsdk_Example */; - targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 607FACD91AFB9204008FA782 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 607FACDA1AFB9204008FA782 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { - isa = PBXVariantGroup; - children = ( - 607FACDF1AFB9204008FA782 /* Base */, - ); - name = LaunchScreen.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 607FACED1AFB9204008FA782 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 607FACEE1AFB9204008FA782 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 607FACF01AFB9204008FA782 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = ADCCC7497922239C76995828 /* Pods-cimsdk_Example.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = 86V8T3P4C5; - INFOPLIST_FILE = cimsdk/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "com.chaisz.cimsdk-Example"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; - }; - name = Debug; - }; - 607FACF11AFB9204008FA782 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1CC489D08F1BA48DBFACC8A3 /* Pods-cimsdk_Example.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = 86V8T3P4C5; - INFOPLIST_FILE = cimsdk/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "com.chaisz.cimsdk-Example"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; - }; - name = Release; - }; - 607FACF31AFB9204008FA782 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E03A9A3FDF22770676A4C8C8 /* Pods-cimsdk_Tests.debug.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = 86V8T3P4C5; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/cimsdk_Example.app/cimsdk_Example"; - }; - name = Debug; - }; - 607FACF41AFB9204008FA782 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BDB85179BF89098CDFB1BC36 /* Pods-cimsdk_Tests.release.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = 86V8T3P4C5; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 4.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/cimsdk_Example.app/cimsdk_Example"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "cimsdk" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 607FACED1AFB9204008FA782 /* Debug */, - 607FACEE1AFB9204008FA782 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "cimsdk_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 607FACF01AFB9204008FA782 /* Debug */, - 607FACF11AFB9204008FA782 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "cimsdk_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 607FACF31AFB9204008FA782 /* Debug */, - 607FACF41AFB9204008FA782 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 607FACC81AFB9204008FA782 /* Project object */; -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 48192d9..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/xcshareddata/xcschemes/cimsdk-Example.xcscheme b/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/xcshareddata/xcschemes/cimsdk-Example.xcscheme deleted file mode 100644 index db95403..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcodeproj/xcshareddata/xcschemes/cimsdk-Example.xcscheme +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcworkspace/contents.xcworkspacedata b/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 191ac56..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/AppDelegate.swift b/cim-client-sdk/cim-swift-sdk/Example/cimsdk/AppDelegate.swift deleted file mode 100644 index 12b8252..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/AppDelegate.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// AppDelegate.swift -// cimsdk -// -// Created by 飞鱼 on 09/25/2021. -// Copyright (c) 2021 飞鱼. All rights reserved. -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - imClient.connect(account) - return true - } - - func applicationWillResignActive(_ application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - imClient.disconnect() - } - - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. - imClient.connect(account) - } - - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - } - - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - imClient.disconnect() - } - - -} - diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Base.lproj/LaunchScreen.xib b/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Base.lproj/LaunchScreen.xib deleted file mode 100644 index 59029fd..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Base.lproj/LaunchScreen.xib +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Base.lproj/Main.storyboard b/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Base.lproj/Main.storyboard deleted file mode 100644 index e6fe53a..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Base.lproj/Main.storyboard +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Images.xcassets/AppIcon.appiconset/Contents.json b/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 7006c9e..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Info.plist b/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Info.plist deleted file mode 100644 index eb18faa..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/Info.plist +++ /dev/null @@ -1,39 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - - - diff --git a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/ViewController.swift b/cim-client-sdk/cim-swift-sdk/Example/cimsdk/ViewController.swift deleted file mode 100644 index 54fe5dc..0000000 --- a/cim-client-sdk/cim-swift-sdk/Example/cimsdk/ViewController.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// ViewController.swift -// cimsdk -// -// Created by 飞鱼 on 09/25/2021. -// Copyright (c) 2021 飞鱼. All rights reserved. -// - -import UIKit -import cimsdk - -class ViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view, typically from a nib. - } - - override func touchesBegan(_ touches: Set, with event: UIEvent?) { - - let msg = Message(action: "0", sender: "111111", receiver: "123456", title: "hahaha", content: "content", format: "", extra: "") - imClient.sendMessage(msg) - } - - override func didReceiveMemoryWarning() { - super.didReceiveMemoryWarning() - // Dispose of any resources that can be recreated. - } - -} - diff --git a/cim-client-sdk/cim-swift-sdk/LICENSE b/cim-client-sdk/cim-swift-sdk/LICENSE deleted file mode 100644 index 1b7616e..0000000 --- a/cim-client-sdk/cim-swift-sdk/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2021 飞鱼 <870027381@qq.com> - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/cim-client-sdk/cim-swift-sdk/Package.swift b/cim-client-sdk/cim-swift-sdk/Package.swift new file mode 100644 index 0000000..4df82a1 --- /dev/null +++ b/cim-client-sdk/cim-swift-sdk/Package.swift @@ -0,0 +1,41 @@ +// swift-tools-version:5.5 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "CIMClient", + platforms: [ + .iOS(.v11), + .macOS(.v11), + ], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "CIMClient", + targets: ["CIMClient"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + .package(url: "https://github.com/daltoniam/Starscream.git", .upToNextMajor(from: "4.0.0")), + .package(url: "https://github.com/apple/swift-protobuf.git", .upToNextMajor(from: "1.6.0")), + .package(url: "https://github.com/stephencelis/SQLite.swift.git", .upToNextMajor(from: "0.13.0")), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "CIMClient", + dependencies: [ + .product(name: "Starscream", package: "Starscream"), + .product(name: "SwiftProtobuf", package: "swift-protobuf"), + .product(name: "SQLite", package: "SQLite.swift"), + ], + path: "CIMClient/Sources/CIMClient"), + .testTarget( + name: "CIMClientTests", + dependencies: ["CIMClient"], + path: "CIMClient/Tests/CIMClientTests"), + ] +) diff --git a/cim-client-sdk/cim-swift-sdk/README.md b/cim-client-sdk/cim-swift-sdk/README.md index 673bab4..79a9c64 100644 --- a/cim-client-sdk/cim-swift-sdk/README.md +++ b/cim-client-sdk/cim-swift-sdk/README.md @@ -1,29 +1,18 @@ -# cimsdk +# Demo -[![CI Status](https://img.shields.io/travis/飞鱼/cimsdk.svg?style=flat)](https://travis-ci.org/飞鱼/cimsdk) -[![Version](https://img.shields.io/cocoapods/v/cimsdk.svg?style=flat)](https://cocoapods.org/pods/cimsdk) -[![License](https://img.shields.io/cocoapods/l/cimsdk.svg?style=flat)](https://cocoapods.org/pods/cimsdk) -[![Platform](https://img.shields.io/cocoapods/p/cimsdk.svg?style=flat)](https://cocoapods.org/pods/cimsdk) -## Example +## macOS Demo [参考教程](https://www.bilibili.com/video/BV1U5411E77K) -To run the example project, clone the repo, and run `pod install` from the Example directory first. +![Demo](./screenshot/macOS.png) -## Requirements -## Installation -cimsdk is available through [CocoaPods](https://cocoapods.org). To install -it, simply add the following line to your Podfile: +## 变更记录 -```ruby -pod 'cimsdk' -``` +### v2.0 +* 弃用cocoapods, 支持SPM +* SwiftUI Hello world! -## Author - -飞鱼, 870027381@qq.com - -## License - -cimsdk is available under the MIT license. See the LICENSE file for more info. +### v1.0 +* 支持cocoapods +* 实现消息收发 diff --git a/cim-client-sdk/cim-swift-sdk/_Pods.xcodeproj b/cim-client-sdk/cim-swift-sdk/_Pods.xcodeproj deleted file mode 120000 index 3c5a8e7..0000000 --- a/cim-client-sdk/cim-swift-sdk/_Pods.xcodeproj +++ /dev/null @@ -1 +0,0 @@ -Example/Pods/Pods.xcodeproj \ No newline at end of file diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk.podspec b/cim-client-sdk/cim-swift-sdk/cimsdk.podspec deleted file mode 100644 index 5edd477..0000000 --- a/cim-client-sdk/cim-swift-sdk/cimsdk.podspec +++ /dev/null @@ -1,44 +0,0 @@ -# -# Be sure to run `pod lib lint cimsdk.podspec' to ensure this is a -# valid spec before submitting. -# -# Any lines starting with a # are optional, but their use is encouraged -# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html -# - -Pod::Spec.new do |s| - s.name = 'cimsdk' - s.version = '0.1.0' - s.summary = 'A short description of cimsdk.' - -# This description is used to generate tags and improve search results. -# * Think: What does it do? Why did you write it? What is the focus? -# * Try to keep it short, snappy and to the point. -# * Write the description between the DESC delimiters below. -# * Finally, don't worry about the indent, CocoaPods strips it! - - s.description = <<-DESC -TODO: Add long description of the pod here. - DESC - - s.homepage = 'https://github.com/飞鱼/cimsdk' - # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' - s.license = { :type => 'MIT', :file => 'LICENSE' } - s.author = { '飞鱼' => '870027381@qq.com' } - s.source = { :git => 'https://github.com/飞鱼/cimsdk.git', :tag => s.version.to_s } - # s.social_media_url = 'https://twitter.com/' - - s.ios.deployment_target = '9.0' - - s.source_files = 'cimsdk/Classes/**/*' - - # s.resource_bundles = { - # 'cimsdk' => ['cimsdk/Assets/*.png'] - # } - - # s.public_header_files = 'Pod/Classes/**/*.h' - # s.frameworks = 'UIKit', 'MapKit' - # s.dependency 'AFNetworking', '~> 2.3' - s.dependency 'Starscream', '~> 4.0.0' - s.dependency 'SwiftProtobuf', '~> 1.0' -end diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Assets/.gitkeep b/cim-client-sdk/cim-swift-sdk/cimsdk/Assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/.gitkeep b/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/AutoReConnectInterceptor.swift b/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/AutoReConnectInterceptor.swift deleted file mode 100644 index a2b22ad..0000000 --- a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/MessageInterceptor/AutoReConnectInterceptor.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// AutoReConnectInterceptor.swift -// cimsdk -// -// Created by FeiYu on 2021/10/1. -// - -import Foundation - -class AutoReConnectInterceptor: MessageInterceptor { - - var uniqueID: String = UUID().uuidString - - weak var client: CIMClient? - - init(client: CIMClient) { - self.client = client - } - - func connect(_ event: ConnectEvent) { - switch event { - case .connected(_): - if let account = self.client?.account { - var data: [String: String] = [:] - data["uid"] = String(account.id) - data["channel"] = "ios" - data["deviceId"] = UIDevice.current.identifierForVendor?.uuidString - if let token = account.token { - data["token"] = token - } - let body = SentBody(key: "client_bind", data: data) - if let client = self.client { - client.sendMessage(body) - } - } - break - default: - break - } - } -} diff --git a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/MessageFactory.swift b/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/MessageFactory.swift deleted file mode 100644 index 46bdb02..0000000 --- a/cim-client-sdk/cim-swift-sdk/cimsdk/Classes/Model/MessageFactory.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// MessageFactory.swift -// cimsdk -// -// Created by FeiYu on 2021/9/29. -// - -import Foundation - -class MessageFactory { - - func transportData(_ data: Data) -> Transportable? { - let bytes: [UInt8] = data.map{$0} - let type = MessageType.Byte(rawValue: bytes[0]) - let body: [UInt8] = bytes[1..}DjqM`&8DIx?x1eGF1Ithw`h=PCxLqaFM<^55Ty4KN(d?Yw}bEZeeXHv-aE$q>yA6dVUlEJ?X}k4d+oL6eC9J}UftH! zI(qozVFm_KS(?86tvFO{;HM$S zwa$Ib#_WDdoPJ1gF|k>TZwFd&=h9}W)1+DS_OL>6v21ZHwRK+_DO#9oHvIv^ROn%m zLma2W3hn2Q7_bO3nX2!vsg10A`#N!by^EpM9P~y5#{~(rcd;Y=$R_a9+}e(TBtx@L zbE4`w1-P3mgU^Zk;^&y3iuIf5p5tsovpq6Bbd#O%SjqMRIy+hRt^ZYv*f+J${r59m zI?ARMbCh8j(JTA<%ivGgXLwQQOHoe7G^KrRg7<5GUyhqa2qAIm9Veoe)2ex7+F5oU z1We}iMz>ZlJvCr1YJT)V?Q#3tB6I3f#3OD2QMtoK(o;|L%^XW^U=u}- z*lGk}3_8Yfp2@LH-!eYNW%vQv6fHKfSgs zDU&j$uD-=aPJEAIo_?4t)De1raFUBsb@1!hzM_y4G5t&2dgopw8P3Byk8wAOp4+Go zbyv)sd`lW{yDVq^>~<}K%z(^g#%9LveJjDvJ330o*c8?G6*0mUKgtEl8k`Uo^0~#_ zFs^sqUy%PDcLvXNpimAd^Zu?`ih7)7$#rRAZq>kKScbX)MZ&QC*wJe`jC$#sJCSpz z2EJUxs}4*}f@a7ZYL>;7TO~Jy`NEoio+>#L%%Slry8cOqn)3^m37U^w)q%R1VDflP z;Np&ro{y%Tu+?0WXcvl*qSYi5h9i<#}0 z+;hfq)1%>&#WkN0ux)+h1Iy3?rUBz6W-kGi=a(1`c%5>nm$cBDRxPPaJ@3_TUc!70 z@%3lq8hl;xuLQ!48>Wv zYuySC6cT;B8U6m~*Fe=P6;TS! zwwxN5ZkzTpmtNM&K!_a=zY_cNke$3TuY@Ldnoif@l9Qw1eVL*^L+6f`@MB(WTQV3n zZA!bhAKLh4WOOPn!rJ1PBiFsxZ>@eA@%J%0Q6PKCM0>lUQoA>mvd5Ni;8-@9Qi7#F5J@ znRbSb=NR9dxxr>F`Qf>NmeQ@SdgxDidCuu8pAed+IS8%lD;Vsq(w5c&R?b82l$_DY z$xDw;>Rj@&lXDp9^3nNV;FR;N*W>YN&vT{0zA?K|yV082N<9N|0#5RuWA5oy-thaN z-B;50=&^3Ec%OK`Y8u+O*d#R9I{w#h;y$UwzdtejB~4 z%O4XFuA9K7XZx(=fo9((R-r;YW!-j zYR>A9zHfcCwuZK(F?^V^fK-|cmAb32g@noSHlAvPm-!ft7JRBh@ElP%C_m2k=H$|) zFBWTqQ5HNl2@YSr7kpcL#^F3=F4t)Hx=S;&M{~5!GlUGAWs~Bs0d`ESdI!EKe)FkV zzc;DVSba9@EXP^PSkJSfw<>OJ-3q+re)E2kfb6nNX43w5hko2k;#ctd_S5PjFFNdS z<2lX9uZ8IMU)%jd(Vx)RpwHKe8dO88xnSbw;t+Ahai1hi#Qk#Hb1idijD9^BEj?>O zHe$`~e}FBenOix;J}&;5^)0KXuQtxf#L>jT4gTGv<;qCX&zdV;0* zThHb3+w)HbIXpMrIF+5BIPzWQ`K@wAF2lE8LiDI;mSMEv=N@5O%&grky5nd^zUG7Q zoA9reQ-jecQ&m&K!?Ld8JunlPxSiw;k)7b3j%~FGa!Y4h{!bSi z9!1loeWg`WRI~;oCL)LA7qp*VV-PjhQTG!Rz9{^}-P|t<%`TdwJm*?qeNoECZ_PbR zO*Z6f66t)s$kk(RVpB|Qk(XkBoq8Rl`64d3EO`EfNXTcHACEIfD!&=u*zw=I(rOt> zG3>l2z6uezhF|=!?l17u^ovYY+P(8e^NwZjZcbAdTUX3n7LS~bNBdt1@5W_M!N6+{Pg6O?~b zu4cYMACJ`SPOeY%5Dbipeph%Q6MMYr!Z)~STQ z)b7e{b<2g=hi0ouu}RUal@Tc_)z-nJu&=TLKOS|A$gn29Rr+LIHodgJSY_sF`=C<1 zjDq*d>c+#F&&fpRfCWm{{i#jCD-n(GtU7lD|AGq0GEaJE3y_alW`2>CxTxzjl9x z{rd0;|2eT_#{a7pDXa8NX;JC&iLMjji@ALgsD7MT0Zr5T`t;cO$-f%z!sXZGACB@= z6*|YZWEI`QDzGZx$Bq?#s2R$t@W0^d(A8%kjnN;+POD3v3VI zxyo0OcOFFc>U~-p#?Yp)1?EqtY{hVo{%%vW!)s!#C3{K(agW9 z+<0UJBSfx`jnkGO>PD!csl5q?pR+S{u`0&{W~Pj11}A6tb?_^#deheSV_A=KS4;Mx z2vr_)-ko?@sc&f?YP)8{r-69Ga5$&T>V9Be>K88G<#x~QtxyF^my*$&HE43*j>&R4 zx?E*-Y7~trpL51nD-jP7b>MbtVt^f`U>8P4ZkPF$!ZDn?bKR5mO~lkE*ed_?m?3=O zIPaD*$-Q{?Qi^kmR>k+qyeb}I#^i?`Ym|2jb_lpvUF7GvmOqY@+zMNs_mM!Wt=Y7g z)Rn7@p{pF`!&fmo2oQr0>5dGBdj}9m9^38=~H z`ioK9;LI8{{($`*BM+lnHg{z^pCDea&rId`j12Zz3W|fYc~xS zC+MUei2ppWzdQf);NKlprRewmkGc3W(R;PfOd}4fO8xt(Ar5DhVgTqtp0dBHcL(}} zmKptz`7!h+_U98SvqUz^yiW3EU{Gh!zIyqN593m`LqVR&y?)|~dj}#u3nmx-<8$S_ z^OTU~6^@%rIcXVLSDqa^5&r6|G>QFn!iyJr=MIgtd_uBcx+ii&gv2hbeIh*g`jHoh zqq+9?zR~}yO13rCU#+QzjZa;9yFD1HoARWdUldU>H z*_i|@RfiQ%`6MysD}w*~|GzWvzccXv*BOvxdS=p-7O4yS_$bwPSRj$mSEn^5qx!R1 zL!juWSySc@*U#SKy9x1Ff?}DfFx*pEk8t@6r3YsW8@RBNy^Y!yC08a}SW2(H>A?+sU7MzSZa3!j+%bFP6C#GtbJ>MQT4 z#!pT+7$rUwoI zgV-gP+0J#@zT%<{1yBR|xOYEBaHobMQk*n=(3VLkw1~2#0yNY zUOUac5Bfj8Pq9W>ehQO2$@CoE?Mbdcs;X`lhjY4}BJ{Ob@lO{@l31O8V`-m>O<(S} zmxD#fLHzV73zT{aQkIRvdE6=3^G#Dl2mYFiGN1zVldVQB%&0&m6(HXI1%}a+)}gp& zc(a7JPhVhB8Q`v-rz}%US0i2X6IP)TRPNx|-rq}7nXJ{5?y@n`Lgy}0OgFPO$~U~L zk&V@sHBbpED`^dI-=19!V?s7uO|pP4D{sTQE2#tDf#0I>5MPt%rH;QZ4EH}S48F1v zuXZd*{osq*QcZIYk4BBQz)>#)HlO*z%EYci7xiMPrrC=*3eex3FZ zp)v(clAEhFs>zL*GhT0ofhJcbse|qHw@2!w$+1*dSo(!Q_-&)@wlCf}-uN$(^^#ES zGDWGzWkBlZmyi*K6=4G+dll41F+wOkk0N)f zy~uk6s9Ow5O^&6HVI~pBDwp)O%Qt3sYAkT-lLBtgkk>~w)@%Uv--;3DjZCkSps}Vm zR~4O2YF8}(F-*-PV8(PZzye6fZlI5&(mIIUf5G*btTd;>uyzCc*d~lKVp7bjH}u~l zjPHMz$n!c$F$-8m64@(asEk3@xG=vEUt&1<`ce_HX<5qX+UX~f%mX*|4<^502=<}q z4caAq)(G+0>Ff*p2rBXI*cYo>dlS021$KVKUTGD=`rkIX$S9n;hKvZ@jiZ&)*Bok@ zvCO?BzRysrW+Qv!zNui)Pu6pwmFAV3wJ$}%Nkz7yx0J{|fh{xk{b`ASw2a38XDw-$ zH;_N6V$5DbPrJ2FGwh?VCiSmeNjEcB_4v}ymSr72gV3<54nDyf5vfR6`$ z*25fOse4u@X~io!w&s^&w&wA<$Yq>0kS@CNVeg^ZmL=17UJ8x`B(vV8^}F5kwTYPl zW`H8C&Emle!p2xI1q`pIE03SJdR?D5PT&M2KSZ<1nLBi`8av*AYBQcs)P6v@yC?R^ zY9?*d*;@_x27EF%{k@Uf=n&@B#424#BOU-Jzzs>KU&fA~(gihHZI{Osr-v7DqXEI{ z2UX<`?ntX^H3hjJ8j)X6rHpSNjW1XGPn`xgj!gY79bI=)xEs8@8Q4dSK~5f{LF?6J zj5RZ*K(q3S5_v;Y!kAx+b5Z_TshBuIll7U3dWhI<9MZF_&yB17X184YWla>|q>s|d&L zY53A(p_szG6IPCAVotyfopP6jBg*vSsVUJdkOe5lJ$ThnW0Yx{o=i1e>#BJj`BA=a zn?q|jr;XOp{0KTei27V_iOTKDyWK&P+_6J7G~MBIAivCX>a_-J9~I#S@k{ylEDNRj z?Cy)c60xBe&v~g;ya<-AZd$T$3fsTBSSZK#FB4vg~RK50Q0m_$hv9 z^g%2yOMnevBi?&-O9awbU2!?bCj(9+`%KCrtAt@_F|zDrZRb*FSWrbeq!EgcL&rQV zN2I2jeA~98y{AsYtO1)-JBif9!rKbH@zAQ&GRe>lBL`88Tm}(@2-T@{s4o+;7%9uO z5WE{hZK2ue^uBV%MZp&(hPB3`LsZ{T6J5t`w{07*jNV2;yBqHGN?Ce^n_vZTEzK%~ zsE{JMacQTu8|CmV=s>63GvWxg{0KsfF9=?3-BZN2F6a3`yP zQ9a=Uk>D|{0H4!jBfZD`%W)rdXnciAhsxKq0&VzjfL!9urJ#*!$tBTcVIR6VgD?qv zd4C^Ml55Q99A*Cp2%($-tv(&rA_rlZzhZTVwAR)h0o+x!boH)gkN2Pz=qLkp*+6oc zs7r!Yjl$rf2l6~93syoq?9)#1PR~Y6Pw`GAB!1h%-z=&Xc4-CXhLlqC%WS64dJ|)} zIaF0saI9wL{iGg}dv{F>tw_g)zlA1g6a_6g9}ik`K*Ym(l1k=iC$x|pp4HANM#1?V z&*oUvzbZ)aO*tIC&$DFpQ#OAQzZrbthbVC9Nv#NlyZVY&Et5fHH*Wv&wZV`!u9Eao zs^($iJveom$otXv+G8q0ZTLRYb2Mgof$!WSC8`eCjkCtmmF$4#HnaV<_dW}uPL4J9 ze;x9eZ@<)|Eu~*{ikW>dyf}Bf@r+$+! z5`{3-@q@?F5gs&g<@D62ohP{$1YI|(M1sV7q{x-#hXp2X+~7Udbg6^9Fl(lRTt6Em z9s)o{&}7?~EJY41IMeC4@; zKZg40GkQV89FrqB5Ew-9;kmv2QxF+58TF2+?y9=0oQjz)4fiFrw7HlPE>DM_iFiL# z2Q=FE@^5J~H=L&?5l?=3$&Fqw%A>NJcR925vezHlk$)fliwfP!D!0c~46o<)QC>sn zD8*ORv)y;M%^}J2{cVEnk=jG8v`)ob;4iKBGrx*CRJK}Zge+hXS6Y)MywH}TvCxq~ zKh!_@(Wz(w5Ic!q#Sdzx?9$^eJ1gi*b|r&j~9cum7m*)La_T+m0`X9v5nnRXL+3O!@sv z*hk;1j|0?Fm2K3h)1^O@4a7);fCq!xvm#KIZ4nEhn2idfP7GE0ESr3LiRr8w*k? z6}ZVE&3FE{6V6e%Qy8O5X*sr5H^yWz-8f!Y0Ry+^Yd12C(`Fyvp6Sx_yryQn7)f@# z*RH zkdz)7CI^{x*9VhYgH-DqDO+KdY9vpfsWe=Ua@itl4drp*YTs^VD!uEbHe`cp_dV=A z*Sd_nop8u8ZO>@_I zSe&Y#D~elL{ZbYkj1+6`nizl1vrqQ*)>J>0zhAz4jU_1Y zJJ7|;4$Y}Ay=#vsHEErJ^@)DA7>Y=3I+f}0g5fZysT8x1Xue+LYVa-U(5TE7yA#4Y zOLdD!b4OG7;)%${qI^$+EE~qoR=jmeJAF#(%X3y(LfB5=uvL$H{?0IV-9OTS5(}pT zL@BcDB14%Bc^I;dNnkoCm-s@sJ6_~%^C|&Y#zLqt5mZ}^n}{6DJIT$x2XE;R_XLp6 z)PQZkV}Lob1|Ggk8z(a1WTUpJ7Td>nX+?I|@Yr2iAF*k=^6uEPH%JuPa8fO>28z}RCBYh=IBjA>Qn!l&-Tqje@ zY=XjNg!`lL1EINrr2Ky5NwXni@IsFU&@a_!1%5;iJ14CM$?SYjqB8{%!=JYCt`NdC zcC?1Pxon6m5C$*&jWHY!3yI1!iqjrWct2r;6`rG|c81j;H>n?1^>l6y660%dVfasE zS}!qsoe0MOCXUwszPT;x=T#RBut+w+<9Aw1{H+$~r7(C`Xbn=*FLN~?12ovqkvA;x z*g|1d2jAN(C`-P=L%I4$OI4(kO51LK)!Y1ojHvMwuXNfEGX_d49JLN-K`)>M5zf0h zu!Rwi_b2BHkq4SwF`bhGQ@^us)f6J3!)a|%I9d>w^-R!Bf&=NHd3iu}z;Nx$vYtNN zqPkANPByTNTk5p5)gtGIe~=_sDt=3TYuU561n9ni5}9MiaEaxm>Wk`jFtyXD;J50D zNJ{6P=;7R_0KG<6p|zh)bmHVZO`O(SE>1IZw4yJBpTrRQ+@!C zx8+o=Tr2-U%WeQ#d%!|RVEW+)ioJc;U7^~x$ULrRTi=wOFUn(s-yS{qb+DyUX|&|z zk+v{3f}#Kh0^aDi4v+DnG02Xir1t&1Amy`kJ~UFQD{#vShXn*7&+o7dCI*p+ND)s zdem{#lgY#u-WoL-d2TDhfoe~f7WQwrvZ)j%S#j;BLMB_eRlx>!_qV)tU`x()lB9ER&i#oPeB>l>;3Nf-l22 zWv`!Je!WG4vr4Am+ITZl!<2hSvctyPy0b2Hp=m*6oapRjh-6bh7_PGjOcuezpgz>YHw~`ihITb3^>%&xy1lXB zEw!l~s~c1Vsl;@PYB>9PX)cCcoiU^BTCIBXt$aCoK2K+(w)d)07{|d<}5AgqqfCazR7_+J*}#61M5ai$i;qF1-Rg zF6JVyk)3d0>{7AGk#G0JKeN~_l;Gm@>hOg;A*%I?Q8e6EZn1DNrK2sy0_ERd0;sYa(BG$skvkeJLtq|r*q_MKrABmKO!x^aY~wg&kapK@dL_y z8cGo5^k_tigvtiM7O?#vl1#ne??gS=Ls_K@#Kqmim+ z#_xzIIL2{-OzWm=X}ZRiYI4e)&9Pr6QeWY|@smA_cia!Soz2_A6RN9##t2CsMy3>2 zf$ekw=X%bDY{#|Q15ZcJOpTtJk%%3_dYoyTvQTY2X+Kp8+7s+U#=T=>%0XqMa?SP! zBy;{0MK>m2b@yjK;lWw!zMJnTysSrenOiuXMRL-L^WFm+HCNziU9>Ow94&A0*jd-k za1tFbRX5YxZOP0H9EE!CAs(IEWDwHBffD1-lmT1(KJiV3W-AqmSU4s^8Vju+y3mdC zAW>AeBS=wHq@x>B%k)WrIWofTKwILsl0{XJ*=^fIRXsdldrDLMH8S)cA}VSj*r9z0 zl>vFqbUAKP%X9+Z0(^COTr#+Ojn8%(QqZJzQ8LFdcjD|zuw5FQN?BXWTT&@+w+ch= z=oW#^Pr@{&RRZSKASL`tl8aHH=?nUfn?ZBg*AmBfTaB41>q}ZHm$NO0xpQKxwc2A|@Y(u-MD9WReO=M?cnk*GnlihbC3U=&6o`cYd}soCH%xP;oq zZMYm#9)RttrbfS6Hxe2DYWhNRyBboQU%h1rJgW zVfUG?cLm3EXE~)5k>JM%!ICe3s^QobP8_7oP;*CtzreSySe`l&NK$@J4wZ`iLF z&U~Yt#pzU5AqJaiUfrt4>!$JJ11Xy?_!!BRVoIPEbQra|j_3<`TA|OUp2w~?uD{h& zi_b%umSXQBCZ+SE8@Etp{;oG@&((LNjNSwBl_2Es;gmu72#Ta`|bwQVBlsz@2& z^7{kq3YS9uaJJKxzpnvc8+7HZ;De4NN0D`gpzJ$8KTR+qdym9(QLW-IeAkAuL!EGpb8# zF8TZlPS-MHL$DyAaF%z{VtKNWQ$xNWsrJ_IEHA?^`t?T;&AWxTq$W;;b#zEF6RFgn zEWMph;AJv1c&;U%Klvr=dC_5|uY< zboD*#?|3YT*J%XY@ls&@XjPFoJ^D+}%;2DaHrgstS)TLbWNbytb^f01o~cOxOp1Mu z)%%+Pg_Z)ewwTDU=r@U!wfo%NIEa&&bz1_qy;U(>NyDUK^XNSewip-B0nk@^*ul9C zZ<-hFFIM^%_##4n` z+|O23jUq%_jJxOfD|{jF=p{}nr>s(AI;+yAI(Z&$k+EGca8n8*YKDOOeh@8d!whkY z*uUZ0?D6`s>YG7^XOw(WK#TPlRG-Yz{0~D@bp!12 z%OGx0*2m7fe`zJ>H^)9i5;B=McoHA8$PCoQAey2PF`UH3aH1(o1rPNY76?U=a-w~TDA|J^y-aoah*TGd#NzBCTwxw4Q~i%fTXR4qxoV#A(4+cAH1QR*qd}8Q6$*f z%-fICqg^--pB&ajHC;oHhI`y!Qnq%Xos#gA8Y4w(!66|?-UIGw_#|pIoTfFa_Ydj( z)dc>5L;rcdPbL4Y<^GOO?M10b0@*NShRh( zigg1#RKfLEfKk- zEaB}fUt}MaGKN!*qM24xImpmW=0j{|a@@vq;Hf3q5KOrgE= zo6TL9vKs0yff_o1g>}%<-=gXaYrKOv|3^UC%GM4kJRzFet1$@jhFo&)ea){JirS5*ef9o3M6S1o!~2)GbE#q&F={rYldd6c z*V99BuW@0Q3g4y*_t{I8V*4-AreaFUfQL-{+)9hIQJlo-s2NEPnWwA1_g9uP0#O;=G+qLHVTyCRp`b>lT3w7zP>qhzjEh(() z>L9kQ9E9Ro{eJ=k%0S)_*a0d1%W04U|3_vY;{Z=c|9R17fPa}dx^>?o#}A4w5v8cK z>7rHmpRnB@UW5K_+P}k!8mNqaKX=}<{_vaA{=C%0XjC;~nU?L}2sd|4q{X|R^^|y@ z_sz2#k(VOlUec+(2uB;kt2P6ptng0PkX&nZ6N>vLXEK5aIoGWOJ{Y{ZWiOgPp*xr< z?d4=i;tgdHXnI$qh4G&DZs{*rj#+JdB0eRC-87q)9Yc_MQDqeEs|3*_KEy@h9!ulm z%3N@l+X>7%U5xa0(%YW>f{*%J)9(!2hPH(Zt*N0AyYy+I^N)d}l(lp`lpDB=#FT{hJWNdLg)~;jDups{D>E=zdNyy_DZ{oL( zAZ;|m$-*H;9|EZU8aSE-?8&tW{XlX-_LU5p#SYBsrrdo6CC=m!4Or?&A|^( zgl8gj;LY+)1_Mp)nBd!O>8@Y`S(}4IbdYZsIC8e{O5;?l=0$H^FbUa)WaNm|8AU7a?flRwN z%;`kS8{X4XjSQtI#bTO+!mnfC+VV$Nr`QfJ89g6JaZHnRF z;to#0J2R8m0mY^^NRt$Mk&Y850O{14*FLd%ok(hMslShDF(x;&Q!;?a=?_zzf1zYh;+5Xn3w}jN+d`m)WjVAM zH_l7j7#yKNzY>zQ28+NHpsADG0Z#f%fe&v|5+S!jpJGZ$fg;)|VD-_}a=h0DGLmdU z!ZxkbO=8tcJV^I4|0#j$IB<>#Z@@N9exB%@^x=ds6e4$Bv}`?K9_c2vK>I)h%u*Vw zj)2&&ua8S-ZFn7RMat3M!#z&YWcxKJ$Day#?PGFP@49m`@YGtm*@ySy%LZ~M5?tp* zjctB|bfb&K~(@8xpm3~^CQ2UE;hR9GT0evqOXaayBvPvwq+QC2j47qZy;d!g2 z$_8L7-fS72|uBex2_Ltf{vY_$wfn;_CPDBXhIPV7(WnB zmZc^+-Gw4_m#NK=O&T~paCn)eg3%h9Kn$ozA!m}aH@pksjZi$11fM0*QX$i|NoPn? zA=-42%vZq>j#p^h5djy&cfJ6-v@Rlya`7dmn~1FeH>ugHs7cb-OKgFdX0QY71De5_ z2Vj!R>t&q63UZSpX`0y36%ZZL=(Rq7E zpvrqfLe_a%GGLzXAtv~X$h1*_ok6XS(IKnAE)FJx6Bc&_7cc{7rUoBQoo+pU^2RJr zS#&o-8M}FzcA;ldGp(bBAROp5g6PFDrwdRpB0XCD&%@ zM%4swCjJI_#}5I_+Nou3Qk}lBtG)&MBdG3E1 z)?m3RX<&UtA2Z*V&LGxhq*tylZ5NVToIjb^t(yeDCf*b8OS*mCIwk~=Ks98Wk*r1) z$9x~|eAKAHXwfvLiuIRtZh#xj*>H~>f9t$y*~Yug-Zd>q8f`D${ln`BpY%|1>{9;r zqbX!0)d@;hqz7x9I_>m|ki}+p_t#HvLHD10s;TpW>pnh0buY#MF@d8@|1b%brVfMVVSJ8m&@G}*MgH8A7nfmf`p@4tUETIAes z&@!hIV`az!n~t3-?n=|oqV~B-V9x*oPPBQ&`x0366$g@~xMskMC8MLvR`$C8#I-%zlTcWaEGy$f&<8t$PNH_wnd zk~ZZi_Oqj^cc$7fMqJDLpS*qTnR)xz@_C7K{$f0eT{8!wBjuZ2TiR42tWdNi)f@7y z-u}DFd6;vlBlXbI!C z@q}B?R$)uw8WRAK-JUi}1!+-x1~>)8#6de8`A2BF=RmrLhug{CaVcX;4p-g%W#~mF zdsDI|@cRQNK#0&lihErlKdt_WJKKriUDjOhe-0a%0y=iPpmfil5bwO6wu{PLtQY|8 z&kq;Rn=MOuEmq;--zKUE%YIUXEsKWd?(e*ryUJ=n<)Sk={|1h2 z3)!$x6aaSY>`KjU0lZAgpFpMq&4@^U$> zYkJ#s)T|p#h|mJ0UOzq4>fbkcJNRZlA*HPX|DeW5tUtgu8kSE;yfCGh-GUE7x~t~< z?_Oy^Vrj2Tb~=4MnrVDnNNSR+VdM~4ETN%QYv}|O18su`c7jG#WGyHJ|an*<+jnT3X%27Zvw?uA&blr#vq zc=wImb(Y!Bwky|?abf#Ynm~TcGmTDQ*4cM%H&M7M^X9^-S$5J|4-ik&@8nr@6@yYb ztLUSB1kAP71qSx(vT9t`yk_x3>?Dg4Uy#>JB62r$)MUWCE5~Ds*bTr*yp{_)%IiGS082;6L1r70S(I$77o zL!MIUc!0q04_`8vr7Vd?$~3(4ed((A05_RC9XWXpo~ki5Ow5>;H6vX9?YQf$zY6~f zC3*bLA04m;pcNO8CdzFO@a97a5_Gj!#a)CX&VYYuh3o)Jl}j+OM?h~9gnL%aCS10l zyprJ)%byUNd8;r8wC9umWS*`>>@SFIz;hF++^TBWB4nkf^GN7k0z)iyo+xDtLUcvv zsYz%b<1$%T#GpjM(@@OTp(MJJV0Q!JGwIS~yowFqt|y}gVmnZ`p}704HRR7m3wTOf zmlyG1nWB0N?_4JWwfLaZE-KiXnmiK&{L49N)5PBNsm3MqyLzJplAtY;l>ixZQLc>VHvhtv2(L&qhM<@t-4#8kYY;MSVJQt-nWoC# z*nxbyCTcun_O&FbDmdzXy5F-Z2MUvmcc5&`+{P;qB3wmNfs&j(F3+~`^nl?uv)}8G zV)~C%`d6h$@Sb2EXrCAIf8TdD#2*aALG{qjR|YlcKp!$r*ggA$g3>GS^q`IoJ*7gX zsRaWNF0>_YQ|(`+T+5<|bo>%(kQv0eDi5jM$b8qnRampyof_$IuVfEA5!tBL3kK;a zKccoXDQnlbo03tBrQgf*hCcvd!m9{U`~0)h+@v(|m+`Hk0&jnm{!Uw$;xH;+jEj_^ z-tleC>^6i+O}6Qfn_Vgi+S5TWQvS%YhT8iht=poVR!JKfRdIT}C&{P}{(aN_DImlb zFFinF`l#7|1@;5HJE&j^W|7F>BN@HHo+mH{A3>m?>Aw6l5kT0LT zLA2OJ7VN+O8xWqYTF1^NQP0JekM(Xu%0{zvH-^)gw%*tW&H+QTkkx=z_$)FHi`LEs z%~rwZOhs>g4=Bi6OT+eY@T3=13375w1d%fyW;+o+qjI)3MfCuIU16sELZuPwc7gr! z3MUAs(e1I{VR+@VOc*6B{}kb;7*@uOpKLZ&sXOZ)rmWVGh371jsH*+-!y5A3|v9f`xYxE-i|xmJiYc?^X}{NR`Q- z8<3TgASM5rmZG;ZjT2eQ&tcSEZ~4VQX37oqv;cJA{P<&VUHgT9|{PHf{M8cj8Zb!dr*) zUYo<^0gVXl8mm+1;l{1_@_-?jDQG+`+c_2Z-C`H$`rGK^X{e6SPer&nQz%h%&(Fcq z9&g*0u?z(5r7FO@zB|GPVU2y0iO-hBplmRTnq?y0;e*2R^bk*H6_mdrHyqf3CnfWD zwnMR;e5jw^5<`8Wc7Uo%A@`g0k3NDuU2%W-NGa%da2iYTP&1h0qMhuYU_Jej%(%<$ z!OO{l9agN{rbwO;ty?!ml;-Xd={`0Kw)dH@a}yh|yS*jYl7Ok^NI>NtG5 z&Uk#3qD;$5eWR-;RhE(K($U=cOX&w{hTQz*KH8TxY(Qi(- zwen8)*i;jUpHYZzS1M5m`+pdF52&Wnu5B1ADN#`AL_tJE zKstdG%ODmYQbQ4<(xpU@A}vwrUAolJ0)!Sw2$23CW}bOp=l$0ItXcPwm37Pla^Gj~ zeeG*sdy_A{dX(L~_vzF%HlTb1LcJVgREjHIAed;2OG?F#0R2k#gj6BWtYox6S)n}a zZGVjh^6M!6h9>}i*Srt?T7v>MQM~NyrikQ8tUqAUlDa@^V429ypJr`|JlwX>4dQK5 zW|>Uq9tlsN3nH+c{Tb!xMF=}=6;578&r6ze54N&EU0vwarNS6rN#HYj&8LwrI%OiU=g`uOy@l&9vg zl)zcV&JfR|j4maDcD+2s^4`Px{Cche+s&Jwf~x(58}G0{uHWZf==Y&Tu$0cNX7A4)5f4}$e&q?bMIiQLMl4^w^W25c=XBNOpQBG*n8{FIk z`MU6%9?yAu2h?xE!Kfb51(59PVgw-Dq`_wpuMF7B>UI)I)F^hfDrT@U;H5hEh$g7uo}F zZ2`#8R$;BqK0xp_G`A*}Xxi*^Qvmfk%5O2CR*A}Z3EtrupD%M4gN(PaLvlc*D2(u> zblYXdV%|7-GR5PpQ%Rw{PzyHI@MWTx5tAX^#GR;`va}hkid&ZI&D2{1ly4H6{SB1+ z4ojNx0q1j`NGP*AYBdn=u4as7o?0m~M%&VeJWqs?tq|JoKRNV9y zug1E4207+XiB6}Uk9Tf`0_lP|Jjt7)fOY6=H4zk{?rLvE-jDVe0774BZPY}Se*$Xa z@FpOq;Yl1rgsy9pDGw<<#SQ3({emWdRCbp6(hHQqGk~xsNnHP+kI>Rmu!m#xlNE~S6*`zXQE?=|^6Uk2j&2z^* zxb!HfuYN&xNDkp_?kdRpHmV~(45`%XQz>}qbP`Je09yx#h8@51&ZEB?jjY&ZzkH?Q zTmzog#N5&WgP7GFZremg-pysEczx3y`wdW?0lTLNx^%DeT%)!j1m()^n*RXg4$Un4 z33XU+&K)VI^2;-CM2WK*+mnt`Ad6}}a%)v5bE)#PN7?mI4Yq*W@?=>aQ=)z9r}Xe`# zHSLUWFD5{|9m<~GG|#|}Y8#U1UHLsrA&zEXaKX{uD^~VCf9SQjFy=qQN&E;p;sBul zcCmcI63_(caTLu_ishKPqiNxFOIgnpDT)reH6u_;6^iFdnyu??G+4)?E|7kfp20T| z#UV4&&-57A0%vdRYixa1F`r&|=WaASo)pPaXmAFSg_zj{zlMyK{D{(6_)z`0WtV!g zPb8{t@ED;O*xx-2(@6NC!q_&+Jj(Jlwkxkqo}d=(n!p?4kTJqh+~qbOd;WS4dcRC3 zpiB{!`I;X0;ZPqXicf46UV?SWm@4?b(3@)M7j`cI)aHTa>O6kQ^nt+5vTW>OHFE)l zJw{&VvD;+Ud2CRdUFSN*07yDOJY~hdXp>yI51pO1u=%;Dh#HCekR&=lqc zYC_&OyyH_ zg2f{}R9m2T0gyDI`z2clAv`*{|7#=o>i`Pg~H z?|T~JoC+AsLR1@vFQE}Wt0UuY=YfpQheNz|E()}uYu~2NuourW)-`qBDL%67aKo8E zDQCNTC}e|CgTzZ9M>Z{i&hqKW*7OozDU~Sy_Akgb>z%?y5X)5$t1qneo399r;S*Nl zzJvx80_xR;z4IzAg0`oZ*Re?e;Ln@YG`Sy`{#YK-PNvOfruOu$%Mgayip9}af2;1w z`vALX(iHv&yR@On*iND>P>7~erE4%3#?Ig;2{j!J0ER;%zYIsJOYLC1&} zY@uK47!5ul_$sRwn>8NJ$UM|EnFV?o_;P6xIWaUPRP6OpA*g$+fTUdey22Q}t2Qw9 zTAIQr-Ln3XecrQz!sIGN5Xqni8a^A4ItxhjPyrJe+rtobY(L-32HLyrTV9D@w`U=w?!z9 z;y~%wY}Di{RAZ=qBjFWnf)hhO7()+ebZ(A#yUDjvw8V4RmE9;^cOAm7r$@mPQ|Ihv zp*Kk0+BnqYsC2!&c}439VGbumZ~DUoh0apI7K5jESiVWVi%p+YVF@H`P+%??$aJ*C z{wY$~()>rI7ZK(LcrPh>aq9kENd{aXVC zBUREIzW*RVQX{5DlSL8CW&iD+yRo%{s{&Th@mQ5Gh7_W7mQ|(MNC*Nm-zAm)@W2Z^ zU%vJ0zkHC|X(8pxo@ME7MZKAYJ@;PXoeIVkNAxgiyeCR~*sP~{%)9=TM-j2K%)_(z zJIG!w(p|GUGbvh~BlJ{ch|k0!fEwE4__Zk{$(t7V_i_r3^McaW@(W&RouaU@gjSWn{PXap~E9TU$3vVrcLPVCEFI^4A+7JAn&Nk5m_a`H%ZRlU8*b8Uf9FEo4P&@16XZ9r@Ken z)BkkP{EwpY%)kb+N~q_tDQeXk|B|xm1OD_+AQ3W{2%`0AA7q+6ul2Fur3@#Y*lW)W zH_-`)aWfTW>TjT{VX_}6hO?{S;FI3ccv26J{kbs%T%6ps)SKm%6N0ZRioiQ3eV1<+ z_U{$@qBJ45qrMr?98JM7cH&_0Q~c!X)nK#dSk!gWU{;_FyquBqxdKjlwVlj}7_H41 zX1_r+Wr$zoD^iN)BjJhS44G$VPq!*kSn8nrDiqHi#;8nKHHl?TM0GIhVLeDHZWd|? z`FXCq$3x%p)bqG68jai@tQ8~PoPl564Pf^V5^r=81Ty!qfQ;qa7l1@!>a7>cKb4xT z`1gdYyZVPmeIf*!=;&Jh2g@fes%`4Loi=O(FXK6zoS#_X8j-DowtGN<&9qB#TY$6%t}_3 zu{gN|%Wxia3SfHkRKmo*6h~F)sv(YFVu*z9d9Qdv%(plU{MeUqO_N~>YqUIpW0`kf z2dNr!y<+lX+w>}?!=xJ*Ps@s@@;qA$+W{xTk#kicKtjhYQy0%$$N`z=ogIxCt${t@ ztv%*`tzGT-{MsF+`gaL-vl-!@(yy0~@?-!g(;Pfi!KnE|&|Fufdz{sP7?uhMT~`o7 zR~u6gIu8ry$y+}EsStH8&ghSBrTpod!H&=WQqLa~r~+=c185_#cE~ayL-%7<1|mvpV}hzuXpzmkL`7)3--H zq=GT($&7#M6Q}0TcC>J{3`kHdpU!7aO=NisP5Lyag_ougYavjbzov><_Bny? z0u?kJEN-BN*Cqwj=(SfGgyfPnFaR}mg+WWD4Dtcxb)s~A)qT+eZXQCfH(O0}g_S}< z?qA#aQu`I~w!cMMugF^a?*aOn^_D82X`zHWf20kxx)2~-OkEQdbWW)Ekhr*>s4=6Z zce=}W9@4Q#s!D+zoi~l`LqNE5Q9{O<);w-TD6q@nM&-;K5Z_%+>}YtO-uy7ujw1Y{ z%`-y$TeKL*>umKPs4xV=NJ3i*<(XY+h^rRtJ>2{Mei;o6nM@#;9IenqC)<|IAb zMSUJgy6!MF&8nDy9;GNyFaSLr0!aZdlIleIZDp>KIRs$#L#HJ3@M@XfZ(Q%A?@zhjI4s*?^vH%@+Uo7 z*EZk@Dh(NgE-1|WIYc5L^vm^=ezj7!@xa804WLJV4eRKms0|;Q&(tVnIVY&Lgt(k88UliYe&wLE=tK#>*4yqR+kS$88YUj>5IBsy`N1CDNsmxgaT&&F@&^~ zggw=`Pu^-G*MbBbY6_~u75+46NTKodrblK^SeH)u12R-R-ZTmPJEs4zJts4|>)RCh z=sUuAMELJ_D;b6{VDPwZk0Qvv-p_0*6%`=qjIwPC(sov6#S_5`NIXfdg z8oU33zVGs(sZ;ymw$S;;<4)4Ous)W$MQ!kXyoc?xIBnUA@CGd)`pdelcn*5@`U2fh zfSqci)7vN5pw2cURuBFjO|w3rrY2rwKi1xsw=Eq{!=4tbkzNFaMXlCAXX66#e8Tg- zjs*NtrSOXE1qgHGJIkokfFO|(LQZHwETr#zN`M((VL_!GKL%C>jzr-F%buZ1LDlf2 z`P4iD4^LEi10t;fKe3qAw3JU(NZXFA9V<7O-ml`n z*iH{uXH<<_hQsXEg`R)4yZj|;`rledb!=^D^(#j`E1)HEZN2RAb0LfdTQ7WctvBBS z9oXS1FzkjyS>X27sdI!do*f$#WW3c@ZOBhrCXfMj3$uq@KZsm4bYh1|iE+OAwW;*?0Dl zAq*Wb*)26(v(e)CeDCwxOZJI|LrK4Rk8jXQ-rbxPaIwqascEtf=bD0cEU!yfRq3eg z^0PLG;y!$ae^|%`gA+1Ha6FFJB@e?ijiWBJC+zAJ5wcu$S>F_%r}1QqTLhf<)}PGn z6u$Q0)l%3*(rP7{pG4>7fa6tdDHztxvKEOez=M&lX}9v?;>hUtu~F+>`kHKqNV(|Z z%)#|ZZtK@4@h5E1g)svBTix>biX+a=9z_dov4PN{R(-P||7t9uJ7nW{?w3Sz!mUT3 z-2vBbzQo>cp}&z6jCRT6^vd|6KZza-6%2DIyIIK9#7u->M$q&ipvw(-j`xBREiq1k zJh4&R-=>mj9LPy0`sYC5z74}RF_c8FViTaSXJ>!nv8?P&gUyQIB<;%L34++{aFDMt zwNn%*E;psVAr502@ok*=AVHS#l<~YO+mYZJ<^Qes-i4}*n?a{G;3dK~UIR~8NH&rr zk#!PRhoLHTqYtfh`S+QTn!bhE0j}&5GI{{v6vlkNos3HDVr#`RA`E2!A;sbkigwj_ zLdIOgn3XU+Yk}rpIcrB?Wsq2K!4ojQfWqSvP-6}7QLy)t#byMW+C7ihoa(sm@6G*d ziysMhkAM@`c2z(z+?C1FDZ&71W&pwx!1JX300zwcyUX^_W_J_(_fkp0&-pqHqRHw7 zL?A7VAp9yWC?c=zpe*j7ERBj|*Ay~dLa?i&!%Fy^_e%mL>JsTBav}G^qNhZ+ZeACW zP6kpCE^*k!j)Ik`OA~kOM6f4Sh(KKc3hFJ0h3opZ2A|c!a&xGFRA<6^Ubojih42&` zmhN+A|M~Rq5^|qTTiI_iLBxDJYb`r~y2Ds}T8XNJlPa2@Ag}w)4VWjJe3$Go>2uUe zL9Iz|BB2>p3Vd5|MK~FtnBc~33dU_VWOgE%U4k9Lt`$*E@fF4?->}vTH48xQ~nFBqq~*R48e@%h;k<|`N3%QqoP z-j+@NxvBMQn^jT5G&--9$X7wE*a+%hgGoNK-FU?CBA%QAOeFgCntgpv;wzC}?sD%x zcKz3*_g}s~8rm(X`jjkqB90mvz|wnBEhUwU-^DQr)9*WXJ#0@@n9p@$(= zrCVBDzO%#Cz?i2K!IavN+8TntB75nG`1O@b*=Gix(?p$K`0am=hl7MgkM$f8YcY4A zK&`6N8TBn(ztJBMl+1nx^9lhl-)lHCI5!o?qtZ38lg^k)XLK)ugCH*f^f{9}mNtc$ z9$Vdf^`B;^x#5ZGW6B>TUDCkl&3`p!cqCAMaT@S|vPps?YZM_&IKsuOS^!-($>^0n ztWHau(a4}VRaT{1<^~hk6WNn)yH>3#vvr2aXynJ$aOL^saVrWr>0>d!a%zTe5kQ0K zr=l3e5geu1csNtbtA|&5nPjDiQ#~u9CIOY9`+Th1~9wFv*w%kAO zr?Qfv{B!Xd(c#C|1|!{9TfYacH*dD33*l z3m52u1){KnvX&@(hPMxR-$XgQ{~vzi>y8WW#6~oyoz8auYCiw%^_LC5>8-5Iw;=dm zMFn*fRynqp5TDL%OP>m+jShd5$ZRl3_jV~=Ye~AbkR4dp?Ke|lpgT-fZ8cBY_kv!^=d3sU_x2Gi4d{?eE?=*ylp6OBG$;v*yW!d^s6rn*o!967drzLrh9PG>52D*-kr>jAPam`#yJ1RLU|sY z>_yzqz+|u5)nP&%%l!kC^F6 zovLB~kC}+Cn@NR#Pw2lklYaSAL$}bh7z+re2EhRH-#aHGCqZx~+CA{g&t{pM3mJhH zzUYwsvNI!ca2A2cWLUzbPN&)1&$Iv% zTo~JS`ttkC3^F5L!s$h+nV)G2iqnS=tcxqKVJ{yVka7elD!sG%3}reHU@jC%WekiHI`ta+r9t-Py`j813R>Vz3i=gmyQ1xGj1y-x+Nt!e{LM${cS0{ z1^)`JH)hR4u;@P&$Zxg5-FP%3`41m*?zchZ&1E8(&%+jYW@*wue89EM*llWk@)&G_p;5#y6baMtRSgI#^<9r)rW#?60WIZJH%_<_o z09wD)K#vp$jjMtBE3vcs16ebfJ4pHV?8Xa_`NsGH*eb5U94M(W%}9 z{KOhY!4~A^?e9dk7bM}&Fya)>ibH1)A&PzT20Vd|mI}wU57BUJJtkcqik#f8BwUGx zxg2(i=qKojqmT7RdsJqPLm^8jMhU;qgS$%N_@lcuhZCOPes=l)hLyeR_R_rClk>0b zrA+?OY!9k#8Ov^^2T*#^L%sZ97ZOxgpSS#Bv4?`K*D*t24;vpU*A@HA0_W$2# zY`r(T>wCE};ZR-#nGMD)N$_EvH=r8&U^s5orBuC1-||J!$F87|nDT)~Z!T zx|^=vpogz=({RkOG%zbvJA5|D4hhtkA@kgc^7QM1YK)ICZpCgDTgTEZ_V!&E{~3xz zyl9}n8B}&b&+Ux~sRi#ONoTlK<3!8|tw$cYG8uT@b1W55O}`iC|2)IR!P^3?2DTuDvE*GlJwv+7vjM|U&0_=* zdMYHWX$Fa_2t(?UAjfUxeKL$%V#KfbLo%zI!nF6 zrBk8-NOw4np8*UKV8(TPm2AapIQ1c<7CUO!!tcm1AZ#+v5j%HM*a_tjc<~kpR=94< z|4n2}F0P}FrQEYq|HVc8NEf9F>I&4sM1!+6%h z38#8)E+eQ8@TTd&FGKC|+)i&Yo8sHhY5f{!-CWTAv5j_&Eb~0{h?CybHXJ&l#o&-H zccOE05cn*YG5yh=CG43!e^9^4w77xXKern5bSBOp$R zVD8LbRSnV^{Xs+OkrVzFhNamvH8&Q3xw1XnT=SJ_2Tk9>zBK4XWW}lLfXqAfcCttboVW{QE{1j$e6rUTmw@~&^ zH|;vp_!Rgnhnv>Q&xPPbA5rhvi9o`2_v6C!N!R+7v-M5@rF5zA*V_a98!}8GNMI-- zlz-ns7J2ttI*u_9KZK6MxxOt(RLGbzC$E+Z8#S@*66p5c!34pj+Dq*xg==-1VBtKd zzhccFbC(&bkUXfzo`_1UbB99g-cRl1pGl$-!^jMVQ6khJ?*(Qpn(cTCl<|Qz=eyGQ3O&Eawcmau`W3Pb#sA8tls~-+R*NmXWY#S)|S)y>t85`g|ORLi;Ap|;j zbC>Egagf@RN%m*fDjAKFF;j@Qg7IxcHvzSTpWYHgS#e5i<5p+KQ!eFx_Wae6tI7hN z3!#@DCixGC_N#OIzppA0BvPgo*YzgtEA7I@h>)=hNsNac>@*gSEQEG?3??hH!jAF+1(+udWShtPV(~R$_P2b`QQ(uo7ymxNiKn%+`=TRjZK=s zp_RyqcAHL+Ghym88f~83#Cf;vvA=zgFY`N5uLL=RPyWek^~ZEiHbKX|ru=uiJ`DZU zp*9%+9vC0uCjW0y?782JC2j*$I&)k|!3lp5v2>3$&Ndv*v`wsYT*exFClDb~Ur#Sv z+z!T}OOzteb&n09B0GaN3X`iq{TVYOq76>TZcBrrij+vc8R3k*N zqg(-FvQ)?iyA88fN<8cd0*A8~ij77$s;mF(`Ba#trzuNCVA(M(>Y$)|%yc3rp(T+t zMtRKsPNRwoJrX6bW4apjz}1Y0?n4+KrjB`EtE*{4tJYxdpy1{*?Z}#ZXYec@F$6$b z@+ZJ23lkF+hWSCNDEIAam2IfrNicRzSJMOCJD`CxS@TrD>cWmASND9uPrH<}>h(%s z=}3|u{}Kx;h#(B1SmlDRlP4+cAg~i=$N#X@0J?a@Uw6kWEUe|!zoT;wZ+6$&2<3MQ z=jxzzF>DJczGulC$U#IxzDNbGMowS9DuX{=D!e+wA5bb+88AJBtb4azO%`7c;On)* z20-pyw-3221&}wc`munLivTn@Da6XN!&7XX%={`B&vj|n#5f{u!a7|7lh zx$v&uz%gELGm#(gez^qr<2OLtlORS!qFx3cSUZ|_g1|^{j)otq{y9ObBj0#j#|~vA z?WF}ibUGbA-x{LL_-c^o?We~cK2uaV?hN6~QBbU#>7E{dRdUH1AYm)8!Be^v?e|_m zWfdrAZe3x?_l)?#GIf5-1Mm&_2YW(#EhYb6?0``Vk2-Hbe~6ihCk&##(}n(;aJxms zMywO3iPDB$9MGg=+H4eV$i}PQf@2MXxE5`6ffK`KuQHJm{Mr!iO=UE%5Z&MsU)ctu ziM{p%s0jj(H<{INZwSM!5v0w70#<~Bs5&@`J83@5bm?3^&Re6n))SUWgZ82@hI?<7 z6ccaFrPEBkCx}mk-$MvPyl-uSRZVg(c{9YZdwrn#f3AS~UBI~-tbDg||F>b*R&68C zp0hGPkf@37=p?)B;YZL$!H*3F;VglQrdo+6n4TUjXSP;hZj?N=u%*?Fdt-3;Nig2I z%&_zronodrOpXcJCu_*AzwkU2RU1q>%|{;Qn8D-qQc-{!YItH)hN|^kZ~2*Y6r}N| zhAmb655(D}BO<%|Hcm<_>w*!l-igiqcA}!t;Bn*HQ!$WRxZ_nBx5mT*8?(GDp5yQ1 zfc)<2%!kKM zU+mkWt7w_|d}b*Vc5TCxbAekTcXeb?^PGiDK@L0KFn-VJ25wThb1o~Fn8Tlg+D0Lr z+x(DMGp0n~GYx!>eipgPD`>l$Ai>voiTrhFqZ*VSRk@nfgGEQEDU|1!rM zr@x)RnPN@97gX=}YJOOqp|>C>@g^$6y15&HKKlUf+AW`~uex$K=cSeF<*MHA0a|6A z-$tdIi+U>d?D1qjoBB3!S@w8b^~~tDJcx8P&7jIw|7EYOvs3QpPi=Z_CQTOcvR^o} z4`cY(?Hp&a1Z&gJvY_58q8YBsIWFq5*6kk#99&!6mRg{p?}cptWn#98UF0ck-xI?N zNmu308Aeja_MMDeJa|mqVbUQXmUd}0t;9A%DEY4F_@lliF^BeI-P#fPa4Tk2VO0KH z7O47DExGz@zg!J_O@8C{GgB?pl7|v7WsQK{T1RFX*o|7)f-#j5+8cm(+y`c%owxs7 z`1zgE4c62TGT|YbD315->;hkFeqX3o43qw}MJ=Em6kdA%OE+HQW5?+47+QmBpv#?# zv^JZu`dnPoUOmnKIkgRYe~SEODMH$ycbD?v-<{gyZ56efIjQ)ioq31KjC5+NeN+r3 z9AMG-)64ny?MfHD_jk1PM3kN>Y>t6f^tf0j%fCHkC^Jvqr-D@3djtmpn66Sx3}tGb~6|mw0KgpP{V}3`EsR|-gG4!^9sS{@w7kd{L^wjO1@I@$y^1+wfMS zV~Z%c4?kV^zkny6Rez3N7|fI^Kf61rI2Nx^Jq9C7+qlP9Q(mOnPy{CDedts{jg^*- zkz9K0mxF3Sgo~fPJWKtQXFBC-_>tveE>ZJN2my1tDoLHr@=K+`ZPiY2TWJGWm~m0I z`TU-3!`H&qQYC_(op?#Jp?UW3vKY4(eKe{e-7c+bjA)6mXibz{ZMVBk*OJ8Fwgw#E zlO502&8^mZ#qQsm+ttG_!LA{_WN^|Qhq411V)2f04b79k$(4H5II0e+rbgs0z51q* zBFmQKzOY-`U6o+{>bl2#6C9H#Y~g0)M(U}DA%%_BG5o^xV$O}pPsdI3LnTujitaUY zKQDMTiMMyQOxGN{Z7uek$4*dJ3fHc+K5R85j@LgtHh$q+Zf{9;-sSG@GOsS=KK#`f z(7}AkAS5=>dufCGW&W|bs<#jKWQ= zjjYV9S9nC6L{RsF1UFRYi?^tE>@OB|j(GI;h5#b!A*Aq^yZ_ZqE}z)gO=~GOn3?r6 z4M~nv-8>@s{qi!=7I2PJ3ASz*6LODS8FV81l!PAhbg@#ls#dxsHgfdAt#>eg)(m+jNc3P)b_OP5Y7a*u-P{d`DHLR)AvO8=k!CfeX7J862Bog zn_-6ZQbt^k!hS>(h#TtDtQ#F$Y7Fi)oA6&c<)Laxv?DNIpY(|n#+5a1&^0G-xw0%k zzrTS=ABUpjEmoX!6I`q(j);IXU1ye;UR>016(f?)Ja0>oJ!@cA+U0b~?5f4m12^l# zmrZLeHdC5kAxBL+W@nD(s183cdEgakbMYpubL^6u$LHQl^Gg}W;8Si5WRldOZsQk% zXQIci`_4Rx(~WU;amm0kB>21Yypu0hvJP~#UnPwRB7dv6vlJQd-eo|ta9k=0YTH;b zljTv9N{V{LEK1F=tM7Q75o4K!o%OtbpF4>4J|fA))%z`vl9H%&q*b>8^uJ zb!VK%gNH}c%{Ayx&BuKC+)K-|gtF9FTiS1DzQ3|sDxP<^j#6S@buDbVY3LNDT)xXj zVaaPLefD{6Tt3QbyRd_*^od!#I2z^9WYS3(A{pWc!vedvC-+v6KVl!ix9>W8dUT%J zP1`XLe5~4XzIe=p7Q5bYibPI8d4G8&FgcUws%#}KZk zC)|H{)4cL1<6bme|0VT@aTpuzja#l}Zm+~Z!K zjiqG18*vWb0Gn!-TlyA3(3-SeYxuS~R&N_|V3w#e)0QB8`9Ws#gU`3H)YD!{$4#0% znCS;R_VwzkO@fLGmA#g-@e4%-P~=*qgKlk0Jj5I2t*)Z$3{FPf4efVm@;SA+p|E#% zY0Me;_lXO4RiFbd*}nG&_9<*!?6HZ5xIGB{GL~Mf=K3WN$s5h5-l{UXwkIO;@V#Sv z8=Rf=`yzbnt6H5Qr#+5)yY`qLZ++cAUY^#&e!UzkiJ=Ya?jsl7z{5Nw{Qk)^M|@ z_k`-|bqkISb);%J-D7eFF3!o8(C&~Qj~Z17*$wsPWETe(^yrz0Rn=X>)P12nfwxarW!qPn z-%Sw=<&Ik5;G$1t7wE}Zg^^vk3ORF#hxtiX`$Z?NFOQNsD&CQgr0Z!yANZ5CU)wTi z&a&FdGbR0nnKmzc%?`C%zRfPOZC7W3Jx7(Ab6dL#LwaYXrE@kR$qt1X?5Se zfu$-~BnrwTsGlYu%CHp3b)mJc1DnmnFFNn~Z9^mf>&7zKx98ON;0_-g-*A;i6n!6v zl8j>>cOT0PrlQX{!@V7rKP{RY@Z-JPqXICTC)$wpqs9p&`K)h8O{Z?-4g%=#EdPZ$ z*5P@&Yct^V!aN>y5fUe?3=*-US@}pIhIWHynfXTSnAd~yr?Jw~)vqNMZRJdtoVYxlxxzlwM! zq3aU-LVpKpwBhKz&U@X}Z<6v9kLYr#gXE-rEs5zN!zBn$Nb4<>&a0=yW&AtR#N_b~ z``K%IUSwPfENjl@-heq)F{ag>FQHg&7Je)DTh;%z5Wr@pgMr{g4;F8MY5a2c|23xn zz4OHW^1CuPLGpBtAKqs!i)I~}_uS`wUbOw$mj}hN?jQWU1-1#;_Uo})( zm0fsQtm$n)pu@CBHz7iwdR6!uV!=VM9Ga)Pdf1GEGlnXxJA?#DU#fxzu}S;XN`nP@ z$k_=nv`)wLN&TL~Cyl}HrYEhusjeH07QXMRda7>>p*GZ!s(YJRBYkykWd&HOwZ3F& zfMxaVj~N2%&mrRS_Gi1mtJxrVZEM#&+pw7ND_;i|)ug?Sx5s)ra&Q*|2mBMfRAnD|_MADu*Opp+qY+@F zQ>Q$1E_=IP?(WB6y9%w^v*BTTi)Z`UX1>3g-8t|PAYOq3Eg>I&F~M zev7L*da}B6Ki?C-Q|4y(v86!IynQw?0>_(!`(7W-@3xRvn3K!?(@fm=+Lh^?-j+O zUt2hjU#+|P)FYHw(Nb1%*)|OPvM{49d4Cne-+fuC+;?<#4j;Q^uS0u^MBQ|IQP!i6 zgw0bI`k#KX;di1gwIfLT>h$-)t{!o{Y)iXJKZR?EvJd~}A-J%d6@+%i-I~x}WvF|y zqY&ZmZNjgx%&Dm&u#O$l+n8dem(G~cmk;&`;1J4)YLa#|RlTK+S1m5I;apYrEKQGxvcb= zk*Y4ZZ_&MK1+wfu*A+{nc0xK;Yh}@q^GFR}uS+LdzcoR>=(bv-HFEbFxDA`;1y;+6 zfOLcUL!m{B{WR5|V~NBtIk>*;rUy~=IztPujuzxyc>nfB=do>C_SQ%8ObrrZd-mum zD2y$oKD>OtaxM)&PMsH?d@hYKmM~>qo#_zT?q!)^!=CukVp(-By&vh+ju|}|JRt)1 z({eX6v+zEi?n3-&I-3Sod4=Zymi{nE`Mq5+2nujjDQvo0fTV|#htk?HDSw(v+RQa& zj)b#m_Jz3Nz~nPvpHWp_p8y7mW`OVN!tGi7aHlhwDInLoexaf0=7-nggl?pDwl z(3oi}yoE_P5cE;SBzLT@je9e%uPIE>^>L2qtrUCK8WC#0T+>D1H}>nud+LxK3N88w zKV{X<0)q4`MOLZy`HryB>ZG?PrgxT^ z_pHsC=TE1*I(!!JKYa8ki)<|C`OW)WJQ(Xf9V2yca_n-ztnVxE{84x(Bd*j3*@YQf z%j^p*H%-boorM%cN%((bM}98NSNk}X^CG2~|FD8o9Mp6SRHRs4jL4(wH+r ze`W#{TLJaX^|c?8Pg$Y0u@}`G=C0ddY8YD=+r95KbIiT>ob~UH)qmu#%mJFSUiXGw z^?0u;lOJ&1SLdo+j_Li6w?^PFBkZDBuJ7=^OX_1YQk@RpAL$`>iY3!iJH{A)Tg z++VaihA8Yozbd&e;UPcuCOA!ywkc!(3oYmDY@MV-Oa9(Q#%OnUfGN(LE~&9kD|F}R zV0x04K2PQ0IQfZ}ObACe!cy%&rECy2^w2==01i(__yTqA-yYsHYqK>)gaj*#0ANeB>Y0yWxsC^a zANsgC!CD?Q5!n+Pan_Sz7?o|ywrawsUqac#IS7}BSt)A(fw96+Q)yz=zkjYw2ZQ9# zp6b4i)vCv@_M%;IvO1!^XNYq|NVQM4=bPlyL((i-m5JKSBomm{JE44Sp1Lbr^t-La zPMo&5!AP_Lx;5A#p>#XwY{NI58Mt&&y+W*ZdQi6x9fvbwo$U>|$ev?veY8-@*z}Gw z1Lw=p4r&74v)snoC$XV(i;druheNvz`IU+W<;X`)TFRr}uf1ET-G#{z8U%!4;`0ni zZ;Ly7pHtP`CYL1(=^>6kM8%cAmvfsK4JEY&Q<&W;uwIz24yeQ~W^;G&i?W-%mWbD# z55Av|TGKt4=+GF=R=Yj;zTIQ_{1CeE!!SKVsDsgE#k#`dP+yWyWdc8R68zT{s99pparJhl5DsrQaI>qPO0!KzB)f5nym>terJAHNo} zIn=<&Lxd1*4K|hNxU5>3Gi@W~)SQNhxl-}wLh)8b7`ytT>}kUlsr;*acM>oRR{pwE zF4_eX(YLxiD6J-zX&?~6`bk*MsF#+xXNd$(M;fZusmW7}6cO?5-SM+qZ3SvNL}tbX~7 z=B59Swf6vOa^KoV0a0|TAfi$PBBJ7!CemA?qM#x~LbfO}?L_~TC zRivXNAiekA2|a{BNJ#j_rJVS1Eo9=f*4MEv;pS7)A*zQD5NqWa+T+sTdqYdfcubs+?TGrcSHWi|pCiIo z6smGG62%f<@#WrfW}nY_y`i2P!lSP?{{AM(>eME7yT%DO;7H-w>S(m+`;%S#sQeR^ zC~KU@b^ht?e?}#JmK=xqWkO?%o)C3qt4=gW%VHP7y>gG&Cj?ZjA3v+!nKMW%MlY31 zTb3(a(2qMofyaUL!hT5g=k@mV+;DWX3>B2WU>_0giYm@pJjaFyy_uj4{#129M-;Mi zIa(AX1>;~_?`Z`cl~;gLiEo#qPhM#(e!FU9W@`QQ^QiRah&y)>c|;>;?OrE9)~N}8 z^gxE(C9pICa5Jm+JfJid&1heZ{XFxeE@l*K9oc*_s%PTm?b3MeftAGU7zpC<8GLRXFEaq2$0&K~=# zPib(y2UL>z)2!^S;o=?aVppoJ^|iXfg}uJ*8+%^MCs3thc?|A?_jiE&me6`t9-X?J zfE2We(UFC52z_gb&j`gQbYuK>veG8JOeLu8@Jv;w?ZB2~<`Bx9&x!@z z-Pz%qa+cjy&3dyHgno74gfr)wVO@&(I|Wi}=hsRxp{^aXQ%d#fN<+Vom5|#C^j3yc z;oGB`l7D8O-Ie{1-edyR3ZJr2d5OdZ?gx3jtCeBup#dQ5^hRWWZTKs ztl~mi=a;$izNW9mquPe?A!fY6h9PQQ-FGzf^g=a54dP6#%Q8~Yc4jeC?lP`1y0-BR z+5AC^xcNz#X4rBz1We=`7Ue>2p3`yDK7zr<2yNbQ>7ARC8#UqPfVdFy+eP2VZcpUYYCUl;T+Qo26%R&R|eXu%iLh=0iAt#Tzg+R5aweJixRT7;CmLeAX0u~In=}w;u>8TfF zkQZ2#u4y@+&Oc(RpZm5r$DJmfpOE{s_rrVit+aK^+gwD&Bj->TEqFX7mzAi}^{0({ z=*T;8k8{En=jAlwwpO*jZ*enXwx)&|KH!}arXJ=)o+1`doGPLy826PDa+=8a11m4j z?-cKeWG=*Dm(9(fR;6M0k|n37WmpLLhQ{W)mKLV9E0=MhOS%kvbZ z+fyTn(IH0U^h-8J@m9UzJP}`v6;BS2-8zzH;FjAs2?R4KW>4*TeGx6ahH>V-kIw0c z+xDpG!EKtv--NJ2ugrGo*mi@<7NIyNWyQs<@0ky|d9TSUryKZfo;)+RToi>>VSj?< zB8WOS8VfT}-H~<8OUKeJh==TlF7*f8Oln91c#H#RI%0Ef%5h{7nzOhB{-BGQD#4`@ zQ61*YS;V<;p=DAe+0Jb9^xOJQ*_H$p52On5XEyF9A;;uYI>An3c#cb-k~VvQeh9Bz z|32WghH6?;Oa$gi@4n`T2OgFwzev-$Fjz6R)An^keZ04@&PA&!k+Ms1sW-K)=YxU= z#dwss!Rxgu)5YB>a0rY3>@UCPe+j)m(GCm1-Cz*gr{6crhD1Gi9CUsdU9n;vyGbG+Ezh{w*xGRFpp&#pv>wvjO8ED?L-8!s{sY8s%`c zjf{cE)0=01Ke1$4d|vldLjbpCafa)UYh1)moLYHZaOL_!-}uO>(lJkSUU}cmD3>K! zbnhdi^GHTsUbq<5!|!tuRF{9evNz!1=q0z}?9c_ckBB-QrcgNq?Y^$uT=!02xm}#w zQkv1yXaka#A}<#hk19xqnox}`sS*-vQ1lqid-hT|YLz`%+HVn>*QRB8*Vafx+f`LP zg+AS&aK#qV-prVHA$W$k3?vl_XH7g9drP10KRPFVl`Rx2aF@Xmh85_&2M_ZJ+huq|xUQpm?{+_>`9Xo-6{zmSa4fC12;_f2{&Z=1T1S`{2hB0I(Lpa}cuxg&g}h~LK`@7IbT5US zr`iLIj}-}>q|0A(+*A#&kp0wLu(M{7*gArgVUy4vvLab1-Vd?pvzR%a9bz$Cg!hR% zMK+7j0SMu6sH&ZrmAnMEAyj*|sXc?$Vq{nrx+u%U+h^ddfAm+$wL2^%(EJE0kD;+_ zE?VWLRK5fx*6l&PU2edwB=EhL7jBvHrSM?s_u^Ig(@YjAS2Kc0$@7esvdy>Dt48r9 z_V;+Y%{PGCV4(HsIeP7T%sIB2VUG11-=Ag(dOyGHKYW3CwmLyi?IQAPMV**O_o3^#l_LG zT^qgQ3F>34t${7-aQ*vK-6;rE^CXW3?J97|Lw*a=QyNr3Q;Xn)kJpyk@W-V=Ojg_DN&w#TaM*csf)AiZP`TELor)LQ^FV~W$y+K{65Ze zsnaUL8qhhT*^oYJoZ~dDx=XoIzDDlZU3qDCgMry2hN9Po(ho#eXCAzIV@5!3(O*Bx zH)iZht|l?kQ&%+$$_+%%5$Pzvl%}gvPo`9xrRPow(`Hjn)dTClGpGO%TG^O)BZ+YL zkE=PEW*l`t!tC^*A9Zhqf$E~ib6B5$$Oh78#d#39YN0)1NdakUkxbtE^Pm%&$SF6B z4ZgC5#v8Hy4j1QZS-GLYg|7ONgu1)^k+l&bBJMG0+jhFPp)D3nX`6e}H24=C-dFwS zwvLUqXR32f@FgW4n@`$%9i!rMf5-b37f-mD)`5lu)pq{saL$R-W-^z-%-HEE(4Kd3 z%VItjmE)~@eHP+NULxy5mRe}@H7uiWO#s?-;g=XUd{%<~1}$H^$QL7Tt1s-j5P%@v zw;B?5=@Yai=zupTdu2O>8n*|+)#es9nFT?w=OwqZ-|w%^SG824#pwPGa> zU9_xRUgYks&4!-cuHo+=f3D>czK5D=H!u`8wJjB0QT*LFa_kAXxLTj%Irwgw@u{#& zYG#{xEuDFVSTU2xwn)_70)kyQZa@P@H{E(nm_ePugS-0Xm_EnCNK?Ww^m{sVcw4TY zb$BL3^KllQ@fZsb_wAIxbbMQ4+AKI2LAb<-t{mM|tO;_uWGbWOn78|+IX;)q>3+v^ zJDG<~HiUJ=@oN$7NmGJ~&~8_Zs1nb~?y{Kdnuih1)%KUWLPR&x?aFGl)=5%v**s;N z^N$dVL^Rko@wDF}4i}?0f(>Zo)QJ7BFDM?rmsjSn1Wj zeN$`Sp7y;$<(01pi(R5D(F zW8wucwSi)sl>dHIQ2q(wk&fs)LT5;ba?svx6pr{c_lwzW?RKYJM|PE=W)N$kd?Ho5 zkWQZ@IWFQZ5yqB^*b*4IA_iDCr1ei!>~eGM(u#dt)Xk0sXEzZ^w<%XgX|Uyjg;9tB zdRFd|w#z1dq#?k{m_Du`eR?PBRfJlMeTLJjE!;<~W{ScJuKTHzHWPw;1w1bIrr;Io zha@@5mqLWRU{#gjPT{YXF1S8_!FzQh#sRLJ)NoHc;G>1BLjS8LguwYJ_Irlgx|Q~l z+NyThfxTLW@Gv!Thu)rqcRWI6SFF8N7h-nCwe9LyOknwH&TL{ES|o{}*;ky1Kx<;$RNy!TIcwrgLQ_gn4h z)2F8s)vMA~IBL$WEkMzi!Zqi*iTLO0OCxT^m)OQTT>TY%HfA=BgRmb!{{t+a`;3mw z6wB*l86af-z!0*ibt-&(_e<4f#$Rm3zx`-@eS*jj53SlBm+d&hEuwbLsfMa-U~XRV zKGev0^m%uf3(*L6(w}R&6mGHpngUDg(c*P5XKULA@u%2=~4%5 z^`z%Q1;~-C-O8qRkb+U+$^M$#Qm)P{lC%qHHkzN(nNk{Rjv;4T zTkX7t*KOtM$_A;gmCMJ)ZT4ruK79cuwI!gN> zC{srYK6Y%)n=yQN^6Tz#7w1Z{HhFflZ>_X)M|vo@_v8!bi)Ak+j~-mxJ0rXA;-Jrb z0v{L1`)$-pcskBUI}|hFZ|z*+SQ-}ZOn0ep@%%fIf&1NwbjY45lF`-W{6uqZA!S;= zLA2jx-F{UHTGQ&$UbTH`j060%9=X0)Jw=2)wa%NInZjn8FTRW^0LiPcBT;2(4r#29*0VZ2z zw*|;ZaXp!)ky~N&`4Lo5`30$dM-Mg609>#nkIU*vnak9?ez@(0yWYgXww&_vOVv9i_y&?~qS2Tm zlnwp8Q6jZ8aL<{ysI||$K^nrkZOYj;o>{#WhHtnnks#pV;W4Xr*ZBO;YrfwWTeTIs zLxEq4Qm^q!|GEs!#CY0+2Fo~`i25NPwwn|_wwoOD!l9-@_$^`ryq*3R==~Y={qmeI z#Hp{!ECyP!1_b{AYFgaL=58=?$4IgH#J$&FDXSGBUqP0Py3NAW$h`yOMyHk^*E)!? z!3Pa~UhHj4^-oF4FQ9i}TII)lQw(pWG`&s^BVIx+n4J&35TLS||I{j07t$OEN;%-y z_1&Hao)=-XHY3x2Ry(S}@KuN~$wl!vRJJWsVCqBNEom8&4|z6?)+A4=B!mchm`Dbw zEt6QLUfD*XU(7>bC-%L)nkB0oN=oy8SumG2%g?#BUlMaG7yt7;e24q4UW({#6RU=RcU9uDtht=g+hnW1w-6PK! zf|AQOZvK|Vq)n3?XE1jtCp&8}HB+r)zvZ2H0ikYoyU^Z& z`aR{WTz0&sM%R2{r{R7fMu%#Lo8LL3+NwwrknlANm)A~;U^H#gWg|!;@+NgC27*B+ zxU`v)7gDe%^RhNeN6pblx1HQW!IYEf+7qL2LN!qs_P% z`R-FGH!99rFqI2?is-DlGad~0oltO0@j9>V*Y&M1s@k}$>$~w>c8z;+=u=zX%!s-; zA%a}PLJB>nL`PUIXAmYcZ-7BI+0NWg(x&U4!KJw=g-Uh-E@Vrq z+jDBC-ohIJ56Uuo%sY*_PzwQvkJ&OlS-G0p{#ws12jL|Py22$xOSq9)paZlug(rDK zpcf~wcps-)FKCKb#Je4@OKJ;(U~e}UWewqCYP_AQ{#BV{$=EE{nfI67fM7LKTz{bI2ma#SS( z0#2#~t;`S_6ae!1ysIL+(^qO8oj4A&nvd9ZKKRNNX0 zJ}D_8&9=9CXJ;Mj&ySgH{z?Bu);luj{SEU_mPIAg(b?QCLHY0G`>9=6-}0)F^nSD) z?>Qoec3c<2cyP z`)obO-NkgPr%xzJg#2_c0kN3N3u2zYZA)Che={o(8kA7}DF&udnxG7*QL<`(WT?3BonoZ6?>zHxW^mmG^38_w#*&=VfyN~AsVu&pE}uvyO@Vb zHssk`vwJsiJZD{7{uTfV23dJo?#^eX8wb0Nqqc&e$lYn;@Hd#yg5H1U5H9<3A6ou0 z&-lqW70hNBxD4abqmM@7oObPYX)4ppMZv}LP>3csb6uye_(mxK*dJOJca_!Q+KAsu zJiVFVpl>rk{$_MC=4Q&JDoHnFPO6tpSV2@{y7!iQa;#BRlkk+!;VVO?cbSTXQ2jBu zqCg4WXAI)V4-l?AL^*r?6+rT)!noyP=(FPJ-uE~UtWcQm5a;z{J=plV20=EW+4rZT zUtKp$&KwUQB|Atz->Lg}z=3lnD?4fC_W=0}ZWmfFM6cP_2(v|khOh1eG^4C{{ZBv; zaNCW%RR{#(TB?d|%hKSSFxLPoLK5}R`&4p%y(k?^KevIr)&Rn$gtH#(m?mMyd|W12 zTp#*Z^qh7Ep#U!`BkAmMj!l*;=No}zeQW0kTKM!#ai4+@Bs_mxb1# z^Cyk`aJvMFDMEYF`lT9?zg)?G`!V}M?RF;(ZRUYn{JNIs_elu_Pg7scTEobq-Rq9t z%xtbk-Co`u+xFBMRLpzCP7@Mea=)&pr*|albkphD^fZUt4q}^`3)VJe`caxkP`U2K zIk80nr=m28@3Ix$?#7w#wvZ*Edd-}}jJ8>Fgt^o23GniTPXqI> z7Q8B)fB-&O&ZX-!z+4A2R;x>g|Cn{~Ei92{!zp9X$j$XSYu2vMY)T&hAI#Ca5dx~N zkLlq4?J2tPquo95#{5->$S;M>Ak_z41U8?yC{z96ABXN$v)AZ1@B(0`>AG!42&zkoSGy#E&_@n2B);8E2sv#+7W z_A3XNa>?*C5SAe)zrQB$bnA!tP_D3hqfi#;#?+s|Jz)MA=j0d@<;jfH02Nis%GN_- zm*_^8T@|0=ZNmE^HFIO9wRl2)e^X-L2$iZ2G>+2!zK+C}^({g*>G}1aOKkLyk}!kw z@4>JgAHBH*oKVl>q6Zx%dNDRGOq>&@Fg1~<$3`0>}5rJTBjE@<)OuH8GX)Z+Jjf zR;9|ZV1%~t^Yv@9(uZsPjMV7r31Wy#LSgF21azLv zm(#c0xbBi1d7j^}vJXhglXd_gbQd|z&a|%CqC_wiZ-hsl1K6v<2vHN1fJY|8r6sdf zI9mg|3(#GQ4?}mV2O43V9$O)C?n;pM?y$qZam}Qu<~xN7_#0@rEH}5Cx!9Q<2!=+D zSJE#+OELmJ#<5;Pj}kL6u90F6aK!<{m;n%VwI`^I%A>3I<>4+r)RU&dMrSUKL%?_E z@4<TWi<9)a>u&Ku8sMmKYjXC%DUQ@ z96i0yZ`HKr|E5h`6ZdwS;ea1Xw6MbLHDyn&IQy9cY}e!6ecM1>on$&z$X02)f5LC2 z!t19Dv45=!yzWnHik6WnT6@|xG9tXTH(^!q@Y~C?GcTB1A&0ArDAS&g!>xw?W=IqQu;2{D8F6Ks{$c5*x{9=#E9_Gx@>Y4}g0n2{G1>M~oVS>V9# z4ZY_G%nA3og%aUdwcLUCAF$$+2&DJ-AmM6<_0V46;_1`Bwcv+^^i)%bAG7?1XS^V z@}C+Q3dL`Xxk_8LInV3mH#4uXhg_~2ub#~XC@HA7=k=dnquD1t(e;k-Rwp(Rz#w^5 ztL0zmT>T$Pftn3fc5f{$t;(e;^+;39!dtDW1o`$$c$m`QTJ1jTxg67*KZeKXeP8KW zYq?S*e*YG4{N<&{F%?Fo+jNrOnzW}**w9(j_^SF(Feq}PbggjIufja#P3?_+->NYujp} zX138;d8IHQ%GesFZEZ92oHxZJ*C;}+z25?`OCMMio0dbgXZh-406;^!5S* zhf`&Qr`30zrVjkNUA1rYKSK5Nii;H*f=@A_J7ZdpE%{$y))v>Rd@vsSCwAk?G`Gk8q1OIDb%(3hm%!kBDEb24eD*z&^V-HcoW`XK z8jNQ?bsXzSd@uH?V)oH4#6J_pd}VssY>DV4p;iY0KB%r~7`@M1@U_HW_Uhk!%&+H+ zk~TkuQ`_n$Z+1iZ%PJ4;CKR=WYi@h*U2%DZk)+eR^gS)idN{(}3inC1;p7+Yq>-v_?QseMOqnRI25g9v2itkgK!S0Jy zIrK}$4%Rzqa!ZxfZQqjYjkeCc(V!yoOtb+knRZh+B@`t?ZC`quj?PLg+33NQSa%gW zXeX~;UR>bFSzH9D#r~tDifxW>s_t$rv+3Ga<_?-ytqYn2kT12R!QLigIALn1sA^nM zyBXNJq>YiS>_^Xht>8$>Kfjv>iNXaSV|{tktwPl#M@+V%{R67qwqtGht}lPdKe^F! z6py{8bwGmbrP~s#S|Q-a7wusQRL0>}L*(04(?d7u4j2LT3;v#|ifN$x%pZ?HApo+7 zDm8|&>3@%|M!M{7g{wD}>4>`AK(2m{XkJ3z7i_lj<5*ACjjjg)B=oV+HOjXt#6m~1 zPb~NRj(Phywap6vmOD-X1(Bzh99HdY6GXQmw1+#M(A{O*=?I)kR%Kp-lvSllo95nO z^13+oLus4pQVy--Tfm3@r2mvO^XK7J1U4XobhBoyo z<;A6?=KVY186XRUcbi3ml9$XeBDzsh(rdF35l{^|Fqtgw)^C<*&Q`tk9A*S-0H|fA zVM8OSi|b`6Z;DZ56o0D}N3R7f6zUKJ3u?ey?6#CWe(KO!ZQX>(vjU1sxWyGI=$0TD zCKpJxm4N7?-|XIvoA)6shW1S4EMmv_ae0*hSgcQKYZFd+gWT*b};<<$BsSg+78>cPyTaOq|H&xqprx9<$S@$)z z1|ZGg3l3-5a2h_Y!oIYIPno31n(ZW)Av+?(n7U$49~}BA_ospO&gHSbDLT^gGfupy zqt=1c6)xz-SrE9Pkc+^qf-znuJrXSWy6BbcQg&d)t6@E7M>uu3ZV#YDU3xlk_J-Em zqn;t%P)$Xpv8U68xYDvcAc~*b4Uq}_-7qbR`7`HY*qNcXxz^CGIQ$E3{vS9oHQg7= z{uq)Ze}kphcz4vF>7`R9Tju#syH-K;8N*lVY;MmkktTNifs6Jvcj8W+%;Y zZo_`y5&0?Kq|V??!I<^sKVVgwpPa|zzV5zno&u;+uF1bZ^gpw;|9bX!I4ilftJRpkh7k8((jW~w=qvBMj7DBX#<8lqgp!5 z-spE=A58B(3~^%Zedg`x;Lnd2pI;nRaFdCB=(6wSZEk*t(fo}MA-Kcct;TZ&=`8x0 zx6n#g51GEj_R2yab$i|zv++O+JWEPm(3m+cYlzvRu*z^|J7#5zMCJ@LlNc8QOASku zN6f9X4w{qSxBqGuPD`-^u?wqH)~xvAPxcYU6u)OPj|aMwl4tQK#lVKX2W)K+CDc-v z?$mq@?WPS$X{l9tSSpXcdeWsM0Pn3-{Xs zXimB6!nWUvM?Vq32>fB$J6eqgX|ig2-@Ugh#(J$B{+6a(e(S~fjPD)*(rZ}EwU{WY z5yJN3fg=LPsMI>dPeBq8Fk1^6oGKdLiUG-gR=~&z4{c5vcA8Vgs?a!{uH0n19DYb@ ztd!w&GZPB}JQ(Y91k7{`Kyjg`0a7QBF|NZBR#d#D*3Xmu&xAWhdPVGe87m&F%t=kj zX!kEqP070R*`+5_Y=|2ru8ogmG;{m9i0^ep#lhM{`Ke}xp$=0}jtUb7Z@6bB`R3OT zHP=Ct+^YfKAcO9kdQnptZrvC;3sfTQnn`{!OyTbQhX+XD&g1caxbQJjIYnhBs2j&^ zPx=(*`!)qUQ&9gS5@#ZsWuFNtD2F41BS0WX;)~2E?a>fAZ;FO}78g3vh-vi7dzP;q zJbx}ph%nhL7#VHx8g2{lNY_Y0>Ok9&;bYprMozVyXMq#0j(f=uN6J;Z&7LH;V^~Gr zOI~A<7!@^UkKyzlb9*mj6q0Yd&ZBL@s&~9GI$k+5{2Ev4wYNKmJ4M;526(0_7iO4p zy&)7b`lJH0hbDJog@tr58-@mv=zvi`d44~3@7`}^B>L&8qw32Y7g&oR3qDBM?A%j( z``~?B!w|sDFDo%bq}wVccE3{cDuP$GSBnjO{ivxTudADC#Aftkubj`TA-(x2E;c(q z#&do<{cU>$ft`}(trQ&l^$7nP00`u%IL_ou_AT+^DeObR^Sy(q(CPd`R zI2etr3mY9OmFHNewC!CV@!1|Fs{T*1UPNzr2IS&sJHefN;Q40G$eF2U0QY1}CR+|z z^v5+c%1S>2N}GP1$G(dTB}_Rm^PGHIlcs`cv!6=!StV zbwLcGXyUd<>#4b7<&t&n*%+Mqz5= zPxpy8cux}ft>;=|J3BfAPCFMHJS!lc>Xcxb6)F}0Q14Vty;H{-mYU6yK1XY7E75#% zXY$2)-KZOeZib-(;IrOZj0}U6@}fwGzW~rb!?u4tZ?gG&T;pUFh;w5BnfsRPi{P)j zUCq|%UNz~%tL}RHClaPJQXnURDh!_L8d?X9QL!SmbUnFG`32~0+m-W{2W#buGY{VH z%yLckAqL#`PGkhW3lxMzyEabWzYB)0et%%@r_u`=&G9u5UxNyR?`o=YdHiVBW0H;9 zdST*nJ;?{6SM_|5ui{Jufyj%n?$UUouG}@L|NgE$)+eG@KkMKLsZq{hno5k*L7ddu z?a+<5qc@m0u8HbYS5HGj=dxnA)1&B_c|f(>EP8GSb?a;5$gIlTCP1J>Hi&x2 zAuSdgEYf)X*bq=vuJQo&%&p9*NwEA$LYhD+)UdhP#_(OMUpe1rA31jqtRLO{#`yAg z1SJ3nmEZj+&P&V0?IDF(1$E^X7^D3_h#cTTyUPg@F zvqPj1xnzIYi^!@b51A2Tr{5%}KI8T)l*mypev_rvK`rgM6XezM^6now&5f0^!9Y5yw zv)r>8p~B@Cn8O~s@56e$(90a(o_kJlQK0wq3~t5CJF!bge59%OliF@bxirDJJ>1(9 z#M=?MD%yz=01>`n?v^C{D|i@q3kV(6Vi44L z#otIy{F$;0J5(&efd{y49Z~O#bm~%n?}lV6{L3>_Vbn6YdaTQA4LMXT&iPaQk2P7$Jeu4QEA3tZ9w|g zKPqzOQc9K&`3@_@GM<*fz0)w0VeJJ((yhx;PjqZjVr`aoGPL{)Bv)Z_rvK?4%r zAfSNexdwAr8|tu5$~$c6KLpUp79*gxk^4B{2n_b8FT*=LB7H(_}j>(kTM*}(Q~ zp{AwE>A1TEf4Sc`OxRYT{(o-~UmS7|yXtp#Jzx!U27qM)CEv5(g&hRk%h>VlFc8Qv zT|WpgHM!cx+iy14#vw}M$f5y~raDm~oaX&AGu-)=$44_DOy{|)132k1w(utR${>D^Kz54~%%k~C1 zvqfCHhw+MBAwGbh(cXX;rbgegP+Vvnu9lSX|@ zF$Mp<6!S0C`>zN8Jie=(tk;KS12L>6U|#GPgD_~DFi8EBm)~|Qljf_z!ZE<_&T`k)x2Rj?V65Mw5tpsnu9iXzP z2u}~S@R43wLM~!i%4_(zEFyEZzFMI!IQ5h^H<*e~;OqW9#+uayv}Pu@eI9KFio568k&2*dhEbp*@B?R0*7gHgfTI zh|f&M0f(*2RG5@_0sRbb^J}@|c+pV8d|CbyF0b=88#;dfM9?3 zJwJh-4h`!8oGEfibZ%Rl$l4_cP(Eee#_U=6_!=6z<(P1xi`s%uN?wQQ z#%=3v7kW2N{Va}xq4$j`{_9-**9V}m;@)Vw+M6TU>K9)__4u9H8qR4)b_hyKf)#RN z-1B`BHuJl7Hbzmz2=PuOx2=q1)bH#W4HgJ1U2;=z%=ZwroU)8Y)0k}TvMi#7Z7XA* z8km{$8cOXd9>9mzLGRjNb^x3$@uj)`T1B183FV%oM*Qi0!l>T(cLH1NVWbO`vKPM_ zJ6t^z{6yN&F;_6NvDXT-(v7nKisS5?*XNn0^UOwrHKab+qX$kU%Qp=44{k7VfnyFV>aXbf%*QqGyn59o4$ga9O)A0?LZQ;(gh&)tlW?cd=0u%u!(>BVc z8fV|v!(6iPn!7D>i!+pw=xrT*{PsEh3pEN=T{L^hnyi@fm?8aPVybHoGjmKR%)VIr z_6nzNWy>i=w==>f3?UCg!V>!xTX?MrACSJ`?Y&I71JU04N>7yxfSCp;f@FwBTm5mR z7@+ZBt7d@?wz9@rm1n*-BbD_!#iMnQ1WlkDz^J|AWxv(o)v_}EK677+G5A@zWsXQ; zjhygdS^uIrE*#US!E;Uf_eyjyo@MO@MYUUPj>?#j;0b(Tf+unHKT7&N5q> zjklb%$~#EM@f16_1IaNmq~j`i5z5UJ7!)`5ARB~e%$0x0cC&}PKCu(YjMNdP4yL~$ z9NbZjsGw+1=EVV61slP`BFhMulraJ{o0&_vfyx7N%ai<@NPVd^B)bu} zII7Wx@S|}%wpr({mAG_siIEn-{LGd{XR~G=5jyw~!U=hDKoJzpqgib|dr|enulA}u zzP9$-E9;JqZw5xGd%st1a4Vu1QHc01o;znVtWr~tp)*{+RqkXTSs}3j!FpW&(%(^> z{t2=_UI+3_A?M!3e8{sQT`y`<9uSn%R>(UTO?GHgUNc36nn}XM$;VCQqk*2XhN5!I z^Qb{Yn3EFFNOq&EIA0@LbWux&oYRX_)jk@#`m^jPSx7CUEla@u!B#^9dKCuQ6>yLl zm9JJ*I%zpgkh&Id;>;I!w;tOh{2&az`!WDdLE=A~dcW#%t~#|G;yHA|1iDt8}=Q z@6fME`5cG1@~8@ZYnp%VMx~0MzJk(b-gp#(-J87dONWL3Ko9;u6yis&L&eqXyIPq< zpaCy5n$Wf2mip-Cc(A8Yy_p$ow~JbcYo}<~8}Mlz&UT)fFL@9lV4d1vB(mie0WUYp zrMOMkt-C0NmY10Y=i=I~(!S z7fgy8E{c_kp6CdivK?|UOGmUmgGJzl%Ancn+Z~3f*Th6Ywqp8}$}g@# zov2j19rQY1duq|KbVf5}JsUD_2(td_zDJX6&tps;ok*F#ivvv9lW>P$%s)F{KHCWH zzgq7<{QywHk+rxeUoC=T-uGtG$G=ft< zq_7B*N_rtfp@~<%Ek1B{c<&UoZ|PBHo|9QX8zWyQd?G(R{_(j0U!m?|Kz$A)%rj#V zp)XqlJ7M#N2}m{FF&tMUgflVTY-cdzrf9u|%glW(9_h8);51g8e3odLTJ%=q>6p9% zAhlEXaP2qiU)Q9D{r}^Vh;WpMFY>;C>h~AAC%d$k6xx}dQWf`%0!O_&941MQL5601 zyLH5ag4!(15e#aaj!a=%EGJ%XuCJyWa*6XB$~Y8%>EfP-C21$>mGnSfpPEO2j^fA6 z@~oC4QmnGV;3d5f2tT6<(KEP?FPIH5ou29Av|pI>IHP@6`FyfM!A|S%JUBu}OWC83 zx5WUNpaiA`c(IcE-etx~*#UPn&@%MK4Hm5=FDJQV73v{KG%gV&1pqnGld!us+&nNj zHISS|B|GxL@fYLv?A~V|{jwnbH)@^Pwj2K6@5-;=HP-*AR>h9I1vLBYzCSb7_q3|_ zw4P+Ssh!vP2T#J#Cmr#d<+RUXHu_Ra8gEL93xg%}eNAQ;Rz`z~SWn}Erd9_&$;8~Y zTo$ddbvx)0&MamwbP)?L*W5@rvT$ z9qM{Sw$v3EW+N6cBiGPxCB5}k=g>Ds`p&>!`&fKF3}vxX{`wCAg|qqJ_zq}%PE<`y z0HfNO!V-xpsv!Kd7>a?!cBiY4#!eqO;BfUtm>?%G3a)gl#=A7caZtPH%cgm|VNaH# zah17CX{)uHjVB8Zg47Ei`kz4n|C|W$gUuU#;LihD{>$@3_95Y{eL%k@Lr9(h|B^LZ zLM-gb<3xWC?dasE^X3J-^LL$$D$0yk`kre?X}F0DU5Ek`3N_@_LoDqm9pvE#Gs0B& zYC^6D)epoZq=?UzG8;=Js(J>=F3^pzr8Q@qP}d<_SL7>?0c9zL@f;c(NcO~1o`=CR zZtVytw^B0OE8jq#Qmj(jP+)124}oO67QIzHR<{3HqEfif2;XVNDrKh5;+1jqYQ0O} z9Ev>H>{Y=Rf^~}z2?P8OyoP-@dgs9UowLV(nKu)8^*}8J@#|2nzs{Zc^}BHB!;PNJ zy&PZ>%<`I(o#u>qpV;({mdI`2(Rdj?j+}oHWV33dE+;j`izF1rq@U*o`AGfYJvG3K zBD@QTK~$^Km!Wyg#D>%ZO7lJirPuX`K_I0k-i<^ZjQv1=g8d@0{*lgd>*{H>2475a z?Gs}2b01OS`A!Cr=ZClK+8}ZxzvS|6e#Tk=v97bfNg~=$K=;VLA+)BZCqXn}WxP*I zXOnWkadRGA-;I@@;E3{Y-n%mT6My# zKE>F3<5(>E4+$Lzc|au_=7E^HsT5Teck`&s#bYvW*8NNQiD~Uz>_nZnvR5}+bad9q z$xkJq7klb#!QiQ5*96;FQ9+ZT130wfUYjXKtWV(C46jb^mn2~Unsy~(c--%PgvH{q z20@W)Iw}zk7|*s8kHp-46MJ#&|9_kmy@yYqW`shaa%^DperwB?)GGlYD$`9ClHY|T ziwfF`)bJr#fws2JBdXm@7 zGb^Kt3c9E#vTfsj#R?o-<#pc>gd*M6=-QgUnfCeSCP9mZz2a_ZObhch2pCYB;dcmM>2go zqb%V?^=IMw!kVGZ3_~7}`qbDWVHj4ytWuXd=w;_;?=am{#$%0PeC_6|(&WPyGsEh} z3MVRMk~@tL@?5X<_WK>QmI4!pv8ylN)d-QtQvBzhe+h8u?O}YR3a;_6$qlp=$ap?G zVpQto`9laYh3d%Ek}7GP4hR=GHKn->)c`a2UWM6U)>=k0LcF0%)>_I~XCa7He{=sF zKWqC=HGAc!z+VT5|DN8a0S_0}97?8nPuiRM{1`v0sIoB#6dm?YXMqF-fA?A&l}^V& zG*z%a^#1N3!!w*)3jTEgJkgz*hpO3;U-DARW6W*xBFjt&s>WR3RVxzSo##%}u=VKV zowo#xPT%!;WlDj%R!A6~@KC3rVNi7>%hQv=Yl}hr(8~EHC}Ov^V!2sh7%kwqsoYTB z+e0jouNn&wm`3v3x)W5WZC^X#l{4Cu#%W%Sd*rU=o`(5-Un|LU)H4t2i--pM=|=f4 z)WMW;^%|{_?YJ_dO>h5;gHwWw$knechiybDjLV zW?J9~M*uh3ZwZna&CHiMP&<6h!PdM$&bhhel6q0@zz0vyQ}MQ&N@K_X%OE$WDBpns z-iFm9(uzYYTF^Fn#*{DKBb)v}l)C==)|rOwhfBD%)Y5|G>bi>Ic#(KNqY8~_6u;-% zAVvbYbo@6*V@^jA5Mi*v+lTFpWB9#%zH!W{-_RZ#udh1ZgxE3(^yGV|{f2QoKay9n zJeeY2=I&O0(g!zJSoiDXsI5(+`-*D3E^wb_DFqaLN-Wy0hZy%aA1l?5wCv7Ux zamFPVGAEsxOe@C~g~}>bLQ>ye%^oje1Wo$56^Sm*L~gBeLuRs2;!r&a8L9CIlnqPh%@o= zdzij|$K0G(MvTwm6Gst1I(Wzc%&IXSOP_w?eJMCGAk1Hv_ig6SbZc4kGmWwgdH*I) z64)pO8!B=j>+mUVon>zK&bVlDk5pfaTIXL`UGYcK3l;BzUy}RFc6_J0bZVqM8BDyV z+{Z9V8M2RClHNfL+dOWPGe}V8A;8{omhAxu)eCx+a6aF9!i!{Y7bPxLFPY!$1^REH z&P$*}av%SV*(qP$sUijLvC$LAekd;QID9$RR>#JA>-BK>^J0iiAiePD7`;l@fZAU8 zvp3wq+#BJ&IPSfNVIE4W9t`)>qW>!=eLR`a?<|T0^Jdf&%aGKZ5SS>UTpJ?3mKkrU zqolr673oZNArQ~1-({JL5Dy)cUO#a6fB9g@sJZz{=Y`-Kx5`VG_Qjfj-wi}p5t^p+ z{d9^5k*js*I?7?YSevyb%p_!yWT3yu8{{8=3;h?-WJ4=s5PZ1CX-Fb0vQabJcY`a2 zkG~C)H*oH&K!izQj_ev){44U*)+)S}64v7GM*Q#FVgCwMGMtE=fR)n+6FG-tB+z@q z1TFW{uJ}y#X3yj8;IWS?Ty{fFd`qjgFmOTWMsEFl4&vUP7VfV*g`MRA1UO1?ef~+k zHRx^>lSZERwu(bcqq_$srKPa2I5@gLMopybaH-lPv=I^<7$)wldVifXwivQ6@xprc zd&|%7{G3ZT+c*4XqJGy$YyI+L&Z8XFw?2CZFXQ5XRr0(|rbQl? z_?8Sai^z<>QsSrYPRu-y!vz<{WSKtVpo=0)P&6zHeZPid}3LG4(83Hs!XR;z|*xq4Xi1PA^2b;2kk> z>s%GwV2m4MMK1t1cR%L(w7*6OMHXpmgBxB&t<}%L2Q893GtX}$7GBhg=WbJ zzd+RGRQkm>GR0rGC z`7|?KuOg@3%nq~Fn+%4eAzO(sb<@> zMI-3Z`M=%)SNnAPpghIhslfg9ga3VQIMF-tv9YZUt39yZbb1f@s**tgMzw6EfL?g= zX>0qJDE?g^s%262%sAx7d+9#ud-BraH{{k zIh_vn)=Dwcor*4MqeshOWQ^=x6d;DL`m+qoAf~E{`;f0sU0QwM7E23R^ zh)4~o<5M(DXWFF|a#=!P_99A zzH|7Vxl%+?wMGdnKybG8`kL%T*|BzvbMe+G_!dM*|0-GAV~qovtA zT)r_eFJZ@a8V&a`{i${6OM`-pB?!i~*V^Rh)Q{uWbfKM`Z(Z0mt0x%PjKK*?&*pKFZo?i`P|Dm|f2ka@#$#@04mF6n4IS0xCV8HieIRmtCI2$ z>k)HmTVxqr%iLC)h9cZz3)Ad;WEInQ<W#tOsgi#Rh8`6!z>NY zKA;r-<8^hkM$AIv-tk11)lHNNuRgvm_bCOWqfw>^@k)+fov&ZO7bYo>4^{?T@~+ZH zpQb>mP}IEXM1U>|UqL1tVzkiy^D5rfVX5O`y+|qd@U8BTU^ai%Rb+0T*15l9@$}a2 zkgX3sGNRoZKys5e%v^VsrlvWBnH*GykP6%D%;ueYhvf`Vie+&pI04oLloPJsi5sE( zzJ*#tQ(Y00R9yfa=ftbKmcig5FJcy4);!_meHgESNHJ>pzR`1cq^RUv$+*K00ruga zy_qbUu6+rb+nKrPwI7mdtcb=P^OkC+c$e69dfxDAZ$8K6TQd$fLFBx3jg%q+)Zo&T zf`J4}3NAh7z*2pgp3!)>ymx$=PDIAiy6kWX(FCYva31xq<03X6GyZ>B1)$$e&)XKD zAi&{3EVU#NulRiaDD7Iq4m%VOWrB(ykt9Giw_hsS zjq*h{io%WOj&BVPCxnl22!x7jch$4PN;OyO;52^X0_&|M+|#(2<`x!U?f*LMOQ}UK zXvRJ*=q=?2{H(xpLpfOSGicqzY3Wm!PCJnMc2(18L904IR`*?2@5apO#0b8jH5l99 z|31nomBcHTh9YvbiaIsXD;%U698(x5h4J)Vu!#LX$z6=iHc)J-O#SO04#QtQDxKb| zW_DHECNrEmyz-r^V9smm(P<9q@<5scirZdR`L=G_zaVBPBOcCpM67Va$e5Yx?uMD6 zLKVFN#`EGIx1}jJNceuD`IW#P%XSJF1>`UF!}OJRHnbDHJ^cfeNGrsg7F*JA8Bsqr zZhURzo5Nw47gEtL$QB_HJdKZeBLMeG3Ei!Tgf5&YV{dRC;s+6=yn$M+~2I$X4z=jF;r$O>iuhKHo3q!ZQ zild|zo&~o3#NR>m{|iyA&E5d6NGJeOU0Y-nMbG!D$~m8!N2Yct|G4_z8QB{-3Z01s z2GvvET74KlO=gGj9tf5`LE^agT30DZM>(mgVtoV4B6LJ9l*-J?qwr@PWiZH@nze2h zMKM+sg5$w)d~&Ft|M}0$oko9#zN-EztVmyuj=j9!Qgph!Y^GtwQ<(i=TKb3N&diKn zu~eDn#34q#9%iG!8@^+RrO|UU0vz2?E|>#vG{LJS2lq#;sr9Uq=Z7=jd%b9i-(~V`t_S0hF!E0HFlSJNZLk z{qH#qizZ>H-HS~5IZvfMl@?w1@L6in!v#+wjWA744?%k%Xiuxe(*i7Wk@WU#7nkQ! zMOmvVSsIAX(XMB4Ayui-{j>E_!u6ve!0N~!*<+>b=SMmGJX+&^B2l54@5RNCJgKP4;SPUm95mh-riU<8m2xx zulsJm{+O!p(Q_9~XmF9U`6mFuxzng;9?k5M5AHRkl27yJH32Kfn_1a$F-W<7;^O z#~z6UywpiEp}NYoomO*)gk|2%t!3lQt=(Ey(gMwjh(EF;&Iv$fVS9tm7b|>d<|uk_ zig=l5ZYqAb@v0w458&mGBABQfA;V<#DQ#KJJus+0y~eNkIXyWXmHC<*Pb*4V;P^vy z6Nqj-Z+Mr#tXy-hei9`>%nO>8`xY9y3b+Jty1-kav?LxV%T^s+SU%*-^2!O*;U78v z3#a}?|IX2|jdfJO*s23raQf$Qo#C??;IE)kqvI|w`@lWOR734 z*LgmpgEc%BwXeu(ZIGrV!q?su+n&m4wrZQ1xh^Og5l#Cd zg?NwM@3<`Iwd901uzcBcMJWql2xqP#D6-a(W>2lv$7U{phwmjP4NN(;T^r}PTT(If zxRsh=mYHyA3HwWu3)z3sK^1wt`ohYO9CKy)-H_BZ%d5r=3Ag{?sY7ncGjZe=LvXrb z-09VRh4i&VAFEQAK4J~Fiy4>w92>gaUyZPfI>C6p2ipMMXm3sqha=36CwEF_CX#x? z7Fs!*RDxjf@){9>ZY5IDt@U^bCs_Ozt9AT4nmh*MUzkWB@F=;H7JnSj(wuF~%X$4? z_kUvC-%hHm_HDCg&OqstyCJ*~#wuykyguzpObEOAq@oukRizQN@@mTDXuGvJ1Pb@= zPOCdxnyrdBfX48z>M*MEQSUN4jwGkK&~@i7$J`4Chl-~T)>|L&BUg$GJ-G)N^QX;G zh=Yg#x~|yHmF5^KPRoLaw@9qQPwN3wn3{`S!>{^}uPPuwp|_puYZiL4wSxu*Dksuh zdfjv@gC;b&{ZZxO_)&ity=Q6{d~wjsjvI<$GCz&HTn`}&nwoxAG;CS3kv}elEtkDT zqbW((f-NGiDk>?pd8tbg)YNt=0BG*z_49tviuYg2+m8Cc4l7A@9Q#lbacDQ=!bpqp zEy}Ku_PUqK%f3?g`|TA;1@x-mbBVopb=5P4*iPAGgI#T>OwY)c(VL#w6o!;DIe^H+ z1kup86xtg1^hw^bUc>ub)_fTny!@h@QAfCLtdt&!!$rQ$4H3kK;MGR)avm zsicTG-n?>Hv>eY9Ctb1h5Po2c!ybs(Rnef(CM7IznAW2;m#(?}_~_B2U=g1iEEuk? z4lNq;!OJ8jC8xBsv;+%FVH=PhlYl?=i3fN)kB187R_=aqQZl|<7RXiOXY;Zc2)FzM zq!j$zr=IW=FSu2@q(a$zGj_r@!z~S8L&&T`}oKxvbbeM7Kol7A?>TwloV6K`pY72 zM9x|wvxDrze_DI{X$FCd|2A`JZUIwT%a@Kfc~+Fu!K#@Upsi&`ZDEPm?hJ z=3%*gl?aq}(!D*>vT19V9N6*K(PpNS^Sq4=NGa(Co${c3Zh56=lICd8wIqrAf zfz29Noz{?vmRsRe__1nBzUnW$9FuVK8~ui4nMA9nBB2o-^hjBJM}WtZV!G_O4Ve=% zEtMIMj8YwcNva1*ffWVdgH*#f+kwnE4tAuWn{aJUZQeKT4JIg#OmtP2xM(uX#LE%0 zOL%mfbya^QgKzS@OqTaa7tqZ2KJUeE4BAI_0qq z=fXMTTb;eDRGV*Kv4=Z2M-2+;)Q|5Zt=suV^)GpcC^FQ1eZ;W~DA~tOj$Rp~MSeCE zJ?NMtz3ZhGlhbB>45+Z6pT|Z=#~Ai=Z4QL`G1(M3JWIt3Nby%nAH+P)=~SZ&?UdX#)}R^xX;XJ4-93$n<1Kl&Q}xkvBZ4F| zDUH25_FnAUvAAR=qw(juOt=xi7H~$^@gKgCm;hhh2Dr#MIQh-Cnh3XlRAKMyB)`Wt z4Y@W*=~lN7)22KzQ$@jDiK#wTg_g-AQqy=YxQs!8L5!Ar*7{>IdtTzLL(P{`crRgsGDV}@&G_bpH`6Y!>}-{gu2D;h zp;2<3DpbS#fyrcs_!>|;K=a=i-_qCDPqjf}oHd}Ua3bQItl8}c4;};uM^>tt22VWA zc`N#31C6A~d@r?`cKpcaza7N?P3wP!GLMJ5wQVlZTrXTJOwdFs8WgmbR6ce+oAJJJ z!MvdU=k{{1@r%%qGDaO-?Sw8y_pYOVd&|dGRn>rwp|huqw#0Z7=pH49#PMQ4>0*Fd zY>@%o6uK}Kd@e4RCayAohi)>a{ngN4FIFrDIQqXF-D%jJApCrXpieDt5B8LEI5hF# zna>C$=-l3aT_09~p?+Bld7cunfH}2_M92&P%8P(mz;>^X1Rsu^pT20b8*)Z{xDzBJ zF7qBgFpO6dxpZQ@CcO0&$VzikLTZ$!)TXa^iq{Ava1Z2WbdFyEqWITh?ZrO}_qBc7 zs(qiqw_pFkuKs5o=RZn*?bLRiLLpb7(@ml8%%Euy|}Wy~*mgonS#Fbm69vj|?jVP*XX ziIUsteh5(E^bf^BzBjHzZ_6uO$=A8=@Dy~l5l=pQ~k@4~U)U)POBC+3zme}9# zu$<8r7OM!3OdlT#FhsA-v@Ewh<4)@ygKq{LqcijFEm*WHB@eSjLHuN9VV$*lG@k?` z$Di(!4~ajWs}T`k!;S~lO%u7uYCR7vT6kH~M7b&Sjr2%81Dbh(0^)lv2r-Y3=jXvm znPD#iU>-q%_;SF_1CRxeL1oc+E{yyMqH9pXY3S;E!q;(Ag?Lp>+s)6hx>S?}m-xA| zXOhvA7qh&>Twenc3_a)5En_@ldXiD(GRZ%@B_iCd9oVg{qutum(=$MK{Np$t+8qgm z!C_1JBOiVoRrg-Zd?LAV32kb5v*EH$R`j5TWJLb` zurzBENCMnk29>2>Eon8S@j$WB+?IYdl~K!AQ96F3B-n{Lejm&}y2LGwx=A0m@;ZWn zPX>t@JOWJeS{F6}^7#6UN5D?2bLU!DI$`cYTg$)5oBG=duRdJC=ED!9qWp`8c@K4R z2a!^g(vWi5=O^o1IY;5s-zSYG9v9`)Rn*ggdWg#YTt%a=VU^HLF8rVuaToalLPm- zeFTPUbV1Lj6DB#v*Hz)J^tn@qWS49{x~#fnac6pn%~tmNu~~&BvExR|@%_EIHkshK zu)<5nf=$N_a`TBDnN=|+a}QSojz=(jy)(7L3zd_e+ ze!SED?8y3b=F#TlrN*_tE|k{xLTM>PefUDz%bQ??H&uvFMpSF3x21-Vg7(~#sR<^{ za~Z{044s}IrJZ%QkVMTOrae<6l?vAxp40xOS{%R}mq}i#cyU9|>_iV4Z5L&c)aZ)~ z1sdkFfs#@JlMV6KihaVpSOVuYTf27huk-HIe6jRn`WJ7s!b``V^+%f%1nu zs+BfFg-a_%c!JMX zKA%3&v7!N(^JZQ)m1|~q`QE$m>K*jFqxnIW^nLFP!mC*LrmlDQzbq|6>oEP0b^-p* zKtnnD`5wzbhBkg9Zk-c{t|M4m_-S#~yNav|#d$HTjhUWOAkt#WDBa4C4MC+~J;h@R>nk_+S#AX-5#nT!9(Y5tik zjEuFC-0s^WWx ze|7&vgl4}ZScx=)n>zhqGQ4wY(B0MIE>o8TqMHA3^H4dgMlsTY|BLw0+p~qIHL#-b zl}iDzRijiBQ4U}LGP^J;{vm8Yd9y|k-rMO;bPt~fN=$gFmP3i#u{O}U_U3sRjNxr9 zEv?D+Gy`|_Pmq6{EVY{e`Gk$Yq$03?y!p>WfwTKpOJXj$*WVTWB&D5N-gf$iuS1!E zW!tra6HFq)uFu_-NO1I@INTJ4(%Dl-2(*|E&&vU+cQ;+sgGN<&TfV4ssY+jC#h>O0 z9`Xv0pBU;@@uaVMs>BpKCK#Ab_>FT|`IXr0E_)dz`IOYv(_HV_=6n6FQ=Z6q;c)+nf!=|+0z!q8>3=tOTTXDZy! zLvU$;yPXXKZp2~N{>B}P>usrRFM!W1!%!n9xKbh1qRxG z2BF%6+Zo@UpB{hcb~?1X{3odu%s60-&pSIk53ni~?1buVqI-b!^MZQBE z%}EB91y7>_qv=ZN&F#7tMCzoTEGop9lLfktg;ENMWLV z7Y}4P&fAmUn^O4viwAbA7JMr5Mywf4rL9WdbpF(%)G+=)Q8{(zZllN-B#M%K-|*B9 zkj%nHexCH#CY;ri8Y~cTU`E*WX)uRfQ&)uwAEc!UUkK(|2#acFzj_VroiCC9Y%yw40;> z?eAW}Uls@md$vw2+!P;Ochs^$t>#z}QpVTVwo6tY^c{>G-P?1!rsbgy*3BD`pk0*e z>6_;ib^$ilNMGOH(>LKaRGjUa3G_t0%8;rFM-U9!5W(bMOpflJMcN=rZKca#m8hsv z0~*2tH5TuUY=qqRHa8PTgCb_8TQ%E zGnuoKKOGONqKNy8p3$C|l^IE|Zaa!m>#fwIpmlct!duSJ(85>4&x$crK}c?ver{(* zo+aB`wWe{5J2*M_s9^HFO)>Iy(;@B5=*dT?t56GSf5O9a+jtloIdbp>v--TQ4QKtFc8&k0LJM?T*_AS0waz&*6Vj6PHz!BiX8W{AGCVL7?; z-Z6UNIK(P%VmTcNxGzFCLcpk~;BvicXO^;HZus#lrD4Z=o%r;;#*cN^Fo!@RqZ~br z1gWQ=^6sj;e%>H+uabWvljw8Nj(TnGmAEYG90gRt%u9OeokKJ7ss@>%yyQYtVCSd4 z!%vP>M2}?C>1PUOT{#4{gqhqEwlFs|i3VGYwNSOBZ%A$SgmgY4O}iblO1^_d+(mNJ zD}+}n!d9jjpA3!L0T9p(dwNa(H@@r9xA%J~Odsry1$swpb%{I8ZDD8<#Iiaw(!X~R zEU&y17B+WP&@s}PnfCS%Y2?3#>3_c|wjQ}GcJa}9o;&=_oA>zNW&srQGVl?qMgUzugbzqk6sJ@Z3FjXzCwZQ9#hUB(a4pyTWO#tDoDcQs=8q zABeYoaTb(PY0A9MPX=@_B90Gj7?dVDGrFx01oSKqv1yeIeML9i)U?XAxVG;Sq;L8v zU9^L^BY2&fsbD#<&#_>6KQcBnfWwC)Pmkv)6%@_7z6#Rr1c9Px!d?CroBW?k4C8I9 za!fPw0(2p7tdGGwxLk`x;6Fi1(Mpd)wmP$VX_6?)#G(DSz#1xFl+czU)1E-fw0&bk zm0Mq<1#V8*#iyeAzV(Yj>520llO>}X>Z-?@=P9MpX_)0Doyi=KehN!%YU?F6;F-nW z>QQ{H?b<=JO_(>b5*Ygf%p)TQQzTL6KHF_{;nwNJ_nk1dSTyU4I0F0aoBIbY;IX*( zSG$%|bj!c(TG*7^S5sE1?6_Y;LW+cPc!#uzBWx8X&dk(|PU<~Y+DN%#(9{6i)OlXs zJ6T-l?pp2SiJ4;VgOxGK-JQmsh?OdRDk?OjG)S8uP$hut2tvIu&XmXC{VxBbcM}es zTKoB!4EW;y`Zmc^VK`^zjt`Qjt&0$aYhF?C+{i)>G%XMd+gM%e8@?M+u-gu{B|6cL zA4N2zSw=^CS#>ShI#AL1&ovar2n-)wbWLyO>ghgf4LBf#B?9Fbz^%nAGXG_0;Vl*{ z1un82WD6NClW!mBW9J3iz%lR$F*%i_+WFP%jzjCKEwjNJ_Y8de{W<%<%y-q#mg~S< zJqI4(>MCsZ1BERe@b{VWzoANLz;;j!xGw#C5hyPj3!~>5+}jl)dS=SIg`oX_Cir=0 z-|59sPsz%ezuCn8>++90{a87l=KdAdYguPaoI3BEKY!YFQ~NuJG$&EdGN0bDag4R` z7m5N92?V~j-M7R4GJ5Vj+tl&=4)$VWW ztqUXX@QWr+oHC^%a$@ z$DfyE!W^1(9*=KbOG!;_1LH)Z<)_$(LhMif-qnW4-_=3px7*dlZ=b|C%ufO7`2e|K z4fJ@qB>sUMQ)4H79@h@B-SSwTXqe!Cb-wpQ5XZvi*JdQ~E4R>cy;#jOn@Qs@on)Vx zNzZ2>wqhiITHpK5N>vmB{wxr8{H3%EV5EV zA19d5o6;{-p?GI4mgO)3>fRkl?=CJf6OK{cu6JY9l&r!(ORZ1tNcf2K#7u^ZzmsJ0 zd|Y1B@x4Y*t@dtoaEGU}(%YUlv7IL9&87%_uQK_VU!|}l zj8{6QGvYIs7QAqNiHxv7z(}LCKc17q0aVrp0NaJIx7+|eGElU52?LG}&%3rYp>QdE zxU))l#x!c7_YLggBhiHmz(suPEQ9ER*QPNq;Zm5((7Yjo-yp(+0;r7`%3EF_yO{t^ zy?5_ka8ytbTK~rd=^tw2^YWJ8?9&Gd=!}g{Iq8qiYWykp_)CENleta$$J&X!*{nXi zd;YeQ&spXB@81rjx%zW&eQAar&xj5H*4opEakh|L=2X(r8|Vs0wb%}Xk2B>(wu3&G zhTrjZGMyO)$t*`WiiBZlzMLv{~xE zE^lciHq#F?oH@E)a;rw}=@6`l$v(&wd%SY$bewxilH1&1yi4kC4#ctZLDZPpffwBL zXr%~d{0Z5tNV~SBN6U)0C3mffhX$9IiT#e0AG-9cRIwylO#OZEnc#lo291|*V*kK8d3 z>6Q2T(e7k0%${BoT)w{#`7gph=OX|46sY$BO@=@vb1bbgWzOr|qsCMDfPtgRtnUYw zlXC!2K52VtFn+=OMBG|e*-^$X_>j7WU|$MoT4L@;2^&1v<0bE1l#hyZY0jK_Njaly z=r|=GLr3P5*8>i4hLWo66YCfy3N+7bCeU#i95L@X?gjlxL%0E+?zdX)d#N#!F+)*= zL|Aw1BW9G#1~D{;*}WVZ2(Bb}9vhJ{Shp0(S?Ad7C%2Tr#DzDC%5h<^FmTk5_&{|( z0Vvr(3d;v-z9NjvP+$vIO$xTQ88W$M%%0KoITVAOz~02o<7okJSErP)MyR|J_xmvq_zYOrfV))b3us(hSG$!@#QLa4m1}Y6Wf?U{M>x{RHRzw}OjEH}m>*#v^?REUDvh-%_%sYhJ zfzr7hVeoT`tZZZ`(BAMQ(t=ojBza(p5;6SVe4CGHO_=0dNF*1{Qsd4h!mTzsryk;k zvg5BxA}J#ds)5gc@_12KKWHVA^6FZ;F@6PFm`@~V!cTo9r>+{&BX`owtHz_9M1bR8 z#RJB|k|dMh7E6vzCaLoj7x6^JPk?!O#CJ-SVG=cy|Eu>u)8Mfvt1*i+4t=( zzb{F743MEvV&;YmTfh^7C!kc zGXCk%{~ZiUeRj|B_Fc*}U!wU{Cxk5>7?Cj`>BfGyo}@K>!_?cVv?3#VvRzjYrtTI%ls2>+H5v!q8wLM>Qa-;{V2!5aIeC_ zIi?BeHKc;M*)_oQTNoP>&70N+Zk3k{`lj&%jIMLhV^t1Y(JvaMghw5wm4TnaRKwjgh6;N9|&Wg%&z{fS^d_E z6et#CW@YJ9l$83i9w*8%wRgUM|9(k*=r-(_vTuI=s-8_}{fNjU52dBr#d%8lB=nVmbdxb+-jU3xaxz&S-+66? z;+jPFCwSJ4{Zd7ox#nm$YN^l5q+R$ z*c4>3UkMHeU2B=8!Hgo8v3Jck01ISI*?2E{+x-E-glr>$suT=8iZNXo+h>u1*=5Xb zsJ2}mTIqb$H;l>YTX=_8Y9k+Yh?+j_@b@m2Qr0#lW8D>;6VGR1or_(m<;HpsUGAQ; z9C?=Nrfd7qHtC4p2dF)@*w1R&`yoNg4W09YzH>ldKhW88B@G!y|5Wu&yRK1#W&mb` z7;l(W;jqde95}(QaPgl=_dbSNE`vOF?af_yw~^L4c`-Aj+>X0k)YPt2q~ncsKUV38S72>u?h6+yf(`;ydP zyMw#sBl96&B@x3F-w@-x`?EX|8|mY$mTa2E;`saI1$;tMNK{EA=W8%TTx6+h+JnU1 zFV$=sPu&Ihl~4=VUy2=ok`Przs^qis^EKjX-cMygzVq{VTbh&DVT;dmxw_upx*r5e z1&haFt9M{Ekww=w2l3S_PmcmkbE`JT1)$$5{mj5^3KsZ=>W;f{BM!c6RXS=6dji%vOu$pQYRX1qr3@d({pCBNX1Vq)c}Ga3SmjwKefe+QV6% z?@I{Sr8jUYg&4t{tjs_MgaGDc`_%B=kT?5vq5mR6>5~JhFf;Ve(1bL1lvgj%{}8cS zXX6?vPhf(xA`v=_gUl8ZEv(9TrCPkwITh?aHW+1_kU7kfOkM5UXv7!6R#x`=mA*bt zjf%*g(IF*`YrfHxel6^<62!dl)3;Zi;`ix*!TXjHtuHk|o2~#3MCw}CAS4*p5Xo=$ z)t~0TO*LU_KRyUY6-^eg{m^T>yLqEz;{pI!8b}x2n)Q zUHujInZuf;#(ULZ*uspcwQHj;;KRTFgMWAsJ*@3oysQE{u}0dc?5`X^N=?_bbC%Q3 z>h8IkmVNed)LAv>fbjuSwo#3G&vOmK_8i4C7EwXkfa5vpoN;nBO=pE1C$L0DJ&17x zsi*T^Lb21)Wf8P|)JuCcQ~G-O+936^!i|7}lmnY{-bVK~uKuvA%|<0lZ8wQgFC(vE z82;6mR?FHhd1b12;F?INjb3?MCJhxcekOpwDrXP^+4<1Pc}jZo@LW%>9#{=>$6cKU zHmj@v+=?0{CraFiv`wHgS7z5H+XkS+7Jh4qP|co@tZw8^mVh@S@bM|jMLcY7qD>)o z-#W3eaT(8+V4HcRt_KXHYFxj!HU6E}(zcyF*!9o)u+3ydU+bC;%ym!&A;Zz!nQN1! zmusClWNF-L_j?HZhllc?el;$licB4p0FzYtNzkBP0G)KwJ3%>S;i7KLFf-n#dAP*e za@EwJpt`6a@RFbDc*3P_9;@o8A+ds-MKxX3i4AcfX#im2)cwBObxL?HlVd(i@@Tn{J({Zr zySAy`#4qvF5#}L5iA=f3cQKJYi@VNP#d!yT$1qfJL7qa$tc_Y2x6RtT0vN8K1N4U& ze}~_(=m4$3OtSExi0z#VEb_&V_ajQUX(1Ld9k7#*J1f z;YJHo!U>9ay;-_QTLCOq%QM|MffkZNNlwhCzel|AC#S?s1KE|acs#X{y#RP^0iSKQ zWXo7Q+f#iL_$ffgRQa?lNW=UETM~U@OMi$za;f*2_VKG*t+YP(sA_@n_W?ocKkfSs zh5omOB**mGxhYu(T#+_&hKhhIGNIr8u9JPJ60MsKOnO%<#K!hz+yL@tX@o2!Xd|y~ z^B8J6xO>Tkl24RFs81tiJ2UhQ0c&VmE+~jT_+wjt)JuwZ7T8WblNwWU34!~=RNfiV zvAsRLBZ*A5IWHcZwbIkb_^G_-SzTxzU)?H{P}Aw&S{cS9)KG&A#HdssdQQ&sOSQ-%n=`3>WDpg3XX>KbpAHJ@whM zXTuTHM=cww9Ava8z1k?mfHb*0gyEUbd<%R{5`~HMn$!h-AjuZA1xk>jdE}GdG8N^E zJ2y{Ly_*S-#+#GT?2l^t+#Uc4AwS-~BYJ^Fb$~ue>wn^v_wi21*SEI9gGR}Hl`wOX z<+1nLzhT&am5=`OrU(AtjUVJawc?b3z&96R5 zjc9NBF{UHLj!F{88|K0kAx3bd#UP1WGR%01JJ!91e%=S|@%&<9pgxnYQ`}LnuR2#Q zo(~#-=XO2E?uDj|-%Z9;%p#;Ako2g z7W(Q!Kn(|ba$$VQKyQy~ZPWDORCD@jnG$Lq@Mb`{!KI)Rg^WOJz#5W=PXb`5gzk!+ z?$&yPw&D*O--4kx)|UrVO9UQn)L`46J`)jioa~S=YA$sdr zNM@fDn+1?gc1(3mOer&)OC5bh92EsE=1V_JaHZvcEB*EbGE`ubpxx$70h^k_TZDZTNnfYaUW)!(fxO}1dhYM?} zY3tex+=+JM%fS9-AG0E8aM#2$W6y%aM!)4%fdOe0w`4mpJx3=(d~V#BO`tpe&Qwr$ zYnR5G+k`@4rt-~pDPb~Z0x~c$&aI`u_7jtQjHR>K4VU(l$il?z zJ@BuIEVc2tAiX{l(aR8hK$Cx8O(MTItsA6A=R4%qpo{!U6jy2+#&oiX8dIL*$ugDV z0X31Tx8C%DeM;V1Nl-CCPJ%7V^_r4q->ghitZ>ZYQ)SNBV!%CUxP(9&`k_^$Y# zKNJ-@R=v;YF2u3ih^yPR#EW`#Mvn#*?QXw$>7P|&}(=adxPQPQz)zc#RWl1D-SD9k6z=l ztB&m&!M-VgYz?|zyVkxac<&hen?miXS?Um53*gI9@K(8zc%Ch>*MLsYjsfD~rmv>P~bsSa2C;s-BTVOq!Hl zsM+8`BdZWPA?Y?2Q6nqRo-@v1qfKnvYv>pU5zR{k+CPEIR&ksF+$O+6mGA)ohXHoX zRs@8W_9WK*h$u)ZLty=@ZjzfxH@>|!8AJO?45Kb)@GGI#tr5zNJJS~SfAg_i^olNpKCtX25A1pZYF@#`U9>l9TvX$6cfHQ zmeO~rPL6qFC$eVg+$gg6hu?*he|X@4w+C_I?A=51fJS_^P+x6EBj?L^3&ITaS#(nh zhRfMd9+|p$K+(*r5D=$;mLP~1j=TC92xuwha`?u{24Rc9Y!jw1>G;MtqEQqH!Z06? zKGQSg_~1hF3((-PLQkYffui~E8Fs?YHP`xlP7UPYL?7KUSeFDIhDY0RPfIzc4`Su` zIvVPlDI&Q(>?tPK^T1dkfp8FeoLNLTFp3Q@UmpguA~_R_SnR2{WpJ0ACt1t=?hyFg zLxNh-zrFlAyGGOr$F?T#DY<`M;%2gS)isth4WDl9y?4~dfL%p*&stpWcWB+GU+pNX zKGqyyrz~8bm&WNCL#wlIxN}vcwl>GVuiZk4eb;}t*VYanK5lC2B(#jA9sy*4W6Oi@ z1@Bd}QVJYO0&JG99=NUk*&<*b`Bbv5{5$#oC$0|Oor&26d~Kv{A+Vi%@_nn9+owVB zz(?!u4eQQhj|lUQvM%$@u~{s;Ubh3uQE zDbVqVw+6_6KodE5om`toG(QQQoYdLmaMD`yh6{Jp8` zmW9y=sW32^#Utf_TW3Ged(dc{c2Y2RpJGtlUU<0u)yb9Clf}enA33_Ivp2Iti?PFx z69-u-n<7yR%9|YVL}&wfr93kp9)TN^4`G&d*AEmC1ZE`{GN$wSV@uw-(v?90HX8(1kU7{f@?&w*)!ynP)#za4cKtspw0qneR$IW@6W?Fq(yz~5yk5nsk#WPJ; z$vP7sTWW|+RTDZ6+Hu7t2g z0Pq^-S>ZOBrX;Nadz&l~S)`2)S+aeoA%pcl?*eox&Sa>rH@;DAF~lF#)$5yclT9Zq z)sJ!NhX7#!;nCMjKNSiLp!%0op$&z5XJ+(VpjZfDs&-HKD)Gca$Q@g5H z67*?T-JqgxJr_kz_mJY6;E3#Nnd$m7BG;2rZmq#$J}=!kP%W-Aine7w9sQqVRg@~V zwKWt!t1$WY?E`h(_j_v5YU|}jn=8Ooc;y>N|AQJDdL_8=q+sBt!(gfe(sD*Dh$r5E z54TR8wbh~GNRmY)?kFhLVQX26@wq0<9-<(swLw;JyHw5n0iaOFYQB!6Ucdv-2M^~H<+ z4(s|wz+coqYj8gq2HgMXg5_z2$qA%k8=ek=rd;Dzcgbp9iomg8lY1jYcg=4lhVhIR$Id&fGJO%o6YYMhiV2+)@ zd4+%JZ;P+T3}%6tGYQM0!ya1Vp5lAVpA`N(nvEr1#!}NCyD{ z5s(rUl^P^069_ny5j{2)IVki75wW_ji_pIM!E``JGc zfI~@>9=)3Wmxy9fk-wHxn|dKhUf-bG8_G|mNSYN)k(jj?uC&K$JYsfC!8@xWKl6i{ zjDk$y6pI77aNqdnW+sqzi-EDjTI8W#`}VYun0cO~Ol>{JkqRBS-d+NNe(D)1$crh3 z9kw)Z;u4vkLlav7VbV^u(o-Kc`Hc9R)X;$FYCxAGJoEBeNR*x)iO!m-jfqAAub6aResM2{Re~u7PI$h&iidjV; zczVwWUOZtZ3Obuu+O=gJGRT`F{(FoIHAQ-KaiOWHh1hiVo``0&A`0NYx1D(#aEa2e zR;O7@X|l%SyGKDs>=!8i*&xE)#XYLZg*ow~bQ;1o^W55g)ISMO59filp~zot!wr7H zu~wog_wv5ZUHL0NPq#9d46WMeSzRNOjYCD`uJAK`vbVO~EC$nMvPI&?#=|? z4Cmv)E+6MASMpg3_a0{TpyqXM1m&%_h&uv25xH9vvuV&HxW@H;dQ5c9d2egH7E;>F z?^tnxdGZ8>J?+bv8%5UhOO|B?23Cp&2??0~W|MLZK1xL(p+JD}Kn!<#&|CA#okCM8J`s(=H3s6it zR=!1c;?r9J59AiH%xVpy1(Oq*2+>cbLfo!SX~0=fD5!qkcSH3 zNQ?U|wC#0*QrC*_O8p^;Tl|Y8&fM*X663i!an)96ePyyc8-LF$GzM|G=$xZ2o&AdM z+EzqSyuMwDg-A+f)*q}}z{A3&j6KwI(hyZwD>?xWo*O+G^kp_LtdFd`B6f}%oS^Yw zGM6?TKQ6#uL;930vcJv!#QG@&n4;dOMt5z_`DCjc5Qbh!da;~ob;HvuHz2L&X1*>L zzlY;8{7CGXnZaA0ZA6rxpI-P(`0(2zjFc)D#C0U`)G%^ZgzU+&Z>YgP|K%q2zt6 zH&6T=#{=g!e6t2pbJ}G3t4K7WvRj{bmB2d^tzLf5EHTL|;m4`%+SR`D?NUt4ulr65 zmbu3zbYCs&URsHjVWRSG;-Tq#M!byJZIRn+mt?)ioV_nV7{WlKvbbMUtKsr`{o$lN z>hvOTO%9!PVUTllX~vC@>G6A6)Dyz*OS2M(>OX5Vi|8lloLBvJkD_RhUyFt71){~3 zJj>=DnQu$`aNP0T!zP$W_-`9D6}B_~+}LDJJfEL`-Bi^L>h^=|#Ld(uuFOn%pZ#9q zPfMAQhWH4XMeh#ugT!|G!bvX$h`oqS4VLGiCMPBSuRnUIh^I>noNZ4u`e(P>QN76G zAC10Yhu0WCrQ5pbwbu4hj9`tFZGI|yWJecERMi}-b_d6LplBc#tx8(Z-Ie1(i;w|3 zlOg^%x7W>_vhb5x0gSek8_l&KpLPt)^C2Q&RwJ-AS&p5K7yVM}nA7PRnk>)m9s4q!DS+H}Fr`Qw$Qfx)srZ`f1qSyC5 zT4DAI@ljErKW)OdTUs5Ytd&w2!i;|sEl>28g~LGwT_d}U&ueN)g})DLzE_@z%huk0 zGeb~}eBS-)VIgn&HR7YUbPXwReZsV2eSd zJP$t}=X_fUhghqn2=VLW>8Ts4qR{;rYN1%;i*L})MZF-!;nl~1IZG8l-sAahJzumS zmc-X(r@^Gg#kJ|IWThMK*j)3y*7rPorlvEf|8~-Pq5D)H>)6_|KdJda&5h0Wcd-{| zEff><^eaMl-s0KE#hj8O06`M$~q(5a;M-80@`IO9F`_ zuwTO-MhLieqKiseObA<4bb-Ys%TT()E1n z(@)BV_*J$M5~!8q$8BDduUK4af+M*(=()-G#)~;u?@m4V!vAR%r|U3TCuDRE<|BE|Mk+G=@MX1db)n9|gglni-cCalVY z5`%*;NuRHGQhdj((>9Km!OQ6j^cwEz4uQ4;?Q*oTN)|W?>0RAno;&{5g`dTiUGo#r zB^HO8h*ViU&J6n%ZWv2n4jnFV@F;}UT85XtB4NEqg!iqM>SH+{dg7xtf%HO8++yc6 zY*^zd5ePdgowqB|#vXKpM+dxlPD6@KQ+Txa51#tJe&yi>xg~w0^NC$95v4dio4~Yg z`JO04PD*jd1eb`FaQ9)PBo9)OX)@g&ztxANn>dRYum@o}yUn zUcXx^HsK>qVZq~!3kxbNx6xW2m-?u(*$h*ZTSOZqx*;WlV5V5dH}^$R z3!2ZDxEYVH+F-uZ-D}Zh>m79K2#2~t!FL{(v&Gs1OR}iG$yrdgzL9;8myuJKS}zw5 zM77Z3n2kcKjj^qo4PA(U<#9&xDL&BT_H^C;Z|p<0Gn@^4Xkh*UfqBqgAfh=ym<{0s()P9pl+88)01CnPc>$lv~PI2Zi5?+ zNZBl>THU{N58-y7s$z}$_&x}(L|7jDZQ{Hul7c=oqg_ml@TKH?i`c0eBuHm-=b}~K z5y^q7ka-4ke#A#xQ_dqQDIIc}0mDMy#qDs#sQ-zOufwVJ8v>56EBgWaN6tru7tf#b z<{#`GpoZ?KK?LOW1@4iqz9WL3Z-~|g7FaYjh&xQ$#H0v5t6?55GEzB(k2sr-m>X3% zYMeho#NGJq{{@MhH(GI)ovii;2Y(DaX?eD}z3Au+#Z}ve2rwZcwMHGu`#QQidTS51 z1wZueNFASU{OImf0dWL7&lK0oqvTvM+WwPM1?!9z)IT{jxzU;GGwa{&Lc3%f24f&sjev#0o!9f#7E~o^GC&EJiLbd zXjD&W2Fm`1?{$yc_CZI9G5f_rix$l?QY!<7zWrVVWg0KkMhCvOhFY`EO@e`sTBf0g73A6)Uqe=$W|0rAQs%}kr%+J*~yn4=R&18q$Q$MaT zY6p#e9&HOYuJ)1C&DRXUsF)_4Y^?BKS-6$PcPS%(lx!|YJX2ah4CJ-e;l9b^G4YyS=`Rd%nt>7{g}Ye5Nffax_pmXD@$)?)F5tgBmUt?igj>>VU)x*0RU9wsXrDCm zofJ!QT9{um86FXi`L*L&!9zY@8s^Y)<3CTu|7|?4w`sn-conENEG~<`0rEK)s?+Jn zbum_c9#+XGE3jeccTs}cd<^{f1%!h0dZ z7Pv*@Z~jp4!3vQ59CT^%e~s4wmT>N^=@+<-`y$~>C%ro_qJtWMW59=MnczH*;dS>P|}iq9pqHhth;=*8Nl2 z5mXwdK^xAslCFC`pZ#Y%S4mwu#y|XuSy3j%QdCRVB_1c+w-(t>V@8pcKJ+esJWJNO zKbUDixpkEzZkR(U;M5-LcAHRzh{s@tp$h|`uNa;X*(q%AhEf=p0JAd6ymR~RY6G3Gl zS4dWGxQ7DrTe)K<`}6YI!>jYG?CM@26X;bXAV1-K803@)cv&-=M$T>)kY}3|J4o0R zgmlC|H5#f}3!4+~SVY$oFU#_V;5Tg!4+O@f2z)1uQoZvn9az0RHw2R zb96o^#MrY5S;8+?`Zk0~^=C}Zb0TMx#pHT%=jRPc37>{TFMLM%P$l46hgLUxBc$Ms zJi)%H*JDNYY8I*k#=PuUzJ(0*Y`y!q)THyotm~_@t@jS+H9!lS_{hB7CgkBR84JR+ zCUFdMW-+*^H&tfk{z@zSj{TR7)A`0PnKA_1;?wuBAw+T(FP?t+pQP;nOhkYnw8|R% z?drUr=R;#X^1j6)H^rCJ1}AGw7Ac2;sXnzsBA;LwQ9bpu;{MCbD}w>syn+H!t2C`& zl1=R`vgCyClz;Q*lR1xr6V%-1d5U9_?;TP*t+Sa z%L#IC;R-kR6OUSa^x=jS9QMh0%?5ua_h7kyi{mY#IxzeEl$$%XKOVSxU`R^46sSi4 z6F|&X*@6*sWsi8(cktkT@e#avaQ~-LM!|`#+QY)>&c{3K)6VqtC!%K)4G0U@-Q{Ps zz_>7{l7&UKsHmucmDP{^gM&!`T7LCIg$V;lmjW^8@!53w6QYah!0*Lhfz#Fh0vJR< zF!Z5wM+pO95W{1=6}jc2U%gLSI+Xxr>wCcMBfJ#ElJgQ$bPr5x9Ma(U%5IKIr;4fG zP4QP3rO;*FK2C2%LuWgu=Pmo%uq^d$AT7n63ziTF&|1&z85D`z_MU zAHfP}`OU-&g60v?+-lc&8T;&@M-M6RYc#zDLPKS3A+y1+#SCPQN{&Q$HQ^Fv(b-33 zD2|~{UYPcS3E}X{bcBKXvVt2sd|mlqS;5AtTi?E!s&o9OY;14OfYzOWOc&ztTZZ4o za&JWL^|XC&eo8do&B9~<_U64k<+{7!@;~D{Aa6Uhd>=DN)A+BX1hHL{4!|j{WjAX< zIR_I03QJ9K&JTu z*`^EmJPErF%OMt&2_8J#{~doE z!oD19{B@^eMGt=bmhA%{va_B)6Q#hC%QAx-E2;>Zz8z{QMCaC*ciEf(3V zNYtA9M9tSUw!{C?0tieOEq}~A8di$l8dRJW!`pp}UX{77uWjNOfZPofz~P@HH00Ts zf+0I|a2n}d+}9Dl?#)8HC;9x@DTjC}lAQaX%>7W1w+as<>Ul?0q$M!JggWe=$z}XvaG*ZxQ051%jI(`IIWu0dW*dZxw#CWWs{p9SCiubX zM+nrg*4)N%*DR~rHbxAzMYI%0{64lsl_57aF8yZY&~b)XzUMC{k4cG!XzqHCvXYco zB1_h20e^>^;yc+EJ-;V$$|^CGgA$d=Su)YQ#L}A|guM33q3~G!HR|3ZcF2li|JP#g zBr2(GLQ%u;EH2R0Q5FIeb;k;X-X3OBY?vYu(s#4Mq|R-0qyE*R^r@HD@wNT=mpPf( zt|*;L7h#8U!X5mj_jL~CTo;v|zeL+Z4`;l2HOO9`Wyi}s=Mj#43^^G}xoa}D)E=)r z>Y_SAPf!0;JwGbwll;4l_4Q|DJgjFMnW{XAI@?q)V`Ws~VDFaI_2Hbc_0hYXYMyTS zspv<`$o@2I_9MF5uU~(6ok!K014U>YNYa2?S2#+Gnf71N|6w30@E~|%IDGJBJ_eHT zB;>jCBb^}xeCodB%rxV~#er=Cl=F~OXdTlnjIhb7~o)`~OVTl6kaTL)4}7YCGV;=A&n zPkCeIpC7L+aJQcubDsCf*3t^IUPilEYpS7K+?BxcJ=_8Hf11%4+Zh za$ZBem9K%S#D<=V`D7XWlu_UtbF(jW(e0rM)Nmy+PQQo#^nRt*otMzFWSHy+h*ax< zKI$GBknQX)akKhO@G(ez_mTOT+0-x7d2{-1Y6+)f+$Uw%FV+i@dnKb!+uyXW4(3gI zHkbwAkM@e`J6iE_$-7MtUO;yjLn!^_c#7BEg4VIaDIK+8LL?Q@t#t<>rv3*`8;qxP zNk_Y2!PZ80*5ci>uDqibE1?_EvYCcKf{AJ*{ti(62rbX`)B%N+1Sxijw;#pLd)3)^ z{EfXHJav~b8luV$4Uo_co33@QEtgoZ6kD0C_xA#{vOa#RuAVs9nmTOq_>dZ&aZ7J? zSwwZL`UPtu-@?q&_b&mIi3dd{rY3_^=D{4E`y0Bo(DRe;^s0;khL*q-vAX2S>2fEX zwA-@k?IP3iuA0mNl4_%&v9ULsu@-{BJlKpLJ4b5EV0?(wPnbeB}F}T zh?x*EbNn15_OC*CzLbWX_{iEK^m5CBTTpI(;WwG`JDQ8DJ2~H5qGqmh1|I@AQgffm z!7`4nzztT;JZ_+?tDFDs!D(^#PiyY|r?Pzm^KaQT$pPtL&h)Sm!Nn7N8m z$uS1XzwZ{N$2e_=UbTpZs`%cr(ANllhtSKMdlSEuaB2PG@mal1V~o@#p1RQyft0uL zC)C&<@$(2dIa&;TlBikxS0Q#w{F&{g)jhLfQ@4Sx_)jurU0MO_>)9$F!JC|d0J_45 z3`iZ9!k_Int4J(rue2NTz72ZFWH9i*^Y{ho#-NiyPG%3{v0zzg_#nT!mWpPEq%~FD zyM?xWO)iL}C+)G0n?mUEL_hSCvBdG)>-8S%LwTX9mY(DjT*4Zw>g5<9f%}<1e|!dr zKW!1tPpdboNUV@z(eF(X=o&dcK^g*lACa2zt3Uc8G5gAo7yVvqO?zB=-nq>L*heUG3uo6?S0CN2ojqmQf6H+3UK$A>) zIl$x_*c3e$`}tD@rvM=QTGu*tqpOphttQXbVn2c!C4G2)>U!Mt!+8IBAls2NcDA%~ zP^QXzPSB)E;$p z*Mepz893?f*RPhlLR-*WWgzy>u3hC>*E48CAdR4jyPqU-6O3h z1_et1iUq%$^QWJA*(jKEZt>_yq&?V19hMro+Yy%<@Ng}P7qVA)ZSbVb$>FBfL0R;j z%tbSPlPnc>zMcqUEy(e@eIRw?l+&EU1sg&MCImp00h||aR&Nj=HF3VZNTC8fSIRr2 z+OGU;2hCJB=`*QwVAZ^8XH?oXCSCldVg-ompXFzNZiw-?I;32h=TceIU3S#H# ze22s97bQyiDJFZDblZ8k-y(LO&wnU35VHSL?|HeApMaBe6j zb{^@AUmbzHC!)+_k?HE{#uNpK`L?At*-tKF4c^yac(S_R9W)t{Wt zUC5qpfRW}v6Xy_#;66~fz=2TX4TOCqqDmTM%QLWw@x}|$>7cs|5-D0N7RfEJbrVs+ zd_wR3zy~yw2iK88(gep_cfzloOcIJ5GQ!)*A9zOCl-G|SLH~0Zss}rBo^JcCYIF`= z-QA9Wx`t7m<+FtaQKlDZ_2+FjHvNX~=-N$Al}y@ms6Kt?NCW?qv}QSd~&fz3)#nep#+byXP4dh60|ikHLv>1$Wv!W63}6D8whPl9-ABG_ z>cHBCe_Ae)61&IC+ZyDJii`j0@hn6*J&aBG(k4-BA@15@WR83X931F{ZwdGnnwuV^IuFSZAw3K@c7Arb3>mMPwG+x1jwU7O^ z&+e8s^P(B~!3_*>(ec=b48Lqr?Zb?<-`_|ZThgpgI>o}_L|j*hI3{_7_k+nF8m@E) zCPVyR@q+?BhDi4EGx+X3$?isvg85-}o+-;A8pW&@ix&N4DeWr#w>iC%VAYGq0PMEv zE9CtbD9g%5>rj+t0oXnZ2_ZZOXw3hy{UbDt$F1vkeJ%VqL;%Dp>3Q&O#vj`#R)oJg zU+|_9h~Xi*H=>Lz*8+NV+Qap4_8By98s?+Ti2ue36%~H#9zOtwRRJc+dLs zCN!r79bwJ5UJXMQdG4#Cs*S5$eoszKCE3l?c(w%t8J_p{blTal_P0xjrn_+7ACz^2=fWcfyO^_)~`Y7ItOGWOU4F z62a7Ig{KfM9NB~e=ZlK-Oyqgxj6+Lj$D6qe0@=YP5;vatn6k5c$B1(1UN-xLIAKwUNorT{W*Xoj)VFV( zd1xvj`zeN~)2!7vvJ~~%T+K!1==!XcmSOOW;V5ay=CVlcUJ&@s(#5l2_YrWyGWz?) z6W)>jG3F*8?Yz=iaT;JEbdlk*9m^U0-4GBa7M&g*E4N=@-% z9Zw^1daHIB_xJ1FDd~-61wKIca3t0oL+$o~{iR%a z^fRc#$7@r@zf?R#YEugf%0&=ozA`6~yY!XOpf{qeu*tQXGg%@LErqc(B6CF7#$XCB1C7Kgf0&QQWIwQUu4b|u%3uyPSCIr8~}otc_*S*P8;6aY?X_z)z5 z2XG7^`ctuj7A*7FrYd~11t2w+hLGI&I2L^LbYO-16axV1*%%7{+!z_2vPcm!(fp2K zObFx1kq`e#Td_P@Ztu0ymHc?RA<&;I+Fny2xlYKmE;Srj=1@-0ZyGx?J349=LB*~K z)!~^dwoutXle+N5D)I?29AKB&FC=I@b4QNDgaQ_-`7(}xKQhHZ^kmzh*2~e(omip; z3ps0rsGrD?(YJ8+awjEpyHBl={j2e(9w$%T$h-Jz!I?7ni{VC)zbVhUbJ<1gDdWW% zYzol*n%nJaSrL;Nu)f%Z5Q@%M#e1jv}1mAPiQc5nIO3xi@`l+?2Aor}|Cy=l6 zgM~bZk7DGS2grz9$sdb~PIl4r$BYV7{$pG7QKY#iuzz)4KqII*Wp05CK^9)wmEhFs zcWqqv%)qq$x-)$VUw|IYb790hp55POO;KA zaOKM#G5GHAVu+CYauO>6qjqf7UFT5dHDT7wq9D^o?o|yN>y&X{RZN}hy=(Abo@1k1?-*Zf{!7yFCaYMa`BDMN)Z(q%bRoWHd&(~#9NS~=UQVc&zZ=JM zn2jiZ)PE}>7HEzK6$?~Lx`Egk#=51b7w_E_xZ@ARd7F!E2i>FHBiMZa!cmWG;!p&j z{c90K(3Qy>wO*w&hDL@ChjH+UoISgl?JQGi4~(|BU@@?#@e6o)d3@i!npV60aGWT)1Jex5|DcGu z3zE!xI4N7yJP%;{x@^vP9$ZbG`TBxl#488#&06mr&2#WEkcy^%{_Jo;IPb6i13tF1 z2W9LXPiBc+SN<1f*LdwuiFE6+@fq)KC0!%rSq89vqfJ9PaN}d(67!sk!ol#~i=p4% zbET$1Up5B@x!27E$Y(dF#*CucdC63YLi3+9C>1)%?ds*Dbu~@2iaJPYRZBpvSafwT3 z{!fU!c@$>J0hr|v&M2#Sov?h5)Txxj-^(ByJeCoiA>%%~4GOS{segnn+UlqKkwd%b z>Bt%Ogcx8(6_r<38s$rEJi+IqKo`gT+LyP$y`$694!}Ad{#4LjeU_}h7!C4T*E1=} zPALRY!<*jQQ&p}@?rb^-cLf!!c5X0>$ynpLlr@PUC6-ZJ)75xM?fmdkZyv~$d-&IX zcYu62fqv*AGH=C7Z(V6?_qm|5>B}~Rhu@i5jz2*h=#Q)EX=_`AG%I?|&p$zMnI`jv zBSM*7ekA#sTIGzoMra=Hs{$QUzv zWN6py-?x0XnZb-QnB-a%%Wsw9fu(GT_cQ=K?)c_ZR}m`y zXieYR6%_yD%<0qERcl87m9PDrzbhqpD_ZU!DDpZ)7L?Cl7$yqY0Ms~6j>zBoQjU?n z38`roBGj1^Q1h#%OEgon#kTfrF*bSO4$%*elQTC~T}=LfQRyfXmS%;&$; z5Ow%I`|NdL;GU~MLr&Szr?1tO&P zPFCh_S8hj4erQhTGbj*MX2YLbJUVL)GlL8C zNJaxsPmLO`+e}Ovy2uEXaCo7|gM%1?9G!K`(vKJ+LO9)2ycyzZUo!-ZFcIO4g4Fws z>cI`IcIpm``eRX4K}U*4rGBxZW1~OxHq*NQFg~NamOl%SN*vBS?reTvnk@8>DKgaL zJ#xf#KdQg}Sg({B)&=Df^=X*Stc7J?jn@kRJB@#{U~A&@TUBm)1uM=EwcuxO{RGpx z)44RL@-ZeA>lDSA>3yy4HJmE*q=grGRMXnfQwoI}*(+(W%c|gNQo#@0T$7A|9jBM* zFl7vTyMwd(U{@&S=bg!xvW)i3G6P5I^2MQ&O9E1`Y*;2)A0>h&l^m>z_vd}#Q2j#%a4`eTIN@&4Bpd;V>Ec3+u;{?s~hxnV zs+Dd{6gz4*_{Xz@1a+{c8>2;%mwXfCbHnvx9i}RJIkq$90;P1xRSx^4cX((e&cO)) z#5@H^WGCJyb>{O$k5bjvm#hPV0$1_UUKrJLFy~t|eGO;k&K&YW_tQs*cSMA)7hz_9 zg&0IwTo{WgfOG z-Yg2;3#U4~o$f|_3`}7-v_`L(;%cYMTlh4Dg9tRvgj>H5fm`;rGLIfRkOZDCl2qo38)hM(p}m{*pVkz39UDe?=3rPaniD1#`R=dO$2Om*#{p4m=xSVrF3}DJgkm zRBQJ`08-JCUsqF3+N6t460G%F`spbLFM}7C7l1VedfVoQwLs-SLi-a?Byz3< zV1oLGH!K}gCprKTmHJ5=d#*^68jt(y94-ih(!2Y3b`0GsQH5khQ}=h& z`_|<@?){+=c^#Y-`-s;bd@}d_KA3Po^$rR9PRIl^6cl%{W11`N_LovBbv@VDZV-{&U&pwZ@MQ;=8oKhX|St}ZCZ{M zn}V1C3&hpJc7>Z+q8v5wh?f~>X`(yd^Nm}uqNG`+&iMGAkih0k=+4iEu|oZpMh0ot z_k-LUbP#*xc!A=1ta-PLl;Of#HdcG3HGar;_F2hG&9-3%hTWQPVa3>hmy?B!yzz3W zEJPE<2CMXn@Uaekc6CZxzgYS?-7u;L{X&mKg)f(!l|wP*3?AeM(b>03I?qKT>M4(f z-?05wIZgw!?V;|8oybu7C3F_lBexG?52&7IEI)*}Ev@z*KWFuwlmC;6V9DnLVoy#^ zw?-!LW1}1e}$=HCsTu@Xb#uo|fReYQ`(G0+&@ak%VH&M5| z2xq>VYip`Czy=N@;A=>6V2qGApz*_rLdm^johwc&f+#C#YLj(}gp88sU8P%DW#v@Z zHO8S2^>r77)61`BBG{p+dunxDOTb%Ld1ZsYx^z5w^~xZ{zsi&&b<)|V#1f1rx|)T8 zh!K%|7{xFt3HgjH;RBO%&-}s<9>QVDwe-B_Tpl^%K`yq-5$$aI_{6vaqY97X=)Hk) z*9)WT6U^Uyt3fSctmucJqY!qK(D{&%fukc_Ht=MGkDt$RfIp;vWnY`RG3O*I;#@)T zOGA;}xa0g+Qv9NQZ_j;@Z>n|N*&1G= zhac&k#9AW-nydpt)Hh;@U!ipre}yR8#^Y^l3}$=gbZpjjD(gMCzYnQxMIZ}WPi(Dt zGa9Y)^<+9s&Fgf#{#~a-5dKk8^udnGdgTL;8 zNv#)s8z3)tAPeO6`I$n7W%m-QIrE-81dqC0=P)RsJT2G!N&A9j+b@2dJ5beKdDrfl?$yow?o ze_ddY46!r!C6--pE6>r7zn6FDgR+lLTj!q7=6*$*$-Rs`ECj#!5qIXkH9TutuuJyk zxmw=&7Vg|iMr7lh0;fh>+!R|GSR+2T`u^0rww@ zmQmJXKD!QqVUUS0jk2mhb@mZ&1ApKVqGw4+7QV{iBGMKfBFANfd$ZD?u{+GwB_u0} zQ~U@k-Ye@8l5T4;i<|C>r<@f$PU}|Q9F4Cm&C#v21V2^3je=_C4Cxo$Ccjm2k9&&z`U?Iq} zbMX1gRr>49w{O1^Z7$h;6!KwcW;An5#Nd4j-0IP3f2|-;#-|Wv1sz_wa;5%uRS+Wc z1psz;QM|rkdK@1VL<=qM6{TQN5VgcW5&8rJ;$wfH)VeZgq;UBqU+5~2YwyaI7;p57 zB?zM>5sXnr+H;24YYcO~O-g6cAr3N7esxf0aZ1TAz*Oky>L9z`;LE^sXS-Xm1g z*4GI$X_KwZ*QM;^A8PIY1rcixG4%oEra;qN z5|~yRZknOLn5cc$(Vu|iPxS;B+4@!TlE}gKjy3yr*PB%Sn8;`B^=*5S`qva-#_u};20Z-i_+-#5 z1@ZErY*|-sD@kTAK?Y%YxQUAsyUBF<2 zly-+vEeL{4>J*w<>T9R_XDj)s1`P z+oE_MjQE+KSItVVljmhx$NTH(58c&tm9viV8V?S3j25|BiS!}hwt5qj7yIudIko*$YL-RKi~qIjjKbg6oBdz5mWlL&x}`yPR@u;XodtANYVuL@m&z&UiQVMx^Ju%43y|H#GVBa_Kt=d{@fujAUJ5%~ z<`sK{Y4N={o$%br7kw;dV5=K*Bc9SoYn&URRXr*yCh@GkKm5Gzbp=p1l*YQWzywIo zbjHUJMld#L7M$gu&*;d%CQ!d6GngA9y~IMhMhD_}8oewK$1e`0aoT9|UHM?r7r3&@ z?}xEc~-n8kU|lcp9; ziya0`nu-?XNlCXmU;M5}MEssF6s)C14v=3pY)D#0h?7HNmzl@fMjolK`v))0@I+sl zkItrgCiniblqOLaC4{nf7_7O&Kniida)T@;zG+|IVQ66K;+0P5V{+%%NTTyMU*VDt z=tNK%9vACEx9HRDKx1>ZJ4f5b)QtKqmXE-s*nMVkRH7AK0b7=&?_^CKmrHTodkv?-hzn_3H;z2dtI%+r+p*1LJ`ADGD^v>SM`XUkV4{)FebzMJMh3ef9W^o^WZoZ5j9|y2HqE|WMbW@ z6oH-fRBTOHWqZar+ElghWmE;8pXeHudL<*%T9$UjID(Gc2BH?qZ)CtyCV622=Ewv4 zpx&u?pmwo>Ue4m0s@E z1Zd}_A@)j{fux3v0*_{$=>FYz`UfB=_E`B#arsJmLoGA(#U&O~KBWy0@o^)cGI9%7 zzjgbb42LSoLOJ1E-JclDOfyVdleGFWHQJUArr+qvjYT|cV|%G4*UG?Td`utWOF2Os zf7X+2tsbK)F6JjDRDbYYuc3!7iG>`$_CZF>56-QjiH;!FY6r`;%)fT^g~TZ4^sY6V z7slp!>e9B#BP0#U2PGe(o~_wy`nt=n(A$4_;e=S{DABZ3GRtdjsKh(b-U(NAWu}cQqcPX38Oz?1fx*Q-a zpz}w9nAZKINU^a-Vn&;bV-&u*M>9)^iUn51>4X(yxagrOTOZG-Gmz|RjE znG%(NLM!<^N2}0y2I(y7g)>=375#q>IDn1X$A}!Dsd2v5(%pMV@7z}9hucLl^Yfiy zUb~>K)c6;cn?;>y@w&yEoVc*!vA-4h^Ykr6_ut5ROBa@*8)kf6rYew! zo(L9G+dI(9`?>grQR#`=rh<1V64mKR@qj4o6c=x9;`np5LIk3npI&6ASmil<^MG}e z8B@_pc$1j8YsZY^Th8WI)Vz8T6}X?$us!9$&ij_?Bt7hnHo&+`Uwev~P3_c)p|_obM|e13qz-)Rk2+Q zO$CUB180yzkKTiwyPb}yiUR;W|M+2e{!{2gu5$m^TYL2Ba&^Y7-CN5D$(2`>-uy29 z#ZP{{yk5RG3clV(yTV(9NgcjzCH_M%Ju`8br|rSj!M0sx3UaXz&g9GeJbsJhq@`H6pfedL{T&9UF%&)1ig^vPOo z@wI@q10D=}(826h%RN2UJ!f^8x3|{!Q)k4c=6+N*5Cei11R+?^2@GTgW)y;yPkHZ5 zoRk+h?sw6{kQ!}q|HiOqjKiiAF~vLdEgc;r^!%C)Dk*KEv3iwj;ZR1C={x% z_f_pvo^z`EBqs>GG96gvfeL5yHaraRADbRqUEY-P9}#hgpk%FBSl}$c;|FGHy(ZW% zaO_jj^!$a+Rb6~tHSp6DtPFOpDyUNl*naI09nM{-v)^j#XDqzo>=h6&dJXiy8ed*82ZY_8ve@?pyya zA}WefM2fVCs3BGOd^+#(<%gqjGEBE7eSL`0;6h;#xf0#ZWgodl#w?_D|}^b%?y zg!{P9Isd)?_s)CXeP^D@WF{GyVff$BC@w;k>k;c{UVmua+Djo6m5&Y7V-!8s}dQEh`O*HLts*~ zr8D^xNMUDIt?Ray#MUyP$mGf^>gq?h1_z{&XS9sNfw<~s44eftd_~MNJhsJ{wMN=* z%q+x^E6wfxD|=hpn^|v#xH^(OzHZj_4MsFS9vm~N`ck8wj&mp^YTkMv;Nd<}-fO9I zq@pzPukjYHbev4>cE=UnBo{fw2w+b33i*!>!&P9AKdm)cc&%un>@{EceKA;XNy+{B z4$`I26pzc^Xf*n{gL|l9qh!m)ogoN5k11G|&b4gq^4klSx zQvp$bZM<5}w@gW=Of~7R`xD2{@Z>PbWub@EIc6a|s{bOA@R}4%2i4Xk_7gJHc3xpv ze>#j+07E$9TBL>QF_Qt*s?KPhMbI{+Z@BJ@#lh@e|BKqhqre)!kUGuD)s>ZPrf=F{ zRz+)3c^^_()J`;*U?YTrj-a-)u)|fgPnIAD$3s)y=YG8&#rp(A6(7phoSw`imqt~9 z#?ddes8#sf+?Gzl!Ae~O5NW9Zu6uYo4bGL43|4qUf^%%JqFl2Nf$?}Q%yz`N*-&Jq73WsOg44?-lfpeu0i? zGT1AyX(X?m(m5X|+L4iONO{d~D7x7K#$=~UFnF7ork2mroe{gM1q*3VbDxikwQ7?O zuw7u{US2qU_Knsxna4w{5SdM>R7+@ne)FIo^edj+8tXN82gj*UzLnM`K;D~=8&s^8 z6GY?n_Uju79TB?x(jx?=1l_mpV@WN*My%koHT3Swss7&B4p`AZ19qV5`_+{wNFz+% z1N9?0LYZj^e=uH$Mf?qM=1<+9nxN}JLIqRSC|9VR;zr|ii_Pe**m33sPDh zR=Q`a8_h95DkP%fbyt^M)OK&=XJ}QdP@_Xi93~XCo}1Ot+>J!ut6UF5Kwqi#&lTsoMDZT%4~!_p&Z_;{mVaTz)v#fd?_ZqB5RYkc&R;Jrp>dFVvepD%K6_@;Yy&TV#ctDzzq>uieSp1%{3 ztSJ5v#{JbVx@uJu(c}?;S-%Op1<*OJs>crPYw-5&T&e(3W*xI!t4)oirz=u(Q(KB( zT{}Jbp)@E!-noF{f4QLC8UI}zsvbPU(TYfV)$^;zZ2R2yi9tF3(v^|u?AKLxBxW01 z>!&_YIC^s=?1fB)TTs-*n3nVOkW(s;Cl<1ko13Yr&oQv{iVQ4w4|jFtDR@zb5)u+^ zm%>+^i?d^K->fILx6iGT`Z=1iv$XWWswTG*Fr^r}@rC{yULP*~Z7^Z{EJIdyHXv4e zX>!R8GOP!;Jju?*VSWg>Elf+ess-4V5t{ZZE3t6LzHp@HK*CbMiu#&uNeh|nfD)lt zGH!lq`7Pme#&Gr-mc4R2UESgoM2zr5_e|K_i*t~n@{~i-1JKbpZq#bwLs*QLzk^ce zF8#y~0=-8nu~^~4_H=rHb`(u);rR*T1i!w+OKn zN~;sNSWpI2bvi)`;Wx*kkkkz)#8LHbP7ZSUc{Z+c@Z_nNn9eGoSvV&d7Fg(aKkNu^ z1PmfgRXDmAJnH+)(f@DVkQ07yCZ5YwpPrc;q)r z@!*xQAKvpq_0u2D`2?9sUL%li5O!`H+$d&9Ic;hx7U&7=eO*~^7P@cc_A?@E)~QI+ zbqN3XlbRD^`?}HeRm>D%PiiH(>jLIo;@AI+Ol&<_*eKen5GzAQ`xYOE(U(_Z%8CWP@Q*vp~4xvJLLPFZLNTlTyr-?}_57Lb8~e%72OZ!;so_+b+HTFKQr-fUe+%Z$Cr4{T4uHYF5XoMp#_P; z(xJxz{2RbN>ej3noqQWE#6^4!r}x|(rW=x)I5oBZ#5uG_CSPh^9AR!@1p`K;%XD?;~U ze?#Rb7~$I)=QZ#c272eAbJmQrspjNS@P-~7l&(L-ByA?Dl>aFf?|ehaWuCR6D>?50 zu+Xk_U>Q0I1`1X?{y_&6*Trpwb)ILnCf-=?)8bWAQ>*&w9&|_}94H$RoD$vK z2lZDR1Ei$4hUd;L<(QRC*qfA@H_0Vpvnx8DRDY9p*uLR$(zBc-!1HZ!=evTHlKlj= zkqg_AjW+tj9~Yo5KtPIK%>NSUTzTNxh4S8dXMz~A;VoG%eUc)w89bp7A(yk+ZDNGC z@Yjt!JMx}G-L|*G=kDyP`KOb+t=BV9h^2Z5haL$v)fM1~$>Rs2Xd;eN;5xsXi36lG z?3DwDbH>F;K;mW$WqZZR_I-14KN~~ENEdAG#r9XS?-w*1 z4S!Il#HkfsGkYkeHg5ydepj!I`+VTJP(n#{oU4Kf{XHj^s$I>j3Jt>Ml#m>Hhi?oL6N~k~ zL=gbiVA3F_zskI#AaluOozwL?f^T%Xk-ahP13eYr?>*(w`9t6%0xE@kUN`s*zrwK2 zCM>T2%$_1?i9TTwVB_QeaRsGke96IQjAj|u%de?)Ts>Cxqj{y@%~hi7 zkkhiO=*x!tqm+sWyVA4*-H0tCFLP`P*e$(uq_3|((WUV4Om5Gr+s?=ubyCZ2a~v!S zuIkHbvB~-JwH{C|bDEkb`_qo=NpJPJ+mG6diyBr8LZ+?HsEo?i1FqV171|T_F2$FHfZiC0IU8+{bo*dRVzHpWqNH13XT{NQdjLQa8f#7EdE#mqosZk_ZD zkfpVkvKCGsgF-I&#rXNFXPhgTPx5Tne`itiQw2}YBe%eC#wl9OrHHTK3oL0u_w-Y& z8r*QXd&cj3XPk1r0n3bh1WS~r_lgGSZvG=`Bd4hZ7cxHzM-~N9wom+sdH&AM!+w1K zr6;FIzt=M4Jd7%Tp%*Xl#2+96zFkIi8NOcBAF_4M5VK}F z6!h!RgvC}v9ozpYcAqlfGg{^1hmm#ubvJk1N};-LfJEw!-Zn2W-F$K&eH4CX65Y_* z-^#?WUQ2r*?7OSU70k7N;uzJxtG-_T^0O(27(+a=ynk@8b4KK{+ux$Ve;>-ML0+y& zjOR5>K(!7!jzwh5*i1=vO!oxeW`b}Eh$iXn7Xfrq9GmMjeJgXdXZ}`x`{5_y2sNo! zl$%;@K%;Fr{{f&)-eATKyv2}Ts;4OX*s{4k)_m2(C1*yYS~gBoL?W`!P!`m2)cL?P zCnwZghM3{jC;r=~IP1-VPH>05J`w8CYn%(-spYy~bfe)1m!O^^4jg4j%;4zSle`8D zUnbzRWeurYQ$+6-KQAA;mTY5ynI`)P1yE!nmAqWyz#Sbnk|N zidP%=C=I7uw33J7qcWJ>Zx5fQFJq^iI+fF#ZTS40{NKtH&TI5(=4k`J`fQ`4dxh1s zJS+i>9;vDT7;k!o(_xozX_SCmdNYAP>Y}Zn_wse`U<=YT+}sbSk_U2|V=U%$boc50 zc=X@}VFPBc@I5M1O&zdBr-&Hl5f56spiz}G=3LC6k%67EtZ)`CGY_t&ln*=T@gA*s z9Tw*5G4h?gQvFcgtxq&0qJmI~$k7(|fefwDnoq&$U6MQU38`W}0@b7Qn}3@7|v#O~#{5rKp4hnru|*cgqz05MdUw`W^N@6as#R7!?$$4L7tCtWIge{%lgXuWR0=-65O z8=qD_rmJ-6O$dQ0KTH|Ec5TWc|6b8$m)7^ZogYfC?!mzz#)!R3zZ@+D_-VmkhW4(b zQOZW%uH@Qq&-tQjYn;wD=g6kvirz%XS+lQE5nJ`7574F9aJ_?6oY&elkfHN=mgY^S zsQmaFv@6|D8AH^zj^%an1tOJM;|+@LevzUJcP;8cNZTbzdYdsJk6rGOf?c{tH{X5Q zk*d%8ksTZDVmoJ`xm^5S{-kVJu@bVmVSk8gBi~d2<7|b^drSrg=hf+{B~SGGa~E8_ zMoffERQGRGf2keZXJ$o@+%jTV@3$Eo0(MHzEXjJ$=bdAoC4j2DOCaR;UE-9jd8Z}B z{#M$zrOfj+Hq~DzbE^@bE*Jk6gaAU>g`a}0dSa!;OCx6(7OM*OT7S+nB<9e2wgSt{ zRdzOlq)aU>LoE*v9JW3Fy_l$?o<=Q1_Zck_v?oAam zGz1N(h4YtcfyWD48vFHhpIb|JAZ?E(0W?9*tGyr?Tl8?3ReW^iSY1ZMG7EYu2>WY` zYq|MlG1qQxUcpD`!KTvT@dFr*hRbLfOV#`#Ab@q2Ch+m_OOiZ*Rfs|Y_FGjOepBtJ z!8&%WAS+8%^de8*7qWKtR_SWdi#=Y%`{WTv^Z4z1QlUx0Sa^Hl_Hw_5?Z)Y4hn6nwP zLjl>bJAC4qrb`4D8+}s~l(8 zktItul6B>Mk1;Z$q8cI5;<%yQH=W`31dzi;Rg+Jl0kYeEeJu>e z(@?{rfW7&#L$_H=##zo)7r+m^CTv%mqA?Vp&|$0D6&SMA?eBkWG-hJrzF(h7D$&=~ zHAk?lg6A{cHTsugBXa>Fj_}^U`4Il{t^m@F-M2KWVzHce9+1>a)mT8+4q~w<{F)gj ze|?zP?eLxLi~u;W2mtO(%FJs_Pk)=NDR~TekjpMOmoG9jS`~1Ws_;9gpU`!^)#Ab~(3&3cCq>ojr!IlC++^K!4IjU-et2(EWzBlW0ayrzJDAf%Yk8&;2)*r zIl#Yn&U6n78>8R{|z1fS9tlKY_plw%GQojvV;THVU3L;kNc;We-v{((ESB* z-Fkg>Yoj*io-B8(mYqNZ-g&al#JHgaUMAZRS-l(>G$|w@ff~v*H))&kW3G)5Durv7 zOfOFd{7lBLYd>|}6G00^$q>`bnYHB`K)sq9!VfGSUQiQH{DSk3@>2}y4+v%EWgae+ zVYcNEEp>A1AzgZ$!HFPh)8yZi)rEPB>%VmRo_h$B2{~v3x}Jrg<-PmG(v4f&f~^7D zpCP|#R>NJwN^mSlFBn3%w)fIgAe*uC3#Rz3;o(;`ckXNQ9rPv34s(8?zpMDO?i9<)^lxmffzlJ|wf$gSQJt&n(-4cO z*ge+%%sz~IX5kZP5$AG@gpu{qUHiup3S(pLi@i~qEZXLW>E{Ltth6seu-w_hcMGS+y^=i?4X0MzPf z#c|9ZtHNc)u<=YDNd5Y z&|8+EVZT-35@)Z(=q<&3em9RprE^lcS_I9JWK%8lY2Z{0*(`u7Ii6*0JLn=V(jQ`Q-y zh4@yjy9uJ#^7FtX-wMYSW?iDx$NMMq7Ra`dmHYKQVc*DCQvyJ~2?mIE;bil#UqCKKl2vk6#}bp<4s-v<(&mT*u_~MUU*Vf=4+pf@E&BlUL4Il_E3L z^~H<3SYVA@y3wgMJaCslTALuI>byOQ3azLrmh!jn<{Gm1Q>A-e(Jm3IsA2cew86D7b`a%z8Ew&Krc&B2Oi1&d zRF;X)0xZOR+|L>tG~dDX!y`1T$rW+S`+%I#*HTRNun$A4>(Gt=M3;~5kC{adWs*l&-60^ z>3k1iG5xhE=KUw1Xh^;R#JDjKnC(P$faT_9KXaUzw1MQvuH~LV_RbMZR&7p99`28J(EioMUOHrN@uSxX7VLHAP_q zbMKvrx=O*#^FiB21C2kvm}{pDaWf?v(BVCujQ6|2s?@!Kz5eNB&wi3(GT57>k~18o zGV0ae99ud{@%Bjb^p!iVAw6B7b!0@HUpu;5kuLl-66ft;_q0A7iAB`@AzXj7ztuDo z06{6`n!rL*LEhG!Xi|SxKZdXo(5jE8V$k-#Dy}9(tDa>(M>G@%J6je0l-C$t5j*HG z+wkU$hLE2O4;q6ayxMNa%q28P*{SAT94lCI*y>I|{KxA5W&8j00B?hM zM7Lx{z6Y|qJ5~7(c=QQwGcTRqeMbj>T77v_y=b!N*+x#|r2Eq+1!C>19UJ*ox!uaq^F&+?RgiX0lh*IFG z0M@1$xfawU@oZ9E(#^ZQDu)AwIPc8t&48X67qw&r9EP_WwTeXiQztO_=1Sh?iS^r? zj-rJtKUM9PUfk_3e%|?HMdX}z{w?4H!lGdQYHMSuM$HPoj*+hrdGCh0_mUJZ@gxC3 zrRN=5#ymE&84!tuzy`yN6lcaWbQqOXrd!cxV?7Jb}WEqOR5KBIira-I}f9^q;c=13hBuZoJAC!WLjUA zm@nz&Dn`UE?nLJpR9;JH_lZTrFr!``Dfh);#`3Qg1S{7(L1b=TUM530i1w_>hp{xm z`cI2+1PMP|%ThzbfLvx{mv-g1K}^1-Al#Rc$ExDNZzc+;CHlqQI-ye8-AaAo&34WC zHnNQnD8Ck>X9m74EfJ;>Ys_m?X=G4yXjvWub|*;%Z0dT}R+in$_ZREPErBaP;JEBhx|Bj)qZ-&i@}f zsPQwURBsG>l|>IZirSj}0<_E0EJFpfp(_E@P;)?oCYzcZh>>DJiqmhk zv`T~u=%`d5z-XMq%?{FJ>!+lnD4iVrBY5zOt zs_}jDIYH^u!00HiPqj~X^pWE5#4EHY9r#Si=CoEs(R_A)+5FcKvyHb68|!LG7Y4`H zTZi(baN_+N`aavGGya`&LOi1-jp9lG5|>jVG)-9X%HX=NCR_TRAEc(7USrTmn*hIz z-yiX4h)Ukc;U<`>1b{k@#2d5D<>7(*j#yT4{|F=vJx$gJG3;-v?19}%uE0vF6Uo>IH|CB zo1E%D0dWX3Eb^qa=bwN$_;7D3M2Ka^8MPwQUkPRyHR_%lVuWvxRQ(3T74Qd~=R@A( zTOwQLuv`u(EO{$9(XqEzsH%L&^6Aq@Ua!=iDspetM}fU}{H@R<(szS}5#9|SH8=92 zbCUo-obGjV1vt?%=TMstZ#$ON&sDTD#q^6;+CDUYW8+uwpB6#GfbLdui=0 za!vRe+}T=$hb9#dmMRO}hTQc(IkmgB^`n6K))eQm(zS63m|{ zt+rbw_G2}X%cQ-EdE=;@Bkh%jSNNuiV`C9Df~l8a$Te}$GYD@7qb^oc>KwJa4zj;4 zmDTm8iz@CC9qOr(Y1$x}D-PXt+E^mf>fy>z)oZsLX!SK_*v^NcDj#Jr{hJ@TO2*F) zwUilSMku4Y>8W~|Y6xdBdl*8eYI6B@aN+kdg|IWGc=)EC##rJ%s5yTBMrw|!ziH|{ zImeO`eablA&Xx2aQ&;8tusFV@J$b}vt4((>+pCE^Yrg z4!}_r8a$mmQhDiVb)D(mdm79Fx_0S)J_qh?FHe~2oy7L995{!pw^?;fI{(Qiwb*~Q zOk0;2V)cr=tD#j}?KTq^Zmz94J8-<|OjIfwl?Nsi1zI6u5ou7JTV4WVWSKZoF2$iwk%as zhe4x_15H#w)*Bc28QYRUejej=+az(?jeJ+N@Dox@6G3f`uRP=>ktR%1jgX~NxAXr= z@d><#Z<2v5+V|yzkmcMBhL4YCO3mJQ(b z!C_HaXumxz({D9>)FDo%KF5!(5J`78$1OOiwZ>VN>67FV{U5k{fERkxwfW?(LcpLg zW#fi298*SZnAt^&qM4aYF?%h(=lLIMI+7TxDlx&z}mH+tKwVVU!s-!G;&At0_D{EcvU!UZ$!^!X&4jZtkRR&^`J?#yG~RA(f3G3T<5iWlZP{v%X9p;W z6T2W*lQO}(QdQiSzA0N5HSySKv{{sGQ|!mwk#4~~gzQXz0bOEt*L=b`$?De!Z7j9h zccvSOqSN(i3bzJwC%8-PI;U5Yl~c13Hcz!wjW?rOr@sYYlD~MvHwU8g=Rd1-TX(d2 z3F(+GKbh;0k4Bawy^${R%X>3s3m+r<)_!T_XT~e-)s6tgqdE`EKTaEKuGAd2rX;4O zL}eHyhJl}C8tIOS!p5_-39`{)6}rK?@!8N);}2m_#VzCwb*-oPq{dho_%K_*zM*%2 zd(6ydQIc@VfQ$Yf$HYUD{&q=ACUt9XvXzGt*cw-r^cyQyVO!)ed;^wnK{8IL1+26Z zpFEha}^i@v@w&d_~rVffxdoN|G| z#if!zi}Olo3tm1EfA3=f2)+{SHWz673B*s4vuoB6Js`Te6PAw)hMVgW04V9z&qNtrZ z8#DF8?{RSnpzYjz{c@C#nDHH@iY2Da{`DueV|WqHSr&dxjZK%*i=w;w?eyz8haD)9 z5b9WeE&M}*}^^D2z zY%k^znTie{Q{XtlxK@H~D-X?3s3f>i=qDQTd%#V4l3If}>Jfq~n zTBE0vxr}GeF*mNSubYS)IsB(k1iqKNsG4eBy793=UWMVEM-~z$6ifUsjqRNmoOVYC z(kSl35b^|qJ=JNUfveHxXx7W==MR6$vAAGEErqQ1csZxau}}-R?A>2@#TYSzj}b09 zs>v!Nz^yG-iS%sDCN7P!hkYOPCX1vTVZICm^D7-djVXsq@YzqKdVR!Ap0VDIl~##x zHAV8)cSvPw3~Ai(B&M# zq34gn+mPGxh3^3te;uDGv;&-?X*BG%9|_{OT;z*|-#{mDAkr)Vh?nWpsL9cIcB5(6 z{V(ji)7Id-i7uGFC*~Yg3#A_*!cyEtQ%PWrQ z68ukym(F7i)Q<1$a_C^p)qo6WK$U3imQHw|32Ir68eW>=M`gA(B=kV&-`+pw^Y6uQ-pfMmmhv{3y^?)wEDv|@)9HU;=rQHM`{uKw(E4A_fRvQ`uE01U#MJLsSe ztwheVB4(?4{|M+mrY$O=aH=c4)h4vHD^C4h&UEHvLh&tz;Vzq}5`gdMeUoNpv+!Iu z$28!v7GLAmKGSEYxA#I{?21ddJ_JYI?`lCT@h$NYJ(E&oyx5RGM`KrhiqRdl;U(xg zed=Sxjm!?h`Ok`9%VYAb_4SQYLenHDK%X`*v`~Aw5lGvCzYG!LR2?<2Y!|b5hsjxdTb$B?-A3u0p8hT`_ z>u)C?K);@eJOQY~?UD*(6vFKi+j89b`NhTH6GB4WV`Dxrl}VSss-GHrwlbi$yYXff z=n^FUQCv3pV#FAJeY>OFUcRBDJh;n(meU4RJEOaCiYwU$cjRR|Vi=UUVE9z(Zo`JK zSO^H}W+Ddld@;_}n3}B@l!BtLZ+xSKA^j_Pj7p@bKj|v=z3KhHfcviaH!VpicE3-Lo$YrvXtg%+L zI={FYq?e{^Z2WaN8tkq0s5n`rNB&etv_FKPQ(#e1=Gxw7(P;c)2wWPuk}5Zy7z^bO z;pFFmv-8fJ*7Ed3ZZ5?(O;%m?3Q7p(#UpgvCXhZ!C7zdgMx|BUvZTHD3+WV&D;^!D z1aVQPW~RGYWUo}DOOw)W?CS8gC3&q_zxWzonwO}D4W&gTUrdZp5WlNw8yp}|dWTuY z!T>oHG7;*}r1o`0AVe7B?v30_J>qFf*$Yg9z`timH#Q2VYTFRa?SEr_W(wn~Vi2@; zu9^(t3^Oy=&{V^}d&2+reDaO(vu67B+Q_NG&CjL3>ph&GZWpF*m=1h|H~W82kIml!%TYuXy&HZ&4+Kwoo3%;@Ag(bC8FgO+5Lw*?R;d`-;h6|6;YSTO zMopEKe0TyB|P<{AeBqBG<=O~qiGLSZ^}sIY^F z(t2VNP$6l2obK~;=0-8#H)spA=dq+PL8AgXB!cs;(bJbVfsTOXvHzDTu$M_Q)u@$@ zpI2wjRjXVpvwEtVnq4f5T3^96{gHvWxRM+BYwJbdh_OO}RYln!#hbUDpS5sEP0AUz zCwgC{&DczY*M3nkIEzwCav!;IvG6>^*vSn~r^uP1uqfy>UJ2#W;?8Z_hM4g4+D}~Q z^xOe8xJhG!LLABjp|n2X#%GAjpevoA>zxyq3*GC&_3y|lfgeVfO)aK0hS{tI&UE!J#t4bViH*uVr{B6&MBqyFub|3*I!#(8*L$l$&rc)xH6QP3US zJm8xAQY~pGPK`l|2>fSO^%ybJrNUd1vI4zPQH3rn|IHx&o>olW7rt5KIGZCs17r|X z>_bayv;OZUDlG~&Ssvz34@H;u)U|L@XUgK?%J9&idTxbeOAX2b8!Su}1QIy%9WmKNdS)v|ldFL@>Ug_8N`DbtY zF2>To);$!((cNqU1v0u|B~P)se2(^M1-&C@G%p8)i67MFQjdLsFgMg_ZWss&*z|}h z%6_W?5xZ#s=t@B`DTQ!p_F0E>=!><2bZXCSVMW?wKsqi2q~pU(x}<8`u?i{GCaO1d zn=hh}u1c!<#@#V$sibFD9enBwO9+S3k>|Mn zHTZZWIDEsi)zRndyjmO)9?TpmcjPUWgN+IfiY8G=&kWq|$k3oc0$Y zBD{;`6ptvldcgpRAhndOKz&-FD0~b;;3JgHXE&(Nj42=Hf04b=pFu_ScRT@s+TC|zose+2h9Yl8@*094pq3EO}_hPXNDRK4$|^K;?$zWd(sYrZb%4UC<52=!+lG(}QvC}shjbM@18s$cs!LsLO$qr@ zn|yEMQ&W=?l^k<#(cd9tLks8~pxjK_V81{fw!b)i6vhm$j0cVm+K0ed47la8HmBEJ zU>7Eix+7-dro5b1E01n{MQA@Q9nqedz{FQ3RNBs|DjlUU!KVaS0&{^%aAe!+Rg$64 zWdXOI4T?^Y!G-a-@HNzK<;Gr<68<{9!&8l>`tRsB#e0_y1OEEx|4mk`@p*f{*f7jD z(iAWd^U)Y_!Z1dhoE{U63(7Q53C6uE1mk5plFh7ayL!K48$gKRu2vQ!j%TTAeL5gf z^uBW#79cw%%MY=!Yok^!g2D`xXMq_(zF-q5{3u788i<*bNh-GFSCHXu%}vtr`jjGt z{01gzZ6}|8uzI>%(3Q^2+OMVdLCdLu+P=a@ZbWUfsbKIi$A<2JE1M27^n!)I;gUucPaHIe8s5k zkI(h(PJL%8 ze&aZ$4uQ4OfPDQ3S+%jxtuJ7Q@q|RkD^@IpY^v(CGd+iJ`jMPG#_e6d^q9Yw0bAjW z3l(z@DV@{1TAhO>HpZ{ZX1~qs?d*|HO|VIuxSERncaE1t~ zyyQ&|V973Coqpexmf3IL&|W&uqjcD?uV3c)KoJTRJ<}^~X8?3fQ#dc)^5_j@0$1G> zpiZ7@%5M_j)tO;`!1jLy*}sRA|IhPPb%ytx;Ysl%llZWQT8qzbsP+%m_H|!w)9r25 zcNut9H&_guCQxp>z&5arEu3!7FqSjoUMnJrz9z!aj4sP;+YN&aGEK?UArXSvOZ6!6 zyR(2XxHLpb==xikcw_#kMj8lTlVKg`79!uDY2Q7F@*;iz;*?91AXnF6z z9znoI9j){m(@*Lt7P+@pFpyYxXmNrU(V7^xP!K|3i;y`yZ6H6+5e1*2WQT}sYj_?o(}67IcP~rHXJMnqv}W99N;rrgx+Y=%i-gE zUSfLgL6g4BY+ce}B<${Dckczie6!o>5|E7+ck*C@^9{9%_JJKUzn7`pi`_Ok+-+A| zw2X)I(-m6mOTGEsOOsaX<1_?i^}TfHYmc>@`f(D&+?vF4k$3opgiDz3_sdqgi#8gh zT2)zZV#`zx0ADg3qKgV?h%C&Ji8teFtIV)Z60AosBu4Ax}G@ojI#MGNe~VzwksSzPgMfpd(EW zi^09tdL{04m7Ef+ox&IK|Iqf{QBAMwwlF9N3Q|ORiO5n^N<^fDlBkGLDM5OV5D}0j zO^p?;P2ylPyefHkVbv}ZfH(9?=3iUehsoB7;MRX0+$;L*>TMtFRA{*l{(#d|? z{G`5(Isvt5en}V2GW6m5(S5j(NQHBy>PvFQ>cPT8P2$p2yRTG#J5m6*yM$<@p&}!$ zhTWPCF`o|Itm@qN6Y{0(r)A-kF_J} zDelJ1_(8Eju99UyOnhsrjBM5MX*=80+#{TG#SFCxs1bf98cD>tNib23#X(wBldMQN^@z|}_E2s@2)9Xa z8cN>ItRSczPUhTekE>7b*uQ|3b=hf{!>{)#dM|X(ujVxM&fL_TWzTvtAV8{Yf=aV| zDWUi|e#HeG?uu=G`$I?Wzr7y+K{1o~8)xbQgiS9WCaSDr0kMmb1$Oa)==CoiS;^G4 zxZ=8kF`LNAu**%60>cYQwKO*+!Dt!4%_C9nF;D&7)U%?E6JIDjr`PUO6d!QGatK+( z&0^M=Zj=P3hBS>AN)5o$QCQiO*+pWOza1`LqRt~{*kAPfcqo3~NXY+n8)I0#Z2v>j z8)2pXa|tEd(Nd_VUy_Rg=hhWIvffeeZ7~^_r5YPKI=1Xx2X`4$iLFWwrbbc8=DQlH zvTvu;Q5JJ;KcuOxem0tpv^g7PkCm3b6sOK2qcXE9q$OjPmTea!I9?&aq~_k~u$dgm zy^~LAbtDs8y$D}?fpKTt>FVP3_i=c8gV0|Y@0|-z{dMV*#rbNd_hc?(EcL5zp?q_B zRD)Gy4PBI!A|b0kx*W?kjKk(3$58~oX6~7M`Fqf z4i1^Co3bIjQK(UkeIT>5{ct=?m7new%B!pm+Z& zu>PtL4Lsg<@<m4Q!FD*q8)!-w3L1JUFCF53B)54b@#M7Evbkk)A_S zxOj-<=5Crv`OJ;^pOMYRElmQxjh$BaK458NTMLw1OjE;si#=<}FOlcJ@F*{O^7n8w zJ_y&|`k4U)a1hI!9#``u`H-#gp#-nK1uo>LxUJJ|wyzMaW_6hMCJLD~Cm~AEvN3IkEdW=0mAb)?=O(grlJKz`@<^xu$w10n#V-TJZS(*MWvN zM{Do3f^L}OF(^qhU@Fpy-=tA9_BP2=X>X|xCMU;lkHyxwIkl-en|SNgkfu|@GlGR< zGt1&TK=S(?M5Bi845p_2NLBeyWY_~8iq@~>&0pLGpBYx88H&$(+I{)<&SyJj=*jYf z58wb>d_q!AoYcT_+JJy`I4N~bVwCJl!n!T4!?T|n6y+_K5zL<@%{E+^Gm>`XnC;HN z^C0`X@@(44zI-Y&i*1`yV6oNCU?Tl>asD!2`wq5)*dsNQ~QWTQse@VKQ=5CztfUzwf zJVO=}zkw#qd?4+0#lV6~=IXWQ&K^72W$e13?DS4-e<-rj9{?LZ*GH`X(7FVkg3CL{ zmjNc+6w9sPzhu!>a^H+qXn#?0W_>z6p{{6719^bXH>*&xeB2RcJx)ulN!2g;pv+R} zAou8tt#gS9gC!tdZdVu+nApvVYMAlDi?HYp6znt%OCCWE!@!pyE<(^#0hB{k<%5Ih zlnC#}kttiTCZgKdR<`r_srN7nY|0+nPFgmqy&z5L^^tMuiH#qyi1IXRvi7z_ddOv^ ziMyARhkJ8NOAH=L`%;yB4)6(lF8ygsqU;eR6Nkx^14LYtR{=%4=0}7}xUUz&ajabI z<+0#F-_=@SuG3k2B62&2Ow(L{eX{@kEkM^i!uTj%zCs)IuuO6)J^lQd{vsylMN-GD z_S{8h6N!O}+`t5pFKku?0_MKYlV3)7400mft<%%rq@ank`J(IdW#9#FIHWN34g%-O zX1j44E^Yk-F(xx-3(A*30&MrxU1T!X(d%%DFt=2Rs8)F|hf#itGsKh6Rq-QhxK>Q6 zgC=skkkB2sAIQY8WvbC9$*~;;zJVEHfx7n(iJ|;CAd=P`C9=olDPAkfa-H^^EPk$H z+}!d#p*v1wF{%xj9-JC(TBKo>E*UVVJbD#Jh9(&k~+CgCl#zbV3iY z+xq5PFX|#D0!S&gq$hI2*qUcoGf_lv0CyZ_gRDrI&md*%frQ1x#C&8^=~P&XE^c-# zwb_mz!lo1B@aOvX=lw`)E0 zpU4-r@T$3L*QjAn{_nQ9YQ$>%N z?sf{4=k_%QCm4kS88H!-5s);+melx!xD7zqe5{t-8b#|Jy99H`T7mCjX7gKPq?v&c2#DL4igR&||n?zA2N3-OmMcVQFUhg&Nyjpx=dW}67D#@Sa7 zB^O)cs?5f^vbCE)fL)95BBkn#v}KW!DQ<6MP_Y)WT6rMuI)4Wd3A{a_j49s8O%JWc zJQ!`2GHDVZ(7GE;KCAyqu);Akh?kAs8Zg?v3JWwH8iI+mhR>)UkCx9eLaSQJ3de--KVSbjW9{Csy-$PCT(BamyxlfbVVcgbVODV)R^=d-l5FBj_mS66ke!sA;z0NgmH`m=n7M0GCC$@|z!1e?n(OuD;v>addHsnKj>X)6 zM1Mc^ndah!u+xF=U26+#VZJ+U+%KnGJT_w_KPShFMBvagwR;ma=P!w|O!I^NP~#7L zr-wD__;!>Z*|Q351X51dy4u$hO?sV`#EA&#dB34+5cS9lS+m-Qi#VkA*M+4(`r0Jt5x}MrGocSQ#zU&*YP; z*TTr<5QBn%hXqPV;+;N6451syr?s{pf0wc~#^dB$A*{jX7}9=y?1jUYl-8G{2fuRs&y{C-npy^)CtKFCEpfB62MsVbp_6qm_ z)3^|Ol7dK9-AtRYYrT}~*no7DdW<9#XE0T+EZ_Kph4+>VPs|Rn&+bY^NzOPg7=0L= zKGzUzldy`$s!YuiD;gSs_;%9oad^p{l!5%aQl{-s@HEvoszyqG+SdQ~Q$1R7e0^+l zJ&n;;`~~qRrrVeH%)QzUfO)y1+*AXZ3diiI3~#e%ux)bcEH~)+u5sVjDI8yDL=-u0 z$vFcq4q6Tg*7j@p;pn__9hxt5t1~$yoiDtr8SXpP^KsxHBYl9%=b#$=f?XBzD){Y2 zSaVy8^TC}ozZ-)pY3zX!vDe?S-(;kJ-!EFqG-aDk#*>l z`{fa<3Y>}Gb(AmefQ@6~PnUZkh+`0W;`8-;fN~`Zj2s;|Vdxk)^^vo;iSd+T$$e)q zqF1z=>(a!{d!Qj{{OLEIv9(G?yMvm_gV43c+`~#mu#^cpsYqTks;LM0*tOklxKq#Rd&nAMfL-BBE8omiCzAK&lIProl%I|AK>YEpQG<& ztyjv6=9|y1{TMHhJmS*O>mh*|vH(~;(z&k1)}^jk<*7B;<^X9q?!ZJ+Y580BLry~WIqa+G3>AaM1adT7H}W1dnovBFp8S00x!v?N&a1w!HjjkV3f#X+z%NIo z+^0MBWxHc)GFUZ@Z}2RUU7Z^8~M)MtyE#5P!9tz!p+1Rn{k21UDs^`=DCl; zHaD$*v&cOGBVHIuU26V^`keQwpiuLle%Z?d$CnX|lZ79dYm~!2Z=F(%J9W2C;RuVb>3!phTb|%>rlf;X$zv`}3I|*Du0&qxa0UOxXU6EZSB>g< zG4B(TKT<}#&O;G@`|Mu(kT5aL7S5XTu0Cey);*i)Fa!LFe%^evx}>UVV`r{w#(+w& zEK)Sicew}{t<{lie2N>$JyRLH0yKhKsl?#qK_UcmwNd9lf8`WAY^n!^6WMcPU1;^J z8|HPm`ZJKiJ;xXxRVaQFlhA3mvyNb#P}}*c6^xo@<`_&okx2fMYd(|r?R zt3dyLd3DBn zYhoXzIp=csQfS?K^TS^>l7IaW+Z<72fp;`h$&RN3^ZH}b9`!AgZSqd&8|;Nfx>Cc8 z36y2p`Kl0gm07YLG7=!*3+I;X8m$4@hUC;Y%O?#t*Y8OcpnFTe{iN%`lW?)*<$0UD z1PdC+kSq_V@n$fN9EU2-tl7*L4b7qe&O%!BnVshsB7NEFjRnP-Q1W@~{KE2Ahujqf z%0msx?|7zy)n03>Znvb`e@%!ylj84BxpOx zQq|YdzSv3=Gdmm*5D7@2%I5Zr-iaUobyEw`F>E&-d0a^DnXsr;?HY?7cyq$&_q(Nn z*zD5^akm_Y-2BXUN{Fs4$9KYT_-UMV&kmlm7W>FlF8%ixleIg_irPwZ{3POz{}p^` zx(K|6)QPex6Asuaog=(-TAGG{Ah6iv-FUvr*K z%7ZU8oMqN&mJul~qXI6p!QkoL6iY!E%#pGtFHz}p@ZFW1jJ|#q*8)QpnVm*a&h-fa^7Q$Dg7GmeP)KnEY}o z@2_$VB3VAGm*)kaU0==aC!6Zo6V)@5;*x+n&M;jLFExy6r+f#&&c$kta_UjZPq3y@ zqy>_9uL&ZmsLP3z?t%g1OYH7Qs;pcj;RkBY?Plh7wF!1%0Tq~Bz~L)zJN()4Jra9k z@so1`O+u$S{hIuy$G~W3Avu$uh9E?M z8*K_+(Qpr#w4tx-@=MA0mpGTAb)?K!b@n8Ca*~8Zu~R33H$V4HM%MYbgg&=cd(r%K zcxgdVXr^3B2fb(UKb`$KnTB$uq3M*(-BZR&)VBktCECMkWwM+rYHYFGNXXpB<#g4t z7}Y8c-=Ql5YL3*iRd zTCCR}hJQnTp2<>4$h$4%M~n-A@I0Xa^HXmHryLw9KA$4gk^HW5z9>V~21zt6{a=XIptZus;22=G~JjFTJ%eGb<}y^VODiH+W>%+?>~a&5GQ zaSiy-xLDuOY`9s%S@uNgR@3=u_KAZQN{4M7A4)<&eg8Nj)O}+Az|LsHv}d*D*=m8E zO_8@UlJ&5eo44tO3&tc-XDt%D@oDN@3MII5Hm$SClNWvN7&*4LC2ixKgoR}T*~Zlw zwKe+rLD{LWWLl}>ZfREI7j`8Xr~kzr>2>D}s8`@;C&C>0(}17jO5Ac;^q>mFLy+Hf zJ9BX_7VL`w6+&B%L*LR5icIGDSW5>;BKF5QwrAiQPy(fxkcdx&WmPXT3Npa@C@l!8 z=P{zFNE!{$J<9Y8DHE23tt17}WeV7fb+pm~zL}=FL}XP+(a4QLzZ)U-4 zSfj+dvZiM8jlqYT`SG+N&my}**r$vA9fvUap-^|&dVl455-5CSM11NxIKU>+Z8a>t zTQ91AySe76ROGD*{a!O_(1cz(DHi5!t>W>C6G+ZztOEH2@FW^d)d!Fh6n#G^Bw!6K z2fxMn^Mos0T2Y)A6>sboS2@R~yb_i6wRPri3t=xmow$2{j%Cs|v#Z5XxtL`02d8|h zC2uMwCe2`Z-e5Xc=1Dj4aX(M(RF{N^e0X!G!;jtWI2xcAa<$KYlVVx*QH;kS3Dc6K z@!|pu5JK{Q11DMANz1of?-WR*QEmrYmWRGzTS)A*^P28-`+e;3NaNe13y(J)LtiFG zh;_FbG9{TLnZUCK3R;;66+$U8<!Bj8I zPmdL}5olLRu+CQE4{Ayl08~dDE3*$aAJ(wfO{u#cuDnlI?Fxt2t~R=k+9Sf*lefMa zE5)c!Q6G8BvD8VJJjTyIkDmIVryZ6NrKJ#+LbERe3`}j8Ud`Qzy#9C7IHf@$o~=^iS)P-Z>opZ`|zMY+qk;{KL37`N}OQOPQsEm7D_U?g!%-u~;9BFBXoBsAY4g-9dU!_C(h znxEX{2~1f#vi?7Se{%^sUblnk&$%f`;k?5Qi6T@_E+r_g?$Y@7qEW-Q$Q4)G@j5Pc z#f9EV3g{4WtK>4R47kuTkKIbE7!Dzg6oeJjgE%ZygQ%apl);)SmD?MKd=lVYN5>i) zr_v~;3mrZ?)zjnvnup}!Y(~-JAEHITS!$XJhFxM)q88m-1AXTi{f~bB{|?muNx+Y4 z9f^6w6Bu=xak3(_)mXl-LbvIz+Pp!9hJ_^fd7g9Z?ntrD#3euLdwCjBY@peY{)Z2% z7hgTS00V5|Zl}UNnMSx9hoB2>EvQBC?_&A(ZRV&IZsBJjnISF*qO4B624*wFk-s%r zq*lO(FK)x3GiTgibZ|UWzUdZU-oPxQx-U6qMe*(AWc?50IM`3BJ+X|NmHLFxlp-gP z20;PyF2$6s$zMK*C!@Pcz&H1L@J07jfWCh$Fk1-gK~&k*xyTA$;+KG-R-%rq191~r z{D;07yFXnhPph==7w`neRk@g8+yR^3=`y@&4Kb=SL|nx0rli@E2k50KT;obiviHCo zIGj}D>@@M%Zxp?ONb~!0box0LB0Ra^VCsBt%`~BMRxf~SAYg?&s0iW2?SHLnY#^+- zPJ6aaf1d_%2EoU1i5;lFtLwk~bnG`BtO4r&!Me#p`IV7*ZLdcLoR6O57-ii15Ne6? zZEscoPEP_nOxFe zWf|ENzlC>f?Z;WVTb77A=KQyghshD98}#1%m~%MTQh=wLV-0DSZxP!to3r3e0VRrH zeU%p@3hZVPF#~(NS$+EX##KrLd6x(u3oaQ&RemqpBmZ7NhR^2vSuIU>ZtlU~*16t4 zvcvo||0W%uZ-i0Ot<aw6XWUy{3}%yn&rVQ5}K`e_6W!C!gbKmD-s+ou8Il_xhif+jI^Cso=)= zVMA_hy?Rq=x~xcUKgW4sA|#@{a8n>|z`ZIvSUt;=n)@&o0%-*Tnxv^keJa6?<~|>7 zBc*O=KChy6HOI;gNyzV^+AM)EMH!Nf@VyCsy>e4q?HGa%H(-+jhrP&SXvg8RM z9f`qGUj=TQlvJN#hK9Zn0X14hUIx#_A+oT`O8X&Ek^WC2TZ`Vp+Cyt~OTuc&mox9I zue80Aa#h;@{_3P_882<;Zj0b>&$R{)X6wsw+Dz6K>TUV1d?%71%)Si5s4uaWMV^Ch zLbQ-9l{UuLMb>w5#`70Ho`>ySI~_#n_9772{2Wd6P>~>aa?dyQ9?1N=l9#pQ9x+oc zUf-!ZQ77G(Nm+EXkbgFB+=PB56@E5vCV!r!|t)C~Ocm-{^>fs}ANtb09 z^HL}Mt}u4dBF6%N;*5FoCh#b`Hgnu_lmw_T76kn-_vW23DVdM0KO8Lzw}Z7&Q_;w+ zPf7Uvl7JO6znh(Ws#teqz64K|{#@Sf{h#j5<{$Y{9WVWDe>yNcLR8(x7e3Z624-`| zC965~5akFqc5UZ`3`zQr+fDhOInK+S=Y0mQvj41GROXR$slQO|qc|JNcb`!QtXk`_ z*t%V1o}Xug@wX$^dPaIix~X(@Ce|=RXI5IDJm3ioATUne`T8sDW1<625r__y7WJ3q z-+y+>{Uh#yfATVBJmgM|e+P{0%Nv`|>C1>MbBtnx`7Tp-NhFOkA8|C0e^I6vDrC8kg1n$I2*<$zOSMfg}Q1^EmtR z+9S11W~NkEX5mo0qj=>YN0_Iu`TA8`E!_?ik)@;HrtZ99_Z{r7fXr1wnnpmf*pLkG8Ou6u@b(D#0UD*r*)=@x6(fa=^_Oo#Tp-B%`_!?GJuG-7Czrm>4WpF zuHWjERtm9z z7Fwygs%8P}WT?uIIdbG4a?X2WH@Jgd+Q!ljT-S4jS~>`b$C9qC`25{G}LI ztW{RcUz*$q;J~29Uk{UeN+8SUxdYqzzbl#nuBJ2p@OX{R{SO|md;v3BM%I7;<7nHf z>;F58mw@HeDYdG%NNCm7YS8j&wW=6UwdyIryJIJ-^!AJ=A>*2{oM# zHu?r3JDUkIQ!35=%AOUf6;mh?aBV(DO{P!}-5=7Fuo)V~c5w~vQyPGt0s854b6{r3 z+Y%wMzUusob(?LkqF~+8KON$*3C2lA_Cu>*q*Ct5KbM6DpFjF2JeB)3L5|EYl_4^a(R_w?SM^3C0R-ZmmIVpr2Cdm z0fv>n{rx2YusZ;p}>Y)lnre?s&%YcI;OKO7Vzr^4ZEjnX(*%f2P+ zEFU)86%$}qJE2%&PG1B_qWgK?^lEK?Dk(jfg#+VjV( z$j31AWiad8yp&99Eh~9J()L?)h>6-4Z7YKJMk9(0SPN*OUzD`U8^mBs^Y41Zy4%|@ zwbHd6A1(3uKj(@s&A)bY+#H4%Rf-2(SWl+31oK^$HxhAhpZDPNH*N#gC+E^lnePq} z$Yu29C32vV0jZoXn3e)D>3&viqHPwuw+N% zzOO~!(00P5h^q-**9xZr17No4VI=&H1p6z!n?SMm4#kW+cc%X!jlTvYPlJ-LIXO9n+le%uoYWu>6{G6yth3 z&*HjJprWvDV7#q%X4x<=DI|$ehv|GIR4Qt5dOFjwZ^;aanKH>z8j{)-=pkRQ-22do z+fBT)#f|W1ts8tD?4I2>ZXlj@Y3~h!YMiy3FAnZpM?Wl+Hg#h>%lYf-#DD%SexIK5 z{gBoF$ltx(6z7lY8xT)UrX%C_5>wcZJYIN|5lv)f&fMGO7c*6#z6**Di7Del&3^y> zWZAAvIyfeAGw10=!0TBb_0aH>8G&!Bb?al5)cFl|q6E&!nRwQaYL~H*AwnG#EV9{` zh0gBw_ZVaQ?Los58@XWQr|q%ZS9PX8*z_>HLKG^h_&deQh1NIKXrg9)PHQ0Vhh%{# zhx~t!5xsL0n?O|6i}E3!&#VE_u51|~9p2e$Z#*LDX&_G|r6z(v8%nlMymFA^68>%_ zmCQ?a4V9NsaO(P2>+LIihT|XQjmA~{ z+0?^|NMlbW0yu`>Ls|Q~zyb3KVzG&(l+xJPgxr*|uPxuX>u*wnbdueq(Zkhl-Itg) zd|Ng)A%dC4eP=Bp>-Hirf75V0-;~2Q+y2lDtdWQ3BJY`QlXtC zrH=TE`dcmd+9lohgi`YaLCeI>Sz$q7ZBnBf?OGEo2njtZ4(q87Qk@#St-h=$^BW36 z2h1Vjt^(2N=E$;;FMO@y{!$L_nsBkuy`GgZf#_=UD184n1eDm}Yy;braU)%LiPx;+ z(?f3QBj@yK(6Zk^tSFRY2zvM<+i#R!P7YI5)28b!J|36R4Xe%iaG${2T7-}S>gV4i z#d&?2jXGM5mrBgq9BQhKtuJHK&)?GC?VZf&gm0CYK|rp#2sRN-e`3apU@M>Co6hhU z4Kv(wDP0ZS6ijpS{+aJd3gn843SI;-d-C$?;^K)0bNPQAq^GHOK3qCn$V*5_$Sx>| z{PgKlHVy|CAp|)AdrSV_+@IFY@zl@0;NEEbP^&S?-h4rh}1a3W$(V zEya@ERdM&bW*BGioq7o=NhpJdO2chUxDZv&P@C49WmyHqSYI|>(ZCSzowW9z$ufXd z$GEq^rQC`{{-NJ)%d>nEh9|cmMWT-aF^}?nUyWAdP}{i^3M5OZMXrV)g;y@i8@w!l zI{DNuwjwQ=RL*4gnSZ);Z4l-lvnXM?&M(_3val5N&G}7GqQ5&w{q84WECC|v#tC+w zG4yxKk@oM?^`Bk0YDtv^F8!s}EeH%1z7?uY2QBgJ`dva&lCk}Zm05)o3j;Oe`3WnX z6VDxkndqO7kB~PeK6yHb9za#JSM>hNF8uiiup0dic6K2@>VtW|u75deMNhf^#zW*^ z>;CI@{cp?4EIFdX{l0vyCC%QuVdnfySb2TywMRnl3E>!vtznf47REv8o+_!APu zEHih*-x;a+Z(}!Jr$Dib4=d(-T5tlytrj)&s$@dL_Q>w}WtX#L=8tY~ugCZcg;b3J z+US-HpZ-e+xD<3n z%~l7~Prl$agxgi(LYY*_Ls#hci?+Wi?e-2p_2GMZ{(TqL)QhTW0u09=A70sfW+heS zJy=Oz40QY?S@Tfxx-4BwX4w&~MD(*8mVI49Qc>3PJJ^(hsi5zetC{CSU=EkJ_%|*n z>{*!?MAv^6uj|NUe{X&Y!xbiDB;S83t1K7i+Z%j*DMUE7vyEFL)?%oy(a^Dz;b})l z0i|84qLCaUky1=6N%7Qed*|P)NAPyDJ5@;Wv%@%#m;G05!g~Jcm(x$p=%Dc_;qHHW zd;a}n{PN-R4>h`?odFlzs}UZ3-Wv`65FgK6u1=*i<%1cBg)8|j{`U_5=9$6N8y|8% zDcvf&S|`6#eIW&_yginTEiLVCJFBDK6q*?Wm2&6%>cErPRxPg6X(@ZZ|wm!H<2S)U~5 zQlch$3BqA5ry6UGD}!Il+IlvPq>S*ppTB*iD)?G;@KySQiiKHMlys|_7W-@3hhfAw5qNe|YkIl)K&{!XIz7ZSoVZ>rwT`zgMM_}q(Fv73J zIir00gIrrz6K=QVx;ENWtnMnF>~L60vGasB7W1G)(lgP-U29#2l_k(=K~~g8Jd{q} z^w@P_ClOKEe@JuLE`hK>QPF>efDi#_{f>9_Q!LM43&1=>^eneu#=HP#$0rS$L@N!e zL71Qsp3r{Xuzgo)GFQC{wC}s+QjgI=8b>f^UY2u`UDejI>SiMz15p?wgf6M+my$<@&K}+)PoL*S~8>dtbM~7k^I@)d(D^ z8^D_JuB_0eqTBz4U?v}**FhpdQc_Y!4_s7PKC{ocyy^UVrG+2jzNeW1`hbu?SqPGQ z@%izZ5!C-Tg=cj$&kIgJ^HOhRo(U~ii@4^grFAvZ`O|NmWs)gU)HBc2XvY2Y8atu4 zW57oQ438V~FSVvBntBw*&%TP2j~(^j(BReZ-<`P+Ds92-c7vi3?n6@6L_Mj#fpHIc zLatg$BHz}6L-N*Ub5k;ZI{T`hhR>%^NZ%Uw>#3D32{=`Aap%_72I2(UOZ%T9TGMy5 zBe!crK4&A)KB`L$N16GGs$1)oreug`cq9TYSHt2}?5*2W z=kmp!=s76}%y!uPD2ZQnCtucj_-!*Hv;<{$YOvhNOq33kP`y*|?}&k8@9B=L11~B2 z1uWy_(XVrje^JN%=c~uY92C+~InoevfRMSew^OM_g$3Z3e3D$hxb|OIMRqemm3hbH z%da96VtD6zV%b0GL+!2>?0)XTwjjbNRr!8>iersR{fnZ>#t|7|T1LcjXR3a%@op}{ zu?pWXLus}UDT#zb^kEj&Gbmwd>zvNM8(VwaPmQZPQ6;o*H&J?)gjzn{qZHv+yHC?= z-m9uH&a5wTWwmo;gF&52!J4yApMu2LJXOv!x8w*kOmQ)k<@X8P?3wA)8g09%T^4U7 zR3+0tEe1q0nUSV@cHN-6N@Ap$`}yX%ou(pC zN1lqWPXI~xN=m+meb45S{IoR_FJmg+SFRLH5NM2Hp;hToN>{X1i8Et_A;>1P<7lPK z@Gxb__CNLB(~vh}@LPI%J%KvLbkH+sOUJ)eNe5qjD&+$w!7+xsb?DRYempH-tHv?hNSW-mF)8V#5WQA>yzNP7xTgwHaTXB8NiSV)?BN9w8=6e} z0LDz))BaukTLjgwc8?-{=UDw)xKwZ|E0)Igrv+NwTW*q%or8eG@*Q`*LCL2DtdHlWSgA{=f}I%p*%()MSog&MwkK2;)Syj zhG3e-7ZDR}-VhhT*Vl#iNh&R+#5cVKh_#hypWT_a7cHqV@QsGM^?9BxqDkN)N()3k zrOZZ;6_58%!V1+5`2T*gx70))hkhoh(|bR%{gOxuLFxG{pyUs{AS1UlW1Ga#_pHMl zf`BCBXG=lHbNQE2p{^>u_rpI`tl_&2ayo^ozNID(Noo4ovD7_dxU1ghe zFZoFTGnaAMBZKu;x_<*5dal5KFeae7y#VfqF2{ih6crzZZ2#V#W`8Q@WI&pmCv1VUJcJrN zLxSxy{LLN#uLn#?Ypdit>8*)Z%euc`iX!(cf&Oj)R?qXy#mQzzZdT=Xst}ZR1-RfTwWv+*deapx_gtK3f)U#a76A9(iaImv z*EYUFSs22Ditos02VK$+zSP;A<^Pxut)%D>1IJM9xN&^+4?rzgZ|k=eqfJfm!L=nk zAStNkv|B!{_a5~4;81Y?DL4{PW`29Y-lMW*lIKhLS!@*@107knmxwLLy&+J(Df)Kqw27c z>e#{L^o60kL7r z^~Dx9Ag|frt(o5IC9ay7#>Ee{CAAwA4xN&6^!@(WjUI8s*Lxjv`b8q5Ws7=oa;F|{ zh;}u#ED=#j_?r!d$^M*q=50$V6wldZo_+jM^BoM+ih^1g7jA&+qy75BUqI`jc+&v(@d% zP-TZHcZJ)JydTqh4{Rt;_hp^2DLtuvWS$Qm!S8Rf>hB6={wxF45m_+r!djoYB^&!) z5N2w`@Fu~w&3EB`iP^k8sg=Vg&a;FfhiFaTZL?~@VQ{zIvkKyT4$=x?D@e#t*!J78 zyVA6VHD}zshY8LHC_-XQe=>AUHH#(MRdV2zM_suH&AM=gqjGF#bv7Y|n$&k-kO(Ze zkLga0^@0SRHNwZAIX@%no}T}sZy`q7+c$;S*GXdX;KTC3?GB->oa=d>rM;;J{?^2- zC=kFx!+NuD#sEtpFk9B?=8r{1R2DuohRW*FVKM;K!4!Y-$STdL4OyA3>wh!UK|CD9 zD=aKrgl^0Qa$xr#k&6@eMoX-_pC6Ag_Ie3@8e~Fe3Co8H2*Mk`5#Gq0O?k;F7K(&s zFaD70*$Z79B4u8}Tom2EcsNc<)n}}TGBjE;AS{U^brwdt%g?2h+l`b$rg%dhwkLACM?#eV`fU65?3ZAXQ21PXn3UPDHH|`Y z-Ob5robO8C;XBml+WXz%N1A#OrhZp7^S!*yqo0p`)CNKh;Dz+MNQuAn1OBhS|L5^j z-XF@84rn8uT^H|kj!UatbM?$|q;+bHpgI^fZ7`rGxyTbFHQ(*_?j%YpZ&YI`l6ytin9`iLjqdNQw@KaVn<(gj<8166gWXd(j z;&vNQ6q(sx+kEJrE*mW$)s`GDkwSkGyhTEVX5hR{X};NNb>?;E;H>TT+wwX+zYW-0EnXCFS{92MM1_mLJpVLEi_TI{k4r24eR@t6MBx1`b^r0r+A!|5P;`XHnz!u? zJ88wI-U|+`UtCOo= ze2Mfojc7ePU)*8jbET9cLhM>JA_iWv)iBSPgh^Y8#Bzs5#vt$8qN^isH zt7KMEpwK>`%iWv@>C-T>st(ih?|-{dVwhPQ>z^<(XBa#*_rjm2@FM-ZtO4n0`P!Ed z?lW$W?KFdb%lbJ1$e@-CoacAFkAxlcgCOk^yq=rarzJY`aE1;oPSO|qIeHW#WvH*_ zf+XgeIz@aKbyKSF8$|TxJC|?&1d#KKr^`17*%axW?*}{>pC)}zkD7IgtLc1VsuAiM zur?DNYWBs;cT8EISxEB8x>fzl#(5d3uF>vO5$OUF-c?1_js_6Nk;;oAEhB~is^==( z@+^8p%pH7tcJ;WA^1i)o5+_ikwbb9Z?KG02G+6Ra zKpA|R-ud9*TNBKXCc&AN?E5Iub=N&KKyE7Yy-VocYF!^odZJQ-v?wS@jgb<15eP_?E*%1)gc?E# zNr1c9|M#4G-*fIgv*&)wtjPyvvL2rHD^G_hx0LC4%M{uU&FIX{4hZqEqh_5A{PndF zg%=^VhGd;uC&kIUk9^6RTiQXRdUQF1f|v#oubko?eB|!<|eD1{+blYCxcw# z?vRMb5c({d-4P&|@%CUV5^1TPhg37&{!tyvg*5CRvno8Qyb3qf#enZ=j_fPSZ3gVHzw*Jt98iLP;E=RJ(a;05+I)wlg8^DOW%HX(s7vMx z)`r|7n{q}z0s(OAmT=m~j&uHvaVSwy!Ihm*1tGg_Q_?7W&SRgAra$sU4CiiycK!kN zegHQ`aq<2>AKrh7wzjg;DfDQ#Ra?5epr9z08>uTlTn5Z8u4-G|5S=a?uy;IP{3fCs-OOxL2mJ! z(f}QLZjJQpd&t_5PG{z=D&Rts#?a$Oiho}#^H?U5Ys zPVov(>1apcM=3XPG1f`gttzLRD&a++Eku2@-Z;sH(_$nzXf`&mm+c`NNz3M73b4~N zGf;N@Wl}&ZEqo&9H()LtppGKRB!{%PuE&_yo|E1L;iF_Q{W<^uN`tmwQOqCDa9oa7 zG3=NJ*@%4TVmW0F!RA9mWllx*-z0Orl2-ND<{VRv#Lqp>44`FQMGbkRi}RY-Tud+k zLID!$lnKfa7;H7zufq<^OJh2oI01)*B#^#+zHbPf#8{NW%L+X3dY(_8)-q>#eta0( zij>KGAFt`n;A1{r$_4MQC*y@EZ~77(t4hw?3=RUj*unQPvtP_JdAYBcUUSS3X_;e@ zXItm>&%LO1N^7qqJhC2l3ygVSM+^iyyGdaWD@?R73V+ls+vZ}c!)mtu6t_sZllc4sn~c~E9i_%a>u49_*dYr!%4Pv1vuDXsTc^uI zPA3ke+_AkRqp%%4s8-!#9Wdu&EURxChaH+Vm-UOW^4bBWt>42M#HVtUl+ikM-hvRk z)+mR^?nt6Pnm?IuaT><)neE3D(RmA`Ww?lveRZ>2W`GvUF#jbe@iALv^qpr#N8EzB z#!{p&TiBd9dcMSV%i>u5?YS5LEwSu=g}ji`-B`2J8-$>Zs(M^^w0Kn)9?Qf`-QtOW z0M~^+1iy_-OG07ncs(}DXXDdUT9S*#vPud{D$ITq7pv&c7j*)V6qHfHvy5;Hc^kO& zgC5(UD9+?|w^enWq0voEu_fw^?x?e|g!Fwk7DZwK5{zyoM<5-llhg$YRSs;7))^T_$jWNvNS9-#w7EQ4ze0fav6RR~VaQlJdhWmgFj+ zQmozB;?C`D3|yN}-cGu%L1X#s}d$d*W;}qVLs`w`9~)r zAP&0)RI>7L^9hA8GrQo%6X3r$gT!d`KZ&}kIy*?Q=p!VO!gv-+eQyv0cXI0PHLx1m zlH$j`g-^eNTa9ZS(1!PYw6->yut%pkH3HnlWfvg6f>Do{bU0r){Lk~e|HrZusrnK? z)mq2uUfq7aI0APV<&rYiXK@ocb3AaIsZNu*;`Wg6D~^X^`K8#>^LJ$Uh$%{SBSnP? zKjYK^SUuc4Lb?47TBE&50BTo^QHDWzhl51+$k?7bfWtD_^PM2fdMe6Fgr;?4Xs5_f zHiTB(B&9Mp=wPjTQO5gQeRP{R=iFmiG<$Q+?aodgf!E!_x6hmn+d5$zP8@pD5ptu3 zB{m?1sn5!EFX^nVw;`#7!#Gs3p0Q#9V9x~dQhLl25g3VbKh|L3lT)YgvIWH3qbvHX z+}>P|7wAgnHfw`Rq4kfId(Fw^$BZ8Dzl|ri)wDX!5G17$#M$5%LcPB^{hY-F4MadP zB+?dEcVELmxCYQ*FoiLiPlLh<%>t9ZW!{c)3!ZKm#@O?#PWYQM8e<{pgtgQ~_o)lR z`?O)7acpbzfS@_W^I?Jl_w5M_Y{=}q_4f_(pHi&c#9;5lU?@EZVEzDbml$hL^#iK5 z?_Aq0CY`_)Di2Ya$I)lU%z^=_`yLq8vtGH7S#fwk2RuRG;Rl;df2?bLoeFKRzF^z( zsegctY0k^vpZ8`_R~8PGNz2Q#`|B`>5@2bY%NPo(6TwY{huUqX4mS(t>Mj^c9d_1- ztMCy=>tD1&_;CKZ(x2uQ!No(wA~JAa=m(Yf4S-r&-m(c@6C7DCfCP{eyl!BQuiR;6 z*{F?}#f$NF$f(b;zb?An?N-pq%uy_v;sh}l^L1jMZN#2Ks#6l zJ?a}~%1?2(fQZ?Ic*E!#2I^u9F2?q8$^)KlE|zB+6mU#hhQb%e>T0#usum`#OP{*c z%Ut>f8;X_!%ymV2*M%K|pL43+XW5|fJO-yINu#6bfg23s>*Zp4fN|<|afJ3-#Ukks zUp-?GLwKW5b)CvqeBvyBbG~vxwuJW&vG=$^vCvMR76qw`g!!HR{A;y=fyqwACDk%R zg$~@SV>o_LQzTn#G6A-P3?XYa~feZJ4UUw2#;tttg|K;J~6sBqt@jaCdY0j%MM1H|uc%+!9a&6W}$2)R*5QXq|1> z{2`W>pEl7R*{%_%4iJ6JU^as;4jvaubmdM=TRmc8Pu}IGXnKPH3*`)zcD{P2Ju zlu(z-hVffV{j(V%$3ozpEE@;+DHr}_=INQT7MiL#cAD_JOcg!C3x83*Rj0Qr9NE-e z`By1+_vD6T$Yj^vC;K~dSG8qFt=wGQKIS?(;KC?RjD(B|lw)Sjnw*pKixKCC8pB5G za6#M>_QixY6H}X=Y#Pw0jF$Mme`QVBx^4;E{)MS^#(g+z#*FPO$+Q&SnC*wy(ekYv zvT5q}%>`Fx!-a$dzqvu5)znCfSZ?I$)hjTy_*l;;=@sp?Ssy7f!sC;4?UOhP?a&;z zwog1-CihD@gf>QEPZ7=7TM~yo5WxVOEF~mPIlrfdG%clHS!OlZssP&CSn08;3tmcU z@vK(=zN*U-i;|B`^RCY3tj=#Q%`+!ds2jBYspXu%R7D)xI3@bx3+Ee|)^BF8`&lUQqlcolw3j#~&KJ*Uc*AODbi122`~M|DT~PLVCX453y8TSGeRGGI%}92zOS#9 z?;AWenY3nfEPHpRCGH7a@}?Fe6~Vg7SHP(iJ$LpB*WlBigM%lbNoA~UTrYQd4J=s3 z)m;J0EaqTyKR@G46-j*+-x2s>+`87w zZA>m_Rc6|O*A{2?^~ShuRd7VlU74(qtwmRNub;eQW4P9zZ_Ywz@g~w)9#Q1k*48hE z36Ay$wKnz6p3g=re1-|4|JkRVd&I&R-y;nl6japG+awTCx`!pYv9v0wLnEpB%Do)w z`Z`><8?CA8u+tYCsIH(3<$R1==qZLD{Ar~?K1}O|Ql?Tz%jGyj6~l=g5VOj%YTe2} z>58;QDV^kf(&b+vT@A-Gji<2|7UU{#ojo`N<~!H8 zev=8oIUcydeFTq>juZb5yT59**cq9dYo%0a-r1Q_$rH!>!iu&CA(uFW+jNOfI~$+l zfEi=^y4^1-oK_5^h5`R;rj=$@Me#3$}olW>`ZnAjx^lA@K$sule)yO`t2%@2BI z4P*IeVNVWL1iY`DVf4i&>9XFo-ex;!&U8XL;qE2i* z=A)tu-u7^-XD2vxr>0dj7Jm2>e%t)Ov2UtwecudSZzol~yf%d=TG^Q~e*UIU(RC{I z!iC{G$+}&;-s^DHZK+{!IIZ4iKVG#tR-xkhQ496;q=?sbg9ry(TOl#}h5>CGfny5e z|04ST2?G3gKnO5S^*$`WqC@fc#j)$ycvE<@j^7{O0oK3ZrkQejrGi9ta zL(fM^U`ney-GBv8p%o0j)e%0w*CD;{7kD=Nq@N9j7MEvWB$^RxspI|)J#lapN^_5) zw1__f_?IVM35a${XC9lCLTnduY0YnR2%vP26D9bO^T$t~$Ra5srNy9xHbaO{{x559 zbJ~ETG2335_YfsQl`~{h`tmw?P_f6bMQZ)h$I4WE4MMy>OKLyKL z3*e>#g5Hamt(@)FRmCF&6|WAiRnaF?cAFWO_%CH!F=k?AaCYqXn59P6kMBe>g*}~Z zk5eWtkXw<^RT7;rUi);HE!mz_NAB0OUo?6PWib&C#?@S#P(Yk zNpk_hAk{ao6zW}v$2`zphgOFhk=TIcW)9CkLfV=l|wTwCFON!Xz?x<`Q7o?V#P zYoQJ(WKcqLG#PP7=WkKyTFujd8ys#^4lNmHxfEW^oINY9f;~D|1P&viDK0Hl6?4j% zXhl=FspQf4MVP9mikaD(3mq=3dLy~mBw{KL=4`${zZtgUhmP&tQ?O*9admR|cpKMhAsa7tzqZyXjOA~=dPUR zDMjYer}1)KtPQBS5|CJ3#Q6}T*-@Dfqj}gnyZIGAc9J-Rb;&WG?|jlXDm*?A2P%u| zEX^!0#9G8{{(cZy@ng~wN&uvS1W?iE76Ue-d=C~r|9km-u1}y0xpOx6B&;RLBOgIh zYz2-7Zud{Rc{*BD*Nd!lN^^ z>6%&R?u>IRlzbZipj*~q?e8brQF_}vQoZU>fJX0r9$frG8c{Yde5#1noL|>{uX7^| zVT~=_jsdtn)#dv)r>#^OS1gNd?7w7!Jl)e__@!5tZ__@)HxfMbSPuBp;SO;^nrej2 zn`2+NwIyFR0{do;0;HRwb29)=fFJEHUE%sJ&d|R*oPrxPdRN5X)?YN$9~KmoS>O?} zzj5BgEU0%00oXOo8RcKopX(ypmOqQ$Wo(BM;uL$LD*bwpZhN~q<>kek=%B!$mM+yP zVe=g0Xn?K77y1+N+3tu zU$^*odxdwdE-)L~2?kBUf@D4I`8ty2WV~t({`?B^Y@ho@E=)jgCu-5w8UgQ#M+eG;gu<5Rn0FoXA022UGj<@SDya z!tik)a;|r{k>t*j#{RGE7EGABXgGD|*0*q=Q3Oz{Cg=e}%JGqh2U(G{Dt&HYzgG;P z$?6W&;Qt3{^M4_i{P#z8Zx&2_jgF|jwDinxXP>^rHR`5h9~Z}Ji7=_!`@)#7Tc(fC z(W>G4IZ*yq*`g~5zx6Q};}dvRSMGvUO9F6^$PG0Ab;&}fNZP|Cc3OnY_SQJJHthIWS2csegb85{U-MU4g8-F4QnI5^Rc`GSdedQd%RE{AP!BVtySkJ~!__ zDo~!Ae&R>0Q;7se_C~f?pE6G?{+W2Je%_VqHmZ?RDjTCdD0l2Dn4NhbJTcoYL4B{p z7Ib`c;39vHGASWVJ)_7@&!hP+l=x{-W4?WR5cQWZyMSs$k9FPC5#9;=pElI}){Ez< z>tY9Lck*jl=;o#x;t2H@JD;2ks4rF(;37hs`cGC07t;9@bHPHT4AauX)91>W!bUp< zK~MUc!@bkjdERaaF;_HCvAUn-3Z6V8KQ@xEurwx@Hs)yEv_a4(0}Ab5f8PNqznPrS zu6=~|qb>QY!*+>9LrspO18zRO9r7`7S}r`Mc)Ycphk@-eOt``uddszSbt*f}p!Gw| zX~tvRoml=>7ah7nl4s`gpQp*ms&#ocCeykfpKh25J}R5ax_gG=pJa!_XVEp{raDVs zeiST#LO*ljzza>zLi|CTpZf|Fsf#1-)enaavrxAD|86k-lZ%wbi;XP+9Z&1 zx`v;F%?}>**8QoQC%DY+V(K)!>25POk>ZS@Hv|I00)$<3;BvfX6?j&r^?KwCK$^5^O4&DqfZWNHtEXVZ9HhL} zUb~MC5I+y%?JRqD&cEWy7Ir5WV1(nG^1%)*pj_>1UT7PUKs4X#l@yaF|MPCvrITp( zjueiM0xi-C(CwFZh4K7<3#aynM7>8^mi@2=`MS#i^Yve7JEC@fYblsEV8%|cNDzp( zfP~_EvR@QRi2^}uGq|E@Ab&7HmzF`5ho_}+d(tBtf-nbW#J6kv=1*LPjz$RQu9Uj| znaP{r$Jb9x&q|p_EtNR$&^uW}L-RGVs!Mc+itQ3^ZPu7oX~4|*En0-)hvOW~YMq{= z;unjJto%CAGan5hR&+r_2bjaLzvity6vKr-9OOk zqFPO6>PwrZx13Ig(~-L84!*vsE01^WXFXsO zulQHQZgXEvB^-d1K+c^hDQYvnaFOe)<+Oye;?zDTBg#D469lDgF^G}}?=xP01Q^k? z3xod(7k;jGUTwL*>CDZU11)-iX;E~2@J;(U?H9ct+gnj^uh7D&KC7Eb8zKWv2SQUX zC))zAbAKx;is$Oeu3!!`)TyduGbuct_lESWRbWOC>Sq6SA_*DL*M2^`tTZ*dM}wG! zG)*?Z+Yms6XgN${B$ouNXz04LL+E7%sOaGDx_*nf7BHLOe`Kbh$leF9UUc>kr>JXd zNI?fL7LWHlIW$RIfxn&9V^s?&b+Z9Zbv?KK?;_K8ApP{eep|u9#uJNPz?M6}H9M$@ zpHUX}+q@Xq?;E*C8dEYiATrgZ4E*d-A8=pKPcTo~Z_5oU1gHxMs8a#$g+q6YivOaz zjp-ius#`?>d)K7{!%3;-HwwYwlYiHEx538(Q=@nQ>`ayt~ZzpCO*;BRNQ7y8D;m@yDVVBnOr zH`c!3MB14Kj)4oW6A$+wkoZ$#FI>U4v30;QtWbP!G+>z^rn}R-IMY$qbj37XKp}ML z4(JJkYF+Cbz*tQ6a9rxMpPB)(HiTalke=Hfb%6rUj)bQFRt)%358d!lnrR9$G;p6+ z?8PJdn#J3tI-09{=s$ciDr;h^GezqFA|kc)suYC^QHdAauNt3V02^8(t5^Yp2a3o0 zVf%f}=k>(;`3-N0;ycM-m;dy-+q284FPR@R*YW@+T8`95zWq1wQPRWELfCao7$93K zvWqd7$xsMrYn_ZD0?7?DjLXEk12J(OpOTAFoLNS_cm0IF(r$V3sn4lZVd%yEI7$Nw;|S3>DK)@9*PV^gw+#hE%T zYd^XwI7pdgLl{-Cu_J9OPMYW2=w5Um6PB6R6BZj>dPZX*NTBfN=TfbrUq$w z57|9A+)GN5$#U9S{5CVZyLobhO-QvxIye11w^Te5&6rCSP)sc$W)P%hA=tTIS62bP zY^m-}5TZ$XPx)6xXR#pTLi<`3J{|1EZ6Zw7YSQ(PE~N4-3IKbOjzjTra?L+^ z4FXlX#sxZTP!@J_a+=;>CIDibZ2Nxu1tB3QQ0y;Qj+U2~2UB|u94AHtLeA2@-`WbB zdv7qm@PPLiZ^YqZs#q(gxVrd(2WcR$B~vx&H3fEJ`jop#s6lAWuJ=LC4;(3#lmeSG zBQMs3@IoL*S@Ye>Bz-*=1KVFts$p0XB6X;Z0=*5o?|MDPDC^Cq4rlak%2fZ?G=zBT zb+m|i{QESZURb=F@%vv@WA+dhx)D?OXd#K3Yc<^ZW#0aw-ie-lNv7OBIlc(7t*MdJ zfzh~Uq5+S*ctAV=iNMy?*KKfN_BJj?jC>i1ACYUG=xe=UAWVsIs`YioZ7g?uvvz+{ zTG;duZI|CF98T=<68~)pD{^swxhK)*9y`#p6eJJ^`m#QY0ZWv}?S^9Lt%m&UU_8;9 z01DG;kHkRqKQw;dyi!)VIltt0)g~@}o!xHl)$hrzC*Kj_dwRpd*tst)xn-pT4*}+$ z<=bL`E5L!W%|ySM{>h{SOZAjt^UU0yk?Sq_eB}0*UZ0xCUnw1=r(kL`+h9(QW3#z_vQ?rFLdu_lm3N-9od8=HO`3+uq)! z?fiTVM|yIRPmld>%cF%%^OaY&4OSRCi>*_1q!5tus0V|G=7yo&BQCALj9}qpypU|` z9lsv7Ud=lt=#tKbs-Yoc$P&_|gP*9nhaWXx?5qUSZKo^+`}ev`R9iUUjO@k5Y1DAw zXy-@8StKO%QP|Fu4!;w2XX>!NK6ZY7KI7#`C?i^m@VVv=9T=0NM+`(PSX+57f`R~4 zl5s%E;zK9`P8qKVd8JqulrDg2k8`>Z#_ zhJR4A`PMRSt9g-&mw10gfmsdx!JA2pWonRdO)1{3QYolP4c(;~SfgiXx%kxQGfK`Q zP>|BLSn`(7-Xla*7os)<-I5HnsF@e&i0V%fCerfnoWon|G(RILf+2FSo!qf%Z$oH{;D#oe3C54usOVh|D?B+@CJr)px>dp0E3Aospi-`D5>eXO> z(4GBiMj{ZLqtSlsw)+iz|E^P4o~T#08P)kZ;BC+ojt;XEE$3gki7117`*Kf$VLAZe zxP33m9Ok?6m?Wd%Ic1F(uuAW?t}NYdH$B^M_9Eah!mjl4<(YgGgQZ^GX*MYezn767{*#P|ul<&b&Z zg4EVf81lA8d$*qkId4XN8~GuvA{#7=&OgbZH6?c!fc&t|K8pTy(~CU+=a z_rA7HBE?PF1(~PsG8XOx9Pls9o7g%w&Vp};E)C7U+>pjhOtEYjh{BZWs7VT~nFmg9 zrOk7`Tzp|4&TcC+Mv`GV?CMf&fx{2!NqeY+88JMi2kzh$$HbVVuf=xA!#ssS9+oqQ z3t-r$8<12T|BuWAa_sW#*W9gpLhC70BJ2BJp<%QSG&LuE%<*29 z4ZU4@sj3vvi<&@r3RjMcz zkmCStav1<9*je4}JgZ_PS|HAn{s9v55Lh_wxefMs5z{x#V(khIf;#s`PEqnv6Iqy= zO;qb#!v;Cgq--OJPE4sK?V8kB#nO&%*NF#)U)8uRSVb!(vK0UjKnn{8tGhC)_zb5z z7n0eI{C7`E$j)7e*zLer;klKxR{}!|B2{+^eAr{{nkkR}jd=hkeDr9&r*#ymQYIgP zeGORXH-3-a6F(O9#NeEeXgnKRuep`TptcB>_TFGqf4y5Es54qnQA^amLVkXst1pkn zen5->c0BlU&#^2Cx`eO2OV`E#)H^Oy*=Y7rNp4H?uWZMz{IcHuM?&1lw1nl<%{zl1 zSvFcgZkx^D47q}m91QnP+TsE|Y3^AdiskT1uw)Kr*jV{a#X@E%bf@AMD9|}m^>Fs{ z8FG-xBwzPoz;5$?&=kMHg6D92yo9-|18`B|TWrI>W@ zdr;-&ZPM#6UiV8b-vNwD4+_nEz5Eswlj1KZUvt>{n;%al&qBLKmB|zc;}X^GX)Zd@ zre^1SxKHmtEK54_NH~EkQv6q#UBl;lkKv~q4yWf*sSJz;p<_5m|DHb~Mpww0nfjR~ zIXdk3HN3#Bb8(pXt2Gk{)<*GlA%7A+ z$?$_lJpzN4WOBx@y|u}2)ymO+&;3MQA4193E2txJ$Ii62wN%wOt2!6kl{4DA*$@6< ziyb9Lfa1F@s_qh~6gM5DPIHN>=X%h8Ngz|l$=yHq+l#JzWo-CTR?78j-u+&-LfnWj zORe!yK_oDvP&c@GlP*ngNnF^}CFO4}MI&~07D-Fpwv|9I^otaT9(n>m%EypwUz34( z_?}!i0qc4}S4AJJ4a)Z@a2zD@O6wHI=9tO7v98W{Z!M5bTMa4Mt}3htd>*Z_zK@h} zPmR09;DqQme`&jKUfCS?Q}(VX9LezD4D0E!Z7Xp1AbiV4v`3SU6!M+uUF&C4<+bqV zJKx>mXBz19&Sw{TGK6|M#;TVoS5`vTYE|nfwd;IntB_Ejm9(-0sQ4kn_DSymW{LD9 zRm%HYT+ncc1~XN$a(>B+X=-9}$EgdpJ0&(A)2(oG{b7NU*7yL3!dqXOWy&_!a`SGbi8dSA+tqOIR|JP9i|F$H9VI94uN1R z+qA3s-j7c!4{X2H1jdoYd77kr$^mI0plGrrxH&GBAhxvx%}lst+nx5C z9Zh&*KXBmgQE*p^9<PvOF=VmNNmdsC8w8HJ4lE}hxq zE0I2xrtD|Y42?9MXTFA16Is07h_zArP<|cBOzcXbL~;Sdr5NDAwHM2mI|2d;wcp22 zUSdM4g*-6M0KxvU9a=pU*)zJhJX92WT5c8^urO4yic-awzGw3xl;kvTex+o;_)}UD zKrUY_ECzsKy=UX4(i)o8S#JJDbt9Y3B%YW23hDU>SG#JRRMJrEk{=jRTr_Cb-{O%g zw^m1ATXak3>gtN`{jFA50SfENlM7sY6ALZH?SNfR-TNDltKrI>8rLJbiX)1CDi-cGxaGv6zSh$-7 zpjw1oubetx8u|k|-)Sg*um@ULRId&b4UNJ5CkSsfuxz~iO|kh`m<%9TS>a%&uHCf( z7?;-~b1~NfY_n}rA!)gg#GWA$p3#z|WXse?$MYAh&7yjzKJ#=qU^Y_u#BM1X`)qOj z4Z?G}C2*Ug)kXIz*&capyf3jsgUHQ~JD(7>w#xVkZLg5lG%eCBu!46I*Yt>%uzGaZ zX{`YnG#r*+cn8`3D22kqmKE!Ja!df(WFL!4v-7VL=kTR02@{URE9=#7%b0pUC&rcu zRJK!SH}WiCHZPq;pzh?wLZWuNL5Bt`*r^_1?&>fNTF4EG^NHmI zsr%ATS9bxf0t$XDWLF+(;#olW@=*dxi!+o4sBlK2c3iOrqP#{!n2xg*9@)iS)}@{k z=jF0nzdR4qi>WeLF#4h4uDJ}I{W&(xuXMU@E$E7g zhPHlu=6R&9PpGlx!3e0PMCwXhas03TO%?K5Z*S9>G%osLSW8W0mh|p*$J<5&b0&m| z!CK6Hck8Hjz3UgeEg<#{f15++OV6kLuTzVOg#5ejO4(m4yQ^}VX<@vy$I zI!O#Y#A%=tHn+~3xmsAH?P~It2TQepsJBIfJ?5mOkc=(mNF=s9*Lof_4!w z`D{FjgPdJVNUj`2VXD&5p0$zOPDf=M_#B1$P%pFy4B3ml6xd9X9tHbrlp7TNxC?@#MmVe8u-6{Tfi3`wQ_^6$2TgQ=@ zQv^vraO``D$U7GF`HE%QR7-xcOY1yo&DDPBLX&|~^H7oJd)gY$CG z2m=wk-_g^9b2Zo+pm4Bl+*sKksqx+4sh~yTS~}IGTKkB|mc>U>w_yh0bIT)q5|L#s z>Mj{V7G)E?NvaW6PDK_J(Wv>n1ZePV1z~ll-+Zjvd(wX|bqzK{uIfmbgWm_FiuF-b zhx=1KMvb8`>Voc0aG`BU^4h0A2RspnU8fFII6XW52bD!h)~0)}t{w(2#ZfwZYk`Gz z#r$rLwlHuPVlvP+j9xu8a)JX_rt7`72MQmrur3KS*$AN|t~x2yUInN$xE0_3B(0>Q z${ExD>)%z*?-v1&zb9mn*u%)eZX;tM16BJEX*S6{fQC^?eEiyS#MjU}Ut*rJu@xLI zhzoUkrrFZf%uo6*;@8PNCBwViHKAJXj~&Pbv+vw2VB`a8&OIem@ulPo)Q7P;$nH-i zAWIS2T=O?Dgkoc)v(qU6yY8sr3vy;R2YgEep_^P*ItjFxWvc?hzKxyDZBdmoJT}^Z zCqcLh8!KTuvGuq|(dOxsoY#j|<&lJFGj>PpW@OfjxyN->3_A7%?jayZQcPE08K!NFhep8?zYQ>lN!PfRN!wJzZi zU^9PsJnrV1Xv%}N#dg&$F#Mo{=R!|ZQks5qRQDkEF>uo=A7v*{wx?H><7YnZH>-zz z)*Owktdoa0Xk#lq{o=gb@4XMa(mqzJSzT^mlHWL{io<`QA=K6r)%Pshhb`IaF@N9J zggbw|UsIAR&nG{|6Qn~8ezx@ILK*jbGoXqEY54^{dn6=h5`cZ$J8Py|sFK>M(qbkj z0o@#M138W-E_T)qU1aLfYS~egQK%-Iz|Csu*6xf}Y_#yN-E!*6x4>>hpQxsuyzxhf znc9V$JU_KRxqHotlNYi{(!GX9YSHe7%@{%QJ4LiZ18eq+yk+oWjEzXg*|!g8*1rca zS|H7ZA4`Df^HPNO(5Fy;_PBaI_#$GPyLXO2;W}E`VZK_9ai%bQzc|PW@2|59ut=pc zgR=;;mE_fT(KQFrWqI34+?_Z7yrTEPG%fMA!6Y4zhY%gzdLf86hGt=^FKBB zp&Oq(Z{!CBgp?hpr1>2mzBW1kHEZPqnvYzfR9t$&1!vuAqy0vyQ0WS)5EEq^U~L51 zj#d~R)?f@MARo163+JPY?KiOq2GQ?ZxO(J#M-^l>w$fL$#T^C^!>OR1*KQg3+R5;P zyt#cl2ig9aKWZnHRHSZ}sEqPop)@ogxgs@0xsMYcvN@7Z|7|nm&gST`NxI@S&y#D@ zDT5dnSSE87RE-o-$!;(}beHiy*!Q}n{Gf{*l3;vNMYlBP8GP}!QwqXF zb+1xpS4uLuGeR_j>=(+dw>AjWrKV-at(Do$6Mfvu$`)9+{v1GFVA82WTI7-NO9-|o zw0^Ev!w7L{o-?b&t%dOp&an|{x-X9w=Xax1l(C-z?Cszkp1q0(e^QhJZ#{I%;M!(0 zL#e*Rc{=bueZzRS+|2wZUu#vp z+YU#E>m3BGh^RG*!;KkNSJ!XU@gt4Z%f`z<*gWp@m;aXy8ml!^cyL(vsWIs^eEIV+ z!rw>m$8yX!n^gN|_4D7dwl1BVVi&jGdBG;;5hbY){_H;n8agun$#1-{Rnl(J{eCSg zhrnxK8mD|d1B*~ATZs)Bnr^agHAg^Av3)B)*v++IWHZySLW_N0)A@%ez-(bJv3|H3 z3IFi)x^c*WuK;aSO?k285v+|GHDjg~IV)~i*$!HgXE?EL=1DpPJgiUG+a{XF*=+t^ z5I>oXNrllnQGUG(TFvB_q-SwU%X&i>c3wf`!W~0+0N01OvO}(s9-#)nck-TiI$)bM z-N3zwWCHqgEXZT${jsrUWR-i&!Qh}y+X~rmzlB$ztPo!%q&s59Q--kkQNnR^4uthz z+O)<6KN_$c##;TL!6t<3CRuBecS z@@ntEfN*xJiShf8pg18_ad-1+kq{#_)!?9j;pSt=PNZ$-AK`xIt~Q)G?BVV}a}>`I zLb&%`*48Q(>*3)qo5`Px4zqjcf*_mQW?|j@pIO)5;M3Mos2Z)_ykjqvt&eM70b0t{ zjZ`WzpdKLLEa=eL>PyfVmIfTuiT1WT=(<-t3b-jPMjm3n zMJH6DX{esd)nAiRYX2X=#}BXZ3LkQDJ)=NCCoFhIVi!JNG{m8`@t5S=?zQ97fW+qr z_>lgsdrd$7LYWa`?POFt7pmiEkc|Q+TEnJ^@>A|z{n3>{xXN7Hrri%|105_I6iPMa z2g+gVi~qPRe6=U&4DB?PYM`U>9r82y0k7s!DSj-)e6}Iz$MgRvI{udd_J4nTybc6w zT~NBPa`15)py6^da4s!meel)(POQwTEZ`&*Ewk%qy%=RK0rUA_#Qo1AYCX(w+f=kDLV-(}6Q9X^Sq`%en& zcj<~Fb4zV`m((x^8$Fgj&}Rx?(B{BP#189Q+4~v0y2Z&AQD)z`WW2kz(hb->$*5r5 zVr{+al|>ykt&P=aUn>`V6_}X*Vlupa^I`9e@Mq6DY!eD12Z<-9njBY2%DvcH2~xg0 zq1P6JsLT}+f(m&M{>&m{-*TClWn``2^#Npou$cP1w4ex=mA;`ta+4;1>wpBJeJPA> zcR+ul98svL<-V+c+qQK`V5s~`4p@+1#M2f!HneRv@rO6f(mQITABos0Qtq{|;7=ubCQRKchBTVGC|55on#%pe^=Z2>k!zxIE68|4@-?w)eXc%7Sds+ zN~+2&0jhRlyMUfho)RjP{CaqKG2=4R`OAMAChz2%pD&s$ zNaMjV;EtN*E`+#*U&bE{omae_wFIS1g*96y+><4Yk_Yb?Cf-iqk=~iS>HqGwH>Q4M zS!boyC@PWZdsNm=xk9%(eZ{x?1;;5XvEhlJzAuIqj2|6;WvLr>=|TI0uQG?Vc8dVV ze!|z@rPb;vh%)AKvBAAr2?TbLbcGwcuA4PtA43-%)I;_9A>Q^_iQVSq80QK`D9E$9S?hv`eGajt7S zTzGkO(ZB~|vYVKxZltR`^YOL$V*x$>JfQ)$t4kk+%tbtTm}tI;%N{IwpT1+7J@EJ6 zjpTl-XUPdqHE6weKDTz>3LYdo+KUS3*~!aBhcm0^>hyK3eDul7l~afrv!b{^>-MnQ zk#@(ZboT5Qh_rS#c8Eu)4l8T@%>Qu(_%WUza0#$6hvCyl+PXSKh>rcO-0<0uPZtH7 zD44qF>t>&f zLA>4~Vy4RiGab9@5VK@Kylc4aC2C-ZgyaY1BIgpf%zZDvkgPPg79+O2*pThL);Q

#A_+b~C5Z9WzT( z3pIwNaN;}Pu&fkwI&XvaE8Yg;{-xSuf2#fXgTnAXPdOhj6b@vvdKbS#*-%WG@3as4 zbq|>$ImAQ*pIu;=jDSNNS9G6W1-al+@4;@+mf>cZaY&5Ks$&H%SZ%D8nI zWMpL3B`K*>l9G~(@7Ax%W7e zfr#YC8+84hqGmvcIc>Mp9Pp! zb!*L1vVNm(>Fy|Vw3dpaljXK~R!hFJy$Nq8Tj+Lyb@9Ko+Izn0-kI$~!bJKJu;PrL zb)&ygC_Ev3-by!PSfCRO-=5K0(3d+GsPfvULcl9Ac8(<=yD#9jDlyYMqxev@+Dg;NsQw8r+!hOiMz`%dfPCr{OHG5wf(eb4aC^LH2JEoy5W)ScfP&rHm2>xeYb z`taz0iVF;!p0TLDUh90Cp%cx`A+fgGz#scbDMd>Dyy|46=!lf5Zr?pQRSU~~$R!2Z?<8i# z3z6HP$jlp@-UL1chq!ph>>GA0YOB@N)nxeLfo9+4=Zc^X05yKT_*;ByD?LT*9@8OC zY@f3_aJ^d%oT0%B+3Q0o&YA~w^M4Fg3i+?-rE%sOh{0D9Z?As_={+DHtZAW2KUcKN26QRH&=oGQC&%o0#t#Oyszye3-gd7 zJGIJ!nydFL=ieIId=;_1qfak2&+u0)AMnsBzkpO(QPeGXQ}Xrd^EF0XN336GkELH8 z0;{Gv0QT!hlt@J%q@qI~hYz})6OmC#eI>VWH5ILspY7nO%omXOdA2n0xbB3Z{&e66 zY1J=j(2hIgtjx2y-yA#xvX@4-v;u5aM{A$Zs%A^TwkJXsYmC)H_R@0qKB9E)b$I$5G-ykxD3z^+OxFUe8ixMaVOQ2ZS9bsn5`^q4qwt?}1LBC?7rFExu0LQ2HZug}7^784Z`$Qv&MtG^!dV^2v$wJR1ZM_w!LR~353RC^ ze+ivAQ|;5$_vUIsLRL0ip#56@G*^~d$e2UOrtGD`3Ut`Po!5Aizbr>&w{{mUajxIC zTGnSwc3Bw?dSerWP~Af+x0}Q54D+bHkABb}{Yq0+H{6PZQgy+_jUV2i+HB5nvEQEN zXQ@)))q8T?C_n1d@3E=)$EHlDExEunu0*xQ2#%4@vbVFiZbQ$TcVpf?WOSdQ^$wJB z;l_OvINL*3em!ZsL3risddTcw9<;a-H>PS;|Hi_*X69k^(Bl(tPE_o!g0NI5MT_E)24L%9`LUJbuofyrO+C$ zYKQdR#~enl6|cqhOfhiv`ZsluTcy`qfyId8Io6qsFT|;Ym_a}1p57(%ayUI`%4d@_ z$FH*+(wU}d6`A|22i1ef(A>yIGcK3BZEwF9HoFY}Ac)RaJdgGg@7LYl>Q@V1oHlHJ z5ub)aMY`|pSI`lfW;QnY?jCH+dJUXvE=P4f{iesue;%(N2VP(UkbC}*A1`D1j?(@V zGWpJ>{htfu|BJG(jEcJNx&}lkrMrg?X^A1FrIAKTK&88DXhCA=F6m~ZySqU^x?$*U z7~mb(dtdi@zP#&wuJ6nj*7={a&))m&-%FVC0S<0`vt_+(C|nVYm|o zoTUiVF05a=2Qz^rmLBmI;(LDd=QyGP^x56Ocv@77QN&wG_##a62ir7==@J2?9JZls z9;Nv7GEQYucKdRM^z#Zkzyc~4d26^EIR7BJg(QoQ)M#h^{5K5VgEyTz+K`leM^&EK z`kO$JgB}KP&OBB#FzXquS@{i87t*Y!X$$sI4i?#d4|unaEWaq3(zmWvN&ATQBE8t2 zw#nnV(U>4|+~WpXyz_1Fk2dwRmWHzMLbLd03kdb{YnFuX(UffPHEEnx4h6^Kd5rZj z=#!t*y|F{!K8E$0g$!wl7Q78zTy6WI#uR zeWdlnz-9Q}f#TQk0c~wNfuN`?m2*E~sM>f>(lQ!h#j%9~Qob52`Q}Q8(+*(L>aay` zIa%vVRcE&lbf5T2_;hdl^Hcr>S3%KhQGiLm;|2D`ZKdbTr*|$$(waOIv#!Wa!!60W zJOmjOvXiv4i*~JG1NguD(5%gmnde()5*tBZtE2S~j;P6%59rS~gEKmHpP2(B5a7>q z$n?hH2DszjNqoBg@b%>Qi4wW`@jQ<#%ku(2eR%HILK)1jg68p?joD4kp-~R~d=Cil znWfT=YCdVA&;?LN#STd$*p)zJ71YCX#nQwCg@ha~=eY0*2~8ArQx0QfkLF{Z{6Wqx zE}a}IsEM&3!~*6%Ho`sGrLyqg%z)0ddEE(FYI%6(bgEwJ_Ai&Gb2!Seqt@Hm^n*XDEZ=(VBy{o}N3QosFj{{UezwAv?sj4>?jcZ)9 z(((@4D1kR=B+{=!ZrSwH{qW1^?jGoH*zwR7=s@*oS?1NJkN^{Ppt1160+?1vh>Um2 z5_@0}S2X%Ojo9D$qhSxX62(_?s3V5lngjDCNt6@^Dvf~L$z3ldBJ5XLwGlgrYanJ@ z#{J`*T4CCkVEbzeg{N}80Xt2vG1iZ1g7@}{lZ}_VUqnn*--$gO!$t;mwq`7in!rU^ zM?lD(g-Uj27x2ib%%?)ZR8>U`+{iH2c+PS)Q$EV*~2PSW|hby3$Lwt6ZhXy+Gy^KWCL{RxWJk~0)0nV<-$J9)Siy=kLT`-DL;%M`GYCutGfpL>Y zQS_(lPT6lN)o*0#*-Ab23_AY&&}&nSY`E%7?$YX0wAxOg&`-1uKP9BRK1yI2dgQ9P zlAU1KGPfIGohh#V7){Y*UF<4S{f+P2cybu4T??5Q$Oi>Fl7i*SqJn7wC>%aeYLP$~ zKSRNZ43#;S$6MhPZu8T?Nm2mwwQGm2smTc^oD0mf>r$lWoyONh)*hTqNM^-{ZSV1n zDj|r0E}8Z*sYrNTq5s{I(mDR(gtq89;eUe@dILK~#Za@I)|O6o;O@FEf~l6SMZ}87 zRpXkQm_P2<+Y)qsC=zralvQb%>%cw8x^v?zJS$U3CmJKlH(3PGT?WWjUwAP|m(xtv}CnQP2Tz~-I=naA~EyIuNgltRgb|!G!<9$#%Czi1HzQJkd(c%5;kMM?)6_ zDc;{HWrrFOk05Fz^9DT(UADDNg9UJdy|>xP>V{VO$NK$rT3~l13Rk7$tCnS(StaFTZ1fJ2-k(_-k*o8D{@iLHu?j`tFV z7Bq~%p{uRIS;8>9!{sUks0ZguE(;jl(#?Zgu8B7Rsq0bK7Es&RK;boS^-lNBxXZB( zwOI@YiMTQ~MvS?Rax3+I8rHz5YQok9fL( zPiH7=7w2dKzz+rl9nJYU7yhjeGLacT(tmdI9gM%jl_QTW>R;?s_Gi?mjj{oAQzh>@ zv7X!5>5v-6PeLT02$61!djQ`s0(o$vHqFEyNZL;C#=}!M)3!Ff|^cx{M_9wZw0ho=I)b?UVN(swW5DF{i5NMGnGhCiQDvFpiiley^Z`oj!S) z9Hs9pFde%es=r&E(Aq34m$_Bv7nG=XONr}Iq-KiPTR|WyyPyL$BgPrO(zymg-dD{C zL<|xmhk8EoRc=FF%I@|yUqxO-40BNW2J*H$Q>+VbT4Ayj=W;SSaZ;M@qU7CK^oN@+ z?5*q-I?R`FTugy4Y#kmdRj9)HCSm$QJ1OuEh}NI_i86f93Q_UD5cjss!zm`C+h}<* zO!#p-9aD`<2&dnPqcu4Fccr;SsicKCZ$Rr2sw+fNoI9c{_RJlo@{G7XMyY?ZjpA@b z_1G2-F+J^-=z2^{dy}Pcn7BE>novK*_*r6L-O#zNZe#rTnY>9)FPbChScfGH1OUr! zziX1W{r0p4dBzo*t&rBs!wz|Mt}5yfyOcZ-Lr2i&(Y5V_Zb z@jn!i{=i>&DDmWMZS!xMVDOKQ)t23UjOOpZ(K$wHG0ilI&=G~B2_#fQR}EM9DwXg$ z)Nl7xKmn^>yF8~Tun!;3h8Z(&>EXdeQQfqrgiVU5cS3|ea%*dGmX}+(m1%^rWi)Qn z{Qa=tTmB$4t|(1#{4TvTqTa(}m;1 zAZN8{Ged_JQ%dP+=jK7M@=g15kM!E5K2v{hLrL5$fqdY#holq80W2A}nKqbXadTXt z?u43ee-uOtRql)VVCbGPNl1(wE2AUopMTH4cW)`cHF^xO+gxiapL2bSY}Bi`MVKh~ z#m0z*b@WW8T>}v-r|}3CJ-jb>eb-R2D4j*6bP&&8?WO)P*;dD9Wnbl6aXv|jhNQfc z%NGB_#yzk!tKu+q@o^Mob7lM1iL?PZ2 z$o8>m6zBEW9U=5x#+F5P9Tgcu4&86~Q2|~EdiA!wvH8OjtE(Yye0CBR7R8dMnZg#_ z!nj#L_csLR**Ry#fO;aT1|*)Zy3Q|*!oB2X%eu& zWA@qDyv`pQf)1+q+giuqZ5kX+jy*viTh$*^Tfdsn*77_iGx@CL(5Dj9jc2S@ML4D` zUZvFtLfUF_?MKp&VTV@w(86+X{y_w9)IP9)Etrd$yj0A^au`@UJEu?eppWseU&ysL z>;ZpI#k8b+%xOenR&o_5{1ruI?yxw&s54&Ed-i0a9bPKEnFASVm)H#Wm`_6D$Cm>0 zzVabXs}p|18|9oKx~b|+aZEnVg}J%c;+)Y2{h8_D!j?V@tiy-beR5#V!&*y)=`Q)j zLDQaOb~*I3Q5Fp~Vv9WLS`-PQel#Z+vM2(wj68x-gYzKs^DdUxoc7$?mhP zHX_S60|rLIAFGb)u_M7MA67ti?WaS5=CMPoy`}{}E4~Vq^o>V*K*+(M`Sz_i7&8OD z*D-xcD1aULBn-xx$c7h@zQmZ@5ErEMDr%3JbCY9`GNIqazZjoqYxOj*4&E|-OOg`W##QPm)=ZRo=gUCfH4US2#C zx0-xSmXMt{PLpQe`fBA~o~q+?Bzze~-l{pziJs{d)pImQ3t6Z-fzFg6PX<0vnh1pB;wVfXMcS0JZ9k;1fa1tv7}zRMK-E7o9^UA_Cpzai0$i{HiF|cd zb}$}xFG;H4DG+&-L&%z2n7Cxh!sgHR!^Uz)PmsDHu{=~qvYxR zf!)srXVNeh`H8s}l$Bip=3_P$FvUHEsK@ZA6XDuHE22yj=pvI965 zB4be6mszjOuY4~hQhM)l71Zeh93FzL#W|$Sw#Sj^_5ah;8dPyOk#2+U2j`mpX?_1= zpZ$N4GX5B3{$9Rx(nQT;etOP`HYb5Jeh)AZa&<6l)N+v)XPu$=mxP;wQ?&++U0h46 zuKQMzAy}L~XfNnA-Mgzer-caXE%Vu}oFHEWo3=zr06!mJ&h-FJVXV824O?FnRg^*^ zTS6mUrtg!7hEkD)xNXIhpxoFx)-hvy!|7CPjuyKXf?JXPZ?z9Bv{71j6-$^dH2~uT z&#?m{tp{?e1p9@Os6H*R6vrNlD4#H>iQ>5}iKNT#(bE7IpJ|J%vlOGdCP^RQ_|-v^ zOXPI5iU=h8V56nagnj#tMNEe)JEKCniG*sI>?j0UxLhQ~&&9GM&bVA=8*LdmoS61U zx_M{LEwHZ=oxk)972i~KiMr^G-cc!qPf8k5r&?9*zSQ=}Bsj;j&p4|bgjk~~qBmo4 zP?uz3W~es`p-T0#k$h;vauYtzGKJ<(gm`R!5wFGWpyESnpf={VMCP+z2xx#!=Dam% z!3N#YnsW;yj}alJZ<&Ru7Hk`Kgxf6E|Ew>>@|b@KKd+@Ud|s9b!jqO*JC?mU9&LD5 z_TYZIB|e;Juxl5a7Q-C(QNXk*ohG82*fU+gSUS!gGew6p__G`S!P7=oG|_Pq+ut=BI`RxoSZ#TyOfEPo|0Ok-bD#y$eAHB~zymVRYi6HmT?Vo`T>P?_!x+1u7F zKKB560o7*8I0nU}{k8Mf^Ff>pbf8KdJ?_Vq*#V=jpBgAwn>xdyOJ4oxTU%S{=gtg>pxf<0YQH!b1@3vhUEbD-c*9`# z;r_0aREb+s6vc}u4Jbn~%ji<9M3RK7V_e(v;|QaSY4$hfRaOH^b!Q1`2m~T4E#0UA zyH-%_i&aa-by{9Lz{ZqySaz8OZhjH=Hy5DEJAGHkf%ib}j4mH8hag5ngtoTTz%tI; zdh{+O#Yo<5#+F1d-Oy2Y`FiW*cN80%WqK~eR%!>>-*%r>0=eV;4khB36;SaV?XA3T z*yIxH7leQoxSxveb6l@GYU5Okz19{iRE$AzC9%lRWu)|O`C`BDVP~mG3NLENW8w!F z{s#kWJ#_xA@U#h~N|#0EhMJG|&YS3&;Jwm~vAyF1lw)wdX0=7(9f^AXbfYdLeN)GD zPgt*4(P!Q=%j;)UUk;loS35Mp7Al!f73@@#T@(d1E4>3kM9VJ3#NlJrU$+Zm|Y&h2OaBt&&VwN8Gq@cyfzqfa9zUKdqjjuQ9wX z|1*gn+MZ0!zqLAiCR6E|n4;>lf>cP!eMGBhfmymgQkEIElf*~?HZnOE>L9(0CkBW{ zt_a2Eu!z-G)83xMu)?&;ffTMgmk3$EM! zPdHXq-G`8+sE!;G$IbQrv;#hj#%6^6R3TMiQ})tg7Uw5>AkvO)hZ$8Da5vw{$* zq`=2oGESc%a^PIR25Umsw)@toihic~ro#?_M6(!9qINoYPaqZ1@7vG8&Nc*CTCZ2D zjB_!|dH*4!*>(OBGM%7zb)5fyj{3iib1gvTXGM3Q3XE>|)SZ1d7}L~YCk^2kugaBE z$ZIR1{VT`Nc$iEsH4zW-YjmQI7O57Q30}iBg|D~yf$||i+m~BTis(Y}_&@Md_sLZC zwZ0#c|9PaqUzf`d!s`{_fOx~bj_lG74wcoEvF)^7cnU+FV+rp0NbZJBNbZ4Ky9wcG zkwf|3I*vvOlEaA?)1UmXd0WHgnvRHuKzsdSTb|-0U_pU_Npy5SW)k zZy&y?W{A36PU`GS3bpQ*-qnu7nzZ)5nZ$G}=#5Qfm2bQkaT$>{Ho9o^Ne*I{lGrlWV;AC7Gpq0@02K}vP0hME=ADu;RX+hsw#E(){w}wLi#+i?1L2yV zz?8iu^?zDUuKOZM0=KmdztNrENbfJdl0oq0XXu{!OV+qeBJI2~ZaBO8=FjFk?se~Z znr4>SU1Oo1_vryQ2nj&9{Z9Asn&DE$aeI#!3v35^<7U)~?I`;~1-u*f_+g-UT@D#1 zwy-;W6CNOxlB=V$n#u@JN%Gi+cG5yvq3`)A*ZJ$ zYH+jjb4nl(sd>`;4vrQJBdcg0@rP>g%eHhbRC*lPXY&aCQ*&!CB;oQk74c=_+&_c+ z|23NbTZA3hw-dCd{VFeiU2`^yP}u^rknM3(BqhqOQEFeE4E&;XD^Wq8{w@Ky4HnxD zjjobgA}I*rau;$D!YO9iSH#X$Pfu)5?#$qF1EhZB3MYKQk+5w3~AAUJ0mAO7DgY2RBI*32GEx zUlxw5V)KF*!F(-6xmi#KYS<`kQF^XDSi&pvI>tKIiW7H zH#@$DJuPy`a`;K7T(Oi zxG+h-Nb`@i7mqLIT7CNEhU@+RAqDLLG@p@AG0xO0c}f1E4*wU!n+g-Tj?eQfq@A21 z=1yW^{f_SM)E+^PbblC9+27xH{4k3MFl9AT2vtaNXY?dVnEL2j@A|WyD!c5hd%iux zoepfCUD`f8Tp?&618Pb@LwHux_bYcTtZc@n^kK)(atb%oU%xH+wY1m=qZw_Wn z=YM|_D|Mo?cTyyS z*W$F6NA>uVJK5#2!OAJ}wE{V*)uDZD~^wiCENu>MuQ zZ$dxS$ma`7HRXcE>(TN%3w{=3Ke#v&VJk0AN}5y{TlK^XLF(XoM575d&Dcyva8R6B zYCFb~xCobnb{DYCN($YeNVP&Ih-;>9(@llPiVZi_;RYqyi{1OZT#)r%_u~ad7d#q> zLUNjM)B-f)G;(`cc-m6}=UH>92;fcMmfg1f?v>dEY;tBf&<6!`V{LsQ;&@EYP6FIA zWL$JPjK@WhVZg+~^xoEXY{J59M3RSaQ(Gg9ad_&zXckt?2jnBQQ2{;7?VK(NGi6_? zAnZlv5V5RZ%<&C{L#1^KaGRzt~j-dmU zvdK}0oXiZ%UK%LX8YqH70p^q5;Cf|FivRara~tf9#%W0(MT6v2f3OlI#>kb3j< zdPNyi@Ar-^Tm3TcbOd-NeTWb}oPWUlHfl%>p&d+6tRjRu*+y>(#IdYV7Nf6Bt%NSx zwkU%_lzlH2*xLC~u8*DmSd0BY_6JIB9pK(!hUq1dPbsI%<5=Z zVq!U`DPkvouOuhNKp4b<`WX%%#JykFq5jj#|G!E%+|3{v-r);#K{&8n7S6(2)q7r;wl zUa7ylaZg}qxF6Lh++pD4{AY1CV!|ft?=43Meb+&5=Bmct!BZmNJMG)y_IoQXh3wL= zV(8)h9cj`aU35s>y>Nw|15ZvD?-%;hYPP>_5;li}?ceBY@I7BXZdkcytGr+^!NOiZ zMd)R?&r6jiOzp(-uELAyN$tTuf+`e`^ZWG65$(_&lpV{^K; zkpageuh`C3BB?aZH0a@V!0HJt8Lq zf7$1W??gmOAH8goJr^dkMA0dCinQ0~9s%aUeH-~s=&w_P;0OXgvY+dSIL@bbDxKVk z4gWeN+!U(XT9NkDvUISM?0U>wBBBSKgdL|JsxRFE3$Ql1Lb&O45xoQ8JJ>@JZpYW> zvFuyeFyvc_zfqer8iP{VMm(*M>rrRS{r3^!gvRr*Ahb=^O8b@cIF{FT^K~!0uBq%{ z(2-PsIF7EVk=Hbhsrrqp?|bA}xVkdw??T3h*4Wffa)8x_v=J+fp-NvFf^Nfavkcy} zIXZX7Y?rYBaCynQ@LC2D9}?btf{teXSZM=I|Cz~h@A?p7RiND2b?3Bg0RSy45461q z`DL?H5qECSCnkoaZP+vd2+aERDgxnH#`Mc$3~opNu$z z9`(we8am7ESKaZP+pPJ{_a7bLG+Xwwj}u_Ug1sa0kN4{ym9}x8u|29W7GDA*aYif+Rt;c51*Nq z-u1UkgZZW}XqaO?7fRp2h0b!^qT)hxg@&0dw*FKjn|GLc&}<4DrqtD=T%WOz(;;jw zBiWV9PWoay1GD)V;QX}89pS5y&bEa{CrirFao~N?N`}!i96tfca?&Q=a2BwuI@!}6 zzd7iu*(QIe(YDV!2<@X@BMtGX$LdEH%s|C=x!lgbIJ8pU`xewzlTCHuR8}`_@p@0t zgEzAxr95`bVmLg=>6h49v9Lach7xZ7se=X=)xr!hHu|=e|T+|)N@j64yZ6H5RUab1Ds16X1lZ% z%)dHj%qG%Zr|?d>>_(615(?(8>%gC+LC~g?Spmb5T}2gA0$yL%T~R$s7iXuuYsgNsy=1SM0Vx#;qQ&X8u#GbBb|&T{hGBpR>=F_26T96Z$jO6&{_Y~ zs$OAi!xEjln%pS?L$I=o*AMzBv_km?thVInzCgIM*CB|;QE?E@HWWQu`RTNu%+>Vy z0`k+N3)j5_lE^I9wSs89a7qXrF$5oyd(f~``mN&i{y8e;^qouyW!#qI=g6uH2TIwg zu+V8NOP=vI8JWJjpY}qVUgq~^;f8oN>L8{Y z3E-9{}EQb@jJaFd*QfA!uB}Fz5befd2>QbXF@WE43 z4R~x9R@U?(R-njE4@1k+I{_7uerx6ug(&5bQp20P@_WZjuMfT{zpe7Y8(<|dgAg8I zDix{wySDvq;+6&hHzOk13|kp7a&RN!m<6kW?7LT2g8hjj@A)}v)QydH-a*JzuSp~k zr?1RkyD7s#UlR#HJPk-3o+G+oW<9pIvILx#<@#OO_qi05?zA&2dNE~05-a?Mq3+!~ zkyu5hvYf_&F9OK+S_re2OG$7N-m+FK(p;)CB`RS zpS_LXWWmOTN~gGr;x%=F1Ofu4=%IN)akOIBZ6Dj>uje&Df13mgFs>mZUbg(2T)NXjx@(BfY8H@{G30(j3>A`|hW( zpq~nA9(Hydmcgi{LH2#k7k|>ovqE7p?$Em=Zm%?;4=FqzIXpAd@NgdPs|`eU*22%? zvHHdU!Rg>pjcDNcYvXj_DwtLzbD*q$fyEuBK9KeTV1Co9=Dt7A%M?>M*&)G$o4w|F(KqF=YHZegmIE^Zy;jvMMgB^{KomaR3k7M zq(xB5T743g21ReOev|pKU~8|-H1gEd>zCPeq5Fs9`DifrI5bpKzOr36L@WGt-2qTceJ2+hAkh^@k9~9``HRy? zKpjLEyrraf$1HXHt~O41)Rmd~04<(c2y0hp;kDhWLrq=n=RZ{hYCvJsDAfuyiozHeDA`jIb@CM z`l*sj+)IWFs^+;|HTi}Qq=BXcqvH*h{Xm1GCg=9hGf`vY~Rs}nOzDUt0W9o52#>JX9$(g4sc?5DHSb+Etv2DonfN#L~Fp|q< z4gp%^nnpsb3Nn+Rxnf7mhX>?(qd;eHrMsslrH%E|SJ>O6YqKg0>6LJV6;_mE!(!L+ zAnS^hFXpj1vt_<0E)wwtBUwCpsB65+Sz?w4`<1rcGG@Z!EZjyeclpYzN=@HpjtGV! z5)L1;c?!i0K}T74v%iXsVLJ9*Ug(Sh+3DLG?A!Yv}|!WPsYpGCcKUj6uBRI=igFIXR4(`{g5zOekg z6@`C2qyA5}&oIN1AOtCCJe9gsaX?84Rd&&9(qV9CLXTHA6xz||GoJ0ZfD5dV-*%&B z;>(z;w4q>OE$m84!14tzIeT2FX6pGpJt1BWq|%Yt6x;t5@a&fPtR0Txd+Ltu@RbO2@gk64I0@PQJiO|{aXk(RlADm3 zN!gRn?N%9GrM`l^VUV$FBlMjH5X30bxVx*c23NM_x&8<^IyrIK9qYHi&WG39Q9|$l z$lk5HlC;?t$zd_ z5bhU8x9FnQ)fZCrV^MV0ymSiEPArIK_`=Q%D_Iu0{(QXz?83UF1sK82s|9V=DOytSE5Dj%yn0r!e-Hlvwd z=8FVhN95-f1nEmY6wr>3zv6^NBN8}+A8 zDR6D-I8BT#C#~;F69Mm0_mr5{B67pOm8R{yYS3NIL+bGuD=vamgkQthG!cLW6UzRd zjV{#t<>yoF%t13#hO>+YvgV~8wUFy3%)0a`*isy{F!Oo@Zfw06kruhhF0U}S7|{48 zQZnU!IR(2k(>K(0)ckvyAA9il?hA{BFQ_`}7NP`hHkd>&Ex-+3v3HaXgnwp5E;{uxkTg1riKXJz3udNc_I0 zAS$FYdGQkUc6;!hRP-epj`xkA#;lDr=rcm+TaOMvd|(S#ue--g+U@cEBWiGNGL4gV zL}?ccEtoh?FW{%}kHjRr@BEC^dt2Wm5R>ZFeUT3 zJtoV;1~qKy<958rj@Ebg6O8jsQT>YYV{A>0D!OTFX&Od!_2uAXN6)|!Jv$HtV%jL zrLLkoSjpwh08Z6IG8fFvr5K65r8F6Pc03Ff^Ci7BmRwo43z zp4g)TWPV3I=F5Eh5g_hnJar)`XQ<~(7LdtO#VACMzbH2|UAOPsFjp|&u{ZgFpaA4- z>4{X&v^b+~=;AA7-{yk(u#dR{#m;x=RArqdLxhlws+F_Na&Fvu}k;+s%4&s%k0mH+q|pW&DspVHZ2X^VYUR)Ek3|% zyeuWN*rdf`nD0=?eSoVx27NUgh1I*%PTP&&(0!ZNY&Q;l;AYjQdGmn5FUyimMf4*5 z;u4Eu84jeSSD6ypq6S%MHyoZkTl69jo@^CmN=e|Snl0Y4eeqFoMq8o!u;qls04eb0 zmJ6T^G`ecPgB;V?S+Xij=e}qB6Xk~}OdQGG$trva`%u~#$4(KKiA@2B#aL!oOR?Ff z9M3q_RkYZGl7aGPZRH#ly-ILml`^4ZiT=ZFuoPv~+Mnkug%L9C(Du9ThiIY$i3wIL z-8>|T+c9a0(EYXs4F;8a`?A6}g8@iENsnls(9tKCev!f7PQHzwuRiS~OWXDj@;+RC zz&vi>aYcU73%|28lDWFv!+rvy2RdHB-|g03(Vw8&>lxYSO6IDSccmtn+)iL9EI|O3 zT`}!jMWG`7b@l!Il!)+9DdClo2%rj_ zy4(K+{r}IObjYG0o(DahHzH^qYeFYNOiy;g5I}q-zHv@7bJPS){gJXxDvbMX$DMgq z*71qAlk*3?sofG)*I(tt=V+KE7Q^l7!qWAbJD7t7J3b{b?nL`6j19*3&Xt3X@+2!=HZ<=db|0+}tffan|_P*Gp z{S@JX2F-n6O1T6eNnV*g$B{X8so~e8fr1%@nLc&+*94OLx2Os(R;CxUXh3XsEfRTz z@zKFSYhG+rKh5g?_yiM)ufdW}P&%XV_W?EX4j*I4^91GVk0>%!A9=M60m!Fo*hsf< zE_z&G-ok#GQRSRmz?oQfYcKW5-`{P%p)|y91x|_HP}y6<1Gxj}F?O=Ptj^B_6KS^{ z@7~r-__(b=u|KOY__cen71H?KTwZSE&uXEaJ@nl86Msc(Y%Q$kkDEnZBVihA;2}kF zHx}oE-}KpoFZ%z<0*Hv`AaVfY-Q5LgH((hUykR2MX2bFh-g+OJ?|T+^E`fM=%&@(o zt<&D;`FZyhZrLRpR)Fy1Na=aatQ3%UgNbYtg-X!%}mun#n063igL@gQGz$+|pVENj)!G zU%21R)c@LolHs(Ti>);XE7hCzzk*FlVo@iY^kQ&85>NCA_YbZ&F0wpS+s1Won|*J& z2;a6Li`o%ZeZgx1?jGw1a5FvQQwnhl-*y2sy>KAb0mAeOZI$@<^u47nkG6P~Bri~(~q zIfvO8RDn*?2w2F014BZc0B>J9eMMGRbq6{cpHS4S3SeSa0k4;8d{W0ulA`QHR!>vH z!K9ci*R?|DP);naRB$*kE_?j!ft!Fzm#qX7PRB~E%Ep0Fi_yMUUoZ*-jAPvvjo@{= z=e3fCQVWv!IcO6dEQebKon7Ec{OsjoAkt-e#lu|VJB+?@IUt0zst`T3-+PsFKHcXH2tmIAF)0LX*8Ey*Krww>U4YZ>*2Kxkm$pe#iIT z`{tLEVYuHP*|53WSL6k8v80U51p*oNQmK-0he^U6TrxDNix01Hm>)7)z+?>_Rc&!#knf*R1)JQ^Dt9-(C4 zYnyirKcxUfRsm8oOG`Imm#b0EJ|#VLf%TLkQ0y)_7VXKB4VSAoI@M1UvLddEBwBCV z<(1N}Lq{MpcibuM3?k1UD5+8?+-C>BB>x3GGqxHR+6^GRyvRF2K$6K zBzR|;oIB5p-ci=dkNm0J{I%5%Q_b`|kOq%OMJ>A*zZLMW$mG;&yC#K>r}^)xmwas$ z6+WMvBIXAn2|q~`v#@*NAh}CDag$dph8#dzk?~lEwtiliT=Xfy(<5V+IP;@`qLuxY z4-al9(wF#}H!jbA{^M8kzQw-nEI`wlN^Vmj8Qc$a)aKxbB~H-i%EmMLG|kDf8Y4i0 z=uKyyQvR>l)YmBfU=UW@trUXnf*f

9#&jM|BViakL49mY@)+UR_sDKp_N^1{eIZ zaWO>7j&ULCsI#@+D5~c@(TevITTf|)v|UHka+nd^=WPMsX$GZ@F)YZASwW|L%g>f#I)f&68_dcVuzB3_Q(O*cDlA z_)u-HmszG`PLYQPC;$V-SEiVe;$-)6zJpr*zgZZl|}Ijui?ifSZhUpZuswsyd0EoEcS`eHa@Z|c_vOrwM%;m0aT z)cl^&lMCa{7U0Foic+ z%&cx|C#p7}KSo?Q0wL3XJ3=TI;K#Eka8kN!y%-VeP;U|ueYvu{ zk&wbfxU0PuD3rP1JwLURlLx;9GGFo=V$pz-JYG!vS^2@gqQeLw9F)D<#xd>5p1+?Gp7M|$@vjPqK-sC$yp7kRwSAX!Z} z^t{rv(&0c^ir!dB6Bt%?KIvS8Xh4DXT0^;~%g&qZfWOWE`6PQB014&SZgiYDm!{Xx z)xb8}^U>8aFy+yL=tfoIL20Ow?QLn;zm6X4V{L>D?|dHWIXk5nE)wy^F8d_rup!m8 z1sfw5bA9a+Vwq9-_#ZD+g8;UBb20Ynq7Luj=ybf-S?$524)vgF z2veid6$UJhCGEuN&EG>6>m*UXhfvpYk;j()h5s3@(Tm`i6XD)cJ%1`uq0;;_;g#z9 zGj1mU;h3PpNEwug-$ma06g&|xPoJMt*S~(Jlqsl=ZuE_oaWWzY_Dg-2J392Ig)d&6 zD`7SxE0LkGabaFny%F)+7D=CJSyP6D-lmrK{&&`B)|WuQ(%UFW1R`)!bnAwk7}&M< zw0U$fxNJ3wnKv9eo;gbcc6?wdW7hvMUR#rT7_U1%j4PSX46xCKdIb-3pODgJieF;+ zU6F3UpzaQxH?!}ja1+#L0TnS%Ufo>MFvGfeaOKog)h?rZisIlICkacV9b3iw$qL3< zf=WZaWsFJ@Y**GmS-rX?Y@fMUDJ8wJ{Nk^Seelh4lAKh%{}`5@+puX4x-tdf3h}}X zuCihTeVXen3)SN;2O#HFYhDQ4Q>Zs%g<0R;mz^P$1-1~fBq6nj`}sr2Hf1!H-Z#1| zVecr{>IPI)I%l?#rj<8C>d>hd)sN)h`XRaGro9q+Q(sPGg=Q1u)lA=V$r~pN(J^&r zr3g6_{$QVsSz+s1`1P^^{CZjEayZfI_hdn$?B;o@f4HWM0)m~jZKs~qZvx1V(JeW= zk6gBIO(Zr}s-F=&w-E9)5|d2t5|V(AH?)3JyYoqg;&yiT#zeS{W{PQHWo6OPqh!BM zI>Z^3U9||0TdoR5{2$J(N`KCD2A-p%SI|?dpz_w&pc~hBpRG^5E5kI@`m_imF}2ee%q`iKgOe8_e~FuP2eTUFQ|}XT#UT%59}3|4sTO+Y z65?Ik?XQCYYkkMfELuQTmKaH_*qD=}dk!Shuz-xT{M7iXfv0)%zd*i%b}xgMOJ5h0IRb{qTo3Y8n< zZQomd?}hRZ*;#JA>SX*O;#i}0v!$+*+u&U%oRJtbP9(*>*ZV#Xk9R7#h<)q)Cw5m{ zF*5wQW0EqRN~F8HyRj41qfW_PbE_TKzkwZp)e&}Fj)CM(jW40aZV{Io^Dae*hCJUFey>R^=D~38*heFzAN4i7G-!zeFQ@J_ zb%PRiMB6THd*!{g^$l(O7Y6*vcVeMBwJ-~C68hTvBk;~yugVg*>fC)L@tEO``D@@E%45c3UD5z?bj*1!YjT&n_Ofdm?|>(k%jXBt3W|%w$~y zZBNf#E9B<5x8ps2f@Ykm4vXic$i)&*!%^L0Q0z9@7M*;08)6Sl%p^k0nS&<6j#y3{ zzMLSbuH{m2-Qhv9prbZW%dsxDz~!wv7!q4(F)aGHI}Tq&@0MK2r!u=dj;b|{wr4FB z>!$Yvov}!>+FIV#=|S#XRLDykoYV`gsGoIabG%GI1|iVND+|!*x?wons9x05y7uuU zHe+OGA`wxA;4(GQ5rd&q86$S5efT}g1Ux<_psOKOc4zKfjqExEN|bORzU%2cl6XBm z6_Vov_OP(72r+e|BoP#xIas;u{`Qt0G?mx|te;47-7mf4rMkewyPxEvo6Y<4y+Br1 z?%pI}61U?A3fg>Hovj$#J6#EI+tWg6OcE=7wDd}pvr?L5t&7^3J6>~P!e6bU$DTKI zK)m@pvYtE7X~yaRC+BcmA?dTp46Vac!8IuTW+Pi52VNs5HRa{)IFxT>vj5>ekhpQThpcys-qaO&l;t*m$Emz@GYol3D7=71$ zYlG(-*CDoDB}9D2DqL z(m<2iMX4rfmN9u>Sdt^jCWLBZJoN>NFT%MeO%X9x4pxs!BCWyi}-@ z^lfEeyN9CSedhdRJstvFL#^bF{h88W>f`RJufy00+U4Z&B@aXwB>hnne}kT0`$yp- z$u?D=ip?s@P#L+MiPF@6xSiaQY;Z=m^YOoK!(RcW_t3|+G7Tok#nht2-9G!0%84Cr znXf#^W(t3L%;FG=kPBYF;S&zjh2M@Nx!Hz2nl}BL06U`^u;&yl!tm zlu$q5&-}|h)-Y@q) z&qvmp#ey|wpR@O`Ht^a$ugys!N(uXb{v#)ND!y&Z{;fg!2}3cn?9Bt>PW8^DRy=2h z*)W1Vgh7ENSw`^|ZTij0=qA}$t%gk#v*#S-4?nuSRC%+zoA$Q-_x({$&8|~1=C+s= z;`U2PhuunMd7l^2Kgz!$d$N*@(kNSkxI&bDF7FX@4)`k{Gv!k<5qACH@l+vv%ri3j zy|j}&AJocm!Tw>U|{tbp?N^%DloCrKM^l-wm3WA=KuSESgwki z$Ii)qaH9o!p{&C{1mM4_a7L}tWoQI_9!w6R6sclo#O{YdYj-scs!p(&l>Z!@y7>Te zrCjUytr=70V^*mt>n5cmufsh3JXcZ{yY7*KXaxM+*_kf5xa6B_9W&NQl!#69$b_`I zSlU!ofOyfamW5^U#~B`Xy7+`aS~bo+eGNr>%Udh=sj@U-(TTR2|`3E;d_v%;|=jp2Qm`cm5z! z)Qq4@rHEelm!ay>29CvPJYsK{q;-^*O~R#BKuMk8AYSHp^DrcL&A? zPtiwchZ*&WD2qY@Qbr|XdA8|kiRbthGPTbgTiyFph3?k^fywTMZaeLJ4VP($SGDDW zo=WOp2IrPiL~ZBpJu1=Gu>5?{y!wHUx4Wy=1FXd#-x>Vsw%JcR?Q-%^^!W5APsru9 z4|WL>CCiqRw4Fy&rPRsJ{U>Emr?cJaCu-?-S*2O$n8?)6wsV6?vYom*;_th3;odXD zk=%S8T|wt1Xe^!_Wf8X_>JZgVOwu{xVXYa}jP2+n^p*{ydS`WWhGs*gzYu%Bl3O#fK|DpREv7oBhE~_e@h&z6I-<+>LharA_eN&Hnu58-1-)dyX~aVl4?@FRciFz z92&H4JsIEF+kJ$!bleU#^ZsWIc|Z9kCHjm^=kj2NvC$cuu|np7WQE$|iC=gCTZfJ? z8V5hWSL=<4j~ekjYBq#auWZpQyv%Tr>ZD%J`n*8xwX`Cp8m-QveczXdC7xeR-XxNpMEao!%Ev>MBXF{5ufVIDXN?ql7!114mF%J?A4+8S!~qqI+z1mIn{Fh>@NdI$--lcyS;gNc|6`!RQ|=GecieA zJ|!HElsPl9B#j-)KY1TnWhHO?nx6_YYU17P@smsu{6^U~GP7(e`(lo{W;E7o;5l-9I3uZM+n)TEHJ4X>;&efmr;4$4HD$O!aH;e`npZ&fN`{? z6dN`G=bCG*<}{SFFa}C6qHZ?(jIb%F9p@EGQZ6a-6R)VlFT=AYhjjpMK3e7h@XTN0kbRYS6Mr3tILy8~k8jWL_Tbx{kYLu$ zy`e5lnhY-jgQAr+EAjg76w7J&VeQ~pu;n_Z$zJNg)3@e^A**O-UAavp`eFh({t-Qv zPdYpez(3ISIS1SLu6m*iVhA6h*;6N0I*#c9G#{PrGI_3YIA7)6`eQz)a+?U9Yx71=|43jouFJjZ9NR%SYvPPfZbaeH|X33UmD2v9)jgUV(ep;~eUTcy49 zS4!Wrxh6NJkwyJjt|pYUv~>5-kn)Qc{_>=^y@|Jk+Ig>gR!brO09njb_&zl*QuDuf zn2@fwJ4hTEup&lgJ+&!vsjOOa_Q(hGT=oXFi`c#Ab6PLncpY%r#I_)LRY@UvaCx6@ zVP^Be7c5nDZ!x*>Kf=W#X#KCdq|P@ME)MJE+g9L_;w?`Z21Rjaxfp7o0SK+4cC+_C zuY)WaEc%8?h;Th&H_F4zp$^A~=1DYP5|k@t z`fQf%N&(h3_sU+WMsKb`MFlZT9E$Q#ybGhe<*e1yfWH59!Qph|7k}2PkW&!dR-g*h z!K6%=agZfs9aZSs@q)-A;RwBT^M%Y_k}5jWqgaKELuZY55Hj$ayjtO=67{prvUM|4 zqJ;h-Y@`y*yK^N4$f@Ozf46hQXk_3xe+3#QdG915Pjm+s?O^&Uk zSu=42#1h_!eeyqSezEi{5Vr!1Cev2@tdXVkc}N#n>?4N_v!S%zQl>X4$WFr=Mvq1Y zyvQfbjY?px;&n3HBHued7t-cq{~FkO#_cU=UkWGZ+0e=DYuMaW?)!LKbA4c`)pUw;jDo+-JK{OAX?VmJw47K|}=fbdL3o2RgfdKQqZF zXyZ3O+zZ3U@%(VxL68)PGGcJL;{I)fwd&&S9p&uyhfYqkwSP% zA1<+Zb+f~IQ|&NwnEj|G*>XmianxwAF-_ZdQEvu$ih324TBOY9(xIdPRUaq=iYTqMZ3_Vp4MC6NG=?r#~HHzp98)PMhag=7--Fc<< zDw>DD=Iw`gazSyjJ16H2?#FA@(O9R^f|InIuo-uB@aM%LPA%GAc~9kc8uw^gJe2VD z9?J$eeRUV7l#_GTXH3&#SDc|D4JVXZ>TJgV;x=LK!o)tw)n9uLxO zYnF)|Jx@gHVskRY;XeK9*?_LizN!?+QOV(+mko;PaT~*qHGkDso1V!w{KP{Slq$1_ zfv$*m)#wy6MxTak_qv=NKJ^j8e$7?Ve;4=MnWuh0BpoTW@azIONP)O>K*@w-eLxp$=arj3gXthEvv_t$qc>!(QP>!-5NbWwCm<5T;Lu}k8H|Xk2jnr3tddj ztbBN+Xm1+Lc6)xeAmw+`SNWZlo*~QlRd&afxSz0<@iR*bzq7P7MY{j9*8WwJe|+&y zcA5H3wp>cYCc+Yet$J*23=MFYdIw$z^b3JK%^ydHeNl8##I5NrKkOa_EDw++EH4I< zegj0u2MWrzE-0domSV^R?XH;4_sE9YO`JACD$a)a2)s|yFQf!OoUfF2AU`%?y>DG; zfu9~CbxPWM*VIbghb5mf3lnmsd!>Zrhc6ukui-doz3thWCX=nkxmhOfCQAr?1&oYi zsMu2Ddh-y1jd`PxA@|Euv`D9Fh&RPwd;t`JX6@uK5JIVO-QTn?{C-emAV|Xn^9mpw zt#uo=0%nk~(=85Bu=YDeM8rW&-l=K*v?T<3vHI-kvO%<4` z_fAx1jW{<95euhM-3hgE_Z6PVEu9Fu{t*k~k*!!ely5|~p(t=G&&7kS`s9f;2VCi8 zHP+&*n-n;S?LB$ETy2Ym3?>K0$l>iaiqoxFu5M7VJ~8Ef{&569BE5#03313T%;@rf znj|$u?B**$?#<3yg}u5*o)tPDm&;-mchZ7&_kA8JW|fBba*d`K8VEj>CA&bEa7chX z1P;6DX*C%V;ZLLCa;hq(OvyiZOw~tt$=Ksr@4?)U-2@IRv;`dA)I#wGt4nbnp?{$J zi_F(pdIEnDjyGY(;aMu^5oC!$;JpjyS!C&gF_?;uKGk80BQZ;XscyFFU_i|AHiAHu z-0uwO+d^;up;Mmh<3cEf}1Ta94Yh#K;Q7+mS|U#AG+ zx;Gu@m;Sr&oB*ET54m^vic*ig-UkwpFfxsW_gAC%uU#{Mugs1Us`>bEhI+!AnP(Ag zowM~?xHZZZI-#E)4I!@TcIv4D2_pUS%BkuVwiPh5{pSUPGpn9s6)*4||(7McUSlx3f)o&zhP`u^%Xx{`qXGEjp_LB&k>nA-G)D#($Or78R3>*F& zd0aa}s5)pP5nAVBzZ67qquajtjAeHu;^!kG1x1y4U6dnU4QE!ud(H7LELM&uaKae| z5X@(<%9+uW(cE-p%=9uP_VCz^-n#-aSika4txs@pRG462qQrVdYNkIw_a?>kXj97j zeOsYpio8qX@mi8(Fw(qe1}poQo~aY7zWq|2T-1~szP2m^d#UrLs0GNca}CV(o(mep zCM+w5Jj?w8g$QZf9Vbo$?@8JDR=H?QWCvKCo_zGi9DXD@z1SND8$Ta2hJpJ#7*e!T zAeJVs*xy~}Gp`>GLe!(ws_PqPqVNvPM63&$`n&0almFh(>CFib{f>g&ik9B*FnoQy zMSMY=@L3Xsj;6`7RKIh>miH-Y-j?@t&KKboP?X^rsDGh3f02_Eu_=ZlzVMb+_G`Hh z8B*8B&y!z@<{OXB$5PoKS72>D2m6a*Vd9*HCwPb4vQkvLA_MNu>qiGS$8ULgn1Ue~ zS~PK=z=w79$-}lp0k2~R2A|HyNj~!&PovJs(dT82#d8-GQ*sx*(K%A@&bbv5Zx1P) zuIMPD^CV$XE2-~aGpT%JHL{QJ)Pkjk4|74kQ)r6gcHHT0UkG<+g?#SQ`Ou%F#cG$R zS$4P0qQGA6Ct-8B;gUBW3j=@M`NxZ#G_ui>hQ`!9QRF+F*WboA>8XOGv^&q=txK`@P9|LYopCsL}ehL`0Sm+4S0dmeWh) zV~SrUO}qpiXx#nvL0(eCdMw_dCcX`W0PeXj8))U<>KFg(4f6+Z`OgM;DIbl_V3(D~ zIkG3q+1lQr<};4m&NX=OYz8;I)9S$~Z$}Mzo8a!5Z-?j6e9QTrvlf8eH3go@@XMcV zS+mFC?x_TxVbk2Hj}G&mZePFnq$qsT0D>sC)twxK=}GcW=c$8o(~{@f`sq;0`Kf87A^Y5oOp_@R>ihe_yWS3kF?erh{r=eM z+k5McIVjp|ag9+A+d>P2OR0%Ci3QERE)v0Xa6$fil47h^88I513!+;|A2r(Ul5wfu z6G1Up56=qL<=(Cj83@mhCwd#xuUPC=Zl%|KsrmymD3#r!d;s2LbqTD)#XcmFTeRMk ze!^+Mup*+jnWe?8*6VM&ZAOJn{4Jr#;l{A`E%=GZe43i#dPKG$Sr=`dFLtSk;K94)mj+Yh=^dX!$@0+8()Wvx5ynF#uHA?snj z)RX6xsvVUT{mWo9bqglrztoD%ggz8aB(h_tb=?kJs=!f&tTk89N*E$QsH92NBR zrua>>;J1CnxOiU;k{})cA8fD5+w1%_D*&nA`}n$P^X%!)j)F#WI0Sz+){l{vj;K%m zJv9q3T8dxfx71G~CI!6T2}Oi0qiAFj&+@*+Aq+FqC$QYzR+jk;G6gnyVQI-tO5^B^ zWb;&2gS=5;()j&*LHwC6{Dr41(`%LG@|}@BUpD4xRP%mG%_9#FV=hSHZPwX*$HMJl zlpU^kmnTZr?MCVfHLUEon4@}rTGnN`y?1#c_WI84{3OxhoJx@yc93;dTD;nDQvk(9 zRm1GhuAc-oC^<`0@B6-gU@N#mkWP`re7abvw#Gd3(Z0B6aZFNyqcK@0Cbm6NJHam3 zZGUbD|6pFIobdmezW&t_Vu!S5bMg>MDnBlrGvx2&3X2p4JMJdCbje$iVc@qnGe(gk z0ptf=bZ=6qanJp5-47FddjK$9vo*hmgWeW(&`rLVqs}S{GjFjhygslY6~oD;_554n z&5b6)aYmYu9i-BeKhKv>JH1x17vp`_Y=0xecz?a|yJDqG#578d+&8>g&H3G!U7uqL z>&q*pqtwO4fl+mLc;WpbQw%kMtN zI15)>RiC+$LuukD(^&lr*OrMEUk{Ep<&Tbk94mSxb!lTC^k1bokc)GPw0+>@rzGS9bdACyNXkdDl;gS^9IV(IkO50U+y458* zp#d`VcD_yt2OF5KIPazeo;-#NLN|4eobbpGJQp2cROGY9@>+T& zu{%fz&Fmu+)1yKD&a>2J_+x+S^}VoQYO{&Cv*wyI&{~?@{G(MapF|w!O9!&OroER8 z-rILWx@S!_#UI_7p(m%xtnmVcAYya0cGmLeEb+f5E~hqKJ>IKdl|V4_zdYs=%b1rW zygB&#DGS|GLQ?s(etlz-E3VUD*Oz&}vF4#QEIBy9sF7rCvF-cU2RuFU5U&wFT_&fj ztK(#Z^~HH9n|-Dee+@#bM?S=hQPpdr?EG|LFX87apN&nluuieTx8R!#fkyAyLnq7` z1nt0f`QzLr-nuli3L;*WGUs}U)mK+NSh$@(D@F0w+r8a5Ocpxq-O>H8rf+d=J~~4**SLKypT;mJ=*EQDk*}fS&Rk5_;*g_!qXjO{6?kj6>;rVk50mAY#?JU z^e?}OZbqzmz1#bJrwik7x%DFNsJoSt-xtbEJ1<4AJsa9bhOsz;UM_ydJCKnpfA}Aj z*28WdeoEXb!vz2A?MHxq`O*yh;des4XyqO~>6d)rg3n@tRk^h2piegX#dPdL>}qJKCSgekC!X_Qjv%AE6=cr z7Kq>1)tFUcC|8@-B&PHHuwMM-+X=7yRsS8WjTW;a&x6ykrxluMQE9c zn&$9}sOs7cz(EnCO$sABH+^!l105c7WL+*pBhJ&(E6K4JA|}?Bq@Cc`6Iq7_+DBlh zXHTNF!oYOF<%KHge}fr(+&CNC!KBRJf1~|j=M{9mdPig1cL7Zyb>HBbrQ!j`q%wH& z%6p`%-=e9nQ)N@y+r&%**rH@94y*9@>d`h2^mM*a17qr?QxrWQUK}A_F}#cFAKK&E z-jrSHU0qf^KL4;IFvjdgB_WZReRJ(5u+yBaMH?F&T<8-dziRzbiP?>o*p)7F18{k# zSDrlD_p;Q0NoE-h_E6ElziUZmu-3j`{3o_+BI@~?BiTYZ}AQ5AZ7^c?uz84q@n`i*-GE_ zTI-Fk`HZn0)Gdx+6uKviSpp6kd_}=j*bh>9;6Df|#T$KAqm!J@KXH*Qf&Gg8#(okngB$4A*Ghk?cP}D2> zyqZf0=5m&Zd4nW(tg`s|%zRL(t)dC!w|e^3JwWWwGhZ8VC*6p1q?rZeXK8LFE$||c zLGc$CeZm71d@sQw{c_Sf1Y|F@m8FS^UvbE~=;A7Su2DsMO31g=hA1drF-EyA{%8mW zz41t9<6R@3MItA6_D&1bUo<#K>jxlv6>-HQr{9?rfY;tyJd5}OvwfNAh_XRRT}Eus z&Ior}q12Lj>NF<;#HA)~jW$X99n zD=z7W45J1Hrr)80gVx@imUd|qg2f&6Ra>K6pn#hcddivE(vL^cE8T!%AqxwK?53PX1*vL+LK4tmK(~Wywww`eRHIUYpAl7wV3sIoqM(A&BJV0+O?2MUATUriXH#-%#0Wi7g2poltPFQ?u^u_Vq1gN*WbKqbnH5?1a zcMfFzuL%7A)X_g5yNzsKCvIkJsZz6#&)n-pb@V3-31)o4IZdtsPy_TKBz$N|b9>77 z_f0$9G$rrlBdNVA7S$=^60$zFra$jmc%fZ=av0`LEY6Xx>U-}7Lz^yjYxNq45m!ij z_i>j8koi2Ob7>TyoMZElDOrU64o~L?7h~z(;GHL|#|-%8TB@lnJHT>>Kbc*bRc6w} z_wTPdJCLVdJ{6|1P57k{i%kndb8`jcE?d~@McOmE&<4EN3O|v$+hB_40Bn$Ink4sw z$Bd;p1nF$MFx_yz$s z0wB$1j7=wa+Zx0;QShzhnuk>bHB?iCR$=bbI68N6Fg6J$S1_TM$dsBVyJnbKH zA3V&mgxRj=STbTE#zp}KbD79B@d?GzldU=|Gd~7%8~6!IiE5NsFUbZx`?j>_SXC)A zQzt{*tUOj!m=aC?BKKdA1hpTSAR0kit@RLRulI(tWQSC;AGNh(@WOsaa3tE{QIE38Q$Gd|0ir%bn|JAQS?H;_+2Q&{l&(>P!_>nI;`k>c zK$eT`I1MS86|D!15)83XNvxhny?4TycZ+v_8Psbi3^UGM&P_+^kbjgFJR;)NuNor< zmCu*d?*yn4yl!Q5dR2Xi?=X0RgbBi%%5aX>hq|UKt)~>(AGL@z-nj7IEZ*TYK}_N= zl2To^{e}CYn^O`5O1y0eD!7h^G3DGlveV&`LqB|1(cCq`hs@Ipmxc`Y6(}2P6PRBw zC0@c?x?4BbzaLKz;V(8QeZl=t(1{`TAG${8M2AP_ci-5rQ7ySi#6F7r^UCXd=~8_8 zAm3@(m1*7pflr^}trGskb4o302?5slCdMFF&+zeaME8Ckn3XVRjb`LZwm_!iToP4e zku$jlhfA}jYm^kV6h_Geo-p$&i_^75C&I#;Ys{7@n&qQp!?Tu&&%+7AU)4M`fic(C z>I;kLWENOSe~+A`P`9Oj^Y$%oz*s3erFRk=$pCBoE9}lRHu`-9

RZ2Yb<*l9v79pR^hAcFB4M*vlnU}kn$nX{b{%Gj5!I@0k#r| z1vEv!qYFC-NZGP&?OjO>iMx3ZWTH0pwL1u*x}!!r;9X&3*%^jW3^s|as2FUZ`JLfX zShlmYF_kQB&RT1?)H6cH`}y2!Sb*^h%yP~5x>VxzQBftXyX_2^EEMPCLO=-KiZQAd zR0-Kr-KXoKEp7p(O&Aqr1BAO~kEW6Joi+Q9mfQd2&~fh|nK438-c3o`Uc3M#_l%Ecg&uaN#t_(| zw@L#9sgk^IfahoM+$DK(WBARmh{{f>WXhVg#@k4dr)dJJ^P$?m-1lI#N9Z<{APL9g zTJx;TI=^+VTwfPxZJgux28aD}p9Md_QyLj`1PJZufEp+iCVq4$EuY_?h>j)3_> zDqQL*pU;NvyOM&=_CT^1Q_Z-~`At1pJwshxv%VUOOdA+hPg$??w-YpwoSZzREb|s; zNC+-`_WE*^S(XK7B558Y1mOzficzH`;*xnce{$B8jAP_KJ@>ar5}J$cNjeJOr{10z zaqaJSX+j9QgCR0XNPbhg!;OuYq(cd2nAid*iDf5{0%_|b$1J6eGf!Ya{qcXNdH=sh z=KKL(bQYen=h0(+Sdvw&Jgcs5NoOIPzxk}u?cP4r z`6)3riST=93HJiv<zlI+UycY_uMLKR*6qr87%9p`!*{h=Ukzu$23bDXHfmkLT|mvG#8=CEc-q~ zUOsHF3|kY&OIaep!u2cSO0uomz5^Wca~>`cGKhC8eU2hkE)bB-XhmZcu*5~=`$?@5 zmf@`)hAA<3o>8KlBFdn;xPg+)Gs49aMSkwhX#f+nvw)hL+;pq}&kamdAdcx5mG=mMN+5OQ z2buLhG%BdkD4NUT(FP%nBXmhwk*4fm{QzT^D99p383o>jn*W6t?DR~9*tnNp{`UY> z%z?9^LA)C5+3}+VLU^^3)?@k8DMoDJ-no#83~CLbf1YYBc-z>N)lJ{k&8-Z&iI{Ob z&*xex(H?q1)Wjk;ueFS>WT#)XesL=C@zM7^0etw}HRXEF%gq`LXL}o(I{q;)8SzO> zwE~kyOt! z2|}-^wJ%tg-7XeimUm&F0+09o6aR*;;a>;--~!+2K6>fsEYA4mOgtT;u4XuU8u}F*ddw`12%YD4ZnRwEfUDHRAOMfoZfwszUshTA0kMrreaKoCMlD0PsRK zim*B+W{3;VhPYe;X)pJ?jAYD_Q=XgG*f^AkU?*yO`d*PGg`=BA2t(;qK+YB9a-iC@ zwb4^E-X&;w?6(f-D6c#xW3*3Lm;g6hE>&t)Y7wa$6rqY36A`qv{zbM(u!?U zNl&wsU(`a2d=NqJ`Z^SXI{Plh5wo=~Ovd1xt62__AK#z8hoh)JfsH`!6H@&>G*M*? z=7!fv!5D-2dXtJ0>>D8H=8YVc7;#>P>Z(o`RDUk=WQLkQ00FzcLd{cMY5~RYMyM{c zaXrRT+R@ReRC5$Vmxo%F+IZ(%&$5Ww%982%)ZEykm|8fHwDH-$gp`wLEt z>(?h5MJ5MK=+7*+Xq+)_9(}F%!D+!HZpe3KGx$5+gKh#2JMKBLCugH&-NNSy2^D7Ip%G~<=e+9GyaulbFWx7JO$@Udw3?}FMGw}-_$5gc{E{r z!@X#TH|#H;>Uf%tg8C-fhkD)e1rs&j(m$rhP8|P^T<4!-eH`g0OBp0fEB8c>WN)4R z+hUxLr_|$%*yjVh(;poX0_K7N9%lVDV7ePjm-WL(mcIdu@)Go5XZ?d7+|Tq>X_mm( zv3X9~etQ-zio;vc9#*x87+F4p!grpp(S2J>wck{_aZ_qN9wX`()rBwJmRuIzbst?=(oxGJe`JzUuA$p@KFt>*1jLo$mCnECB1{FdU}<& zHEq6l71rs&!1_yz-?Bj5t52aOe7djs?NkAluC`ix&!D;A$N6x$SP0rWB`ZsIj^;VQ zsBP;RX#jt~PHf}xk|Ky7={#Ycsvw?sIGxDCrGwfOzdZga2{N6yt_F2mK_j)4kM|nT*-kaADcEs&}HXKTVA0=g*&$_REd1)TZj2 z*XQdq_L(|N>!g#uzLYdnzIG(we-7u>?W@H=4B^e`{KK&dw`+M<>-}<8O`m&vCXvQ{ z)77rrSgl(jTh)JX+-=P91At~htJ~pPIX$D5jKlFI((h|{~F6y=Bb2bvUqh21GWW7ri; z`JxGD{Bp+2HrocF$sjD)3OyAom}8LURa~toNzCPe0BN&5CiBYnOW=ai-s5m{1{65L zb9>5lV+6Cjz7v>YjIm~{^2isgGFQhu*BlauaMQ1kR|+(muA96ur4S4b_&|E<@>;Cj zgGvw#NzMF|Our-^39{j_VVsz)(|2R)6oetoOmTk~16_>3j?kA@$PEdLl)wuYgt;AN z7}f|K4fpOW8^R#;!V~ub-A;kZzQu56)nVXTtK`vEjc}UG^{pNsCNQRG0q@qK3bg!23zC6TZ^5|9z!%mk(w) z<0q6W8!*Pd63xcZYgdQABKEE~bkXs3%>hAD>6!bi*F0Q{PMs~LCrkUSYfiad@~fr( zK0sSc^}>s_a(G4%8Dks4Vv=ckRP*GL-qAAN)k+<`Bbtw_8yrVN)MJiSt^T8xT&#Wn z(|z&!1)9i825l#OzgyQntyGO9ckfT>Nm$MERGitnZ7Ki$6;12UC-(&V9|k*t6&&U+ z7XaFRTMEF)q7ZrMq{B@$CyZ-8L%?IXXMg0M3@w2%Gn#w}SR&4+XI-6zDzepZ0)kYG%B*Gc|KuW);Ihtg`-_tk11kC0XM5W?|54=}7{{&Eixa8$~0kPPq)@8h^oWJ(JYTWY>`d+|a;E@8$ekjN#ul8QN2CV2sov5Y z&_=rKS`m$02Ji+bHMcSe2EYezCJEQOwA9H!EK@J^n^1SJKJjkU`WRQ2M6cLjcMuP` zIGRkf7!(|RW=wgW2`l-wLYM8C?K^}yM#XM%Vki-UDq@B7tEKB}Y4m^ou5)sg2bo5u zj(a_;S%=aGU=B)bky(NXl^)~?VZ|=5ze9nTVP~kvVt)+EMe|G>+7 zF*VRjiEmd?bo$x8JIgHiaERPM_&(Z}b@L!+?a0i>IX7!^tB?RRSwrr=H5hzgXGmEJ zdn+0F;Q5aqu^ktF6q-G+R_7)FWOv81kLI57*=x@;DlJrMmz z0uh}l&L>8kq#AAH+JMc(>aX~XFb3;m2lBsHVKX>HtnAkF(VvS1*^TUOy4ICMm+fZJZo@Zd1?bDFOc`rNnus4 z@5`!EOo-e057o8o%7zyjb0sZuQp7J^S(6hy~4%=Bq!WKZsV%PQqy32wIVm+iZk}NCjGSNl;Q# zW;%J_>HYrh2`}nbH{hkVHNC`hts>)ELRs-$$={+{-+MBxV4Pn2HnxeQJ^3Pg^;B`x z+Bl6${KU=qj_=c~69tOZ`d>E`T#ngox!!TR)Nbk%pI1!>M~o|OOKnW9-&cZZT3cgL zlar1)!9gJt>oU0Do>vi8#cvIrPrep*-%j?M8uR)x!p>;P5(c)~OWCVxT--DIY9)GI zAp^F8fhY|M9U<6=iz5V&P~@8N%h=Fs+Lsn%TMRQ3AEsUf{6Wo(;q&zj8d=8E;bphOV}OtU2xc5ziqpQ< z+k^jyJbcLy28}?TjQ{fbLOO39x;*A9{e4(+kLB@mbW?`cQ@$r$-^^FFKQZ;|ABdXN zT@ybr!0*E^iig~Qfi=2 z9D^uT;3<$YGc5Y~$A8_bAGGndA_$@Y%pqL5aV#9We3nudmnhISb~(I6X+v>8{^Cqn z#kk=BM6%$+OhntTNp3dR+e4@mK5$sF(Naj-hT&1)Fq^y+=NRbB&d4ORyMoMJy!r9G@9#A)ayt`$0XyqE zf02n)9xtVVx7!SMMk@w9heqqSvg?daKz8e^X{ZqlmRqg+GSIgTtnPND%A@OOkmH z)=#`<9vEe_w!ReK6#ULFKPuDs?O?Y zX9NY=!nx$w;5k>=nzntk19jOaI(=Yfy--Svs&5_b{uP*Wd%^hoH(Y>^BuX&{9kxos zec$w@!fX#=OfC2MbEh8p*1p>du61LNyRPVaWfG6u&g^d}uF!HvT|$Fx;#gNn-$bIj z!tnqBM-&u)FIKxH7A?1u=mnJA3F-C;&Tv?OH?K?#Roh%nbU*tqA$RjF3Eoigv%BzV z(u*z>b!iwvJU7CoeTQ8^fW1Vq@XyPaj2o@;pflte;!*m>o)!-OZWUD zie_75eXIVV2XXP#>ML_BLHiFY>mV_5rKh_1n=uE+mS;;5aOSW;SNaIK->MaFe>0gj zj#1W{_Xbw{GD<8q44?ImQXHM^u?P|Q2zR8SmHLX$bTI+Wx_I_oY$lXDHg7rCaIfQ> zh~nqI;)|!eba3&vGQ(z}OqYw^UExVk0S^1)s{L!X(}5O`qgF-qajA%qd`X#8?4VkhAw-hXsbk17WoEO z9D5fYS^6}9({oYFHT6szv{;)%-Y{(C*qkrL5LJlMm5rRZVwfr9r>5%dUsJy}ud6TjroqGcvHJ}^v zG6)3kSd&`XJPx zityyW07c_d+?qXMTH;Iv8GRk2w;>MfL4#DxW}O`yPin1z_jW1>kN}_iimYR&=MAh# z(xpir-|va`2okM}?H?F&HpkUk8aCepfj9_l2&9fqq1Wx@7)7jRwo5at`$I<Mnu&5}QBm9=3?EQ zR2U^%x&2EB15^7ucYT5Lbs}68VW`UmhVug{OA8@VCS-(h-}(Nitvx5s!fAhT*1vyf zZ*M6!EiMSx0#_}1p^hpX2*OVV2bjL04+}k9tn^Q*afr@;$LWMwq%=uUZ~aoqn{rUd zG3Fz;{37&xzeQWKDdH;NIeFj&2)(KrGa3j4Q}+@rrX_hbr`OzW-#>_dDLW5qdPu)b zcUXLTeUBPo7^Sb4un5g2RemALNf6WLKjn{8AXbrGRH_n`&cv&KPMV-I0h-O1m3KYs zNxGdjGIDOw@5cX|L!bDDN1}M8(S`jLvD)FP5P(Gtu7|%$z8W?uncn*(UA32VTJT~q z)JdEx=k#7&qJ2SIn2SPmL|0nF$wpMb$Z{;ZPo3OuEcM;QzZQKN9pPW)?;zZ^jp;y}Y&>p$El2+&C+&f`w z3t782G70`b&-uWrtv!tTLca>AW!Qy9e+`2RKa2eP-NGg34^`1D#}3mUvJT8~q*L_q z`|31`Ul^jJ&9fZ-$gpM&HV;uWD~hNO=LS2e4~uGXPmk{}cWF0sKQyhZBUVd9} zaciPipGm6OB*3ifd-5=dqf7GsfmMDsN1?P{RGkqd@>)la!F%KSK;_G^7b1DlEQjE!U>!EoKh-`}95WlA6n;FAqT4d`adT_cl{&l5BPTe_8&f;+ z>jqJdHReowN?k7*k^v<}iPQk-G;x@p{e!N#xlb}<*+Yu+--OLBE6JbmY{M56u4AeN z){^Y;etOjGnbTxsG~${{TRp!AnI{*rPlF`5-^-hGpbsNWk9hM$S>w`98C7uh@UbXe zBNQ)3TE;`}p!<#jr4Sr};~&qQ@x?{jKwcjT?s8_|-gdn7knIQwBkyLGWCBX=Lb?Y% zTT^2T)&8-K{XfdSGpxxr+ZqrB8%0ErDj=dF#Lz=Y6a-Y7fb^zBrGy?jgb1jBG?m^} zgh=loEg)685J~7g^co;QNZ^Yz^S)=wneWW}BRt`{xSqA|z1Q0JE`KrI0Jg6V=bj<_DNTRR_r{|Viu*xi1&|Ejp^ zLF4Eq^Zw_vC4|gN=lIrN8{NaeQkcINGNg-%ID|}f{n&_At$*Npjk&^I^H)M)wq#3y z+N-H(F!8FJAV|)-^V8-bor~1qg$tIJNbrKrr@|U`C_}>MaqjQM`VAqt3GcI+XNBZ;lSN-Xx%?sN zmVdzepofk{`4VDh5&Qk^kL0~M=;!ENKnH9$I%c=qT^iA|_}C|`uTdWoWu5t$6jpDm z)2BbY%DTex+6U6JvMWeksYJKw;a1Tptgvy(XFFlL<$ll2p1aq)7z)O2yjdrm48ZYJ zR79W}sOsN!$ADJ4-Od*UHk|eGf;kMTZ*TU>?@-&ssKZ&1mNfyr{ZendqDtP(d-l0f zQZp?R0!9*ER6!O%y<84?8MWEieo`tlBC2+!%Vjd+LFKEZYwjnybI$(a8VmJnt^wA= zqZ~=1Ja*KYNJjJR#qck{RZ;g-tQXrkyEGPtvB?9gGHnAPu2fM-a?^z0FFOQ;VD%yF zX=Q!k*^byR5O}o~g|mx9QidT&_K0y&#GKHTp-+{$q$BsYNUz`OeF#gBcA&OD5&0d} zb?s>BmbAybD1)3pF*(OF~ZZJ_^V2Cn~x6_T(E3y5~=84+9&TI89Br z`W-;m2_-X`nqy)Gd9$ilSE=-Q4FdYLV#Iiu(~Z>c>;g zEk9D`Esm5s6LlnRFRpZUc1BE&@U?l1zy=UdZyD7^o~agG)xN)G_}*Qcyw1Ei(|mmI zLHX%4h4oOlQ(E97C-FM;$IK^L*QJDf^V#zZr_-42b#K;)=@>Gt$MQt>!0_~&9q(dG zlP~i5tpZokhwGdQp0_T1-u=wzuVH-GZY%7AO@X;0ZEDTqx4P^c9_3O*158&X5rhJd zMO7vRBX;p=Z9WJCsf@O76=hM|YDn}m)997V5*=jn1aIm93bKMRT7fZ<2zpl3#tW)- zq31Ec%Wj$r9_D*rydv?6@X}L}+dR}#HMlu$T9b%p)*4GNj(o~wX`WhJ5I&peq-J%C z=mGUj5NMZTX!nTnI>O;ksX(Y#)Y>aG)Z1mAGmmhYpfPC>YL;qqXUa{2t8KY59T9;Z z&g)!UnGxkhAa9&pZ}key?BtBahJ=O4OXebzs-vSLK78N#zceKJ(OKEkdPlEaO~%u2 zNQ=Io4eJt_^yfT`Q(+CGe|LuAUCKG3wY??|@z=PF*di7?6?~29$1K*c$MuRW`;W|q z8Dr1g({3&1ODcfTvg||aw#p{7|8FyBa$@>r4s(Q(+s*4(B>8;=O8w6*zXlBxM z@3q*F;%o%An*3i~MM|YLCK(-ZR!#Z?Zt5s;I5soiAp?w__z%|ZPcUmY1y_v)UkKBB zrW7S3n!Nk@JAcd2iEEz;6}a1v=6*ze#yyNmdkJ^0KRH1TydQ2FEArAtbycf>&k>1a z$yDEnx^vq~`(*TVX7oh!5{fS*i(kAoH#$Bur-Zeg&+nF7kU-0*LfW?gefF!=JvxfC z{srca+yc5b8fmuzx3r-tBSu6Y6n1c}*{2F@R1?LIu-nO6k85)15!PxS1E*%XMmQFH z0i^dfO<9H-*C+`9@WWxYp5-GR7LrlR~|6GC6&zR`JW2y6$PLnBMhmVx^xOk z0jD@s_MMhF<)$k&p6I80CWza`ITXx;=_&2wNCGdTe5eI=0=bN)aU^-v;iu@Rt-^{g z!;ak@B>5tQd~uKYx^$Tq#-p@HJ~{ZvGzLuF1yJ)MYJ0#p0tJb5Oq;cU5mTXs=GCWg z1_qGWQntp9_HIT8INfmqHB-YA#r{WXu{iAlwQ0R6`IcB@TM8RwScK*nt5IRtff^3qSvNng#A>!+e+{S7o`mAbZyYkq(4_xm+ z5AX2%E>3bvIGj@k-L0$I*NWf*KGqiA6G(Gt|EimL+j_{wMDIe!w-yK5?L*2BvF-)x z@Y%WLvBVFJU%Rq$qT&(DPlk;O^6b4lB3yIhvZC7vg>Z*jcu4^uN{SbHi(wVI((VQoeR-Cs(!M%ljRWRDOvs^0$T1sV;nOuauwHGaGsOo~hDBl>RT z)dvOA$jd9-c4=%3z*ju^L!bWnC;#4H8jm^XB^);^v_l}o!0S?&`|bXl>>H<$Tfoiv zHSq>#_R}KLap=TQrQp)%onm&ee2^F!P5ot+)y7h_N90m+BSUAiFHr8Bd<#@vqW zQ+56kLrB4!Z_c&y_VuYP=oB?II8)eqA%_l9I)}p9d}#g;B~tMa2tP!+cS=IY0U3#+>onNx8w&C{qOeQn9UH=93&bgUn#o(vLz zT-f5A38N1}Uu066d&C+PzF#XjPX-^%TI^&BuZUj1A+IWt|KWEV{9vwje8-K%bx>~r z?lT0tUaAAV6^S6}s-%ojo%)jJ!m|`<+vTEakBC`+Rs*jta3tVsZMwZv+Jgg??dnndA;&vLCdNKi556@87 zgP3u2aqiA?E)16U`B*M@RR(>6jGi%1&bTdmm0cI6wU=xXy`4;*EV1iit~E*(s-Qk< zfuBOViN>+sA|G`lYn#tFiaHEq!%}p#yJtVtTqPH0sFc{_a`^=nR0kLxw~WI(9jm3j z3`dLcWok$K-)4?j$?lBkP^IkLe;vI=; z72C~{ul78z`)7%FvGq-58DDZlk$C_Un+*QPMhTw|yr_#FGatH;qI=tV z8ou%11?QbK!s9jF=1&H5tL9wvv=K;l(Y@fOy1x`x19o@^kIGbeGtJS^K0#|n zbXCNE*Y5*U_lVN9sM7GAd42ofXE5)eZJp5DUzg-5DM&GY!r|Ker$-$F`LR?>us6x+ zpr-s^slDVuJ&H>pW-W!*8t`|4NUoNM%SE89rHGZYpV0ZLvuUnU1%2kG(QqCddBB~1 zPBVIYU*sc+Y-l5W6M@y-m4w?4H%=sR_G7wb&iXG2v)`1*W1o}bj z>ALFj%viWhO3F-H+iN73+}_zwFbqeqt3$1ods-#{PUruMv?KOr`D=jd93L((mcqcWqY zgGj)e^w)UZSUkr(%D+mee6IO&#q8=tlrly%$fa`llkU~@yQL);aB1#}YT=FY<0C=D zCtR0xbLL;WeM$SCltAH^5MPn=^sj7ypNUn!Ih%HFw?Z;_1Svyk?XEN zlJ;!eF#M4&kP+GzrF!Sp$i)DvGFR2Qm_y|WA`g2j+$x;A3tVdACn`=>y-1jqZ)d5z z+^kTwnC|tpi*wfQSL3o>-f|IqHLqXiuzR|&sA7?N3)=qJs>`?+Zoc6FN8}elS0!Z+ zO`{#taIU>}PIjI}A&$v~cM(*MV7^+rvgBJ{NZMQOoil6tc3V93!2SIyT;&Y)s_Nq+ zDxu9)XkD=e7=^&fS47SCC$H+e_i$*w#&@^Y)oAy0)wXG1l5j_;gMpB2*Zc?2fJ&2K zjt0n`6^$}KrN&_~O5W^^Zr*vImE{RqlaA^7|k~7dz`=bH)V6eZxq-VwS z?jIgNZK~_Rl?!1X?|{R``Kc2dkc%ey|9SRt^ek-#AozKoRpg@wq6D?HknhcH%_*8Q z{q6i}T3YPAa(KVciya%z^_Hye;WVQQnV0G`3Pc56oNvBi?=qY|Xc&*!7w!9audVcm zC0CW+@;!H;Iw|LA>prRKn4@a^;L2uZ*QV2!9O&yPv$MWr^3gt=C(W+uIQ>wm``b#u zJ+2hi(g#Cb}hhWj#ru(w`CPXj;>j$*6Y*+9G=oM3adE#S4~lJ|i1jBMNz2 zovB8f;b#HV;w)tin8F#t*>CP9ewTo6F;$y)zgs>?H!}AQA|rA>bcqFJ&d1eQ**}eO z(=E%bF{^r+OfqDDw5^@VABh;8B52R1aUk3y0=kP3JsqxC8znD96egstwos#8IvV?t z8Nj<>F-q+RM@5xff&*K02+xD9COgfZoTSB-;H2G^6k%YuC6 zT;Wo(x5YcpTa4D#a^ySmdbP9i2`pMHJp0Pci0d=vTFGl@vdP#s7aAog-^X-(PgR2d z4A}~d^jg!vb*LioZPbpZ>T>Z>Q;ijP6jZ8*I+UNeU24K28(pRlarGx4M2I&Kc$3!$LWh496~(v3*Qc%sFk1!3gLec%l~6q6*Xh{ zz6_@^e>HT` zH{5(1ZO1ViTNdy-S=O?(fjV7gZd1wyv|S}M5=QGr^6E}$TAxf6Y{FbQI_P$w5Aa}% zKdIJ~QAV4Dl@ctoc{(tb#OXB@#aXc;?me??rkl)hZ-l$;ZH;LJm+>o?YeHLYgm2eX zDFk)HxndI#bvHcB7*LKYm%f_`v)IwdBIcwQAX^LdP-hObJLmGdqrCG?8P6PlN9m6o^B=`ecPBqp4Xn z0MRa49cHV&R!fB;o2mv$TD?AwH|UXJa4h`5M#GpIBVL> zTjaC2P>4d1h{L|uR$+qky6=*k&vz=dop)Ww$Y?AkYb;#OtM>7#8Z@FM9NGElLE1{y z`V`G$lyT-e{S^=4F_olm8`R53)97s}3pTi(F*O1#R4{FfU`ab!uBmP25nb3hSAxE)!a~sb~=ji;&yddy7lo2j5DTIMykGG}N zgh}68JD6gZij&#k$|ITfbSSh_sUHJ%UxsD!s8Zpsht6tVH4LtayF)1{eC_H`hAvd0 zUK5m~u`Wfb2;n;Cc}tf`3HQLKx8PedP0~e9@4`LL77ZKSm8AWq1!b3_HWGijU4-oi zP59(6k1DNnz1vo%cD?l}P(Zz$$(6$kS=H5i#Bq-=D-lcI*0ro0=Jlp!5q7C?Zs-!K z#MEk~1e|m`3N28r_N&nB_>O!}*6*CerYg%Kb?}3RMi+*RilH;F_;*T`ezcYwNqUuZK`A1Gn6^`aleCO^I9yJf{$rgD;?wh^=tu*>GZGh_bjUMTO6)1R&{slcxX>r;2nRGE99 zpXXpY6>tUhx}ln<%L>87VC8nXO*J#rVhb93IJ#9f>fE@tU=>9EmU^2{=W|ksr3U5h z_u|w=Ee{DDj=i_nEuMW8TrGUqRlSrXQn|wwa^RH@ zA4K>fJ96fgge%SFck!oZ4_aS~Jg9tF{rGur%p(JhykwIzk8_||*>R2&R7bFx+y=Dx zN^&*#C~?5xcu^i>2i{zzZ7%7c@!eq*1YvtK9iKQqZGlsU{GMFrW0!)Kis~Oz_G}x7 zt{x-V5DgacJf3~61&_)X?tb3{w(Dgq+>1_F(3-PwbeX^U4&FGUmfV}_S4S-q zKYdR&tC~{-D!x~D^n9QeyI^rwl1dt8viv-XblbgcQqkV)uHy^~yC;9vP-DT*1gKOb zhE$hlr?|4%>cx*;NUcS?^Fl4D7ps7D8nnvpNUmQM7CH4{lFAAL`ve*pUK5F)?(Ul^ zkA5qNzrx%|yicVHR{(&%1Ek=N*D*CP0PcqW7imjBp{eadmTp#7?~fYjrO*ayap5zi zP(MjV)a-q%;k2`?W%wsy;jf$(LY|Y(&SYX!#uTAp;$E80CW5N==v4VXE4B)xqwCiJddN5!2GHAKEL(V;Lvc{np2U}Jfl1d$%*Rl z;vQgRzw7)$)@)4xbq>Z}du6W%CTu!QIw^X-ut>A!h3|pLS;y0}Gj=38>QrGCYAa*I zZE;iCPp~UI)bF=v4WCb(?Jn444}DvBz!9o!9|hM8l#GI9R=>uYmciy{lXq~^-{3Bq zhc(ogaS7Lj074LQeZYcGu=AaXhk&=GnMIcCB#E&!6-1JxRpBR(l{}j-A1EY+M)Gg` zcYJy&~-1+zXbTj;s=Nc#ABx6dkH?Bm!>hibN)k-;;_j@x7iapFW{Z>j01rJqiQ<~7MBC4pCW z7U}e;W6+P{x6?AOhlZZa552xz!gJB?Opst`z23dY7uoODgzoUkUloXXuz?w!IIfvU z@>@s~2z(}SnynOjFrnxew@^)-*Xs3J_sO>2y^vQ&PN_7TH5W~j8=FAPgb}v^{>|Cv za|p>V&f=uZlEUjk;u5|w)?r2z+=%{m*rSbXGcluSLZ3m`syYXe{rZ9Xw#Hd2rW-(FTO3y}6P(AqsDe>+RIBZiDN^cQA(G!E34US6`U0JbS6l5P9H zTbs69jTpP_^#Ckx?JmUxBYxg&Sk^#lf(v|Pw+2(~bI`=>GN2(ZX@Flp1C0$s>41sd zoCudmvrfcK6Me+;j{(qtjhg|{ygGN!*k!9MNR&>;g_;d=eh^GapBdV6XopV)N zdLW=X?m+UnDZ7XswoZAjTYGuotHme#hLW=fJxN7?GEtr5w+8uJDYX`u>T4+_ z9LovAQ8Cv{?XEd%4ZA5Umd7~YGAEX-H|xgtNBM^uj$P6aTMI^`U)S~?zWO45w=7Dg zWirKzEqNDiILPGJ0L|G(b@03ATs##gL!;b-5e$fLi!+37cnWD(?9ax0+>1At2y2o? z$?p#sQQ_HTZ&$3wKxe#TRdx}%M&OwrI^hkbWDH0u152^D%HO&k?a#iU(ILOh>DP1- z<+|qpIettCcq8&uo`<{rW#jx+Tddk))3dZ@$>`}2c|JCJ{NwYqm*^{6Zk{TU_VHko zg%R|{uy}Q+2=CKq16ifM)EUgd;!4DROmK-?4!A^-V1zKejPM`WHG!ssh`A%=!oVA6 z7kV1#-rxTXc5pC_vJ3r`A}=rR5t|8Ug<#dndYr}-)hFV~`Zp*)Lg*#P_r4wPNa_HO z`A>--%}*l*_-xP8?%!dH^#6-l{O?HrHkiMA;-EqQmV9kZui;1DxALp3Zr6e|uf`Y7 zt=?RAWA)Ax^Imoiunly2)z-vg{IUpwQZpy00F-0In0tz|o#y7YWnAlY9 zk5;@e>๰?Ll*=3;pR$dsIn>GAg^1|1Lhn+l>9knGkjEa1RD!A>feoC*pmGtJq zte$vV=k)m1Xfj@1JA%{Bl|3^aQKEeg&grT+7sFrRpEWGZ6aztQ>1xl18c^J|v5ynt zr8N&?8~i+lj<0syNhEy5-`=Tkwf|{TMtYaj9HM^26UAVKe|Wg>E|Kx(BdB6OFKQVD z|B9ZU%Zyjt@!9;onD=55ys~7z17Z&F|0vH5C6V5-HwPpdbt$4137>QjZ6nC6J<6%g z*G7)(c}Mlyzrp_p?95)?VQj3TnY;c6?*9beKVbRS4~;9yGzmU&u?Z%2NnK)+_r)dS zH@Z!(>AvtB$u-b$z|O+g8kMp~C(%Cf1>Y9bMEjnP=XFVl(*rWVSR$nnIh@h3EqSO9 zEzttcipmJ4RFzE}fX!-Nl<@j38OW@E3@%vyH0oFjp>$uHS8%Lln{Z^{t;w%c@ujQ?Zx zl_fblyCf*DK9gw=EF&Kyg3>(dEK)RWmp#b#&XdEx>*cVT9{@eh7%J}wsYWBx#MTDolb!OLOB|tx)-L5R^1^{vJ6@19SF#k2FaHCn7QqE7e`5=6G8QFfm z`RP9(Nd4eIp;x9s?;_v02L0X1`(L2@)1yq1QDg8RD=L5pM5268;Hx42^oFEh6{hsZ$v6u;)(F%5x>hK1If^llq z?eNmfw)Lcnpylr5o%#XQC58a9O691o`lvp0cjelId-+yMPSqFo1Lp=l35UfkOL#iu z{82Hj-7~xXxz8qA5U^&1$2_ng571xU#yfFWq_)t1V6pU?R)JJ`XC}Ek=nJUz3of>6 zJf0V5n|w?KXCdSsQdx%BZha2 zNx^nZ{Ipl%rSD;1Uc5-UU>T$GZVCF9<92IKRNIBH*&@c+w!Nwg;~xw-l1V)?U$w#!Cme?(A{9w#GHXA)Musf*+%j;D z<}Q{>b@L}IeF`CCG*NAFR9>_c6b59t(|6OMT#>NlWF668u}pNCScUpnzet=`m zj`puR*Yr{Q5sBLQy-hsXt|La_446&b)5=313WgatNKcu??la$I?0%-e!q3t zEE6(COOe1EKmCG$`{CycwjI96yzRh)sq^>vxjwk=G4DR=L27Kt z-o~^Wy*n&C)YIb-s94rd;5=P+@NN;h&3;zwopHo*XxFlJc*ZOJjZOi9-lAsi3U3~KeU)z6WrQMCEloACx<(Dh(j3=>)|pE zhiL_pIETSu8Sa|qyOjCe;gv-$ft}3NrcS{;&jIml1V`w)g5os_kjdW=AZp zu2;RWvDi;@{eJL6iCEFkz-Kqh1nPVUd($xg@(Ix0yJrjiULMKv5^AgO^98P2_4Wa0 zkFm1zJZsTs*FkycOjhu&(`S@cxH+p2%A;)GHZ5L#*Q7bt3V{U@Gf9iimtn`99W}(c zab@v&c7RpePXE$?eVX_DV~t(J%_OMBZkWDP0W9hOjqoQuzdHJO_KE{zW?$g*&OTq# zW;fgz@ov8>0ZqpIG{%M8xrK;GUe;H6)8JMrLZ&VqP;p2zl=!$6fBFr@mQ0zuySn)Jqvt(r0Ge!Zy-S9b>W`^*_6kfEA&%E!OXy@ z|65S}!BZMPUVFLkbHv7MO6ftCw6SlmCF=N(ppTMtOdX-YYv^|E%55~muvWu?08 za+%R_>qwq`f#Rs07@(*0!vh7g2g8pV#uYY#e%2{@t^xAbNt45b;j>~5+^;*PNYaMq%LG@+#l+%GF6?L)hv z`8j>Yh_yISgdFw7Vh3#QG;1K{fd>N#5V39FuPP7=D?j2=r0j2&0e5(XHg&XoB&Abd z&L47t$6AhOO1jGc)Cnr+EnV;d z=4QftEVETl*2xhe0??8!>SaN8_3nOYdn`QC@WT zS_#h5&`>Ywx>9Yt5{#KbJ|xbaKQ6^P77&LaP+&V{`h+38xJ4O)M$em272{n%MYD(6C}{1=d@t)C{oLpZPec9`s@W?JtzOn zW(WUg8;ml-H1$TJE){ldw3q(0QcJ4|h zSQ=RsSPvA0Tm|m$>_RmI$Olsc2T3;3jI}v^rjxtwU{b!({$J#{Xs!I~wXb~Rf6M~t zvH4dd?0+MXM_II<{pa`n@1u_co?b$H!<;-LSxFuiDX39|ijFEcWI&@z&0QznDrn?) zIroSc^58AkWQqzWl8p*01%wM^$}@Z7>%R@XRgbRfSJ<#ivR@ zkAYTB-f*X&+*eAisx#B9O87~929^_piZe6>`QJ>^56^ft(5Vuh)xNWZf8S;l0FK+Y zj|3t#cL#0KL8kaGU|;jWZ6`o8e@u2&k+D&=v5m8_JU{h0sj_o&t>Qg$`6KsbqJ-DI zZh1}+hT%!Gsrp>%srhEQN2L6-R|^R5Vt8n*(~sqCL3M4pI+|QuD|7g8qvhyjKUpBQ zqlimWB1AWaYfdNxd}XjbIs_OXui)CLk!QR-+wMCu;JOp`Jyv~pSYhRt3JutGDM;1G z%iX2?U!#ZT@8~fC`96gF&!flPC!1_PUQm_S$kTR`HU|ka#av^sWZ7T6e79j_o%-|m zzF57J>AT1bYuo;sfe&nAw@M^c3t==H`&fTUffd zc7JGO)TCka%(Xj)C$^o{$1IQ$KLuMY-7qDcrphChHtst z-o@vUmP*`Q>iTzQbc$cnwtWK8PxdjUwCKwVpTnMjpp4(KKH#k`S%K+YIVhf7Z_>x4G;TU+k*dI zWBeakAv0!LqfeysQ|*Uu7D$+7X64696Ivu&GvQRV=HyE+Goh{g{HEoF_WkEzmXw_u zfQYa0e0ia<-HXfmk`@_gf*!wBWPM76f%qBfyf+Auzk&T;R4`^}zkR|(T^4=T^quXt4DpO0%z3zNh&R4xW zuY4jvq@V&HJoYKZCsZh7`Sztdq|O{4yfvSI^zJZ2HqRW+e{yVpIvN1;6kjIlOl<1i)I@$t9qvqjVR6J`$17A`N($o*5ar^?o~-?Fs=8B}uo&y4N= z^OhQ?MBa70aI{@3p7lq;DbuH1%5xPtxeVOP2WmfCJdg6A&+9JhRm=uM$1g+`S;v~W zwmez#-vJH^iqx37+4k0+v?wOFr;_GS=$#q_)Wqg^q>A`M5i##WS`YWYe~x!Y4={wE z4j2jdIt!HNK0>U_;s6){68jk2m*(Y{nxX))5NtLEwnJ?!?vl$VJaFkTAaS#8@qF{MNMPsAD*=phb!Ynx=C!AGf z{0uU?hKBr><)y-3h^yuMJFX8(*x5PETpxt7bFd3jBB~5yr2~>hXPv2wBc2lu#Jd&< z@m(IKy_2SORyFdq`DJAoc?IvC6UIfx;+OvC`~^_Yq&MWd>c6O$f3UHC{@`#iaGAA& zvC)b^_3m6oOXmIg)}cxLc@L$seadTWO)y8@CEDQ=anjZufp*kn2Dyfmo5_=#ag_iu zMxpJ2hMMyHyO&`WuJ#=bg=ifSoBQGQ(jgEv1SypPQ#b#W>Wn;E!}wto3HEg(7abN5 zy&m`HRyjuIke{DyF#$p0%+yZCr=WX5ugK6IYNw96QpZ*GcW zmuwx#?YkVREAHQ+iWuB=npP2Jf}ZEs1m^1Gk@7{eI}h0`XaYPK8^2$;L?3h~`HrsZ z`?&ZxlLvM=5aEvI72z1GL$0p9x*mzk8~b%#Xg|GY{)t{sy`xq7U?Cv-sWrznZ2!c% zqnRL+4lXj_uYTWQl%86Nv6{4yUcr%${BBCw2wTEbRav}PcaWBrUOBlvG#fptuLF4= z85t?_qMOqX6UZ>UIo*s~IevJS`va^u6;$cpN-%l|&B}USdFWJI|G978^c?N}ydbyF z|KRo?oP|5|-=xZO4^M3#fN_h=)+L_EFCnU$*UpQHt(4~r{m53G6?ME-U_BR{eTm-` zJEu}uVO_BfhR?N9*FD}($m68aQAqB__?IFjQ4Y{%s}3`C&?tjElIL}{`se0Mm;6@w zOrs)vl{K@-cZqW_A=+MIy{hEBmb7C;BuX}``3%@&=ld7hAJNUFg*^5Z>TRSa1Md=X z#s`Sp&A_Y`4NWcWyM}ed=mugF&zlCq^$`DoEz@SJ=owC`q|YSf=P_;XUzgopQtZ~y zv|Oj;Q1e;o zVLR7Wu1+}hk9?j4m2k}8#(&6|*+TWzx%pHT1Ke)w@U{9@A=QGYNGbD+Gu%&+8S&CS zYGDh`xbju_+FA%RGrT27=7wc8Jh z9~m7~*kB)LnCF+NQOapjL0E&y+Aw~&3OQ*;_N5i8?8{)`TZ|61^l#sW7mT%f;MwsV z1(Sk-FK;;iK-p}EJe;3!n@e%*jJ@Hxhg`2bBjq3N5e=lbx1 zt#5cGmHmDGmigbf(I+XwkCZ+Wnaq z072f1P(qxO;Z}YQSS*{AjJoEUxGafPELiS}2KpFhRxV41I34~H%^JPm}#hI zZe6>shNV(fIT{dYC>v8A>&e%R!$7K-m(qGMVdwIIoFxCy5 zDl>{J_MZx*o~z2!bj*tTFD-lz@RbXEe*2D-8DgnPNK`svqFTnUm*;Sws^?D-Cm|*< zTZeK05|3p2zMqqERK7-eQ-21?;lHPxvinQlv*l^XXqZUqqeSHT!NOYVcArMuLaIl+ zR_g7N$?7u?4&BAkbBDx5X!LN1_WnoSfT5=d!>aCg4LZAXbXs-I_GAsuF zA13mzOn1sd=i|aD>dl(R(c&o=sRG4C17O9XVgIr90B$A(91ldaJdXgDmnOEE+C-&Z zFoUImX6$yot5}Lizh(rYsA^rqtSc3}DO6Nmn}5UbP}p+UBvU8P$F#h5074Zt_QlsA zgEpE z&GaWXeth$onhnB3Bltl}T{_a2%Qzyy6`cAi+at1Dic1v9HbA}l0Y*=K7bCp{T_Qz< z3GhpQA!3o^BW7Pq)+MtVm45N?|QI>qAvAlj0TDR||wR z&xJIvAt%4}rEe@WIYuP+BMtq3-Z=c>;q^Ergvi2$0wvw(lyKTKC z5Jif>ccr>{S8d`SDIGj;?@eUT&q&^n5p^U8#gj-M4fw4FaVA?g_H1ffch45B5=Iff z!|9L=V=R?BJs*5`j|Poq({M>!SuIsq|2BS2E7?IoGhY~MB6mo^frO3E%sAl`QZXtK9m#o|+X8L7IoHdw|=zrYEJ zC9GH-k68LH2`f9%<+datslOnT<c(-_In$5a-=#oyMvP&*}T6MC5 zy27y(2iEU0%jc#x6u*%_^UsR*|CfNQw4)movY*_bSte7}hkFiVtMB6{VNuwS4&!7? ztT!jrKCAY56i);`rB_6&h;Rd3kS5H~#&t$|5Q^l4l7SV!^qrPx^GKcF<)i(#bkEOU z##py}?K56U#wGo_8SmkycLJIQ(mddlEJ74x0s1omC->;z2Z!`z9ggt8VsJV=Pk9@HS<2Q*4UvDwlm$(CJLdVpg#fnjHNh9$g|C%V2ny9ejZ!Ni& zSp-BgPO!WXP4HsVI4phxq*e!9Y)+);T7m787Ic|Nom%`Bg@i21#UklJz4OeXwtidR zH+7jRy7P*7BA(|0(u#>WN}bM`rozKtKYGZO-OyyvaDI42?hfhB{%usV#JozIdO&BF zG2+TY%JnQX)}7B^NDw|J z-H+ocuqRpw8D&9c6Mg~evL&5pLUfE-yvHwGC!}bHe52u}-B&Xax2c*82#MrX8u3g9 zVQS<}*RZ2bWmP=8hOLkUep#o(zYb0qv?rW7>`x`IQq$Kl38=A*oZrpDmnX1^yWXkH=s;&WI7N%@?ROntCz5r+z_09 zqmDv5KmF9e;6stKjPw}9LROgS>_h$-&IscOAk5ZQ!Pm6)p!i)3So-z>n}$;ah)=3) zU|gbY^8pT;k0>tmU-HHqiXY^}^(OevL7n&As0Y6UTSZ;>h%Z9iZZk#|Ndj>Iq5f>H zl>25}AD_5-ljLcD1dKqO3KZ)zr(yNvhdTf56@A+;0@Es%gPI#jKG-;JenMAbLJqYo z;dz>LLEiIpQK9OgUYb8j}r zy~YQ%6?V%yoL}AFAa&*yl_DqH!qZ&HTf}*xC{2JcrO2NGGi-Pgn1&>RWSqvn{dW8^ z(zxM;G+1B5X4A)Sloa@D8b!*I+JA9fPYnbz41t0;QKri>JKlXteN@zKP5S2sa-%KT z$8T;k8vL#l5L}N3$4irq698MCOXJThNu~#SXETMF^bu}3e6ViO1~0b2%4N}XkKLTO z^_XCfwQ%$~2;XJ&{wG{kU+@hP#QYZqL*4^P?ZcU9V0)&2_iopH36}VYFER-eiU=mv z@RBW$Kn*0zNDBDe%pwZnUNEhpZ90EZLqltD&&k?uk?>T2a`(E9JO_NF)@|S>!;0^~ z$_|M8n$=*F6(|uSzrAAzBw7F9!O`kim^W;87HU&yUiG~?&q(V;M(_3_&GNzXPTQx3?7AJG%5$iM0I>VgH5-fc?u=#ey z1i~3^Y5UknUIlD2xuK-Dl1lSnW@d7}e?5)GgKSd_QR3CB19Qan%L=PcY*LSWM0Y1& z^y8fBDKdvW>_&f*|N8g?zj?NdqsIiVA3A{Jk|nkEOUJZAEfZwGCw{qgZ_%adoLWfr zV;5{p8Fj;;uG`^WRiBdcBl00N`jgy0pZ_lyK7C-1TBESlU^8rT<6wnsx0(|i&#od8 z-k&X98&Q$%VV$UgOSVi9kN55tz2tNl-+&zeZDA65mPom;ncIxv1Go!a^4s=HWsvcS z0$?>}cTrSrdrqI43nHrU3vopIFLuR-19uH{c0IHYoF8it0&mN-z4?LCTD}vc!%O>V zFjJ1{LvLm3e3)CO5bD3I0oU5$qe|&n#v=4rYRHL?v^Amh^)e zD#Dljs$9V2#~D0|iKI@AQCtGhaH(%jn9A*!&(V6*J^Ofc#~nT^RyDdT4LfxcueOi` zc2pQ$IPd4+ZcbkZX1pqkWah4XFynlG(_;RTp%aB~{@~`#0ogE{m|YK6vmzREXI17- zpLK^ekwo|>9}Q?(!6tWGd(>r^YL+kzQe{!l<~?xw1L}#b7G># zBdjq2VC8gNy~md#_w@4`dekXc`PR2f-aCI0+(o>!M-vAfeF5=xLMWY-7gjD?UaBV{ zW&3V^q$SiE`7EHA>-cc#w{Uy@9CjR4voPVerVgQm9j8gOu{`gR>f7H&A;f(cFdI7J zGsVv76tNT~n<&K2mzdQlS>7?F1FqxCbep*S6QP9vDh#~5Ba>2*JMwg6I}>||iItZ~ zHj?^g`&5B^x9sM)qv@SUG&`hXLW^vhH63>;9u)f`Y$PA`oC!jZjJ}butPilT+MUZo z*jf4{qIA$6Yk}UH9v9Wc=0nxJx(}v5ns-B&>UJua58j`MvD*83s559CyN*K0eAOXn zNrz=%8iyWp)sV`U&gT^!xbtkj{AdUR$KBD@xTS_Tz!>qYtiG2gf4zNwp)th! zVnjKYpX`CvtJN297iPlKg!-asL6Ky7N#j!=pvmcC`AMWq(e|qP!SN3UP6`LCDafV z0qF|Tn}85{51r6^?m2dM2-h3!Ai8-#)7T+@AjH#qIr?+~ysBaI?i9|HN^=(|qPdp2`N`~n zz03x;=VcLI%AyIgVeM_Mq-1^B^AUd*rd#mDsj0*dLFOR$X!g`)TKr+M1;Db8OOsS2 zo+X!08Pm3gloY_0b2PL&WHrZZ@vJVr?yHkG0A8SaW{=_wzH?E~{9_g%6)w-J_zpm2 z>%5&Sq;V)rs^f+2aUBF7PR=NFFJN7Tp9tiBsCqU-$zL>Zf#&IzU7dP*KrC~YKm|OC z<@nD{;QwpDAY?BzbZKS6P4#K%+ll5&e)K2)>bCi25m&r1F9O=_={xXeuD`!6&*0nt z#^kvnjj?M`MwLjO*XRDS1;s8VRH=o2K+22fe9Me^No@CZgg61FPi^rdZ1fQ@_Q6_I zLDP8vxyW=OG-BReg(k$%Y?1dfZw*J1S-br~RRDCz6Bw zflS+HE!{Dr&-r>fTpE>@L$K59cQ94G_hgN;2E-^mX+ADDDtI2*6`;HZ^SmHDy$nDR?+=vs>Z zL~{VGUZ!UFw>~Ln{o~|Id|PW6DEZs*IEN>zs?=0md|Y0R!u!O0iE*6R%*P1*^E2z~ zXr>J>f%A*|zI%QjmCvUvYrUK5Px$fqBcr2sFV`etD?sike8$U}9UI-GYA?~rsS@{l zzH5??ZfIm=*|_mLw>S)_K2SxGJ4FlQq%@2m)fprO7dP|w07L%2Kv*N z@sehNnDQOeaVu;FTP!IEXtL|;X)4Y`rM5Kd&XvMT$1n34#Gq4M*LN>2mv}$|-2!?Q z{iur&;k+hze9zC0h=`L>xiIN1cy#GFTlJ0|u+}L3vXkQ?DoPK(OmH6+!=wXQ0GyBE zNS%038Irm9c!#BbGj9Knx%b}_ae+ONB9qW@0euN{^@g^msrRVl7>6Jqly1Qw!U?)| zn7~>L>y=ke;lGa7Ap31cki28QBC5D#=%tHg&rB~6bhglBR7~Il)Vipj&99|H3Yv$S z4-89(70(1)K_>bzotD>-oP^SDOOT|`K5bXp)Vlk~SS&-=AToA{tsi79&^&-Z9j8c6 zCU4}(dkE|w?OtemG@W-9YN)*AXA{k@k-QVHe4~KTHHWO45L;*%NN0h6%*DN=&YCx{ z-|p`{ivve`QB8)mmSTlfZUXyZw&f49!9y-yG2NC1=0pBU{MYLCTC^0Ii?BQzN9tj? zM|UY8KuBD%+r^h0sxDu0md~5^6&-QsSG8?`tq`kAv(ZPfYGgITaaG;ScQRw1va@_C zbgxwJ_?Al=5Onw!Gh2RFE(ce8m&Amj(Y|?v2JS3u<;3f{aqMBh&1~HhqNK4>KIdHR zq(cCPZ%fC|J=@VkNo}I+z0&Ts^PT8+b1BDI?0AhyVbHS|WiF@SsE69&UTtlmtnpix zpMx&r&PBJbEpm-B)m`%{L?=i%Z!w$0a|(OJwki>c$FXWR7RlFd{v=4~W1c@j!trwK zNpHr$M{3E%wI`EOGLeVn?{Bu;7BH}pJ)KaAK*NTZV;?)FCZ6|{466Bh!;SMV(GX17 zn7(FvQGRa&DXZz9p6XH=7gpd0wCMmDqUVf3LYqP^-CCx;)$~aoFxPr**Y1GNFp-*C zCL3ZLTjD12?6(T`K!KAC=omd9P%lQ`tK-DBdu;$ZGqHLz4qYci{Fiy|~lz!Qnn`xj?fh$q0&8Xifg;Z~!L|?L9 z!*A{C6Y9@*pQpV@==2GVl)&j6*s<4Sm?=Y8P6Yvn7VP=tG*Jl><~4L$L9Q)`4F}XE zf)`lBT%&dALnJ*OU|7}+P%3TfwmKa>Kgj`X6ei6GIuWmJI(V@6ogne`doK%`p@vog&lM>>d@?D zy|}p8>1?78ZghDtV*=wbNwnUu?P&CfFI{AYZJqd?CGAulK&95ci|H6 zRUaLr!{fW#f*DPAJldo}pe8ne6tpW^pgj3}pZ<7wNTs0UunLGTec(s#NV_{ShVPx6 zJQXvt*G&ej?}B6aixX&*lGrhSVbTCp4KW!DIrG@}A>DKgSO<`0z(Itc8?334wB7^N zFCJewE*f}yV*TuF?>O69^n5=4ADWuxj+ExIUNBbUXIqZzYf7INU7F9pt$M+y8Org3 zRRvXa-wr=h36)r~KJz39U9k|^nO>R; zj^!$!yYcP$nAc~jcfx%MpJ>}=3QPNSM5;AMN1Gv@FINqfO%lVjtcqlNUwC_InJbHw zYW|E^7YH1m&*9RaMcj~BQtVB+c%xTrI6soe8h^-o2d))ZzjJ|IZM5*mASPx!w+$HV zw|iynP(2z2>!>U4ZR=<>^YOT?b96A?=hG8Q?O1YV1M8Oi9+5}(YWn)Dqr;PybT861 z-o+Iq+^E;@O(d&7;9pv~auB#;A5~L_1LQ9BFjpOCxe|bov(jgaIU3XRRLq&}pETr< zAFWC=aMsqHBih}I&?A^>vF5ifNs2K$+o`KVmX}W`fN|8-TZ3J}$!Z-@kvg7D&vYNx z^_In-%6C-~NXPFKl7cG6pwnjdy!^anBfJ{gp6IR@O$8M@c{Yw}SLRf@JsQ2SX4eK~>hFbRZRhv1U&NH9oq?}C@d0g^27k~t z(tBS)){2zX!LXo`;jiBBDl=dmpe$3lcT7w2*QoP%UHiYkxytp~Oo_32E1$i3FDv!A zq4@XeCHdX*ox$a2yZkwM&$(_LdvJW`dr+Jmw{db>c^li5hx}I7|1VoA`@2ZPH(%6S zaZc@F8bTs@i+wDVm1ir!q>4N2XaHM8LXN1%d6GxH9_-zhbX+>cseyn0i8A@=aB{o*TaiZUnbtd84Al8wl?C?NsfzgFyfC zrFyyl^w9uONdzDZD?LBlV2a%+8V;NT+Xse^I4=Eey{{Y+Mc&! zK3<)9V5#_gdWvYqQeP>g%&qr^sO4BU2 z?gzQZ%At(DsR5lh9U5x!h4LOFUd{Z{)1!kMSqdR6W+rW+e8KCvI>^oqz2E%I62=(Y zQY9rNV2^FXH_@LmBI?rlvr#M2uT?%?#5#&k7uDU_)nz-_{Hkm*n6U#h6#syrZe`LM zin zEpqC^A4$oC$pJe&*Na2Ez&{M(&1;=eTKG2NBMW9iTrq;Zn9BAMfB~!)Kx3LDO|1($ zN_VEIuq zsmL){u2^CvcIbaQXt`cQ-Qh-9&2=RJDi{qx?&}>n@fF$;$yP=DvQ8$=!u|yt9_5ez ztA|#uM%HY;=2X*$Kjru8EGHij=(yB&5yx6pZ1s|z0Q8Ogp>FAL%LISfae4CW<@EU& zbHPt`xa}{Z9e3Y7npeR*^nsfp5q;G!(bK|}%AOY~q`BD@Bl60LA6k%V-2%`u8hWz= zOD#)%l!319rtt>@Acoe$_8`828J6GbBjXP_IbYqpw2|r_pMlO;atZ9nn#H)z_9}ZW zHB{U5)t;2vya;h|uYHrzG#RJ6HQ>)yPD}yjo*3Pr%gL+!0av?OGwrp>2W?T;q@w{j zj?Y6Eu5sOJ{kUCmpnSG$@2wvrbvWmPX#z>|F!p&kMd>>XyzoUPn)j9pz~+M+V|w|3 z_3od8c66qp&VF?A&~j+&Ctxcm>61Y?49VuqR_|6{>q91e=mVc5%%+~lV9L7k%OZrA zNUxaEIGdj<@XdO6qqnAayrN-?y5^M@FqGaXFTw1Tprzo+SI5PzrLaVsF3pGKiu|>u zh2@$wpX@Dec7R*^PO(YlW^ z0g_3KZCfVaN)|OR#NwXb{B6dEiB+YzftIK}7@H&rlx!!taDdV;GVVUQj z5XqaA>@1f0)ao2JO@c=?JTyq&#HIDc1%m~#3u#=cnMc8N$$xyn-{ynz^wwFx`u)en z{IUVrF%h?;#W6lnFdjdVVDY3uU< zOUd^b$<)}8Hc=>1WpctX|85qr^!}=YH1>h!WE&#l^f5_KRtt!GSoQoP#mHEK*KoK$ zm=eqY8`(me%OnP&zz@N16GO!R!w9UZ)H*3UcIAwG4j}%VRL#cg{}k5xqTn|LZ+>M~ zj9bayEFUZ$)P#CPs(&?3ykLttYqW_6yJTy-k3zI0HnoZyb)?WXYhU*+qIk+`E{8P~ z6?6D>O50mQ8BOSx%>oLszN<;)>N%RHXvGJhcH({4^2(P`Pp$b<~s+47)d9_mbJ|4^g5cQZrafKMt!o^#;fYx zg&;kWf;u4@X&f@T6-#W zng%Li%}`NUse`Uu)@B1+!{(O+-iNv~#yf!g!kS7hdL51D5U&om{)G)<1mJ62Hy%03YSugm zrsD#IL`LXg5#*qe0S`%K9i0`eHsAn0nB>|#?BI#0+vg1%-AktkTlgs_3Gs?mTzv~$ z7~}-4;Er9&N-wXTyeiAe=qYwzHVF;6c1uLdMERoIGFQ$*sq!b~HySlsg!{t1%-bJF z2i*rR0Lj7m%eOsRlt+7uDOXLrq3Js)uk5$UB2GW#Bx>Vh_JzJvI#0^-A!E{%#!ie< zyeBCMvA+QmLEU26bm3G-ZJY5Z$%~=n9==U*!g7E6{T&aU8%1A zUJG^4dcw<}&+}NjZlHQde!C*)>?hh;Ag@%S#QZFtb8%rq`Oi)XiR)=+ohdl1=uLGR zGbt#-?|Yz4aL<{A?K1fwRgL?JEutS*ZieL?N54nhsNb~Nsu0vzV&4un(7!m=sWkTO zqpKuy{T9^VX^`lB;AU-I4XD{nL}5$f%z|dAb;}i}XyQP8nZrd}%b<$%eg&XC57k%} zOI_91nyK&z5y`i7iyX4Y@2}kYRIqyhKW8>Su8P!=dOnTczRoN1u_xXdedP8>LH*GkyY&Q76HzlH$Yo)zJuz(Da?Oh7VS(oJq`Dl?18UgaWeQw#j3*!C+<3a1rnU@K200s2&lEbprU4@!&nYw$dl1qi_?v<9e*+p zv?MiLBI8|_)5AI-;NeyLzR4T%BtW&~FoWl%4)_XCI6(8w($!w-O@zOqBjxlp65BI* zE^>iZc&VhjnmYGtkxQ%h#Yk5)f4RE1;>lVH|8F}TqcjA@sPExcDZL(nfdL@a|{Y9+^GUo2K z?mY=@cd$u|<=@Q%gKW+)vsusfJ-&ut#@t&%Z=<5(3~)guGV)e*pHY1W-{t$qwyP9AXDQs8ar zI^&{w*K4pj;5c0vWg(YSWly+T7c^_&?mO*qhPeWgtnN;*gy0()Ygdf_;shDqkhsCu z=Xcfz!)dIo?Djzyj50B0jGov2@nX&J2DOFDX*X9s4-!Go@ze`rTfQezy#<%dy@fOx zA62Xu(F0a);5pKmO-iv(2Up~BeU<5bX-(EG8HW(dKf+vTO@i|y-C71#b)V&k0K)2; zrG{@U-_i;sgZG{$$aeuY5I!)2<8Z2a!p7#!>>&=Q;(mqaT>(dIHih@$gp@phk`-0{ z(f1HX9Zd?1l3;GhsQu9VS>i9QxAo$G8Otrg6ouM83|UKN9;djlCTJ};M7!q})OnG7 zhjEwV_f%&-CQGzRZzXE2Sj09xRz9;bST#~2f*z-6;n%D$Cz&t0jdT#;qU<*5u+|yA z-9J_{$MeQn^3o^a?C4@&0x#W*!}6&Ke=KHpgxKLsOlliYX8`h-$+bzU3qBL8guk1N$=(J-`o-x4IhZsy`JTDI%H<=OT6)v-RY=AJ)$AT`9BS9Uo`k}g&S zF(@BfRf3CTK>Z22JVeyKy$Ld~_S{C9?-Ns~$efqX%7YPOl0JKjt&{HN$!Eo zc=I+94SWcY0~LBbC<^%b zW?1@WM6|!i#!zK$-A^CTJ8R84 zo@~kEWBH4zjcWBIzEdc4Ww^zdFUG7a=lDPipasGRbp8-2r)Xj_81-e!bvin{iY!Y# zxvKePOppI_kYby4s5mTO_imE#e2!l3rgZmaH{i8{Eq1)}Zpn#qqUvL*96VB2JMHMw z_QMIAsp_9cN(@IB5z7NS9I>AeO`iXg))#$E=kl1r;^HH>T>H4oQFpVC%#DS?breyf zb*3Y9k!9WXTizE%FGl-IhoSL8&74YXn~fXGqL*1M8e*oNmvoPK&xy8;d3ktBGNL}@ z^Gx3N5)mJemy__7xq6n&olbF(;jcJLg*yi;6c0{DHc zTdT!Sz2hqm3^Zn9%LhbSMD0>%Ig@gVr0uz9Ilt_-^vT+ep!_>Kb$IvVo1L`{^xy9b zW2+zp+oz{#U6WF1Og?wF$;3ToYrwpPTKeae*jePIt7$c_+~;0#&@D5qV}MT zOBvj9JZoPEOg@8VU0XLGIAfs0BXZy?!`g1p(a|xXjH~&s*PmWo;-l*dtG7{SbQ3mW zF4;Y?Qsr|c=cSmfOBC*?QT$)pvxYyvqYs8Q;QTKZ=s!>4|G$v@PZK#7S|3SydxG-f ze%8Eod69Q79?Yo-F$6rBVKxjwLkSyP?T3R`nRsVy~sJPPXu!5C!K>nP6 zEC<8wrvqEb!hBf9CT}Q%v7{HcVIDEV2i(n7XdsQ)ajqaeORyQgm0Y^Wo5p1?99vSJddXS;#~J zpI%`zgUAnx8pw&{ zg1Wwp?(yjj`dUK~HP@oS(3;3)UE7!15v(8U8=`o6wWDVVlJ;~Ili`DYN(|=9>KqZ} z#$d=)?amVUI@tTmHgog&J^q#2S4&QtY7@$XIz-t4cXo4$(qr>L8fW??ao<(AU z)_Ps|*L*toAjWIGD>=$tW*E59xIpIYu$8$(bfi>5^cf^iRDe4UVK5mcca1`jCDf&5 zXpD4z`b&W!cbUESg7#v=;|vw$H!e#G%3y|-4usaq1bxQ2=-laFurla! zn8JQjrEf?RhMNR+cJlL|x@$LdTue6KE(Hv6-e`f(OtJuH4H3jZo(c&^o58`o7&5)S~`)m@#APJLM+C0%BT*9 zvA-TkA%itM+x1s|-CB~AU`DU^QPs$HHC7m-2odLCOg=sxvR%$r_eB=Kmw82DXY0O# ziM_qbQl}B1^88^>DU!Kbs{20vZ0_Uym4}0kjlTnEFI^5ChuT%cN$x9*o|DO= zqqmu5y=ySyCJJa+`Scd9?tJ9JZQ8~6dlQAsurh8gz}NBPUnS5d1c)CaMRU=d{o|fd zH|a?ZFQ*FDHftpBxskA&Z8f#~+0hVgth zQ)OSH>lD-Wft-&OIz4-7X~JouMg=X zZ<5yq5H$dg4Fn7|MDb~F6D_mq5%(%BFzQO5K#sSYPD&i*&Q}$kF5-ChnVa3sUX>`ZLR3qZC4U{@x}AgzY%~G58Km$Vovk`)>@~2x`g)Z z0CHhGrhiFKZYy_XZnhT7?&&p}`)ulOj}`#Ns?&oIbkz`WJUkBBzG%H(4@pY#yh^>S zy_#TKvf9m4;kExW4DEfkt;?Xm^;cOO|5FwVVeCc8|FkR?E??7gGB46U`u;mY7j@D4 z9^db+f4t}O9qebTPNG+?E>m-Sj#@pvxI>^Y?2C%j2y4x(ar?L_dJuyzZH)mY4h#Lr zrs`J^KJRahO9gtlIR&>tY?fZJ(SZEk8E~R&CcCd#(8^y})tF{;2GEts zegU#TVm6L!BkR!Cz&a26gu$MPH8^3NxX>ssZ9|dxz=)6=HhLvo!@d0#1%Y56-$W^k zfyoFLCwYj={(j4%r0yS8Xl?{VB*v5?jZ>sufdcj?{0Y1k2CoF=Z?Db$pOrD_Nz3=wIgEl{`ijhe(D$w$K~mqufdF42 zTo(HiSjU++`B9YYXS9?x{d~+yXCQuydawAt<*G6;JJ31uB@q67g?mH znctq|1r41Rt{&i2PTaE3eb==Tlsh;wCHH_=@8`@1>nfexv~73K#cg4}O$m9WOl0;3 zlWwg|K#%91`=-^-ezao|d0rNBU8=WmVV@n?G3#!6(twHRu=%kv8jG3_OeqWQlHC#mQeQ1RqbOQl4 z^V~s}`)%3)`x|)k6f=$UsfxEv$-6ISf^5n= zkl`|RtY^4x#g}u<#*D7+p}PqHBI#S)AB&A$fCn4%cr6Tfhp>2 zPN}~4qug=(9F#a69oXkV_ZY=7L=q5?(X6T!?iMngZn#fxy59~Yw;(k~8BO+8VJn%lW6_h+>*Ao>$6eq@``lc7 z8%Ul%e)8wP{^-oS;nPO}Ymvc2W%0&m+edz%6)zsdUO*RnM#qQG(YK&+MLw8HG=BjN zb(b#l=Z#4wW}(t-IC>NvWmO+vxK-(SY2&|L5)qR5 zpg0klWJwn};%7LjHQL|*K$8{ zba=qnObJ*GVt)Y1JLASA;IlTG>Ya3#S4`#Ow?(V^ z8_=s;UtCjm$kA406}P+X31nwZq{fmp;8dv_dv=4XLEQ6?nKZzrEBz#CoK4Asd>f+3 z+<(W*>~&k}7j+v2XT|2LK-_6Xbgj0gO)0ZEWLvSuOU(?tNfM{UobbuZ;`W;j|rv3KG6V>Z#Wd1>*hZ)UsD!0&evm{;a z{=sK$rAkAhw&5SZLznpi`s-tl4dXNJ=k0Wrl$?0C)sDFqJG)i&f`^@9EY5r^yvh>m za#Al~s|ov&iO!;V{zbZcud7Brrx4iI9B`IC;g1P{j+hA4idtnW;Z4n1;y-QPWMA!U zU|7iz=orm5X)^4VzLm$J=Oejd1fH;E2v+y;_|d-1!R+~3oYE!t=>XVbOi~i91=;*? z(-)Q9Py~MQgb3@v@o9FM#6d2VblIL#`s>Q=B=aYi-Z01RAO0tX$0y2>9i|RD=ae76 z_njn^l5%3e^R>iN#cJ&R_WcC+!tp|%wqKs9B77(&Ze5%fAPTd=L1h-#u4?@JWjFDR z1wL+&$&E~FZJ(@3lrm|0`I`<7bE61vfl={oguO4N(muPTDU~ASi})ZND3AcX17!x2 zNmSRyE2xUnl%uQN6XZkitmRD)t;Jxv{MD*nM^!Er2U+EU9#f|AXz$=)wvwoJv$s@y zUmTlNX)K@S98G+@CFltgE9Y;!Q>`vd%~Kd(c0;uU?E5~S{2V7Q_|btU34ZF%;!bjH zu7*&$7_fADj`c^i#zp2-5s!ZmloqJlT^2||hJaq9g(lt+xk)Crs^r&R-Kja-j=DcH zHxf(WeWX&*l2GX^<@EizcS|{HT5!jzpVjy{G;o4O$aPi5_SMa6;j_42IxUoO3+H@| z_{^L5S1HrV@FR8EnN;Qxu^UidjyW=MA}K0Du1`Bp3TuD<^)~d=KY8izqKZL23>27= z3!LlasylyvJ>qJ_>{7Atox=I6yZK~u?Ap%EUcWptmrzdKNxy}JJ}z|$x|FKkLP*%& zaxy%6McB$se-y0B*2|ONzsZ|XQh=9i6O?t)GhcNSkKTyaEu?gUt`|tMl)Pd4GegX*%<@LxQkEHP2K9{#YeNNMN65_oN$G{fRl#AjYV4|bOL*Q{|W#&b72m)!- z=qq#Z%D%}^8QvN}08aIo2$Xuo0$rCNN%C58f3L1ddd;19&#{dq1Z6Zt`d+RC{EMEex%sgnE+z_sYE_u&L(v4u*NQ`cjz?znOKwr+V$UG6%sNqrP3eSXHy+Ear3O&#`l zAr`^bcv9!axsUnXIngt8=joK)QK&qoLXgI7G&Gr88%dpGQ%667+;lh#mKe9iUwmtO zs8V%h-HoK^Jui+kh_87+gSiOxtKN>iPl28G#S7H5wB7Grizz#MS5V zYc%_gNSxTp+Inw#2NEz@RTYZeo%_V2_Q?LiYj|YLHB*YVzMyV?)eUysT4H!|jdr(3 zQDAd-$Eq-`eQG+Z4ujk|-!_3-6kgi>8@p6|GV%$`D|71*{hRmcbc>4JctwKGu z1BnL*kut$fh)T=Y5&+$QhSfQ;Ed~bCl)2J+V zsJq20cOas!)7ZL3FuL@y=yi$grGfpHcEMP^ElVz=NRLUeM>UeI37b(4xCio;bmkdP z8c)SDGH)M5xH9LfNNuVW9H}A%4@$t8>;kWh>!UqxdAi`>#TXCKP^3zz<(Q~>0(Fo%}Z2NdaU+3mPLcD$aXo!f0TnA_NOe-t;2i|Xi?SG2iCu4kqs(B&JtT4ELk5=&3(lVNSD$hbu zTe+*gcV z*!H|A?ckev#c`=3d#shh*X#5$g>vX_s5`4x$Egt^Tu+#f&K6psEZLYzm`oXf~zn&1*KTn8DSTp_q=n0`B ziOLO{%bmS1^)g)Qw*}?x0H)|3??QvD`p~N+ug{_)2vE&T*XEWg0#~#BxoOH? zN(=(`s`FcqCreIFL=ea`Uo-4}`XjN-!AsL*M3rKMl4gQ(QX7I4*L))m+H~fxUKkdJ zYnrH$dXh!drl-mJ9!acta}O%ERb_+9c$KjOqkO9Kc314lj424St`s30IBcfAinf5a zxE$7-^h&K4iBy~?@6E@}7qPjCN89yeByR{KR)&9A@TG(}FNY`AK2m$=8B$3K94)Ze zpdR>uWR;FJ`JZkc%XhaXnE~5&gLG@4ii-jt=Xl!M}+MZvEIWfIu|-<-#?yl2K{Cl9(*Jm@0KG zdrS)=xjvzMrukCpM3_O?h_d|Zx(@O@2|d>xVR6Hqtd~rL(sZ^Zy0y;o zRQ7V$;3``mc5oR-FK;*dP>PzC2;K|UPx|(vA--QYHh20_60t17kKi^c;X&8s@Ms61 zvqsLA94|h4LjbY=y6%Vb%k$lu#TAGE|ItPy_l{a9A@S95Nw?sWVBjHP8t`PLajc%N zNuIBxt9)f;P+>t0MA-OBHw`V%a@3bpTba?_X0+pj<{xj4ftoP7w{S<8lO3PwCZLkD zd^Y&{iMHNzplLV#pI7of?aF5en6(WA*_PPuq|ozF$hwr|_UU6|N7?&NlGajv&YUJN znDQpZ3hA;1Xy21B)20PQO=&t>ObqoVL1~I74vZoOM%6i!hkRT@4!`Gy`mA3=jASc!wDB6ERcmA{<_M|53|(S33PqI)C)GOqN|GE+bIA3W zXBhnz(r6$;{K6IPa2NeRM{D(kWeHKTi+Bcvf#B4!q}1AE11aBoWEdlNCkwS;nf4Nt zFCZl13=JK_tjlos$#aZNeNo+e-3{oG9;b6u zto~3a^g3dCGikz-0dgf$M(Qpr$_JPE4BJhW#n}!~`t|4Zf`gVg!F8aE! z&b<;{WZM{Xofv|d;r>rmNM`$e^YhV|X5|vX4d?u()@kBVdlSRTucS&k>!$5%v^F^w)E*U6Pqa$=dnHeW zlLQl=zE3Iy!NxO960B&cXb@MvlM^$0;&^4xd4@ZZMMvIAA7ov%P2lw>7b_B^$K3ni zzi2Z_orc#Dwgqe=r9-VaBO-B^(i{{yvFt`WJFBJGr&*N9Ju^;+2_X`z&5gamoRUK5 zbQRx?M+Hrk5@d3ulpDK{3b$9^)8zKR#54E6#^Z0d>iTBnFYM|FPhnHjrL^pC2kJok z*Rc~J+pqYepNbB8>pjObT@g<5WV9W4_D}~!z~T4iNh#{;;(qimOZEF#gJZu&^kL!O zS{EuXQ4qs%lqa*Gl)32^jp-1ydx@x1baIPx+t;4?hv%^2WAlZ=t_s1;3B+DC8t(62 z&?6{y`Q^T#)7r~~3kbq+w|`zs)SN_+ACCt5B)%J5k zgov<-$^?|V<94!c%x*{7BNi4m&vkXmi?w+zcb;jJ=s6+YE;rzA%h$OQD z?6fY}EAiRGNb{+kuX{z9Ry(PcROkWJfk|FSo+2!@tcoc*(UENDmVY&uJiIWAay z<^xxsk$f)->!~@Hx0r1pfNyu5@@Oqc22~gPk>(<%X z#PG}c{|&Fszu@Ivg%bN8!0VSa$;D$~zvLdO^Fr(7#205Fl* zxuuIt6ZDd{$)g^;kO|ORx_tK%mzv~lTH@GSge?=D`ue7~a*IV+!_>M+Fv~>RQ-t~I z=|m0~co!ey}Iag1NSbvfbpxe#o-uLkSY4y)bZ zt^1f@ZS$|H^@#LyKk-5%_f%p1FUokE{Z+p#1Za^_4%BODA}}wFr}`OIIc`e($W%KU zjJdVEnBd*rQG|aV;hdPkQgVAW_iimPHkIw-BoGj{kbUz$$!t)5hv0p^WarjLAnR{3 zuQPTZ{hK6OApYrk`(blVLC>}pq5bZR?UqH2h%4JnjBvReeC@NE;FKK}dfNBGu)ZIV zW*u6ij>MOOa}z~qL}b6d)ztKd%Sh0sLvyfkRc4voEIw{_GLzZKPkmupDLbE1GAlP! zUOqL$>Y0#!%QO z*_=jsiycTM4D{u|zUJzUmAcT0oC7LmAe^KVchwZ5#b1}W7{Xb7MLHlm?mqXX@U1S5 zo~FXPCKx~a>LaurVR=^_rhbXKt&$a5#z@ncb`Mqn`MMZ-_O`IJcWpO87g>{CGP(Nq z&|A;%5A;v2l?ofoPXGA016OcMn>8-TT1ztALZi#1j1qYX7sE3jDNClLhwTS4L85(i_p1l2yH<l(z_p^NCw3%r6ADvP{UADbN+(lkH>a$t$8;yNE=O(K#*e`MB&fT&bWu&H<+8 zsuJ^?>v??t)flxK@5$}%)fm~nk+EeNg3OISqFTN)*O})3o1yoLqz~CGmteDqM3a$H zBmYNH;9wJ2@3LZ|(|F-xONz%n?RtWX$fJiwYea7DQ3EHcX!A3tNJg_!+X{$7`=9XeHP#E_mR!K?=fxgrT*8v zoDX`wx|W5*7=h8SF~~UYq4ro z21Gp+LVyB@QC`Xp;k)^mg!|uik8L?z%+oMpw#;M9wtE_;<^m0=2L+A4=1c>DM%|cH ztsAw-5qP>7wD$vKV1-O>j(16CsA+o&&HjN+EQ@arq7n{wm7X*uIk=}W-ZQ&=-e$Po zDfY-~jif{Y^C*~^aB4&QoaIKG>`8df@9$;kBhu*7xlhE$VnWyzvb_@D*+OXUbnxbW1AAe98AX^hn4_X6hWGBZ8YEIg>z2J2*a#=c{oocaZR{_s4HhizSQ=Y{&wOsOryEu=pLwSD4V(j zj{5d&3|iNtWX_E&cZme4N-`G`r(p2J!< zN0{iinv|k7h2EQ~>%r>c@_oTz2G>uRw$O~1tz^r`xH4pmNr;y2(AUvJou4PnJ}tZ- zCdlV#Lk@f7ddcRZ_?U{&btTZn^3M%Ev10LK`FRcVXB17Ds(z~URNC$wp9D4=7ash5 z78#B`tG_l^J$i6B{Xdz}bidRe#vi<$Exw;rJBxrgQe0y7bax#(14GDl3n$224KD&l$& zur zQ3y9bcMIxl2LKCUCIKuskEg$JB^a!mY;U zX9BBP>F;ofdzLE$$Xt`=T?wDvRGY1sc9ja~iIoZ|wE%>)d?E z9PCSOEofT*k|TruPOSCw$MkK^0(f#Ygcr#V(~^h*T3ndLTipWl3o3?Q{47{9k%|z zvFvj`l{gkx^QmqqG7s?)u>)#41-%}>64u%*va-k{hD6N%w6I!(T?I$O?? zi5+u3dPubA#sXZnTSMp-i_9RO=m@wk5Zy>m8t@?@g0!o$B7b4~HCHb`#wO5AfVpj6 zk3|?B)7`3tQ(Nn+nrGPHKBTVG5KI{AmGE_!FjphbL%)A&u+egs9*XMbgCA$VVD^=< zE@Z>7SS!cJJzCTgS)*q|m!74*fXd39agvB1SPX0--R(Zbk8ob0!j!(cmE$syY-&!} zF5&A<^u=TZ5h`YuW3Y-F9D;0?7~MHk*AH1Pa4AG69aVCTAd)U}RZ^0mqp3+}Zwrt) zp|O&q9Etma%14ZSH8!WC^6Gs0Q2+K6QP)!f>X&Fpi~r>j$*9;anrbpVwT7jQ4fZ_x ztH!C@WwOto1F9T{te>@~Nu59l^W@rFH7s6w+@ym&a9C^b=U@t(i;e#9zbJdlur}9j zYZNHOr4$MjFQGt-m*Nsyd{L|vcW7}>aW5^drNx~VcZWdm1a}SY8r&1$OV@tiZ=dU2 z=j{EiU%4W`^4#~FV~#oInArjv!JmIU6mS%esa8o1)_H@~SogXpfwN;-9S}RnA;oMf zAG*=Ifj&~gN0Af^j|PS7<5|sFjwZx3bx=pARyHcn>S|~TQ)u3y`kpH6i?vTZhH3B& zymE1Wp`~3aef_n!Cy!uX@UURPB~#XS!AAUI<~GT1UL=pBODw_|>R`?~+n!vb1AZ|d z{q}$@eRH~5CX(0T@{6TjMUfZg&|Oj-R4BG}5|mC+=8R5L7h(6G|8JTy#s1RT-@dd* zS2e{(j{jOvz)b2M6MR(WYx{5b^B=US+WZBvaGzrOcq>}J!Pd@5Ydh=x#qaRLdb%d7 zDdR_1Mj{or3zo-lF1+(;RKBL(=oVdnQxBTpT%8PO>;J;?&V4F^T7cz$RU&HD&8$v6-Vp8bLi^Jd;=Ii;&FGDtKs(Ta7 zF*|+e$f>awe|~-QI80BV)7C-){xel_fG681r*fAg!43XVTUEk#M>bpH>#2r3_`4A?F^=-IsRT%^;IZ9jMiJNNhhpn#EEF$_PvzJZ=!&E1lk%s22QH7(usD6K!U&F|pn8IqBMcli`o~Uhx7)^j-J!83B8ugyO>#K{xvI5^+DVEeXb&w~7 zi$3IBjjvgi7axp%|CQeG^dr2=<1ATw)XpCou5<$!_itWUHnfp(@FsmUY&x2gTu?iG zZ{*Ej`-$0Odea9(FFw1zK|H#3u*R9_0?Hra;Oi&W_Txv z>d~=BLW3&$VE;ZNZQNmhAaXBkH}#)D1c`9F}CgXrxrp7lK1?C!(yG_sEjgdb#`b9})Bo3RW@Ft*IeBy*I<7;Y51)gM`Sb|nQ%@lhjNf^W{-M!$l0FuoWprlUbS7RdMms3Fr!B<5`)3` zVa@X+_&$u+di4XLP?h(qD0fOo@bTJZMQsB0XfyGfUgCP6(@qY);uedIx5$bvBWej3 zHQeh|Z;~af3>&3nV^^zV$^Q;2%73u0t)%wS&wqe@kNoiLNU^STal4L7$;m6k=pGc> z_hqZD1czDIQDLTaqv!WAP8M%FjR<}}L4#mfEj`0ak_Am64Ieb6S!^qLOe7=NbA zT!py=okmiGvLv0-j|k9|w#4MLxWeHZ2fp^3)q*N7aK=&I~d1|(Nd1`ZID+FzR5N>w;Fa}Tkb5D4{yA3 zQ=26t@11EkfdwtB+h1CmZ>D(`6sZ7=V%y^V!Nh1G<*9I3lwWz~^*ZbuK`52?rU2wo%u}t{_Q!bPxCzfPtlJ|K zm*nz3I`(UR_4q81GMD3FdjOhoKLkW>8=8vH9A7kRSHQYj;sz;nAL6_H+`@ z`f_Q`c5H|v^9!O^bs|Ke@$Lh+1&)=lO$w6=F^>sc(G##O5?PS-6!s^)z z;x&-?mB-muyaRl3$NuC z-I=L)a_GK5y=iR3ogKxdmha|!!)Q&V^Pm0i-iU*&RL@onj`uY)ky~jUX(!JyeLhZ( zeR7XwS^ZbMSgm?Yk(l7d`FRh28S&X(rV4=@L)NB6?;(mf6+m6Ph1ZrI1cP5?_wbGeJnLUV|{ z7RQtYwu@LeDDLsE(|tkbk~f_l^~b}>gd^?)pSxaNhqBUCn#g`~iX~>0T-<%4m` zs1t8Yh#O=IhPzZ~`*v4Kde#>WH`<*g7D#T@^kOl1 zdOQuXkT8S~P7U?M{^jyDkYKOj8N3P3`9_<2_G$6_ey900fz*W|LeVesQ`C@W11s8Y z?`%}hzM)q~a>Yoph0WDvRhi@gmHBxJv*sr5K+7I95Um;ii ze){x*tM35;i9a10Fu~r%8|_kjDRt?3ZWPqnUar0mGW;AE9)J4gHttR%P@I_a>Gm(5 z^$}@ak7W}ip^cFJTraumX;SrrSfMcei1n(1;$mrC-DGR7#AN<H>EDGII0|dBS=*gGtvX<4LcN@hB)Z0f{P14Az}{ zjstB*NQUswf@ay`b?-4p#lH7Tb5geVZJau7W5)B^jbL=GiD!Tl&TCz*3XGR(M{EBD z9l$JDwy8NuwakI_+TE2__C!Bx`Ciu?dvgS=Hq!+se&Q`+4qCwdRXH3>aYI>mpFTI+ z?u2zUbcgMG`)}~^p8(V;K!pU}vV3GrHbf+3`lZmFei3-y| zdm{`#GAr%+=%J^F?SW>Xvygk4W6|;(D~XiqeBgOxw$*@0 zstZU0t>Bt@J)&6NvSZ4h7`k-!dxVk_I;L7#RPI%x`i@$DN!%7toLJhxAHVY603B?z z>H)FFY5^yAzV+70;?(TzvWx96;^fR0aI>%pu^O3f+3@8ub{SJLjSB)CR@) z%Z{wl0ox&&E zO0C`E}Z3aT^g*CT6spn)xHpFmyA2%hvth70!Qz` zYag=(xPR;O&*L_u3QYKs=sV`tI*}5pD@VPzJQmL1@BeiRxENmw<@1KKvlwXe1+P+7g%UVt!heI(EASCAJGzPXGa}gHyT#c57Z1N-_zf`msd~Q ztxjamaGg+iWa$g1yfK(GfiE9G!^ef9vt&ufJ^6O@(3)4c~`%yzz}yOkkSoV<{Dkenwt9*BJF{ z;k|ay6Ob*hWBa@2lQTjcB>Y`k#g++OGmKaN6HcWSgI1}1ThoiJY||?iK+1#DEnvX2 zwTt@B!g8|4_)U!nAz`da1RQakMp^;q_Hrn1; zQQ_10d~jeaIR^<>V;PHAZwN}~d;Rms{8lpsEEA${&NUh^j}0{kXn|jnJBNg8csApy zdcMGHMQ+_x7ByTr&j`)giWF)@o(&AMwoLKRdn01Z(URY;3QOh9+^>6t@oxQEcOSDe z9&u;n;I@4W4#aZ|m9gN~OC6!Xi~hX-yWX_Id8p9RA&^H(rfC!H6KAtqNWL7o24^?T zskN!o7o7UlI`wGiP5LIB(OfrTZw-=^DOsbDPorl$_IZUWydt+;uK`jh=F*cWqEtex zUz@XA_Sq)Y=)nNG#6^om@B$$ZaG2sUiAV~mRlniIaNXI=l}o4wv~>Uia?FcwABAH3 zArh7?r=q{GzgQCyKc0wp+i?@An#Jn+E;klkTA9W9e(<+Km#0AuGc7;!)jSoi&CVXX z;%h*%vBlDJwb0eO4UdmdjfR!q?y=Kj!F(2CAD5l>1xko+BVNWvcBvW6e6cd^=S9Y2TFqMs2RFjZWzV6+J0mP1?y{S#Y0bqEyVObKt8gl-qCFYWFxFyxtb80OrVf zFskW1o?kc2RC<=m?_zXH5%qX zqN;ZM(ykqL=^!VYz4+x)0Z#wD3x8P*+k)rM-}0ZPsI!-UBo)OBF#j&I9O(4R0}ZbP zd$(`3thUX!sa>_aq&oN8D&LDdDw#`MhUDUm+d^%%9}2>EcpNxE?n69AoO_@FIs;tq z4Q=1!m}FH!S{%q&Atl02FZBZ2xa-7u$F~RK1e+zt*lwnwOdj7QMS$S!G}Zaa9U`Zr zJk4xT8`Gsm-QXv51ZE7}Ke8&c(WKfKXcYU)oz03!`jcWGtRN;e>S;}e>v4IJZ6$ml z#iTh2ymR?gbWVn|UjFAu4PP|xZz?X!gB6_|a_lwAj=NT1$rJgDU-MBujVW*!-NY_2 zf~=OkOVM{h_ecWMF)@*FB8r3`Gd#Y<0u1DCA?|r2av}hgxpJT?h9F#U{$|kFPw;M4 z<1=+EliV}R<|41>8Q#teeK$k|4%CNpJRxt~=C1hp7u(t}0kKgvCOakd>c|6-u)P|` zU#HXA*7m6jeTISW<`vd=w9<~^fu`t%=M5*P`MJWHAs=fN!=FbU8Gel4ouCyUc| z?w$+uBqZc)1VmI;)evd+Z<+zY^gaV!5=ZOt)oN;LXhS%o_NV!N6umMccPRfDlL-fK z`_&e^(&n?t1UYHZsJtn?eaRvqYb3pcSOx7Uz^;8W$ahD6?FMI}ym)fL`@aH7pdk_F z_f~(T%QFU_R7Xc|6_uHmCtJ$a@EwI^w3@JSI>7Ru5GZbxe=6;2@j^q(^ieB{?u}2G z74({Vwl#8IG`$5ZwP8PA!fCc@;!*FuB(mG3q`nMAuO+$NDfSeb9i(7o{-%^KdbXi+ zzEkX4sZDo2K%c=Mtt|3k=|k$eIo)Z48cF_k<5u(KEy$6L|w(&AKae*GqMb?qOqTxMTq_PprNumRdt zZQ8XS>)PIQZ(Vp$J8}0OvCMJq{|TosNFIU@zMaf+oDa6EUYG5i=n@+oO`_jC(6S7bzpi*k}+( zFDde?)CnZb&u~3GK6BqWKI*ouU71&a7NlRlg7^$2_xzMOUIq*^0eKjIDs8QdZ)Mnj zJ@7&8L+2_k{WKm$Yyy@jGpZ$oKE2YZwGfFGwt6K;v}>!s65YfaFg;Zw3jzQ?ZvHEf zRB$jm^`FX0xShIN`go9EQIT%m=O2i#Vjrb%>0bZ!cUJpfbJX8yEHL9wvq|FHudP{{ zKXTJd^Sg-BW5%g&*XM#p$X?LpmyL+!)3ghPwGKrGb)ah$v9>dF+$UbG7meubZmg5c8=mgFT*_O0*`? z)e`D3=K6P(c@SvlB|%es*cB_GB3ot0)0H|`QFlVpe6dO^e6&s&t1UXEux#JXrjsKA z#uw;7wnVWEwbC|zbRyX19f|hz7IrNk&Ip;boznNA0U#_8e7SOFuIF9@Y3F$h1R2mX zQhJN}0AToYcN7oJVxbJ8k0y&ZO5!3TG||X7&^w_yj4)apFNB2JMkvVg(Tl&#WI_Ck zX{~r6hdlM@Zv4+6lqeS-g}mzH!nT4UV9ub1sklV_4;M26@F? zl6u_%^+Cg4IkoU-YUbltV9ogpGwdTRvENi&=`p1A0uKQ=m(>q=!gb4sx**5{LcgZS zj=45Z$YhD0{jK0_DdEX6jGW(MIiqzxh#cs}tb(>Lp})zXG4R=WZslMN9Td9D0esSK zB3a{py-iXlbU)1Hu{J2=G&{}HU7(&TI^y9vHL#p~DB@Y=8<3qPefZ$NF_eQ(aHj3N zpG&)Gl(4l~{{_cLXL35mVrPKYe+i}k7ufVKWM#r8g+7#G?b7h>gqa;2r-dO!ZVvpy z)w1t3&ks0Z6CiG*5@;TQ2Y3urCVXvGmNp=JUoj%@`jHeCrldrV*14GQv`i_A!3JK$ z{V_t@Kl?;4*!?2J19JA8J5Bn0uGjI*it5^F%Cn@!-f5vJy0=cVMu*$zx?rsXo5FTP zE*(`kZjc&_HbaYH3V$~!yz`XpZLL&3R~p;?aHXAI4Bli~ai!$#j7|_}k$utAFmJa& zl@`Po;sQsjC^lpyC#-Mxbt6PCR&E3l1&kK}OrNVhbbr7Sv1v^8=g;zd)MI?_ucLm= z`4T51;BLcLt@^_4qlV%HR0a0c*O2m-?%!Sjs?vQbVP9|SBNZo4C}acLd-VrT>BC_{et7at9PcudPS;YB!ZQsFq`c*h~jPvqL{I>oi+oJ`Tf{i=-yokH9|4!vWL#BAQGV$$<>$ zwF>jjmxjWKbq%KzMYeO9K4ll5V-!zrVIkUH2W|d$Q}&r2YG^e=Z&!}I9_B?x2|0Cd zB%069IMZ99rni6*HF0-ffEu`pkhHj&q95+$>p*;8~C$(Y5QCquuM6{a;1jQk5TMGoDk-3Xt5diQCKh5PH-ZZjj3- z3QqlQ6|U*aMeWbwKcKaJ$!e#;4I({pR#|lL7_6$Kd`_1u(2@wWRiEik1eHcP|2Trz zSE@z?q8n@V zxJCMz@l;xJ=5D%{oZ(5%Sma_xzmI%-19vd(26Lm7{X}q}m4<2RXFXgY>2$#%sf{=z(TkJB z7>sq%A82eHIg!*ezrGI>=`FJ?W7hfbG(3 z%}-gKITznU(?mS%RcaRwBq9x50PZk#{Z^b@=vnvrvAO9ELTY$9*)oIgiw6-dol^kW zGDxRB59;LrvHY*YI{*JZtgTl+d9n)|A8H$)1Bhr|TUiFSP4A$~QT;$EWetj@E6W#@ zr5pNdmx&vhS?e-ds*&$8d(x;rHO(!8nMN|U4+ zR~4moyLw;lv;Q+jlCE0Pk&r4*s_okzKM$>a$*@uFFLQ3VD6Ft98B5(4S}b|lb~E-O zWV1s~U}jtn{fUBni_gyp(Z9Al!EPLW!4Y<{GpuFvv4XIS2(#P_!h8iDWBZx~xI?~5 zyJe$^bSX?*xVq+#D-(WZZ)@gK`xN-J3GsY#}0KqRUEOH5z(0@H@uc{x7Lyt zXKmw2$H}5}%Ik#^7W=TOP+!Yr?Z|#`eePbddC>Z7EJYeqHMw0@_#CCWdI@ZySAuxp z+u*8nx3S%kN;5R!uH})u^)r7)Ip9Uy4aIP*Z2lIfg(PIGZM|^*K==B|WW=IuFTB<* zRit8UasMOqFa}iK^!QV!TlI5jY}n?bdi|Eh8wJ7Or3GI`93twloYlMb{N<_1vbN>+ z-!tAP2L%RA6sKE*Z_TG-y`hv7>~2{zO3C$Z0hj?b!x&5l>Q>&h^b z8ej~<*In^gSYBJ67%JaLJ9Nk9%V4SwTVoHh0;JgTL}oJk3|ki#~hG z%@U3b-`!5drYn{pNIjrB_u*`-q_^PR@h~p0>-~!)zx_&jKSC<*F2hR{zH|stx93*I zT(+a2-JdyG_QP>p#p`57(*2lp@_um7D-BqNZ)_y$Gw z2zs#|ud>@S+`jr;Y2WQ;t6d-;J@e(f23@I%S8YeQFIYD~0y(%_>DHjpd!g4S54Uo& zE6Jws)@_KkmsK`A@ zMCOXL^~e}@si&XEpw)9$E#>&u~rg>@6un|O$!?S7P1#qoUgKJVqGb`8d{AvDtl@i*R zP9RUU{wqFOwL@l~VeX)lgQ^J;Qk4)Y##QvccHz9|wW`^B#+zVHU~4l#^Z15?ZCVB> z*m9*HNb0XAWot>aSB>M{U1>>wftDxlh@b`3O?sqg`pfvDsGJ&JJLKfs%_rBu%Q_6l zLyO#Z&`t;)-DESpk3ub`vl=!8#kgLQ4bITw0hC~Rj}^9Rb0CG-JS|T;B}0tAW_Pjz z95OixNpeG@r5qCEJD?Ay7hS01<_{=UsTbgQbrFf&(Ctd|2RW|uc*`+&oBqd8`c|n| z<2H`0RTr8p>idGXCTJ`~?Y?l#JLP+eTVNMu{ynZL!p~nKn7F_5nSAC~q+=8D?Fqqt z#lSPgoBHnGgb{HJlGMeEhM|~wJnyzftk9*TRcZyBO7pfi^=oTYq)giAl>MN!7#V-v zVjj9^G=rY9vu}r>zF^h-qEXY-yF%64`$EGrh69}V4sLDPdgjt%(N*Vlnj>$Z>EI=$yp1Y#R*myEB( z2{?@_#b%TDj6sFsKyeiM|Z})!OR$Nr%v_a}`(ol=-&B66T*3efX^pmdc(}X!m zQSvsPh9ld+Ve~Q)Fg^sm$RzL&l0CyioisAfUs@oq&-_x!FntU)NR}FTzWr+9ha8lA zd{kA7eWZb2q0%4n8e-gNWD3IaDEADCZ0U zUcY${7J}2LMCqG+_14I(aTThK03DogCQ{pP-&l@njvdEJ?OVR!sf>9mdP-p!f84XH zf>Pn&+sua=QSZy@tp$5X3wz&u_otxQqdU)a;~RU5 zCuf2K*@N$DiY3uAZW>nONua1k?v1Pr=QP}j7Ge-0kj`kzl1LUp*PkhIZd20f+~C)c zkzA*eWT!71vG!J2tGt_#Vn>%}AEu0!`a+#RG}V^lK^3MUC^{jxj{TW*!+qiC>^<+>4HlR^_xMxupi~tW& zbYHM>Iv86&t`*{t(-&l}ZF$3&;-Tp$5`8tV?bHPuuH1lop+zzZ6Ogg5wpIE=_ZOG) z>RO{qi+HnjW+FAUH7WYo{Txf}FWjm>JDaLIA>GYyZ=zE7vg7cU-?`ru=Hq+>`GszF zCmMB?)-O!uQ9j(we zf@usqdbAc z5T1KeOjyG4#Ps6SnL;_@)A>Th9SK6-dpJjtEkoQw-*5VMZRmtuUrM?T<$s~=QZ%}s zjS@2X*`k~GnKi)p>O7*t&5+BX;lS&xlD6OQ?b)%7<4vgJ{Jd5 zxEM@$ylhj~t`Au1XqNaT^tg@Olf{oMNWZnyd$V;ECz3NLXOO!R)o*+knHw$oI0%R2 zmC-v&Qc2XK=nO$FrT~C##>L?bf{uHUM#YOFHw>VUR9>Y$&x13SNIzTRw|9LnhkeiV z+y=cSY(9TKzApGL+a~2G15E-E@H{o`Q@aV<0i#o1e9?hZO$HFL!kSDeeb$B1wRL_? z(6~{=^(RY%28fFqTkA42JdvgEao&oO95-^j!`hVt^xcH~D338G0cs-wJA_ z)~eKWA^3;>k~P0RW1}@T)pHENTDysmuu|x|G%qHs$d=u2=98~`?^KFMkc-?Xo|JpHPpv41xu#i3S0W!oVI^E)fg7|J~Mbz<60MT>ikYDISVZ| zC~pA7Q`+S@|9w$$0u{<|x(D57OXp8xqfT)gk)m-`L1bJaWXIntH* zW_cuI@Cjl927h-)C;Hfmc;}8<81p@Lbby|=LLOEhpossPOR;+M)0eAvrupqhM7$N7 z|LH5#2Ar1Hv3}urh%d8i9N0<#^E)tGzrP5XY57DidEFUtTrPGXy|91HE->ca;!CgC zkw9L(r(Nwf=RP00$>;sR+)@9_PXT!9mz;MLg*sRfW9l-Osb8wO8;Q*2qvS=CrI~Gw z&CQJcMpD98149_`9WZ&S^s_uUx%Hcf#$!aVZg0+|`xck&V&+=Ik`(&ZpporQmToRs znf%uD6LW1g{_;8J*fMYRy(G4)N8M<9taMWye;f8A!Dalc76J?#{NoZ7c<(xG5aj2J zd{|f3vuL>EaF?lnwA#&LR;m`gqF^l&Tum$oCd`e9J3DFq^f-ag4wITkH3) zF{c0Nr9zra_%NDfv5ZpLDI{T$yW5K#Q{1Bd1J1f5Ai(`OCf^)&+S4`7+Z9s(HcQD{ zYfwK;C2a%pK+G8m8+tt^%p)8@<2gqcM96P$vDNBX53H`M(^~6h!D43T$z7L?4f7b= z{1sdmq27j7j?Dx+QiRa>5Nf5i$tG?k6f#vA$->LgX73N2`xKv3p z{@R^&BF_fOl7jhlwHvLr;Or|tbQ&MZLFFifk^Z#??LuG0;Jl*Q6f}vy8IxPbt%|BM zV7BIgTC_D)?EcRXk>nr@_2DJfi}~iwqTwVou;u45_COJ9`O@ON6+11)`8lDk6EBby zBXSn-A=A$;ZCuscGVP>Fn{#hG=Az;&+EYi4f??Wy^s@N16uB=(lqZ8xw18N6h+ zfYuZ5b>^>bpbhQLA|O#YOGaTWdx>Vd)-dW>F!k_~o6rr5nN_sBy1sVIo9ErUB!)+U zbv31dT_-gQco_rTBNm`szg%8&>C(87M4G4QMK6q<6QJStfHw~itWFHJ_%%-hQ!=Cb zll`m7CS$}7gwHCQf85m8S~-k_^kHen+&)sgZZMDOW*c5bCPp!@x+eYby_<%F-<s#?9yWQ^+Azxo0Rq^fqMy`e@QT<=$%FA0f_0AA;?(xk{u0DVK zUQj&#pZ?rCj&jJCR0qgYMu`>dG|!u-9v9bJM|(>s)`n~3@a5e@6w(QyT1Mi)wIv!% zOdrhXbJ)i;I92ur`zR;p?Yz$#k0{UYAOl9$0O099fBWEW2%{JK9g_dPRyWe&=HMMh zE850J>byu(Ym2o8Z8cM^ru{dI65V#Dk96DH>#zHU;gDI}0mv-fIqyMVxM?7>an?V$ za3gDY2G?qIq(eLJIQEZUiE)}bJ_}$wIgNe2>i+s-ai)&E4Rm#T=x4d);Lp7pCj82t zt6?hxxKg6(LqwKJOHcO{;GeHIUQlKfeRG48YB@SK|3z?ZizQNDQ(Zl<8RbJki~Ev6 zm0Go!f^VwUzj*UW>eN%*0f&3RoNGk=QuJu9{90&dOhsBLV~_o^`kLF5#6;iu1kF$O zEdnQ6-QLfKHKS0PM%pTiHe#~&0At~IJ$adCGr0P7Xh%LYw=DrX0k9>Y^e$EhgHP3{ z%7(qF=6FNR=_gHw=g~4*33D|4z1JJ#+Q>7R$b&c;g>U40Z9ZOKOMBbul!k5y*{?G8 z$JoxYs;}59=EzoUt-jc=Rpd@sR(qXLz8iwJ(;KwTofr+tnUB=Wb=;y$;m1WpjuXl@ zQj|9~ehx)Fe08eO;Y?>+S_4vvi`mtH-K6{KrgG6)jz^!n&{J%xt6Ve-y08Cf^&F}F z7ha{nMB0}b9X*o!#3*CoL^M3O^Z=ITgg?bq*q-aAbTQKlUI_@gcx&VWxE8i-Js|_f zr9N)PGYefoufgGVVA0)cC1dX8ah=9Xzs zA9da%2{Y@3QuQG?rQl{&Mii=Pud^QyYG}&wZVBz$TkP+}wKvm+7W^Pcgy{pfoDM>Ox7|kucSQ3h4FV{hCQ&*%?d(=mE=02_gtmz4Il_Y zu)cPNc-d0_u6s(aBrdebqSNG^LviT%dPOk)azb`zi1V+=LN?2!$~0TLy3`aaY`!WE ztu);sU4Da1^9{}BO$&mP!sxTK@x+cailHZ}=|0x+K=0i~$>>JP=qLGUXW8jF5Rl4s z-;hY^ROd`7Q{vpj7|4_%T7xEq4$U4=~$z`-vsq|ox4PC`j z`;2*JFQ%!G`7c{P(MV&mx2yFnmb{hv4YpdVJBdqDHP-Z6^S8Dv37j(3^okcx`Adw9 zV^+R(D&_kUE`R^zpUXbwchCBzpZC$#)kx$D7B?m~VWm zjM}YY%pC}YJ`7{0K~x*q($MmiurpSAka)TQJc}oLjuTuU&Q-PRk$4%Exy2(rOT`2J zH<#sYJ>+?&=OkBWx z-2|1I56z1-+~fnh*Tcx2d%KMjZzPb6cUST{4OXU39B79>Fas?8I{@Q0*0~WcJPWwr3xgfEUW9di$6%-?B#W1uh-Oo)oqs#q zwr*!<)nZD11kQM6|XpFlSKB6R8LpEh?T|A{8SHBa>_N+jbIFevf|i zDb}3Sq!x29a9XkKa+vW!g*_Es?EypvJ(2Db)_HoWUt8tH&pnEqoTa3lwh#(%m&Ks! zP1)(S{*)U^+n+(F*YV6ay0clYdo=Ma?YFi#85Pq=7xiK44YIcXAA?P;|JYzt)+{e7 z_1S1LZFa_6dKi|z*T$4ZrzbVcr>L_LV_iq&w>J0g_1xf%0j{h_lJU(@AJrH(N*A88$enffCK`R6YjqV^>^ltFBrNMp*=FiG)n=NblONr+IYW+iCw)(B z&(^*bvH;!@ykzvD{QXTFO2AuhK^&}2k;{}K@ZFtaP;0JXIrM3mn5BHi0-*!0A*C}w zp7G$)Gyi~E#n?G8O@Qs8kg{gKF#-^ceu|m$qcQ|9a`Pnvl+D#igZ++)x)}S z1%er>mwd>Vn$KSCOPY4H8tQ3(JS_V>y>tX>M)wK0o0p4cEDu|RdcE&~chTO5U{W@} zb%5|%&A3pdt3cd+a(-qsaLJozNOF%n$sto_eY)FcqnOI%ODTACQAP`0OC<^|eq>~} zy05;xpA{p$YA)VG0S_k@jZUN(OzLJy`rk=+5CN3mGO^f?S-k!c`)d#=W@6@MK_rg>u{pO<%aXL;{or%UVZ30Cq`!D@3N!%K`nvGlzr?&!36ylgQZdP7 zIZB@EtMtkBBU-!#9E4%`XxY;&fwO!sBU%*WxH0_W+q`wzma)-GqtQQa!xzTi&Y+k3N5`9H9%_#*V#v8vU;SVJSKqa#P^Skafz z@pfplDpVE;l7Gj4u9r~llSXWoG?!7bK(IJ76MEyi*OuC~x3`COE@Pn+Lkg$%uMCMD zcKztpP&0b}xTgH4_b-&Vs;*`?E~jye#D^sH;=T~MsF$uaW8f3vGv|yinl~amc)Oqy z{f?)_0)3^ff=_gW8Ii9i%~S}clB6Z~NVdP!0&gZP{iYI)+>i8zK=<(a3k4wZ?DT0f z&kzTd?QyCUvibmn9BR#TW*apG^(8JFZZJ(I;VbDDqui+wWm@R#Prx0?>jdqGWIJ=N znf{E)N(!P3&Z4f{<%qV`O(iu|H+)-gqARq`AI%Cptr*r?!m!z}Aw|*7p~J&`dt(j3u88!98p;@cEre}RUsK6vaPfXG3LNtH>(;s&A<+1l#ShnP(b-kY@Z(#xU#w;Ej0X_8TI+@eg)D@&b?MdZ}5&qZHj?6z*));}OPwCvYP5sI6AD$cEZ?;koGb7{qC9V$Y z?}*o6F{D$s+iXDS$ySE+P}e1TF_f^R?V_cZ&45`$qNUSUa+m`hA06XS3(_{(c*B2?<$-UIi+9!|;UzeS_On893TY zhp9-e#l4v^TCXaMP`6=*(q-3jJWiNbw94~)BLCAp`hQ%vz+llAdLGoT-jyW?(TNr zW=Z>@{H;{LXA;^vyY6`RTTBTK%3O!d5ATveB&-ZhbY`>E36dWCP5Oe%>!f!Qbv(`V z^#-T9XX*onCXRnySSmpCA8&{McJ8n&>q^+*S*Zjkn(oYtYzyz)S~a+n(Pa2y=ldY` z3jX?$y*-!N{bp_|`y`;!V|WV~wI_Ka@&QJ$&wQM=(PL`pO-sU2{C3PwxEBuo(6_kz ziXw1Ml7N}7W>!p3NtJ*Rb?GmUD9oR=U&fbttjMX?fXCC)Oh9Gy8NbLDnsOx;yqLl8 zxyHVpQSa)a(cQiP%L&qYw-w_@9a<29!0k%rCza{&!_zQ`+H@LUGh~6CBtqC*j%lSR8voKJR%^6r3lx5I_f9MN(K3|Na6Bhl2sr9lEHl z=d=+DNW56WfVA6uhIe-6?XRqOD%cn|V(yrU4D)Th=&?|W;xWf9S0|c&70h+|qWp8! zCc&;twB+WelGSa}=`9`CSr=fD<3d)s1V`c&uL|k(n5stRd9C)%(|&`AqgM&1XO&NI zZ+6xgtoMtJJcw4`5EMP5^Hk_{_5MPQ{mDQ7_XD3<_AMixI9yv4l$r6)TbA zd96|GI_Y#`Qi{k!U1vCO4R_0|`Gh^htYc3A<{_a6i z+SgT>IwiE2R4s&ApG`JX^NEnb=xWB;piAg9J{m}}ru?BXUvBjJmXrr?>_=kaN?N1k zzV%I-6Q@f?nFOCoJ!h*m7sUFlNhZ8|pr{E8XUkKd(7{7gVD%A`-G)A^KrDWZE*->%-AJ*PFD$2L*8b&}7 z5s;7$1tg@q2N4hz21KNh8p$CY8U_TUOGP?HK)SnzmO<(6Mi^k|7#iNoyS``L&-;A$ z?^)~p&xPne=XoC2KK8NqKJ-Hfm^^PoF_-||IqyC=sNCd69ItUyiO;%9f*|~v!1&Zu z7{AYo3f8)dviNF5ZXrak0=L=M34oRJETvW4Vf?diqjakGlow}f7VorJj=bCB-?8ni z9jdwN?4Sehh-lQKwd(B; zsMx1AHhS&)x@S)bh$|b1>R+R~K?Zcb8YMHf>*#h+9 zV5xOx06YxsS!|l}Aa^CnkpXft&~W1M0HV#oJ#>} zUKwR(^yxO4k!8DIeOHMrOzkK!{2&DaKWq1pC^;J=URqm@9d!Xx(vB`hLZ=6SC8;0A z!HEoP54wwbr*Rk4h2kdYH*TU+iWW62GQ3$oU25iE~-Fa`>eZ0={p^hMl z9DK)I!bX+&4(!5@%|A-@&dT}tQcr=L-}KddmHVKNW8U@enomit5>p%F4~NSMMU@d& zJBqX;b6!MP-xIgz_nnv9)ZzHkV$}=j#MU__cQ3_e$fj`TLS%R2-iKZO+Bu47bDonhB0t02 zEur3l0gX|F8g8>sKFzos#hLSgJ;U+{9^_=5AV&UobC3FR_M@}w3M1dW`^v`)?VYa8 zJ_82t;;vUQPB%^rek<+S{r`4V{}m02hqRQVI6l zmHd#ohOok*D8Ju#et}`=udA7uoaWK9(wdxxX}&8SMUk$CX7I7OdidMBdRkg`N!*%3 z$=kVIe8#`0rl#~$TsN#wc8o9G93>|JVBFqHz({F@5=!JrGc3oih)#}dN^3lhFYbos zgG|m#YJzLrHmG+$ehZ$`(yv`fIV|2(fpj13SBx^;oM8|qV8&X9#oB9QBy-Met@HWi zpf4o~&KSD;wT}Qr@quGhl@58`0V|qXd}#ibp&LOT zC)k>nB$lZ_IJAKD*7>plWaxf?6muxjbtWw*e2`$T+@0DbN>XKq@6HR!9xT*=In#OqK6#L7RL z+&_0(IFggsD<^g7>}y-sK{7XAoL>j;xps?h5`49vZcnnaqcMIH6}E(b=RohBCK)p2 z`CzK(^7{7oD|&o?I`=hNnd*VztaJ`ShmvY zM?pI>hGC<?KwpQ8@d1P`YkC7H*Lh<2!wDQ&-br$IjDzz`U@ z{A9*D-qtKQ?(s|OLa?o^4eBGItGq>o2TyP)GD*y~<;RPv%cb`Q66X_>y7k`HuK-T< z^l{VvXo-O?)3kWeQ>9T|MIw(fGbU0QM-DZ)<+slhL7&C_qARy*Z=~Sv9%0vRIojx- z?uLj|jTF7UR$*m0qvg=uBuaB}BaZ?49&DYq8FVo#8Z)_3X8#FMv{50(Tntg8>)cc^ zP(iHHbRvhg->X5Zj8l~%W0nyYwp_NKt|sgK%5I@4bIuqlm<&e8Pk%4#!Z9TM2`1{1 zlJ1U7LA>J6mi_8H?7liBY08imDmcoH3j|>#I<-+wCrYnCt4o=ZqnR&XA4#fff}&_U zQ#QHPL?z?M1L0#!38KHpo9fck-LDyh`H;#T73Peiq~q@pRK@**<3OzMuA#^r4rmg8 z;lL1wX_sawew^ZiFj?Z&)wTVO?{L*#VoqPHZo>;nTW%x6P!|mS;M}0#g4z_~GYycy z0Ev<^ds3NNZ4h-WaEKHD2acoRflZN}#s?=y7SvNG=FhPGtt&eq-}P@nAg#O77DM*-W4 z-1$+A0z{L}gq~B$j(|+i>{K>-sob}Lih$X-DfNMw_-4-F=-~Ye$2M5q-&^>W>G+ll z>N|VwN*86WI|*Ai^>+YUH=nN+`orR$ux?0qBC%Nkalo6FK}5FMl}A0aTLuk{*$@b zVSAA_CgP(Ysdzq~K#o{0U6M{ANp>7`5{+EY6&F}};J7jv{#}%TNQ#<_5^mV7e6U%N z?LrU%rEPa9>@PE0*CfG^q-Y*datum#dRuK&urDWa+lDRckBt)*okeKDQ)2}Kv8vNE zwR=IIuSk<`9=n{Y;O=IFlS>x{J8s-+8hq=y=n)clm9E>gq=YQp&l>;n#z>ng1m)4- zCY367rHG>U-Qu}9X1LQjjF7_1eOQQp0oHV3WdHtS585^ zA)5QP`SwGNFTu|1vG3q-smjb_peqrxP@be@y3bzeH|TeonevL6-t80q*tFP9nPr$u z!?Xuq9YAX_UVwRhi)yCgTAuT2;JRIcZO@PJel5I%NY}cGd~}&?w*Kbw)iO~+B2?MU zm=tu1m~RC#RW7j8a;U3NGsP{AueptHM{C^DD{66=PsdBru@T_|Z?DPInp{9p(ku9s z%rZ=HIOEA+XR}||6y6@dBTBkMd~_^1hS+i4VE^EMpWw=QA@P0PqvWQdkZ(QR`9ZGU z)YtAExq{RmqLbpg#Q*YL$I|&R^M@>-<#19kr2e_-L@HsQ1>kdzMHP*Bd+#3JAp+;W zsB&#Go=OaVjnj7>7|{j(rN%W^p5UEL$`3k~AW3qe*?$E2R5mR`!9HVemD~CCl0DI) zdp`+BW)>>$o-BZ@jfl@w0vwU*OG7IBWmv)pX6ZS~Y{B1P;o9BSX+iYi@aO1Q-K><* zW?^^lK?;fW5zSBA!ew>Vtqp!s|iDVVKA;)RQ#%uiAhMO7n%LlSY>@$g8=9GW&w zgrtNvj{zN;%a2umWti?v&lrNa1xMwlT?H&8?1@wr=FE@>0Nj{kTC|x~^uZylCyw3t zdaeIpAERnh6?Y(m2OW?AAPTS!ZHqO5p^y3zQ=fj3DG6xCu(qUkFsFU3V^Nnt6I$Hz zHNdC0EbD>P-5@6+tY}WX>9qB{F0$fZlBY$|CX`kcw_t;n&)}=8DScGM>7r)e z%iaU8un)*FU%wxnI zg+$5V67(d9y)v0SBX;-xrHQv(&lMy1%YJuTL<6HzFgCG;y7aa86Zb=SOrWQ_-DSY(Ll&hbzkE0fVusm#4tQ4PKHTxk7p!BfPSZf`6*wj$6YDU znx*#fOQu8xi}asyk*9<40#Inc?CrVW%@vvK9!Airu9 z=q>hh3H&BE;%!(^1G9Y97WH{#htjpPC^^AqunQ?)>$T4@!AZmQsa!)AQl!@Odh1~0 z^hN65W+V&zWLE1@OXKSIm-}KbefO65J9f4&>IjaOx*(nc*^1ZvE!)N3uw_G>tJVGE zjsG-L`6v2cD0=d3oUKr2ig$sy=nHAneb=gUuZd|~$2-kjIL!Hb$7Pkz+5FE&OTHBs zlVnd-8%R_hrP3CB;j`3z)6- z(%^Ypd`0=k=j7St{l-Y(K|E;_)Th2$kvXRmj;q(XQxV%;?-vM>P|l2oj}Fj9)ya+N zMChNLauS?(^)@x$!#izr(wD1^vzaKrVaE@#DokgvS=TW>U(wAz>nV`vvyKjpc5=CH`J5TwMu*Z^P)%S#cc z2KyB|1@(vEW?|&cUj|4`_(l_yt@E>A6`yUiX?!$uxYNQl$0tOr#q;pR>OiZrv-1Op zI7}yzQ<}M#rJ|8Ib-FrZ2!FBeIiY?-x%)<5&Q?Zu#M>!7|8`R8yT@~0{J_q{LFieb zVj)E;ae>n|Z3UP+wgZc$w8>Vh^2vLVBV=Ve^&vEdJ+WmP`&_W@ZS~~TnE(3*d=aM2 z>F+u0`)WDEYnyA&4!AL;*JQy{<_nkPLxsI7@AZ%;7cUv!Po!thhp|HEZ#S~Pjt_ya z<;-~~$uKE9DbYIM=Oq^th%&n$ondv{{E2|0n?#J*GN222*S$5m;$feIoPj~MYCh}*G)G;rf^e0otu;W)Hcfww2xSu+o3 zmTIV<=$IK+YfVVn_*TO2HhcW7F+KU-_-3Ufhgn;#lYH|e=<>i5clS}hjI`shc;KAo z=CBL}D!QHKTsgb22PE`+6+hz15a?9tq5EKzdg&fmp7c{2cRzn;D&m~MCJD3UMYUFu z!x{fX$AMq%B)EIfzGhH-rs`h5-A*gPwIjC$gZoGGpOe>Lu%_i7XDQPZ#28!K9`!G! z8+$WS80kk%S=~tDCIZ@rD~1B524*+-IY%xxxANm5%MQKStGl6GEszUgPHf-(KXa8^ zV{s9XA;}%op=O`F-fSQ9_fl)|e-6w`SOk2P9&UT*;S?mFvhEISeGsHYVp>3kj?W#g zgTDl&ErE>}ad*WpAMFzVWkRUtuAhf`=Wc*<(DC`O_`y9dO`J4N&eG}T@E{kND^MKn zes(tdNEG5j2w`EpwDf=#UEaDTDuZ9cKTh>gnxQuH%mVncv#ADIIs3x)_O@7R+}kCa zc-t}k)9R!C8X9fMpxnK$JE_6?7Hl(*?wy{EY@UG*XABzec5LE z4z2~USa<>724vg&qN-qA$90>m7<1Y?*#zfVp;?L%a5|-TBE?xwJ(4z7!_xXi6^l>Q zuzCU6?#1Tzba3yx?>;5-c8Z`rVw?)$jz*_#nAl`YLU^{f?I|-oM55Dsh91&>W_czd zUYmxpsZu*1Fp?}e+fRh9p%lGr{J+VVe(>*TuPEt#9|;hmNL5JRfddsya9=fi7$gF zM&SEvu8X~DX@Zx54kvL3gB>cRO=Vm(K@Rt>fldUAC6OsLAv-%Wy1WIxadKFH={V4X zcXloKO3-0G4*vx2#`VV+PELehetmEBI&5wu8TG!gTIRttFRl8cj1#mMlVWz|(46eHl;ow{|L z78Yq>Q__NqBQUZmIm@Nhf7EpoH^Pw`)b4H)E{{I+`byW=%~s!qiUSN@99f5(_=+SG zwJ0AHpuK>FcmF|U@()DBs`6o}tz_nN%O!uH`A1d*h{L;S1Ki!uwU^1wF?KU1;?B{C zkCBXay3J;fHc*u5*-}x}eVj}NP!^1C`r9deYk=y{sNoM>`XV%JrSxg}QDQbBpWSR2 zB)U*Z&zz8ji!}j*+BffK5wx&)u+7K$(xmNUXm(y$Vs%(NR6l}CZi~-x_`Uh3jdew@ zao30{`i^ted96>X-^MMLv)jXjCk{m_R=!18o^82Fn{Lp;CB~n} z*)T&cKA~_!!tIxFZG{%XQ_JUIQ2jFHNJCci3d6EQiEgou8s?VInN^rMFP%Yg zW*!KZ$An(f@xk1}wHqDx>?`QkUj)G%jn2)CQ4$~_lu%ULP3-Bw*BJO2o9!#c4j4m} zxlAMo)TKOM8u8*;TU+wTYFn};BG^o28Rd49@8YSIgQs9^)a7n?u_Q`}!{Dqkju#4y z=kbUXbnbGr@qgU^2pi04g=EX zxv=qJEpcQEl(3~;Z>+GWGp3)1*pNI_^WIhPX$|Sex87HEoTc=M?bU009Hp)HdfAK~ zC+U7x$(PM+IF_pM@RwFc+|aTi&o>Fa7|zTkY;JLV5oGkFR2n8}nV?Ybtc_XCaGd#3vlG6|@%LNnC(B-1 zBpsFoCM=vGSB9(H#nf~TOm;Gd`VINZWWTWxta==d*Ju%@apaUNc^JPgo z;;-HKKT`&_8!=l8F*R&^ZP{1z@lo%#8)Kmkge?@=fsc83ncAu!^;SOGTowL_bxAL& zpr9Z2kU5xm`6kXn5IuqSDFR)3a`kA9$yY?%Zq6U@-hJP6-SPK-+Aum@{6j=utfY(Q zC;RTu@*jK671Qr6++Ob<`;%%F@2xr2i*4-9g!1{&=Ty|0Szh#yyE-#i5-X-#y1_C= z_GPV9_j(W0ogjGZ;Ay$qb7AUUeT)3kO;HjbASZ-pdo=BlO57r2g(a&6oq)cBrTCER z=Pjn>SfKRR_v{ze)8FkM?sw2H&MD(BD_9bx?)xPX znaFBrTt%a>tP5I))&W!P0&~PU1b!-EVIQRx4e#ylmt3jdZtkJud zgk(3z=8eZBlK7&Xee%7Vny(~G%bPj>Ri0Y}2y1b?6BfJ^|0=6L5lmR=s=T{rK(0H^ zlDBAZUh1WSW2E~!;>R~41GivBM?5#j3b9gbtmqnMs~v@}Pm!aZOxx0R zL_d9(of6ci$iUxp^7I>CM50;6w+DWD6(kB`kQzVb49>0T5Y4DG>#jF3;Yrz_ga$)a zc2qld0}xjv$_Phtx};>mbl0TW!(;_xWjsEa9YaMkk9QS%iWRaGmFY}X!xl*)GrxkcO28Rv?jN1_>8Oxr*_>*)F9H+*V^;x9PV?hF7oVINJ!@%>!gxL*JHKalKt($v} zl>!3xkMF*PS1%G5@cX(mE|U4{_a;JdZXfqoiHzwW7hpXe+n?c$_r{3d3!oPmA{Nhn zL}^3lZ`IN8+xHZm^<>p=7Q}79qCiRS*Hk0Y)iLcy9zIdlh9$apS}aJTD=68LseQTyUJkN~LZfPD;`H#8% zQ?5D)KN7w>^BlbBfmj(<)8wSUNXlaaPx>rDk^8H5?&woXvzZ7y!RwrHQ!ir@ovY4% z4N0^rC0p2LwZnM~3lyR7>nm-@{a9A0uP0l4l^oZXoz@EnZ@N%XeiKc&@YGiIsQSgY z%X2$x6n}C3t>GNi&IE;Mg_S~xhRcZUk8qXt>Aj|ZU1Nc}xIkgPC1Skvmz&aC`1-2& zKE2Fa*md47{7o*TjpFzVgSvM+%(FrigPnY0=2i|Q8#JWJt@g5eC2rfLDslGNE1K)^ zlO%xdhuShHX^Wcb89b7@qq0d3ZU~%q{^+Fnp|i-9z1N`TU}CKHZhWc>%garygCcn~ z^Ghjk8r`plG2xJItOyevD@lQIgPiqbeyYq%m_3=Tg0oKP*O;_@)u((mlwc%Hb+YC8C!6$ZL$1X#r0|!Jj5nrw2lgtEha~s4{BKj`e?LW3X=74QvDK#&aSz2+O7ImaO*lXWgcOHQI3Ipccxli8^6meXX` zR%E8DawMTXoR$#N_MYxMNr$m|qW}c4J{(R6$AoR>O%GMBqarR7|HzR3#&-?`klZDI zE>z+)QflV(a%4p>5@78;Hf@$VHsAl`l{vf1q z?0V5j`oqQ5Wf9x3Lr)W(m-lSzWG_Kq{N^Jp2eW-M8szMX_5EaVQClYAcumX6!&90< zzq`L7+FGB{_SDdQTbf|5hv17xC*fU|7WJI_@sraZ;X+$F^JjD*g6I(Vj{RH{6THkiw{oXD|I6bB4dl$6Reh;>2cE9oD6Dg^Q7ZzA}52i=__+)seegKy`Hw*T=06@KmPyy=wDU*|ElZugC{?U zesQxI=F8yL%qh8OaDenu_|sTEF(ovQX)p5;bTj7j$N0c0*um1bvpSYvjQ~>m=rpsX z?MlKb7|?JoOwrpb{2I~YU7K zRAHB0^;l8k1(#~F-JMak>S~wengiyx8_FqG^}C#RmXtVE6bGiK1NkTdsGn(a{yI#s z-!pkLsy!JwkKB^BOe%~Y7>;TC!R3;hE7*LxIxonKPIXIrE5bCLPG2eW_D_Q{@A%|y zA>k~bu}h)kd!77}kykxE4j!4czM{Ki8=5Uzoo7rSbk)%_MR)BPSE=okvsxKqY zY^$`-^jF@gAh7AeoO0v)8r!ADM|I*I!0ai?dNB@~CpTu~%sw^_dZT>4>2}2-#P2DFI%r6Feanh?xhi*evMGWhY>d20bi{FC~0e2gjzK$w= zHR)~NAa7ENb8!^+>LMEd#o~JIMx3!1ak(%QNDMZ(SH)~nUZ))q$zE2J$LMq}pKaS!Ii9zq z`L8S1l12`wp3}$=kN)+e|Ld*$*L?-_V;qkCU7StFuNbDiIJvzslXLezP{&cSYJ6hA zn!>W@wqKxk3zAney)Q%}ia3=qN#-X7MCb{-DcS7ksW7?AJ@qxUXM#t$Dyk2X6xu${ z>NOA|v$B9?bJdV*Yl4Nkn+J|PJ^JtJ4V|riTZlh?l{yITh4v^=Vi6Abm4$d%TaKUH<9!YA{{eGVIh+o13qp3xZx)eV^b)cHc=;qTOe0c=HHBzlxL~M zk-8KfmX%0iZnZ(H4_^=!N}Oedn;e?z!F`7^@_;s;K8QipK7ul3Jk`FTQTh))!3nzsQwRwGw<{e+} zAUgl^42*C_wRlHOdEg>Nn(%6&B1=YD%8&{W8i)a;p#jzhpig%*d4|P`9WHpUdp-b) zGTX_i2m)#z&t4_-tgPHhaUfH<)8u-6*cIut&Cq0FCp%U&|G|#82(KnEK0elTGl8y0 zYV#f?oAG5d*h`r}yU?4Ko-SGSBh@db_;Uh%#Y0Y%gr|43k`cgqod&u=I8I2M;@n!tb$cj zqgkNhPUuW)Ltl(0jj+?>p}p5X!n!}b%z35%wPnZ>@gobCJ^83u^ApBaVeaEBfD=3# z^kf_`c6BRV$!pSn$vYmDznp~0_&EtHKM*!BrLYY8>!w$6eT_v8&H^j7%_?ckqlzd~c@ocflD(@&L$5!+MzD zXnb<>9Mheatof`5vC*h8;s}AP^w^3aCKI0;*#}P^x+z;y-`N~i3dCBnyN=gJq2#gzCM3qKB~KYO z^k0{EC$vJnH~%Zb6FB?R(Hu4h`QZMOwEa&NYxfzsZk4D%LXNI8vjnLhjD5DvY6u0c zOqu%({zBFwdBbFX^2wKSRbdK!xe906xDxxP<=#SfSTqWKod}E129!eHO@sGn71)^- zW|s6l^_|Wy)yEv#-MLrW`8aSbeH4(gtKRNt$~ zYbFcrbi8~U{ms42G@F}8nJwlidz!LPjJ#IH#Mf-upX`t|p;k8*dId09)yM4CsFj|0 zWp+z_#Rf@lRXxHqBOhwMrW3Q_d#HO=vd0D^_zS5&^_v#y0x?;!D?2quVC=4x)7(`r zt|?=wa|sXI+rqH-J;B)$)zTjbU@4Z!%Ca6=iDu`r!hV2-Vz!MnKFX4_0QKsLhs3H^ zN%Sjw4NppFGh%@s!m*+yRXv@uFjcsKOIJ^aAR5qOtfWLhRw0HbsvF$)xhEIl$m2uF3I%CtL9tvzW<`+|9QI4 zko1dbZ{^_n64SLIA1!aCfpQg;8|0;hDX&-L#e2+RGp0fdc76uE8qLueLgAq!_ zw&XAGpfbeMq_wM}D#{b!4U<9iw;qvGRg zr?pY1?dVsRjwHRoF3nTa=r#|^f+I1;o?-RnG%Niar)IYV<5=&6?f`Qs25~i35qmX% z3p-~4)jmveTYW2C{<5|Ix0L)=hC@Ps{jmYMu%bjAaVMCX6QJBgE+r(Rj>x?W>?hO_ zW5EYyCBi~!fFy%&6s->m(*ZtISXzqWeo4UjV5HUXPI=z1!cP8Qk zKtEqY*Es&O$?+fm#DU#!weL1nVd$;?VN51FyU((l@DT2<{}Kxuk%#5>0FUMCLF5Y| zE*xL~YNNegx zd9#JmqkENIW*0f1uL`nP+|=X%x10ru>Q>l1N;9seT;@=1F^@O4HrsgoV=2(}M(r=z zE!VC2*#`W*e5tRGIul+>hO4p#>xu>Lw~;%$y0Ti}?iLdE9!%yEwr4({Dq5s8&)Isq zP)OJk!+uq52W;h2s=e4hP8LYD6n8p}GHB6kY+S=^GtzyMA6yaD(n%=z+XurXD_1}1 zt+~9b9ts9UFL_9SBD9JfBkJ&cY5cuyXiKE>nfubu_PL(%0(Qz^K@qGL%n@+_ z%t{YrB9@8rE1Y_ojNTP3`mE`w$Uy*{4Ie}6p4T+vwa~YS&((5_pBRw*w<0jdf)8ji zs5~Be)Bm$B{3q9|3G;&i$g%K&#ctI!%f#4y`HElO=LYm{xOTFX&!Ul$l{m;;U||1! zn|ki@@+A%vU>kXyih4^bXNtD({6Xjv;#{-*=?gDAe7h~fGOg3H`NHnvlB4*?*GtQV z03E|1+rkO^+tDm>(dj-a!rCRCH90 ztMRT}(yN@aH09Km&Ol5i;JEp^MD;EoA(#30?5Ap31CXcti&Nj|TVg}>wP*8tpN=eT z7<`1ENyPDK!(lhe_F;uCVS~DoiQ#*ukcbT{5K>KF|4c$%lcahdib%0UNScS~_^b@d zK(ZD`rB*)m#g`oh!g4|5L14i{;%$uW;>ql`@FXDe?(XGAJRqV3%t^^wGH^P~y(CS( z6;{R2ygD_X;+Svx1CrEz6j7GOu&HSLQ3i}D9JOak9Cf-a=x)49mka2<%}7=%?M=G6 z{mj;euO`c>;I{2Yb`r1T7?f|EdZXH z-r*(#na1Vu8)aoK!t4==LC?FNsYW0_Cc2z2PWhhGrg=GYS)@Ai0GSdytYo5Ki|T=| z$xajwIbfvSaR^$N{Ypd$E)$9jMP09EsFd0%P-L)=ZC7CGR33NjbzEPFMS-sH3*BvK zncyDMSm`A;MGB>AP!Mum22y9lwiUG72h39s;G8@{v{rqqswa#@iVN&G{Ry_R@ip|V zTdVJ<;m6gn62~)cew{nbm&rn!(`mDmbF*`TA`jBnbY<+l_!?#miLnA?6q*tFaY=?Y z+U?QAco2q5k=_FS!AjIE-hs*O#|V-76v*4vFG1QKUlDfKi`Ryl&^B0?`Jy~1>a>?) zu3}X;oXRLuwow}p1x!4SgKR}&tQH&BRWF5E54CO{v!%8O1dHY2ZQw+hA_!ul1#wMg zO`=$!{*;v1M@S12c?(4L5pK3ierB2CQUow2$yIqRhKCa|YYI2SYU~uj9*j$k)30JgZ=6h&x$koL;-u+? zi$aKY^O8#{=o`USNxTAs)uWZkH3zOqi9{*|(a#Hv0WrlLd&P>UPR2T5-! zJ*icrGX@&JRC$+#Xw-~I-*9adJd(B(bgTw37MyB+@1%BArRJqWGKTgnT9iQt*{O<= zqhx08k^*}h0{--y!|83XeQRc!yKpH9>c`O+`(;{4GyG5Iuk1U7pLw(c^Q#V62Z~e>&^E<%i>;?bK%qwd3waSv%RuZR_&b$uRe{2 z92{R0#I9mQ{oD{8*_)Hzhl(key}mz|I;oadir=dyIMs%}J_uO}S50{N*-iY+mY<6v z(k)9$!$`wiJiHUkMkl`KmZlF2&mNg(qDVzo&~ECab`Wq#&ZjHsOONvm@kD7E#CT+kXy$`vy zfs-I+I`#_Q6*YW!yW927il4JY^$aERS)EhTMcAnPx#c-}eb{b%5f5f3A$J~e|99(w z*!_{LPx?oC@ldv&)$ku6UZfGIcvzeaQk!OJR`}k@2%Ti^X41rEvoXK%W&{=GZl)~(&bS)8kvmr}M?w(@RbVN3fmXH#2O zvx;=G7(`njkdClCOPaCbXFie8llbABF1dof0gU=JKmW`{@C=DF&uS zBlh>{x|vrZWRW*!wlDfL9PL>&D148PoEN`Bu(5iC2U_HjPF6)S)*HO$zBxQzT`D86Q z+U#IA=Vql_u_=7aq`<{iFSuw!Slb7?o|9LMZ9m)Ojw{-L5~Hj79pOdGbWV#&xL#P{ z8z+%`IO6305(@skYy-IJ4|%hobjbQw$(tJ-0vY(OIyg+XtHBdJad8m(NVBVpQyK$V zs!k?x`u-Bbz@lkz9PO6;vL@+rNeS|HB6iE&{MRsNNuK=Hpz;*MxUl*s_LDY1p0TIe z2@4TFUcwe!--q!dDP_6oORqi$54`%)K|2m7egt7(I6mfSshzsiXwITt<^T(md6IoO zWl~9Q_YXW?_^rv`v1$j-&E>3_ZUx&iWey-)>}ka{pzMK)BGxa*L6r^#ogHXI(7Pd& zMSz3+JnN0xStBFu`?p)h^*8LjzB{bsxxB9)+ImghP2ZN4oOLB;d->t2up&!49>|4+ zN@Ne_fI2sZ`x!(=E#(XmqKV=4`bS0d31b3j2l@T(beAH1dHrQ)Q`~S7z<0DA3R@I@ z)!uz}I852yv@|(X66`WTIzFD(E9(p?mld^(qBk`z665FGuP~B`3MOYLUR;zYIoiYo zmTo^OG_l%RxG?OO1c^jWTB;>&a7Ia#N8eD-B;&I-ocaOOub|y}LSfPupA$ zGhWj$VJk|`Hle>Ii4~GMBx96&oTHL(3NT}p~nkaRa`RJ zFZx!6bWiu`kS9xbQe04zuFI}mX&ye0s;fIbiOOTUNoT_fKzs6vL={V)maei7}Kz8xw+m^XM9dcE}WyQiYtD-ZvRGm zl*LGN@J-wO5Y!SUUteZb7FlE@IN`M$o4#~)Mtyx3eqLalfTaf)aW8Ak3s$O7*7@;B zUV6Zo&fm-_5&mO~ijt-?wP;$D;XQq%l7_zC-VKA=xwK+N!d$H^jS6~(QT;n_*3k*@ zYPw*h0n^lyeO;>ubU7B*aj0a-4gRz3O+0IQV@m$oMGt%I5O9W_C z$EUBNdi71eq2JcyC}`W6+31}erK!bI2j#AG@y7y(vC<_2;T07%zH9;wQZ%giA(Dp~ zm`{cU)QT+=`9|(V8*6|QAqx5?0G6b~H#SHFHg-3HSLsvO+r20a5)1%xM14>PfkfyW zgx7E1#xn~B8RouD5IP)~K+H@yD~Pe$t~&kG8S+o^#AM_T;hzg%_g?;=vDLr-&E_NA zN3kn@w>>%6rKO}^&A*E7WH$D1K20WNWeUCdv{wr=205x%`vESSEL~Ht{oNCzn$Dnn z`n4?NYX^8u??bIf;wj@$?{m<-4;4Oq7GL^pZ)t@65N5yA|GN1FA!pTqwX+L$agie~ z-F5$N<+nSNC+-x^ZUij*4clqKZfS5rp-Hn!H-~5DS)uI*S+1HMU5Ytz<6SFUMwYXx z@h^TgIIUXmlun)Mq#{_3i>qA=BvmWOS4OqsCpU<(uWaI?+&s|oiDQpM zYAWVye9>4rXjy`}dRGby%%5cP`x{|tN1QkaWR>+W(m6>P_TLV-k^(qfE8m;&>wiDO z|G8F2i1;n-3;kFMFpn>J8`$iYWe(G$FzQs5Nflo-7rEzDGF?f_j~uZ*&6qg52yma5 zv}B2odZ?`zg3J?wSjRy3yBzett&04zyuQD{zF8^5-lt~JlmNiBqfMKsFlQBl++|hj zce}6Qcu}B5ciR~xF-A&t=B)r>=x^8W=O1zq@Y@y9lG9j?kg+X{pv4T$@A5}teY#xT zjAc{R$04(ZY1`Hvf)y4SuHLbyZkrqvZ?3707-nYY$oB6Rb<+=RSsWct=0^hUQTm># zAd?#DQ301%u0fV=EM(oK-QV`CDyV2*fWug(I12$Rksv*)vOPDhyt+ur;WtDaz3HrP ztzXb8Z#t|tqz4h8>w=(?ot{8%?Bc;Us>6f6pV`Q*cErQ>vsDlb0O|AJGU)Ge+6o5)YnXa!R5A=Yrq++qfr;e2FfRkgI+-pOu$N}kx`0e=L zj`;A;5wH0YU*i8Sj+n>KU7mdJ9d0PTXl;W->y9zll{WPECbxN#hw~wJ(J!!{RZl;} zqZvshcRpA1%4F!bE=!PY6ZK%qFJZ{wlY`!uleSW|vB|iH$QPnpLXL{IY5Bdmp;Z-d zu6I&iyv?&rMuvWGSOS-Z7~=Rn=&HSaep>xA51D9$^os+F94j z?61j+VjYv{#!7Kgq{eXCqvG^+q9$Jp_oTuKecb0}{Fq!Fc>oikVRzCZfM@tI!rFk} z3vzaAC%jDL%$flTmxzNImPoF~Nu+q08pCX@BL>q(N&511dtp7w=VjXi;1|J7`~BSb z4!aL4Qi8b4mgwaL74;4y2j_LbaW7{060AC1MV&tI}QSk>&UwJPwDMH zxNPhVK-Dr&V5BJL|G)U;zI>qfCIr_j2y&V6`rJm`O|vmoXb@}X#xK8@a3@CAZL!tM zzGIZRk(>f*^QrIqJ?;?Jq^)pXZ!v5J4Lo@HX{)nKzfH3QmV zhg*BPelKFd%8cFVu+wGTO81-jYTnHC2j)N7hTTuny&Nz0ELoYrEVL>a1r5LY-U$up zriZH86@@lIK1-1AJ#}`oSJKm<;$ZS(TPkrn@aX!u37?g1mnScrbiz9+#$O=U6OKyK z28mchCb4)M)Rvm#FMEbg^xaGtA=W9Gf^jVG^{-Wi<&@HO{q!A$fl5y%LJNrd8$>Ewp%7(e2_z|r=ZdCl1a~9p&k5#0k@Tbp*si9 z$%w_GZ%=?y>fpiQ@EXLpbVbLWQ4Gj^Oi*``pn8Ih)%01(Ks>b>LxZfkS}*oV`+6l% z!f`N9iB+j6Jp?IqZ%}gLeUBunpb7LPL(<8#+k4+YoJKee1B@CS4uZ1jD_WByBmX;) z8vO&L@{K|B$iIH7UVcy7>~Z)x`Gi_UAH^yN-w_DVlIL((8o0fBx%aRE-hi^-ReKP# z_SE3O=FoOBOp+tjzlbqup+1;7+0ZDcQprXpWoC*8a>`x;X29?|v6DB*8 z7mx$?r+gI^N0X3KFjML}wBto5v;Tg^N5bw$g0rVHjc;Y2A0KUPGPH4$M`je}FX2^x z|HEgfJ@vL4$$hQN-N;Qg)akL|u#WcrAU1;5t@$Xd4gG3>v3*?X2*O(DcU*Ws{7YGX zFVNjmB7&wV*r&~7Yqk;0K!QuV5TluHxEs%qsmqi4*mz#jZ{T3`1SudwMYTUh;E$&e zDZILCaHJQGsw(UaE@i8Z>o;s=Shm_1COx-3BL1fBQ@x)@+&S$mP@;Wwlo5C=R$Bu5 zc(8ZDP{9`o)vfuNmdB3MJa=>9SzGUa9bmT*ZsGw)+eC^C@xlLJ5E);e@Bro_>#{r! zm@84ui^pItI>ATgVqZi}&3l+$DsvTmANcZK#cN+IZbK+RP>0WQV@77X>Dq`b+=f>< z^zGfbprtP&XZ2=3&ASHX>U!;G=RP{IOUQXHxwAp@dDU<1=P~_`5&RDEpfHcm$Vw;c z=g~J4519|`Rf%89$lP$;D9n@pKdilXRFnI*Hi}r#C5no4NK}>}(!_{#qM}5lM2z$j z1py@jLg*zCSxP4=LI5cu(o3XCCmBH2@bJpx@2*OPnyEpEl(xi2eJ?or!`t0EZCF<~hqjVaks8dt;tC)w z-LNc|+&^wx?VHoDEq3dc9sA+IC<&KtLWiS@?zEw0Dlmq=y@tnoi&OlZ5@bv4oU-MA z_yDEgQ$@PcYs;CAOJkfv<#i*gatRHLh52%A%(jssAnN@B&9Q1>)L!KQxv`rz3bSV% z%S)l1@$on;5^S%i`&^*bEUvHSAl!=F^i96jw{q-^g>XOS>8Bl&>1cGUvesXu}HT1`rX!y0?MQXP4ow;8Wi*mPH4Rqti5a3F7 z+T*U{t9JW5WIkvV2i0%yO#U$G0W8xZai5R>zbqGIasxX6UZ>|>}1Y7aIp<(F3 zh>g2YKqDh)(bi4!?I5_WJK=z=k!*z~ohP|SnCpAVTObk+72OZfg-4^#Un+|ZMN`*iJr_eN{tWAl9hp!^E?~lH` zc2B{+bk>;K{D)ht=b+rT(G?vGgaQDy7`O31Ez7bkMVJ z4(m&|t~i`~YQdpqJ~C9{?UUam!M>c4Ig-z(`Yj$So1D<$`Sh{>z)aMNMxO}*jkFj!y>@x;xvZUC=7~0UtECv* zaTs)4+D61TE-d+i?1h`|aPZ~4xFCHMIok~>?g-Meb^`B) zDT)cuVuc0ub_Aul>yI#z=yo+o%$>^-cW#_HahvV>QR)qz=1=F0vMHJN;H+o*^T|EK zgJp%3#6egmsjTOdeNhqI^w`6q`%)%J=R$f?UX;AxxfvLvef8@?!N}%r?xw;vr?|Tn zvhDF%1)tnLv@^MsTokuf1>2h?Eo=Cx$(!GR%J50+@Y&NP5`3IZ&SvTgz&Q7VJ?D;{ z_@n#UBD8)5E0@LW|n?Tta|ld}84x+(qnCfZr{rTSKxG1DTnNrD+4 zdWSESf453;J{wVB1M?XdQkdqeF0MCDQ zAIfs7V0hYU?)5yuyitWl5BKt*mWEFq<(Nw8C=kW?tZh=m%id2XZZqFZ9zUYQHt|V z;m58_Zsrmdj;n7y%vHBfHicPQK6~Z`?Y_15vIY%tzjeH7S2_t2YjmtI%SZ_=Rw;>E zC&Wd_LJP$xXOH`E2`j0Pz7-gBgjJ7{YDJO!G#Q=chihd-w<43YaD!qrd6Z75rD zo!Pi1iEaVkU_u@0};ODbW+T2CXP#TIa$37s?=;H7O=U-af6F4 zh5GEB1_6GH8oi0+z)P|9lmy?K@iioh81$|If$cKRj>j^P8&M zPpdY^g3x?w=Xr%ULh@Dv618tl8MRt$1oJCSNJxBg(2SRTk!B~@X~W^%mhs*`wG6$3 z*-6RV`|ymhWGpA_zB`c+9W4wL5vYsK6)kP;P7?w(xKtE%p|crzR1SrPLCHNO%zBDs zmTZ{&=4O3m5i4D7)9}+;L)Q38XPzPxpCGKUnTsQstpV-t3KBsD`3;*6Rp%+wq*8ps z=HQGvtByZn0Tz*<*TQdXq%K9MFN}95~bYI4I!tFN5m86MTp*b^Peq;pzbAnWJN;tv?#p zUr9E-wHI;+sTJ3eugTW}(vS>!NEC<#4yg57+}eAy;g8xd1FakwE;9=sC;FA zw+3eTgO8>scB3xR{eddPw}-gUBq+I4ARgegK4#93WJA7VU(u3gBY13qxi9Ve=j(|# zJMW8PCVYnD&j;l{JTHi{7wzn+E5jVZ6GtlLj;np*Ejq2kW$)o7j2(Qn{c15`=2_|i zNbiS02rB(j-UB3WOLKjdk~|NxVz+rFepraOn{9iuvOw~pj_XvPkic6cJ8`KNdkV^& zZojoRl%PoKflvupXLsT4RriL*G$_A0v{HIXq=#>Fm?+`pU55BwU0}ZNS+Lb{^Ao0a z1>-A6G2&Ie-R|QvegjT5x0b_aEcm(GGG?;VPG9lvTa5~n1g*)b!-+XGXtEk)$XT!&82LgFnkwL%y&9txmSg!KAV$4T zj~js)4;3aWs>IO9Gr7@N_Cvp7t`LrTM}BvCL%f9i@eX@xO=hm|p#VdjVYgA&O5zQ|4k? zo{Hl6S7+KS^0pp`;=8fJb7_h}cZX7W^8u(X|#8 zr69I#`ZeZH1_IdkLY1F3g2}he)cKPO`A;^2$1kH3tjT0?!74{Wr*6VrK7ZbdDp$6g z4I%{lN2#4Ho99TeEQn(7$UW^pE$x=BaGpQXC_)X{0WztSsoJXr*Ae34k>8hY<_85r zxM5dGQ0#=7(==WNx4m7zD4xLD>Mygtn492za~--jnYV#M@{q#qL#Nf3TT7OLQOOGR z-$m(7Gg^-}JvK((zaytr?MBk*?R!?OV9!fm)i&~IbHtJ>UJS-3%7D3q(aBd=(_)?a z)HdrjF@-X`QqhTE+2!m%X1Sj61IHtg$M~`%L;#P(c*Z^dcEqVwj#RhR_~Z=xs1Swt za3wAq^4?$eMY7hd(2Hg>Pvkbb*7GR|kopzjoQxWayjK2chW-P%Qi|Kx-$qWh!&5Os zTvl+^)Y5M;-qcxmHY4j$9%ub24J?^fV5qj;r5{6{?E7#<5|6g)+CMG~HlQ>RydMNW zwqdVq-(?BgT`DmvrA)5O$}#f#=O4v(>&MuQ^$9@sW-r#95Vy*K(53zIQ(v>qsb}hK zOlY&rbcNXMz3v@Fgi{!P^so5=&ULrFdmkErY^||5=TD5XMlXLSvSI25^|SEHvuV4Y zFa8P?w8wsk11(Kz_k^|%{T-YDe23$L-;_rWc-N>$5UMTz1a{>^(af{;x|@}}?juS9 zsIS5T?OvT=SYNi%_KVYjhVS4b`R18QMH;b6k@vea@8128akvr~!`skJ#@Gat$}OLL zzuiiXhF4AN%VF9SlEvq7R~p87mObr#=Ef6)BKaz0u7aKJhBCLy$B)!P14lh4OPvP9 zS!btgm$n|j*4;wu8y`q75!^{~X{z!Dn4Rx=7bY9IdX%lG(cI&%SXxkeoB8Rm2O+Bm zpR<;01FQDtmSun;d+KM)%BH6bYhdF`+4x$D5As z@KE~!gULmj?EBk{X|C0SD@np1+^^lR4bkO&*vgM8BrL>qmPN_M;Tc0i22ORBb)UR% zMdz55W@m@~;H)K?sJ*XEP+vC;wb|wDy|7#>Xr4P4>D1g8slo1@KKyb+srp=w-QJg!zWae!X)~B@oa-{WTN`_l#>o*!6<=1n!|Ye}}5et^;OzEU(H(iwBNozZ{WhsDGS z&gU|2fWl$u%R~2@9-@L#q zq4!P&h_Iq(W*5W3BW_y4MJ{(Rkrfa@Zc}P{a(Hk`0Qjw8Y+z7c>%dV1LSM4uLm9x8 zMp}Ijf5)bQ54i(t0f|U?KQ&Joj>M@xwGPsgDIgo+i;U(;P1e>Er*J3XZI?N~nxX4O z&5znkmo7-ls8gbsa^x{yje#j&sWH7;mA(F$xNck$D-KepJ@2CLG?(U0O?*514sv(o zZC%PiVZ2ORHffEGx_)~fH4YNv>?%t=sdDrqNLv_X^O`X}t~D^%H;BYgn-Ga+2B^gt zf#5#1Xj&H3@jkY`8(b@UwdaROtgAb{DS39MG0kft1G?Q~-P)Y@tgTtU4AM7^-RURL6UTjh{raQJ5PJNP2YNBYI*xI zIKSaRFbSuh_U))uZNP}2ZK9{McIZ{AIC95k-KHh)bX@yfdi_ml@6_}P^?^Vy>G^5n zYv8w>5XGxfqgrkyS2>ReDe0I(xJCM3`?D4u+5lDArAS!s=w}K{WZE6w2>x zLeY!qRie?6JLl}^Qp?&iBs{&9Wwlx`vW8!{y@QdS4~V-xj;N3?DXT*KhWK&CF}N% zAv$|b8o!mmth%=zudmZ@NkiL!nO7dJW}fxLhN5Id-uCV&j)2{Qk7I#p0(n37D#S3f z^le&KpBX=R&)>biMq+AY=(hcHN?iAFrN;ZuhJAenZpi_5sY(=RsH*XxYiJxo#rMZPPaitwHVMmVa+Zy#J4 z*pF^+nQRt5T-}-fsmYom_=K$vcP}!@S4PsQcs(!fB&pQ0$*|4L0K+^HoWj?j4N7J8 z+=r4^vM@4|eqR}qiRheJ{oIV2(xrM6O<@g9DW@4%W5}i6$6;`_F{lT7@fx!(!PL4^g zBxP%9pR#hh%UOq}1t*nIBd;Y4DgzCV`6!dxV+E|FUvGJ#rA!qnY&`v!_rCvnz5mB% z-LD$wxUH?~uoNbzbPq=u@_DYhyzLkwYvFt=4v?0N=aIninXL&A%+EFI2DztnWT%{o zlNaKA>j4o1842ud4)KvXCB8U38{`ML!cOhTxwwQ8GX=n>9AD-%{arf?WyNZL+mkT4SO~jyjt*FOOY_+clIx&xp2G)mg1(Af&+Ab;ggnlTn zuTnGEaR6+MCowX}W_ss|3UOo6mVD5I!?^0>JuCDN2 zYXgi-7JAX0M~gF6)yuNSR)_1*-X2FfRwiu}7B_P1*rC*-xy!{3`6Pz3a302^?R*3f z=U@9Z&i@}{cn&`@*=A_FX!BP4u8!PvdLJn%0D9Jro10dTW%*>As|d@g?73TRRInaA zq}=a_XI~)e7LI-IEt6m;02bWbeS{mig9YRA=J({M(i}5KxKZ~HRFycoxlCYIS8BF; z_voLtvWTTpRQcslFem5(crF*VSaXav2E#xTMtv?>te1@jX+bMhZJ=My+PL>wEjHN8 zT`E^76CCf1Q2QWp)ZR^da;9JAaT_7Reah~0r+_)!%Q=&P8(m|Uty(!PCq%;;gIQu2MmJ#rm&hM#y!j64+T+jvdbibN+L-|is1Grj zNLHC*4*8?$E!IT_=G!f5@|S!Y%Apd!XY$ghn)dXxC`P`4 zEPa|2oGR$WEw}X^xiQULkXz*mVe^@djm(OIt`l#ct+V;7}jV6yImx*jYPT|#g{7#J=f880}IBtRp@OHsanWpLZCZo zEn)N9%xyon*Y*7~x3xpV7kvvQZZ9W7mv^NqE^`1Lsl>F*bg}d6-M}`1*Qq>ANl2`L z4LLB<055!n5SSh`8EWjWma06L6g!A#D%C#lH)ck{ur9>_#b;aB(vzq*9c zVa^rdwWs#%>VMs6*3XUJ8wJ|V|ILlY9`N$Az15eUaQdG6=ZAu4T`^87ull$%vUVLX z`a9t$LbwKAU$6;$aSkNY1m49;>gA#V@DzF+T)0f*rfI|~LvWkK#?tmHQoRzE zS)5@OkI(FQPe{GSoHDHv>KlG;Rk1{O3>+D$;)nm(?Em`Km%U(%eJk@>HD7gS>Zjye z<(V->8(W`aA{9+PJza!+ZjSVbH492>vVGXPE;-)MjdRL%9Y8WndLK8WdCwfngv)3Y zX%QLoIt$j;jy`4k8CG_e8m&@^OG)ZwiHt0mCttk{qcyu?rS;-74h@+iels&y`ZXEz z-v|R*9h@(^-iIX0JFOo1&9xV1+sax0#bGfqcP^mAx6oD$1XYTrEC^(_`S#;|olUnV z`o6DQA+)|ZTFQ~{isBU~Gl`5&u-L@O?-5qBW%^mNPp^~&|F5AM^vIdVOSAJ~UYl+~ zVpK<;RuPG6P<+3jq0efv9`?Db3#UvVlDHzB(G$lry2pS5vpvm(fd(-$xtJXx>Jnj; zzwNZ8JAI?BB8c4I(H(kJeIUmYH>~2a{cUTg#t&UE z*erZM1~+YDV)E4HWcnwoTiwmEF%Zrl@~`21`ofr5OJi=+sSLO=j&N2o0Bsk=9N>m? ziqWLhdmmBE0})_LV@RPGZ*4&24L9eYWP=Q>jch!D@flSHMQ!(j!9|6Ri|yMEA7m=O z2i;=lqvrRpAM&>GYqEAVV3?vC4+er#OeQRQF1FK2pN*L@2V+$?)-7jpCPgN##Nbei z**+D;KCX{db1CX|)Y|uHtk%nu-7x>XjU=e8_1=(yra9v|dF<#IELT8~)mp{i@}Ly| z!o)4W0BUv_*6(2bSNs0&ayTo2XF80RLzhNQ`?=fW9Sx|)MD6MjecWTW#o{CyYz8(5V@y>&H*UuSmF{5T>cyVp_QiKfchd|28w@vJkKTnf*s+I6Hg z8=6ON!UdkfY_A9*wkMZ6-d4OuH{b%>nDjV%^h`jH6-PV zEjvi(Mxx%rE1Wwj-uWltB6*{Hdhgjg_YixAn{jZZIz6t$rS~nfBW3>1idJEXDta(^ zqj5y|ZjWsvVW)+Zy_rYxl*tmd@w(3?xf9Z~5iz`r*91VDYAX0eNYt5T4qD6 z@#?oYV}M}W-vGC-;X4tOyS@L$?J#iSiwM&2m-|n0628Mhb9aE=5tQn*$`P1MWr^(a zCv~|vKy^M`q~bdX4(>mhrMCg!bU9XkAMFr+e%_E!>f&sPV;xF&g#6WfE3zFnV#BcQ z9keLp#q-ItuEKrE@$I6&T8EQ;xBvB}I?pVRGvkxPT2rK>NJiJzI=Dh5JXTHITQhs0P}=MMgxaMn z$y;L)a_XI-i7tKAz4E!(CmX4|=vrTzA(&a<(V2yj<&`l8(gu0(l!uiAaly2=v?tn2 zrshwip*rfe7JFK&rCI1_Ej4|_&fF;FhqD%?p)Pr4{N9IB6>VI;M3aN?SEB}V=qVv7 zP?X(sE*oI5)hsR}t-#D6Z#4tYn0N3J@}@tMX38;*=YjHsC=svM=gTY?>%4Aip}W{|$d$d8P)47HxMTBoZ3T(DO$# zuPwORwoS}BtOD*4U|XBUo7Z90uazgz(A~`IAdHRNJ6Uu61h4l_TR{HJT%m%|)$lt! z|CcNMKPJ~fGVFoX<%k2hvVNjvHyOizUzGdWGHiNCSL?S{f={Cfp;a2;!IJ6>R&>Er z^pN)&?vr=sTO=o;zN0b9qq}}NY!bYCd#J$XoB?aY)Uw4YJjlz|QTr-l?>j`+OYACa zZCU-4Z8pp4*x_IV{IxiYlNMDpab1 zup4U#PIVq6v$fu7oKFTv zMK0ZC--+h-&@E#@Lz_i(sfd#tH(dLbx~*N)@4w;UzJb<2ege;o3`iWDOi+DomyRuS z%Y=dGF+qLWKE@iX`-o<2<=)$pm8Fdykf_2lnQ zD7Q=>Ig`g}R&`0?qyyLGdo^AhybdXCzWz+d+&Ab0q&|ahIym{NX4QewIa3Brf|yM* zar`|&a6w;-*<^jef*E6-9VD@Xehmh@>pQac1dYmUCNta5oyz-lGoe2-C3_0%M}G;j z|J_@VI(z)~`Nbt;3HIfs%s=8H&u|A>UsMu`4?FFLYnWRe1s&yGuPY{EG_-y9C`LQ+ z^U0K%Kod+xxspDvXxwz%HL>IZYbpnON&#qS)`%JvQR4vfi1!IOjSp|u_3Oc4IZ@7J zS#v>g-{rxX*nVEZb^%wNhyqqJmsySt_D2nw#3F|$Uo5%02A%>EsyYY=OFm*}Vm>ZJt0S=JMHa@B>Gy zb`xm6a|suwZ7az7!fScvz&y*hlq~y#Q2H2&orCWD%6x9@2exx_|KsAn38p=6a*xeZ z%nQ6em5WbCiQJY^v9!w<5Q)5uzI^qW5xAK75FkkENOh6R+YugPrpPekHWN+xPol5J z3P9-FaV{(Zkmy=*q=uNzIn|l6F7WoGQsD`E?@HXe%RFc#*`WF~HR-7#XM5r8dScLd zM1<4CL7@Lnf}3;2UW#L=)y`BZwLl=5ZnC?=3Zq34OB5aUMmEPOS}cjFjkaK03lEI& zT9$2n23QFtNx1yywe!44 zV-04Lw2s`CNuQUgz#h~B@eHnmpIprpZ)Cs4MJ~yv(w-7vGulNDxB^chBE+Gdryd+t zwzZDGoKQq|0Uya6Ky@T49#ZRHyG5gTrvMnt_WRxk>e;tfr=#cc4MG`ctW!0tJs<0k zwu5&%T+M}4x#Bax+T~Ki|9UGIgnptXq1;@%zloY=L_2!@4_Bzz#Y=o&c#?V#eX%}H z;*ev{C#8Ie)UWc?WFmdYNZAW$kd7}_LDBhR_=6B+-|Nr5mq|F3F-)D9-~6p=jN8Mw zs(vhXs#t_*UQ}NmC_6v0Vwe~#K5bZM>${qq=aMNZhEuxXhU_DM+l@m8{7|d+WGyl1pyU&F(??1bh5K?%bW^mY6F=T^*U>bC9F&e3~WN zA4t|_mFK~VO-GDvd*SasT!y(bJZbCSqIp^@+(iLFNveW9bU!IPd!{}za+ZXut>?!oDxmt(ZG%n6gSo%K44#wmo$`y{ciaS;CX`mDMHwDoZFkC)wixpnLz|pmyiBTa(>yI%_S|be(xmzdRF|l+VW6czQtsI6#$E7wX9` zb#VG0$%1&p2>{wZF$3}k%I25yruWSlzY2>@yh(A z{7j>W76I=m;CQ>29hKwv?Ap2rXVMSRlK^5l&T1l$lAuT#60yqRcXm~X&mgY4|?VbLW8l*Su z9EMZ#FOSG79;+>swVF)B&E2UctG(9}Mhzp~lX=y(r`N>|nJbXOcI!xgu6SI#f-W8uk7G!XLBmJ@`mpe5400Rbr0M4Gba(p7V9ID^%DM`;Rk%R@RZni9_jc)sKhlwGUF6V~CPt4WSY%#TSGS8~ z_9EyREv8dbMrCeKJUk(LTHpS+ERo`+BQ6t$g!y4}C1tA_1~x=;bSFyjG40b#G~|RN zadVh|M)$3Ia2;|zwXb0kymkB8Gq<{@#7zpnBBLbwnL`L`(5O{ys<334ZrC2Is6sOf5R|HaC0E%NUgh$oG<&@;rIF{Y zd&YPL&;q_*jRxPBIVtQ=0XkaERajST^dkKD0vV_1^7zIL<|D{;APOy)E;|mDDf60|>Z?q< ze?l1`e|AS3I`A?fJIfZ_2$)Rpnrztxhb>^71dkzBjaN$X3a|R?gyM`uTHU9JL=e47 ziGvd#Zt`0-hvdF3HO~xtrO%GHNX^yJDc^7LweSJO%eSzmf((Ot#L*lXh`MvXmGbwh z?*s5-+Dv0SbM}t3OOeTR{^iLN?WGKE+z*mscWfo4Oj12m)y`R*+^q2NM+y|9otMqi z9*Xo=&u(Frq08JyFMLf)ZE-qDiFNh7{x%U~EsQ%Q?Cc>t-E5l!K8NqldzmyuVN9SK zstav(bhLd>!*nqGyFCaQ%+jk_OqqgQW}1gh?>jg>Fp{v44CZ;{F>9N{%65ew7}M&@ z6|5>87<+p4ugmY}2Iyft%J*JY5&yDZ|JKl5Q#slHg_>*hAcu8eHG!iIM4D3C;oa{_Az%uo@y0RRFGA8Z#5sT^+~_JW8ssb z^_hG11o?uEl*45`+nKtr4L&(tDd^g|oTWa^uO4dA)2HNVjqSZK{+X1L22>QcJP1)M zk{eExSEn2Lk~6X(bS*>c@?ZqkxtTF(?$Xy)oIJ4v_iA0TU5cwoIq+~gB49V=dD(*G zwVtugXwV%U<{9>eY>ag-BkQZp6u$(Gx;8!`ar3!upuu^owobj z+IM&8WK5wc*fz;(%n}t^pdnK**>$-nE53KulmP=L1-(2?(+%va5r^^yq zic7@tjhV#WlU(8OIz$56?aDktFL5DQ6C+U4q!hbxcnQ?HheOlPifv^SaNHv6#&i%2pIY>q8<=3HLywLcQglLpzyj!B8s z4|CC1Z>zg=AxF8@sMJo2pPgkA zhgQhWCJ7>l6k~cZY;lU{HRF)V#6Q2;>cubL!twl3yr{E`-=v%11r+(f;%R?0D7kLe&Xbc^rP-nAxhxJ{AAYsj>uPp09QUzQ{)M3K?@b7Eo5`+3 zMY5LUno)#*MmPiQPM!^5^J%Kg>a$RmtLc9Bi=bywx0-#$ZSSBj_OECEubkAMjgjKY zksdoBPhR84H?7k*(I2;eIManNVW>xX}30I1{zGtQ}AQ2iew(H3L*B2$qr4`lu*kTutJW)@8I)s4;FLzq+Q-Ae({r?j3XTx}a`(saMRyFi10_R zt_OTFY3@_kNY$ae)D|(0A(^;O#;K+9(@8KOu=av9R}ATn;=LdC=;=%iC`ILp2wIFh zn+u-(HJB)r{u$zLq^;HeO);eQN8iJrf0GA9b`};Mx57Jx598Ry%xR`ws0v;ozTivnnV<& zKI`hHRhzjH5N$P03U?2gAo7%L+dF(4hwTxa!@5$Z)>kO7nU`kKHKh!>7D7NODorsy zf^?$9AaFt7U)YX2q~F9B_!$}gvmk3OpPr-yGTJz&cR%swL~y47#DG!*N&;AA#xphIc z=D9H2{*g~(`Jqj_0Bx>4bXMCeIzt>Pw-6)_-nVsf-XN#ybLW`Sug2Lgwq5#BnW zY*!SmqWIil#04lfU<)^h^h?sa^|PdLP~Rs`)Tq8)38RhLVBA&AYu2-$eCr=cH?o?$ zrQ=fE^F|imUG{L8E0NNZMqDq;DUCy8hfUq<+6AG>bc?tw-pbEwk?Ka;f!*fLO7Y3X zCr1YpO9Wy-a>)}Scf7Jefu^o8o`o{z33)O}d3c&pZ^T$^!Ks&)(M73znlhCF)$jUE zs$BGK>mIEl0^|!=Y*$*^r4pwutK+iJZF2;0PKD{b$?}DH8fIg?zA?$sG2B{$Z7=)a z*qvXXCyosW5}@puo6wqn7Nh(-a_s+nKKSC=-plI;#-J^L<^5Uk_ryT1u60Jgh2S<0 z%L<7q3MIin5HCY=W6GgaG`V@#Jf{~a-$T6ke($+1mTpOi%Lf5WkC|s|1~JREEKA|N zrQ>!WX{Oy|&|-TsnZN+j_n2mGDB0$*o$Al^=s9uQJWyc#EGH-lCWm)=sl{2O*jIZH z?oEDd-R_(NuE8e_WjBU;fH6ePsSrTd{~q$bY#XzgXq}e#@ckXM)-1L*4+GtLAct zCOCmYXx~YpFapqzwONld*2FSe2@&d&KO0MFrJ|T#3QAp*7Xt=+ z9#5&yCAQe*sATcV2cFmUR|AgL+P`DA5NNWZE38WpqO6UI%N$zPcdU!d2%f3t!jFlJ*}HO;J32n6CyBw>e}P(D^0 zXeiQqPdkPHp~}A}C7?rv>C%af=|I5SkF~H^T`q+)S?dZDN8omO7JcQs<=5o199qmUfC9N%Akk0q?xAcZ|vYcfIoy4tD0zL+x$exs5e=;&~TM?kqny9!XpBXLoDq zFzM}8$UNsh1#i1cMpnU*4hGwC8BjqT71?!gafxkZUHHSUL~e#>D=UR)A)T z&62C|a`Eoj9;ikt_L*fVm(wKIA4s(a{))ZRplPyllKm7t}xzD4%cJD8E``UNzFKiWy*c;HlSD*k`mg64mK*%4? z=5rwc_yaf}3!d&!2Og%Zn6I?cjFpzOj5lYFRH|BD*T{W@B`SV=JkA&>qu8E<%g(xH z1Z5Bli?&=eedq3$w+N^Y2gq*&^*gS!)543n>+Jv(6O5BUGJ(?87-cWM0-yB`WjqA( z+d_t(f5?%;e6=259-gS}h@pC3!cZHUY zW@g!#4E3(3BErmc_ngubslNl@r@AmzoYr$u$7!Mq2`yxBXR*8_!APigie6-%E9L@8G(8!gj=wXJbWs?Xd_NSv&__|=OMw!Ce-Mump**^ z|I~costlMV;D!VbZ3y#$spWIJ;W4s6a0-a2L~2hEh;ZCl0@_~C#oC%D<6_sV6-fb+ zMYMTP?+lfoQuk)2QsqHYg>nH zM5;kd`YvmF#x)tC;8JCVe+*jxB2i$wcLM^D% zg6?X&%Sjha^Z*tyy0?HHYT~PO+#Fglg^pmcEBgF3D(cwysjS*b?BM!y-1DEF{q`qZ ztF*vX`IY+Y^U)8tSCI)7<29EN6Os0I`LdAW8tG=J{?tv$_5$A6HoL_nJ0-2{zbXVq z|5+iRL|LVp2t;27_$@{htBXtnV!89+oU%nd(}WsYvfuqqR4>Gzpwv zzD@0757)xmP{uvkoV-4>Igw+uOUw9Zf$<0LafyY?Lo}E)TFNszYEc$So5+C6WEE`y z(xiD%>sD`~LI#mKi~GSRG`DiRt*o5!)3i?@)K+^EedaFPOd0_pedc7~&1W3yezc&V zClh^x^YQeVIjU{ZUoxT9WMHvIV*=d&?h$&(zVqT53`vWXnT7<&l|pV6o5@MHGBK3b!(c;uVBADZH?fS2FiZOw+KZrz}G&L+^(JE7ZM5~nEC32hT#l1GkfhihtBpV zLcHBnr}6EfWL>6&@IAv#>p$Bp(4n6(1!u=_*I!oj&tLiF8DxLp{#(Fct;G3k+zXdh zNx((%Xo!c%;bYA=l)IIbwmOQUrn~Cj;gb9!`}JwclBiQ@YVysjxm%nK7QnzkAmS$4 zP=?^hWlF-JHIxDXNU#5rd#Bgm<3z>S<)smUoZU#q)^Myul|pEU)7iP%cV2JCx?$I% z0UWH+tn9_FZi!9Ez|FC}O;|W-zUF_&NLPC9J|VlsV!Je(Tr{dLB^SLq6Qma*uf{*D z)C0u>?V@#=88y{~2If-~qYWcuxG04SNL>TH=6`D(*|lX>Zr0e{<6a06rkVUIf&mWm___3{&ole(W?#W(ud=$C!Je=V#k zQn9Txn;M<+Ba)XF9BX!{C|Zu14y2YdpiE$a@k^P6rSrtObPl?kE61uFT@O^b@)oxg zy;TF*2_;Z|DviE<7^hJdox;OMNu!-H{14qlV)a@A&UZ_EP3ToW|G25fB3dFcBCC7 zip)D)jn6eMwNpBG^83j7=k<7^plEWkch1asxSCjk%Qsp#9Vj%G&a<5CSg&%;d-4O| zb_LRk%PJNA#Fcsc0ie^}ldSzao`1_8en~u%J<@;j1If){5GrZuM05>ML3qAjR90R+ zI<`h`Hzc&y@Kv8*idr)8F3id9%yoX9^mLLdPyh1}SLv{@aAws{W zv)ICldz4v|&1z1DmYLFRfmqBMK&$Bbf~gTN+(=t?RcSV*bu|kXLr|`ZWEP6MHBd~R zr@l%TeUqv8@}jS5V1chJy*HYjt+0-EZ1fBqEa_=Lh1vA?P)zPzt4SC|AaWj<7jQwSTBudIMUsVmtczutSDWVgP)HI*QvN^iP zkQFYd%Hj&^&#>7K#{HA#(;a;XgUFta+sif&Pv%m(MX{r8q>vLVJRT<)t87TE_8$r5kaK6D_ex@_9gRLnZSn#Hr^Z zy?r5NO+V2^XVX@i$QVzK+Q?xljoNpoxU1yd9=l-{Wm5gHUFs5GbnjwO$4l8dlOKeb zg_=y3vZAkKK?|-$kP<97D~l?UeOf1GNs>%2j%mie9>dC>03)Ah02vvl`Y@iHIg$1! z74J0>pNZI{AMM)mPT!B;WDi^;lueagyEkHYl&=+6kU%S(Y1|{6{wu)z$)7Ua{~J{Q z=Z7yU2QY(e{`Pb_p9rB zoxgwAKRqrSoHF`DM7y16i5wp$gV=j- z^nK*rg$)g@INP^+Y0q9__BJqTFRGI-pehKac9h1*fADLMH4wN+jtz8fih2JB`JkU9 z?%dZ7!0w7FLzz$-VcWBHi^=K4IgMF3xGemSSF}n|HRVsM<7?tVItO8&khW z`4ch87H8edn@f-BM@kz%HdpSbd9nb61DZ7ny8 zGEBYu4P@vYJ&PBXXkX2a=`!=$l^KNes)WvDUd>dUv-H}LMPV^SZmuTdWY$5&D z89PX3Rf-pyPXT-FX}huRHf4xYqsi|l#;)W(W2H=+EDvInRDzArAS3FE?DP{!7(inP ztz{0%>kyk4m88SA_)!L`QbRs|8IG?SstQyW#qE0Rm=VCi{n*Ym(*Jv05tCmL5o{pS za8TgsKas>0z@8t>|JMU5+93aim zvOkULUKLt48(;tUEf13<^Z?U-dGXo+qfc}7y~WPO4ODZc=onBcI9Tu*Y3GHs8*>^t zz~^%8qH<0Kn9}UunPCLCV&H#4z=CrIRxb&}am-bYefp2xh15@$~puv?(^b1P_y0}!p zYJUe7Z~DyIv;|)}-4{K<;#`T-7G~Hwbgzk@lamuxM6as4tZ(JjRh$|h4}yEw2IZ_g z_fPe;{6!lqpXPthf$|7a?)|NE4ieoq-P6qXfN5>QT7=wrvf2kKwm%JF9^NlYg6Y?? zF8KNSy z@HVBQO8K2|-TXvieBQfvz&JQjMMc6`*m5NOnOhloP|7I{T9_ia13qE)Kx$~c$|-m% zeLUCPlD_Tc>#@&5(MD>JDf-TY^eEaEJ!{ALVF}n{$4gWK!Jsm)J$73Bl7i1(=KiYJ zTs~_BQd!H_I@~Y~X&QUm>TGQ@D4Mb>ZWuf70UPO6>cb+8Pyh#OHXj)LR(SQKdx>ic z;7nNW4op^DH!3bG>lG9g6=z6FMWHb`iIjU3R=XLVsP)x|! zLyGDI*3vXKS(RPl>3zE{*p^rv9uVo#^6DdgG6mD-46EI>N5SnX_y+IuvDknbEiA`# ziqJ8qi@SF_?INZhttQBha09Vi%O{8&WP%xq&JPriR>LYl<`=oDV_jX9*>^exX8?CE?{lZOtZd9(iu318S#YX<%^X@bc_7$p&qhGYTh8eC-T3ywE!XGNZyI1}9>Y)P}?cWB1tGv7<> z0H2iy8bx;2=jO*M2x@c*oG?w?SDFz+dr@WPGiZwRz~%#Xp=pN@G@@EU=CkQ{A`Qx~ za>nQ6rQeI|m3y9w9)9dS7WTZh%9bJzHeCKz2-3}_?F$ie3N^uUxbn6ctI1~E%AU(X zID5Fx$qxNQ5<7g9A|569oQhUzFCtBAs%=6NN6v4MI_-Ojg#_7}zVv$!_&>4WW&Acn zL(qcZqalYXgkY-fOjdUBOwg+b?6pNSOkg7eLnO>Cg3k`2{(bG9^SdAp;3covR%O|n zYK?z-u^;W4ROj5uwZ2mO^VZ$Fd^@k_6gz%McrF{BbKgbrxu|o}PoU89?y0IM5&K(w z*J-%DU@6SwJv!F5=d)NVWLfQ@3}7^H#8u@Gi6)x~k|m5cc6^DIW!l(cXmU!)&^+%N zt+Neg3$3cS(*~G%K%4sphqQgOyxZy@E3d<@3FjqQ8*z)Z7xhi|gkmTsi^D$}oZ@XB ziYYv>6)I3QY(fAPvE5dcA-+>ZsB?w3zU}1Qt`lA$BVRuKOsH>7__J{ zt=A43Lv;ErAba(B`TQ%@p~1t)6@CPS+TCC-H^yTHz`G=qvqS+dQJ|dKfcLQM^*sdy zH>}vpqX|+)Mmk^Ym-xMhv`T_2ji{3~(L5KTBNIO!C_FYV?Vd*-i;o5DRc>bx6{v#C zdYCo;FP6(D*BjhZ&2>Az5K$Gmh)~_=o7CYUAPa+;j0~BxYYgrsPy$Hq*XyuYYad6o zC)~FQUhj42$}(a&d=)L=xFvw5!T%UChjIe%qPOF9UZJ^+nuI``F&uA>7lU-@TTe|A z6bz{FI%0No31f8oiY&d&7wAIg)X|6{4epJ(r1@$-0atHVk#NA5?F36qD3%PC zGOoPi4~-7EYi%vJ(xv!tF&w~+ZMAK_R))Gv@S+7HB0~Eq{r>)2+Za0QpOjhA@z?_nyfa&# zFD{@{(T7(A^`r^kyQlHG{bq>r!j6V|ZJ>ElG&FB-BzwM?H7C0-ZLlNm=BoZS3mVEu zLS3p!Dek5ND%J>(+#{wbLz{>%$t5|ybZH)HHc){#*k)8DcEwCL3IkKg5Nazh)RvN& zYf+I7Rkmf%OBXqfck8(>OMvZ`)_tLL+{&SV@#4W zVH@4bo3GXby42Zbi%qcu(}FTnKu)8nYc}1-CB%DPw~V za$~&B+e@6JcCQ<=ZQsa`xrpMyu;S^kaF)I&0)Y^5S-Cy;wn|J43?7@m_e&%@Cl9E% zjo4Rto1@-8e(n#y+}}tfR-GugqT*#mnzWTr9Q1&xGwq$EIMXlxwD9QlG6JST$4r|F ztKbLSMqk#bg_vxVPeqk-8hfZQ7!AsX1s@qMeV@PM`qO zENy6X`bGEh18*3#CCa;P-xSXNNetVv-yXpUEhUPhSMz$BE;@YQ(H?oaYJ>y^Y3;eT z^nFM4(!pe73ed;nDN)iR)Z{30L62+=J&o}d9y6&zzP{BaKuYO2ySR_z^H|U`L~6Uy-{5ws!9?8<_%+2%KtBLe4@{{RT{h{IeK14 z%c5@8#e!9%L>}7HM`pLq=a#+P6!go#Y64kqz~0iszct8EzU5MX=z8nHK1OHu@lY-@ z{h?P-s%Q@u>gxx+Q>?ATl_77G2B47(^WIXf*wKrD8Q~Pida*Z8TI@{$-b2NBFzB}C zM21lPdzM)=)ysVR_T0F6VRKz>DxwpgPiw}TP9bkjwP~T3$kwgo?^0rTYh{BHM5`UV8!uYw~XIbW5D06SAmz7Og-=cLH27{?hy^OFKc+B9Mt@l;f z^fvkd#*v(}?CU?+|9G%B3orfUN1Z1!%u1MI;X6O#eVOq=N@!XBE4NhleFs|C7Q4z% zKska4z@UdMvwZ^?T+|a?5?swCxtiG=?1t$k_7nOn1KC6FL|LPetjxCjBss6o0 zE1mMIC6!?|{w{I}!)_de`A(IDu>E|Q+3L$KNUg%g$ zG+SYuy^3k@OW#2snaRE`GDpr$4N&j`@+AOf)6>9gudkjGZ##k!02Ww%ngfk zkgOWREDAoFnO8kL&9CHo=L`f*MQja6!(j5y0-g=_Cw={_IssJEitBamO?YePUj?&^ z<($szBEJ{*Vzv9>zMmw@iVg-1)aGR_NcEGb#7D#!0h7!Q8~Z!;J`3fy76yQsC?l_P z=QGCaQ#>>%!8qS-nJb-DIEMx^_$~=!<%}#f*Y~*~q)usC&~%jW{D_;S0AXRE1@M`Q zwk%MM_H7^{C$KBAL)3AIz-oqu%s48A_t5@9x2X6A>ezj<$FjtIy?5GYPBTnjNM~{n z8e3>eXQ@Z~)M?ujY|V}7$3NK-pS%{-tRH_GuKfUHb@lF9K>Pv^o@1ncjn{*62#+9M z!fb@_-EC!>^bT#Q#&&QAxYqjzUcpz^b*%U_p4)%}od(PN7=#o|IqtERzp_ zCmXo7C<&X4o74IEy7)QrY-lTjixIH7qS5wwN zI(hVmpGe!WD6>VAzW4@`;rzL!z|Sv}*RZt4GS?kQwB_#d2YDPKXDCh>pDHaIyLYP| zm4iMdvtH1HGU$N?D)$d$pW;xs7DkOUok#$xZbi#g=KX?>&B;cpGN7@;76c|IeowxL z*tY_>B@S&}K6c5xaLI}2SOLX^E|y6xgAiY87|v7uKLpA>hJCB%FBPjK;Qk^o@8H9I z$&uKSyAC!&k;#JS*Fm@Mz+{_i-Z@#yhv16Hr^7_rX^m#SLUWnGp;U&r8fq(($Bzm? z-zl@*jag)U?!7WOlS4LSq8e)PYfL6QR{e~RV6v-JmGyf65p4xg!s?A8LVrtuvdamM z3YVKp?y{jO;!dT4jyqofK67B5wOkUpwRN(ggAp{7tx-ZtduH7lfSTeXYIzYl0hk)I zM3Mg&e>v00cv@UAQxYko(;XFEjwo~XQ2Y3xFZW<+e@XpZ955VJ)@#s4vZrjHtBoeP zL3;OZzSrgb0d)dV>9cfp^E>>Hm;CGFk8aG0uBRwI6w{Rc=Y{1xA^fqEa3nx<>>cd3o#RTK!idEVVjWAXO1z zjNe?62!mv3h#(BWZ5`DR%`od)^kg`34J$aelCJ(2xA_vLhGb<#wlI7QwnFnGU$s;S zZI5zPd15IoaOyhO)Y69Me$k(v`@E3(*2713rux-_DnXhhv}j00UaDnnYNGf1Dl-LF z?;nW`SwyT9PH7~qtf4NExxW$OvnaE@f91Q$dc3jA%8vQY7jOaiK(EDgS>~EPBWUd6Zcc&eT^qYL_>isahWKYm2_>Jw$mS2FjH8bL<97J z!Fk~lyUn+6dF*8%h{})OTg~45PXFWQb6WjLRgQCIyo-s4l=eLm-&T;o-1e*kSE2|j zR1h;<<=38{Uwmy*Q5y~(w}?%~*y2$Pq5ObHuM}i~hg)$?F%z}aisu8^%kitg&?#XA zVTh^7dB@|kXpBLPJsfYebWkBSdV#8xWV$u0?kxNX6H(2goQzu7XHs^AMN1MUr$c;NZD8m& zfPkawi6!7gMr2=nWiz%U1$aj(H2eNYWKtUAn8P-{4D%Sy*;^ad5YU%ESFZ0A{HOYC^Y6=ruJrpaD-7~NWEcarJ7!6iiie>X zq2?>y={o)210MK zoU`3$HXdRw=0o?C=WGCPMKZMa(0(mkWqSPP(6dD*6_H&gmP+WsgJ0ABf=n+1kZI+gkm*}qmsawu!*w-WLnG*&h$d?B z#*`~=L7S)@->#g1Lx=%Ni&XYxI)v5;Ql5`yx0EU+SG&eYCvo2};41s!ZU!nhAP68%{~~9SyD-FA3M)I$gx@TIZBBQ8{d`EbKl;IR zsMvJmOXmSbs(xjNV*XI${pVpThAOd*&DX6w+0~)r-HE(#4z1{5K_jM_+Xq1>2k%&? z`b6uu#T8n6+kea$(oKttN-Q)^@G9hdCl;F=?~bu950{K|Cf6?ngL!2ZQZX0wi2Uz9p#U7JIDLwoEfC~LD@xu5N5T#AVLKbp9ig+^XQvniuc4m^VcQ&fZof^_L4i+2U3d&3S4h4f77Qq z!IqC|LNw{M<0X0#Yh4|29HW3^Se;0Va%_v1LZAuE`h&4=f)EtP42P)!4;M@8EY-?t zW8Cd3MlSm2{U@0Eeh|3f$_C*{GXG~};O~FsJ~>P4n|UR0U0R9ZaFX?fB0Tr1gML}w zC@3!-#bT^`oaWIzVqP|m7Lz*FF|=`(l*#fDwXJ6IW~-i zea|N;3i|BVxfI#lcRWnAbBDbNmaec>8#>g!8!YMeV^J_p-`ab zTOOD6DtGGRMpkI65kW~)ChqS!jee4$W=8$M@1ZS50l5Gh#Zhf_4kI1B$=2gfWnToO zL-Sj4U{(gc<=X44wORxm=^cr5d{0EmM)OsPi$^If7S(wH?#p3+x-U=sbYI5N25!C7 zyQ54{d&^@2N>q-vCM&H3l}F0_foP!|!Fe&7^R><>2+c`GhbPkTEw$Iif^R3I_%aOI zzoh16o=gV*|I{CdhMsd383J<|ez4V*Sb6KZihX?-+OLN+jO6Cu%1c1nj@9wOVCd7w(#h>Sx?byLd@}JwkVadwmYASAB=+T{yL#~ zzs}%(BVzKqLsPEx*d5tQ{XB}9PZ!Y1FKTy%7n#n>qF0VTG%8uDjUzi;56vZck8{Q5 zqnbNjP$1~gI%RxWZjH*GQ(3aw@unrh*q`Kh2@tx%hqFJJ+jMGk;zQBZe}5^7M`8%H!vi5y>vEmL2lHc zzL*=D^)~x;Vc$Mj$pMQuPqLM5ysYX+fb64x%cbO{W(D3SmSh_alal^CJG{JHM@Y4U zk$+r|Lf}yn^?RDTbfy`3!K&3518}TJfMZ?S;8<1vq~N%7Jl;?^E%HCWvK@hasujDB3?|ji zec%hgJsiB%jsF&7#!)uwfh@8+0L(pydkh2WmjUDUrQ(e6!uG#iX|w+AN=yALxB;1- z1lhnBa!HH%88v}0>NinCyg8^%noT3B=0ru7&W-OG!=-;#2Z^)YdFV}yRyepe@6?4B z0mO)(fXQv1J%z1<1N|A9+^%B)W@`4>jsw6X_{A7UgT&z&JdoksHC@ELJ`@ z;AlzZ>{V`p605mFPU2&o0X`Q5S2yNaZ9TJ^cQR2>XYeK}<7-;pzElWVj@lG&x<|}- zcW2FsFte1k*nGD#T0}Nut!~5wgKBLqDu%9dUl8^F3^=-S4Za5)U7a-jY8>)Sn8h28 zuF`)xx-QedzSUz30gkTii-S!T6#3e!D~XnXqbvA(2lov)U0=+4?slyKMl*JPJekW+ ziQOr+3YeMDnge`6fUi)~*iwSn*oXg^aQ&Z0OyJ5>l1H2g3uz`4XX;>oV$^sK)0EsT2kfB&P;l3Ci-4RY4p%UIB|?{RFZi3~ln1tx6*RmS zS&I1=%PA8|WT`;KA(}m~oMG!po5h#JNtu&I-~L#C-RUYAP_@XZWWVb%L`CfnJDx1< zu|4L75KRWsY$Uf5CTg7yZ?ChZZv|LR61g*j(z#)QT3VPO;oYo-IHKvY@}ZqwogzRT zvTT)j=8LLryXn(nvi5pk0AFS*K=3-AilX0uP^Wqnyt^msUZDRQ3)Jl!7O1;Rwu$}T z=y>Aojj@ogxs?>0=9Xk z1e7FAYwr^MvFSvea7|0+FfiI-lsp;H9XTHGXuEqg6}4gnu$b6QEGBRx2q9z-ZB|kCzFUpc?jni^JkjeUyu{38Bzsn%89oeg~mOdB) zP?m1WJOE|+_3Af*|HH3$@RVOEOU-{#mOcPwx%6Ks%fe}ZvNZikStfhZ5ieyW-c2@w z(5QH$QZCmrTet48SO2-a#u&1ZU9G7u?)@)i=70aARnkUUaZ0vIhRbh&EJZ$Q^_WJac6l4@DH#)peTNF%)OwA!wnS-k@K{L&4L)`$xwx(*^n2G*H ztA^Y37jt}HlRc%Y)CvDKx8(n~xn;OYomb%Jm`ucSJUjOga#~$P#?Zs2-dqO2;kihf zEb{!RXUc%jEh`h52?xZroHnk6PAOLa!t9v<6Y!-&rvSI;6j1=#SFJt1=7&Q^E&AxR?O}w0| z%THana--gimmM^e#N||Ws@FH$t$rDSGi$w3A8-7w=*$6s7!~nW08*KYk*5B1iEQjE z^`%ZtT^QI5#{iO*U*v}6P2}1RU-U0o=0D|=rb@tDCD2eOq%Ho<{(_BF{kQ8kZEr!e z<}Z;>hn^At>B0ys>H7|Jvf#*|cln7myHxu2w?$}1gB=`Gl8i*#5XW~!z?4T49VNpQ zihAbjx{?KqN5^zvhhQ>Ty&Qu3h57gMcZ*tnG{~{jpJ_`_~X~i|TkatjbDt3-1x1+M01zLV5_^ z6hx>qg16bh-D7QnO|UVi!W6)s0KNEss}KfMh#S@t5@p7j8l_EvX33yXZ?Gfd{d8+M zrv3DsWQ#7BBtoJqOT?h8^L}G}ca|~JtdPWcKEbPFz}=}YTA(uy(6p#8Q0&7A(gIfX z8clh*iN%XQ%mI5>tiqp6;;6l~P=0hvhBSR!kU17z*A}24YrAd^@;C$#iErnO5}6Y` z0Fao?%)^COnL7=}ARl52t=-UV)-ZM?P^0Z&*O>6EPM+;L^-)Aql;^94@^P+K4WwDD zw9#};D$-d9RiqS@Ax=VJfd|Cl%JV0W*f5tfIxsm*lU_NOMKNWJCwue1NAisDSD8~g zI@6x=wm{f5Mo`v9JzD!2;A>03s#*^o)XyXTt3~4fyk-HU!-2XesjYsB@UQpJ3mLFN zXI0mU2}O0@LoxC470nCR8qA9MQ5^=m!e(F1?UJ+)HZwR7_AXDMJ418ZK^CJU54oxuA7cmS&b*CIXUd^R*bO|j8E7<5P%5>Sgq4*J$a+3Rs zs`N|laaXKJFc*|-gF%#5DNrrI@orHl9C=!Ec0yjl_<8X%GP9P7SEHxODD&GbyomYJ z)i3~XHB=S=Tn)>n{ox)B4hl03|LJOI@oc^`*JriiR@XfX`Twv8JE#pD;)AO+l=JT$ z;`1AaIP|_=5Nf=*vt@s1qMbs!KG_1DUmW%2K4dU-Ckkb)#v_7K;}KI4@r^}(MoMGL z%E}I)#n~?-kqrGSaqf1AcMDf9c|vS)5^oX{g!VjZ&nlHHe$WWCTc2Hs4B(c1bF1Pw z*6wVQBAT3OZ=T;6r#5bdG;2GhksVl)4#U!%@Znl);0>hZSxNT~XF{2`+Eqx7xkMm6 zTO-gK(@f`MlUr;Jeg8Hm%pq==6E2My$Y|CF-F&HMm0qc#BvKjAO)mqBv<-l0rcs}hbswA=w80cKnJPcV1?WB=)Iy>a6Y z-e2S-GW^S~WX)bJxP>m2$^OJ4X-)o1B#VCsXJ@5Hprb3!r#9%H0N*qtsr5LByf$bV-W~7VxHRtL9*GVaSq2*;= zs?B!w!XA1J0tXE9DJuZuts)9uvMcGS=B#+`7KYn>YeU!^Hsb`I#wP{u)RKwp+mnJX zWXg9i_C0#gS!zSQ$BNwYF;e3Zd^Ugwpm)EjL+3)!wmsxjg-v}IQ(YkQm65pKA-Cz5 z{}jo9(08dHvHnSh2Lxsy*m;&=npcqo+pcTo}QHF=e>18SN-*I;)In(ff(t zY3RyWTPB=6*>D_})gSRFa~I z*J#=CwI@)EDlA0MyRmapKH`sAL<=p{dr!8-La*A_B~&FYVSCo;XLcUbFOXfgSOmUI zIY*1&*V+k0+8z57!U0_(uM73)omHd#YI^Y1;U)vNp*nSJS~5XqRj$ptz7yDh90p?> z;eEZGVC-h2&Y;0+NqPm%C^3aOUh}D0(Zq!hlkxeOK2E!dqTJwh_vkr^BEh4am-lj5 z6&)}1KFV2{w&7YhrYjt&73Tdu)wk^p&hmVjD;ybGD_NzJ?ix5AW^>(l(8~pIEsW>8 zU4RxWUZ!~0b;2VXqrj>jJGnu`#ISu_+$i?6p*ji@ z2dDPv=y{g5SF3CtuN6|(lj(`hd zM_jld$N^;p>_i|enaWp=L(!_jbgux#+_##&S z9PB+4=&CNI6G2LIw-?`X(bJLy-ma17-k;R;@X`@f%zj=o$qp4;cp0RT>i3Ew5L=$ugxg(aD`H*!IOcs4;ah?BV+;k5< z8LsQA#eJFWJb>y$E!4X-X$VxbnOGz!q$WlZ{gNF-L~br54$H+ghNHe^U0V)rFydtz zK}>*IJUA=Lvf#j-{i!0FAF{En!`q)z;tB`T{L7;BiaK+7%5tIX5BQeTu((?^eqti6 z@d{7jWE0F~am12FGz9>TJSkna+}jMm{}MAY9uG8l*g1nrlovXo(fXGI?hN+}CQH}c z_VahhHl@pSWPBcR(?gN1GOlNXtc#uOukT%|Y2gial!Q<0iB+uNmUF*j3qmGD0<9+N zRxvSlvCVkB!RUzVT1ouYRT9KmEn7D zxRiKhE12O zh6peBVK60=2Tdx;WKR_P)p7-sJ|X3|tO0CYGHXxef)&iopi%)XwttArMx~-B%UJ5d zy&nfkC68-usTCmcy#;o2;6t2f5fS!du9F;h=@Hb@=NL5BMKk!{us|nPSPTBKxASkQRuS8fVAe z@O;PT>i4V}_tGHBS);9=-NJIYAha8>Rp2L@AHGP1d$r4kT&uD&<~I(SoDk{pS?nmR z`5b7(JIdU^Qt|koECY;R`@?-;9&2DgB5UOtU>45yg|VS~U?(|J&yiYrhhSFeY-kn`74uDh?og!jn-e1uM0L4D)3lNWVxPNsc+cK5$AE;q?F%f7_P){- zSf|n=n)zv3jRrWH^(^E@F%hQj#^;O4nY>7lP+<=^C`H!;1j$LtZun#E1wrkbHMgGn zk+jcd5Q{+HpqS1fxt$4xJJEZ@ke{RA`R>3W_i8l|Yv-&sR~Rul%VM=$|Nli&Dfa&j zl6vgq$FrdqB{{@I1c5_0N#~aKJio3I;2*$CmFf3;T?swGfsc=`gAX(QSlGKvUH@*S z)dJL7+VIj;Gooeb>1@&{y{!aCdN#OiJ^x1j_%Boeuml~TDlZV51!R9KCECvCNyRT$ zW~*P>VNwRZ#W|~)CsdlL&#LeEC}17P2or*j^@3I6;4I7Nt}>&@!Mq;L4++Pn9!d$* z3%eA^7?}0F%e{pr6*pAz#^{46YC}Q}y$YILcD&4eqWyb`7qWy^Ycg!93R%j*RWPUt zVqeq2chov7eV=Kzmng2@tq+iSwDr=FZ)tCmBYPt!`fbEMpGGfjzl3c6+x>II*wz+2 z8sn|EzvryNFlD?%+LZb=Rhd36Q+nS+dNm$SZ3h~aRWuC8UtR$6RgEpa(o04mmd%W7 zVrNd0$ImDyG&c1F&P>C8ywQm^-GDbOj0MP9MObsQ0O{qJ=x?T!PXyYQU}4i;mt?VV zQeo!a3mn?kPQa4-DZYRjnCK{$x#im_XfjHevhpK)Ng;z|Y3B725OVa|ht>$=A>rzM zta^TdcN{D`?(zsS|2;|0*{tr5RsK+xo`{;8=h}gZj!?3;4CxGnT_|G+A$QN9tGY9k z-z4&)SHwnb`W6}rswVGBtu2M&>Q;*+h(2_wp_1!|i+e0Lqxtc6fMy4+w@f42Y>K;^ z>yKYQ!y?MXdU~*=A})vi+5&_+N7zcSOhsSl(_j*AKr_H=Y|dXc5y9O5qr~lXkA>BHqqbezSz0>pbHPsxa z)i6Qj34&>U+{_v%uWsgp{K+a<4@iojKN+zgb@HUp%?-&9c$Hs=xKkuB7f{O^_ynh-$$l z&bHn1k{nvEI-UW*`qd8f|s=$_6)xn~P?2xuhld7gl7KMZ0-Q zzl64!83oC+fgJPBZXm}<=Uqie6{3sAmC&gC)-Qun(q;}mDef9nih0p(2V3o?3qH(C z2)JzR)sB*|kCVVxXcVH<@Xoun6*x)@@8L@n+sL2TaqEdhOVf0^5pRVgoIaO%s8B^f zVbn2>J-lWx$yS z8WS4`C|Wv~j|y-8dskkuRaS&4kj<76X%lsm0O0Z+fm;JibSF13awQZ1<^UV(`X&Lt zSX&3<-R0})*QlfLso7_lmbacxLYH^7_Gs3HUONl_}Pc-d+;1k<$j3^BPU0 z@;{m&`hPE2zZj|2{H@=rgn`J;oM#7Y%7MybH~hflhrp{*zm?=VALCq}Ayi>jKUeIE zg&EFt&VwU3oymQrjHdRd!t3`B_4FpG2b^wF5PMW%a+7Hbs~e6z90~Wv>FQjDV=%1~ zs8!VoD$;7EmzBF*bikEL%>q`;$>n~e<+%)1ej25Bkn!ssP~5{M_L4{0{zgpi!kYr3 zq8;Lv%M5s#97+5n_byB~@@$klqy#-&dehknf@0kI194>RQgLvkxKDGjTy$mB-_Wyy zXUw1Gx4@$n|J(fbCZ#bAFu%Pny7agCZE3TcWr9C=lld*cmHlOYd&u^HX~y`uqL)Y9 zJ4Om#7_QT#I0!Xd$12Ty2wTX)_O|yK#{l!&QTTqo4-A%2Jr1+g2R?KO9=n?xqne&mI(Q= zAKr61cCfZ&M*alH%+&!8% zAmxIP8hM?Mh2?mNI^4aFo$eAid?8*mzfv~HKJ`%X!^yzwuM``CDDuEa0bHn$xm1wB zv%XZYZoyh2twM7>BzUIQ^aw)AsxJodmn5V_vYA1 z-#ZJL(!&=uPv-`}sJF9M$5@Lp?8)Sw$Tj8ENIie>NG8;YDVsr>mJoBQM;0k1m+OZL zo10%$60CfxT*7lLe(6BtQ}bi(RtduVJ zCh`zgxzw~p9i8wBl{n8L1W7ffd1^A#Fr5*~#!HCnJoK@o^%5Z0`wPY1C|~qB8sH<& zZJBVdFTuWy4(UC6_Zs{3t+W>mY4Jk!>t#xZmFJo%aFlt&_wSyl;Rt*->d+&xfJ*L7 zSFNAKQQ!iOc$CwmBwq*E(3Ax9kPjt#y!rO!xCXTxo znlzxGH*+}1IQ8I=7N~LIyp5ITDGgdgQ!Oz-CN*h8iSXw@X+Z)OE-jx9FF2q5=<~M^ z^ZRR(Kk2X54$ST+3Tlqxh4fY&3PedoWoAyLePr1_a&xXIIU!flHq?Gf#>MlJV*wQ#46 zZb|>}2e~$mPqeWUk^%XzBetDF4bR)-3%y6(daF-7Q)A{C1G|K)$634qOiA50$ab}u z(Z%D5W+{?k=FAC=OlS^`Sj^voZ`AO47}lHnW8JD{RwqxN1EO?p-vdVH1fKu1?=nUL zz4Gm=(GMgZ=~6NoObMeXZ;a_N(^aML+xx4M<~AFL_Fvs#@sC?g{?=Z1Kl#A&bq^Ey z`)ew4pCcU_pKz35tlSqDkCs@*hl)b@>wDM6W?<K z$i0(SJ;?iGHPW-!RwlTi{HAPoh6ZeRLBYLlVJiH+vM`jNnuDYxUKv%;*(e^$F)U`RXJ$vc^rm@mwdd;k4iEdI= zXBb>xg*(J$mN-7k3_qOLyo6feRDwG1OvhP#Xl@$KHPddPfOwsB#AnZ^?r^GzqQ4zC z0*}1x>eR`?f-U`-<6=A8$u`2{sa^d3nIy;ejmf4!2t~JJ1(oA~IksOgcSD>4I>EnG zBX+k8FdxXT;HhM;+%YgaF6Vud01Q=)XXq%*I^p;(x$SzUB!rwwf3WMNvck3-RK3t# z37>hYTkk&m7JsuC*Yh3R?LD=iT0ZeCBY!=w$w;82A zc5;UBJ%Z-C-}?+E>HIVndC%TK@gs zZ&fykeSS4B->Bjd+V4{H{%}7 zSO*uXH4~R)=z1YJ;n)M~g~kJ}jaOBh96;YOM;yTu)@@egmENW_+)M~~)uU>GSaQLA zpj1!$>DUn0a)niJDG<2&^AC6=oA;0&zzMesvT29uW;(iITJYW^V@lVQw@7EH#7RWu zAff)%oAycEL-f;XcrqW||##!;k#+B~_25hoHwYTdTV?@Ew6)!{oLPvS6 z=uB_h`1$-)OIog%%zfs;xV?NX#s8BYxC*YE5u=X*dD775gB9CUZr3KI$HWXUaG3C>le8`ptU z1Z`HuLh>bdKIqsnI5%gEVo&r18arLsv17+zg^afzie`Wh4n3?`c_&lG8(0|raVp8P zCEo*oIpEd! zw!wL_`tqdDaFt8Vh)f;Mukq@YTZJ9>3kLmWAi$#cChp`Wdrc|KzLN%TrTJF%;fh7% zHm7I6oJbhzWLTT}{t#(_h_EOH71MU6!^@w(+5a9lNRAi@57$=HRP&{Xpaf-`J5C2E ztP*5txubf#391%G7XLENHk4U9r|Df+N+>LBpB(3tZ>L={S8f~`ydGeVdRnNxQ_0=U zUeh9x+xe!2{-f^**gNxt5YIKqgBRNcT{u6R|LL1OF%9@;tH5=o#EpFwOiCI)S0^%& z67(vV8e5h%*}@H7{+5=P3AjK&fPt`VSU8Z~+ToWI$ zCgAtxiV;uB@AcV}F-%VWFOjwqfUeon5e;9r%s+L6wQ9O;xcK4JHH+S7X(`zctS7Hb zvOX6K4K6f>r6>9+oh!aDU5as{Z+~#PnVo5@A+`O-{&cRo8CNRT7u6iuZm}P0J)Z0~ zV&KEzPagMsgsITw!8G2)XtU3{YP0?`RSWp_#|NBJTjjU+FJ7MYwdz|_iWf^16&%x^ zTQ&slNq9(y1)Hg~OhAs3^HFD_h%XTRqW*jtPc zwk%lky*bf@+NXNWL@MFTy?r_!t0_SmL$xC6-NE4@Id;5zr|NR_yb9xq0E!+nSd(($ z|0C_aqnb?DuwN9*j5?sAQUs!+ARNk@7jfk!v|%jsd~}Pcl31L`B4# z?L4xbxCl9;=g#a;c-RKT+9&NlKyTf#`hYmBf1Py8T)PD_fdm2!fP}jpD`l0Klirqgo~bjpEM&Rj`jo{Q_iOHkM}{I=g$!*mR}{w$b3HxSn1Y zGSP+GywXZp$@Hx`*&qK4X9n2oL5W!OEJdVc>rPH-U+rwO8hFcp@1I@YUuL%J7`isO zZ0~=x$bCGxGju;@GgI50Ca5p^^U66b&0-k?K7u%WYihJl;L@ zG!K@|JQzv~bsODkn^vFuu0J$fkuRg-+W+R;lI}j}@wn{cR3v)8mPSd5Vvy%~0W2uI zWHn;k1X46Tw-DAe^e8*B)biIakc%&YF&SGg2nss;;q!R7>z#<+R#$P`Z2VKzJFd`= zj?>xaYve(@#yFo(zIf0rUV9D}$UKz4;*{E@KO`S?K7dq=w^%WSN|8jyeDnC31^}E&SA?HGdbo>ezkyt;+I)D_ z@5fuTv>6T4BlV+Xqu6&@PtX+3eN4r81wR`3d{O~J-#;;dIML8=46~6w!sIMb(Y8ELoL!L$=LZ?lnNJ$b^g`M5cjv{2kG%y~ou19R{;1E|Qnc8Y zfH;!x*Druc4By85civb_hel^&Bh zY0flH9+1O!rk{OPX;@~_1?P6dH|}zt>xP3v+%E`R)t0y;d^nK(%P*OdRQH%q(F(7y z{W1{7ZHW`#W0f;p>=Iv4yE7CR%~geQxGrb-oKXGYU|DRMh;mX_aE>a7(LTfBh5|JV z%lDEC6c9e=T_Q*Ah3ALW{pSE|*U{I=O+nJAo{UT;4D(ZpX(!+U+N{!qAFTMZ4Jd`T z>om`?l#jE986~9uqqEnN*oign9#@5S3&Ef#@_u$T`LEk=pZ>r0kQSRnDiMA2r4uiP zDG6MdB_^kYch*HYMM*^RW3@$=0$aQ~HT=&mvipS*>l_#R!W>aSt!1v-?^o!$`WtMv z|M;gCyCX#d95LS_$zYRAcZLD@ri1hBF1bgefE=xS?>$B1PO2 zm1;A_y7o|D3VF}qw-!+YX#z*29y*u>w%rOOYb*P0_#0s zAlB$b1^0D-S*E|qwqrK?iLRDT4Zp;h-7!CyP^W)SJpVs&A@J(cy}P0Y4f?bWQj8UJ zG4=bQF6-)2sM^pJGv(X?+hCEEfaoXyvzmXc=JRc9ZeA9lwa0)vP#2Q-YVqm;C^dmw z33G`ItUtv!da>#eSw2+fuN~F*cFN&^#s|4A3HF{pKN9}y*H13~B7Xf4lgN954)VuO zM#yBgtaNJuK`j5wLj@swGR@#5u8IA?OzCRGU>Wl*hI!p)ErnM9wb-<{N?FV$M0%o9 z7%rk+l-JM5v~}P5TIT*9b7GctW622pr7UURvg3MM>d%57sr|%N-e)?yk8}ym)pXYO zlRTX&Yg|-@C?Afj4RIVd808p+Gi1ic4d91sD|;HjXe>x9Dj2&I^&8DCk~e5*Q$wHs zJo(a`?5Lb9}g^&BtVr?BkbOaEVspx)U})9q7mNvni3vZy7>+d zZa72%2$J1T!m4Fkvr4lSR}sQ(11Z@@f1VpO<3vs#YH57gc>n6vo96=}{ihU^Dx?A6 zmC4*ESU{rlg?!@5G6lPoM zC2Zq*a`u<^&Tro7gM{sut|siRa(;-j>2U<;m`5))2o2u=xJQ}Q0?5OjJ*RY$Z8Pqu z`Zt;O(^=?wgocpvp?E}V86Fy$42TdS=t!%{qGn{vh;6l7Y8%n<%bzd6x9xf>+mYgx z(R8=JUYz~6W0r~d()nf|Z!xuvN#g%qD6P=QpdjEPU|b0b>V!RY^-xrinM!l+8#f-s z1h^8W{eTF1iiL8e_J_b3mh58MjdX9#m%#C3D>#S)HolgHlG9izJ%RdX{Cme!P%8DW zP%1RxFH+^`4Fvu8lApm^MNY;*wT6He`U2aWLC$~nm1CW@>e@EqJ3n?ca4fpL9tFnS zoc%V}*=KW9N4qRBMI1{%61>rugSfZu1XRYfV`HMESoLm%_2Fne%yO`rzo&*uD)CHj zp)rQN$efm-PpJ~sVM-%v(mUHVCiGSf#!Mo1DB?_j^;A!TwNq{Iu4n1c6)99v){KL^ zd->HaE1FrH933FIch>yg9<2Bs9|^?m8wgX8&2a=XATl~5UKKnW+mbn$1?Q^2wfC?R zbtx2Yx`rt%nKoMMQ}5QJN#XQ>&H`OT)iETXBIoUq65N|$EIiqfwVYgr=HHR2MBS(4 zzVhonuO7XCNUiYuBf~J;qlT$^F1q9N*x-khWW6$V!MRVy3IH0Q>aCqh*=dgSF$7-8 zBg_Oq@q)Mv{;RHVsP+1Mzn2{5%+o*bnSe5QkGkDbKqcyo{&$)1&swpO$}?lA1$K1H z1|lGF&CGXppy}Y#4Z*_bG{VR=czNpVLMCK^iLV$vR7bNrg2anPlR*R+n*PX~+Evm>2(r8xQrPjR#hCcbKqUM7044#_sEkGJ+e`2Xa|Kvt@4A-64 zIBU^Un9~>t*V=d~Ox{?mhNYoKQ1*ctM`KHhrX^fS_3gt)FdKq_J2*w1PD-@hV-ORF z>`t78(*DCN4^~HG^2U@WVC$!6(UVYr;t`;9xnutyAvC~vft$TBd!CdhSlsHTBy+4T zB<_m0M_8s=9>!5V70-U}LV%%IJs?n7>EdEL@A=ITJHR6I<(b;~vZr5@Z{PE9CGi^T^@id)Pl9W8M2l-RR60*^v{yRGvxCxUyoq6 z=)+M=@{-CFL5pjs6qKwTZ_Q^1$V-gnTiwUA4y?|I?-8Y?hzsptE(Yx#UxLx=r!7m= zDVC6f)fi?Gv&U!4uv=3$d$Bt+4nDrvjU1mMZu+N`&3sFID4>gA+%jx8B#-5%F?&^) zqTrurGnjb>6zqEc*Xj2kt4Ex!$`H?wG;s{utx}H!ZIJfDSXtBBwC_&qzfIc7_^+&v zg=-H)d|B-9CV{LiJX?^>A~60#K^aYp!N_TLAASo!ILlerkyH!3+td^|VA7}-1%=$3j}eO{4_=jC6%83@3F z*jg)doE61cbZZ%4jthxN>#l3&*iJpli`PjybB8tfpG+d& zz;b%(Ehloy$M%O_?c?y#+kZg^?lh7_*6F90`BN6OI%9oPw~+}h!`sLN=pukj=m(Gq z8gg5|>a&7Rd6Q;kH**3Auk7>G-?aM$_(YAUXqLRk?U?;*x9OK%fU6Yn%IpMx)%$0k zhoe`=^sqhS#)R%ju=ex$jG6Bk)r#h6d@3pwTKAf!pz6S^^4Y zJ2U!uU$p6Ox7ynEioDd0;-V54lroas_eMh{L6xf`{hmz)6U&Ae^iZ{oSXtQTIn3h%2d&mC}}fVqfi>I zx6j^9mW(oUlWH(o9`14`u}vEdOoE4q2vh0iv8qbQ# z^7aXuv7c#A5laca&FF!%5wj1$Ii|n`ZaozH@8sZjP#3OpJ6U)P${xw@JQNVuBKyo9-TIBhbX67Pz&rJ6>3~FR6e^`CE zXeGz{+2uptkQ_PIj^XXM?-TUNkq&g>41#O48#b`nBL0t*{KYzRX+GteMTv<;WZY0- zKn>H&ExdRpCb!+FelcVz9K(yoQSdMN>>WKcB!6sL6v8W@W*gLj*;J<-k(!Zaj-xh| z!*bINa6%neOO=Ri8*rkOXAUHVDF+2Bs-TsK2hyIedOL^xXq#@shiq&xt{P{GP6+8C zvU|dLyd%#xlqS+ch$2gV8`XCnB;Q%r=ZhvO*?R<@a?I{H52gSn-vhv0uUJw+gQN*o z-6iEZ!O!Slt2hUf8b>~~5iO%UjMMud2_PtvtuBUrqnd#1lL}yT2MqORj(4RrR!_Mb zaJ=_OVcC%+m(zs8lbF2Cp343S;1JKjD)NIkBFJxVau_K-F_?VjsjdPg+vs4#rLiZ6 zmFC_JUl^dRFcrsdkrB_|CC{Gx^88(l4fRBM_6Gu~Ep5CzBB=iMaVhw7H-AMYSrP&QAx)Q_rMQU>mrpoe{Yxh_@Kk>mx6P7`+Y$)k z|7Qxb%CGas3+inJ`wD2sf6U2Bqo<5ZhITF!dI~ZsaBfoyt%I^>7T%v0+Tq(=GT{bY zA7D0YU=EtsE;2e37fH!8dgEN;7KY3(2tAl!=k3R7cH>ypOs>dffOn6S1lM)uF&c_0 zh7Zk^*Ql}mHQjsXM?ODUebrA``02~k6KwEV+A>S2zOOUn+Xc=^^gk`u#^dn$HfyiW z4Pv-?0U7F_&b;z(*N^j%b97m7D$PcG#++zqkj?-awaxamX%_hdofv?>{WrZg+OeQr zkF)q{RO?6mB7N7=t0%JGKE8fm!^ha2Rg8aXY;4rfO`81n)bpAk9^?nFDxV7Gv#~P2 z+Vg#WrAz8rekq=rm;keEZ8{mR;SW&Q5ti6W|JQZ$rUk&IeSY-#QN5dy;t$=Mq>Q9! z_BcS7_S13@4+xKQOwclMtV zcxlWDjY|Rt!>WkKHpwo6hL&aUq?!rgato8}_jiAw}E&3?Wh_kUZo-n}yYVn9`gyWe#7OC)G z@OqhDp+x~3^*S&%+NRj=G;bCRI~XD$8LlTed~9^9Q%6xnF%2$YTlrvVeDv&M<1xJZ6I?+io^72r?190yRob~{xuIvzQ9@NtbE&jfI&RF^V z>X~D3OC4^L{7pq>6|KrzbgPth#5#ZGqxipBACe&e>!Zl)*M+~bK9G2T^#SQiqX4WA z7wt8f=n%<5)+_qOebTl;%o zO`_CD(oH(@-0a)h&KsRfJddM^*owBjZCt#57o8Sxuk8uv?H0{vJPYsd6}U9FK~6yX zo>lnFDZ9O78OMs6eorasOp6@hTw(T;IumCMuWjYOc~*`BzZ{Ly-v#s(54Dj7W*C*UcJVpxAHUVr4G6En=k=LiHI$fudLLTe)l?R@^dY_al);XDB zDUY);(-lV>ZYCQj6?t7L@GO_v29N}-WyLF%=4Y}aQ3;rg9FJ!0p62CzNf)$lGsFeE zjUa(&TWZx_(5?T}JJ49yTry*X(rj7F5mU%Y`EpAqqO}nVZ~Y&Nd<)bHp1*h@)5iU8@1iYxYzg$9|(B7AN&9Pc)#$Bdgj7MZ#AYp z<4RH2<7=A4!l<3Ai{R1YCY{0o0?`fZpYok4L!dcpSw7h2JaZnzdqfJtHq;?E>WQ2& z+>~&wiPPY$L8te6E7;9vWp21^cK?v2lcNfBgC|&Di&-)6gg`_~Sf)!lC9#U}@Hsml zDwV!8vX$fBJ`9iA+)x@HPpDC;AC;AOw4p0+&?80Uq+%9fo)@gj21LXpDYd%$OzGK; zS~{AkZ-R0xYLYTmtn|&y%hpMz=C#ta>8mm66j4RMujo>_thk$2H`hx53sp?j34f8L z^btFo@^C+d_NTB7RN6*V5Hlh>A+kKS&Fb`A{P)?ng zyfIOr#psjh4)GT$Q(RYE0m|aUQIu#!^GFKbYCey+;_2P<4#sM}kE^|Qygt4zx9qhb~dl2g7A_y;{_vy;>=$Hp9C?*!QX1XMEs!bPwXLwtZq34*wEj zzefJQv(4b*1zp!*Aa@VfOL)j;kV$Q-&{-?hob#EN#{hkx+7d{7?eQ@sbKl z3twpIqCF?;QoAt*TsUQ4WXQm|e*9dj$!`nwy4s2Ab=^2|*0P)#aO}gI>Pt|LrOH4^ zspgB76WY;928zolcSCgjY&t3jMPsg&&8>W$jAvL1$u$ns{O&TYT`%ITozeT|iayb(x zy^TZ~EEtcJNfn!b*C>^vse6mliK#mmM_Wob_CC#Otc?m~!kF!iE0tIFmCU7Dpy*Wh z9|1h5K=U9&489!QAA@oAYvv+)AVyIOu_f*;(OHU0{!UrH6nX6_xuVS$i*;|2pBo>m z6Nq|L?G{yBOtmCZZU_+g(ndLtrPPdLoWhAY(%$3=N$Tg#y}G!pUuX4AYC!3ZS>vAVDJccgv?>z?n#)h1GkKsyH>af#^`FeP`-kn!HicR@S}W~%S+|&5 zcKC>k!a zCXf)4TZR3eKiC#EzUPSoY4)pouB<-eH2a2IA#*bEBRKuOyngo|v%U=`#!)=pP>vU7 zcMx&c7>lvenH9&!nL1x91F&jptiZ_l$HKPf;lCt2KE{3Y5cL$DU2?6!;HLBII?1{m z<$xl(2@nDY>d5{Gf%jGx0wHh|(0T)ez$vAU__D=tK`CtVP*};zZ%)25SdhtimwL!V z-#b8lB`&5c2C0TG;AcE+UX(f7+TEJWfs2wecZG;ck}Fp%=Rz8(fra)ZZ~og=yAm<9Osmpi*9%h5?!T8pwECwY|z%}Ju=c0vTi}9YpG8jG_2JFe%^YEPo54+36k;W ze%9Z1Q$qND7Wz>hO=dFLY92j0_CF}{#jXS2kGvOf{Oa9%O>8i1U?9nBsHwn){aqy{pSNwfc@TL@Yls3k_}FA~r^L{=v}cF+u6R3&&}@I4&3* z^2}Q`O+8R_b;8Nthmz6s6yNcA)xwJ6PJl_epEPG0Knz<$vCy#RFeOJWbc)f7~F zvJz^5pNL;SpKhcx}gE(5(6(icSEk2#D|CtJ~fLNa4MkSBS z=T6w=EX^;z`F$y@%Sc;2zz4m^4IT1v8;#Kxb{en;&K?2@umvbST04W}N?xr$y*FL( zj~5Iuh&eByL4YoCGZ7EO_D zgwOCc!Us?d9JG5A*>V zxtm~F39M$T-lV5_? z`o-0T=zlYXnXA|E>Sjf~yr#*J_7mSV#;7F366;b{T!P19>k9Y7exJ6xr||} zH=6^lab+$8noD*q;DmNV*N719=@%A$jo;UnYK^_}Dq+kg%V`pt``ZcftSkO#ORjoS z*~z^xpEkS`#dcjHYNYZHpR+ez|2`N0+?CUO-%P@JWg;d5SN2Di+;36uZ2=w?=zwA8 z87maj%$hfst(8y4FO8*$d#GoEXoWK^)!p#o6ggcV^Axtjb<<$&Y+iGhHZaPu5%rxI zqG8lVPN+gtYrUeQ_U|n__jXwo&%zf?gUK`L%+RlQ-`f1P9Vj>cjndQwKhkrDur7Mh zEnN7)Y$I@%RdTd>#rj+rlLd+U05iM3mv(3^~rwU%i=Q=90}mr@C{^NMCssF?PEJb@wgfh)YFw zHp08_L2o-gL=YT3Lzn@I7|4ReATL)pNuk&-gN%U+ncl~PM_SC!hw-LXIL^NEk4GyN z;)^T}bwL8n)m*3&bFzHK3qF*t;)(Jydh4i0YQa!mn^8N7qyQbNz0`u768_RoneS1T zMlGL?vY}`zB7e>4{20IUiD%)_SG5o;^YvDzSC#4kMJ)hD#J_*hV*Nm*jek7XvOs|w z)&ouGk%Vv5hSo15=HuWE9=ZfduDrXN&;25ZW2DHiCCcY!{cMW1&PEfJ@HTugV5eco9%K~L#*IbLB0M;Iel4JiBB?q`vy|d5Y zr#$MXBSq!r#xnP2`#kv&;EC&mZ%FTzGSjx0Bc8g%hXx$8;8H%V8-Fde9JAYQyb1V< zotF7WI@!}-#c%E8>I5skMx0cUIoAeTZ5ht3$T2D9;^7?c19*#+Pqbn8nKQ!mE*P4h zJ1{XRLNq0!o;h|~qmoCBa*h@aB=vvtGZFV_Jjrr@{9sb{I|U!o_al^4Vkbo$(N;g+ z)^JHb&O~q6iTnYCmioY%Dl1-lLnEb8oLbl0N#@|{(~_*lu1w1%EKe6RKT-l6eRHv+ z;a<2AMD^Nelof=X99)d-ix-h_u9p?WTvytP0OO2vUI#h1ldinJs~$k)LnF6SN_E#hfI~I%81JeQYtnUe3`pb079wBa`1& z^*P8h+CR>IaPkf_2lXEKOSF9P3J-1Rm;Ul!w4>TU|AVx{il_#}L5;{z}y0i6M zftBYSajS^^upmoxP=Fu$Yc<$$)0@0*?G_oYh^Xe- z-IEi={&l~(w{~J%ei-KbQg&?1ohm$jUq<`lZdx!aZmBcy$KB{c+{*Mo-Xr?7-Uzti z75k2bLfDMNsCH!laG#OAI6V|%3pA^CW<|6&zv)p2auqK`M8r%zOTSk?KM0~tyU|g0 z>GHkvjJPNEahZe7Et$>D{)LK+3@B_D5HY6$5%UdTJpOmYoHhjC=#`+CG_+3>glT_} zmu7;)es!EP!o4+2M1R z+$qbql?Z^BzWvp^vau7my&T<-z6$$iEun^EPY*jOy;an@m@?Z0q!TpH#N{0+%KH72 zsY}+!Pci&6XTR&eh;Nifd3u0*9K3%2;H}wHnaUhbARgiB$dxo?a4s;{MeLM>OsbD} zrb$FeR6lOPKX!`@HhF>`zaMgSYsJA5c|xO0sB^}RWSAM7F(1=k<)}pnpjNEzAID*D zj&7l~xakGsbU}@(e0V$F7p|GQbCnDO4+cpUvm5ZFW&|kZ`9jQ*m z?&$tc7XbJgAKCyIubgbMP`gj*@~`Dn&8zAAeMPZYEyqTb?gxcD6s4J?X$>T3axvLv z4eGGZ{>A1-mRR1r*9Wb(Zeod7Re|agpRii0lq8T!=gP;zq3nF1WpOD-%aIN4@Amz= z`(ljP&bv%UVd2nJv?|1hG zyE0G8dB2# zRi6P{s%!iIHb4KjZw1cp*ws;o$jqxLG~Y?F+M6VOXKBcw)3WTUb5r7Gi3+%)(546U ziw5S&0@i+Rp)4`&A!%*C*S90syuJePDTLJ7L^gsmh&a%_C-l=a>8&bpzOAz% zWkv_~Ur(9gqcHdGD|H2^z#)F(%Cfs&WEne7eHJf5{RIE$9>Z0(jf_Z0$S9X=KqyLv z;di}LlWeJUcIuTFmuh9RjzdZ5FGnosY z0nvuNH^bJ&{97x4fE2Ek$s93^QNr=-{oZ6w?79Q74b!K2qg-Aj0%3>lcuk+BaImev zX`zL??|f2?eA@Dh5OMg{2y><;CKLtL&a)lMv(73lb&0g4$;zb`U6V7-RxPwXUMHgsDVM-l4XIQrOZtCn zR-6B9O3%Zv?wp4clx9=4>F>LYu&Yp}G5wtoC}z_?^0xyGX<>PZk4jAntK=jDz6aki z9BI_ts^JTCbk>meS^Al`zuaoy7rg`psOJ8m-}!f_eLg)+q1H4UJ*f;pWSuUDVSPCV zO3Rp{RuIGq^GA-H1HB@&@Y~Uxwey=odV;@x0RU~Yc?3s_;_!aV02Tt!r$wbCVf3|c z?`Ir}Hsy?1`B->aXkSq7Gu&Wv8}(b{&P|u97ib#=t7L`21rsgSq^Hi^)Qiy~d;Skj zOB5Iw{=jLWvj4zoJ!!C0_V5dV3|qrR%_ZHNZwC!0K^QV=D9SW^-xoTdnN=2!100Lu zb3{I#B4&s9`M;k0bP({Q-{84T3;)xB%y(zC8&Ot3y;L+cUC7?MN-}7H&g?ZO9+XM- zcJyS&JJ!uOdA>HwcB;A)?tRDAQhutZd?>%?AMTAgyN9T3q`B~>&@w{q z!)M@MMvyTI=++tM_|zz*ef%uihvw!3W1EZC!~pSV-_S>>LgiwWFUtfcf=F%RobW?m zsK$d;TnCQI9RuG;N6LSwp51ikzOtTpfx^Hv1hwP|yf(RsD15-f(oM&SQG&0f>tKyy z8Y41?^r^mO0tNqk{*_*Q_S3-I2XguYoXaIl7Lo$Leo$K|#{Qy2wN`Np(-BaAQPBQl zauG15Cnt}BJr&CXXDpMdHTJ@J@g1T!3-=6~7N)4jj>IXm%_&U@I7{R&p9h5M?nTL( zRasI|*}T?7c8js`$^`}z3@c&FMQeMhWmd2!bSexm6#cFsFG0#OT{x<$`xcmCZY0?@ z8lu*7%Z(xP__FRZ;Fn()d-(lg)i3X}*yivZ_l%(j71uQof+yB5$)Q?6SGbS|JhF8B z=0S7bC1#I~a;QlVC6}DU$;S%HEoDNhVCu~X>5z?8;TMv#mc7?EBq%`qeI1CuA8&N` z1O{_pVIKeamuerwceL$6ZWWde`ln*G@Ij|`*Qg>@o{I zMIh+ug2souG?N2&Xqk3}s<<>NYs&sG^r8)+7w_~CV{eYO6_6*`xFK;!iI6*cCP%kq z1cc*EA}2o935JnV)X@=M^N+zpuGF|b&4EaXGX6?#*Wx1r%pQh(#U zb9aBZ|0qwT$F+P24HnqynJ#D#(hl_Z)_6<|(n{lX%TNQH>8Wl(az;?rYcV9KsY%lE_g*_lMh?Z ziGx_JVwEZF<`{oSW2SUNS{d-X@YEFt2xe5n$}0RwrZzV$1}D1kVXYl-8A_(e8gU1@ zu$Ei~l-2K&+VWC#_j+IM*E+ug5aBxC3kiMK!n%^i{XR-whN_cZlSNA+gIH3zl4T+q zCa`USnR>SWJU}pW0SIORi_eR*g#-K>@d2^zXP4U3KCeWFBeSvW1Z_(M0Ew8qg_W$? zKe2yI?>!&q%Kk5MlDxXV1l|49w)L_tA@+{{CXoH@=YU?uezbKkDy(2UM|D^-M8Xv7 zAD-R!7-KWE)d_9^y9!>-Og-Fs*XxN8aj;;zAd_vqiRapUPXJp~ zRaZfAvJ+QpPtVg;plx~N;>J&FAltu`X3NmK&)oz}?r>NsTd08NFQ>@DJtZl=ZBR`a zO{Ok=`ul?SKTG1~ho%jAXOk;x0r#SJDbo42!3}zkYOj4y7&t088hvX`RZzd)QG55h zAlW_b*7K%r`WMa>O9v3%)p~QYnP0JJ5hB_j{iyoc1EE7mX`}hb_L`+f?sfIT^`AK7 z>%pMar~S1BLU1wda}5;V`>vdcgoa;DD##{jY!Y)8364lV;%2ObM5w(S?ivWt)7Jpe zza@~ea2%S2O0oR<&<26NLae&5=T%7N$Ta>)Vd#|~soq1rt8H{H$Ss`Ol0YT59FMyY zG`C&`T*GypGMIYgIFS*d5WW|>{LGz0CzIDm4^Hfa9aI6{2uYU6N5I`!w8Bxv{3q#| z_5DDu-YS4{qz+Y@y(gglA|hqZ{PrKg`g6W+TCgOxJ1kP0o;bA+xfqtS-D4m|x_HFk z09T#dZpWB3Fn7>MfV+J!w4vnP5R60xT38+@F5Z?0gDu_oh)QB_iic1J1lzU9MdVwOPubWD0jq&Z{_NdlHJe{0VDO5UVkaa zXqciM!yFXJp8ndYUv?I#Odl1LV)Nb-w|vEY09_J~Q6lbximDE;W%}|e+r#I!R@t9f z**H>pk@ZAUd!XY1h9If?gSP1idh1Hq1J{8&1U`ZanNs_@V<01Tw+N&`Y(Xx-vGjw( z0a_MRwZc@qSfqH`?vP`FnSz`gLalDO*i4Z6F-H*Ki#Qs@0I=M*gXUd zv?0{~5xb{M6Yq5)gl+D*ol5w&_HpIT&aeEm)crt50+>7pHj28udEmH>$!D;bblIq)lBU#H{UnK2t- z&(e9!PGxg)aY1w={&&?3>)OzE8RiFA!f(nT!5D zK8}c*8L^tk35m3DmP@m&?Y7pQCaZHrfY-QAYpId>(HwM@3~zUmLgl;3+8Z`jU)*QD zxB6=do-o25IYCj6l{McuC0Sg;H~W=T?C1zc>x4H&=wU8ZCQXac+${=8~3kZ4$p#MtesJoD=G zDzbO>y|0#@3~?yxU8$S*MIIy7ElN4T=5R!gH+eA3*1f;csnCB?%AWdDk2H#At@N)3 zxM4Bef(^0@eEm~DFHMy+W2~j_C~ZxT1!J^deWKpoN7?JbNX$dFABj^%T6Y#Axmqqg zt8XXDzJ5MK7IpJQX|1WIi7_}HzDk{#slHZCetMX3kb;11RV1o!p)?g(;8uS3&qaVW)M5JkCl-sRcJw6dqP z6iVvU@Ob1d;J z`RDQ8XiQDll-OTa!3)pqwtvm>Th9r^e-uMa{9=3a-bT@AWK7s<=17I6WA<^yC;bpa z;9Rl$(6546v+7v*Dg_@zlPP!U5&m-K>v@ONn9=SdV4PtS%uvL!)W&8{G=Z?VFC`-@w~S$JQ| zz%juQv5@zP0Z6&Bua>CyL=67y(fd9!cZAaP$Nl%g<_0PbS+8i4g+f50m}TTrR1935 z(ERfU*`%b5Sph~X>XIAm0jmc;Kfn9n1jss1H^Ec3xwctZS*@?uq9qjZucW)np6uj8`VGNCXgCtya2Wd&kt<2qEqYDhMO;ERwYjBa z>UOJ$FcI>EDwtk9Lq37^Vr9+&&xnf?CJGSk9#}$LT*uM6%PgH-Bg_4`#Sh7?`Clt_ z{V2&5_rp!WFcDI$~+-?}3H?eZ1#?Hur&-!;I^cLwLJG zpqQSM^lr$A2#zpT;@&(VDYQ|$<(}6pe!b_+^Z7Tv=KI?G_kFW0`Fb#{0^vB9%!DJg zWugt9dAX1miVKKG7w+aoA2ImyM%f%+ zW}|D(B6lg;hp?>dzSek8NvzGHcBb5-%-;Qg<6cts+CwBx|CeO$@w`2_o1^P*-i*Zi z3=ueEzT6P#VE{3HO6Ry@mveoe0`ZjD2Q8&V6o=lKaOKg9(O>$@2#E+d8o>i6eD(*;ex{=qfDx92(~s4*F%n-X_$)>U4nQ zX=Y{0-fJnZR(!8p>Iv3uY*pp3bEEw~>3OyZO5ay6%Pk1VS14IQS*E&Rkj12X&6zT~ zLA`7DmbYM+xG424==hp~^MwmVrU{jr@!BdW6S-{@#}yLG_-b~J|81}TpXYajid4gwbmpi&C$E^RsRZ4L>$Wmk0!KjkaRV2M_2_KEOrI#^-`-sqFF2DO`w5_6wMnli) zVrt^m6!cTC490orCr>(RwL+}DxSHA4QIoNGZNFwLe_Ot1Mb=ZXpn_f9ts?Fs0S})f zDLU>^Tsfo{v|uU(bL(CW8XnK@IBQ zAQM*(MRgoLy4EZ*?lQ(|8yyx37=OoMZ#)Q6kz|(2WG$D%c&z;idZTYC5y#ol(Ni7q zPD@Vp87*KSVq2qTq{bk)&vTcAaY1Bw{Ynhasb}v*L)+W&{@?`Cz3NmJi%P#6uCj_X zYQC=tENFz9I`&ZQ)C!*Dx^=(Pi5B%~3kfEu5l@YPjDu#oGUInH9Eiwk0%W`tjb$g3 z*U)m;CUr~So50ql;9lWbF_`%%?%-R83{qM0-EexHELhlvAVtZNXipTw@mhg zjvL0bW=(MP&=#u)Og0~3#ft#pjz_UY7K(4+Q;#>uu0hi1O$9X*f&)BBs7*&ElD~_ITPLzK2 z>J>uc<)}%3^y1;fdf_j94*bAwu5wgDe$ce7u#7CzR!AB+eA5MY()0tVYf@k9CX^qM z4Hyg4d?QgsExhl2`O*;Ru#VfUAP>=eTXqlJ%^oZlFwrH^0Wt}`ED7Oy2{Jl?1`+M% z>TNWrBlV@Q*&k?7`zP)_J^YoPvNew2%Md<&69u5rze(n7w<#!95ptxisv1+354y6^ znU>_snY?FJg3MLfxDQ`%dPI$dyLDl2%Ku6Xt5=hYvKfC>B)-<0zXW*MdW(qf zddAQF{kZ?Ho!-E?Q*+~tBUw2IlwJ-`KuqYbA!(Av0d>bslm;XHw{F!e_TZynfvX_$%F(@gC3u+Q zCrUTz0lKHg+CJdk^vX;6AJ_2CE*{q%ps6l@ik7=LQZBsc6M@>^b!TQpINWqi%7Hp) z6J8aHQ}Qg=k;YnziKG(d-4IKklSVp?mNQF~lfozb-#Eua+%C}SgG;x~wx92qEY1H5Tx zua#&%hAEhF@)#&vi-C-n#X-e5ctNf@z&9=5=9{AS06L6g-5?!PRlwWP&i?y(SH}QS ztdEpy#Xn*Z?GXBG4!p#Vcf#JBS|+Ho9MAA5;AeU{$4nUB2gTyCvLSiyakvW<<5!rQ#jLpW3yI^_KUjPK+Irvl?1BRJ|KaYvgPKhHy>YDIsuWQvVo+H{MVc5XLZZtGDhMh| z6^N3BAQ2D(QUZy}Dj+4Yh!i1Fksd&dfPfH?5|I)SNa!FfK!DIvNJw~Z+~@3B_q@+@ zc7NxYdC&Z2@<%8$FjwyDTR&w|eCWl&h=nsNvJDw*iT-tZ3))SDrl4wGjyiAsfi^Jq zuJn}=it5m)k1lbiLms2Aks7?C@YG}Q+>JtRoSEiqQ$@DrHU_W5IAF#Swk&scI->LN ze~`#iMj~36x{i9MNHDB;w)Zzv7vN(QU(>Aw&8hJInnBpL^+u-8+HN*fU&8pH3nfyq z+#ZWb*HhNCn4Le7@&Yp9D@<67ng*X@SF-TP&W9j7JajN>xJRu@hAEo)b*F14&j42C z>UIFnc};@1q_F4H3PYgQ!;<+a%x4&Gb@kW6AJK=$2)*7hdq1CN5{e{q%)0NLH)uKhZZ=yTqyKgU*NhT7Fb9yWnPx)~8gUr9v<;)Y|Ar~b!_*vCXrawbk%ugG@umf< z$4qWdN2}Wk_4udqS6l*(Xcp5C>1kY!-fBN9>ZxvXT?(TTa=V|wb3ggOr6i3%c=w>T z7D=ZEyIQ5^FZ3^hb7$rSt8+DatK8MY4{nbpR#>%{r8`IMp?Jp#KtVq)(G7|!Ao4g& z|JIRpS%f&3Ig5~aLTi*7)c^9kFX?g(XDDfQTh8|eH6|aa8w{vC^ajsTvM=W~*S$VT znN^y&a%0<3C$V1^bW|`;8WQY*jmLfsx8cZ~PYiSQWfQqoH=!>UZ z+RnD5@12S>4Rsp^%fe`n$Q{Bd=Tz;VOp88J)2Ec64QX0qH=qosA;QtB>ZPL>aU;X> z(r;5Ywv@Z;nzsf4ZUK57^GW-%GlL~w?Q=h5s~?e{lc(u}%G6^IJNk4qd`KL+8fpdw zbeq_A%$Pc>uu6{{XxX;=X2fI6CBW*?Jw<-DFOzpc_pP<{XWJLkVv4cPAYgTDl@I|g|x+GQS zc?RntvygA%$lTaNZe_`IY-O_2YtCb%xKAxs>IYnY}(UwpEH;>}U9u?d7Ki zctp9nTv>})+g0{peRK14DzD=HJN7KV2{NNLTI8Yji6zo@T`oRR;b^kn`UY&iNJH~u zN^0fHJckZ=plG{z6THYDFNMmoBGeY_MOAp;Gl(g)icG+JJ9^H6blMG{u-BOZV-2R za4p7W>s~3bM`m3j#k;ib3@e>#!*|J~8RZAAdP5J|TpUnrUmlw=sZ@~Fk)6*b;di5N zvm#g_lY8cicZJt2wBvWMFfC7A+{;1vKZOjuL)*R^_l77*wG>83VJ3t{xmHo#Ba%^! z${DBmRyl}nY_dn)wTEN`+`u7+pL%gVNQZSP(iU0V_2k8p6^6TMzPg>D1QoSj^l66U zm5P@J(`bNGa@%kliNr`zI)%Em?#9o_UzygXUTPys&`ebR!4w+ikle)2EF%6ydFpv9 zwe9&+*$~pc#;nu@^Wx+0%J-oCD#p_MZG_*K9YOhJtsccY%adHXnO>vU$NHBt%i=cx zOzT-o{kzW}Xyk}bt=nO=s0A>s#eDURf8KuX%ysoIVDQFdaAwFlVCm|v8K*ZtRk-qc zx6kOW;YAImc+q;_%v8r#a&kE@()Ai(2AO-3k=vwb_0DC2D%eHAgQ72pRb6i>U;M8& zatUFh7=g-GwZt2K4Y9`x~G*)vc|)5oRk1#?J$7-guv_WVzKm&f2X z?_4%MLT8r@M_%stjlmg(RmA6&4%NQVgpXz6rp{Nl8a*~sLiWP~(sx758B40R!Z{tF zz)lDQ2y-$3JRsy9xM|SpTde5+2lfsAoY=ZRz*u@mtAkokZ)rmi8Es=OoJ+COHc%2q z6fdrF%!@~WExo=*ut4C#Xl)FvZh|Rfr3!|#x1UI_L>=9gDPBMQ$?rt(@^$89|9s|P zpo^iO+exo}l4`548vUY;SRX`QOwqgjvzEim?eDHkCZfJ;Kp@lfc>7iBKdKrYjMbYd zebJEEh&^Az-8zJD6BO&;9veE|uKyBwmiq8^!rkZe`cH)i91h0XE86Bq#%m@n7V)eB zx?9Bci`c5&8i&7gGl1Xt0-gY zb9Y0CXdst`1IEsRN4LW-fnHLyQAajoG-4YI?Tq|p{brR2RkxiWNqw&&NS94z0z+JG zl|)V_p=$J8QVXt5QEhQd#S$ACv7ewTljo4iG~%(x9c`GiAs$y?%TpPOqa*1y-7q6- zLisz_6O>#aB2v8>tLMIDUQ}=V`*+KHeeueaKZ&eqszSp6eHqFd8>&>kFq9p0EEYVt z>UC_^GA`g@9RaYWYB$>{XE4?Ri})!J`zwoN*=<-7cYTs&-jqQC%QS>^YtjJWhBW+}*|kvcci6>X(EIyZG()>gerh6)LWQ%9cNE&u9%?@KDNw%a zNRu}z&J2$Z>>RbI(_TuHDhgVLZJn4M{X_sYe}rdBk@&J|P~=Jye+sgM$hUK2+e$LZ z5#6w$(TJ`38}wr@tmAFkeMfc6xA&=UD_}%{(d5YpH~vM!6Z*uuIw}+6XC1vNK)~rV z|M@+dz>IDT5C+evxZMy2T2b>M$Ak7JuJl9eW_LaybKV0D*@w^aL~28wI{nANIBrzc z-L{qT0M$*;(|9$is~R-tmHD?bncLg+$A|P7X{_j`)mavtov0Br)+80ROG;l~GMJY> zJQS}i*YYI}y)DtfXw#6H+B#lKP>zxQOYgIkkJU*Ty=Uc`=H%lNXmFBHA@luCdq28lNG@KtU7sQc_o z1{7mnMBGJvCIk*3C2|2ULM~0T-A9N;;fN@pA?NIU!RAPKY^p@#mWG@Ahk_HD$W0_ziYdF2@v&V*=Z~p+@+?mCJzVcH8`z8ASOh za>IPArSnd}+_}HZ71b9w!hM157LL@Y;^jAl)+T%=`7_x*Y}3^P1;Q18!r$@pJC4<= zQhe!5G_%ltZ#Z;9Mmu;ZbT&>8aDR?IW*=hX?ByBTkJgN|*=0>}< z;tC_rK*1rhp{@DCNE4Bt3g>ABUxqP86NJ|3(ea=}{O4s~4J&m{M}r@h#_NEw^|K0E zJ2agV`t4HzFJPJ`>qW(rs>*}h(9dv=(PFHE;{~zVzy%%bkyH)Achca%6Pc!0te_Eh zwDVxed7|8W`=HTmafE@bI)5U(!4{9qx7Qy_Jz_1X-S0DO$B^^-yyIDu)c4=iT{j@VE&AI-jfd7 z0}m_iI%y;;wHni&-aq{#szlRaxpR7a?u-I>FOn8Z!F!fcUQ{*8rzJnUiY-5qBCfn! ze2}&OGIC+>5c+M#j<4In#V1VPePX7RhgAvo#%RC1ZK3{G*SpnEMgy$q8?M$WP6?Je zK07YtN$S|l+RHXQYOwX0%ysc^z=JbI4kHu_F=fdVmxn2P7bb%{-`=ZEvsP~{+haq6 z$K=4cL_X@WfR_a-$K8O+#YWgmrMoSQX%JCAwjO-d*Sf*ArR?};#PQ2LH?k*ly_E5hx6&VIkPo*S~B9gJBQGC9l`y{J3dmAs)p*ROEG5&Wsp zf^oVuR}*7ac=fy2kyerbchSw`#r=bcM#%ch;-Ts!Ka%U-H7e>PFm=P9DE-`T8|dP;MYFR=&UN37hwYHN=BGY%55hL0ve(=@&QS~~%dSB>{s zX9H~}Y4Lp?%6$BEL~dM@M@)(J`x_^S8DdI%)#mH8()~N5-Rv*`pVP2l=@rkf!10D# zcROjC>fk?VN#v9fIa4Z7w2QWf%X9+HvMBY4b8(q6a`wGLQ0{pRM$-6f%EL~5^n+RB zSqQ-BL;>c&;Q`PeQ{n9q z)4ZrB#nBW~kWR2|>xYcZnSUVKSsz{&xt=a$d-=X>vX(5)X>1M!az>{^fQ`C`v{~wA z^hy$~gYGmhYo-n;>-)yy?3I9VXRJJut%mA=X-_p`Y8uW0GaPLVXXgvJT_OBevzz}f zTr}`%Sc33iW@hF-H5gabIiMz7rqCewdD3whq7Hc&XT*>P&ZCS!q-s(;pXfhlW)4YW zrt22$B|qzL@cian*2zxzuThftniGOQ+7tgPdQ!C!;k5dup|wktrdxRsSPw1b?eJsx zI*&Yjq^OR}xnFPVfoS7gVCI5#4&~oG(lZ_%5{;@qY>EN6^O5N|4;f1TPq-9^#NrQe zh(G+IpxY%SD1MY58H*-8^|7UdFaa<$Zu+zx1LOyE}UG)_bGF~QSM%9 zIX@b2oC=JVv!YcV+{GEP4}rd%xTIgJR~um~{G1io>W3J!vNY0b56!-xfZ*xTZ5#Ye zQu(=6v(3qTS*ku_NpsT>PtSJM(Z+|jd(18Y29R>e|8rud`7=3*Xmwby%>c?@vT8;B zxlW4R_BVNU`lv&dYRDTm|AV$<6;`8YMf4+mWS9$+wb_XTJYd*Db;bZqixPV3mWel; z67H2KN=?WVOo39r7}uIPd1NQ@)l_lgEaOy<>{7mL>Av)8QHn;o>6R-2P8&a85#|+& zy;4<dRk&-1bpDgRgo_&hvB1-;9DjEv^OJWx^+^zc{Pax{Efv zTL}|01<=~z06HKu;jZ(p_GqtNLd`>=>OK>2Gj$F0w)|t6Mn#_ou2{Js(*T2adzHjB z=S$5s=gS=OR|Ze$)P;&B1xSB5czKG7_n%}a{e!}zn0f@ZM&U^|2$my-EPXOa+^X~4 zbm8T&s4Wrzh3C~Z>Do^KgGUQ9{6W=pPOnxI4iib_nyNo&-MG1?m=DZ3LFnP^MhBm% zMtsFJ;$%G@v;ZVxosR;NYQeko;pEA5k*g)muA5+_-;plPdJoup$pDt7p8!kK@YQcl z;cvsXfe4Gj*d;8Vd0OZ zXtgI$4Jm;&jjpb_>uzr zGyTPX5(-f5KmO*X02Q~b#)Uf#uS!^>63z68fGSAa@7I9hP=&;ZS_}h zqSO%tHM&u^RM1_v5*+U~=4){=_*&{n?Z+OTKW^&Qer)#K555V;+czhw(aV(}MkdhR zXd`n}`BAIwD+X{AX{Y~=?~&7zJYd7Q6f1wDP_g;r2ywcwc;oP`YT#M9yoa6-CHL>3 zePn%$6a+Hv<2Aw;zjnFjn>+R|2!Wr>HeN|KD7kqA$VgA&2+23O6E|gEzJ8*W0Pb1S zDsgI(AM-f`&o}zNP#+kWCEI9#GuwGBzlYd1mg}sL6_S>d82oe3yOKotX!*`h(J*A^ zHBBq*y$>OJ#B$4d(X-)pE3z4g1{ zW`q})&NBT@nvvT0I1ep@>#`SPUmLd5(dkfDhJCal&x#ggE%E%(*A7T(Gl00Mi3UU! z!w1)*v;lk2Q_67>f9{d~uHYfiKnAWab^sd4M*Se_ z)3t?SfsKJZ{?4`XUMi^VsG=<`=||$I%e20+@hMUOFyde!UuTME26jG?f~MF{dUeB> zGzI5TSND!9=h}|vm3YYH1vh_Q{)`Lmi|M+u8jT~(VtSA^_}S+bz6GL%4CG+U4+5m& zn-juEyp8`mG4((UUfgnGVe3%TZX7;M*Xcj8=jpa*OCKsfKWZ#+v>EoAgzKxsqUwJw zOerI-0B(&>oaJ?blK56;LcQ8Tei?CN&s1SZYjLJ+S>|R&xg1i#XPZJ%-E+EYOZ89j zV94a%PSg46Cc9znkZql{K>Gf0_tnC$<&Hr?G{c7qBf|lk3s&~~=?djXi!`u)X@Jj~ z8{o5+3HYqNUh`SgJB*d+Jc9hv-ftam4}c;LQ|%W|{)f++K8DsTkJPTyeLOPpTL_+l z-Z}U0>8N+*z?+`nljWSB!s!E1>8|yk8eN(*+!8BW{VXIQe)(f%enr2-wLhlR-LQ;# zO%4Ve!V=dU!t^PH$zbl9Ls%Bz5LWz~Lzu4!Le%!q-dXDaz_lj}F;j&B-{7@h0&wjm z8ELoeWAl$*$ASQdu+@(prv7)%S#lx@mTSI0mbKeI$Cl<=xZ-HT=oz#>rk%7f5qUWt zY$X46K(okFu@L6eRKKxt8V3}cx^Bg$pTv2;y+&I<_g%!FGWOpcGk$$qe#_XrvY_^P zrHZIM=|N}1qITatB%WeD>1DPK%(vN+lB_+fbt5q2etr0%#53D;OaSLB+l#+DXOU)q zbI#hfoLt;GwsLALU9R|pX+X1}Oq?;5*yNF4zL1FaxW<#u$dRk^b!u4ofjRr0dGM@*y8J1&bJt{PM%IVpSfsDgF$V9sdQ={P)yJhVVaL6V4QO z>HAam#B4VqDv@UAVt*1no$)AMST*;BJQ>_y?@|SwnxBO*hh+ z=QY;6aid=HoUN^zj_>`bN*>5me(JCTBOB#oqgYmV#8%je6KUYQl@jmSbV%nrFplXxNz0DecUZ7d-aF_lgAPBcV4IjAWlK8s? zlNNX{CwMhbvP^9L3hjVgx(%6yYitum-}~yo^bUzN35_0IUI+$EPY30$!O*~82}ug# zAUc|}a8m1ifGfr=9J|($Atf*b45sk$rZ_Uve^bD*Z_nu3=Pf^qK_Yf(b zN&Is953lO&r}wR&+cR` zWvIz>RdV!Uk=&lUZA*T=#op9jrnBl)*(E91s!2r;^G;{wfh%L-cOF>R97ST48nj=8 z)%U47dmbyMF!Q1^peT=9k|xYvm{6PDmp3V$M|I|KZw|y1hbCFcrbAKOMuf#z3!pik z?Z+nYbT28bp7s*{e;CYrJI9z3a&2;9gXoue7%rGwvu7! zN}X|&nd6b&-yV(DmkS|^F+BxBG%K&wl&KE`Jae2+DB8mG%B_Xb5rodS$IA;QADI?N&DXun ze3E(CkpMv0y|BXq(Kz6kLq3F~C~`FEq&3K-$?)Dt7IK2+PsT?Xftd10jOTU%AVBp? zG9$R9q7kZI)ws03rOD^kHVGw*GbHi7;f;_)3Qi{603>@4JhT7We!X9jk}k+8{y{HJ zG)Yd-ux6K2QyPkfLKX#p3AoC9$2CuNL3|VZolpThUbh7JVB&D39yFpw3UBB;z3#^Y zMc;%uiMx%e((8Dm?k47EZ19~1VquKQbaeAh$^$>lY)8TNlCP8qbPr-WJOf{?dLU#gjGWs$ zZdiA%c}5?CAQ#rB3ZyAp*?_x@;MbNfhP=J=vQ6-9C_ag^a>~OQU;r!+E$kp?{rOV9 zl#LJz`8;^7Rr%ZJ?w{OHdU$m@BeQ3aU)0SB$L&`M5zSckz3UM*>Z+G)IQ94nWEF9a zlCPr0*)+G+_Gr56*+;pzcc~X>rUGUAluKG7^3%)|!V|Aukbho%7_HI(ndJs~+?X%I z*@s;we|2L4kK}vrc-4cJ#<2i{=pBzc9U<3icbk1|AkKxj_7Hq|FOo4Ac7lCu= zc;$9coTRZ8J{N>B3H}0~7SMewvC078uhj~O|7h3ybN|Crx@tKzzi2g6Scw3H|HA6# z?vpB{h$Yx%&nVBq+b^Sw&L7e;(rLdv+aHSU|8mX!B|%5J~hQ z!pdIUphtnvFwn)p9)8_cR(TI-1~kNyvRLT&5}KAf$6kEaJ42lYRlb5ybV3UP0W0i= z*PNT9*M;5h+Iw1e3vbjSkEqIf1fJ8J*tF9Kr5#!)amSG(ZNK5l;pSb=R>mKiwHG(J z;X@tOcBl@B#<|5iljFlLiz^3-#JY8|GMNFH8W@+LR}gv?&26x}S$iZVF4BiMS)(IS zZ3)u9EfII_&uMaDEln=7v~<5shkv@Fzkiwk{jHoT$_jl@hYkr<+%mk?8#`5!z!46< z?i#;zs^L&#b;nP=sB43#nCrutU$zddRP*?{22MZb5Zj0^5Uwq$ag?MK$u)}*0PXff zpS;6_>rr0tB}39g!vs3cxqi`nko<&dum*Npayda24b(uUP%~7B2?#~6(`HP|qu?Ld zH)p#C4Y~PWy7?l`i-rd+P2PGw$Ie`Hd~ED{S`(N=PjQ!m0Dll_R6KI8kS`yjYjP*G zwx>ZB-j9jJfu#_ta>^=@W`E^80)%E&-KyVwFt&`rz1i_Tyv!2oI}=Wz_+JcH3X!O0 z>4mP0RwO3!(i;9$fE`LZy>TdBv>7G({b>Hxn=XU(65^`^g5M%mZGK*;dV;6|TGl7} zLjSQeP<pLsfEQ9cF zgGW_fmOw)rFDJE_xx})U`5zWd0UM0eC_7{kD|8OcNReEe2Y_dTA!z%skdTfkL2o8^8iT@?3)z4uBuhr?q1Vyi)W#my_ zz`*N{DmMF^0zCfQwOl}GMNnNOU{0Gd&xpm&{}9ws_Tp;&P7{*NM2zx0Ff`)Y#}`VL zWHM8(jmsZkIqODQ${bU{0f~voN)3%(>>^+<*`YDW*Q{iZa_6n&<%ZX8u@;GKp$qff zO`T(^%nj#H<3bh4UMbY)6~ZUDGI7K`X)Y2erUQ*YQMW#6-#8y}g9v+c;-yCS2~j^Wqo^eA3Eg)=}ErtYpdOQ7AoZHX&hAYeXArG*WsS+ z@H4WJACIN05{y92V3daoM>{s<9RShNk%Kbc8xk0Y8iE^i9Lxyph)z0pKI6bPmaut- z+P4Vkzz0rs&4=4ODRcO9Wc!;908;f<&dzx3q!VgpBL3WFZ^sHoW+$hXtNBL%reL=XbM;NMSzm2IwYNEJ3tGP#I(VkPTBV~muu z8z3muI&^7$Ag5JF+(@Rbg4}k!U)G#bqav$d&l8EF3}a&AabQ7V7>S%$@+jOja=E zJNK_**zXCV>-hRrs%Fa@ajfy==#zv>jr&z2mYSt3zRo#ixa`?ykF(K|(?BQ-Ap(`x zgk4+dasFGA(vKsyrMtBDFhI!hXb;!?%LO%zbE!YvU~0JtQ}l}rJwjsC=+aE!r%A#z z03zjnk)KW}hFv7M*1FRjb|1#sVjL<$9b12}Tyx&rx+J6#-ckE=ySQgU@R`i9NSI=u`FrbMXwh z{E}3;HJO+1Tq^goEJ8BfKRa^w6UUY2m~=_Lg9-L@=-!Y}EWZrazTdJXKlrK#mwSz% zRT-sJc!MY)1{q3~?Kv6crB`G&H$0L!cSk8HJXD}P z#eFdrY?CS&otN-ZI)FqzGWK+lx!RkRS(|E*#F#)2rAxB=3MaKn#W80`8{SeP*#2{E z8x}#+=-7E9KHAGy%VnmfZ}p+rI$qjAG3?>>a|dL;eaPh2-Ib_@ZPe7Z{r&#^%QqKy z@OVX+1x(i21A0LmAm*3Q`yOsQesask0$^I=vHsRsnq!#Ul$rIOrtHH#c5hyJgdofD zfbKl#!Dia(l{-qvFIhN$J2(-@NzoKVUA$>%NGd91fc_eLe>>tV$?RQd(xUrlEcg2- z1|vbdpN*ZUKZwBg*k>((>ioX!8V7=$3rt1_?YQ~5j$92OWutLZNaMT?-Mf&DP^PW_ z+3TW^_MSTU>k>mL37lPseRtBQPPPdzgpNds~tz6x$gS1ZMPPlhgyl}0jK<-(uOpj1fNgTB=bt!Pq#Sb-Wu?T%xwqG5* z)amCWH@!Tkp9K+iGGiI9smn&Ch&rkgl*%jXD&1Y#v79UQWQz|zBa^8=5W|}n)p>q= zSC{!~;rBuIni0L_(T+XFTy!(qoe0)I8f~Iav!$c2`&noLUJi?5W<|wSzT44t*ZDcM zscp)4(lI8Xv7sTJQi50xH-nAXLqOxIK)_@U7OlkhDrC&=xC5157Z?}u%|TU1-2sBU z=DoxuwQoi|-yY_F{;2wpL}$xhi+w>qXtxl;cP5kKja|_iy()kH!|A-}j1< zDU_&&UX@x8P+F!OLn9-S+wwTDnS!xrTTPmJDCvU-EuWu2k6zh;QdU2PS}Z(SN(N6` z?u`yzn5pkctpW+{E4=Y4?81|p+-Kc0^#l9}$^_NXvk()yRE)hyry}rNgtwL3$i;)O z^T5MpB(2hLHt_8)i7wM4znE<+?&1!=N44N-+-XMDT-6g;%b`|LhhL1;^Wp{&5?Mw) ztbm5&J*DC#Al{{ zFq#4&TDi|%eDs9QP)#x)S)HJXHIm< z*@m}t9U@t+r_odeRx(mS!px<%kde$pr0_mlxXa4Q>cco1GYm*-M+Y+PYLg&?M#G_i zR5-*WR@hw%F#CxyC!xec)>+^wNt{MxW9f&2_<5F4$4x3KJKC$Txdhyu^WTa6wTn`v;wNqqj!*GUZS==qf?CI;%*Xyp5 zxe8P~;v^xMbB(%qX)BXESH!Yy=vQg2qH&vnNn;?VI~}VjMxj&zpH$tKUVCZ{@S$%2 zwjy@l=0C0Fwb9^8K+>N7ylMaJ1_Ix&HrcXLlWsMW#!BgR@7b<^6I0qBINhMScJo-- zR-gj$&Z-{}&Uh(6d|J8NiuKVkMtzyD&~IGblA>tXtPSsMNulC}3fcl@mTFLv(4L8S zL-rx&)PgE!a8msm!fs~EVz4Avb)nkXnsCUib;hl zQ!QhIqDOCGG5eNYAzQd z9Gb)9E|y{!qCQILrecf_uJo5`6qDx+Ud9#eNv=-NyaTwEIN$&^&-(diw)IMF`7c)M zJLo&YAtm(T*A1UOx)elOqs=bX(`HBDgf?J;vdqa!40ZxK5ZkL!RHG>?+Zhcs&rk}r zFhflVVj&1vy-p}lL3+GGR0-|dad8F%QJ0mCQt5uEwd3-*rFHj~R`k}bVe%kuG~+!l zQiY)Or6?Q*?~&?PN_ajyH727h|6u&yqt1PjLH27nc}_i;h^6 z5rs)$UZ{#9vZyIaQ*B}B>p<#`1;YByf6IwUt+wA3BwMPSN(~V_plg(_j^#aaXz==Z zeR^B=Ob=OZ9j_=DUl6YR?0`3T4P*-jkX|v&;=*^gR_gZDx`T?o%bthFPQY6b)8LW@ zyYM(j9Xt3cy>2lOGpvo0pKq(}5rP=Dg=VSDlmZF~2QZ*wnCKpgXgV&P%!19fD4Z>M z|LzyLXPM$}#N{S6r|Xrv;TG?1c^D*t#k}^ye$^++oWHt;@*49Ylxc&VbbTZD<3z-m zdPGc0!K&UgBJ~A|W|)Lp19=TZt0ao5+y$~oEbBsZN${*bFtT|*b`VqX=c&W_wK4Nc za!o4qFHIdzS`4if>SS)jmG?1>!E*{<2VEPyZB0W|(vBe%zFtCZ0?XYfWSx@JQJ0_C z#S`w@G>_oq3O68(m-4b}dhAT1?ZA~Z9WuRDvc`6JIs82)RSJI5aQqw;skRx&hFuKp zC&5byWhm0be6VLKIaD~%*yhMtQ~M1Kv4ia)GvrU|E{5ONjYmp?1N9uC+*`bN(V9`k za;RhUYqV+>NafxHXq%5BiaXuA!PR2>x?m7;$*8*>*6wfo?4p#%^>Mwdljwnb*7ewE z$E#s&h8(`Abyq~~IzZ<;AkELC3suH z${(!Py)%8!v zfj7e~;j<}reuWaGeCzfazC1@Oq z$eM_v2Pzl_?OJ{}EbSFzDZ0Va{mq95zZUFhey*iSQ@$YW_>3&A&3ktY>3m$f!9KAV zweRRXn;aINyWd1Pz0#xHtK%hEP_X5iMZT!HS)1CJ3Zd;Az}LMksX{bR;n0OhN>T;I zojPyiF_Xxh>WWH$Jt_r36;w>7U zA^}gEn zPjxSv>O0zAn}|0#xmI(})GaAfsu!Wh0g8h#;}F<|oF-B}zT)3AijLXA`@G{0OtY61nk!8APW6Pb z9Y&+6U018PS566+*li%p1p0s&_QBG2gQqFEns-=eMB1zld!LxCZJx!GFqI?_moy$8 z){vk-E*0q*4Mwj_>@JKR@AR!agbKdaaP_J(<^*ZV3viBQ33AHzo@7cf*~_$&-9}Hq6d=+{!uMK&j6}1YyJG*;AWHvDoWQk_jRlEfD`vBxV(dyjYUW90~{R;|&qCPIgiOXHSMpfea;G#!M;LY1}XgoIGMB zbyIo7o?8T%zXlS+y{$~*@?VJ_feN68D2@6EpSirdOxQ1oMb}4^ci72U0BmLwGJgDX zy9m6O81A)gk1*<$1#Bw;QFqc5QyXdD4FT6CpbVljF)K1|99Nd^!VA<@bN7u%73CUOTO zMKKhMUN&~iw+vM;n;r@HxpjFZxD@HZ6(&7RCj`?9Ciy{0@Qz{a2W4*Rw53vlurh0Y zkK&Q4T@5vQ(rm+*ayuZQ8{bdBL2{GKK<$t^j0Op}hD4)96a-!Wt|{lN(-hm^{wb{e z`XIa0C9^}B~`FJUfvtkgjM&)mg z=I<`G8@4zCIsvQ8>ZlnejC{y*WdZ?AZB|sa&Iks8^&gg=vQc~eTnsr&&Z@!vghvI3 z6^ibk3^Za?R6GapYE3vq5eTC-<%M3ut8HqDmiI|gbS{3y`!u>BT^j+YaMEdYmRLSp zI4>Kf9jqaw6^Uyb@)gqPenLF|HxW)0wzZ~8=wZ;DpGSsSZK$QRKdl5-aFB8R7Rpv= z*2|)2#pM0?pd-#N!e>*9ps!FuV$3Fxv{Jts-9S262Dh#+@C(U}pmTg}K%IT2WnQuF z5fts}=hXCk_q?He@r&!AkS5RAB?awfg=k zFQ;@*>xdT6gUnrDj;f^Cm~bMj^UNeuY=7*idrg_BRV2k45hu%8RFK7vH$+BecU`?FHnl6+xp@-JTME{4d91h8(Va?JBYVHd?v7A*4w-rQd* zm5vg~Mtz}VpB>-?OG12yJHpJORu=yaAq`js#}uY`S;8DW$w5mBF*i02?ZN75(xPX# z4pF9Jff~*8D0KImyx3-^5i6ZMy{m0+nBOV*?y`)}3rqEJ(Yu^fyiPSw}GLsrurCeXu?NJ3IZX5-gIbGQ9_kIQ|evWcgSlWGImRe zmlnv4eyW^HDZb|>w&bRP8Lyj^{my@81f+t~Zl(wlk%2OJ3Rq@P;+H#Nz6PFSc?`sa+5%BovTK zyeTQ@m==%@;pNTek3pDP!Mlg2jgO%~3;>7t%K3wZhEK;7n@a3l?#Xgw3X_?oP>4qv zh(#4WXfgH%W~W1^m7X|MUu!uGEP>ILSi^9~JAp@#YhsCmT*|0B*5ph)B?TA)7DLk^ zCJP}!m4j#ilk=*u68I~SW_OEkG$T6a>_j)W&qmU~&1qQ-8j0 ze-nw*04&3+eB2t}o?O3DFOBN5XeIQbx+^vL8cdbL?>Kt>dT@z*oifx(0m=Ij}crAOW`%Q6*kzC8HhT{ zgfRM`99%g)tE!4@{@_`R=nN@eOA-g95O=A25D;j;PB>=={%+J1yaO2MCxS6k(q_Uc zH}!C3=^s2+9+L8#x?efF&kXdm>KILqC`4#W5|AuYjY>Ub?hA(cx;!^dNKYbns3pZyge>-EAe!ETrcq}%&`$cL0U+RtU2%tTHQmfkw zVluOO3qsKY&W9~JP|rbMb@}M)^3Z2r=4#jgI4)4Lo{8V9BtczXOa><~)W2v6VX?in z#ywP!2hGHz!FyfUz>XE)Qc+YQ1?>Hn5VMfw<{V10eYzBA^+HhD1Hhl#l!;sl@b&7; zG*R@rA9U-PM9k%O&C|o7Vk48mbE9mlJWh?d{PEXG?PlGV>%wTN9vyTKK@;kC&%+eBODVNs=mR zp0NxW95h_%n5B=-+trGIwSv(?Huc;)mHE)^!pd1Xs)z#L3vVgRzpe~zNY+|(EDX|J z&Z^fH)DaPJ$#7*|KU}p(Z*vNO?_L=+`Q;Su4}>ja9jrU zJm8~hyb^B~1%ZL#$^yQ}D-!cvvA#jkrO@<-)Fc2G$eZ`EL9>XRD~gMg0{-79Y?#{{Jf?YtPywq9OUk&R`HQ3JxeFN`w9s zNdA5=azJcQkMy(Sp1YID$t7Pqj*oG{t+X(Vb<8o96vq>JLaU~lE()%U>U5DFlYbI<4Mcwb*PYnU6Hch*hPWE z!{)}?Y+w+Ky)&I`)y_U;B?m1sv?Cy4NRqeHc+z~shdMpl(vZT&p?_Dc_w}C8RWTkO zxodH?V=4P0&crhpM9WhdC0K>=9#2jkz0%rQ^4byJsB3FO8&_*;8oOE`-15nf=EPO% z;+v{#=9o%a8vB zbmbA!LLvve!T}fqK$DBo2li>!Kh@ADPxV&kOnc)IrJIF~y5XUmlb$@6n?+m}>^hq_})*WVrYWi6=n`^k)kB2143WT_OPqK@D{NiqqnD``I<_s^!-4>`W zU}-b%MvSR5z2%p1(#;Qui9-eFB{>$*2ORa6wj0;ou)qB4~xARt1B6`Ue6 z5$PogLXglyPeOE}(usG68_@N7~>hwbKk!kA;?)Md<7pI2zmo<=TFVnx#bX+A5Si*()aKe6PB2s*>pF91*5o%#XRa*Cca4|H^;BzzpVke zynWb3x*CO|=8z6P#rmYq1CtL!OS$tPaaNk(`SK=fZ?GN zM#ruNwyophOidQX@!C{321+3QeLhfJl|=H9!VCBs!U^$lcL{_-jyaCUXKs|`D8BUr zR7;ebc9ghl3W$i5&bbewZu*_KB(V_f`WYTZer&Mi0|YG5VfRS{&kOAZCcF+%(oM`v zqcWKy$pXWG6Wnv^MkfmF8zZn;ySFC%){m+rn_a;C2P0ZpZ}qPgT55O3+O}FyvboFN zCBUVRVuKNXP~SJotcoMgrRN)Ti=au<3xRPRmnB|M5C|6^SN%<1&WY3w8}2$G7tEi< z(yI#|pom=mCw$KbQ@4`QYp6;I;xcZ3OfdAbWiIc*zgV9GtAR zQb|AW0GiBb39mH(BNzyU_7#6u+Z>n{p0H|;HAAC8(2E$A)xa4RY>5rRj0=XGA_yXgE^{kWiSC!@6B(8HKUXr8PN=s*?q!J4_;=?$T$_&GzsH38Um4ge+q z%(R@NvC`!Vc$`)D=mad%ET+p_@y{i1VqfOB>z9QIs@LH7wZW#oF)bqsnmPLv0{4qz zq|BoR`*Ru+3hnyrqDcHc7;bcFFyAW3T0Sbt2I`#8m#fQ9p9r8>H0WBg>G2L&G4ytRUc)JV|!spKY2jRc@V96(SkRvEV^7uJ(C6S}c6%2S6_ zq?!^q^(zw`&W48cS658LBo_^yS#-;%j?GQV2+J#m=Kgm@p=$bLn!+6fibn1|_ilUF z_w^@#7tjV2+Itwj`)cwXf-Y4YO={EAqXlC&f&tHnEGG4<$*X*1HFrd$*o_@dvH0jg zT+qD8@Yx;v8|t#EHJ8+^B`&5=QpU-;a^qV}Ow8ed{G!45GK)#`!V3@d2i z&pJ0r(L!;&17?TtqV^f8l$m^gtuhSf2U_?e`hJANEmAKLlv3L@UsKsa;pES$Egg6yzk%t;x(j_5OzYoZ(C+@_R1#+mbZm@)2iK`F=eVT1v4 z(zLR`$tLhRagX+YDC{`BNjX$!@T^I1)knnI_3Bn?YgaC(!ELR)>es|82#Kz8 zb}aQq;irH62Md6N_(DqI*iBw(Q;mAQp zu9-L>6}U0ZYH%wpu`YEd@;FV9KG*WOwCiJNQZ17Fus2E#AC&V;$=uhFAw`F zDk_!?xmM+N#JrZ={Tp;s=QV$&dP9gN@8;h|7OxYJ9hyjOt3y?edRz9J&kK#MoAT<` ztg-}8XBp@RYl#1UDCuJlebWZ|p*^))x|Cl)-Wk+D{ope2vQdBGXJ7)`*I%nE(hfAL zG#b}u>18doAp}9hmh8@5W4^Hhn;-tKQ~@HOM5pzwin4#VNvc7;>s-j^nwJ zN9^%VL=*$cmfl@sVL5Y=X+R--vMuD5m}H|e-J38Y8eS0m;rZ=bQE%+zH>b>kRU6Cc zZk>KP9+Un6s7<4Zik9b^4!E0KuBaah*1+m4`5D+|s-y%PsP(MLO+lmA1j){)o%a5D zB4^G2H0zjBVUzu#s|e9e3GJD$eQqv_L;a_*0j$UJ*Jk>9+~fiJAwZ0LZXU$pG{KMP zY85Q9KLZw0p8ssaBv`_{P`8rDvup&HU3y@E(GON-Oi2q=FRT_E5n)0@{=22Xf#+_V z+A^Ps3ul9(-4x$#zmBvH7e$6TbZ9gr<~Pepp^^0aDLIOPAjhF%7tm3htZYcJ-lwWB z!)dy3LVB9^dWFUHDeK+A5>EYvR?yv$z)e5R%|Vhd^e_aq;a-jE{I@daL(x0rt@`2=|72CprJc z5qK1#BRlv1J(c1$!(SFoOVrH{U-6vl_(iUvkJGBUC>lJME{xE@2t;v?19CJ50lcV5 zro{E(Tu@73PQWlu6|LksYl$f=s?ZbQ1LfE4Ge5R$6?X!i#p=B_ws}7aeSVll{liCz zzb=y?SGxHly07=#CsrNW>0VD+Imb^K&Dh}XclCO20QOI_&dc|uc&_LTJw(T!oIXFH zKb2S)SE1RpZoGTU^j%85P0NW!lbuYwF1Faxttyqc0X9+v(vVe8I0equft=zL?t;(%Fx_j04_p^qJfEf&I+j7!qoV-BZ-B;hf`5SQm>G%A$`q7>?*+qZb z6fznE_N)rwE-I;SIU%@~b^I7L3GUQTI6(sq!03D^TDtR47n`MV;i>^k5JQ3&pH1t{ z#}a`{4Ts&n!e4Z0b*{{ulKs8s&?iCL`qI53amx=P&`Iv0AH=veR(^Sd-JBHOu=r>{ zGkdUp5SNh0$mPL~!+QtqT;$h}+dC-W5lh#i2qCFrJep&9*vQn)}riO zo;wUDxlo7PLX7^F83vW8 zEbN&(Q>%40xG96y@a&n#?(hWLL9zk`@x@@)BpR& zM}@oiEG(%Q%00mR+EPq45{P>3PkhmJ;$V2+@+8zl8m-%ztCSERZIu|=ef5fVTDqv$?F6y5iYvgLYU2h)rX`j zFjl_?;eIw9EBy*E zM6%AOV3^NZfv>wx14TgG&FBHZvQU-323A3`(#5!oT_6k; zko5O^h18W4rUU^o7=p~*?w@}=DIWcscFB&zej6JZJi@y3{pQNSlzwSC`{*-ie#($q z^*DT)?!e}-01%*RNFGctBGTiyOdrB!D*6Ap<5^beX_~5^^?VYh`G7)5_Aq!WG18)+JYM zmuN)4GPi=%6|g!DqkBvXI5_wwvj=v80Qeu|OZsR`*$GSLno4=_vqV)@zxQ^HS&6DR zFjvKv)o)Z+BROIw&5VM<0Ye~Axi!FGNTjYwF8)vS-#{CGrl*hNA5!?L3a}QZ z{Vl6))Z6#8QUN2I$tlSfFpCzs6+uAe?5IECh<4pNvj{!CpqOaZdDCj^&*h=I6ZPge z@O(i!@P0q@wOEYJsrOBHgx9HpH$;#u)mB~(n7aVeM>Cc9jpY@88|1W?n}3ogFt&xY z8>a7te$bQtGi_~+s_2F#L~Tgh%Pf9EH720;Ee@EoJMXJ5i4j2I)i#lXnW@ETEFLwzRcX?hR$`<}(!xzQhC?3N?wLG^68o_>*7KPvsHfZ)Nbx1+^c+K|)I^6%U- zO(%!iHIZFPDCOrB^6Qb+Q=_az+(yTTItrJ&^%swaS*|vw_p*92DQ?L1>Y~WvQyIe9 zG-}{dIysTTRCO6=PLJ!2@s1bU22Kl&0jS-+N%5MlBBuN8cF~cG9Oyj&O!(DSLCY4< zuTCI9Ak|}*6<91v2iX3pL%7j-fJ#{4kXI~*L-wTSk*!(F{!%leO)K5i>xEb!QyxNJ z5WfdGGlWy+NzmxL)dC-z|GAhlY8!Tct-YksJ`VoPW9c~QWz{bB)S;VF$cPgQ{Bvel z3$3L=ky-+8uqmf0;fj;8dS^l=cE51n!xk zE3&n+J)_m#R|5(YsJ!#zf*QNMO_&g`)oVZYzu(b*@`R3^*t^*^X+%@3g6GNOFD3nf z)ZR7Lt)k*G)Jb!>oV)00_c<20aU6kl5)$3W(4Eeo;?D^vPM^1R-j#^!ewF_s?v|H# zf%R2nF=IEgcd%?f&Q(@O=p5hbXbP1n`N7Nlpr@0D|0>yT>6B zfQagn;`r{2xgE6H+Z-XJk}m805yd2+4|njHWmDV}VfcsWUB98Gn5CrQl>ZY|Z7yFh z@zu|=TIzNejRaZoI`A)XR!&CNY;oIEXwRX#=dZ-G0F!kIZMe&UDr)1_*$GA$ceJ~} zhl*n!9wD&i6N(V_F9edd7M%Y`62?5VqCIS%|31x{!}2Y-oBdVAxl5?uEiF=<3eOE| zdrrAmtmF+1t!B)}3ZNJd(6tpW#x;FbIw*$RSzQR3$WE-zY!oSpt6H^By_D>leNK2Q z28Y3L!_=$Ga_`gSo-f=Dt&St-qnGPwB-HfDp^53kiMZ;4Q;zU7U~Y+l8eg>l>TRlE z@M})%ZNXD6^1*}z8_Z11u4l!(=s!tpb7pNw{`9Fc`3vv9N}0H zKzae>e|li#7_1}Y&14dR%c+XSmn|AaOG$7yE-e%^(lrK#-kJLuwV1xmsI434lm*vO z?NR1ARqyS}_7v_3T$d2Nwf-oi`+WtBBJ~@>Y45icGd#T|g`bdja;HncA3`ckWr_n8 zYvA@bZ{YAt2~9Q>O4&}2D~~o^-1{@_WQ23&!o8QN*q>UR`?jsvFNmd*n!Em$^;i75 zCiU&-KqTOrYL0FdEcv{#^2dCDP>pDyv;ZZ8LANW&%*^!J5aDN>((?Np<5WS^uNoHX zOm;&cedFFD(sJK5Ck}85Ukt;)-}g!|(Bj`pOaOl?raRF#rDcX@H|=Pvlj-DaI$Ce; zE0z54!Y!QEirJ8{Eq#!4apPfVg<+mHf547b^Zb{a6tx7PG*5P0@ea<+%&Jm$f*B;c z#)**#al?U@i3x*!CiAjW*|K`)_HR8xc3V=uh6?W3n3#S!zG=zSx=f-yO#Z|!$G2U2X!|)b89UMA>NU8B$X2-AG+FHf1A5lE4hEgmiJ*- z?QV_`pb~5QGIQ>TU6QxCrr^gjjxn4ie~|5}5;;36s_BORglf&)FTE zp#2^JUqCu+YO$noei3EJ2$m!TFNQ&mumGhV-JCpO!0nd%@eXx*c@rq#H`%b1sQ;p7 z|Id%yr4MiPWM;CG=_zo%EFri0n}Ja()&@JSOwec*KE-q9=i+gbhqjKb4;I3P9-!lq zn9wh#x@|6VnJTp5No+Ct++Jurc`!w*dN`2RkHO0;DsC5##gH{}e=&|Xh;u0!4S-h^ zX;B=~Nd$y0|1UJna!I~{>WQ46d+F0X;@gih-FGdH%sBG*scEy5epT9*8Pj|C6{L%` zI6C6+3K6$jbZay`Je)Q>C`2oOaGa41;+1LIdx+;xTjy29!~nYjg`dolfpQbnz~JuK zg<$v0Tk~N9TeAJg`<5!e0ns!%0=Ov5z~XslKZM?n3(v&cM+(Ohs&xnzoSwxmBs&E> zvYl(u-qpf%oH~pZHK1q42DCDe;^MjJypW$?k*AUl+*BGf9?nIdl)p z?XCalVITFurJ=dOtT6bM52Mu)XrRKC(*+&0%6b}?8Gpqa`?j5sPNO%G5ue?vv?=61 zjP@NXWqhB7)1o)6ku1PVKqQ3Dk%FKIR}5khMndaut}=DUPXWV`f%Ozsw8<7f zr#(}j-x=Tv@n7AjFg3lR^W)U;#=i?Q%awjsx=i1ia^}|1S;}8?voTc{t$_m91jS3l z$RIb(&>y(=B_+`?QV|}vne4NCZfHnf(19F}z_Xy*MrRi0TwKX!#b^D|lBIUhHs8>ZDD>O%^>OZQst!1nC$yB+JkInhle z)6p{`Z}AkW#q;T789yN%vCru_hz4F|e9dLB>4n@%?c1Nc+yLW1yw z>srC0XcMtu%Caym2n2GF1N0xj#l@&CaB;jOP+#zQF|Pwg(Wv5R0D^I=cGU^L%eJ96 z^V^aH3(q4^^UrB^S_|5-eg{CV&9XZJzQ;`He%`3ak%0{?sF1)v;DZzjBe_bwo z@IFt0Fx^HSnnqB`Ee*Y_f-R<|3ng!wbqvaERZ}nguD$vkTO_2&{m9~`gPwAMQHs!- zH=WIPSu>``Uw;k0c$~V)bmopgx$86}alw*2@0gi;zh9iVAWd9*PG?Eex2Aol*3i)z zpG8LlE5AzG$jbL(U)NOP9%6d^B=Vxql^ZAJtzDZ8q@I>gR>IUS-kxuDEW0QzmhT&J zgCJbdYQDg3)|GO_a7K|stL+KzR=<}Cxp?g8Wvf~cfF-}qO94TYB=FSlZl{ok>hQQOfBk-XCf26s3}{4YohrFF zl%G~NT+ZRDs$N2ARSgP3A#}TxZdBzm;_eBd2~RVTh?{HQl2urOK6%xoU;ab(-?@#c zoqS13KzB9|iyL--*rVD6KXjA72#nX|gDvXYBFU`uSakeQ8-H=UE@wPBq!t!P!Ep;4 zo7Kg3Y-~#=Pu)2Czo0z-y)NEZz#+enx5hBsrul_#>~GLYDeL02nYBaDuz)HoYNUeP z<9K9UF?4!<{w~@OnZ=vMpfDBG747O|4PZEDraj1_5qoUd%!;8!=Csemxcne~ z`5L{~D@#*akrmG!OxQLrkWDrtrbOGCUp7C!bxU6k8KDgqx3G+M6M>g6aSMaZg8+Kc zHgy-^2G2_of`CF&1Ti^wIxuu7Y zrWJDEa;LS+`WzOijr(6SoP3p|tO6qX$M4-J5mQPbq>&O%c4HgA0q2KZN@&8~Hl>-R zq2R7E9zZ*_>pA0w1Pg*RJmzatIk@9Lf)=jry{8Rmqhz*D&FuNl8vDQKqq|q_wUWym zgYawaapw$VWh!lw^KzGfw@vCKmAGiW(RXd^s~?UtO(SouyHQ45tEnr%POn}EXEkN^x<>JEaw9YLWO#LGnj!h~1Ho8WHI_7WwsigNOAH8$k4Fp*nS)J3$z0zenhO4KJfzQtoe)=I0902j ze_xc1CgyROHPCQIRHO~HLH#YcjICzznrfoH0VzkQMqE)bcJJobH1pTZac#bI3O6c2 zDwBGKsH~01i#6$x+iC2T<7g4D!l}FI7ddVu0GTpCj1-Y{DSJIPJxiW!#rx1QXCeGaxGe&5_L*`&ak0 zddk*BP&Z8`5E(#g>n7=TQwQv_caH&h4wt5s5tqv&ZI^Iuk6(M_wJ3=`!v!pc0`Ht- zN?sft8tOp$78_NsC(`oy4f(G4-or-uQDjeaDAK!VKx%^lbyF;(EfrrW%+{w5jEISe zlk;eWG<68Si`4=3FyJ1^FD=YX((E?T8vrMyxMr`}GkRO|SF;EfAL)av6db!(&37f6 z+`idKwsa|6^LM}Xaix36$;z?9x1&f%T#UTh>ZutxA59ao;q6ZSH5o1>J4803l1k8m z4nwsStYX~e9L|}t5lJ!olLkl!j+M=|GMy@xR|h{VAwIYhBsz=M&j~K&SJiDBbE^So zH~?Q1{3Y##MZ<98vh5)^_|y?Mz`W*p$!0Hiqq*c2p``$`_4S{-Yz)v+yc8%1zizh# zs5B&X0v?DgaNC}^z=AN}9c3fx>;MZlIcQe##q0Q+$bBRMNpu7Ue$^@oaMB4ue+|oH z?_iMj2BLP#U<)5teIuv9HA$;yM^#o;m&;gzQ{Tf^JQU}T)M;xY{Y>~r-tmLaXxgGV z{Aru~$8xH^{fH)MnfuyBMSl9#JLZ1|rML|~IWoY*5a8>J3 zD@7OS{Cv0ga+N~O3O#f3gI&`5f4lfw!>ihQ3Ao&4c+Ws&!MVn!_qtt8O>gTDt0qXK z9v8Y1vEQ&fWdHvCcVUAz1KMcfv~LxCkmRTGmO9<3(7epG${z;M|DDF2{uuGC@w%1; zevV&RMe>`2HRvio}y7={(K(ygg?LOcR#7W`sp8iJM`A?O3&H$zEcIIU1>a36AosD#;L`U zRTlKb^)NF%W0DbB`TXx7BLk#{yzR7+B8%;%HWEqTT#Dnr=eHB`t>!%(`euW=E*OQY zBHsh#^cFKCY$-GOvgvS+jw;UB^FruV$)mqTa6B#EZ%UpxRKFmbzt1FZe&3!$mzYc0 zQ9$(eLE8c*_G4hrqv`{3TKA;=uco7>GOL~5abIKS6n7xzU*}g}&blrYsH5~&(fW2u zz`Mz1@97e+k*r>-+DaMbC)j_@Fc2cQF}!sU{mZ|U7rcQ!RO+FxN?e_^utJ-zt@F=p zEQvky_42;GUYU~INFM&6n#a8Cn|fS)bKTgZ`&8ScDE5k$38h?3b-ZoDSkdqP0XM5? z+u7ZQ3mLa_6X?z*iAvuy8eycXicwd_t8^g7SOdlp`@mD zIC|1C76$8eQswNS;@%F*GEa7jY|}c5@(-tew2ayIV_nXRu%H$-OPhii^^W@T@wdjA znSddy7q{VwnFavb{`yilrwmN_k}+0mUgdE9n+?x{?6z`fayVGK*D!~P$Oil=9_R1* zTNwDm*y&*;<*GZ~(^szS*(EG8!-Vn$gk!d?y;=3u#gj7FC)c0fRCaF^@+G#~fa(P3@wTT`_L$aC~TC2)|!{ZM{D@sB87U}aAfb=$oC>a~b_IS$-tDo z;1%`DFD)!rUqC+MHdq>Pv`ms5Zok39PKwI|Fx+EZwn!maAOO4PN zymK%HwpsYo;n4E(^AZjNAPe@l*f#QO(U~HI775d)t_=OHO^`_}$@XWlE+} z|4mU#9Z?;6;Lym<Ef(-#`recv0LQu5B21opKWMf7C>jPo|2>+e{d zBqJ}c%~I-p^bYzrW_zN zxuNKbCH0T>L_)BEv$)APNTqg^7T<%xBB9P)&B|8*|aD! zqME}aZ^MX(v@a{4h^8@SmwrF)D7*e(!&>&%*aZQ%PtH}no#M4C(@ZU1b7LYv$KAw_ zag6dY(kdO3(|Y65L&bE-*AKjMZAdEXxY)dDwqeNE5JT0EEw>9T_@3qx9vezDxI$M^ z-@e>$gQKS4r(T12MZ%{K#;1B=N#&bv0T8?ur^b|TW$IioYUFUU?2xF=`@D+IzYYS?ZQkC@XD$u z%({c}4?W8_Co-LHo%uO#zRUnv+GSfOIeUKE_W#*qMO;ng?q6!ddo|%S6BP^g7q$KE z*?Ih@5xS;1LtoB|9h8gY3^bbc04dH=$og|QzD_-9DNK_!8>Sw(hG2j6-LIc$eSzGW z!e;ttLg{%&72RPUT6C;9saqkqKvr9ql7?6$suu~jlY7M^EWK=!JhrubTjzqCFw}wl-^)Aas&VnSGt1R{#Gt!#1ZVu7jq0`MOQ$8~9 z-ZeocEKJlN!M15!HGGm`q|?3}>teCA`Toz9=P!lslj`l+jGb2+{COvna}qw7@74l9 z!l^I-_LhC6iCY@g%#Q8%6 zuhzItlg|yc>l{>?3F~4ThlAHlQ#$ibtja(&77Nwk_<^NM^X?J~t*15qQb_3j>Xpe% zL0uJ$t4$A&&bZ2KYs&Cz*!wH>50{1``0{CB2SFtzTaD}nrFmnHd@-M$81E>%jxDgENUNod2> zG=a_Zs@#omH=f=@r`5Z^tLW-D zDCPL|&}hhVRO!q-e4=ms`2hE|^n-WgD2oc2mzg1zy0%&*1#p3L>vkzVUmyiKJ!NDG?{L`Y+`Di6Jlbt6?H_U zv~|>*n~ZVl*!#_}-rMOu=`6+^VS)LwMZO<)Kj&A{Fe&$=;ti*@bVZHB4lB}1O|5L^ zoAl~i^{+|EA;$77Z_s8r;(j>09U$LB+4HFThf7x&KyjdcLi>rQ*$rdH!b+fU|^qtAUJ z+}hTCHP735H4qq!>5y|KX!_fM)u5BM`Y_qu!*A z$WXv8sRKhFR;r)?##b zEYmZ6X77CT!qfPoGmu?l66A;4b5jj2Od8||KciE z%{tER!2v~-DhxEKHIL;NUyGCGX0;GI-*wMfY{cZ7^|g1+DLdg%sQFa>+(p!4HpD+G z7tLNKB^^QC&uefaVa>Z9gZD z&pfTBxYfV&s;0(jx*(n@F;|ztuWtnmooU3YBD{FnSVLY+9kJ7VDPPO8{$*0$rtqB| z8yaHIWcK}d<Ax9m*2<3E z(UMun&7i1=Q3BfpC+A3k*CR$NwM?u6pUUC-Bht}JXeBqsC}S-=F9aN?CAVFIvB>Lx z9sRI=3x>ShRy+|Vs~C19W%Ez75)bco9OQL=Q2IdSt8bOE(BlS%a690jPtNo@g>^X@ z*RYbZ_HK5u-J9HQ`px%uft38XbrCTD%=~5bPT=**Bqnv7H(wjf;t-r;S6lJM`D zy0;kf{{#pC?@mh^U;#h2S;|*QM^YoV>nlmY$9aaq;z!wYrcsj*{=6w1X9s1suic#T zx@vOioo1mndy(3aV_z;>=c+xHEprupSz3Z&pxD=3Ez{qh!+EU1ejzm1dChRkE z=C-cNbjl_ui&WI}j;aOS1?!BPm}}AOYs3QU&Wx8m^bzSLm%=8h>oh&)!tUv!)+{OE zyMy#TYL^;hy`bt6Ot7P)KF*^>7fo_4PH`2{Ue2S$(_#ve_pUqniaFa`fBHakynG&S zlBtVCo$bpnQ?&^sBf=~045wUwSpe+L#%;+`*#xIm`S%#7^Lfo~e!4q~vLq5lCbBfn z{Lw&4(7^ZEi+Y(;v#%bv2x;tU-w(pi7h-9@f~}$4sTgkdt4^iDbT8s!+rw~GSd$l! zdC>!18%!@@^(b1u95I#DutygJ#E{O=+y_hWQ=KACpI747JHKHOZuFkJkCql}Z|yy# zx{6pVvt#)ZgHR{_V?DWwS?D5t$ z2118F*9&co=S~N-57JxQ=E{w;Nv>)y@|GU}(_uOE5tFSKXB z=xXOX3K5Nzvn0v|uHtd^vQRcN!_?{JA1lQbru8&mk=x*7iEa5D6RoXJlSUt`u+Mqx zA$Kw0mnqhUapw!GZkC%r72oO3DRH{Mc2@fscBk^q$K~@J{j+~Levq;AbJSAcG7c6z zslI7zbU>$&Xu7{#cfTmxx7ycLYjTRJiyu5Wq|?{%=k5!_ZtK%}(?>2`?I<72i}Xt- zMvlLGi>?3NKtl~#f?42)3o*ID$5A7nNB(v%yfh7|fsb=#@!dSDsLM z8UPFP2L7(|Rm_4?Q;*wB2FJ)ylbxFeY8(VI8Fsd0 zTrehXg9g}=?J4U?x(Yrt->XaohjPt?u+E;4U;6Y`pKqzMoik0fjL z+CTg|mBD#hYi8izqksy}YX?`y2Kdtg>uyU~IF>W-}cm+xN? zr?vPmZChnRTcgL|#R(TG^HTlFlfSk(ot_{fY2_Qe^6O8koSaJ;Z~Yh`+|k??iykpA zT}|V7Ld!cib4uMLL&J!vv9`-^zh>e6utJ$a8~NP>cfi4bqrOFd=$BK}C#KS_=EYi3 zffGk;JIW(H)>%h=eQ768C0p8gYE6{mpeLHNSW{ZMzRsiNXT<1bS1daG%Uqvi=UBIl z`m^p5t+X}DHKdSJj|-mU*RIm97 z)RJ>0C=pi6={PW_fRscW*5e&(BiefTG-N_w9aS~6o6pxujz+USK};lhzAZg|reU+M zBP1p5dd_LcxnJrymd&3gIJs+BZ^uVCMQ39N;#G^b4XtyEVNMsI3kTxW8ibU+p8)Uj zsw_80sUZWR%^^jkszWst7hU4Z+6DcC^-TD5jPF>E}+k_Zqy9MDJsylNqNzP_k z=h^7}Ob6{fQZd821atiY9|Y>miJNxj5U2<}8Fb{-k*=ZsFzDt~`M?9nZ;j{0ZdKWx zHOa9Q4;NDm>EwJwsa77gEXj{}87|&bf0n)*XePl*u_eewACH0(TcXP zvsKm!_A5ok#`Xi*j|Odv_Uy>%rkK@fulX>IyW7DQass+d7LNv$K6=}CggCs9F6^tU z#4X(r(Nu|51?eb&+W;RKux5I%rZ=3Rv?D|T;+~mowPc$Vn~X26A5VH&#*$F7^>T<* zfnPM?=CHj|l9nnnXFFm1^Ea0rY;Fin)d0m62)|kGSiW>D9nIX><$C^BU)FVDLg;Ph zTx|_`zzgdYGTBrgan^?s?A*r|lT@~^6ENEFQ1T5TQM z0rW471OoGRkNy7j$M%KD4&d4Y*%f#TTKf;}$^WW*QF3^8aV{!v)4|T@UJy*ye`$-l-2Yyn6^H2Y3^@9=)pS4PzdPQEz-Om#@l9 ze$i75lhGQV$}rW$7xo>mlg?hbf8m#0@ATQr2%}Z&>>fOR^py0?lOL zI?t!alj{sXy^kXc6xK~U+szs}+VK$WrON=NHNRs_LkZQs+cL1X&%VvO8K1)WEOu=s z>q52DxbB^88*S#EwP~Dr;+2U|djrtlVH{W+RJouuoE2h<;mKSe9}(A?Z^3oj>T9w0 z)`*yuc&=%5OkkWn?NxUCu+6^j-X$l1>xSS&+;;wSdj9Vp-64l&fnjk)0P=x*z2}b@_MygwUfOOeTU&(dtsj_9GA6N0akW>(r6Pl{U@=tZRf@)FjT` z@4%|pr_WZ0yO9*6v)|?OO-*##aHw&rMI^tLo$k>3Wz%nm31hFK?-hR@0&!>E z7=@0W?KA(u0)YM{-(kKG<8B*+C%3lcer;WQZ#RD%9k|!2Ij;Mu_2waLhDnNoTX2U*FN{6>5Hte&@Tr_x0hdw&vYl zvrMTK<;#7_3fTdNtqM(F{UxE(G57L~o}2cg-<{>55G8Y?*l&+#bc+h0aa6Q4R%)chs)}Z-HdCb@$?h#2APDvT*k4Q@1Tbza1{K52RV?d7CeO%I>}E z?W##!=Y``7VZZmij}r-U3mx^3R?@Z#H^D=S54yCQmh?BKT(|-Wzyb7zuCF=W$7rEl zj=p`iU;6GF`aqp6h!+EWdJUMn8T9({g?ubk+u^AeyZM)JPA{r~n-+TXJ%pXwH9s3} zU$XUUtR(8;{$lQfTccrJ<1tE@N7v<`RZ3#?inHY_l6oBR`WcrYyHeE?vP-3>ZFt|s zrw1>x9sL8>PoqGCYVY!+@v13R2jxxx1V!J#y)|8>cd7etMeLb1Zp-(X6kqn#0vdm( zNm6B3Kd}a7sg!;zp7Bkd3gHrqUE3Q@@N8Y1C0TG=yYKM03F#H3zrf-KEVU<;I4b=V zW%e{apF{QHpjz!dZRO}k!mNKil6m^|)$JgZjnWqi4Q5eCtZXwHhzbgR7KJjh>vE*E zpg8zkuk%C?F2Q1QQul2^lLeuO^qWJgeNU3+YrIAMgK++QV)q;r7w`?G~Ta^(OS9OtyVwFsY z>Yh3l({gvQ7xH@NvI{V6o_w{SfK}(S=M3qK?ctln0+qea4R^vC*z0YD1Sdd6rM|Xv zqcunA9q6nKGg?aQ;rDO%ci=1v^G%6e8=fKY8e!Ls^bSa`h1kElua@48K&e3K=S|A3 zrvFGxh)B}o0q3Q+L+{5|ow_*_47NsvFW$ zjlJzshW7hSfjC7rtMsEt93PS}K+jK3Owesac`K~DZ)R@|Z`Nho)y^bNd;&LqEI=DQ zlqtt&tM8sQU$zH@fg{a%%d+=nb&~%)aCyLn(4VA_QqVlqpzV)7x#!q%-5FX@Q zJt`xGcoNnE_n)DNJu`?hs2^C~Ynn_jejqRkxw2Ix=f1tlYtLQxy`Qd{w>Pt^{q9Yn zyQum}>P^dVoB=}Tz*JU82o9^!NVI(?4FPJgP<-&NvHwBdo5w@l|NH;i7e!K$WGYv= zN=ULZQ(sZ zoKM#|pYy%W`JDfLw_AVA@Q>c_*YaE*kLSHH8^XK^m*&QIJjZ{-YA<%z1>fDcfkL=$$+a{plBirYo^I_>SrZHyCeO$i`;3e16%)+*-EthNVz@Ev!g;Gh{4HUod;FnE?q87>#rt74 z-VbU8!24yi8Du1D$B+ax8IFBjP^+SnH*|pH`yJODQC<)k_OMpnW+gAP>7wsh&@ZGN z#hMy+?JwS%YhfbwxhHW18A5 zn6lDlu7)u|bF1R?T!-%LZkf<^4Xq&@$rpDuqV0V#@=g>4a%xr08`|ePTPmiHD=Yd= zj+X@CY)FsK18wB4HtSfB0>)r6{FE68VDD&skg1VHEf>y2D?rj%`yLgadVy8XFrRXW z0S5ml+0hjs+MgS`aHYI(dLh7Pw8ak6|G@9azV66Hy${0Tox0Lr_+;bV+*~+XjoB}J zav{j#^Sftqrp{HqI@X>ScF{5i!#pTJ8QUU)$k(O_*zGNGd$<~OeSJ^DTG0l9CkAtj zM}I5Pm<{&rLO}hy2|+QWG_VFly%q6G5O+!JnH1fkAZpHcHXF~&%Z7p}F+%~T1t5gY z3r~aAe>%zo)Hixf>g%GMzZbvV*}SqPfHIcRU{bD==J@kNw(9TWsl6? zN)H}Ubp?_@AN!f2dFj+N4Wf2}n1N_;qa+l~}%TAp5>S6NSwe_UVPm}d2zzq)gv%BFd z(b!U&dUCSK9aw~fRTA->8^9Mrc^!SFHhVfnaC-k(w9X#y8O2ufILy}Wv_m*n7huum z6l1fcTt>1!TOsM66N~S(O*JJ-ElvZ7p%@Y=@#Es*gQP1UrozhI$QWRncaYEWu#Gq{ zNh5Ca0!mIm!HX^Yb4b6m5z;R~-YVSrdrRUGL?r7WZzU_j=7{IF3T2l18;R}%Muk0# z@4Utsh3#TxRjHI~yBu;wAqyeBjx9snE+c+@B#$MiL^5?qCN$I*yi2PSFjc zyre0Gy@!J4ihq5Pvt+lfWOJCxTXsaY@Vt@D2^cYQh1#jxvsvAyyAx}2y;~immR*Ll zActmAUhZRp!{h>e>FF*yg3*YGY=b>DJuny_4q96XV!X=KO5Yctdg>J7zS==rmD3-x zB5475!cZA+k=A*_wIuJ(<>JtTEpBJO(1OJi#d&Bam(Mabis7x&W}BUP@p{Wet&V41 z?jKCk2wy%PnHbNRZX0vzkjjwMLoZ*SU6cac-Zk<_%L#Xl6hGeboq~^UP^Jln)e?pO z1{o+;3Y`(^Jn6p4nf`=cuiGj{X}a)%kmOYlbU|}AJ?bW7-$_!Q8t;Fz5Jk-NqtO#O z?@7mrF9HE(5&NceW+z6y3yR#ITuf`YkSW9HI`ev@B^~eY1jK)Q518E|WK&2WCEpVD zxVV1E{^uz0e^FKAhF$cXi8C2u7iCdzlN0kUpFG(_9k2;W*T zsCi>gN@ma7!B=-~+8I%*-_+PKD?fgZ!v{k&)ZzUF$9pd~CWNH*kKP7hFyDN>uNIwy ze*@E>={GH0*OZ@w9NV744>jkO7lt%6mp3cnm?a-)o*JadH1(%3^_DZ<`=0Q1HMlx4 z3TMzij=8Lh2*X69f@`Ns%BaA1A}`$ZaPU25h&4ZHIo=kX;yhI3@+HDs5ryC2s9lYjYcL1;wuLQ}0xLgO0eGCW?XS`@JO)Ss*4HpwaQ{tN z<{y7GeCgU7Wf5lkx_CED!E~=>h*_>gsRPWAl8c+`O*49qUl?`MSVn0rI^xG|E7%_Mg5QvXPl^xpYT}%Hs{MV>GXC=qBEgW2ZFtlk` zvYdv+6Ggi=a_t9)%hQ&Tw)i|!yS<41S-rEBuxGtFF`b`Uf4ItXgWSwJgVsXH!8oXL z>x6BjJdD|jY^A37Wb0=b{lHwA?2TY6!}e0nGcyZDdeVSAFfQ36;An{C?#`yxp#3}L zuh#;YD|ZVDuch%a3$WJ{)p0}oBt2Q$P`vx+$rZQ9OES~-bx%cZt&L2!7X=qH6jUD8HfJ!yTH-`~pv z&joO!E_$$EW(na+b;f%`Tg|l-2TDJB=)%LhBEv>g78kQ_E}op#(kXq~X!^3fwd7o> zn$5#f=UKFo@7dC^n5^`##bB@mocm=x!b8kYTU92tyJe+rVx@T+vY^TcSV6137-9vO zt9%PiFXx?QeH_bWyzERlG6bIJS3H;4bVJ0FxPqS=@U2@zQeQ9?e^>BWF;+pGfQz|O zT#6pozw{b~pcM~Ex;fo7zwkkSOltoZz>f?;4DmsSthJLF#3O}afpK$jg)gb8>goq} zfY6W54y-@X`g+$e(y`;=d!HJqnkBCHCbYf3wC1(Vd#vS89hGx&f1j7`5%U-ZUVImG zQm-Ps4`EZ#WCbxc7L<cHC?y0 zCkbFay9?(BR_xTW)=lC}C9xgtHOBH@dj5iR+C)g#QKBzeJyEm1@ubHQnqie3=GEA- zIZIHKkQ4>wGZ;6@IPEhE5XM+G)Htky0!U=2>f(%Ci02JV(*~4FrR%$tgvVp%=lrRq zmQ0_qY{+WY_;km7oiY)Y5^<&RUrhyv{eSt=Csq0Y7slx+yz#a-oMtZP9Ec6&45QNe zJTKQqChs@C5K~%o!1poj((kwJuAIjp+8>7!mRu%?13Ry2N+1|G$6AG0xVuRk2o!lR zO{WM7$DH;1G>Z6K%WcA=*F(iuiNcK-f0`&GmRhS)hF(raE_Oynd@geM#^UFu$=r_2 z9Imdq5%JlXWoY7ELk{;*o}RENPIQfgRgTW_QurM!jfge2g-Lr{Lt5mT5?smEvk8V@ zo9*%a{Bm+8htSA24~H6FcFY%n`hSf!-I+2nA5}E4#8DMrL~jukOG+uOTGSDcx6XI} zFm+~YrxHIeQ;2_LR^BBXz=$E8oMb%1TZ!ZD3bf!4icPs?X!fc|dX;?yBQTbG6?OYQ z4U_}xfIa9wVa60sUrGlt)s7U|^Oe9X2Ue$L+M>Hqa*Q7{PQhB!^+4aPPRP-mG|FG}?lxC{Yc%)id~-Ttw#T0XZ#oI$ z;u#b3{;u~|hYGO-sp@k!EDp6fb8xM;N4Du(|Lg3%9f^L)$(on5cUJXBB`)0D4>M(3 zwAYsQ{5~&|Ht#!IpY5@usCkyh}d1s*u0welat(hLig2?jaAEtA=&#?BSL;n1I zq3L4HSEMr5x^6&N3%UNrf&pb5S)5<{)U6cLK)>X$if}dX;iAU3RQrygY`}K@bxSUG z#3Bw6LResAOVwH&)_oilBb?n3BTPy%P_&ce)z-yeb|xD^wtKe`A(gD)^i$H{@$+9z zffADW;Yz!nU)T5Lm=-*TI>L&yP12KEaA`#!E#7B+&G;RhpDne2{I-=^XeegT`NF4l;IY8;nZYtgw8(;Jgx zu(kIzL;gTw_km|hjseH_yEctwj59FCen`oeo2O}I`HEe=;bu8Exs^U{gQ2jR71xpI z^@(WY3IcZ^HOwQqk(T*VM9PEk^soti z&&L<^cuT>yJVu9%{@%PNrT#rg3h5>Q|ck&xJz*Nv@UjXOe1Q5t?ywD^uU z;*|5ZG^O6)Y1+_b>QcVvTe(o*t7 ztd|0>nj6c}=}9@nEMC$fuH_KytYZA)WQYk)U7O8b2fbNSPp$zL*OCQ}{KFZ7J zaa@;9(@;M=#G_E{X8Ue2fa2NVr9*q(Z7xoHI(Og>)!C^&v#av-=0cU`5!UVb(E0WL zOgrAmqzZ;t zIMSQn&iJHSd%lA|(yQp&85>Wvz?Rkev_BA4yt& z$;&qzSGD4_f2mI8>I!NmfD&&_JtS^+Ue4ctUCFM|HZQ&2zEONNI0~yqcgas=PeJi+ z7+&L@aE&-#PMTEX!e>&Jw{hnDX;4j;F1QjgM^f*B;gb%bx?}Lw8QWiA3-8mP7iuXG zc*aW!&oP#OqKXG_sxWH{sL57)UBI4%l95nm0}6{vM@UyN~F zr{S+0|4;WfY(pFl!>Hr>|6Y4_IN;P5XJ}(Ld_9w$2ICurmgkZmrZ;|2JS_XLN?N{x z9ooYkKFMetg$CEx*Wa``ApkwD^4t6?mlP%$AK3|CnltBif|@Y3+`Z%mm*G{~{KDjw znW#bx_SO+(BPu23Q)dSo3lw^f&ad75)`z^)<*Rbp<+c*d8fhZw+5H^ZV=5)J1G2dA zaX1hcqU)DT&U;Llou)R``^pE;naM6KjWceBQkJlfTW$MSH+$))*m@KUqML+M$raEp zOYhVfO#O2)n(Rn2BhOJ=^~~un9q+|KM}X*nF@ROsHudBFejYbL5FFm`Y2cZw+-J6{ zsJG!uNh-$va%XFcRMA)Z%Rt&e5#^#8MLHrPJJKgBgEGE0W1CZ-wbq&jsl3f}%-0^V zrvtC6NonF+r7$x=DaX|~Og)W9H|c;K9cks4oO(=ADIUHrXrh1YR@$DNnbF^72B`J{ z1(tm>u+qasRMYNbqkaQdkz-#G4o5qFnat4*??~+QZ9ix#bx=ovi2!vbWQDw!L=^Zj zZM&@gbe$K<;M1pJh1!`>>)oOMvbJ=K{+rxPO^wQ`8yBsw)?fIIjz(%er$%Sz@+@j| z{D|pd1n>^2eFXk@RH`TGBzbN&oIZIOJ-5X*oXTVF7^TMfLHr-leA7JbPN-m&5lCol z+W8p*l&3Aw-JEj)L2V1tIHEll1stRlmhH zHai<5V&J>u#-v5a?Xvr!HDXM{CkN$IHyFKF6g~3?LcLF4cZKyAX*Ug8W7&afVr_u3%wC{E_u!0%Wl63? zf=dK6(ITYyWFkdFC)6q=^K%RU{sRNxzi~B6BVxwIW=_E`-}(GVr@H%&Zkae}Dbb%v zO*SXC)-a~_Ok%U^^`)fw9zsm=Y8PC))zRdB2C1WUM~e0H)91!+gkb}73*=kg5&@U_ z{tH{)+;43n0lc-X&nxL^+IrxobGTlJb(8ShC8zc)TK;b5+AWr{0s5cyTr}~M41O*H z^xAU2zi3zyOvNq4w1ATf;@kcvRb;&?XZ@qmeoFu6T)72nz}@9D@#?ZD zLlxY7ZTEY^si4uPB)=2%*D!tiMwLA*hWQXEezfhQ&l*^yu!H)kuuASBm)wLL@f|!86cO3nGgNb& zl_T8L4_+@~^KK7{@<&%cvDtU;e{W|JMFH58ATG(aQtsx z9hyTisbrs%`q5;?1dnEY!s4x^g#G;kI&osn+#M6R#O~M$ znV8kf9qH*Y4u=BHXqa8dZ#&%Eu+Ij;cE8^AJx)GWy=YvEd73(^e0Ll$le=LkjiP~9 zwZfnt;vR=ax`NDU=tKZZ+0gojo7`f(%~Au-yb3sSXp6Z3!tkDUF@&r6Kx5fhCU(Et zzM%9&=ggIM8ybhze84yeRS1yNZ*KU>$Nl*BU$fT2HycU0_%Nml#+6zLS5o||KfqV+ zz#&gKIdPnQVZx?BOQ7`?6y(P%6z2EJu8{0)yV8ZZ=xPD~FNp_pYuzyXEh)?gf4QoK zj{!nd(8ZpI_J6MgyYTz5>$%j_Vj11xqo#}Pzwwe40`#l)k9M26s}c}y13Bz+4DZoQ z`6Ju2>g?~x#v*J49z%FN>bK5o@>&mr@8c7xjs9DfUg~Q%CyJ6w*He&-hcg@FAiOE| zstGi#T?QxNfPik$_y{L z5oT7LtboCe2j69`DXtAH^O^*qL^^RJ`{K)M+ydvLEX5Pe?>U{MneE}2H};=j41xV{ zi!T>_{q(X>BF89_6X#LBIBF_{>}tqV8h5WO?|380iXWXY>@wL)V*@QZ=IR)AbsW*f zk9UD&>Iz9~X9vY_!#;O)7_VJT8?cp>>J+ZKL_F3iHiA1Rly5M(r!ER>vX*4Lr5XC5 zUTj}T!K&c1-z6a6O&gYR`?sY&#V#ddJM2gGfv$-6>~8Da~<`Ap^|Psy(9 zifGy~W4M{Vl`rhFdvQblz@e^Qt_WBMc4YlEMEBaa@4W!;(tx;VOILCP1(!dqLd!ES)5ZQW7pjs*Az2>Q9mT#D|-ks^S%dFU;S~a71Y$a zUiqtT!s*(M*RJuB5fjy{67yQL2QaH_dbHUwS)^ZTeJoylD)<`Wc9+;3Nc%Qbe;$H| zM2cG;O6JOiPt?xXGn&fRttGVz6@2ybdR6vYpI%HE8i+cvpl4`UHd5B%%qtA@-TGqVTs$}MN(#gl^_M%TKZn=Rd2tlhRn;q!DshwCp8 zn{~Y^%MHVJtL?k6?t1ej+fc;i9bxxyUiT2$+Qqf*e}W~mICKTRBC{l}^Mo0gc>|Md ziN|QSuAnyqo(1G9ieX&TgSvM zjxaarp+<gjupiTua1^wEAhyY3GMPzu<=8sSJmFyrlHf0?$56*qVCzUorbf^(ku(a>`L#Vtsd zK3K{#KOuZv!B2mW_RN}tstw*I=d5|@ai!2^usgjH3 z;B&@C6J^dPAHqGLTIh9tYVp^|@6Mi*>l9dHnz8@m(E5HxO(FVx0f)27=uk*G;w$Oq ze*BjQ=~m6^y7K!U zk@oTZ|LHpZpQ>coe37higTCZ})0^jKetnko{FrEn{TcPwr4FHW1Uu$l)uvQkYh?RL z*k$eu9H9>cm+E#nnX`JsGuIkhD%!wkhT;yxy(WeT&>%}i&I^24L5)x(V!Hh!y`##G zH>{ItX{0{!e4<&A3YRzyJ}v)GZZ3Vzb89EbUt3S~IoCi>}|s12{$ivwSK zP+L?Z_mER>&uGcS{qFqbyBAf^M#?}~Q)O_Ov@Q`H9dVlBDe67F1+mfdAQ}HSg!5%n zo$ozX5C79h4gMA7_V{;sXOn+-Qje@w+zcyq9xM3|EA_b3nAHq`Lzl*4eL@j8^Db14 z*@imGgL6W#R!jxzU8o;$dEbOGGpjXMWq^`McBGzsgVhdT-my?F=rBkT9XjELZp<-L zKQ-_izvmJ-qA?fCiF3)qqeID8j?&PLciOs9v?RV8fEx%>^S?e2p^W0Uw0_rOE04&; zLN`2QmJ{>s-T*h7mc->|ug@Un zD0p?->~|}()Bz{m^y>~PcEngFa#SI<38}ArwwAw!#~ML6Htyv)hr7eC?XIr^m3c~{ zI7=h9L94%^QCU(usz+VzOiGVp)@R}xUp$x|X~Jp9#7bi9maRSSNiMf5H2Tl#NxCTIy%RX&dP0x*Fg~+XCjAdzc|K1U2jvkkwLm&1Y z2y~@cdCC&jJ5ZssIaBW?ZJ1jv-b~g@1>MpDuEbrl*|GFZCU(w?V=~aE&X*hutuiG^ zR=yh8t=)M{GENQb^PZ;5_|p@eu@*O?dg1|K#kMaHXHM`&o?ue|UuV)BJW@xXcD?Ul zZinx&^|uq}{_5`F1_2WhR)k?N<$ruv|NJvhSqX@gzdW35lAnIR`0KT|4w_9#r?LK%Ci2@*;an?D$4?BjqQYoCuy z330w)%J8NxT(4d&#$gF#vLgdH?&Y%&V5!I!FyreAMy&(gWH9oEVdj$6;;U-0S9sn(MvDZB_J9%I^Q)2F#dcfNkLfL}!&HJ@cimSmQ z0&cxJclTboWGnw&S$S)MdIowE5X(BrMX539g*-R8k(QIfh)Ap!f7@NCI#8if@?eM( zgJMwKu+m-_KujGusDqgU^e@Z9vRj8;Vhgp7L6ODN# zgpt;zj?g0zCbkF`4$ONM0cH=p&~F}v4z9fT$g6g3YzZ|o!O%NL!<8Tsv(Bw5{YOtv z&IOx=HubOCu}Ov1zjk1#E~8mKj`x$PB86)_e4~e$zuZHum8X*i2c2YfCrn>QFj*&fKGD=_l&9*6ACExu#iO5sck(RH*9 zftmX)h=M<8tX7I+^!t6LnDKjXYN;5#)zWCG^6hO7qLieH1qo>V#+3wEZr`YujM zT5ZS48>iA+6hOd;4(TUJI;97p;q=%Ew)qnBv73h&I-W9azB-lWv;RFxXna4xYJ%FE z^<20UK(gL~@X#A`QR;&P(0GqrN)q+{!b;a)+e6fi@)8wu2{-gN%S-iF1U7lq1S*_N zig73b@_p!9Q?}w-*bxL0RgA zo#a&L^({ajV5}twUX=4(_;p3f;#?zc{FG+Y`9K5(37c9P5AzGBvR67?4_w2Z*h)aMP z(PiN^Hv`e=t}`nzXm_T(=M>3xYU4zFIKF=6XW4e$RvLK2%edw`dE_6(+5gRFEwx=Y z7rUnc?~H$`IdT<4C?K#wfNWa>50M_;#Sn>UQ|3~hw7DXNXDpf#`i4{nXH@o2|3 z$k>8YiJsjX4Jm$*6lmrCw|%oTFL%cpXzf}IV`27nnl>d|rj~gN*>e>dhQ)D0&Cf@j zU;qZ0#830rc6W$@JPc>Nzg;aFyDFnU@$@;~^WytS_{ZTAt(H*Uz9$GL)75t<-SW_@ z;_a5dx$=Tx`F*2nHy!hLO}aEVS-sM&-3u_z6*D3opP7s zwZhK2&?emvmqNinp0MtI5X|bvX?0U-(QL<#kc1eM`>=?xN5{g|#bUF;+;QUQ#0Spt z5ZGB%Q{3C4LQsGeO zm%iXC><)JW!v&_3#@AY<^{rZ_TIZh}c!EQ0@_PCH=O(+(6X4Pk4gis1|1{e8`3Cd4 zE_#tyy%eDr?4V9@m`#juz#0Gc!=>_J zZ-^T3?$2L-yAbJMCIQ#$b_6v9k;6EBGJyO?xfS_!^sA``oMoTWl-L*FL6XFAa>3lL z?i5aX?t5;iDF!eo5FN=D#M+}LJ^jDfKL#%i9+tc&Fjup51Y@CQJtupyYxrxt{8c0V zvCYj{{^M3m*nFYiSZOrcz4jEyo=kBwgsDBw<(q7N>M#CIjND zv;qvgDjtd+`s$Huh8wuQ^R~}ld2x=oFvwF&RmSCy%M4= zjB&q7uinBtR(>;8=&YpHNod7+panc>PA)%B@01uggR>ckePV&^L$oKESXy*nfqn11 zlJx9rPD5}EwJl^kx*3L?I%8K#NL0^QOB^K-vJ#i|vAO>0HE|-?tDTyrdAXJ|D3v@b zKql<3q~DDT?fVSzASWAg^B-Mqs}xrziVfHG>5o}$k0suF)7C3?MX&qqDP@6YIE)4W zdZo~z#=umAu5kq$M}Io5^HWb|t~V?N-RHOK{?^1NSS0fO;qA9#D5nxlsPK zKPQu;^ioIOcR5WS#c@+$!p?F-$-M_N{SV*hx)YI&UvxKS^+vCmBbSFxnvPnZPSrW@ z_9)!s2TSz=ERPdM&8Z)EHvv+>9HRoTog?K-qQp#eCjQr)bacMb-M#|~EnQJDOYzfr zGsVpZ($?6M5T)2b^mw(EF)j{ur_02s*&C?2SJ`#<=Ep|HOZ`;@nRIeP0>z&~Kl*!# zA)u$w+(=+DG}?7Fn#+Q4cD<(6&L}VquyHQljJ9Ga{=1D+ z%FVOyrhBHS!LCYno5AE0$#|?E6Y&ZzW<;$SDS=Ai>e`>RSSq)?RVfP22b|nZNgDAT zCUXH;jjm3AKrQ4m92ab**oSBYV3Oo5o!UKAb%!}JeB#s&X*2EkY5a+c0<{>x6ju6w zUEwwBY(O!YLK@W+|<+XrS8NDLW>DN6U`EG z3HPYLyE!zUdFUX;WFR{dmfYl+r1v9vPLD%iAR79-n&4mZy9sMi32+q0pVDGx{52hys?!((aoyXHx$@F+l($6RHsTj^;>SGt)kp0% zho9PsD`$%7$=9qtIayQ+NK;wC4PzUGPyV(qze3W`5=2IY^^D6+4Bu(IxIJlFYW&|A zpZ(E4`~}3#3%~pWK{c@TbWxt_bMyjZBECdt-`bP%l=;*QvG6H#76n) zv6!u@67YM7!!c>%7fKt?eaIA_y4$IopU|Yb#C+)Xj(F=2{ACv;v&qWQOwM_qK@yn4 zR&38MECz~XmQG$F_8?H2+Ax6t04(UR4iijMmdv!pksZCaI_uTERZ>S_qp0#H2WMmqnRkyNNX!aR*t-ms#PYB|F)dZmoG>EXEeYR!oq z1=dCMBs0PC|C^2Ur&&vDYG4%@1&TlO?{2LRv8C_Xt$h|HHD4>8JA$vu-aho8SReck zW-Y9<2%+~THZd{IB}y7o0k6zt62?9Ri9oH<%b!{;;oUcqItnG&x55DFr35>DuR~HP z`7X>z>6lTpMF z0FWP9u(kkR)Mj@6>Si_bpYh`7RyT-?JkR(ee~Y*XkQnQJ+1KO8{A55++Cl$L9NL{s zZsfeNZsJ5~GYi_fdtMge$l6=K{ndPpjP3;9bu4!4gE%g4NEn%%#5Uyq&)KgGoo_$Ku?~xxWdVIjLMzwZt?qJ z0(qZzoM`U*!#4#k$B3{BfA5YnIy-T^0CR~wYrA(Ok0izH>2&o&n`5N7UjA-vKU`B= z{s2(=b)@i_#Tnq$o-&_@XE(7Qh&&P2TGZe9kNfydR_{vNvGR$%naw;YfY;u<5TL*I z^EB%a8Gta?i2r2u7n0*Y|5~OMFf}z*hO!mjyr9GUW-43>(;alSBInsT-zV2d0L(-( zB_~b!1zF4P;Pp|0B$<%-AJD{UW?4bV1cTRzpq(2@3o7Mm&*j?0sZo`!BOE~x?f4_q zl@ct!S6Ux4g#UI#Db#Au(tevKiBeyrtlr_@i=pmf)fu0%r|wV$K6;?9(%$R+@<99I zcj-8SAFa8|y}RY)3oTBu$|0Pxb0w$27BYGOaMRQ$bw+zRGaV!=mREH9apqiKm|Yna z)tMZGor7DBIja5#pRIrW_xJxc3*g5}IXAVjjh0p8mxBHotn@EGueTy3qa*l01^$OrgigHHWX8wXI{HI^zf7zUFI8fsm01zee zCI)@J zWg%8+NZYqJ?Wesd~X3+kvVv`Dh z5Kn=a7-txcq}b0&28X`6MX#Fh3nmks3KI(?l&9uvT{g#?=0cQEZK(5^Smoey8O4J9 z`2@yN4;DQFP(>8`P-v_rtP3?@9fYk#D#8VVpg&_JPNi%-k@elEzXjObcuYNuTOAx7 z`w#j)W^CKoLY}NTCp+@E9o@+yEzmxna%;8#tXws-6i=L#TB<#SVwNZa_2&`Ak*WR( zz&LIKcM)=7SsIc1_JBa}*0Lcl48Jkj5eEQTsNq`8 zzCwCD)`T%jHDyiQzxR5OubR(eZWo2_y=;Ni;zmQQQ)Zdpyp|(%xFR7xlVgFEvOyk= zUKc_I{?n!L^HH?%Trx7~g2S+yl8#j}z^Km6y(L3DxPgeXkhatvZIv`_ye8kAsC}Wt zu_Kb!?N)jU<#VU`_HB^=g<|?c3&ip~H@o7f%Czt_bCptdsEC5NIbi^yBUS8tH}w0> z+=|B+NGLBe)@)&+)wJsF2b7OauC-UtpGFqjw9l$He@DPk?O<$C+cq67Q~-7P5=H06 ztnqg(q}syM%iW%@+dogtJWHF%U9d{U@J9wpV5*v81-QHEvYam_~* z(OQ&-^5bbOP4Cx!mnwj0q2!x_kqf1DOodOytLIw~gLwCq9}0KW;i-G;i9!?|)fW+K zy5^aM&q>9%qsbC8+-1PBcf=vDCb)b%c!i+^u-S?Gh9Z3)Rxd4(`37NYTY?w=(;|u8 z*gRai+rr;nB=M4))2{%>$#EBpsjQ-#hh>g@b9xsM<)e2K|}UHZWz=32h7MO4{?&XEP6Z zWK*g34*;NrAJwI4e_(<>G(53ws$L0><-1h+Kt^Vud!^bcJPs2O76{-hX#mcW!7}kp zY=K`e{}`qGFBi%3vU`8U`-vtGfQgqhX&g>FxL4k?M~V5y;+AK>U>3RjjFUrSa6{KZ z&hw_AQ*lA!df{sHsz4C=i<32A=WIc z)Ape?pPwip4o(@Id0vQHQ53rXQb1q2iU1_j(*ejVsY+DyT3rWo#k+3H(=^|4%Wa=l zKQ~RfRxel-lMW|vPdICIy`g#SwQIp?YE~AEUk~%DFzH|G`k;XF?Zs)MnYX#aQBy23)UdP)3oV7ddc~X*HJu$*cJzbn?;zc%N(I|; zdt_mK-I}l$3`Nb`zJ~cYUQZ0G#3im@=;q5JlJRC!Qvf!fYhxLQPXj>N1s`t@)y~L#|&Mx>qRWvMpzJ}x>7TyYw?zrF6a7&v^Z&1r4W~uVCoE@ zNgho=J)GC^qlL5br_MQcxnjXX8jVc8m1vdi5rvQB-?~KJDf?Wn!3q|YQ|tpC%B_4Z zRY5>h&7Oq24188|n^Lq1Qrb0O+2}<{Oi@zJ07blwM3won(G^^lt^31ux4kbw zX@|Tu>AjxRC`7qj%IeuQg`1at24U5W|8{Ki0&(1kCiQnh;<%S})+@%P5cYyQmyb_= zi1Bf%lzVth&-*mA(!+%mbAl0;^6^{k%xB`P0j@-AXG8hiJ=BLVqc_~m?6)~UDooB; zeEsZkcT|N7+S%ctqio`1>*G2FBlp}6LZeB6ieC${2qUfL+ND}N$I|8e$dcq>J!fpu zylSO?NVAB-8Dwj1;UJtBekWYPkZeIDM~v^Xqhi@tRR?~6s+sN97go-UM~|j`E(r|? z7FwY0?GdO+2*auW6(wc!Yy$a*#CIakJFnf_e8taMoxSX<3RfvTu%Ym!9;s+daKUiN zpi^TaRrx7?o>Cfa{a^R%hdlo|&@h;WCm$UXGLWm^-Fc1`+zCl(0AH+rRobd7?hQbg3?o^N2QGxs4JLyfang|F>gvxa}@N#U8F{N2_~eg81#_25!`O?lUVP*0dCl<9#Pv^U--cj$nKVDMtT?E|-&q4iJG1jh~i=|qBaWnaHie1jB<$12~h z%t%OsM-=*#NWoY#_ppIHFqs_c=Z8tyb7`6%=pfdhrUew%-)QgTczHc*lk79_+Ag1i zHNhAKSy9;8I%k>O#8OHBC;M)U!jc|Xcf4T!=CY!vDZKm+>v*hL4P8(Js#qRDe+%O@ zzQ>ZRNE-0kwH?pZ!p(8D5MRo-OV?At7|LGIZBz^C+?Kg z^1DH%q?$ybBF>CGhC~}M?+;Q}2F7K1;?T6N(Y8GD4lE|U+NvRiKb6K*=4h&`KGc!k ztMJ16(VLwSCY=fwNBjgvlh|OKmaV{k>BspRV6!2!XaBlCE7fb#_9 z9BEtC`R7^gzq3K*4+RYIhzTsvkb3`|wnx#Kj1He&XJ4_oJ8IEIeygUhTnoy78!12Y zXHraR_oxkICS~o|pxD@yrQUSUS#N^!G^x`J@HD^L56B8Qw65b`&woJ3&v#gbN4@Wo$ii&t?+s` z_I$tqOrg3Y^3fZqt;5dNBDZpTbzO2V-kOyK(||wBEjT?=*kwtQ>(e%SNeI78p}V~D z%|cWoyBb>F|NLK7Y2^$O3Bq?#>SaGS*3Q6H23LVj^&Gy~Nkqjxv^0^W$s$;mcNBq*hK*jP2 zpp^t84v zY`WSi@F5K1vJ{SdVB{<^bVQMb#FI=7!mxgA65$+e89)h`ec07+`Xe+?!e%M&?S>4{ zZ!b5x|Ft5!d15dhiyu~RQgM-rZMY3>d78SzSCZldoK4SsDIcWv9W;&3#A$8o{>`zl zu#=$VNm}|f%VAarGvYN_pQsRu#pPP%@_W+`Dd$;q*5?sFiKA0+Q8sLG?pmqU>=5C& z0A{2pFlgv~wV~I~N%Q}Znceei05mDyxez^SrMZ0Xu6t4bmEq4=>wAU%sBtL-7^?Dc#e2?^*%MXHUDSrrea`PthO^NkAD?xRBD)B(n;g@l05>3s?)Qi(r zE_HUwNBHTjyM1vq#yjTkhHDE~4y?7!kp-twTAiySQ_mG8h<(LTK}^Rbp50j%h!I>=LzAedZ(I;GIo%T2|#=ZZ~6b~#^dZt%5xQ3?^Nw5 z$5)CbSl^cw_2PICXS;{oGuqQ0ha1TUWM`N8&fikV7nIBjQh2gNBvA3>sT0@iBODHD z%L2>}EufBejxuS<_facqTRm;-UYL;!RB`W&*)1a;f+&s4d>8Kyi{Sc}G_f>q)`}3z z1m}WbDK5rWor+Xn|19d_2fmkRWi-4@T84~ zb0MzT`~{e9Ir|CWxjc!ZH>hTPg<-p$LbHrroqR@MG0BW-9WhM zTqzMY&E5vC$9Q7 z?&1+A6w1W3x12`Y-@nVSTddA=wuT<7!L0{MI*97)QXU19W{S_rc?W$)^{YdhyZtC* zxq)U$j(F+eb{d5?c@$*12iT4b%i{LP3O*GL$&un~_*R`Q%z#l$Vg!Y3~kz zCRiUZ7282vmJF$HZn^;imT}P0D{7Yz`+iXzC7)-3bI^fPP+S!ADQSo(fYCHvPitF z{iw@B@IcDqN1O8+CNOp$c&5vJSDo1QO>BL^Mn7hj>-cldjlZDN)Elh%wWT^V$PxPC-#Rv}M8JTF!2# zSRBna-_s%fZRWIQrIG)Sxi=3>I`9Ae%`9u0B-`Aja@wYH$=n56CauhzGSf_@bkdU4 z6wL*Z97}U$oXRbO%1JX9G(|HNG#4rtG8I%*TtP)dR2D(-eC+<--*cw#ea>(0GvD8J zo&N&6y7IHU->>)c`FK5FqURvsz~!Sak|cXRF#%DIWmrXoJ)g*fgDEfXtqgBqMzTl` zvWlC(Yv|`o#>yx$Ro>_9TcOS8AF9RRBUmGBw+!}tf1?XE%my)8rdukJKuH(x4cFqU zWSJsS0oDr^W34l-A7hSgBO`6-wd>x|7hUs?D|eV@T{a;l(f$Lo znt4bURoZ~_bklKDk-hZ770Qb3lR}l#eDLpPdI@eZMcaHZK@y4VvNeKdbtOm^lYSY) zs#;;J*fZ8cy!)MK_^R_Uc3vL8XOT8V8}$*WL^4sQO^>2GT@`RhB7VUaNZWPVCMjn$ zf*xo9hg|eXcpw_Rl$}aeoTLtlqu@aJ=gLu?J*+29-`;cy_vdHpUR~p6KsfY-yQ}E_ zg@>!;oFYshE#p?eF6q8)AG;Tzp=huiklq)HUjKyxJZk%PPtDYBFr#OJx?>cybq+`_ z*?{R2m%^8(Dipm(`&WReqC%5TCSvV)$9;Y}HidBGy=k_|guro4&jGJC?J_cQNvvLU z8nf_LSTJc}W1X8D>Q;z2B$Vx*07eZ=n?YSMTZ!$k+6l`}-L37+_Z~@EvNh%#hKJ4-w%qtSXP^>_wXnztnWpyk=7AMwIXr04w9we+t?S<^Fy3xb1k1%2QN2a; ze(O!#Z@pOG`uJ1ea?80&t?iE>=N3Ys2o)GGJ3|59Gk+*#I7iTb1!VA>a`KPlOz4EO z13kvS+aRid&Rx^nnAvbc$M?nk-D)u8=&Kk~S_k+UNrgm$$@&SCzvZzm)gB^BQ6&y4 zRnr|XUh<%qeZEi=1rI(SwU^zlQzk&VH}Ytb2+hx8> z#QZ`y(G6n2u6yNW-+X}c&!u0t^lvWxI!YvwGrJE3t4O;QpmTEbyX)&BCm*IU$jg0^ zAMUi&{Ivh@oT&%iF68+r za)mPFAXL=mWZaU4Lt|L9m#|V`qc7y<;7v-^O^j%)QR6hoXi?i@268)#b$NxYqVTht z-%+zD^S@R5mrcCeQmteFjam=-5FOrA3C@W!a4klT^zX&m-X7g_`AUqo@0P@#KB$Qf zkdJR|%Ulf(dBp}q+bYQHfn8?J5Sv26N<6*@(8-f{z_jv*F{%g3{V9md zM2FV+5Ua2hYX#D&^1B(&`7Z+h(-jv;z7{F}D=I~t-t5XDXb`EO;XWO-Yc^Z*ofykL zFtlai!A6(h>*}2ony@cJs&Xz1V6RdD8P`0Qax58dokFq_Pt_v5~1yGkgjp1p)r4BP2 zp-8t>?wsGObq4xm?0W4Ef6n2co1g)n5$|~^?QNl8t6LfUgkfxlMXh1bWZUY4O*F|T zlWEns$rbPlqo6G?oV z(q9dT67aPKM$X@uV*m1^xj{4*?fbe`Oq?$`UN^ti+iPUq+4T4PHfGd2_e$j|pzvBZ zO^R5xN=%tLrjXL?^t8Z0)yO!aTV60g)DEt{aakI+P(8N)kvG=O_v%c}{p|!8s~33h*VJ=0H5@`%PV#|??u&>^zNUe~yxbKW%S7mMr3G!1nb|S{ zWS)B+^2|SpkcNpr%m@_<Wm8=s00^eMN_$%$=Hy z=mID$rxPt7pnB4%@h9m;rfD78UgGO}V^ab1{$m=#$v81!i8CLL(uj`jFYawCM zP}E9$v9`2vv7{Mmkw@|YCP)%L&u#`ZMjMME3LEa*%B8b=$Q5y6s5gTpfxoq7DUS}x zp4Sx4PBuhp-wkw2LnF*1Y-pqm-OW*SngM-k14nuwH#hgUHqlZeYI~$QpH>=cgeIXH zr5Thgbdt8TEC9UJ=%R&zE0aCvxF%$NPklq>A%oGBzg1|l_3o-+ooeONZqq?O z+-`V(2Gv>ld}oSZh@#_e1tzhCoo31Y`dCFd9SgO0UP;+r6mS72kGJ7i6`z0T;T`}_F_>q z({(ID-*+glqRM0-WPj1PF79|=3C+ga=G_6~Wyt>=6s5qI1k(86SH#|djnd4JV4lK-X(5>bEBYv9G zHXorPoP9q0Qr`qnQ<1(1fpz2MhC$(8{}VRRZCP>r3&%AHK=^bw8NH@1D{_Zt;egl1 z9kinyq*U$N@^_cfy^TS-BNDZHOkLWJcFFX4EJQ}5#0l7?SoU6uwN21l7;MKvi4Q!d zpFQ0RhasjOV*Lu(&71Esx33b{>3w5PHm*3>Bk*hb|DQ)3;4j?PRSZ~qm??b7yXYB; zd-irOu5NkZ*Ct^I{O*y%6_5W{xXMEt6yemWI`E?eeinTwaKa09NFVWi(Lq+03$e26 z;w>%|D%3#xzRL>0MC8+7?(xPDiQ@hoXh`?Wn>gyc;a;Y^FjEvITucPg`|Xu;)}mO9 zm2~F((OPvuM?<*1nKyu(osWrGe=p{mn~Qqm>{}mewPpwH#j$l*$dV>UzS{-sYCW@l zZ9Ng_Z=` zt&U*uwL18l)ERr{Y(u~k1X<>MisPAX98C!CyCB8GA9Sr;uCopfl}|UIHUSG28y6uS zzc^OZyshoW+~(~A1%b7~$7(6~Ffa8sy-TZ1qFPnag^NkG%`|n6;g`6#9s!)JFkPyH zwYQ2MG{U8tIl43z5|4E6><$z1J7cN>(GJocJS1pABx|WP0tf&@gW)x=CRcImPf9kR zjBJG&TMV*+^W?_6S19Sfs33m&LR-BR8Wi5|Ju6HV`hJkiR?`b;s+QWAejufWCYh6Jvq-EBf-{ zx|(U)qR=dKf4UX?;?l!&LzDDFmGH1q%aPOMwsEu^kd^!0%&c8Na0T1+1a&9$AxqaJ zB9QxA+-qzza0u#KVw$F^cgdb0Xyp;hPR#a($={d!Blp+h3$-tyo*S@H7@qV}7kC_~ zS*o38u8k&F=E1Rtq4lsi_ErVHU-M$*fWg zG`|Xr5{>nWOPPjyY~~D6!QWh}EoXpBwH_U4ap$jGs)o&B!_->{QFdfciS3cAxffA* zR9kTM@KnBVxcX8bbCB4dc3#tC7XvkZQTprNbCoYIY>pZl3aVzy?da2~q$eMA%aAW+ ztWeyY%)o-p`>wAXAA$eiRfvcdbLlbolu~}{w%o(E(ob2cMF_B$E=m(gZ+w9|nc-Ii zKq8cqxM44U5Yh#R;L{p?fTw7-7PV=+7Yiij^8;n+kRSb=7j( zDG=(7{&zM8)y039{A#h4)g(Ew{?`o)YP;6r)33ML?P)gWyt$+D)5*_23I^t(jT2tw z&cIWcwGhf&$W3zRfVW z+pzb4qJJxA>n$rTM?B_!)xWegzWK5)eBF`^-&679_tp*{atD~=lg8X?xFOx!F1*rZ zibRl3I&wQjJG-rbv|w(q)EN$;lZGUd6<+e_+R?qveaq6y7H-_~d}iD>ANUQzKyr0{UQ%Tlw}$~=#_!V;ocEuc6^5DDN3LzuVBtic#ECmbg;dut{Zc!^*1e`nf4-CYCNVU-#~r zDLsdxgGQ{w?SMbB!;LQ_w<)2xNF{XlTQNM4-H zL1MB`xf)7cZzTp7NuOT)kVJ$$;IN7PZ^J(%JFB}NAL`BWsz_R4C|e#VY{IRj03X$338gBANz!M93gu7Asi}r=H^StQ#-x@mgX)Bog82y zH>3uN1lp^lY;<5WW!l?C{Uihle z_W;ZF**p2f0a|0N%b?S$M2OV56N^S{If33t zX7$T~&J>(9MLanUx*s~h0XTCMZ6RAO`IfWR4FW)!zlN5UL zWMFrH158`hah70VLM0*nNO<&wfDb&hO6<*}(V4B;m9sPJ>dazhRX;w>2X0H15B*U0bPAwS=UhMe5ICLC zKZ5p0MVW`Y(StXI7GSSq&4tOknOP<}OY#?*b_PkQ)~x`>1V)LA;GM^w`C;aJL(dVS z&TSMz)R4*My2&mhpE-xw^@Sg`@ex<0>eP4G-MS4FFG!@;VSsGrfF_3}4aV#XN$Se* z4Q|W3te+UfShHkyp;#9n=*~Dj6$czGu0n#ndM4oaLL{zY>uM8?qI!}8nHsrJDPCPF z+%>2vmbkX|QvSP1ySSaV_bUw<=m!eOixi}vW{7)l9`A|;+pc$1@%9MZ>BX&S0~Lcx z=Ne&fwdjYr+EiH%*{U2X*Frkqf0CU_YW2iT9`Z_FSikJ z{sH?}y{$k3qCx;RUr?U~h3o@>W9-j)&@S;`1 z5N)o7lL0WPBdWpXKOsOM6!tw~^2dE6k*%Y<&^iXOyyxvV!JM9lCNB^k8SjI9&(o2v z=^aa1D$-(l!tS-kSe&{bvopr$tE?%AY7957_ekW$|k+-VQ z9D{7BNuViixhqrHS-Hdb7MFn4uMCJ3>|@2F^7;bM%ffohn@&h&=I;&ZmzeN1YdLCiab$I)bx z)3N!9^k23*&(ssvrmK35Jx_zqz2fy{3G?7gX4JUuLIuu_95Q_jqAN>k2P6mw^umkn zixVkTFzuc^m8e2O0TY_kRhOhyWP|BTbb|4`^lzNwxAjc~G$?x{q)$Az@|gxry8+c| zw6c<|=#$COz#nv17xLfxv_XA-nMr&#`EyKGb|vB1_lrx$U>g7)0uE2daaI376`8I? zqU1vD7Naf`e22UrZ(?Kb1tb(({dX9*eMf|TyI4V zqxx}6ZzqL#vd<4w(1nkWg^yu@LF>*d$l=&SmEf?^NnvWWbDtV4T(Wb`(32{LxXQFT zMIo|G2^_s7`AIfY3t-rm1LuJf+PS}Ih6V(&vTiu9B(c8E1m;VBWgZ(0Hj}S6zM)Js zXqKfwUY)e3qcOyC+SPJ$_=0UH0z;coCG_G=q|HDM>mUVX+*b*xzvsyiNhD_zU4*os zj`gbc2=g)R&%a+0XI!I3?Cp~?<$sVdNCIgx+|*zokuyRPtn#X&ANmy+}Y#z2zk z$UR|eLo~Q!&_2hM4P**O4Kx9E`zfZjOWs?Q7pFI~kDiFLU<}TZn(k;`_U&z0UuS!s zy*&SX=8n8DnfsFh$;co3%Ow%e5zw6u81pBnAgewnTUIeYKhr6@=tf`2{qL(1@;+Wa zr@Lsat|yaxjYYNMNec)>Aa|TPtW)Tqk0qkWvf3?(B3?4p_!%sBEjIK8nO%ZqmjM^O zO#RBFR++p`tH4n4gg!CM{B20>j<}io^uldNR=+SquCdRCKL42xoiUnIZ-}hHRK=FPsY^rST~(m6!M1e!L-(1Dp3?#w{XkY9Gio7jeR$&>HA*-TKJmfN z&Q5#xp9|}q|6U(WHn#5Nrn`i0gt6kR8VprYJB6^hKz6{n+=R<{4#nS<7~COnyIF^T zQUP*p)y=C2n7qQ68?p?tq!Inf6lVp4eq2Yl3^T>q4WkP;Z0zkFD&04rJTCaW&A~~j zxcivsXK9z(4k|hY7v6BqG){@SVf&r~{AR?u=3!^GmTd40lnO;dNU^t6q+Qd%2qv8R zS^hyN$1r01$n=SWNL_ZLr?|x9!#VxHt|3hPx^Ha)}%J927$3bCyg!6MUVmW zLG3CW)f?v$nGr7Z>1xfxf|k3V!BFUBR}~v~NeQ(jC` zsy$PRv(#$;cd}0hDojYEAE^Ft|LdMe%Z8^ZG;NQM{2)PUiDVuu9UyRXaL!tU(w5B;KZ;i zdiXHp=bGPRo@0U5)kRu~sfCaiQYqnQp3oM|h6C2VQ20HogrZHB6&dnJID~>Yv*n-;e53SE@@A)XCKy3g!Lcd)TM!avZ z=_GwgVdo#sScjppK+{4sR|c|t{;0zUKHKuQdmYUO^*d1op*j{3(veJi+4n!gzIm8S)~o|w*EJr;Q~t`K|0 zCX#nH8>K|W+n}bm5KPnhMg`qXU+@+t=E^w&F4Z7e(0_ow$qp1L^lTsPtXLNx32+gigZZ&4P)pOIr^&E>)&12{mn&q2H3!w{jZa!m z;S3|!Hx@fl#C;w`#}3lSTRrZXsONLCG&A(Vr}+~(l`@S1!sHZ45s6v1fC3=R5`BQt z%=7`xB{x)lg{z@K(l5K5{~kWa)+=#ZGvw@UWD>b3J&iqqqxad)c-%CQEjn_IMF%vj znaQq<2MS9~RGc3{q8a>$o|HKllv_KD_VpD&!}@^}q;V)}cD;W87T^+>MU?N#%gbZ5 z--nnvFaIaYd89bu!s71FE2)^t2XZ)BD&b?2O%6#MxtgzAqaWBa6Hu4g3uZtjrqm?d znpT3TYR|XT6==kV{y-u;2m2YA^ooE`Oc#pFJOa@}!KPxr#W|aITV((04YE{uh}Oq~ z_1ekZ_paKbHYGZ&OBu_Gx$)#(RQwaj=yVe)u&eol^Q<3p5KCPm=^}ZjtW5w%MLssC z9)Ph)wg4Cq;q2&Wp^)^3B~2L&oVfJUu0LBS>!Lrd@YiGHhW@`mz#hNqr+DSOLR3>E zg1o?G^mP)zr&sgdg}$sEW1l1D;7Nw|gAr?n;Iai^*JD~UbI-3zll5DvF&t`jHgX#n zz|Wr4G8*s`ORB1O@%Xk&eZ4Dv#vE&9z?&+jZ97lQaxbrtAAW^yqGX@JAYR?mzsG4%-JrBa+hSlw z?{sf^Dx@`n1`ekK>6H4hmno?&hN7W`tL@j&AH@%bjc_geO^70BZhs6p?in>TOxi;x zT*IK7%`e1RfQ;0Us1#~14`IZHHu8_xY9UypUy$aYDBGn*U{lPN7ebb|nGgU?rPdFi z&hoxhBmS)(uiH??EA~M6|Ct&*y0=0o!r!wd5K&W!%w-wkTqW5eHk_uWXFi2+zoJEJ^Q(eDZzukt*fIZdbiw40*Ve&neu2H_}J?{ zr}DSHKAEFF_HHo3_%lW~wa4NAQ`Iw$?H2b}Ki%lgJX#9a4&$@521>osNsw?>14|{Q-=@0K zR=)u9A{QR!J#(Fy7KBK`STo_eYq|^36As!Sh|By*J|FoQL4={YUc{OpEHgqbtH)61 zjlXOFdojsr1v05Q;IUiZnVr>2OJ9%uwr2acS}lOp;IYzBWV93(*%FBYs^od%ou!Ki zCf_cv53cQj-_AR}W{4U#5{$A(-;A{SvGEO1LSK;51E2$G=aoF3xxWG~>Ht>}OZ0XD zf)G7>FSKX&_TCxCxmR{QpLw;?!Ah9hF!W$gI{vdffBb6WVkZZx)w<2TnzcprPqb9> zJ0X^4N%Q$(ZRZMFdT7*TK5-D=3yHXfPVupXTh|)ecwI&TiH`DHgEz~Osq*q+?@#Mv zHFdvih*))!>UI`vq_`s;B9B=8{|H&yr&RH~!jdh?zZl(VoXR2I!JzL+w*mWsI+ye({Y93eAT=e>AmTvcv8X11`X4szNotHxgYDKTp zX(v^>fbyqG7rtzhm$>h-iP}l(r-s8;5L$hilW*aip-EM?4?JES9GM6yv8Mo6$p%O__7O@_wBm;@Abt* zDpe#XEWvAT7uSwhd{}U`a$@d@8Yg7?@|Gu>gEK&T706N7UJpnBLB%U{=OThDl1JpD zncO_at~2!^efQVZ8L$Ru;WfzjdrvE*)IA|wqqZJS6Kf5J%9ufuhx2^eKUvrvtbIL} z{p0h{^`tzz^)uqTTg!hc+O1^US#{AMQ}w*~Qh6ERrdGAz`3D$Vgi$GdjTj%g;T&#= zIW4|sQ=TAyoN8j!9^VP*nJ!B-uX5cLe4hSZ!>C>$%WrAW1^oV(Sl6i#gk_g$v#Ug- zx9lq$JL+DrNL1EC0kCXG9Mc6c+|W$d<5|k5pA_nGvwzkf8&|j33W`!mnKYv%rrfcW ziZ}iIkO9x=Cqa>(_pM3rD<`1jaABT-h4=w`cd~pfxTuJLwZ=SHi3T{DP3#dt#kENL zxWzE2NqzvSw(uAfO7$c`im>?V>DNBY?2}VB|Ct22Mhf3XOuYrK*DdSYq+m2yLM5%EvpLFHQ||A zP0g~7Y&8nXF0&c4M|&3Xpn5>Bt7V4ZvZ0#!qRwQA)0!zv%9Ph-{C?{IH!ge ze5CjoNYfFsr2&|^LM{o4GO}DjcB27gmp|89RpN~nN>{QRNvB4Vulq-WlF@L*s#c>2 zOTc@mF|pVZXf2=RSB5PU)>vCvEaWNYgeNUrD~FXzGDj)XobU;1zl)9ZNdt*JEq!8} z;`X8U5_KaGd~rx|c9-g(yMS8m0$fshy^>_reK&Dp+T|>` zJu(e#5}I0BNo zE7;_cIxB^~7Z1^GH9`7%3XM{-YSfpyjMZT5_ttp!p5};VV^=%8;6XQC#D6(wc7o^Q zk741k%ZI0}?o7;bmoOTe{(QeS{d?FCZO^O|thxv-krPGwxgs?WQqj&dn@gg8uvITK zTyb*ngPfP%R%w7vxNx+V4Q8(R49bIHQLDr!1Q8NJCwC*j1#K`PnafOIA#c!QGs^7@ zHgq(0GImHCC976rVCCsZK_zfo(L6zW`486A0H06DiWMNXsGF#3Q z_OqidSF`x^M-Na{wcJWf0fe_m1uG5tRsE11BiXWlFMJ~bru^KDm*lgso3FeyZi!f^ z|BTYVgg4%;ggF9il<&ATzCc6h_sSfLK;gj~PDV$nbL>*eE5(=fE?o~ENPLERN(lKe zcvJETKcyQ-T=D2zO6+LK%tKoT>E#Awl4v3Q2^vteEv&pDEb(*zS~$tY$v&C%xCV}W zCbLi6#-t7B`Lx=$#U*{pi45|%V71zOFfd9Qq!K##^W+;!`f@NYe%Ep{t*D>}p?>@PXlo5B|5i$Z$n zkM~g-L$@4`L>K*_fX{sD7bC6)>a^Y+t@>-&Uq(Dp0~`-JNyZ=*y-&028R*j*ynRKQ z8xVCqzIm~j7aU)Cpya3FPDf+n^4-??g-J(066wd3O~K*eRdRlP(32-m2`0Ey`&8GH zSTJmGP%f;jB#7tKjzlh?FBZ;JqImDyx}`ru*44$0;&n1bh^W97cKXFvcDmnfhiZ$a zF*en_kA{zkIRJT?bS8SNhwC%7eC6)92bq7@Rs}B>^$IIM$#!g7N^zSm45{xhQI^-UZB?~zv`tvUsw*)vlx403mctishtiu zC~XeAGdk_O^8|#JA#0n@o-WIi_n5c8*rVjfeT(Vb z1Ei4yXMRItq;<;B&!maVRDaPx=nGi~UVge-GF6})EwY#T`#L(|b*)F6mszL?{#ofl z9(3Sb`die^oB8gc+z{aAkL^3UIAZqe0u#;V5!tZi#T#qj!$DnwpwgJ&KI86mu8HH*?SH6w2g*;aId@^JP_~x zs~VVmPkF4)dYXYfPgXlbw+NhhNYQ&6_@J=pm#z|$MsvLl$a zOKcR`dcTO-=TSibazCdVT<^9Pk0GxNC2s#R`ps*7IDUGETf9K|ZbJE2;*MFD68YDD00tC~;~qz<9J z)U2X@1>Pk<9^Zzcqnng8or24!+^bZeLe;_%ANacV%hJcUJ=;nv!igp>KpT;_f$xjz zm$9U*;;CODU?{sQj~p?;cN1EW*}^1o<|tbOrY5DmNC$?e)gRv3UIx@@lxkJjApY&f z%=Dh0=X!rI;H(L}lAdaZnux-NgOZ8O*Nc?*`Cf%6d8t3u0z~uhyDxiO;Z?Da5kpzm zwe|_n-JB>JbP77s4KPI zSJY$b1ZUY)#fNQKWX+DxoLi{PRah$g^024uazoFVqfxU%^>?^LdY2m6r@(uCV_t4t z7B8HK>ihUGk1>xE)m*EsdE0dkZ|(Hrc5q`l?GC*5uELU+V26V3=% zlKx2Te~|P>FG8(kYJOLQWt2YG8RJi_ZZ_=xXl;b5-6091GPl6sv2_x}(-1jL zy@3(74O=bK(-oG4>+0$^|GBLGw{+m4C8Zg0*F|X>y&d%H+j-mTK3~>be^H#x+>D^| zdP?O67_}Ss2l5>7{x^)+Y&N4c>9GCy3s6m}Q()-cweSJ%*4zWTbq@80?LXt(ml_k- z_ufml^Nw46D2D1fPB`d%Hkmvx3@!J8a4!2@yLQbSG{SQfJ-yWug0s8+KRJC}3TOCD z9_KtLQRuYske)PYTKYKP2&q59n({SE^#az#CghEY`_oaa^ zgH(k+WSFrLt(i%$CuBsT+5%QIPQMmG`q6K7gt_%UDL@x_hGze=;p3Yx!)_=pkI>nD z)v$zn`gf`}hyAc-XkBLIQwLN+4nVnq=_Yj$%Cj3>c=9zn7 z(>AVL$_toB&U4SAHI^<+p2(ZZuHG)}zYr&L0ZL(ux4+J075loWUdXw=(g^S_QDvnO zU?MWJKlUBQF&IqPYW%-3R!fma2Z0UA3u zaEK(KVS6NJv~qhD4oGm#_w)Y;za72~uCL5(i%F3t?Zs=4+#5P|4s8292s$@yZ%qzA zdL85i(i@c2Qp1GSWs6;9$|zi%s|z^}i;mhNt#K_D5=lPZRCyN=d?y*@aY_P!46{IS zaiI?!P|RtOtNvb_iEdV%vWi2cGbzx^b0Drbd!Xp}Q0msZdU70-? z4etX$h)q6d;VTL*iZj|EneU;@KlIYov*^czH%0W65zfybh0_GQ2_O`SwK)GheF&?R zNIW{L52doNsrv4{duO*s+nxbjm-jsGZUs1D<8t+Mm**8rNar~kogC^;tSvg*_UP3k z{OKR?r;gh;zc!=AyhY}ZJ#*X!_vGFDqm&r9@PWcGp<7qjw`D(mP<)oC7pFqx;BIqI zxp~A>qgZ7OJbIQItFkO~f^~TaPAuCAJZ|DGgv&(82CQEvLv$(bu`ngHh6v~Y@a}VX zOOwd;HL!-J4E&$sX5CbgKUF5k)g0k=*(Dhpu z+RL`MyPs^6qxXXjMu24!pMK2QTb-uK}_W=X@dsBHj760w&E6xNNbtXEpae zH1Vm==u9+$ETH`7!X@)%dx~K>{G^3a4D+D{4cPKk1QWwB^vH&x|JZE)UXNRtiz0Zj z@uHMQr&jL17+l(tQm41`>w%v^=<rAPL2Iu#7yWR!mKCKZAHmiMbX0Z-L<{rXB-AAb7reG=KjMuURMX|Mmj(yJhp`w1g`l$Huo{}lI~~(_dr~OLyb`q zOSRyxCXBVte_jKXTx3MM_6I1C1jMeaMB`3h`)4$6J5@KreFQKKOmOI>g{%H<%ucA# z2MhF1Ee8d(?h7(%wF_J28*vnMJ5~PPqcs)6YTS^Q8*_Q}5RJb(v%z)ZhgIK!tE^{? zD}DZN`ZN+{iS`ZOo;LMX5P4f%xMl1&IQ+l*XlpdL7*vFkIkj9n(zFG)HGlIH{9Cfs z=cddVQp7Opb#Ms~_}6ZrcYLZ$O((dVs7>>Y=pDV5Y@tZCFmcgh&>cGw5M%`R)=QOU zT|#}7{Ca&>SZit&?b7!^1z1A$Iw+Wq1_FF-QjoM6j_6zp>y3kb#MSB1hC+%anSC|j zg!k~q-FW*K|F`WUq^mrd$k5iNxTyYyE((odf7dvCmtR@`-%J;kNW{=Q^JF z(dMd<^i%J*@4lT66dPpKy9BzJ=~bGapMPg40QN=5Wzf$M-I=)_zIj;ujd|3a$G;;h z4yAv1(jzIm*ROYTuVtG<)W}0WU;h9`X&G@#sE%LfUg+S=Qe&yG%Lhgd9-jAmz4ZlN zvOr<9Z$?qOo$K??^d|=iwt$zz7}cS?&z1HL#D{ww%Kbv(^7CKUS`W-X?)X@Rv%*lV zTZ$2mWei3T`hMi~@Y0`#dA?M1{k#Pq$kjnkE!>tT&e_WPfETzouCK#bUhp?wu`f-(;lf zdbcyH%tyF7R)nSHUaNUSYQa=1o_Rs~#j5sb=jVeqsV6U9+_d|}4>=F6B<*^O)lA;g z+?dg5zDL9BZ1e8;j>dz==eB;np`^O)fuiEBUHkTZP_YknCMVUW*SfSzch!Uj?7~y^5#IEc0>bn!i4?X8$Mu$6Du^MB~^>zvRXJ z>jKgwo|IF1{-njU8%L%(=yWv-j2|C3{@A&BZoI{-remAV<6(6V6x@2*BJYopGS%uk z4$Uw0Qa%J?zB|e>D!+yr<8wqe zYUsJSq;Yi4XmJQWL7jK4+KlDxy$r64+BnKL)c?G{YqJfI1JjnA81VNM3 zClSOr3r?%i+~K_Z*!HKzcRZH9$VT+i`V;b;577)Ge9xi_^GjKU`SBXa?j6PE?UU2? zaoOnDe7kk#;lVc|+*g`w+%Md9@v+aXwN&FT?ca8kr5>nQ?;_yyFH}sm6&k?!mT(n@ zP2rSpVc63coJlwP+-od8Y|2Y~Id6N^%ySPP=cjI2P;BHU3bfk?7JhS}H>Kz89oZV? zDNr!0>`x=l?yg_@9vC7hH@?UF^1mAZ^1pr$+oGs8a3P+&xc#sN!{EE53bvF6#1&#h-dTeS6ZU9eT{_3!4ki4If-?LSu=OzP4D z`{-4?!ZcI*S|hRw=+LJpe6G6-#_i}Nt#~2*?TwBEg*AyS#(4gag+`!;5qQmY_mVltNWK@?RuOQ*G&wHx>Ll> z11IzQN#21=)Gg65yA@!Y2$=cMHzzpr_h(+lH8(@7yasean_f3TN^e{R48+tvVD4u(Pt`*ga+>uMDI(VmBq$Rkl<4A2WN zeyLwzsI!CZ!7CNJ?lT{6jl9&C<^Kr3xIL_VN|2$gl`^1L?RlEC4|*Q)le3R)65H40 z`XAjD3f6j#=Fke1`AqmM$$avUhi^{p2PRG?={$3;JFwrB_r&bB#~zO-8&{cQwswqt zK_q!RhGmFVUw=75y>_Ml5c(jZv9#Dlc)&-65fz!?nSZ~d4CIIo%GX7RAH(AOqAR8l zFpj2Uf%zU~j-{HHM&J>R(#GfX>t`DtJv4$&MmyQ^TN6tgy~H;@#RXil`F-`ZrV~@Q zn;MK+7Z%i&F-LAUfu5I5dX-=U`8kMWm!L1BogNXsucK5Lm+lp-Z%+Up4^OC?ot*x3 znxI`+u#K*PG&@`R`eaSeP^V>7^MbmUQ6mL*&BAm3bMpqxMX=Jh^RN2%0`sr>mt#rM ze_^Uo9chcY!}@-PyvR7JW_@P1U-1@m7sc6>_V$Sx-hi_8@7}EKu|*L__SkrOhMAkv zT=_DsnS@1Ivbk(O7gL1?vowA~7$jk>VU<8+g^v$JjX?e|-9&Qs}icHf@I^|0~-z|4V{Rj_P=`%Pm*(o-}ayt%MJb zgIS+uBWFvKJh~w)gLi86O z+nPLh{?UODsFKIq4<>$SiVCLmZQF|GLKj%+*-HL%S<+fJ=5aB zH4J6YV?MhAscPUqb_rNX^u4+-plP$$K0UWmjd74B3aVhpBw4~q1(NS*pFnNL|88>q zUz`ftimMZDjb3g~pSwSP==X^>XnLr8dY$(7tHP=-#1BTx_dWLESEp`nxm1v8;F~^@ z2qzs(v7SozWZ!mJFg0ynisqYp3sgHgG9GLc`9EOXX~#ka(C6Ft)?QhB6Kb+;sJqae zz@NHvpkm{|b~cpPHPJ#R=X9mAkA2CU>$+e()#iJv*C{bzdB}DVq+#PFD0N6^cY8gS z$keMgZEn}O;@SIYyuAO{IaHBWAb{)XW3FP5msPe|sM z3KhP<`krp3c=)!qHe@QfS3T&s4D7n4o(Z*{uU;62mF!5_w30y`cWoKOBgX?kHz(hpb!YUbpuSGDodiP|@dG2&F*XoW?a>!bnj&kQ`@edt-{!n1)nv=IbmftFw^lj)0Ka#gs7ltxS z&g^{jWZuw#_VFfTFL@>xYp=ha9N*+}Kob?;>Cx>Bnc}ED=qbKcU`k-#-npEv@L%S5 zI@J9S;@&%|skGf2W>5#m0)up#X z2%Vrp5@|uCcTDI#Kp=zw@Af(Cd*5&7Ip;giS{$YaefbCpQTcwBw7?t<@GGycL)%JvQFcW@YRu8sd&&< zI=v6ehfhkd6QT79dlLlUgpV^!Zg`PU&9_nBKpiPsb^)n=Mrs=M=^;^D@~{9Q*$ivu zMFvIcoN18Q^@vG18=PNcZIrm*=H2aGMv32;=G7H`W*!@R+p&2nigct`4szDEWjfij zggKbs7I4G!E(Xy;7mdp4$;}ad1*WL5ef)iyLYdiWRX-K#mV! zcW-R{2>(4zHdP*jN0yp(6WzazwW+Db04}J;=Lmuk#zBkzykzr8OM+rtG=9@T`?7jS zv>3$XxZ4&8*L^VTha_y3fj~a4plZ;{frr`-$V=Mehc?Uh<0B)vo2njFJckN<@A)n@ zCi`Ic#30^wtp>{v(e{6i60@xpC$WJ#`-`JR36Px?k@A%j#g%R)>=^pZH8W&z#;%#} z`4=iQE2*Jg*YPjT*X z4gtWSVS$sL>O5@F^u?O)Omd=I$>V)NUoa+X%UxItzuE1XsC!K}CP$44cfyo(bS3h? zd9;5mR42C+(dlQtkiQ=2V5{m%J3`9ME) z`$&;nL?%L^$EJC++14iM{7>~eO{Yy=GZ)@_eoT(AaC`!+>91a0BgW0Ue+D^m5ZD}q zMGsQ68bx+WHdY^P!p*{pg)AFeu*{?nUw$=hUP#)!IKG?A>WZH zEn~wi2Ry^^7WP8|SkmuOY#WThB2;raFYq#8;BTGwRp7apXbV%-1DdTG>T?$N{Jvk0 z+^=Cen-s36yMT=BdW}U-NeX)4sy+Pr{Kuk(b>Il_2CZv{I$9Eo1l6RDPZrQ)t~_fm zhdxc+w)TNR| zadvTD;O8}@-EE_pJ7+&i4Z5BAcmVfavp~ruIu#atWgOH^@q(MZwEWmbc}us`Q=`r8Z$LstZSL0m6C}90MxUMfcXD^jsAyTNqMQxYr?ew`;P3 z+dthsxYbGG)?)&#-H=e(Xqi;o*Y`R^x~pn!IGt- znw0#TmmBdq*LZ1{<;X?Ki7dw0gwkn&9s2ffs$wB|+3?&CK4(5g z<|pnuyPqCDSm40j+VlEC@Fh1N8NSG4w`_!*dB9he*X^24Ufg5#s=^pG*I;IIGoX!@ z%L?Lb3x7gF2h)zy5!PJ}>K33u$DG3Ir6=7FBQZO~0eHFp+BH$Qb3BMY=T<{{b%d)y zZ)U9Oew5VI0~o%i6hgJ~l=Zm6!FK9Qi#7YWI5_g>lTZh?X#LJ&f#v&6^b*b&w z*)W#W{9+MROS#WZqJ_CgwIal-8FKFWkOR07%1W4ZXbp8u4oA|L@b__k*u4@Rd3GqI z_F-1!ZQFq_3rBxna$odwAT9g&BID=3Jq!QoPqu`QYZtqyOB)vC2)3?JPUeim)J8Y3 z|EKx}c_xvX2Z&07eT8>MQG;IC(o~%|c9PWsV-%8!8(gHopxE^tqe7!i8Bna;F%|sVYE!k<<1>+^T&tDj35n zi<+v`uxa4w;SNu`*wAVnFK4$M?!qo4h_uspY_?8tYY`ZDTE0Lr7vTbigf1WcF zb`&TBQSpqiNc03=^}wa`En_M89%wfaof}AN=kxsn9XMRJE$>U##f+i#*Zi6M@Xs~I z+maj7VK?@r>+0&3e1wEfutp~RX~mZFOOpQ&(H*!UhePW=Q1nr6%0jWKg1sRH2*;J zXzi2s5*Cv!6@lE9++E zRPN&He9r{3+F9>`jbz6?mfWpXI(fJfWfO`B$Uf?Z>pFel*%lX#G7j4j^IotEAYdf2 z`KylOlnF^j8j_8sGj9cj5$EI$mQ;SsS9!!;*N z8&Im>CQ12$_(U#PLQVaun33j!V~!^M=58O#yIj&D({9%R1(ybOMklnCLc2RMm%mj< zNTRolgZ8Kr57_^ZObC{3vt%p!8OC0g0K`IMk{g8LEaz?z-Zibs{r1{elUfQKGD4+t zXvcx1NclMaSd1G4dX; z3j)X8e{a3fRWAcwn%<7cO?iWlC;!{e{J9qxM0k4IC(#KDl&4rhph`ix8Ilw!_ALJL z5mqzxBzp}@b5W~YX-+VdUep?Wa;AX$x$%%2mFAAiYUOHz;Xgby5u6k@UL1e(Z6UG# z=m2n%I-*9Bm8Th*mO(ov)aC8oIGqAz=xI6Kf``#cHX`u{>xbUiev2>Z!^a01BUoRE z#^%fzo!YX8-(0+p6Uud5b5;musFA^eyrcAle zfRv!Q5Dh@>)tXj-SgAL^p^dfeu!s-N(E%cveK#;4Mz6Ck*)Imw^X{@@mHEqyH^ z0h4|;Ta6WvdoIOkZP8L{c)6yYL22U`^<8pQGJ>dEgwBr@@%N-8*|zh=@elR|d!uV= z=$6FfaQo1lB!9wevZOsw-LJIkwUr?|FXzZ%=qOclbc?pxIa~&8vV#BEEa5>dz!UTd zoa1`@BJXE+Aqy&9arjzIp=~GIz37rr3Gl(yVqU)?R1k_9i!I!~|9g*Z9HYIj_*3?A zaJL4ev2dkYN7m;$&?78tHsB67UMMQ!1u+~CvyF!32$xx)4X!}THFIB-{om@&J^v;B z(|zmFy6#@%Ub%E>z>p6QhEVIOc^`i6M&y4 zCg70n*-yvJ$a|oD%;NPT@#?;u&K@^Zox9`|DWKhk#vL}_db{|Uj+8dVE0C%W8)uw1 zF~aQL1NBZSd)+)*tO9dOfDZ+{i9L1rx{XnuNOYievU;#j*fr~t?Q%t8z5?{LsEBZk zwfmLE5YwN>x`Es*$k>%l?&rg1wNoB*F*Ex5Z9 zWXSIM`2>sI(~*X=E*p(<#+AphZZj_8__+FbvI3sOYKNEQso`XJl}uT1 zk0035qQesCN8#SbZz=;17QiWT!9`zd`cm@N$}{A=>b7X>rU$3i4b01kgXp6=`V^Sy z?l(Zl&#emHC`}+f#SOJ=CUa535DYW#ews4DGfN7?cu-V8S1-u#AzgPW^_lIO-uE4^ z%;~#62z&JO=I{+kb9~m7?Q@=3)7>0LsvD|PU(#yL)g!*&7_3BGyqEaaNI+gpJ;1$j z19^tT#zz8!l`A_4XJ@W1(7gOU+=y`I+3XhR@Bc>?t~*>h+!pN=E1qiauIe#tA~FvM z9C|JN)43q!=ziU7?K>k9aaFq|xb;8PX4}5RVd60fnE7`3`Bi=xev#RU&s=s#lPZM< z;H|swNn_=4kJ&zdX>+K*9y$BG(FNF#`aHw4{i^lnKz7-2onozs9TX&%#fN>)LPNgO zMu-A4qO7hC+HE>y^1{9kg*CuuHQlKCu{j)OwI=n-5i7` zAm}`0w)FQI06qgTrFlmqJrhpP{njX?8JYKeVJ4l48q_YbC>o+JVOPknMs2!#(=G4j zHstEBHJ&bch;Cd>yqT5I&M&o|mVjhjyAp9Y5p6l=Xt(#NN`2wIW^MyIdv-W<(3E|b zA_l?W+-`t_8oKTPFn#E}-N)A1_kSCCb|YDNpZ6aAi(S|B=f4P9vYt4*&@1bJW10HG z_fgbx`}cCuF_HW@pB?sEN5=qM>$ph_#$TDJ+N&uRA=`SRHf+0gWMtIfr@f6?YurfA zEu*8O+V- z?bW%6Kxv!CdKu}tliK6eNVs>SG3+F*gVsDzBYTnc={e6EhH8-bmk;=RY=84&+6v#X zhLb{<9{G;o*h2-bY~(%RZ5>*2E$tO7WCEs7-Xep#VdFrS(n@DXBPqFU$(D|VV!8$L z`wNEE4yYxm%SB~tFgx04(S&sx$8op3eD$q2YgIgV<>x=&np^mY|DpC|yl$6D#gJpZ zS`O@CY&QeYS}eR){}sPQa= z2Zu$5{7H_;HCRIZ`y#3F?~*L706@O_SKRdi$^tCuF)QL8^wWP2x_+RtndcYiuBT=^ zKRr8>wS*BzHVCEJ2fIpJ)nCos8Zaa8Hm%21G?}JaiNw6ks)`dx7Mgk7s zMUH{kUW}9ms||SssicYoKSq5G$*WdMb)P z1r;zhaYx=#>&z+f%ZZvCA8OYpfyC6*eRFSb^Xwd6c)qYQcjD|A>n585&E@uzO#}9c zk=&$gqow`nv?siWo_&QZhxgzy7HQeDk2rkKp$Xke1Y>psngHL5S(5Fdn-a-kye2Ym z=;1$-WHN!?$7Wx~a zO+fg5sWe2VZaD(4#wb4B786P+?X_Ic0;VMWjJGkF=PRB6UReE)=Gj2;rSkP8gRlF* zn7nWdJufmSQ?%LCS5CA81fl^`LAn|ns_?m(@k8q2_y(#%U8?W?-Ca!xRA?h`r7VA9 zlCw?y**!QE^*)4=m!Ifkd=$B?Afq&=O5*z@&~K_?*A!-kSkQ+ioCo8S8;JzU{zh1c zpHR~+m>PLI%~oWaPdZ`wB~QtPT)sIyrQi@74D8_dbLTyyQp$`_!XdSU&#%s!z8=f@ zB`br^)kSKVW^JxF=wcX4NR8WTUm=BfAIM&)ga1CB&ap94umswh(^F+E^oBfqVw>jq z*o(EMls|KF_hGf}pD45{EVw7;%3>Y~5_GFZMo?El3V1vBs@10L_=Q$fS6M<;{o*r} z3bvi>3T?Yp)eE;32t^Fw4_Itr@RHkjJ|0t4EN4+cwt6Ql%h)ZP*fTn{i(C*3Sfprt zQ&-|j*KOkGWWC3Z^s{@@!nnk$Qx%MFDa}_e83yeZ|LkrJkzHQYqDWP`m)nP+kWXAU zE;~C5`EGIbMoP^Sdj0+5pBQ+g~Hj3i>|xY!2tPyh2;**gL`+)%iqmb zn;t$S*2mR`1k&U*3mT?&Aw={FjE)(nbAu1gd3U?{sPz`LLV@S3U0c4eEJ_*3@<>PfCMoOnrhJ z3f0E>ZHo_14Q6A@GtH4~Vpf%H?p0dmkKX_8e+}PX!EK*9eq}xKwr9NP^x@NaDdNz0 z6$-+vQ^>a}yXO=dP-B{6RZ?J^B+-hg%~ZICHZy)+^j=~6ok~;c{tW=5EvtTTa384M z_{A?9TNymj;_R8tj4dJ(ddA6bH6_>A)fCm#0<=A^kW)o%g^M)y%QbWZR!6Y1yrLge zGUIUB!`0^VvQBFnA(Bwps<^c%3G`DBX=vl6!;s#7(7*tP2)oE+OVP||-DSCV3th`q zU+gYcC!TguM0u+!?UW^reyzA-;UwGg#N>4xG-NR)G8>_>ONN)LZ2ehPfM&Ru?PKGs zEYZQGNo~8hT}UTpr*>6lD%^kfeVWoThLqkop-0De84Xz_ z9a(x0Ov{;lKYWm<_09KbtbN+-`;VU#Ey|bq7CJx8`I#WvA9eQFD>=gFzh(=SR~xrp z?<_dXgny}#w13?pCbbSLul_(1GK*cNf;j^HS=FmF6vi#DXpsra0s|B^1Nkn?PF5 zLnt+KH|>@uyo%u?K8_1`r2xsrWV3D#gu=lBO?4G9X}C@4_^o0KbUA+HCPzT;x2;UT zpEjr=#ITm?Vf#QP(hSmV|3lBJ4TK#H-HvF{w1&*@xJ0O``o_hqEInCqfD>*NIjj~q zV?Y1_1cU)b9-2huZCk)!P=0<48tW8yXf0OP{yqB@W@u5~(a)Kt;CsVjrQ21_n0;?D z*>5`F=yBvsPxBw_UtYMDmx;768(kVjIE(yu`%XR)zc=6cNyG=pJhJxp84*ch>sLi7 zZ6-z{ta}|o$_44yu0Udk7BP+@h=GrO97F!`8SVqa4Wr?lWrDG^AG+2mgP-Wyyw4?m z`D-hK$@=Si7AD_}7~{-8*E;{{6}IF%aN__!r>r=`XuWMXZXzx?J{@IFJ|v@sv^^} zqS_Up*Pt6BRl3-3DW-D+CXh^dX4^(PO?is*tPxT>w)W?|DXSRwO5By)qn+wJ>-AWY z9y~Vo$rts4b2Z;`^7<#T@;3BJ1ce9J`GuzhPiV%e&?F_aX{~|#h+D5#x$3zG=;-)?&t8EF{?pW^7e&q_W5Y#gu7`l9&!#6ev zgWK(neK^sL93T>Noa18}%)xDAaP4aS=H;7(9V6=1;+WZt1`hPdYY5!oIMj-Ir`qry z`-@9#zWaWchpss~$NfKo*w|Axp>sn{F+n4`pg{-O=dmefp>v-TUS~40PnfZ9b%7O> zz1z9EG6j8i<%>XZz_2nrSJl0}40rSZHPrqp7qJCAP!hR^fF5DGIkfFn+-{hM&p&~u z{vTcGespi-zd{E50iI5uRNFfBqX*4xD^@b0to3|!YEY!cRLB|?gY)yp;aaXkH`k+r ziT76#bR7Tq2PGr$nib~p=x58{Gv0*MZgqIs&x_w}u}JVyh5phj(NGp=Yy4ASb>?U% ztvDf0JE-gFDsGKDqIydJ8+VbC+jqpTa^TqquD^O}Rtw`y(e$3>?CtC~C_Ihjp2i)m zP-o3@f!V`4VlL#;#_dFz?IMjv5Jt=>gu&(bzDVrV+?#aJ))YkyW|Ea2_|8|H0fZtycm*u_ zQfO=LsWo5u_V@mD=0KW#z`XsCYAdNifeepD-`=(@m*T^|+b&=i7jIvZrek#j#6q2s zWM`+w_VU{slkd8gU)HCj<(^&qidQ0NyL3C*TI^q~cdj^nSAIv(>?}+U>-zD{h&3=r z8jfn4mEeE{AF>vwq3wZoH{JG0RT%_{tRas&$NMKZg4TPp8~HZrA9+VY2%H^3o2*icc= zya>^O_ilCfrE!FB#7^O?4PwpntVE+G+s3yB*9^VypCK9BV-(f+WV$u%`Z9%LEa2DN zQY=s(4qyjkZ|O%g<+-zDXiQJtl%QPbx6;7fUvz7>)3$jw)Wyvn9jy-EtIh`xP3-kp z;u!7R9(zSm%>pp771-1a)3V9IMjGT7d3xLYCt-0Gjioq(r}*nr6L%L+qY8O$vc$PXqT z2q;gF$_-z^b1o^r(YoY+DL6LfYyBUx+R#`oASDIgC@UM7SuHL#Bppxt6w|N+L}Ha1 z8}(4BiI2QK5Jo8cR z1CWaK*UsbrY_jxY55GV8>zzGz_IFz!CU~EwT7OYY3|_EBk)Azxms(STE^uvd8Xr7* z@#l7}dMNjJK#JoBi|7uxgf(b#*Fk^9rY!P6T&=3BC)%+dS(&s}p7k zN8B%=do5YyJvp4L#ok`KyAfD5_kf=7_%|Zo?{S%F zRNe93cK+CC2H$=!>!x$QK)xjJ!bTe0eGc(cbJ+5!OFO|>IWQWZ@9V?JvZ*L z8kU-NL8!KOYohL&>7Ucwk19wrx*gdMLnuHu#4Q?a*DfooE&)$C@ZKECNQn_r6UCs2 z37A5KB|t7L#wTcBL7@oIu^giCcK$MZ?}TM3osf*)F_kYzne2p5F_Bm5WC>34ve8wi z?|9n+Q@h`*6mAViN&?>T4O>NJIdErWbV-NgmoZ~$n9rg#{U({Z0^?ob+2h-;E&|Z< z3V(=s*n9@9>q?kBN61z24HA{}N0Vx#J1phjn5(Whpx(H;Dv0&}I+wWeo2 zvhjAS%W-KW12pgYtBa)XH3Xi^N|{!!E_b670-1_6Sh}lVKkO3ZNib89z`ug(6WK4Z zDmNBVy2>J9MC&MGE?W`(WSRKjatxFPa7n3L#xe$(_CTAMTm#*wO7T(EI8-;2Y(jih z)Wtpl%luyY8IB7>R_i#1i7n2~Acl*~(j4}47mrn(Y%N+oKAQjeE6gXtAf6!4R z2<-KEA&{ft!jKeYOgDS?dMl|rbD67G&3!=b%ttDwlA-EB{JzpvdjraHTn@M#$NUvh z&x3wC`*Gn&dFT9pJ3Rc4Kd@`ONVMZ<|K>F4LKC`3>+tbYj3hS=BQ%XvwA9At-=o*>M~0V+%OnIScF=^TbVo7Knz|Sb|P=aF)JQgiv zbk7w*ka&3s4)*~IBx3PdNw0OEpM6fa5`vkRm?l(Oz!*!??_aoVq-t(Mi_S_(d=zFF z*;jDV)!F{!H`BwiN|u{&@UQao)-d)<^LM1yWkOF6_P$<9FqB@nTuFbiSr*~*YZ0?N zF+piRMO4&6BVl=wx!MN`-hCPtdbjv(CSGVMv^{gVt2djuN^JZfoCvs>%dmKDZ*u&F zE116h1GH_Uzw!Ya`(OD0pe+--hB?Hw#=X$Wy%58W^eI2=D>6+~%g@V%=%I?U zOy*8)nj4CZNnalJDDY4i%rV<8(ZU`Z-9~a$3ZR-ckT>0E7?qWBg&%lY4)MJUL;hMo z?KaC5bPo+gdNi)Sp;HUeuu#Dbq1CvGxlh-@$B=xV!xW4U;!5uRjs(83!iMZV-F%s} zp90qon6IbJ+c@fjNG;3F)3GFqQG5`xg<2C^_U?B?^H3}%8pFT3Vf4yPp>}PAYr2`y zXz8;^$+g#O&!n%$MTHNH>2(~G%@E?Wci(2*&= zkAPOOtB~*G13j%OREh2nRdo_BRpqTytZb@kgavQE?F#*iBnCS~#h~qFBKr>>qQ?|> z0YU-Ea?BcGEf(MWZT$nFwW?arSEWTKqD9s!cY0MlE-G1?WiKlfiL@-Qgl@?Xt3*~S zTv)A243F^@2xgD)c3`gxzfh!v_jRy)dANEx0$JYImCgr#2@FCCl?Jt*Rxrw8oy2Sv zpIa8$ZnqYs`C)GIMG;IjKZ>%t zAbR9qNMqeWKV}yD#*1fxdBnf+5xUAc=XtDr1Ex$o#l6%w44cRaFn5(i z_p9rV-}Dk^?m)5;%K}v6JWMG zdHk|__)bXcSDh@n-fSP^6?QQGgS=X!JwxlTj!k&?83C@amDL4?Z>K*F!^d-E zyg)KrI$dXU6w53xTJ3t)jEY5w{|r9wDRU4FIoGnwDFwvm8E7&r*NWuaJb3aob_OoT zXQwZ(bg%ZMD;b0=QcbiPV%)RQN;{41uDNYXfkRZYa10rx^iY>(1xsM!8B4i2iL-ao zW#68CZN_GPUe>hvy=-Bw5~2O95ip??Vu6StudX@BE_$$XgLc2wkSvvaRXkU(MIZ;@ zm6nLk#I_|U`=D9&y#;{uMi{u7YpV^2S4yflDj4mhxOF{)Bd*sfKK~E^`G=9 zviWL;Jx7G<4i_T<&CHzpIM3CrC>3AINN)XXewg5%ZLqg=H(#AGVx9~3xSj{XE+i7Z z&*L<7WtYBbj{Vt;w@0d?0BE7Bsln%h0rWcF=;V7OJXlJU6}{~04J&!{Kj zZNNb$ezaYkhHs-5@2{Nktj+YE4(A|LfPb`TWV(r6Ql1Ws-JBJm8dVT8n|EFIrsDaC zRHCRTQOMW8AU=-m%H|0NKp>Kx6*S~TIrY@9B+BH~Sz#H1EpVb|Ru}SD=F6+5OQnjy z?4a8FHATfao@^U&3rQs+3vKCK2_;^XZh+n{VL?j?x6E{mehXTmXGozDOKw?1bHh0U z?s6-$?|vqzfy&b_wvzhnvwJwM<@VUGU1p1G;~}aEf$VfdV;W=&L3W;I>`d$Y1!D;3 zIqzEpYqQBKzY}JEy_2I0^kl4(z>)nCcd`U$KiBBOkdG!SEVV*_VrK5oVbBnYrj&XI zvD|vg46q%?xgJKG-QAN6lYR8J2?%`@XtOcl$LA5O|I%@A^995To$63kJVjVuUX2$iuw4R1`Wl38M=W+SVR0RS6!eiZlQNAIAHp%#FbkXT_V($c z2iZ4w+5+3M?0L`!?X85*6Y8Tkw2fV_5Ul4$EY@OSxzqv65K5f){m#U?G$|AH`Psk& z2{7l}3$46FHxql7g^fr~lLotkr z>{?0`K1zEJbX{pyD)}_LuqWf(3{hgVLgD^0a zA6C&>SU)FL_27JrHOic6^|#L98lsuLJxcF}W*HZZ`l^)<#q6Wx z=E;v0SN28d%~OHnY)98Yn^PS4FHN9d-F22R%j+A&H)SBvDvb@i_vouM{EVfzzP8J? z>Eps@8{efUpDJt|Z$g*XE0i2>LHWGQr7*5XTY(4AWBqRMa{8C|#qhW~3xA2T83 zuPM5^5MwxVao5I?R@%1pa7$0otql`QTeie*ZEBdxxN$WsuvlWPCsUnNSRn|win9=dM6(w^bTXpK1UaRxRvYJOVT*)qkrzfym5J-9yPGm z0_ffTS(6VEf$q;7z}9#m?ak4Nmddwt5a|sasx~{FOWx?C zp4et6^KT)-&n}?R`E0=8EUnT)ZPX8Ys$b!-yNLaeYfaYohjN?zzm?n8v7Al-v+K$J z<~Ci~Yrd?E;Z~m5UhdLj}-~^H9HS%kGkpn$$|E z9JFzF@_tQgAy~LGpQFR}eZ2-uI8_tXMr<_j9dboEN#AT&;N28Dl92lCO_a4#47^Ze zrPI)WszG-W1O#axNSQ-}l%mv7Nxw+PP(=Akt}5c*A=yeGDeDk9%05~DWYM=mocK@l z6#pMkk0!Uco%Jt5Jr7nfj%ofw7~j1H*j2ZrltpXmH~ul4TD;n>WS>jzmeK}dO&vWV zi-oeJovgmT5{oEn5=gNSJCz~%eWFEOHn=y$anEqL@Og;FGvlHBvO49?eZ{@5(3J}B z(X>_(NJ5=s?|$n=2y!+IA9ftRhbJBH*9LAazoL%SwOl(|-l17CHg~D_TDYMt%q@O?q1b4E zJ?!s~&j1oaD+F`+1!5RK1s`T@n04@dJeWV9oz{l^(bfZU8}+N?zp_M$zP(|%EmVu2 z{6_qsBea5YYW10azcw8CyEOJ@@UBCtvFsr1d@Il$m-z~)=;3xSHy+~bBfAAhX|Z^5 zu~e0v##q;MA7CV;`F{C&ZjgLx;5kvl{mq`v`#zV-1Mdr01_lyrQ6iL?gr6(vm;G)d z&+W>~hWb@->Kg?k#`KL12YVgHQD1r5exqt#H=Cx&&A_DZ;C+uu|UviI84 zWSKtMjB+?2@KL|Ur$`>s0vCu!H$Zg8 zG)j!oly6!>$m|(+93%(z2;g~FfXj*nRed%y1-M)kLR zx!a~_Vb93GbYrGG{x37R1U^XgD5jn|q(rS) z!SS^2tq160tEHZ;iNt?;aW_5}?uAz&@0=*-l7VmiL*PB_c76Q*_bfo+z4t@meZHsE zuTJ|XC5FW>#Xlt8^WSE^!FCiKXT{=~nNkv=%Vt%UqF{Oc7SgrWt>T~M75A5vNZ)rf z=kj?QMiSQ34}95&9?C_oVYWJ<*-0nbbfq%gzDvc&$b$z1oylmo{@6>hkvuQFi?8^_ zEyb`6Sssx=Ge6yJ8TzJl{*UcyzI+_{6k2s9I}roA$3Cw5MOA@KesyDH+&#DdnJgI} zH}T`8;#6)8aN|G*s(uoVo33FP&>lP<1I3*F2=N36!!Oay81COZ{x&1^P5HqmrFHF3 z{O!hn^)o@~g|qvuCv@^Op$bP$Fm1Mrw@|p2O0zC++B>RW?sSKZF3(Y8`*Q`(@=D*I zyT-c7?I^Zm)G!YRGb6o^vW_p^MsBE6Q^53|#qUa+fM?cY55?5km1)Xcu+VYdLg8kO z!qM8wuntiap|QTCa-~$$CcmMH6FF?pS!5sPDilJXIMTe0qvVeFC156DaK+9^@9ESY z4CD2F-=xR<5h6$E*61!dXzqTumm)XVOmr#PT8N>9N!nbwL}D%eK_!n2XP zG5N`?Yv*F3shHw8W1+wr$@`+VD#uKN=GzzLp6gG@OjgXh*j#IOKCjgeM2UzPN@=>c z>y>qhC{{%kM?1yY$Eg--l)lZ*F=r%#26e#v0=o@KoJP~-Af_j1OMk-ZP5N@Bbe zQ2g0h_J(2q?S6gW>S;fkpRR5I-?WV+7%9Jwb&n~kZBof`{fV*ya4Q@ILxQ-u~J zhnmt#)h(-2=!7LvOE{V}rarAk%X}*@EBn+&XGbUuqY26t<(1oSbj`yeP z>D7FA9{0$+eNt_a^Zj=7=G)ZaY_{e7RH06+TkC??#$dsIA-!NBze}bIVNgSA__rQ_ITJ zTZi@YV=I)k4SL1m(o$Rpcc^h}yfAnAE5KqJ4!9`kW})JF*Ghv4nUo}F3$jOap;GVb zUHj;wQ9$Q?;L5K_LwR>c6D^19EusG;@vc&rPvdc?^b33yO$sM~f|pl>O7pi%aBkea zc_R}bbt#d+X99&E->2CsvR5`YUW$}GQogVJh51c?5Fjv=t4DCNr z@jQl7Fo5~}$1p!g*xZ|55aVRv;f-GA-lhtE*nMvV5PIj^xxyc4#Qgs&?v6WV{Eo%~ z>Ym!T<^hKsK-r-C#8!DHBb>&ju|58`GE77Zz~$hG_jaBCB2SSIIK-`^Nx9rF0t`Bo z$H^OrUo@->(yuG$H_3Bid$g!wNAp_VBcESk5Ht#zUZkmdv^v?!vvGV777a$?yBr^_ z5mY?h%LSRknt_8?iX*z(9{Gg15((l2t58)jlyV5ZP;`n@eWOV#m)@vM_!uwKM@`&o zPht?r<;po1-8X_SJvko3V(OF0+j^2B!GR&=0DHO7%zP^8TW_=mY1hrT`KV1ap)v`b z?WDGi-HJLG()bmEpn=JTUZMKAV5fHldWsh-5c?q-Ay>=Ti1enVpcuZ~w9(!?Jz+)-G3-ri=Y35CxjTn|j#!c4F1!FmK%g5LRjl?Qbp_ zsAgAID7bLA$5MU8x306n5MyHCeb=oO=2qWIXe>6jZC51N?G1<25MNSB3X=KY?Fk1V zk$$$BKed0wpQTE~YOP#QJMnZjKMiQBJ*OtwY@WK8=N|gvS5pd6VrG@%VQJ!0k!dCc zE_u*Q`n~&wvF~I;%K*7~B8J)iKHgZ#Z-}(R6K2vLZwV~CpYg))(yDA9glnDJ2rA8j^fJVbkjIq9xYkk(^v1u^}- zr+gwa_U*;W=oQ(cVas}it2Br)qVhNtI^jJT;CKkBx^Lo)s@k5nafea!>azLVho3}k zAXkR!4_6_?^&*hExUPDh`LyuhE2(_=aO&dW0XU8lIec%y;VcDTh4f^0Z5%!*Utj6X z1l)cSbReka1^<9|r<+BRu+9_XR`JK)c;)=jq^;f@4k8$_T1A=jI?Ay`jBuJ5afV2p zTIq3?5+{o1n}F*Zzxsd-r@&#GDM6FxM|G;H4CS%Ge~7l(#q7%23E2^n@gl;~h5qD% zxNCde%x`#8w7jYcTgz4%ZihJA4~VWYTYy4f#iQ|}@1TS9p*&5%J?AjCgP4(#&yl;Y z7t}Zg4CaKbKW`G*5B-u{3jsQ!zM$$$Gz8@R6c8t{#ni`P2Q_5#6pffQ~VD ziB~F=dr*vRg>k3b-!~z9zg0dE4C6qV4 z5#TOr)O^p=$&niU+m4=B`!Q=}@a^my{*9&hU;GTUIQi>~fWp(ZaxcUh?=kFtv&^A5 zmkA6;Ps*#-h~p>R^8-eg>0893D~y1R=nCay6*ZeUgnYBm3L%1$BYJ$tb`v5R$EG~w zxaK}3+@>qaHK=DikX3TLmMLn7)$C*L=u%?O2jJHe?WmQ<2hsI2c46F_P1|$p1AgnW zX=L2nNQ$=*V~v$;?(jPDRxd)M@|cXL9vu6aNUJW-*1oREh%7g} zbOfSje)XBE4*S&X%hlEBAvXH8z?9!yjpg)QkuFm@PO4>IHTyT)#b}AbI8caB$JH}w z#{N-G0Oa9YaTg8s;agbEmyBF4TH)Lu(G3kI4{|}fFNc}zmHA?H%tY{RVY1j^DlGe# zeo#+Qb2YPMwt8Y}s<6xZ>ABNFMlYR({lpE18Z<&>4V!wB!)u=a_otzr&ViF&VFVa49UIV6HqzDPXQ_`l8v_!){3P z)!YO1uxu}njd*ojkfG4t1iVnt@9Na{hhcmv42ZR)9~=u~t&w`n$vabwk&&6aQw#6{ zC7>&!zk({Z&a`6}dr?|bMd#<^=uFoPc~Iw@n9#6WA~z2!7i`~dNRDannSGz5OGSxE z5JX(PvAX|TNd2WqB^a+)-32nB#^QBVsTc??M%Bv94miH&%#HxP*3s3D7XZt<*NJ~+ zX5dk`11*utsb!{-md{yci%<8fJJdeCRU%>UZ{C`&MVm8=4c@w0$Qdqg(USoiifQ2Y z6(!UE1l|Dz24L$Fv#Z1i~JSa8(O;fDiZLzusHMu0|#G)vgIOHF_L zi|9&D@hAJb^~H4*sWRCn^|ftk-a{{)l8WwfA}Pm)yenE6ZDy>YCVS8ij#-;-&}ht> zi*>sv`D$iTS1!hk6!yS&3vw(36|5uxKEnBy=1=hGobAq$#t`3T@`h~eTv3k5VV$k8 zZs-!4^4>x-9zlzt)byiy!>D7^@vsm!Q|f3e)lD_D#uL(fkR+O*{-i}F^y&9j;vKI5 z=9Ud90cQWyIrh9~0yu1?iM)pcinH~lIC10WV4d5PQ=5G)PO2=da92nlSx>!-AM8s; zQL=0Oo3<2&L3sDd>{WD-gQL0b3Lg3G8yO~S#vZ)ye|tzE$*eGN4kA*)HGX8+VSkXU zr3Q7R^7s~mLShQ}5emdc8~LLmkt7d*#4xwnDe;9>`}~kfIhpEOsqbRgkjxQv!K~Ui zboasUGK=Lr+uRfZcf*CmKQkKyY0>#6;i__|-v7`<-=;xP=%^YiVsaYB(Hy-Ua{}bX zyRzWd7%I>H6TQ=LB?7c(dGvPS=3mDZH(!Kn0bWSqZG%?-UvJo%W6WNqe5n0CaysMe zM%wq+7yR=T-`%sbD6?}dXlZ|zNN9R>zR6`w*-+ZmPSG$%+Zw zlx^qba%6^ONhv@EYADvgHngsLK+Y@STtccoL@os#GCwWDCzmZVeFQ%)Wp;Q5Bx^zs z2DiXR^Ij=33T;l6H$WVAD$vmFu%m;yvotAk)^S>^nRw;-lu@>I+2c=P$90`v#|2O+ zw#wM#o`+0L8|O~jhe(nIb>Br(OTu1Q@CLl}`r*QHXP6~uPrubRbZ4!u^F^Q=4p6=f`vnSMY5vTSkI5{r-1N{aw#pAy#1 zr2>Z3xxA!MG+AwNeuG31oO}}Eyw?aZ<@1b(H=6vPINMzy&ej1Q7mEGv_MgPr-UGzf zXMA4`5Bz$|w;S;y11>s@YLBjK-S?Csf4Rm1iwEL4PkewIe{}R@l0ikbCf^AM56lm@ZoD>V>~1nf%I+VC8(yairdT{y&Xy{O5~994`|45?}s` z(BgRsE0*DOWVdUwJ(^Q)HL>3h39Fmrg7($pKC_}^mkpc-2Ak1@s5HgU7^U&e_ zUVYo&=Q(Gs^T+v*Jgmhc_jBL-zV@}Ry|1&zsdOaSf4KW(*;U>TizQ1HoW0ojX6$)m zhb-f4syO5!bcsv#&fnm&{ITk3lPgI~k<`!4D(DbntQfkKGs0_49+3xa`+%Jn zEwSbYAqx5YhxOR=#jab&W430RoOH?iScGxcrA!3a)I1z`8pZ}Fm9Qn2BBqQ_GDI}x zTyVZxjTGeg0Jhf2Cr$@dPE{H(+NpZvW%l78#a`4 zb@dT?Ee`n+Z{x~>VS+YV^tw*VxUxDkkt{3OLu@LVaLkv_@k{gDj8*iN=g@{PUs5d( z(`Va0pI-gz7QjXIBj-YkzVc_*KY#!6jow!~l=ORRoOWj%NBS$O+D0OlKA4YuQ1jVW z!tL}pw2PU)6v6utvnW`apzgzp4`XvOtRl*+g|66anXF)G$h?Bl>6AL1Mkg>bw^N5}GZJj8?(Zt=RF zBK&8!K#e2hg9VS!P-(=6P0&3{zf4OsYw-D8!zpAnSohLP@T5m8`I+~~+mBOzAEss} zG?hNcR-=-b@8Sdnnw4}hC8#i|$o8q%d%9WJUOkzvZd(XJ)4S8VlQsr)lCOWjX2Kl^ zKS@PXE-cNR6#2xdly_HrHX{kmEc+~KLi|p=l{&&mSfz%U^~&k3gy7TL4|9B&JM{G_ z-3nn5IJ}IWBKc7lpAj8gt$-wa{?7WB-`O0;H+a(*zBBMw8#)SnaKSxi@b?cc8ZK4J z9#9vdkE~|9J?|Fd9vW~^xk*8UU9;b8UJ@-eg!}@Lc~YJF@cQ3S=b$oI|LL3d^l4dr zAyWK97q8#smk7ryr~GE`eNPZo964g?Y?QbsEsQ(wwOB^wrP7Z>rGbl?aK*VY#7jVF z%(fWL&78G@I(rT_iSE!(X@g z7|BMr(bFxDc-x77x4U(99fNTc!|rS}S}Yx_BfQ^R>@l=UcP*^t4rq$Z@zH~%3T!ur z96%0v224vgzxPjRZ3A2#2Z@bo@k6}B`hI*NRby^?_#<8~Y1HhuxK>5oBs@i*Trl<& zf`n;vLsX?%WNwI_W!O%*6M803d2Y-=so--fy7kLebQ)i1MF)5})RgbJAzmD(bM`qc z$#5SQ+wAEDvW_K!tYm2sx_@Yl@sI&goQztaQ_m>GA_Xq&>AKn_2@u&X72{HyYsn+O zu?v3LC<1#Ny3&1?I)f&zJ67;;c1bb&un{Y34x1!SgmG*7<^>!Dcisdui#3T`>RR#? zPM1~m2SlO$2o!4l#i1K2MyvtqkZoJNqC*d^0X59#P>$mC@nw`L&n273Scs`nJ|NVeFkV@ z9zOfPoW$x|vC%}%gEbsHoTW}xLq9H&+aSYDIKV6710Bp|*>RfpFcM0r*AEuMS1pCj z@R`I{Z9W9kCT@Wv7-jt!G1^`?4bufhnTd1Z#+a5nQDDaDBta6q=n;5IJ+FW}bjnt% zPm;#QmjT_&;859k`+7do%ShwX6Jt8QYL}A!!r{mKxWBW}xcy%bH*CHsQl*|1_7szo zu4wP03N#f}^BpR)`?qY7(wF$OrJ@Yo?(>Q`&Qfhy?uYLgRmj3hUPA=Ep%-t2gDhU` zD)L3-EM%ZWl=;CWVFXU1YGv^Krw`4@quTHqv~_6U4s zF%{HpAt+rqKSr;s%0r$QprM&QOR z{b!WjD)~35TOCT!t50k+PLBFMP;zWlLjd&TG4R0 z*7OB?9D;hp`(hm|Fj`t)&h*2ReS>U9AIl~7Qzj>j_^u}9O+{*V4E%(C?N@+C-(LIS z9%Z1Aa%OaT{m-qx+se-Isj7Cyv)zi}qK}<9##G)RCQT9Etu1XYQ33jVZ6=P|1d4A> zJL;+-1}m)qMcucliaHX<;|VQ8x9Ny*YR-#7^l2@V{0hy?RV#Ob zs~UK?+66wlvpW@p9C{U7{pf7(6;Bl?8;_Y`T~5szb*UoSa2Y36%cfg#EL?2 z9MI$g7|5~@m9KW}JpKq5sFZDW$o36d-9PS@V0c%Z zm}ijgD{o=T%X=q$d1WE_>F&&hD^l|kV|hZjcTR6NSmM4V@$42@5Eu;WGVkloz*)k5 zgR?-5{`$!2g3AOcA<9~CHIucq{4FASD0RBryv9XreFR+yT{oWv8m5^Aq5-sJMMC%^CA4^#_qkguh+%s@I zuPw{ClRtoTKuhviT!ufMj|yhQ<1H~+3M47SC_0z#tbbt3p!KOtVOZrho?M>bc|R&) z>u#vye4)>#l5p*^qPSquoeN+N{Z{~XhR zIZ`_lsS-x8JwO=`;T+*sou4-q#=mVML9*pthvBHqSpe#3?ov`Y^{JKQ8axn7VwY5r zv0oZX+-6tZozko+F^O3r3$U45l>F+QnTv~dD=G*K(C&g?{$4Ig;~L?-y_>u3LIu_>ik z3J*7A5nQk6UZjk^wTMLRHQ65{F`ZSppquK?(Mid=PceCU=Qf8T$jcMG>sH*$&E0pA zZv)|Ft=6}z3@7;h_+(a(2OcF|(l?+frr9cxWqVELvb`oUa~1-&6v$-OGoN4b|9A7t zP0CaFnloE(%xdYQinA8D62SbG`uf)j2b7NM?e+k7Poo3XE>?-fuEac~-H*g8`@1jU zVv^9XrdCHrF(h<>^q0XUa~Cilsh}JsfrWL|#^)G=qkV}?mPbPr2GReg!)3=B^Zd?$ zLJz)jwU=slx(ZjM?FhE4`|9oej6*3}dNIRYPaauBaY2q)rO z6%C}9s;Grx2>4pX0=xjkn6m7wjk}v#-u@<4-kj@M#oq+qh+^YQw`#9;LFhG{`YM-d ztbEydNw`%BF@H0jbR7q};kJ_490a{BN1UAX-$IXyM?g1WP;RjnQ)GJ^;ew~WJ~N93 z&cf^RwHgN$vNccRY}h&-RRIiz#N7!WbHxcQ1TqP}`i%(d`BR@n&<)nh%c0mh`ei5( zh#_xgzVcd9wosmHl!#Yf{g!Aw?rdg%EpHraCZN@ zehpjcE$;pVo2|)O#wJVakT<_Lo`_c6jf@`OGD49g>d8jd6_?9A_Am+#4<@wed8YU6Qw%wSPz!S61Jmree3 zL1h2wf*763Q$qS61jAPWEOg6LpHUQHCfsu9enX)Ns=Z z@vqdk8IVtw>N8aLpC8x6)&MS>j;sd`%s7)9*{5uiURP@XZ73e6O^~cm+3Rie&{ zTVaf5MgoODmipO(tk?}K$c^e!U8^r%kc97?U(WQ{v}o127Kr@hC_(=h&dS zvR?{{s_HJ(xz(yuk%%|U=>msNWVGGTBap{M_wP@wLhfx!q{MArr5RvyVguNOo}T(+ zQYh1(s~dmsSLex!F?4(@Eua8c2++iAHA4BZQ=W}EvI%)G2M3BTF*M63&ZhDBow%4m zv(Xu|ZZa0<;W>pAHReuWEuNU%s5SgFsb9Hllz9_-r|iFy_y11k|9C<`DQ9PA`%iVM zRx4qOz?ud6TBi?`d;PfG2yyKVp`-kDZ%59hRJ0yayBF5S^vlmGcCa!?jZBJ^6kCc- z{eV`I+H^GYv4>YolNp1nOD%`S)SY8T+M&AGdXwl08VoCpx;R={UTz_ca**vms8;rD zcaGC*k*>76o_?tjqD^g7y6s)jo`)Ry~@I)`O+3zZ*HKT+pWG zzW#f4iVfSm4TnZ-Y0FZfj`k=<3mI9`6!FAJ$hz5&Od73PL};^>v&jc@4lS}Lk&K1m z_QM6u$fQp%;oCL;kC4epxw5#Jw4K3xpqC4921SH`Fzw82SKE?%fbJbPb%a~jI|=JD zNI}CIOD<(z#|S75zpaOTtwx4WrfGVZDb{7fkHyr*X{#JptDH5`ti&=qU7X#4(DCpz z{srd66i1sk=p=Y=!)DyT5J|6ktF|rkUH9?mQsG=v*}n`L-li(Es@F0`={s;y(%*Uw z9;GLVoBW^W$ft_P8s%nJicH=e2{MYw>P=5#Uf|^P!drSxVO-lv&|Db~Z)worbyr;6 z4qr;hofsRvBv;$<`m?jM)AY?UA=c@d8vBKW*zKDBO|R~?XI9Yg`6^ii#^RKUJ^kL( z2lZN>&Bh2(kD-cwIrBQy`@o`>j$3_xLj{ZZbqfdt(A>M$z=)1$qq6Cth>IM^W+(Cls*z+5eq;N?|0Ji5-lYK?}s7Mldt&owuL(W~B#!}K&S zPeq!=)b+iehHc;R+XK)ugwNx5VS#5;ql3JeqpZs%v(dS3ey05KgtNfjjQoRDsn8D< z=B!a0?I}-^lL#cDplo)yeSuE~z{z)?gOel6;6%Q0RQ8YH?6YL}jpC~fYHF$6AsE%g z@rW~ieRD!<<+Hc8>roVNfJ;Yjv2x%7ab3DLprZy=2Kw@zHjeDPt8S1Y$tNb@6$=RI zkl`BGf|rB{Q}c^lFh5ez)@LJVP4pPfwi;Dr#G<7gmk*cZE3Tj3xIy0$A$-SbVL!%! zW=&+IpCz|Sb(zXTXN<0mC2?6 z&z~{h+>M&wn5Cl@>KJcQDM{B+)&u9o9QwkLRahkdNv1-MVy z*y%GLhfg0h3M>znN@LF;OuISOlI#i!1R;uNO*7KbLutt1+2iQZBq6aaxaAc`FQ_^^ z9w9B;bG@Dkz53$LD}$4WqF+4#>#2}jx^l0_%mYMF!}VZ-l6GqOgV5pMvZ<=@&E=GM z9wEFuAoxcso#Q4_5-w^_;I0F-#}y&^c4IVy(_JY;S(Q{Puqh8+7)#vl7opQw3CVb%YH7X8zHwGQelc5yhOiv+Xpsz##>H|q~e zho`?}7aorL4sdzNrmTeirSCOBvI3*s_qVuw%PkKMFT0nM;B0*wtk!UndME|N(~`Dm zH#S@$9@e@&F}>{89tZrHR|tKPR#cL2ABS3At~n6pWxg4Q*KGn2 z9|EbzTrPOWNUENgJn>iu*f(_|lD!6-C{+2l+LrnF-t+i`KS`Lg|8!^&sVt?YVZc?Bp3!-T0S>aMzI#Pg+I~e!-jk*EBkurs$~0PI zaQgTGq}~{yMt|e--oZGuJy5_PbS!q~lt;_crb-~-z_OWHhN7_fxCub%Et?>D)LdxZ z3)GQ?9$2hunG)|DbC+heOT}!+9($?zx^!#i!XPi7t1U45d5n&b_r;>2Hvr#JeLtS> zXczvhIUWpNTL)0>K&9C#+Zf$BHn6^5<)vYc;w?qS@7rqo>7M(GonTF_Ni~5Q8*(h& zjlD`sU3NQ-!5=Ffo2x3}_#6rvr0&Mu`2yf1BW&r1x4}xdnBp)CFQ9lg8PS?M50sl* zKGwZ{>f99cyWUi1vF=Ii=tJENXo82^Jkd8OY??C}EEqD6vzQ#<{}|pq#no=|#aUun zPHab*(%>l=P_@JcVgRk^=g3iroLV)kY%CbmE=R$R^F2qn?`Y$O4B7H?**j3g-tCxV0JSTJp3CM=)|S^b&JCR!TkRvW7 z&2Jnc-IeDd&f3hsVw|ir;00}z6K7aR5)HN;)?DD(3&tdw`;M0R%;nFyCKi}ho#Ovt zSL5_?`l!^mkTJr8)jdt2-M(-dwbpHI%5ZvYXL>m%;fc-AbbWPbd&7IzxgZV`2i%`} z$k~(DAU99CVt8IF1Z$UUX$EYzxuGF~u+L>|OPhTPX65~ppPtiW7v`4l2J!6G-G?9J z@g{9;Z6niV$o=0tI;FDh+>$3>-8-7*48)sqP zQV$05ocYLZ3t^Ho`IO!zYviKa7X30|2%-=U1p?%hJN9iw6Lepp#-;7{#oE>@g7QiNV1l+lrx(9qMio6w9!tU^#DEE-kwxa9o}Q;vaukFd1ma?f$HMB^2VTM ztr&nyXEtD`E$abp?NP0#Ut3y5tE<`E43 z-dC5n$FYNv<8RYV?uqbuz!lP!tpOsq=VZF4-Z2wfLkz0s%!=hxg)D0FaV5+wP~Zxg zr<8u4PT75+tTYh#YAIuz1#&WQUv%ucc9{MpU+WW| zM2mCowHCa-?|^&uzt)5Nx(okr1)HBKdb9||JeUG1 z?-e%9EUqj(L^JQ*o8=Q!jbPa6F|(SjjHU^#1&6#&TfRM0d%RfFFMm8Ok&^1?cw>5J z;hN`4Y5OZ*-u)>JHoCsaT3YG?7>CH4LlFB8hA?jbpch4b&a9-$Ebv$rJ(u-QT{iAE)(z2?>{_tdVErO|kcL8d%m+l#28f zg94FiMKyVEp=FR^P02f1<`As8wyRNKEH-5Y5ik-r#}!s%rl}UASse1& z_4=b=c_T$1qqiJG`+>>tvvutYhsP#ehyDwU{Yfb3i`FOO1M)}7uR%Z!q}*kJ5a1eRTL0mnwObYjc31+} z(OXYA&Im9;xBC@97=7V+=F$ft*qQIJXy#R;Z79>ixGuadTAWPL028oP{oV})K@a?& z8?75T=96;&IIkbDxWK@w#^24n1A|w!4;O3hDIqd4+;)m)Swv&~zZGvGzfioDVnVC` z&+iHR{1*y?v}|<91baJVSuchj+p5;Qz_ky=NX*GL1J&dW#3-IcNpRPXAd4zlURvIk6(zEvf*!E45wGggG zt_J4Tw!p9pB?KEPs7nN3vAjE+7?``ceGYvbyeOXbUz(hZnP%gy5fue$*rkleTeX1z z=5>3eZ&TTuOK2f`*+8QD)z=HNW?J)h; zYjyunrjqPT5YQ<+>ACp*OGxv@^CgMKk4$cxZ%$McgBFMlWSmQ?y1pgBOr+tGC~vQs zW>j(=9Rr`{h5O`WrX9DI3JvvYaip;f3X*Y8%>b94kx(U64Tzk;>6=q8+ItJ#J`6({`K6GYf46$wTMf?Tn+7LcmDqiA!N zBu1^T{Q|Bp`l|o`M}*W%J0fm;U`Wqx%YnFDxpl0+?dvxYvwekd(TpR1?Zoyks7+lp z|LXjof+7w3saPf5?fWGzcKWPwmnhj}vGS#%9$0h6St0@SI*)I;Ip<9GktDZ@OAZHc zI?$old5PhG+^9*>!W)7W?UA<*br(2jYV#ha_hCr+l+Lj$Zh)NX5>?SES$~!;>qs;< z=N<=~1FEz@?DbbKh}11hY9%$N%3ZNT7PI@weR@SP#M0co@Dj*wOT(mu=U zvO9UMWgefN%47c~FdD|FVIx1tC8DQc%@A&{#kW>F=W@4blnKogfPP4|m(Bkj+sOdOg%Lk9UE*hq^5+(H^f^y=HCl*L8;_=f( zZ-xiq!Mfq%oBzs&d>=H`kC3)8k)m>RWotcWf&`#PjRQ!i{ zHw9~F{SS~MGJBhDTE+oQW3fq2@7`||o7^C)8X6it^hWejFsi>i_&>1n|Na$W`_0$K zh`_~JtYPhirwfk8PXa0+-JrbXx%b57{l}{_eHI>m!koZ~s(_YQ*&G0inw`z*=~+S8 zQRWK>DSxWSlWh+{_?ZRz5t?c61E>biCw#N915M53J!R9d6gen491p^c?TqNU)aq|| z=qsPfrOkRjt>nK6f!N7?ipn+W%N+G^{gR!9#cM3v_h^s+ELil!NrkT)q!!cuG)o%Z z-ORlSRWCD}G4l)B9vQ@(1; z^wK=NU+v|gM`zC#kpg@>#G4U%BrO!cPoEgpvShw^MoLY`THkYLzdsNz;m6~naUS~Ps^FhW8@VXE6HmF0ugIZN~B*G-}kg0Lc;%;NCN=N zC0wM`+;67w&i!afg70bT#kDoFR-p@>d?eEAzxet;1+1kDi-uDyDr0PlbE-BW!h6em z*BX{!s&U|NL;5EVFVwHPdpC}r!Xv>0Z~l&01DvBwzkNL(&{6Ts8^~~OIm@O2RS8+R zf1oZM7Q}!5wmZ7X40U!(uMubgXnW9{UYxVc0n0n4gkyz_MVk_M9YYu5xK!3zqEXep z_*(7JSD{%i98i{h$zp|~j`+T^?%vM@hEeV&@$B*>ukPa|s3y+<0>~I)vzj$c*_7ma z&A}weE1Iu#ibScNoD{~_E;z+mW>Z(_3d|>wSB9ppm&^uWp&qDWMVTmIDiq6HsDJ-- z_K{?|KzT0Ygp$wqpI&VJ8asd@snOhKX}+nsxl>=v6cHTqXs4+b@WtGDy{V zES;t-o@(ZXY?MaanKYSh3P2^(zcQH;MLBPYIX6U>UzclFSOVe1DlTnZ3CrqUgR903|3}RNgQz{Cy*f^ z@1f%XL=vsrW5)bLlb79C&rMx~`Y9s`yTk!y^3XcT#?KTv%?Q8>o4b6*{uCU%{j8Da z?Q(6spIWQfmJu^{(K3AU8r5oQla`ip#B{Ic_1Qif)3N5GU!orcr`KEsa(3YzU~VF@ zb!;m3dN|OI;oDmM`ln*!>_r!@7}k8wKuxBI+`aIEKT(ezoLWU zy4x=fTMGdZ<4hXScB5Yc-xm-oIG`E#@NR)m2X;R~$0UW-;Be-COTd98o7y^z)SVY?~s~>A@#;}+L`F-mV()}-AzWk|KB&$Pd#AxxD zq`PK8)u=k@V_G^oNmoh^(U;Y^ZNqx1Q2pkc!>gCX!|i-Nzw~qZ;4d+tK6q(cNVR*u z4|hrJH;AsL<645NvS;xXW2vFAfHgGY^(C~!{vD?0SNB^r(6WfRAuN>@782*xz2V($ zrSr88MFgUT1~f0zmYv7!ur#<^)6tzI25Mu|+h8e}=wf+7Hct8Kpv4mbVfH=PF2yVe zB76^M8ttqxlONY3DAmk^Eir>>LnSVm*TdgGU4sdH;+eDGd>w&lecL2;ebMMqDZ1f- zqXXo`R8eT%T)zRMPwA+I(XRj}t(8y$=4pY4y2z=E?PL`cfp|72QTVF98mfI5XMrTl zrgf1aylJxil8aIb4h>)n&A1Rx^qxu08tQ$M8?n1TJx;NICX3vS%N3%&BiCMq`|ByM z{J#HftO|X6FV_3B(Epjt;m?ny&TFT8%oRUY(FY`RBO!NM0{qY)^ZmH*v!Y!`$Dv(@ zP)IgvZK?Z~+FD(6mtMl+bQfNoOvOb13}k^6jGc5FE&a%JD_bEJAJvj~A)5Kos=~Ra z122q0)BafGq|2;zoqKJc&@kB6?k0fPdFPHz79@V>(LqJ8u1SxJ4wO)yE3`S3M(l9VvI`$_Rqu4Ioq#O80 znC*u8?DKf}AIZ*koNV(a$nr1kLZb0iNz+8wU|pka^?_p-HhtBD6!rR#wPeOdE@W7K zL5_3bD`gf{DMcx!5DZMJ1g^Vi=O*>uZzRwk(MF-;Fi#_6#0KJl(R4RTN&ERLTrgOu z4P4x*A=qf%Pxhyq6oCj{nZ0g!$4nv6T`@Wg2%`8*2DsZ>zyL()Hl5}iKpILrxqY_& z6;7{Z>Y6{WS~?($$0qTyzFuxxb#tX~Yt05n-NoUxI2)PHlyJ8j&ck}to%;m>h$c2*Oq7=j3UWv@1KhqroeIXOJG zs{jAAUeleVc|{jFF~}qUF`yc?<&ax(Bh|i z%3W>y0=-%Zet}n7t8`d_&{pQ_Y|!0SYrm~$hG@F2v~)&i;FV;OssTD4At=sI7~{$6 zV56pk*>M!M%}kz8ss%uxB*OI}HjlTlghe=cmjNJ1q?Ws0`j`89{$`&W>3Sdayq;IR z(L`RvS@PZiln`OX)hY4MO}@z|yQ6Qsvp2>`o04j1ebf)=Qr)(r-93EuwGQ?N#wi+`#9AGSM zf3DI11`~+M9OShp`xooq?QaCd=~(OLXQC`(d>T^gyAv&4T;a@`Sv`YW;~E=6b&#TI zwz9v&#ud?eh$5S=HfWB`@n27?1^SL!oOC9%;e6`G)4r^ z+)RB16u}$9mTpQ@I}`SQ$w}Vv)p`HrK9!giz+oPnjCI+XX>{xS=sKsgY_xxKJd=`a zhOCpbIo%Yzp$X_ zAfpeMi^(fhW=%?Fd)f6>^YT=B{d&#v#hmagob}w1b#6x4T&v<#dx*#_BKrZ&@t4|= z?H<p-4Q6c; z6K@i2EkdPtAYd6crvGD&%K~ zT`%f|ErUOcqMFdC06P<4o-O}pWk0-4vlqkG+7G@W+IR4=`Fy9oKJ-H|(AglbdjMbV zLCFW0Wsz=@n9InV4zZS-$qJvUimon93zsFn<7B-kp&`E9`pFa-D|z2KwkhFLl>9&B zBzxNlrM}<9U74I8S6D!AE&awozfciXa4;mVs`9yTVHR@Zp4!^lk%2fpkJumfsej1| z8n11~n{#`rrltf3;wEF2yu67=+*1-Rlyew5t>5Uljy~Sy5@yDne)@DI&XxG6*cb&$ zYg-94#z^L})0`s^j=yWkevWf5Xf7$HBq9G2l37v>{uGk+A>TA~!e=t)i0}6nc?@kL zF7D!el}I-iDGzIn?as?HX8|#X?q%8zQ`Nd*;&1e|ZM*Oa<41^)czS~XBuht1pU}am z8LPpZRO-IUv3lu(!w*Z4+aZJ)9SQp(y%Al!HO#JfKA*nTLwBFLYNv=FjcfA zfX#^!X13*J0{jJ|-pe4x{`Uc^O;M(ZgR~sIPH+P`7?wbrwC2hb!+-&7HfbR!KdvIZ)V$O z%*TQslZ3nabi_S0Mus}f_;`%xBzXxa9su2c3YASApB?*6T5iidY14V0^Zn{KOcF-m zEm7pv{V^*tOm4zV6cZ)%9$joup-`A+ujej(maFvzyKHV^(<_J%P<)Y1bT0?X0)1tp z{dXNSU{^pDgkB_GH)h;}jSeR%=I-eS?7I%?t18|TnxES$EMdJRIWGNNG zhX-OXRcsK2jcH&a)tSz?7=W!ENtv+oPJ!gA{>^gpFdTqL`~D>BHlRHzu;8KR=v2My*_ zlpv}94x+TJheJ9`pC%6LDT=qd_=FpkPgR&N?!i5!awnoQjmlD+Ar+r)g_kA&SLkU7=0~i+} z*y|*47Y}gWm3^#yCbeBpS8Mx7cwG^+x_#Vp>$m29b-sj-eo3vpou1!i3taHRl zD01GGShHwjIg_MfW-ZaqWL=)kl8oCL&9`nxVq4x;%K^&E(-m9sa?M>_4hS`X7z=8m zrHeEbZr`JidZ{9S$)+0R$Od6ei=ZT`X63DHR7c0kcZ-en;~|xE?qr5`nsnD>QQpyJ zg-+d1)B(wOxp9R@9X+{QnDYpo#-=N#2WklenelJo7&cx?Zg_uKV}-bG;eIy5NKhMf z>%Wpy+hw6|G*myl+wqtZ*l9Hnix)3>495m8jtM;h*$zkkX zwH1p~1&Zf}bB8W~fTF@mDZS5Xb{zepJ3T4>4R(Hrb>wK|6ty*m5rq1%Qq86_2>%%D z(+9p5d3M}JG_&8jGdH5oD5P4^@JwzsQ%U}@hf3vdw>jvZvVCNhtZ`-cSj;dP_bAgj z2Dh`R54&{pjvosvzrOWiNT;d9X?4GBq&pU8?X_uG#9joXa0%Z?FhE+^%RHw%ms36e z;+CnNR7jNoBi&`aqu*c?lwuw#J@|s2;i-i0~R3}@?)Rz$K9xr=xBV{}~J+6E$xG42)os^CYt*z0I9KXwUIMhcu`BP}vZh7@ybA0&6iDMElh9*9SOJB3v2M(=GFH$yLb^Ux zLXGhIOSRbE&vW=f)ne=aH>$-%#?tp+)hylmNBx)dXbgM0($K-k-p zsC7qo01%l(Pc?ox0c#WN@6n_)iJlde&7K<7>rzT3an7q|s1}sX04|dUQ{&|=2@gh^ zCd_+X8y5qGnF9Jq_BIX0tE5fajtXfcT9!B_!p9FPV@5>3*| zN8T-}De8|154UH@EF~|}>2eoj3uc9dpD@B9Yr6Uh`0!yU3U9LQuyd=#Y5lYCnI%bH zfgnGM)f@2;C30L~&Su2qWLSom-xH2arqVF}qTdDu(D78bap zV~XKLmGjQh!?9RlYLH%ZSHfv!mBBad%4-mIZ`&`Iuq0CC`_=KOg&JjAlx{TE+_D>g z_9M_Ntci;VV!XoLw}$#miS(wW%F_rF>83~Q?n893DS=fuz^2_{}^IZ%Z<`(~@@e$V#i%1zFM4*QMGcjsj zoIIo)I-Qg7L?0zX+K?6-zfpi?qn_R=)E&xLaVukC725Iu{2t2)x} zw>nW>Z9BA}La=x)wzmhGqL+4H?J%j?v-lSVc7PY0@?IifVSa0NMFQtuHIIc^7;^CH z+gh!lJHi$gO{~u{C_BpScVJ)P)MxLDa)BK%mN*`xok`u+pEz`w4z!ZHUvxVBzh}DO zC}r7|=;`8KK+g~d)K9&ZN0=_FP_&m_DO~ zuur=@wBl$nD|CxiAJtdG{gieb^%bMWR$w++&}N(p!c1;DB`?0@eVw{Iz0@@$$h+k( zUQLW`b`ZHwkK z!rDxle7rkmS4`4A!*a|Oz-C~*J>^zw07PoIEOQXe!+Y#(xE50Q-MNZeObbgMZ_06mwB2x@+%?jy* zsHr}MPV7!Q`(LWNk;Te$hka008Q}2Oc^pNU!3y#F_a|xbZd&N2df?AtrLHRa=Of?T z6Vmb`^*w)3Qiz?Pd!HN%n!G(G!<4!M7^QjFlk&gKZa#T9*9g>$A$i@^h_Ql>mYCD` z3clqDLW=T;s-5~iJI^_5=3RIQQoE#UaKx<%J=oE3u7X-k@6XWvYZgGco5Vb4&De#a zYI%pg69XV<{RCZfMOJeKsaOpe=(hl$0WUV?($d_s)n=A{0J3b9FbBtE2Fwoklx|J_ z)@wZ_H0=XEeCs3ugMz(Cf<;RH2V+vJa2Dt85ut1S_zQ>7J}Ze%&Y0YMmR7{ z&bdCdDE3+*7H((LvjvF3PAPDu6v)LL!F@~gEOzjIHS23{koZ@A{F1zJS#}aOWhU1I zOWG0wwZJ~bG|EPd>rH&|(V||7KR+#uWfKwcjK7?zI_RF(m-uq>{1DZc-?zZk6Eo)K zvZ{}M759~5q$%4Uw!$m=MV!1OOwqRnGoiC}Xz!k%mFEocz?%;-Mv}=R_0g;+{(xrZ zKw<8-{~ep-tyh45DMH6gPjp8Wf@OT__&N3LXQ9r&+zWPw7!1Ne`AI;Pnr^^~i}dqy zI_31Qd3yU?YRC9jqiWSyg#M6gp@yEC0zIvN3-1KIXZX-yA1PYgL zK8$MUN<B6jks{={fUmPwj^bOnUs zIr|#Agn5Not-E|^fe7B0AY7bWJO%JOi51$^6G|BKS1&L9?-I0_=;f~TrD!gubh$UM ze14?~s3IU}>#Nu3dRoR=n1d>*9q5hCf_dV~Y~CM*Ac#N}BqBWNa7wzCWngHdLCbw4 z$x#)YWSw;=#Rk?f{d1f)!wbx;v(J~a)2F*q@7pv*Gof?FeAjz~JMOgmbW>6P!i5%J zbfY+az$}Z-+k_wY1xhHYue9=;&wAcoaWvX4DdEpkerdomt9}SEekwV5D zq2%yY{fN5_gGE z`!B6jDKCZD=X_{2c+e}$#$2X`rIc=Km2~El97=)V>y^K~(2o&6jpp=@e0aEjq;vTE zfNCcK5>2UG>O=L$P{zEHm0|#ZF320f&$hJwU!1*XSd&@THjF4Tih_s~DWWn00)mM2 z5*sjzfQa-GB@~57uOS2!ks6{RO`5>aO9%)^2O){H0MdI6y(OU}5W;)Syw82S_xQ~H z-E(}$!4Ize5BA<`uk&2zIv3()oyX0F)tZe7_uYDbl`a6kif(1=i7++f`5LPIgAB-k zSp?`q{)6;$>J|CJa%rpJKUsvrjiE%OI8=UMUQC;mJ3(TOtGDXX*Q@0Cb9 ziVa0s-;>p%RH)x6iWmLofdUkv534W5F)%+eII?OHuWVl{dqXx_Ufoya2=xy};?mjh zpHp6qR~EWVgh9Xphc_Wq>uvk@P1p1J94k)Ebkg(O{pRz%PJ`4;Lir7l34RZsM5Be! z=wp`Ko&5(*bh$3z@=bbmjT0xr_p1-nAL?GXrgne}TxxKe#SsFwm-}y+(EiAOVkmtk z^?d=ak`ABKh#QCoE}L1GwdpRk$2gpiSMebD;J&iQo@dR0;R2$EK7)<4YoG5N-$3tJ z|4~rj3ZQ6GUXE4{PFhfiSuO!N0@vz4c@%3g5e_vLPg4YBX9DHY4#prxQv~plk7tj3 zb-4!l@8R)HV?Mxn8~w?7m*aqXHH#}EtbMS7cH|Q1vt1{Ldrw)ZH8p+x+ZfOs@jq6g zQvYKmY7!4)objDz{lJEp-$@6_0vEv2lgH*dc@g_O^`I^|pl@L$Eudq+S~ObO0iPf+ zODn>r9&}Px2R5PeC0!E{o$ctajobHLx&0{!U)+9|`lx!GlJS2P;dB2%5st-&ad?d5 zmUB?s=Sn=-J;EXDGX{Vi0q%D=hB6Q42BP10QOwB3}ahCVV^&qh%+Uu9phHu!hj_Q?J9b-S8!fm{3i@}a z17_EjS=S-620&7~TIEjdp1xrbvai?-Oh8S#EieDyg)vjTms}6nrt}BbW45PRq0cR7 z&r+(55!WNVV_6LgJ2*W5Fe&~1iEp80si4U(k{ zI>O~cD_vzi?-R`W6m;a8}E~;oyFVeSKFU{28!i(jk&gwk-`2lSb zyPnJJ`ldNkK;h&2)0yK+Pc+BYOlm^&OOjB&BFqi0q&vz76N&CS2W57KomCsJ4(xif zb;nKKfqaAMvP;e0MFWX-Du!tizo7L;XPbM{>K%Z{e#w1vnzemhosD_JX}jyg#^A0i zW31|%>X>23WKtz`>D6q(c)YaL@_-~~5Cyx|rMB~YW850R&KDc!QFRuMX+o+r$lB|2 z8;<~C`SlTX>kF{CX=}c33-R>_HZGlW7(B?NA+@e(LDhY6%^eP_uCy-&LV+<;Jwz;n z-sMSGZfDNit!dyJst&Li9!O3(KpdgI^mmcj6@~{D5&j3gS6TMTGH=Rb6K(zibpBRR zwwZT!Y9UzFdjnQ+!KPG$4Qy)Oot>c%7-RioC4b=O4!|yg5m&xYDY~DUr{`b3ndBnn zG{5M1eq2mAt!@=;l>#VqVjN!XZclHdag|-p9CAcPx?YS@<{c>PLiqd9EeCk-*J3)5 zF6o#Jos03xTKWrH-C>oY4ws|xlkl+4(L?jbvY5MpuurIh-+BC z|3k+Pf~@kNR44Z3`KTV*yvr&qAyDBgota4|7zC z`rFx$pKKb;1aMR-h`i{)6OOhhCUDfzjQti`?#J6*VRrq12OfaSYmD7NNlUSffk|PP zI)?qqo+;)1UO7#yfsUQnK>iD3YgX;A*HrGS=TKOU`Vh40Tr1((2VGU>N0jPl5z1gv z{d+g-5ZVFrCIg+TFPtPD6FOOMkjK4G15b*e)JkXQzrOujZS!9j3uTz$eNOm4O;z>1 z|Li`veT@Sb<{T%?OWF)^)w1cCtaw}B@4M6U|HD@Gm2h;gFvuP-wLMST?+*1Fos=`# zB_nML!S6I5Zo>5Dl4eVX;=E_*y=5{43LB z$%*M*+KX!7ER4$2cJeac;9hhP+Q72uaG$C{a)jX!K8)s;gJPL?$>C=n)A$?r?(51^x>q| z=-xb^f+?Dq3w&`zUxje%Zd}0=j2pW%y)FhESzf&b|wa^PEWP38pgyB z$A%Bn>UN`lY~`X6WV+q-#okdP3Ew z=)AsVYRNndC+C4y$6Y{SikNT;rr&=(`t9O}UvHf~+xED?7yZ>FKbFQE8R%6deaH7h7E zkSB3t1mn@8NhdNxO&fog0*nMnuOqEZbA7G$*If`bwe*i9o1Ip+x!QXKr{!9W31^Rh zz-<$C~8U3wHILN^t>mZbPK;5sSn&VN)Z8>}+czSX^#m*|jv}0H`!#Aqu zYQs#Ko^#PvaQ;cYzYOMlT@0n1BZh}JCa*qC_~nc& zQ_$i&>N4x)r(10%J4P2$?$^;b4cG_16r0ZVaPV9CSwXhRS9g~lQ=iIBMgx;G7FbQ9 zQK{;Whl(1aD1+@JzB0lFaiZ2`a9v>J+A|#__OFAZrV6jPDx3=%EcN{=&LA*v#@shZ zNKq7wFgRR9F~lbh>vyxv#3J8|XwatxW^)2}97>-jUmkSiamjhc6JjD+Zh1H%4;*(D zeq`!QMvIG@qr*y`qC27gg|Wm}`)&*dLmgWHjD{NKM{a3PI7B9gGjI0#DNwiVkH~)W zm0#)G}i>x*@C8=h59n!yVW%I9_$gFlXqVIjp}kZuYa}f>_#shbi^Fw(?@QE}FhYooeT&*=k!8vgoCDRth6E zs~=@_BYZnJSKAOHVk?Dt3{&q_;>Ua8`d7jf?sv^|!h}9_GPCxWRLc@PumsuuCc6~DY-q+fS$rKrLRNwT1Wxrq55pp$XFll z4LaQ3u^kK89Vh*0mqvw$lfF_$CnJC^a2}Qk3q=>?1DqJ^%lby!?EWZ`P*lr99-m6e z_Vbel0%pGvPKWb0T>b6v8?Os;ux{N;)495%93K2!m?*dyc2})vp@dJ86~_I(UCU|fH)VDe_lqj5D?osj zCp%42FAhntLJlOEPc|yr9ii$k98|TS4)u9g8L7%oOka-SzhP=FqnEIL}q)%`4b7TZeaz zeioHlE{u%<8|HtHX@CFw=Geu?%0a+r)s|&SqICXq-_p=PdYC&W|Q9qNl#=l3~w{!ND;f3Ho)9>4td)|uccPn9z(5;pe8=0}Six4T6a`PeG9B8r;hW~a2( zh|i>hqPPuV*gN{$%(P+F48E3l1OmERf{&AzpQp--fsmFrQ-V{KorWYE^2NW1N^iBq zXoO+~{pnYkKt7X%aYZt7>d!CMs@Nt}k_p|v(zDn#<6=E(9cF7#@rJj0cYQcU27wN% zuV>6?^({U6lA<}1;@y{DhLPkh28qS9Yfe->89JkCp$cZ1EO#=2`p<;VTp_(2t-#`t z0<(7U;5erg>YNzpd=g>!oJer6W+3^ygYgRUrd<1APyE|k`uh568+1y%XkyvlCJjF= zN}V`TKgf=f_BRn7jYIM_(!LjP)b-^))-HgVXbfgRQeGQv6|RV&aUI(alq$#uP#W>^ zC8BQ>C-JhVS7pmP=}-@^rV(KkWVk+}e}%AXmvZ1VIU)kXExw@aVykW5>v+}A-EKLi zy2erm_f%M2Sin0QWZac%qrHh?FF2ZEYzbrktQ$Yb7oRR0?`n!YdQSG;jbp>zPExAy zR^6j<5k*-#Mwqukm(|_)dRJtEU`tC`hTw`WqK#D@c_q|%Vw8>{7)0Y~i7~uQp|xhp zoED`_bQo`t*onx$#0E9iU(}LLHeO|{cg}2#+=*<^rwe|~5mbl&noZeW_i{4Uz5 znQ~yBpzOw%5m`C;6wT?evUp=lrur|nDQg{POsm}O3eD>FI*$1~`O97X_j~*Qet+c< z)%d;506=WtwT>vs7w3DV9Nbd1=y+J?Nb6ru=8>=KD~(&ro5Z4k7K?$+{!sIxGMp(x zOhB^1Mm(^Z`_WY_KNjK$_X)>Uw&7(hjKl`AKIP1*zWy0@-)VDu!%+AW8ha}G7*EABAUYF1yqS* z+4GC`X(>raAPK?#P^n93jkksnf>1Wkbfn0VF6;}4Tbb z%_K`EcAmfPM)JY2)N3qLM<(F2n-73^}q9@Vf22|Drmo|3vU;1#RFJJViDqu z)YOCs!r8-}UwMO8LT4FJQCEiF0{5Y+MpD;QT~g3rPR36+;{SfC#om$!{PsTu9DzF& zN7>Cn)*mYLH$UFb=QoE9ESU{TPWDmBMn3f@Xl@?%ZL06kj{-e~P!EVF1-yYX_NpRZ zQjlF5Mv;Mt?$i~bd1{TrVmMRVv^VvO$<`2OB)@f0rliL$RJ8i#sGe9zh9N@`0Y-R6 zo>g$q&p^J2fnK;&!G8SMo4Xm3N8bq{3Rk9<%eCkCn$FyP_Yuq}y!2xw6s3plYf0Wf z32O{>p+f3r#NR?cvIZ7CLyLmu3q`2npcSGzBy(u7-L1PIp;iWOu>(Bn5V1%>sh>i! z1L&2*-6Kl82NP0-#fn=lPk3>$a#1Lhwu_5PAH{3^PN{fOWaphM@kPQxhjk(u_7PKK z)=}p$xNchJ8~_LvvE#dAhUfeZpIdJv)=8I-rhKJwDdNiqtp$!AJu0iLd>)yqb(3PZ znNM*Ngx{OzaS`&(BUnt@1FBi*d_9?9&g(UJdI zHPl1C_}pW|cJty8O_RNM7JWPU1Fa&Rk`68sWga zBlD{a?3@e6dKR{1!&@`&l*ZpKfGss6{bjHBx%^~ZWtr4F@E$qA(@@$TRzKb*%nlr(aN&vTVZ4!eLeaaV9ben9l1SP z+09g>lAM|898WKd)!gsbFukjNTE;Cr-Lg$4&GOSIhj&E!SQ~0Q;|)`e#7GqTmES0{ zk1rPG2NJoN=BY;e`-;Rg+yfUxicU`k_z-AfR3i(|9g}S|w^?6nB zr+fW3pPL-Q)7lU3(Tpr2^_+${P0DKuTTS+{V44}^p^UnEc};#G;n}6R zr@G#4UCHpRHZ=8z?4VL;Bo}jX{+Xj^_Ksj=-yCH-u5h!cHT7sFo;?s=@{GV=_r{MF z`q{T76|JQ+kE&(QoOw=u!?fj9sCe74K4rV zw)ow&&`kLg%aEm2DU+Iu!a0aXI_=ft+Ow%9xz2Lg(ZU?o7dLip{;1_iNldI2^vcM| zNoASzlg%Hn*(e^zI5$_<8hDWpYe@bLyP(-Y#M)8Phxl40=bE*O#V<8Ie0*WEtQFYJ z@1?mr(ONa5(WKc>570KB;CaI3?Y!p;E7K0q;w_|+@S(8oa=A&zS7Z>wi)@T_d%zmt~YVSM58_f zZ>_LJZZ-xq)tuXKy*QA%2QeNw(;dUA3O(cb38EhZatebl_PoD~X?I#plVA42^s0q= z>=b5-u|kGpJtR=%vbU%$B0bMK`OKVW7<>BBGll|B*x4Uzl(1)~%HxLE^w`-9P6bIu zBYq=4lU`Iha#E=NW|5pRL6C5werQS?F<+{g!>63Q-<}RHHSAIL;Lng%#)ui4*@nu{ zwu6lk&{(hoHXE1~5>T@C{`)&GF-v1e zg97_8DJB;^BHM%+pT_l$hVUXB5DGb60{2Ht548%d>J(g_mM_}7QR5q2bu58mN#Xsw2@q7SSei`%pCyeu*y|HCJV$Ubu~&rpyu)(k$I8QHV!MiL>#LGz zb_2Ef#d3}To+~G7#TU5rT0Uc{$fikmbD9@Jv6ifcY58}~9jzN!yc#AQ+@$x-)Tzzl zcv}J=bMAq-ma>@Bj|Epf@orI8%o*DALg5mEG2xQ1><>%XMIzo@xdA6}CiLi?^5!ak zpY{6mUY>zF8-KlljmH3zr0dBMrI5*UK{8KrYy@&Nw@Jv!=ms7~8&*@XIt0&&wmh^AfhB#`AEbx_z5`Wu5{B=dcHL zGAgu_ewDp#8JnXs%T8c?bR_fU{MJLvq1<*TTVvNbGrW4tF@B^LK;2#O-ER8nF#heP zZVFy`mu9YQ97SfPMnmysS=qT|Sr=n5Ck@XV?zbhUqJFazpkYLx6)IQs)jduqGF6uP z9oo$QIvV5tJycmZw^c@9d+|j?lPTuBVSItFohr=XiMc}E}IYFl~0hy1XH5AoYoh8+?>Iw)mScpPHwQjmcF3|9iz?XgtS&(KyyYe zM*$uQYqZ~-P9VIL1xo&soCKXnHe>F(cSK3E@8E8*!Aei8-L!)mg6{i;Y`5Mc)wXUt z+M@#d6~}%djA(XdBJUJ#n&ds^x1g9g?u?z9dTP0q!HabO?GKwaAOaqi`)B4T@IXd| z!xih-$+ev2vx}HS(<(ci=uqe?r*YwIY}YYp*FU@O3T=KiesGS zM5nzRE?OU$6r|4CRWlbtQx*@@Vk>^1+3TVn6W zyZd@ZoV<0*h@NLU(BWQ5UZ-EwmF+=VUD5Imy1E?+lC0iDH$7gNk+~U>jth4h!!vbz zS2hKMnwQ@(x2QOsr8$C!3_~sk0i58m*BEl>amNy9Uye=X;O8Kt^r^*u- z9=4$__>)Bz&BSiN`Uz16(cef5(oUwA#-J%vjjAb*`*e~D$A zpliRWXE2^S9NBGYxo7>Zns&=qalm0uM0Fh))>bQ}V%AdUG+Hs_+2m&+q#_2sw2nLA zKq#gj(s^w$-qs*SS~aP6OxAD`|PuXs3S? zl%+1coAlE*mJ0M)pC>`j1r-z=2s{_z{yC07>=J6~cF0>!O|!2s^Cz-F4H$k4*@6D8LML79-32#wDE zcK!WsYcmtX(&KX1OWk=VS+7MR-Yp)BY?d3aC%qR^8MyMPOfTjd>>2e=uGa*(B9n*&7_}#XIAu5Oc=vN1P zF^7*TwE3qn=32pJx(w7gNPCL@6XkN?Me7>b9YN4p)ph@i3g~52tmLwrZ6QB6KrOP+ zDL_`ORt<;4+c?5Rj~@@E9Dfq7R~ZwZWPD0U zDx$`J-`{4u`m`Cb9p6Z;5D2Mz7S$37rq4Wl9PVAl9pkXc?aCXJwssgvpB_2<{@oQiRzeD0>DDOv z?^vGx?rbg*VjkT77TrGU(giRp<%NB7Kb#)cNq7}3UVW1FBDFc=tHm~^@EN`uN;2sX z`kHs&%8l$x5v_bF z%dcX!cRJcDhC~*hM}#^X+#4MxELKaoiR`^S&cmc<67TtJ=%uDVOf4Iav(YaTnA}@Fih<_} znbfYne%_}_+U^>^z~v-^4BcHr5haaV9@ejqkB-KpVS|ycR~@ZAV591!sX>MsqZLi} z^eiY^93Y2m(6x(cjXvXp(>x9f4p!e~3BUj1>657=3e7Z%V<`9(`Z zdd1R5{O9$HsEQKF?T3T_`4n6GLaIo%6BgShNY54bl;!g^jKV`I#0|rv! zy+oCn#7o_igS-o={>}^+!^0CZ9dmB~j6OT@ivCgM&jMPK&@fJKH3HrE8!2}C9=Lc| z6D>bH9URS}OZ3|6tD8YxH^vmKmK#Thr_8sAFPKO}&&>bGtLFg^^b|OBFt%Wo^DWYU z6yTP^bB2_YM>!yGOm7Zfj}zzdAWNo^SCUJ?kMuWtFF~VDbLuDcy*ier#(W3hUf3T; zX9lM?@34lG#o5oawkBsdA)ZP|iSf9Fn?$!;GL)qT&`94i>nOMV~O^lIMjLvrAg2)85DC5Pp(oU~hkfq_t!h2-4+tuzI_Kz8k${|0jY z7Wn{+zTTWu&pxO3*lm2bT5D6V9ubm9_f3&WxrxY6M*ZV)Y`HXg{%d>KG1YtWwL_a; z=dae^a6lnFhd99=*n9d2ax5hie>{D#{&y2WV&hv;^*Wq#vTBa!++`j{pO6P)r>UAu z1d1`mTSR5qGoD{c#d)jAU!jyQILcAbwH!aKy*sAIaoKI%^4T&jrjVs}1kgzeE6Q?Y z|79P~d#PcSB~5u{^*si0Mp??{j0fTrbaO+w$0@b{Udl)7q59>d@%GOw5wyJzx?Oberu_D`4yvaM~$`~0( zlbJ3CIc^BXK;hnF7<|t+!imj>ZcTm`89C}gHNq1@KEh@f@cYLzKk37KD0Uk#8@OR_(a0YQVUp-fV5cnQ~8IVK3A z#klB=0~3w&l9V)fQlx$bjRP-puWlbnPw`a~-0Cn{im}r^nUhpF``<+mjb+KV5Hdn$ z82Wfs``WPY5lieiT#1-jG!HkmgU{S`j<$C)ziOFP!L6>282UkJ;t_^L@6d$>};L@1707Y3%<~9%(SHMEjm1{6HRj)iuo+b zqcGyco^~Tnw<`X0)kl=qJ^#z1A;e!GMUotKxHi1|zgSNBwU4O~vOq&I74pc`cNSVJ#6 zl~Illh8@)wozZu$mzVxJXJp1}jhui5p4xq4?EVYMJwk3=)ldKs{q@PtKUEK2fG+?TOTs}V<`w)ZRy)-$3#6x8#jH+!c(vtl zZ?jXj)Z3}hTH$P{aGfe*zSCsRX(YzYb@vsO3WlqR^7jvsKU5M~^10N_hQ&gP zb^hO!ELp1)PS69TV>85IZG z7ps7Y_xmjoxF3=r6`L0tAkYdM&r4WS^c7Zx7W;6PQ}bKQG0iqbg=rhXGPgX%vEO(v z8T(lUCiY2!>TUt%i$FcNyjFW@k<`n9E*w-g9pt#>7pvn}q8a*KpSE;`EQaD|nVEAa zN(SYGoQYQ}?DfreSxFVDVY~rnI?Mj`c~jayA!P)ZZ3dz&5SJM2{7 zIYONfMb$)t8Nn z%wrF~+oT_kf+K`fLjQZ-p3wN1b1G@2)JU?p9X?uWz*M|vb@K6xPYWeyGEf52R(rZ7t3P3z52C=qo3;7pZ>-CLJ%vf@Q

Ix=-xTU^@TBD<%3s8tw!U%EB9FB;iC6lP~d%9<-M!`DVKZY&%K-s z^lR?MgwDowjdKd5?zSlnthVFp{4NXp4q z@87>SO$nJq;%2}Hpji6OKjFFmO!bP>i6VcbdITI=XMWp7<8$0fkkM{iC@_{~Ia9)e z|FY^Hm+;3(`2h@IWre73SNTO}FuL z4uxK{vnX}B9E}7OI~!St(>)2P@+UlIo|$OG;7To?pywjprIk5Dk<201*Fr;n>&iaz zs?OXm8UyFnzaA7cN6_alaJf5KAir# zDDM)5N$kn3$cAiWf+N7N6?xhN-z%RC1mW00rYo9$9$}&dwL>TRHlFfICx_AKy-F&g=sIeud^$ z5{J{r4p00HWdD|7eac*RjEcnE&1|1YECaAznL+#mS&4GA#DgqnBN!|q&1m)k+K-(L z1n)1wYkAn*e{xPbh5WSLl!lR6h!=+0#4k{L&fTRMZh!Qpa;9DI-yVvG{01)G@2@w_ zyc!K9rs-f+U~kkfk$d6BHQzzp@b~K>N$hwW=fx6b?wd}TlxL-c=^l|G10mEeuWckk znb=;#;KaKadAIGeicY15(gSwd&|`tza7h<4lpX`n$arb3hBsMaJ_>_Bt;VKVf8$GX zM+|glLeOpM3A2A@`Kf=K<>vvM8|z+XPvz$8ZawSrYCpSlCbjmm*)9!Q2zA~^I7-sm z!>G@mZ1Sd4jYoJ-=1_S(aEkGDb4F(daC40$ebBKMtTUS$=jRW11|IndPmjVOxWSe} zH736tQ~|Z*RjmN=qcrHZ#{74!Fy7#1o zM1kBbEPcjRORuLi$e39oX1F&K^YRi>6I6-1T?ZHMUtBR`NLTQ#w_{y0h;&(;QuTP4bQ|`B9;MR zu_UVo9BWhv)OdN_Y-Ln!E>m-PctNXuWikV#+o4n1lA{<=i~iM_(C?`js<@~MJhnkF zMxL1EaN0l(o7OMAssB2e-9T_#@GV9`j~xd!2HAQJb=!7LKOd4X9v1BnsXujFWqU{x zMUIDvH+YsB=nLX*LeJpZlmk0p00m4476Ls=K`KKI-VvJ--38jHYq|TrRL)eO$MnOr)KKbel|O{xrH*VvEfFTvJ$^})iAz8KB%*jy8*;rt#)pVC?5wW5D{0hDJdLcB*i zhZ-mrq-Y=dL!RK32&}xM%aWX&Y+}ej?9E&&{FmK?Y zZu?(IkH6G(|0TW!78wf66lDY0E&;gh5& zrbLEKp)GT}G|llv4<=gtc-T!{`o3;PGI{`GbQ(=Rch{?aC_@te2mx=uEZ|AO zt5^&(UZ75R=Vx@5`eC_jUtMN(f*S8E-Wf?^t?$x_?8@%`SYXa^vaP!BoYNhcCF$qFi1gbf*Py z&32of_n1{YY(5OzfD?Jh@2@*~EmmKKIVaM1#=xQ!LxRZI~MzOJ$iVlCs$Fq-bu!tJHizZkw-sX9WV) zz*+=0Q-Ee3EE%(|Kd0fgO8pizH1dyj7uaCJ9p-Yl>vPxPO|Po$wPEU`wotS)eWFSXnT5ZaDt+LO+d#IK8( ztV?!aq7ig}J6`s(|M0ss3ZQRMey(|hn!2Xy^7*%xpSgH|xy=V$!iXYG4U5*fo~mn$ zbL}HzkDT|Hg=B^5FdN@fO_fWPmkn7VcB*WRCg^Ax`c9fQe1+ue>E!~S5)tm;t)pBX zSnteO>qwMw@c|T#4@k^D#~mwX1~?90jFD;r1=TzAo)Zfuv@Hx}X{U{>8|e{jd*D z@l zt|h~r432tg9?k^OhL#iOAf2%h0pxG81A?l!RiS560&8H5sUd>)Vk6=@UKja&Ki0Z$j(tz1j5)pqH69J$BYcDAV4N4LSb{ z=BNCT)pH=F+nJ%o+-xz<^@Q=fejCT?^J)8ZlMLC?%c2(AHvOA^dHy$Gs0o3E)9lzx zMY!m3K+zigN{`-#4+KfbyW8DYV40$EnEKtXef-41gj@mQ)^=u?ukIItqKJ7(ZOj`> zUs75tHh!EYy`7{s%&dS9U}`rt&aMy|#ARNN=X&i^X0+b#-g~%UZD0Bv4!4)mibKw~ z&urJ;>o23$=oI;x8!o3@izL*n87J3d2=RjHuV*rhG}Kq|?84Uy)D->-VE+?Ed;QhI zudlddf*RyFDn&+36&x)bO7n_iVaARoFTx^XX;hsa3Gb~AOb?&xlDm>aq%~=gn?nFM zw@~g1dqe+C8RYh&@O_$f)$bxaPLzX>s_`cc5cJqIxp!a{Y_}!!BT(JEM4 z3Ec?PD6ncwBmTK}2H^~dz$@VV3K0@}aF7qP3I0CQ@L*LZGiXMJ5PTu@*j5weslUmjc=AKafih z+J>S3C)ui5f-j}q1YfKlc!@oLu|CwhXnSNAL@0-2RME;nrxx1;Ha7g4?KAIkfl(L6 zV?lZ+2X;Bis%Z1IPYZ@V+b96$OPYjv2_`yXx$s(%e9 zTQ4_XdMn>~vqVxsq3tZoCY(}px5>{sqm=3ob5|>dFI8cj*Yam(u&!TFgc|tGxCEwpOLC~ z>fT)5a37a~74`OhOq0JylD8Ln25Qqkcu9JpuWGjUGXbWkpQ2;zNW;kou2wwDIhGl1p^Iq%po-x<+k1 zU}{>)^(OjSf9sIf0`F|VMu5(jXdxut`OrS9(DM9>On_VQw0`pCha^^XkOzz7fT}^D zyM!|>^iaAufHDdpzgol0x;P`(g4cY>UfXu@)?PJzSn{2( z%l3H<*V2tsGc$M=5G!5-(S2Y=e`V0u4 z6RL0{k}AhQHl<<%Z4RH`#?u!$hi}BGtHb2U*QFN*Qw{4}FAe2IDB!jD3I^v{G-2e} zHKmVJQ_a(+@gT^-MIc5<@{v=7g#!nkhs{TYhl`_D!&*6xtCQv;Qv)uIr0pP)Gp(uC znBNW6pjna&Jsh#$HcL}6WVr!`IMZaU&q8sM%FAf`pZT}ZKlnFl_hRXWB!V$IL_+Bm z020sjFEg(~FCh0f8i2m0YQ?$8(YvG~e_?&5Z|)MdS?t~ZaD z{ZbQn9X8@8G;>(Ron@=*7fsQ0#eJcp*gCa$af6H*L(F~+hxX*$lUfou;37it)j9Wf)y_4zj$1^O<$hI1o_wa^P0h_-|0i8*e`M2B$~vFT3vk_JyN$M^ z>)#a+GoSnNFZZqTq`8;n+~QUT+6+I%M}BVis*i}t*6dM|FWXalh^7{bh}Hkvg&kBu z5a|)=0Ucd=D&T=D5!mE9kr5EY6Ht8?##lJD#pmDAvk%p;syD4_^EX&?HS@VV_f7SR z>DL8A^{r;Vd~a{j>td>WJk0k_9dvvB2H!r)c^yWS+?PNRez!(Y#aRJSgA{p@6MRvFBae8_0){iQk_*WHUhbMMQQq>#v4sr}9O@CZ1PJ?vQ*(<I8+6I zW;KulqK|M}(hjpq8UpDQA%HJO+*miUJ}{>S6V z2k2~NVb}|pmjz2lY40D6qxrE$QBSx5z)Es6-2wVRam$$WJREP`8_YmA&=(4ZY%KzP ziil;mSg}xj&Q;F-ErQH|k<`Gjz~g8j@z`s55f;o0hiYFRN2r@W@_V|k@w5RXAm|U_0;uXefwHR!LPe)B#*#_Pm4F5 z3@j#i$7{>`KKZ3gx4QiPb!{&8`Ob;WTB>cb6v5fP)|}_52RHv@z{O9Y(X6}4_AZha z#wygM1Bj9~UG>4F7LwHZ`Z%9DGP5T+nmS+Uf@}xxy&cmA3u;u07#Epwr|di>SR_h7 zOm6tB*L{$QR}|yG>&Vn!A3zJ~9)us9OZs#W9B8WQw(5I-HvJ#);D7e3s41S<6!=V0 z)IPLKb=FtV_((QLz~P^0OynChsKg+vjUtQ^3#=Q zu&TW@Of}awApio>)@Rcu@DKuK`6cOETCf*<(+&wQloOR%c#Ie>l@?gD@@|V4)jTyH zMh5grwkh)c!tK%YoL?WnC2oJY4^xQlUU>)QQ3}JA8ZpS0vP#M95$po@FeIa9Z^Wt2 z@Fo?+USx(Tc~DJv{@%{(hl2NqQJ9@J6_0xgZK!BE1x2=9q6*IG&msJ}~qI z*EQJ88i#$@_3+dwubI@*hV$CX77#~!zdnCa8+?5L#{K`W_MTx)X6ySXii!?GbTfiT zi4HTMf*>Fr5*3AU6i|^~B?D1df(4IwDDljf?6=0s2Pfc7g}P^yQFgK$6^u@g)aMo ziD)=fq(gW$s(N=$Vz}$ZJGFtBPUT&fiiA|lhyTpkI_@V3?PrT?IPf(of+{YI-BX8* zPmd{wqjh?c7&7?@)FVr=Ht%A3m-3ZN(4jpD!bw50en^TyF7uL*m zm~Tpo`uT5eKLz^B_Z4~N7u;BGvBT$u;Yu-BgLuary@D*TX_YnHcmVBN<9(;^DFRK< zU#EhvO8nk(iI^B~A1Zap%%p5U8+|D(4fL|sX-ePS{alrKrlcrr=JcqcmVoxmF%zI$ z(%uzje|@gJ|CHX{xbQg1s9pdKrHqN?j%q*-S9LX8@}581ziwp3hfWaunDFFVVq_-& z*E`$LPZnz&5tXS(F8(@4JU0{}8(jsZFOI<+hswEx{j>C^1f;^=G#TaPZdt36T9oph zK?E=+jUqwyD-Wtuf!a0BvOdrQ(rY9hBKi;j(+>$>pAj!fDhV>dzO|?I6d?D4BCO@w zSJ~F%OvaAWmKjt`WMcY(S}MKG1}ah#+$QnX-s4&hF^c|dA|$s#c8IfaHwkC8We0fH zyh$+;n1EAFlT=CQNOaB~zda`0-; zixR`rmJtIrRW~O^vUrxPs$bKFA%Q>$HWnocgj|J%4RA zd+|qYzhhg6wc8(GXmp~LQZ!k|O+sD^o`$u(vM=j1{nZG~3_E*>{w@nFp|f1(Y!nMj zkLfg#5i^>91MfY>>?)Dl{!cX5s%WR@=~mxW;(A^GU8qb@dbBOP1#ecfh0oY)fB~hcW6-C|jpB3I}XfVBxrslx5AmrB?uHPw$PU>8crK<5ap$| z7NvQa2v?*^>cD`BS*XiDzN%ODC%URd7$!H$$5#Pdr$?IyUq{@|`Aw>5$&P(3CN5yf ztG~h?sjV2BLQC{^r{oN8;NM;CqMwxMx{icg649@d>>WDjhFQ2I3t^j;=#Y~Gm?bE; z_yzHtydJU`?fG@ZA@&~v$3>Pa#kMy3M@qA@!1dRk3736E?Q0hbM_KzUYCTf7vxnJ6 zwA+5Vf5PM-sW9=(=Lmb4?-|w~X@?X}*xXFccM{UM7CLh=m*l|5_%d)a59gkRZ>tNX zkU&KZ)ofTsj%56%s+`heP{>Y&2SCuI+3{um{B7-hUGj7(po4}5;LZ_;HUj%QEowHq zUTS>!ZSvA+VxYaQ>qw2Y4`b@5PXRyMXw26o{wV)p$$x`68f$`Ct>|BH$WlJEd4F9- z`QmWQBHh~Gy2ZzR*%4RQs6qU_nf*?JXaJ);j~S4dNas5px_E9^l&L9Sb2 zBCl{0%GQeOXD%p>NLtu6yo++^v1nLJ>)gLtFe#CdnLW(>JP+FqN&dZ=d0X^lkdrSG zt{`D0JqEN!%p^#L4y&-;^$ktra&SzLEUY6Zs6(l78}8?oh^*8dyYT~AE-scrn;UPt z@SocY|FiwHJ}!5$-1ikQSQThO8^;zb*|L9)S>Kl!ImDx*4aF%`M3g{2 zxn^L?d7bTDB`3SGil3JD3V2YQ6tjGFH&jV=+(8lE@3Z&B;ErqO|2HR>al$Ti@pAze zfEZ?R7do3B+?ly9@T=kf8%i$g%neIev88pMm@0rg?-pObqu~DRI-1fmJq|hneWIqP zF9)XNS)ko106^FeC??5@JqmC8*53jo(0Awg^7ul5g0q+G(9C1gMc>%$L7n+J`j48m z&-+|>h23_BKbX-4#4_vGc8n#pt)Hd1TyU|DoSC_)-m&7)s9|0*eyWH1`_|xjA5sTK zsn~9^%c7>hXD(PiqWl;aA2cq_+k!d7ZANfr8!c>4ksv(o$q)WHcOG8LL;aj@b=tl_ z%_-OZ+0G~}hqDya@sfINIhZQ}z=;?Y^pE@qKT<{w4_DH$gWeOHjrU>&>+=4%`Swd; z>*(}L1wN=K(5znFqmo+%_Ezh2CLhdQ!8P$U46L?Z6OC>mfBR$q%f1r=_74HtP7jy| z*E2$hW$wsxnVq?zmXL!55rNF`jpg)!#toxbC9u`}&gY0!Yxjj`krx`5e)rSVFwo#J zJl)Nb<-txO37M#K7~$wLW}#(k-(G2=Ug#6Gl^clb00;H`^pLhTGt3^nFf8-QlHCRA zQj%b+I8>ItG(F)F6Pv7Y-CZiCNQ92Qd4;7lUt!|0}fT1k~($I-6~F z%jnjXBxqI4v+Tw<`lW^?U>7ZiktRuSRyi0(JdS*Y*~?@kU+4HrBJbUrOrE`f2wJWy zODI|WAGRC))piSiz%?6eT?)-HUHnlj`N8&F^rY#XBKXTogfKs6pzZLgFhx<(uA*W@ zS?mN8?=i<>St6N&LGAfw5-_JF#|9==DVl&@x~Z&NqpoyEmHyEJcM1<8i;)U5pA+f& zcQO{EC&Lsj6COc%X`~J%ZmStRRm>wQlRDjSiGp@*Nl`7aEBdW+QesnLKHepjSBXzUaEiz-#I0gmR~WoIGU%%j8((pK@?5XyDxKeVTz? zCc14F1nsw|Y^8aa5QdUxSZWxrS9=V=s}c8{V4($>o+?rf^J&(%l3#$Scn zs#}YC_~VS3tXWm?+nHA@rP5>Nr z+$O~*GW(xsiC`5i;uTUAJ?~C5#QYduJ9f5pY{IzMVx|PbZaXP$mDo0A(ym5oI1e+Q z!8_no9r&`M-0ayiHPhtXoZyx6(DCgdo!O6j`gCFzyR&9HdxD-KARXm^8lXA-sgnr$ zV;*{TZSk3&K)cgWIVI$Hek*^_9YT0DZQ4oz!a4gtp<5c?-!o0|U>SI9o+! zUcAZR9UJmV`J|#48%TiL(W9|0``C_0e=pniFAy2XaLII3D6X9;f0N7oxW``>xME!e zku#l5=ugkgOhf!n+x|D70CwPOk2w)Oo)nwhWVUe2sPGiF;MZEX5u-Tf1IAejv$%*g z*r(y={vhV~NWQ1}9zgKcd&~WjAOgL{PPqxtWy@j4lElwN+=cgJzd+rb`_TXcuaABv zqo(z?A|=^Gv1dgfK4z~{#ei@HcU<;SNiU_DaJ z4Zpp2DP`wA4393A=RN9^k92a(V-+5cS6e&*mbyC`zwv;_`W!C}?j<-J^F0gKGRV&= z&*gqmm4od4>Q!|Ch{kgOD7p0aQ1a0IH-TRML+R)G@!ai`_M7FFwe)voyE@=*3B3PN zPj;JS)vB}AwTWliN{`?}my%O|Afpf66Q7XlvNgulLBT**oZl=z12rob<#AuaE(3NakuVhWRSXMQ)91>{V{;rNAsEbCwr7bGVfB zn3n)Dl65RzGF@=`;QIfL0>pH=-{SDn83&Te`6Mle!ZAN$J9TFJJL1|S{0i>$yj_$s zERGSwan>k;V~uxcb0>cB(y+D9AHVyeA>&oV)8`?1W3f%F;R^tG09?|<%zsY`ef$1{ zF)vi-!p1M_N_+DdiFhFB*l z1JP&IPP|N*Pjf_~vbj`@(OL)wxf|!z#>O9-)#L3s7+x~JUNI1Btyl6}N_}d*`@8{^ zBLwFp_TIce`BGiX{`HKJIA^?4z2Ei8!Saoi*QsWIvVKlS(HAul&$G*}nB-K6 zVwRotm7wlsmt&>xn4k)|i+HuF@;j2D8;)Pe^H@0Yl8ewwke;^h*}#z4-3o(7#lX~g z@7~OStvN@9dS7G89W-(MB`zI06fFW^Px{aJ^EtVOcQs$>5+F7YR8<|Y*))5gSIEo)HA^4p=IOXvzZF@r(s#K6gRtWRz>so$>XWO96Em z!E^ME+2Xa;Xkg~p+$;tA_Tp~eODRCgNbThrKaC>Ra0f(G%+CLgt#|W5WmT;cKZboj z;Owsf!8gxSkMilYPUsA%#8J1NXODoQlIgn3$b;9%k>hbr1Ba*-`F(p&I1^zw@o5 z`v%cJ=A>eF-CwjbTn9%R`wJ~*vm>p`;O=g=JE~36 zdMN!P8iK9S^2gKRB`Oml7RjFW*wGNm(p>B!k$}`L4sLO)2yT$em6P4H5Hp(z=TVbk z)J=!j$r$KJ<}(Mb2JbX_jkl99yq5`TrTaOE5Ab#!I@;=2pKbHL)X%gu?RJ#?go4*4 zE|lEr_`Uj+04=s=Dlxf@S%T3c&IRn=#)|d`D#n7iyTQBk>p2TMLC~#f zO&&M;ZJu&^$zzi?SUgG&y{G3DFR+HWD2-X3)*y!r;r=#!N86wGysootlOOAJaO-*}xu|Y27A^ER*6F=r zNf|);KMVD7?nq^xtv|@nUVfZz?9`omOscTqT-X#Jh5vrIainuENL*s%oT6WB*!!Oz zm@T;(%{Lophf=zx(~l)^tx1yn?XBn6Qk37KRAl3w981!N9~84jRYOxZrsMShp8pmA zQ;W6aA5mWh$YwGZn)rml-&)15{-A+R_nBEo(~A|3Nc9`zd$~*fs|9WPIuTB9nfbv( zLrupLf5ZJ5>+w|nMe(J?+Gv}7kYsJFCoWen5j&Uoo?`SKq9+dC1@TOlce=AEGq?P$ z+0v}?FxE~JoiL-Z$Hv6aF&h$P9t|hbz+Cgfy-$WSQl!RTJZtGmCsVo|Lty!o9rB#C zW{{~a+7S~ocXNWjC$Jk(ZdeJuz*KYqgIOh*V|YT-=`RY_DKfsX@?Q)g8_$Mo7DM{S z$Wd$KJ3X3Sn_BGiAs0q_$~4y+Hk~$e{rqnBJTT6S|HrujI_mHsjd9Xay<2cfr@|;* zQycu`1OECwLwvfnB{e_5Y^B(r^}$?J;{R~JQAl7I3dg@fyfIgRx^Gfe!MF5rSUETE98}xB%N)mMzw3~O0>yo0VtS@5!2OnP z-0+j7BiKN8KRQqJ?KlqR;nFl-2Ug~}-jP7v88jsSYbZN< zBVf5<#(Vy~5ykoa%NMnAr){lpax0#q@o*XyKVe%FYHdn?hT)Ys?Z6=-_}mUy$DF16 z$y0GXB{d2}FI_n_&(GocGYpX3KO?h?Sdo~uwYHaJZXP{?)Toa*NGaTiZRXr}Fo`w7()+SoZ-kxWm86 z;L_Xwmkj>mjbkV-lf7&>vNp7;Vz_?&HOx@RWAmC4Fh;ZO_gli(n9narg+lHYtR`uF z5}^4)hQ>vs*^x7eyC-bQO3idbfhu2o@UqaD@2;vgkvczM+sLg1tt19ek`>Ja#r9|9 zFVLE176dwNOEq<29-`opY?$3!E!w3K715K+;)21#O(tD0?p-TNr|2cb2eh^4Hh{PO z6`SaQE3C*3U@UaLYx+@JUkjp54Cs}F{DKK7iQ!?Gle)cYg@v1X*gwxF-n(m+x^=ZK z!C2{{(Ba3Q4ll*bw9!=FlM4C-XVsrSKCS&z%u$l_kK!etG>c|cmNaD+SH;B+6-&H7 zE2MO1-#(AZk-C8!=M(?jUdEC)_hi?W62K1^?tPhHzk?E@P3N@;AxVCdg3DsMCj0RfbV`}@gQ=IO;bVpBgAceYPx%mCidUlD^Up{SNXOL zIozX)iPFXzXk$2+y+#ZmQeOY|cn6RT3<&MbD0HUv0aK_(YRiY34LPC?!gr4F zvz29Zf1wign9IyDS^_?F`Mw6mtp1P(O@e^a##(1cE+Z8E4?-gzE1|b&Z&i=^y@geP zhqXDtAUC>Usd9Iuht<_TD$e{b z{J<|)Ns+P4E3flx`oOS0fhOE^vFodQi&?-G}Rrmc;7 zyeR9p2cL^COiswXZXP`r*SkOa1~R*QvbuuXL9@SG{9cH-DIl#7X+Xta-ThGmqHWH2 zx?$(V?f0FeJu8gug5^UmS2XTpAUkl@tY$%{sD0 zj&e7)Sr!!?JI-U7cFU{B9~&Q4b(pT&nW*j>GSIyWD(ord)OT1n6V$XuImAx__ltV= zter+WR%3eE?@MCUYOQQQ6R4Htl=}Re^H&UY!y$zy{K`COA=0!ZjJ0YfA;SBj@HGgi zGga_NQ~u32>wYIYu8->4A03<5&I{;<84)kpZGLoDkP{2h%L_?~Epe@0@?A8A z5b{yg9{g&%Me4UzWq>)GE6vUZufYgKjifhroTN?Pw27 z2zhceWvHOe-^63^Co%fg|B^;#dW zMjzWZlrqL&;N~^^NZK+V+)uSp1dVNlDhRrkU1dKpEMV zg^wL4$|VQ%7dfMtrDv$?#=wwwToGZ{N~V=|lb@CJA)~$;y49{{`_p&w8@s0$sdqjzyC4W(eiYTVOPS^SW~=EZz3GoVlf1A zk)dFA=|#?MG%tlL+cNCY_z62v;qK(2YFvRXZ+A_>f``w0xl0wW zNHSR?TU2>iTbL^<46-;>I_HLK&7Nf;SWJv2@zG*Xb@@Yq1(`GN>^b*`O66^nd$gw6 zjI~0qoUV>r<>R((>Jg=N^z*1Inn)r?=8JN~DZ z_3ffq!Lp!y{Qe2sRS`E&syWHxQFmTl0=o5Xjs^(+ue#cGdZC%#4N_hPBRh#PY^W=u z^-#gEZ=zbbqK-koUMe&9lV@Svg`Mr?#)rkYM5TXyD?Hf8J0QJw$op_yT#J>TUNO#WM+8G(_3b3$yEb|8US|u`?QBIYVqZ1qs8TF2OFQ^& zZhe*_Zz~yNzQ;B4QYdh7>Duj};t#?YJ>!Bh&Ys>?NE#+sKV)ajQ*mun%SzOKGYj8X zv7L;7?7iHWn@0zX)OiJsth+&N3@o}|Sxm5UH>&4l0yGi*p|@S#t)8j100dxv+HJWxAsJ)JQpXRtnhLN6b1#{UR0~o<qc7LuYM=t9%Srj*LXH?K_YLtl*Oh7F_ZBi1%9!IndKd{o! zxhH+n?yM4GQ=&_$k!eIJkySiLsi%#7f^t7>d;m4nBS$1AEsG(cm6AJjizLBFP$HOv z%~EP&@_U_i%cV)Q=fUy(+?;i5-rJXnjMzzJ=={n|IQCp4`c{7IL_);?#Y$u!wmzk_zW6lyS^AC*$Aj?%5=4Mt&WoFyk*|B!3 zyq=D+7qR!V(mhZ_)@=B&Zgh`scjiGTZ7RC=c86GVL}l!9>x^M>6)y#g!Vy2@zT+&6 z7RATf79(gCn9-SR6P?l{Q$kr~9#N zoErAzBvvm+-DL(DTr`0wUE?n;#ukPvskdsw!Bxkv~cfvbIC;8Cq z!QxJ`F~9yV$B%^l^}ugF`nvJL?SL?Yii&yKM+-?_@PHbIq!E_f7N(+CbKAVvBzXjt zKxx|jl!m7YNp!W1W!}xCH_X4vLar3x<99c_US$P$Y9y=ap z4GYesBp#jWa2^~&wMg1=@V6V;*#;|tkR0a5mKU$MoVvH`+(u|BMour~P_C0v9wQ+; zQj{ua9oF{Z?KDE)9i)w*UbkM8qDxBr{K@}N>2jv|y zv_pzwhhgPW>YL^%3@!sk{CL~ywL_uT9>g3D`Evccj9OFf{=5OxH((X4(cu<*E2IsFNeHu z!|=P`-n(!A{BQi4XCopa@e7uyS>`iY@7}80&{Ty%MOyag?H*TepWIt}Lk>yXjk}mv zLShb-|m*0~LIqpaJd#~sXfH%wl^B}eZVsC%6yvpmS==-Eh2gS(BMy<3t>z|^ne zMMje%@)m=#>$NJX^|v8vDwca$LAxPVCkw#w(lvS9E*qXHJ86yG?AuH&axPUbQzAw% zo<40;@$=8^CQ$rD2x{NCxc{gv_U{kF874~cB{n->eseOBGF+NkA#W8|p*}JjH=GMl zWoUX=YS==@EwI82WRKbYN4-W9s%+3uPGH_qy@{~`mCZt!tst>hc+S7|l!fbdI|dDd zvV#3Ld|ZfI0^7KE4XJf{G*iQeew9IYNnTc}2MH0u-fs@aTJ6vxI?l7eF|MwEJja1@xxdK>*mMDx~+bYW$I~Ror;)B zGgC2mED<#JK+1+`v|1a2j+6iXuz$7fgM7j_Q$HHIiqv@RpVvQ9MCQL_Zh^Y*lYP_# zd{#9<2XLgltQ;i)7b47EfrH1Y0^?CC?T+l2=;f=C2i zfkOgad2(y#Oltl8#KkQYB7sOwtbwZ2HQ=x{GkO$fxi?qsrLe}Es7?m6W7F^n#leBw zSKP9teFIaeYe<)w5QFbd@82%@_J=bN<8+1y$vnV9DpGlk8Wl`HDaK1R$FBxo zJ4~&Nc=UAYR-rP`kR@sORODr0he`3{hw17_n`$gf71tBFDn*wQaPzauvW(ax!p-~W z4`~&VQW9{iI_4${KiE6rm2>0g?+!E&v-M&Rc}EEkX*`Sv4CIuId>shLiA5og2Tim$ z^*6CcxRxWEW%0?e5{7t(rg>sHt1SLiBW80_MH71a5G}1vOf(Xp?zd2OFpEYM5@t>g zF95pmDyM`?R|%c2+Gv<&Z|v!;Dh!MjzvqQzqk)m3J(ODTZgja5^Vg6zOsF5bH4<`r zZ>AbuVykKCMoI+{tI;My5vxk5PL0G8PBX@VC&UTcphJ21jmi?vm(aczN&uO=;*1|6 z$d_;^WQ7Wb(k}r$HXgUJ+b1MK zcdjdFE6d?-topu;$NKboK>XdN2&8_hlSf>BV8|9JKK-yVbLP}+ckQs;A&IM!;Yf}$ z&5fYw6ScRnp)9BFR79r!PN)MsJXMwFLwmUQbLYshO-(;>e~__|zc5X|Jp!bUQSA6g zvMn-E3u1~sR)=$oV7uy(4D90UEouKlki&Iqhydo8?ZUVKRQi1oEOu32Jz~=_s69?e zAMC$W!Q>X?+mrbq0j7JeLjIFa9_AA^-(ze)Pt0-ty%H@cJ|)w6*(%-UEdPXDa_z=P z{vEsrrYT34mtv6wWj)JM*hWp6bag##UQ%;7)(`*ml6Jap3odb`*j zn~VO*`fNvp03JHN;~27nsVzftbHMW8+QsdzR5N+JMFTg&cZk$jDw)v$=p=3L-ev<> zlg)BpcQdQ06I0(;7XKQ3eD|Dic&lL_FoMqr=lHI9WYR3uXC>o$NAIa7^AdcqmxYeo z>{gJ6@eHD=udPFSwc3aI#R&#h7N`g$v_rJDPVDx00p;Ko+>w$BA3)+&%)#A5m?kpz z95NglutwxSoicuhpO;Q*Ni+HU`0XKtq&ddDxbX>ssscXdkt=Jg@ImOM{_$l?2=e-DxDs-Cbh*q4k^F ztEmmY7zv$z{_Qd5iD+6#eEg-}>6PsIOBKy~P~uUAL6Ax`qs7?cP!?E0&=B;hO=go) zMCM?f@nwjvTc}ND-;}qOHlh;Q89=@rCkeR?VXcB*ZQFa_A7Onexd7c+A|;olG^;p3 zk57cKZig^RxYq1X98r2=6Ngyt?DMAE&gTZ31f^3qa@T?%)*?gS7Z&!A{hV{VN#uek zng25jz~s6gmW`~*%--?VxOjWD#AuPgoAgp51ovAcW4KdNlntfbC6(JN|1b8CAbatW zuC2LAVJ&WTxp3A|3fb%$ub`?|yH!|~qo{KqtTThFGa4v{7hKI+{;)BUgU{5%GW$|H zxZUU@g*~qW3ARIxIudT2uNuuH6vbA|BL*I-iE%yC%_(QPx1L!UX&9hqRBR1AhW}xF zac=#EeV^d)R(D(Fv<#oqNKPjp(|o0xo+^3Oz%WMawGYw9BSCYIsDbNw3NC9svoIXB zDfU7SmS5)&-*DAuZAV~%Zfli!i zwiq<r>WWE^Y)snO#5y5?vxW65t@d z_q^o15@LXm*w)M`bMd+Ev0#5k)U|@;go3dQC%20?n54!AUBBQzb!$SevsWEOB z+zj8bp0%^H4AU=HJ+z^FFN@K~3cN(;2Zp`%K5k82uAM4yu&rubZ=<};gVuAt&+Y!! zN1i?)opc$MO$17tp6_>bmZpTJwrVz*UL1e+sn==_eP0Mmq)**PQTd}s+&I=Kgr?8J zR;xmlQYd-Zuee%|8l_UV^5ACTG$ zn;`q=B&kF&c(Y1dop`j@xG<=Zx+zPMzV9>y+T|A?ZruQe9m;_Z4+9;+2} z9qt)rU<`A`y71^dA<7Drk>tBRRkpFUhHwtq!{Z8$#t0`r4If~L3@3Dr58o2Ef6rS- zP`yKTNl0h*r;%D;!b=&7a}&!CJB@rZ&hi2(*RdrEn}UK2ehJ2stwj6$AyIrTT(8=e zd&0p+y=mPcao^-E>F>VjcLk@vE?MaSe_I%<|6`igT3LT0ipZ2pCqrt1?q!} zUGuiv6B4-XHh9Tan2d!DIh87>6l7)Ek@>Rxrj&SKR?Or$#m_Mo(KLRoiY$ zQD#y`f3_!|f>=s43Anbf4-$}`BU@atr06E@b?4tFBK9z>+AH6E*S}rr8XRC12LZ%y z63MrI>CHaLY>mYGS@NiYsM!8OkF9p&&GUN2s}-`7km3Bm-Aa!Hd80`WvI1mPRke^H z?Su|s9`A*rI9^r=v|ssJN`Bod!FoDS&d>Xrmd}&{S;x@e$Z$2phZ^W0!L*mkaz4`8 zd#~oOz}3FmQYSQX3=f+xhy2QATqiX>ZO4JaEd8IPE)CvZ*N}sMil0^j_fS`wMAw&F zZ)ctAZdW#q9O1BB4Ljm2Nt?I9b`CB;0)U%$r%4#b*hYyL&6bbyp-oSHlz;Z^W~B=p z;1un%o#S?dP4L#URoHoJXCqg~>~Pc_TvG$xtmG^WB&Fc6-kq1^mbvqIqnONHqj-B9 z<%Ok@@3^#+k`u%IC<}Jgi6@fnP0eG9KX`517lL1l;ycju8u;R%$-AqKuzUr3+=ub? zT#ZB<%w~00Tu@V<`*`q;+9@l7yb0&6(z&$EZHja7P>tbd$#1Khf1moDSwDQ_=uzUK zb%q^3D?@GWS1D%omyWK>uUE$2DJ5w<8PmAQ^N`=FUNTV(4M-_F-g3$Z7(4O1j@B_+ zPBr7h4MmRYP{HUkWmbh3ihF$dFk-22NKan~wK|=QB$~sPBej zX#&A=IbD#B%#;9cE)v`oJ*X`fHZ~oRzrljt467k^^EvyF_{oU`4W({B?6+I<P}S^#I?wMS~R=9F!IhJ@k;plzyKGLhlu~! zyj$kds9NlRs$0BL1$)G>^vvK-O*^evATI_6%G@;CL5^5-x229p%^P;Opf)Q^?6(Uo zj55-@2%OeR_E<$Qkr?*#F*v;@x(E$noBdkbT0BAKUu*T zwWOtujc7U*HfQco-^PJX+0>V;y5G_vy-+-qWe+9Jbz}*Us2#oH50`Txh{hctyI^)K z4VQcQ5}0hQGP9fC^%dWE9Z3fXOvm_qEeW|}b<$p; z#ZSHqxobgbDagFn=+f0|mq7Wv3rZT2k4sbo3Z0pRW%-sg#dB%JA?D&IspQUooClvi z(ECH!=(D=O7LJ=+@kBr$AFyY;Mcu-rts)g9txBkyQ`>PWW5nLd@17~#ubp7UAukg<;+s!F*NoGF?&doPdb#>bd$vgU>kdwO25PCF z5652BLwIFoP+Y$cOwn@QIJHOHJDZ=``hRKR{+AHw>J;+li<*{XJ{)@H7lx;4fMj7f z(CM&W^b6=~(l!-972xP&=!vQ`5>VLd#Q{E{C^3VWUs2$$V&(-g=yN+|U)7{G9v@W3PhPfvwUiAXqG$i3h1R7WZx)b+ho= zrUjBf(LE^GN{X{lPZgvtxB6A8mA;Hbu3BIRiozyjeNp2ugHhe#_hG>xrk>%NG(%5A`7n-ndE4Q5A0PUm z2Vawx&{X2JZ*ONW|Ne)3P>{4!@qh6U-~MS{Gfc#b4{F9=V?-Q(lxcp*$xETasGsvi z5HL)*_UY)-$Ugp?B3f5tYD-06(!|5GDx7j7j>Bkw36_{&9vZVHmUvEBEsnI2wHJ;) z9iB{O{gJ03oaX+SW)%gMc?hZmI)29vXj!^#UR@q*?Uqi??oWw!G%U>)w5hLcbWe-a z+^~wo^7Z$8n6Mpw_-8I;{&M#f^h#qby#?&Rlq`G(GeR8#8U*1fY6zB1mbj0JV)xuY z9LNpesO;mGqw2TEFF^?b|D*A1d|GH~ckh7TKSjYD)7%C;r*M)QO|G~=ZsHEm3eB@f z4C~AJ4P3NayjAQ3%Ze~tUWOSCTJ0oxBV(1TeOga{wHDTMf377-j^@`5iY>ECKO|&v zm^5a4If1QL4R4K$%jicaGJCFH*g>v%MuO=v4)*_{Z`QYa6uy1nbObXL#?j(xZw%7mwZ| z%)}})qi9XvjX*3w#H)k1;YM~(PAR79XqW!m%5XNs^4(S;o@yz7%;0(}JEYftVk>E)d%*+3yLX zsM+*R%=yODdY#Ii$!a9 z*A8pu99pN(dhwC%2%+zVLoMJ-rQoDV3&ewz5x5Jv8aXiQ2HYTJPM>KsNEN{uma{Rs zsaG)^N}e=|LDjauNK5Zd?*LqcKM?l#PDN*hs|8-m;AWoC!Ogvm6mwvfDdYF)sP{&_ zu_=iy!$F9@H@Z)s1_G>@@ao8o@=tlfp-OzaH3~aaZ)Qv(>f(i;my3HGjBbJoi@a3T zw4S;*%y*D09QD^V;*WFwbQV>1FkVl0psJQ%+W2m%#++FQ@3u>B0>BTKE(E{ z_J?oEBTFNvy!ME>P(=Iu(dZ-W9R}{8IfSoYm||1w_>ewKDj#a2dpHrJG2KR|^@=sbZA% zSKmZ2t?3P!;d<^{>whFm63cPQ0d9-Btdy2fVuzR2)yJwQK(p_j45lR?dRV_#B+o}| z1+*$xq}}++4p~c#K@QU_lHWzfD$O^Spe_#=-52I|6QtS01Df=0E89&^LGd<#Me`@WB6L|J16_M%a2+nQ>_vo zAM%mSA_3Eymw2V={LC%#`Q4_dT`a2~JjR?UH&{r#ZaeF?c0tRdDiAEO(;b(u*k+Su z&7}PyQif~94v)(~Lsll7L22_>fK0!z-$rL=Yju=oJ7oO1Ig?I=8|k@h1S`3C4BjqT z+IVsRetvGsasRaAVKLD|kfYmM^Ph(4GMOi*%OdUWPe2ZAzKovEbbL@#1=)#WTh1C9 z`|lQZrdFI@7<4icTFFccHb9_>EG&F5D@B{=<@QzvXoR=Eh(9$hI4v}l=El$J0p3CI zoZ&YC$d+E%rAOPlGTjINTa@ zcD}>d&Tn2ts7lU7iO3S6!Qta@4lEY#iEw8qgH!|7-F7_eW(n(DmQ4FaSWZOknBJ;e zlOnpfpl*%;33Po!BM~d(7$Y(U2%DzVWVxTUBxZhT;M3B3qgL}P;=U5KTUvYX(+5{M zDql?q^4Ip#+#93FN1qH7T2TI|{JNi8XY?f*RAd)dTFpV%eH92 zP=SH!BX*EDlP9tg18i|#zOFl5$)@`6gEh1q5UimwkN+t|?egI*fiSED$-%~?u0VK_ z&)DI7&wD26i(zzWRi4;{8emt0qGKfs8O{dl*gO)ly}Gd?WAg}x<5twcK1O88^bV?4 z_e>Er1a^+1It@|GvI-Z2N+}1u%905kEeSkC>qA&+ywF2G*tX;Z)ffFbSgWl4MR@bH z^+e14O%;d&(Z0JjRa;pgaQpScD9`4pyf^jm3DL9KS_c+Fy8DU0n;^`RpB(aVeIcl9 zkTJd-Qe73Htm5k->@qv-Mk^RQEiCXvyE(01mE;HJ~cGW+@2K4EdA_hng)`ygPGZqWzwKsDqX20Bw|WvLo~H>L~|~ z{lji`3p1UEsA2umY@3#o#PoO$M-v8r%|9`|utiBNVW>{(xmo2zTwpL~!lz)u@Z}|{ zW055pa-Xm$&d@0u`8n@|{||8Cr@>{++mEOAuRL9EraD_~zM%IL8VZNP9*9(Ca8^UW z$Vz3Kg8Z9TjhE`zP6_z?V&Mjcx^mh9-C<2?bRQ2iAtvL#-V7bUZNaKs)}(6z&}Jt9 z+T>{^YdmU^`?mjwG65ns6z{O#KYby`H0O^T1%Z;yMBIY;S*zM{>6#by%C;y!G5gDN zK}p!gV&goNm1Ru)vo|n zy(T7sn(p08geX4BO8)WK z&hokTP(|*;K+!j1?Vya5`zZH@b7P^64D75)dH?{1EKU*UAcS3(iSx!pQWocM;K++e zgeD@8Hdyp-^MNYZhbWiX5R(|-o-taB&@uYy`@6IE_3rFpBK~=eE`9UBp+id&A4wCp z2_bN)OOM7Z+_Drb-rTPv^`_>Uh1&KXPqTb>-Lk?Ew6gqcq^8cc>zT38HH@EIi!q@P zRb6;|shY7|yP{45ZDQ$EbukP&yi z4`Lo|0?&*rZKWq#{*?n(XPzJ}t8QHvJG!^9zhnu1L$FiU)vXGiE4@Q)&(i}1UZ3Cq zF>>Zk@9+nT($k;^n=lv|Vb1uIvtrfXX~bR9&eX-aZ6viFjQbAZ^R@E*{~~n5Ah=`F7z|j99oshINs#FjG&g?lD-uSq#bv=ogRD>Mt7sxl8R@RpVGP!zZaN zRSIW1M_w>rNEhqrY9~7xXtF+h#DYFmurEgGdx7f^tUnUO)5^LBE78C$&8D>&?40f% zpnjr`^mMulGo@A_+ClnTSkXP|M=B)H-{pW^#Blr4aNWPnYdVkbt@Zcm4(jID%d@lK zyZ%>`@!y^o!27W>0V@#<5|Mu`f41*g_yGQSpIr3CYQ6fx3BRn9?pxTZ9cJ6V;`{jB zDhl>iv08LLqd1`9v3|wUt)eN(l3Avc;|C#6uB488==sAc6A0sGcG@8AtBMhjh3B=F zrsPoKb|xo_cxwZI1jX>bBPO@n@Y>> zQd@!FY zGPA48Q+ItC9n6WVh0Z&YLxGro)76VKcezyAx=ggn+zTcBax#r|{2)WqN9)gn?b+4~ zOWiABL)dB`Kf9 zX#u234K*|&NQcl%NT|>4+Gp*v^{jpNdampJ@V@W2+<;!0bKY~z{}|&p<~XpyG74nj zAo64&3kUWX@*u~L=ba4t$nwcoX{+SO`3%s#* zXnDAZ0T9PBQ4j-f-K0+Aq3)K!DMZ32VxYu_ps}{bd;ZshU7%y>r`TD7 zEze^xmP4+JdU_M^i5OLcfw{HqYuRAlWYt!(YeE0{of|b zN+8?mV*Fc$2NLL5>r9&t9wW9s&#)=!8}u;`Iv5mll^e@kI*9U%OUxmNT94^zh5j%e zlCm+s&>q+~Sjn^vp(7i#$WhId!*CFsnSvYdwID4_WwEcZyOPOVJ^|PwF|dXBorU@x zucZ*dUuSRkr!3mtKSm(3MDWS$P)L@m(O6!1#M%7up|ZQ+p0GGm|+R_@Sc9V zcCdt%@}R2iX2g=hqe!`AdeCluDFrAB2wiiQSRJp0fXx-jw~LCZE>Z=ka)Vp*amsL_ z?OcC_AEBqs1!uJ`e`D`ABULSX1DL?+YGuzv^c5MIK51Vlb=1F+cJ7iN{`e^LdbVLn zu0jU*IU5TN!`)tDI0gATCkFaO_2XT>8Jq+5W4)NSu9NF=8QbD;oJF;4?8ItzQS4(w!+jSF)vX=%bcx=hJ)~zA#^kYkOVRCzR3Qk|?&OKks zSY;1{nz16^P*U{Jyz|@7^n5I>#uO63JJ}8q#hSy5b#Ml*34!D_QyC_w{y2+|Iq_xJ zZ3}(-J?;9UQIS6O$(ZrGzpKtaJvJ-%Jtlr+{yeEFua&U9ve~+NUXD>y;=3}g^(LW(ZV%B2jxFg?sT31+eOcXe+3oz?{QjA5R zLPUQkB)2K8|732P9QA`CXulZm)Za9m8*Cn1yVdLZ5Hj|S5LP9%XUDo=N6MQvL!0uW z!t)G=A?`1v1R6>q_Qq4NNC~NmqifE*yz~r#xRika%GW2D7IU@bRC)g6&t-E29t&LO zuszmBoY>I#K0j+EM%fUOQL11e5$zWG!yML9eAITDY6gvn!qF*J8*!YjNZ@TVZEVob zsVti_{N%pq%k%H0dP`}|*RM)(@$r|LSow`KJoXEH)Zc}Qmwi5VY#DRgFzFPsY5cKWqDunX@R_;}sBJD- zP1@t1MBs@)jMTIlAmo^x!iZ=^)WX1d)=rQyWU5Xzdt)eZUOy&Iu?{%}wO4Gz08s%m zek<{S#hMKNc2m^1{$}dF{Rl zN0YWk8xL&QXLq8$H8}FmxA(7D%miqnh{=B1y+H9&x_x|}pP<68HcbFPJ%JNppRnxe za77nNSomI)r4EB(?5%f{N5c+>h3AOI*y9V2^_D#Uo$vn3pi1&}MsJ`fV4|)KC|wok z{U>QRh}YY&ncH$N!htnGeN*SS_i{$f`8J2H`#i;B(Xj#g<R_#H zqU`)yJ-1;(?N(j!2ex99;qszAw4U%lTu9*L@)SqG`_DD}fxVyvTZtdZrL9c25;B6j zH4|BSm8|mGy0=oxr@auLEf?NHe2>}WPlb)7eoAH zjEpi#Tb*>ivm?flCCkNMezRIP_Bn1J@Z5*ic9+t(kvtYEvRYf0V>$%|mZ|J|vT_E+ zh=GSxH1hXd`h0fj~@lzW^EfA#eg7#adubzCBsI$`VKXYgIz}FaV{UyF;5$WY~0Z~Ug`Yl;<;<26LJoV~pFtKdPl2kDhw72!` z)_+3R{_z668F}XSt=wh0-Fdwqt9Ir@6}x8-bGAuk8U8TR<@BlRJo|Ao59BRR{GIfD zq8P)5Pf8IFarl1s!sh^)XKO0Q9ri!LVm>`0u4i`mq(k(dXEi5#lAUmb7V(?M;`>v>&;At0P$?i}@L*4$eO_ch4`Hh>piD|WPe zv31)JQ*n&)nScbv(D z=#XIgard_(+^f#5ydnNc0YZZt8y^}y&`aj2{_*{kuXV+=&J|AQCEww>v8Nx4A#TAy zqCfCOMB&O{&{_;LXiOFeW|)z-A8)p6FRYJvI=>}(+QtQVA|`CehTS_8lj4Ay_?dKe zAK~TxJu~9>Gw`r)MZInBxP;n_+TGrSp6H{#s5ZYl`u3iB)m-{(J zC2DgA@)x%ZymSHMF0}sX>by&u11DB8z9@X8|EWn@V=oYG9%3@=O-p|4`r^V;u>)6v zMt0$N^iOHnId7n?2;*($PEAZK!v)vZ%7*7PTz*pK0$ZEh6ONaYj zRq8fc=_?gTaf*NSXLl6`s*ZOltNo?fY$yCsof{4**d^t&Tzn~?IPOK1dL!n2lF9z_>@|R?Rx`N|E+-9oeFWEqX?cJf} zyT57IX?nn6!Z5L|tQq~7=}eu>P4bAUr$nwz2RFGhE9fvDVq$8UG%Se*S~fOjKAHRF z&H6WjLV*>CZ2_V8tz7z@c7wg2eABANCz9pWp^|%WQ3qzLhM2t}of(H-4C?>GfD>T* ztDrRml<(fkVv@Z3ySUSP<+sl}xm2+g@}v~6W(@;Ryy zWt{>h$A_ZYUlr0ij*~aqr=W{&@zBbdr>{`a@*1rsVTlU|ujg-HlP#&9b3S}gZu|KY zFq>=>{n`17^9gY+<;4(5v1^p3772d8+W!AX!J>a8WZ3-nW@l%&C`%M`AY!?P)9=lO&yv1K^-|Wx4h`(nQY;n@U#W$GzofuthzXLb;Qk0|HSS~b^f$)<<0DQoa#Cj0-oF4dYI7J z&^y`XCCjA5?{YOS*SrN#WkWQnvETL8pRss0kAS3d_o&*y-Ik|p)0{rciSmpWE?j6n z&kaW|@?I4FTU*nI(T3Xwb%44d{p0`NIMUdqT*rxTZ=CzulhXTxFEO?oGwd{mwv^b3 zqzdgw;(nLDeT6&a!KTiuns}R5bb#Od1&xtBHFR)(Sbt{71 zTztMRHc8I(?nx~tj`8GW+ThcL&w{FrG!;ZS)jP&0)ApPy!HamsyEjd z;r8GGF`47Cj5k?{gB9%CU`bq~g|+LHVE=K%%vYkly~NOzKm?L#Dt5!w#YTqP{Y*v% zL6+U+HQdL+erLHcMv=)Di27h|ioM!=Y}v*Sl)R~ak31?xD;%#q<2Uw{t_nd~RFr8W zxFr2P*s7m8AF%aW7(ZRq_GU`O?sku(nPU3k39-@X_3@@3f4$%SHGlkg05}qvTH*n} zx|i`EWe=HG*}WglrWTQ+Mzj(0-T5I&0JbYI=jKkfrMxS)%-XIVGQvyqK*^Ea(%>^WoD{u;7L;Y&>6Ywvz930%fC<98WtFYp z4_5B4Ws+>zY9(5cVplR9a#==Y(&>3ce>G4u|D{m-eFAnpmLxVueBgPqWcC>z25$So zM_@#Mhs<=_&A&sELZJTwI#sgu-dvgkYBOrPwr$wNq_$huH7+m*LV-c`#O@@04?7WZarwRc6v+T$>6ja>XUTA>wl+2?rD@8LcmmwLrj@ zvX2`ZP9JwA7fBNP8soEL#CRvv>jRvYDfdlus698A4!#G)Sde(zliw7veR}y~xQLeZ zbk@IU1E_9Ge;vNLL-pZ8Fz-!C214vAe5mqa=4}wAu#JHdR(E7;cx79_u;pr$HmM9y z^BPBw#tQuwW7+*LLJ+#WgV}4fYMw_dL2vIPs`Qjbjm}>I7Z)Ig3pR`tP1-sChM>L*>oeLqjfTp(yJ#1+C?Au}j~wdH6o=h* z{4^$j{9^Q;lWowp8{=u_EfAl+Q5)zVe%0h@Z7&Jr@&dg)M zYTB?tA?|Iw#rNwwVUkr=mV_-Tj=;Y$bjT4gZwM?GsJPb+k>Nn+XE;K~8vU!e`ZI5Y zaJZtVXuSAkt(|yMk#Xy7wYIK_{;NP5f%Dh*@h>GQv;W%5>cMbwUY5rIKw0h;cg7{_ zF;!;Wmd9CDiOB8d&2!`>4Je-ZqCZ}HLv6jtf#^xeCWPt1<)wp_vk32U}m5HiblyIuk^Q}S$-gMpexCsVPtEaqo421 zAgpCVYCLQZhj%AV2=kxLF}DRM+)FH@eCVBD2a5lhvB&$p5H=pgZ!d{#Qx>32(JIXA zLjJ;V=R5j9QyD0~qSfC4KdvAAN#~~1BX#-k^oanSyPFv#h00pr7o_x!srey>LR-$H z=yExQ=T(+W6b=lc5c5*9BgWg9 ztii+5{Zar#mC>lqzf_+ceg?=`Cchq4f62?+%2ZdwE-rcud1`T%@De+&rXcy%oUQz8 z8H#yIh`Uy?ro+(=1(c0q8_f_H0D$1;cQFgLdYzd#CQb4?rcuQ?? zD?3;KB>jc^D^IlyP`8oL{qJcq&#r@%`2j6{1;^2IhFk(2XhyJo|9!CCU=Lc25chZN zmgddJj*j_Zd6@U~NDn?_#vM|Y#t7w07cQjV{2nRG*KSFqvWU_-SBv1qgYTQGCC;Ly zlS>z{y^RX3JvDg?C2rx++O=`?soJpcGgJ1PU-EX#sHM4cZ=u`$8UDF&!)`gE6&k=4 zcWq3PUr!){VwM>u)}Ika1s7gc#!C6jP>%vUckF@DsTG0Kwec68uF)Ui!5-V}+{l=F z%O1++)MJ$+0d{%hHXBpxy*1$49`FBIi^I>k=mQAbvw71H1Sk9GB6WyPG$3@du;#L} z_*L*Nj7vwOO8URm7{DzV;XdANR>&dwAz93FdKJ+-kx{L_7Zvk;>1K8+q+CD22LicdR=;9V%rv?`djF z_OP`*B_z~0^%xvcS&T1Z8FRb=P(Kzv9!mrGD-y)^WYBN+9d#GT`=GW)`KS6ZJ3Z;m z1ACzw%F4=jnVdkjTV zKaq=ypBtKq{9ZQ-VtD3Zr=7Y=`eu|gP}7wxcav6P`;mfQ}F2qNQ#6A38`tm?2Y+4Y~HL#E^}qERav~gR1WM%K4`U zlfK3&3z%dpzB~KnhK~R;-%FpU@C3OoC1LA!c97979q%*31hQ)-X3o8R9l5nw-awyZ zv=G;MoDi(Z=Q8S`fiy}WNts*ep*?qwyKctj43w+o0@OtTKwbE?PqK_I{{|M2eu`NV z^lK#0(!PY`+qH!dRkaaX#3irIi}&ts4#OdC+rsUtgM@_fRgsb?VPIp^hACLTi)yT( z#dTo5F`L!XuWRG3o`Fl5tlaT)vw0AcFDlxcY#z_KLiDFY5wv8OXT1@ya?~^){PrQJGJ*&;W_r zRs|J!=q4zZ&r5|_0K&HIr9IS6TV8<6kI`?gShAlTIiDx}N*X9y@o~bY2qhcxm7}Wq zm(Q2%wGs=8rRO)(_-nW3rJj5;(MZBUHE(Dl2`HfWkXUhFwKR9Z#eH`sn6dx539 z(w%rMr)xYUqQCC0=+}5fZ)@6W=0aLdOIqSg&y97N67c+b>!63N#vh2;c~(g{kAuC- z>@)%+vGJ{OV0m(<{U3apz8|6Hj45bX-qbMq^^E#U<-)Omx(lM>=*5FUorHTjTEe*l zRx_dEr&d!A92!l3%k@^HM|SN#jE;`=@|{~Z9}y7*bwx^BI2(;~KBR0T+ybMxnS|A9 zfgf4wm}+dmZ)VTk*%-ooh)kgNx+!?s^i7C`ZivBu7chT%{0l5VzM;!=Yz}RC;QAw= zm$o0CadT;pqCDA26){y-4w#(F>Y~Fl%H91d_w`p_WL=hi@9X?ruykLa?R++ng!k5; zZL-iwhezSH=dWd61&Y6I7mK0MiaY&%F`h0uMYth&*8e;2TcyeF)88ukwXWhU<5u)f z`ijz-v^omZBb|>HPF(4NUm(MMkByd3c zCalSZWNM5#+XmCPgP)k(Hqpw`@lR-N9UN_Bw^(KbKx<~cWSkCAaJfaqK}uu9&Ov#; z)?8<&DV(zvKev-9?*Elw%FF$9%~KMAAtw?g(f@+1Z6r=vfbp5bc(N94EZ~%y#*3Yq zp2uN5rn{Nq!)(wc71l!^>`kUj;KXm4a^gc!S-0-g75BVcCEwoy-U^?9tmt0sm~T(0 zq7KWbh)(uJ+Y7{K?JS)rAV}vtQ(fb{KGR9?sS0-Eus|TPkM&VY2TH}Kssq@#eA#>^ z|Fo%b4%_|EcS3<|9$P|o_9l`AAJo;=-@WPVyb56EmX?-fyn(D+q_^H8$=-_Bu03k# z%bf+I`DGtkezMYZeo>$4wD(x&Qsd=-S@Uk;1-7*d0n+11;qtBR%iPoaZ@U$z`!lhN znmZP`2iW*8PQY>QcKXJI{QGuVkv>OcF&l|i9x97fOM9ysL(rA`HL60ENTkLzR9=2) zMOF_p>8ZFRP4M)dF7;c&7mP>9CwzX0pTR&&%tKa`{dP-?ha-90y98NAtqwow`fYyx z;t`-bo-NG-=zK*XzePdBIDC%}%B`5UzT0)QCFbdG+}_tgexoYn6U)(5;F7&^u(11_ zR$dO85AdfC+4N+)lwOR?xds8L5{7COtvdr~Crb^YG4)qWmIn z@>a`0kJEry-K=P_H5a?mEi~Y*%ODeKAk_Ch|znowRIFDy`6Y`nCU^U zIFqc8%c$~B2nUW_Ht+mHLdMw;V?W_17mWC3 zN=!RN{5Iru?w8*MSIfjb$E}8=;AoLt zeCE)IOi{^qx9NyTBMfqO>g$cg%I)OUI2dZ{<1T=Fd`1iu7vUC0O0(t%+WZJ|;w`e% zS{Qc?eZz#M<7aRs_T@XC1sqVQ9#4U8_Nl!@meHNYqO9btcS_2@ts!!r`SV#CBwZsn zixRiYL(9_&OQA=@SH3Ypmu1osqf21Ivf7zy0{i2y|5?J08VN4%<2)8&8lVR!Njm4o z3ZFAm#Uab#7gdJ*(z+>C}svx*g%Z zxrkbzO~stEvLA!CE?V2sB%`nKGZ`nGHLNw~T+;Dz&Hj<={HppXrxll?Px}M`txLV4 z{GlOQ%94c=GKlR=D${ zhLj8bxqAJdiC>J0qctEcuZ)@-Wk19R9mevS=D19n5)Eirl@6i0uX&du+B1TMW4O$% zu7n=H!k}8se2QM^F=N;>;2{A-&rvP2FV*UB-+{q1IcspM_q)*-zB{9?AEK{;!LPa% zhyA_Ir^s)Ph8wor9w<6d&F1dQNm(S7Jk0zEkA*V_lpIoWdb9KhBHDx6Q_4sHPdJsm znRW)~tA5Gy9)Uzcb6@WIbYn1eq|8>gYdAu7Hb1-vXaY+I^S^8Yc}3^D?y1|~OVs(H zk1`CW+uM-gemL!(=Pj5l@F_JuCO(_iz2n5dM6C9A_+G9Yvenait4PXl4s_ z)Ro2&`ID~W1g%1^<)E(J!3)C1Th2gtPBTlM z=j!?n2UngWglkGyLoXas_7JR^yU*VX+`;#zPjG0)Bw^xUA6E+FF?^lb{V!v4&rc?C zT5+d9Bizu={=oHE&?UFB?uxz7G^mM&taGN1i|@C9@3MOr>;n=(<7 zlhMP;>%4K}oIe?qZX@uldqaLHNO9Noaw`O*VcawuUn%S^?$B?r_4(Lw9wkcS?M+(p zBZ=bOn7ruVaTXSqlua{If#&!D8T(hdF8B8J8fnDXNJ3}d2Z>F?dr47@j^F0HwX`yD zURbL5RPxdAm$wa;MBWff_m`7WR;4!=hj>`|=R}v%(?8YDx31kDlxS!lYcqu@Oqbrt zJYMZ4yr{&q>>Ye~bVG^g6#nzg{Bv3VcuoJ}A%BG#$>kTY(aN0*D(eQ$;0jP}1f7*^u*G zkMpg#t~kZDJEPLr@N^&UUE;zsV^>`&HLq>Hv z(nmJ?mjyD<=^zlwS%u(pi$)Qyd@Oc+3wJh_Ydm9-3U7#FIr6nDk-}YDcJmP|HQQ~# z&8U4}ihdRo1g%jMbEU)YJ^R-FTi~Ulnk6*(}9b6wn@>^Ft5w zXh6LE8GXmrGp?F$Pi^p+n);eFinOzT63`U#5Q^JUIj1e;N?DY163y9Iwcas(b{37W zwK<|#Io);U?Z$G)aG}Y)Bw2di>{o{zgq^*P?Ceb{pW0YYM!QAb-ejLx(tTX#GU0U> zSoql>O)FPC&--!D$~wknZvpa`-^cymw(4Jg)9=YhwJR&l*$9mF5@lr`9b5XUWnm49 zxieZ9qAYT?1TosEG!i|Eu0)Pjj0IGqCwckyLQ?vv7ya7Hqxh4M`9l11y(eQPzh~Zr zBw|(bc0z8dyRN=5;f2p?L#5;_hhfE3!9<~ncj5#I^|zfi@Y}`wN-IJ9bT6lFyjH7M ze)7rMSV`LP!E9_Ax@Dq;U(qT5yf43$eK!xYptScJ9B0hn>qP4uTvyXW&DGC`5KjU% zeTLcK&JRGFf)H?GYGj_xq+jux%n^6y;xk^p?I)Fs=V>tV0WFS5s07})+vgdT>rWH? z=ddC4zzYCeUHw%q8nD&W^4rvf{e`=w_e$G9zRZ1*wfiiX^B`evn;#QnHIcAa@2L<&-bl({_(O& zHgnee>7e=8A2ot=@4FS zdLCCROUT)Cnj3PD&CE zSh+8O5TQKIwCEr`@b}~ z_~AM%>H2Acf}1ZFnV5&Rb@-B-FYmg1AGntLp2~h8D&tX>)AX>1iu6!MQ-1v=Y`$B^pK{nd!CFp8pVO;1@cIA zWTo!e%b%Q?^Ur>+*B!lBd_f%BAt@|BX=dVHr<$)4n6ql>aR;rrH|e=vq&6R1qlbM5 zg7XiEKyzL|z>_XgT$~Y|=8CjR|M058!O`i7qXUs_2S+pACSS(bxMvh; z`)As~J3G^(IvSY_$7W1Lp+&$XMjZgnS#f6Z3iYb+4zxtXGD9-!>)GUsvO~R)9Rk#q zcMGwRIX3Pq%1>Z$F$tR(TGUx?<&$b+2`PCmBLg6zy@6q@ zJp2PVS$+g(79w&^3I6JAlEHkG8m&e09b9hU^LbVjKZ1R$d0^NI&l?Kau8ClK4lDX%Q9YD|E8ze<%l{mN%Ma&Pd9=lkurqeu%{{O4#=0g_7;R;O}G5=WR!cn=ffEJHa$F)-*WfAUhJMd-C^-59p$?I9}QQRS!NonY0N%u)#*3dHJ+0!jB z${CRhd;Kv7c_urN1F)jPnOL=x0Xp6};a*#H@4lI=aH_5KXTH+)4M~xMBRZqZFGBGa zZ&=C}@f4k6zhTsK9LYSGRO*~q zponUFs(AUcWp?0B|H|tCNtqCjJQ3}Cv^XIy$&*s$FE5H874s-_{b)C z#94XK!>+Zht==CsUc>*|%6Hi{QO>Ji20kMv@sX~=@9|j&v8p0HHCpk8(t|DM-rgZ| zvi8uCHrkQud!J$o$qdW)Li%bn{zpf{-`8uj;Kb)%vgCC+B<#X)0wE6h8Lk~JDkfdp zlO2uW<@&1NeQRwl%i3W4<^26=AG~Kz%NQZi#ztE?>v{+*ltnNJ+3XT>UcRAcA-XSH z)>*&;lrvj2-}JJhIT}lR1$tlhGg-^=r=F{W-c&tnf_Yujd2^l8EV1t_${9Bv$j-#)yLIS^CS<^PP|B&(yd~fr zDhlw@b&a-y<}HLS6qu{CCV!wqnl0`5TsndMt-)!wFM~rdgQI<9?i5RFl!3HOug#-X z)9)G13YjMZrOJ|6)si#|4F{%HJ`J19ml)>s6gm64C41!-GAxS?6*o}$bh-EMH*7Aj zCENdy+2sjWO)=5a3({Fti#DW-ASC%s^3}6^-|1Q%Ck+{&G)t9eF|;p}RBa@l%=|Aa zX_CB`f*Q7lC@S*pqEPjlx?XS|u)Wdcttr*Dnv|5C5u3(THdKi<=Z+H5OW@$>&h}ZE zR(R;~eM@`aAu;{Yb~K%!5nV2VwC>d1wpS_8}F_=bHk7Ttjfn0;%Hc z#6dB0lZl6fX3v$hMKd@!L;QuLTTYoGui;itU6+k`xr)))?D^%fqfIJ`s7V1RaO%h^ zSc&zYrM?N(@ommiyojE2iNbi@+U`9izm?6GBEgdb$Hr>;(w;7aq!cv;dQItw4(@~; zNOU`S1>7vC{~qj3e3Eg$Od&noh7WNl2^^6(c3Xlk2UxIY*~(Z8bof~G_ROiZe0OAL z=Lh9$;zM^~{PkM&^5oYN?(0RqIpKOU>}`=C_@pu+)ye%R$hBg(a;}3~mrm^_{*PS< z8*RH!r|B?-;3m zk7yU0eY?ou7}EIT%G(kQEE&S#V=~CmCi=bVH(f=X!HOe ze~yA}488Qz%XCayAC@-8gbsY~awTDi&XDGb``Au4}O~hzQUgP4Kd~d<}z!&*ZS;DYhDbN+oUDQG~ z&@4Ds;-WtA8m!jx!LtMBc*}dhCN&fnx;At1eM3owDY9i{)?DP<@S3bPRZIW<&P2W1 z%K_x=^*04ouGHBCW}Y2=?&6U83QB;9PrH5R5=HpJ%4D8Vh(A=$ENV?8eT*Zf^4K(P zd=$UpQ+lb@jNxAe--Z0G!`Vaz$0LDcMa2i?3~sygpSndlQ)N)Ocz3IH3WclWY}M*vXLau)*Q=T?rVxxMGa)^3yqD-uF?CmjF7Vrb8FkU+ z#R>h@N4~6)R_%5;zanh(GFQKB_c>GYuY-f{!S8gR|I9 z_zZN#piZAz+hSi%L%-HSIp5CLRVTjSL*r=|!4mt$&xjFhw5FRPP=nQu%h2MkZZ-79 zJfgDiRzaG!FYQX6Tl88B8_209T?UhdquYUSKNCLuYh&Ar!_3*m49g#u%R4XH8+@W} z^EQPn)$iWom3Kae-<(P9yq%DvYZq$X7{PV0TE+;t^5NLJN@e@XMYf0acS0l-c+p&F zojL(s{fi9gqb0I3e)U|>;laRSfAbwTbdXD@mbGf{#+Z0YM)1mIn`VEcp}Wq$&L=|43^s6vLCAb76B<^nL#Q=_pohxg+jaaYvZjB?s)N_INX3ZMvb zq}qe`JJc8IcVhT2w*M!FND6E>V6@(%(vxSUXxq?WHbk+j*BF|7e{vbrF1WUW+SWCy zgNs+cI;aj1wF9P9pNtX8 zk75rUswkD-oiZfpd_L{cQu6Ul$u!BCELPvPol{}DpCOD1na#MQ0WXX;+vdrw+WS!N za`snO@-NR6f0^hTMLOXr(y3K%v-)GuCRb)HxTVWOC7ifz9Xh2x=|$;`J0Eu~ZP#_` zD!h1RItS1ZqxCu~acW%fJ^Tsy8ug79?W8h!raeOrK6O5%KDJ0GL=BX*Dgs%XASSM+ zWxie;_@R|6p_9965ET5*Ei|4Jsr{VuOY-;!wrSqU0srbm2lH5Fc1gNt){)e?1IMoz zOp0t@MpHiO_);%2xx@p4dnQ0tH(3{+gKV}dI|=D`9g@5Np&%V6sWbXQFNe1*=aVHG zQwa)wF+PncD+e}<)|8<$|bc1hpr9F%(X%uS!-KKUu1S^OR@7U92$3nA{O*d{3j5T3_=H2{_@m@;M3y zt9)Y~p&9zHMmj)KQ?r4)ids+YV1k^Q`R0@ME$t#*Rjf|{+<}W-Xx$2TBVK9h-uaWs zTKV7Gzgps9)PwY#tMJT3k>G9BoJhj^H~YDlt^7V-k(b{ti-uDzI`@^hdf=H=?8Lr4 z?sE4B&0MEJ(rjLNncBMhnrxE7# zbn>3>e5}O10W<^x{bd&){wo)iv8*O}4-L*1L?k>wsmzk9@dM6kkGL6)np3 z%wx=Bf4C~NYGnmB(N?!%-9~8eqq6z2SM6ZoVRs{Nyb2C?7bkLt+pfD>D`;YpTb<-B ztt`zU1Q|ueB0Yd0UAOFZQfqJ!gFdV3$#O7mbUPBW^JIRoNMvL; z*Tbr{RAdUgEK*6gQv^{aYrIdWo|(A~u+2q=3)sK4WasbaOtFlbr&hgd!F&sZvZ)Ve z&Y5Jm^eXRO_KS!s(+<%-on=yD^g7%GQdloCj0kQzYKiRZj^T6qoR_9OjF4q5bM{?* z3MqdH@_H8#-Cx)Y3uVK%zJa+5wo)y)WuEya5plM z^WaFi`+UgV24N;xN%a$aDZ4N%F^ndWohIw@__rm1>-+orZ48V1Z2z;Yy0C1(xN2+*6u`qY zmzn~h8u#q7lIOWlCZm~-@n?w6^w-_8`^}Z_ z7~H7|ozpNN*3c}ZXpT5;CKxt})+}yqGQsMDP(&rTZ%DAjTF~HPYylw6_;Z*@7NO6@ zhp-dx!#y07jy|bTXcYnFtPfgewqv^$d=(h_Sl(dGMwJnWOT{`rzsT5G12tJDxiNOw z8nC0A{Y_LR3Oaek9!3O2@CH$8Du|tmYQ8xV!#Yw}R;@QQ=HV2m^VvdyDebye z-h`BnxbXLC9i7~WSx&Gf7u-c`dh7e6jx=J{?j;B=C0<4Z zCBZ}-4uU`+w4y|n(f4zBD?)OAv7O;}w@rEHTs{n~)yiyJd&vBWW4<*3MC-Bv7U3yP zZfjDYqr01<&)8>S^3K%nU+K4R_>ae!mvl?EfsLwu=OY*X2ud_%aaZs}B&g$wvZzoFIZ1+)C_s5jrb$D#tz^y9q9wYXJa{HM)EC#ICf=*jm;%$=BDPZm_)9@iv(4iC%Cii`C8A z+3IMvB`?~7COzjdl3vG=-x8uYuu?~>p|gLzH!|oF$CgG!_j1KbsN3_?)v}X4!I6?N zB_0kVUj#0DNy!NFu*&c{gd~*TQz1=@(LsGqe5GXTcB*o{UK%Qq04|kCl=1D8vg8WV z%~WZ1@S7fzl$QrB0opahseB-WHc$$LE)r2*^#?~|VoGqvXBf!DoX~I{uu=SIgw5Zv zRIiSo(w9-Cr?$|5ph@MqTA9T8bFkOZ&Br9!f z@u4KO3o*+`Y)aLR4xbLr;$WgIps^d|RKI7WP(_hh($jQ}VmNgyW{hviQ!Ok!oRgeF z^|AK`55~~)giGm+KoLW|>Z60UxtI3%@}?9$7yfb|{Px4?6Q6-IT{%?d*%BeH3F#Rp zk3r9wW}viL#KhJLTglN5Hb}3mp#>ox8yjrOdH&+U%*eLIhalt4g<+uhNEcFf;er_X z!5(1UbM&!6DI2CDKI_ab29d-NetEM8wOL-S7OXR!Sk)JhGG}$yX3Vheq*{rfsQ~w7 zgIKPnvEyd8<~MHipDVjcH}Ipe0-UR3`y`v~)v4zncUG-f-+fhW|3KTBj#4W6a;2uWXvoqgnN&)8{g)#aLL!tJ$Z1rG`U_#iywW}T{yHPk4@3IKNNKqLakwIsII=z+S+<6HU0QeFDdGz0<@G4 zS&I3xkavwiIUoQFFgYT2`X=bVBeD*j_&nj${{!3UbG7y7-e?ci=XAC5$Y_XCva!)` zDaxO@E8!eEXwqBuaQYtHtu`}CjN48s5c;(OF(ITV+d{(%6`Pqh4xU8E&c&ENRcwt} zo6KL<^)+Dh88d^4e>5Uz@fJi@jiu^}B8$Y$-U}BaaphM9s$Yh1r2s^Iw93&1ViUg~ zGM|I7i280J|Nk)d-eFCxTlXkdbfXlhN{Nb!N)wUZwj#zYB_h2>i4>{Q3Dr&s5Zwr& zBOuZVp$G^B6+)!<-UA_YNCA=%;4b&Mzwf)--#Pc}|6D#i4-e~o*PL^VImVnbH^Vc$ zU=aHQ_mi{}wM)%dWd>XAPdX?P>0Z}zH@P{kbY;TQ@4YO8a-t|#v4icY6kY^;{s$5( z5)LPJxjzbbzm_2iKSY-ZIizg<_agy_GV9|_|b5}|{gdJwP&6lz>JzMDp-s)W*?POj7|a@0^iX5gk_FqbHGK#35!jV0BS zJ@!@`BK_t=R>=6-Pr@G20Lhu$VXDsR*7n>6>a?1q8m}nbQU3$vBsIIU z`)8j0(hUE%{fg-h@WaOw!|1t^t+~dIsjEKo7tvzQX79Y(QkQHN3!4SP7N0194=BOx zHoC!&3%^(} zt+E-ZmX=(8QJLed$cd;|Y`_;1t$6Y7gy)sFrUMO>-`HTR=MmQiMPO`lM=eLHST`?+ zB};`250{Cpw1T(;iT6*e@MWkFZWI8{}vHSmyXx<9GTXzpiiKVOt;0`O~gA?%)7{?RE2S&7ZCAs=1nU!=Sy-sr~Ei&KErC#$+xK=SxqLQD)XIQJ#d3X&&2L`kHMEsge zR%N^?1A%0-(D{YFdl22#lBEm)6RIS}rBUQBfr=@TSfA*DuC>;m2iC;)O7pD1o6<+$ zzPZRnS0Q<@BdNOY!u3>k#m0eo|*9e5jUNBlNL~QUyw}c?f z>n_??G7P@EP%4Qw+^U!}(OivFr@iwEZKiVr1Kl`gj&2l|v9Ur0p9!k7{(famHJ&S# z{j7+=QxC(8T~rgKxE#xCxbYB!=4M}*#j}o{iyU96kG16#*^`If6B0JmZ}|$?ZM7#& zAEg*T#5-Ji(lfdm4b=hzmn=5Y*t4CbIb%T)9ac)D$bz(e0HubKpm>kHd5@;Csn8&G z`t-{lci$|zYut{pE0Htrdh)hnbqf2U^5rGGG&Y4qPIsQ)9C0G9&Y&!c%)g0w2`$6BvaIHkovhZGIx z-fW4~z_gxM3vNMk0s35%&{h5vY_Ol`nT+afFFu*lW4}^AITttX2t3<9$$1+h`+7(+ zuBFd0YjOdB#j3a7FP^YaXI2#QJ)=VZh~l*%UtIONMy&KCx1o7%VIE^CA+uesUx=Us1_1-8>Q7=P=t1F$3mlBQB1zR$+@WKw%!$d zw^837N@Su{h|-60ASVv=2l8d7#;Gip*IwXrihF4u5!^q-UQ{3N{R13*!}NqDL(Z%d zjs2}@=Gpz#r<>n)+1K2vUR8GQ{Ca*@f%D^kW<=LNK=*pRc|N{QCZLNd+YICwiibds zdnP|M&ZtL7v@^~?W7J|U#x1nt)*3FGi<8-zzsXyZPn60pv%UqavrlzJA%M$J!?4>$Eg?9*%JN&_>)#&+1XC-cHS*P) z-+o~~{_RO_T)OxcZ3(b;o`>kz;Lf?Yi#1MitOe@bnj^CK*?0_b@vocP-(vmZv>Fb?|bnedXv%S!yS&J&W6|sP6LfhlhwKAH6h4v2PELj#=SDVVJ)g z^Hf~jRLI?ZC@xy;W$*t-#2=v@F3|@<{+;ph@Es5%W7X}~S45+;>B=O0TJh85Ms@PN>m}WKWRyBSKO8+is*OnkHH?|a$ zKKfX1Eksk3vR6yJ-5+I?OM*>wrj3AF4?U1?=2}4(kA1d(?qBlGj^Zc5(TK$V*m&BH z@Fn#~A?gGL1nem7J|ZDxV)feR6zcU2oVckZX>`?8eY2^LJZR+}YgsH-?4agQe%D54 zrEO{xx-xTcqapE~bcxhKmcfyRA3ak;VfNDPg@3~)e-E_(lUA$q4liv60xLni57GC6 zKXo0=y_E39`nGRHbpA{GB1^M@wR^eAHuLZ~-9i;6(VUhaM|?Mp(0HK%Z_`}hb~T1d zf|}dq??kjEf>kQkjQKr#3fBZhKQ|?46nn{qcmD|^+tcizuz6a-@@8$;3uW0Qx5f|GWNllZx+qSJQ zUbp|9N&-4ldWRxkB%a(a*qmXWsJglyQ+ zz&zP)#x*+5>*f;ps@^Kaf`)6gj+PCFG`@*pM9xc3_sL`4zFtP%`66)J zg5Rz#|CHx{*V_PMHtvIrbpOYz$w-p3ZEN_!rvn281_`epT$?C1)0a{xq479d@dWcU zw;O8LKK&dI)c1D1671)Lf+J%-%w{^6`c_5rxVAEky{+`-1#yx)k^t-|45%oeUIdZN zg+CLSjy~jkQ?~H(wuHHBI#vLIT>$qQjpKT&8QzR$(ndVn)!5ETOzi}rphC7M&YGlQWpfH zA&Okxv!xX^WL{odTV0RrNU3s|@t5YhU77VMCC+g2h*%m6ahEC|=NY(U?D|6(M-s5? z8C!@PNi8PH725JW%e5DX?Mh9Lc7z6Mx;N}@={<-Xye01-Gb23>2q;(g&+mH`hdq9* z{Ml_{3+2)``43b#tcw@#x3yIq1&6P5 z4;Q7D;h=KmRtr7n$}S4tLV&VZO%F8ZyCp;Y5C`3eC@tzzTp?hiq*@Aw9QRW{<%-F+ zMQL(nCDMBG#mwQ4yQ*D*&pj4Q?k>K2%uDWL-CgODx&WqYl)$4I(jl|GvlWUVLi8Tl zu!ZEtgv5%4IbB@?01BS7UnqN&1)vrK6#>;^8@VU^FX0+QICJIXyJD|LXrYB0$aGEV zThJ3do;p*V+OxddpUb9yO-ny9BXFSUcf^@*jwT#10Hb^|$DZ7Aalbl$Ndjh<$%_o7 zE}F~tNBK|qhTK?MrEdv>q89c2o4mt0@yV4gFinr`wbj)&tNLY~n|=yNmHOiJfO)HZ zxxHHG{_6$fl%9Oz$ti|z3H+NsYbGN^`ZIJF)*~boG24f?^LeZttvCu7rr#AnB0sue zUgas0?1Jq)T*rKEjHyk7C7-Wf#}VMsgu^JrYUyCGSfGMFgtVi9gnva>BF$0NZRHFe7^I$~7--Kjeoh6>uaD3f4%AS>r zg0)dz=~g0Ks;NzsUW9DZ_=>e&YKe{u<*|qs#V431p(RwDWJIp)3f4#-n-Y%G*bG?8 z2Q?*0@u7*4pQ@@P-0L?JoD`^v8}}66%wHl*_>aGps8ToJKa$rW#kSrw7c9M(5k?O8 z#3QltTVfh#QmR&3r(U_?$CK*GeOlyqdHt$A&XrlC$&oL2wwn@clpgcI#rDgttIM)9 zCDXDJQ)dMV_9?jiQy^w{_>I#XaB;>8Uqg2&8K6f6GxEi4gAeZR?qYTe3IW0osVEc5 z3I3;&3Ayg>;RRVzK{GY!YH@6`ne$UPyy7jFLSaFzwBUUz)8t4;#WBAK=K##i>UH22 zbP5PBmWpGWqaxE;bCM)5^5m^T-#^gGt7S?Q40tSR;qXMp~PF z`Bvlp625(om$K7d&k0%qc^MO_I*Ge4oDdTuRRht5XDX>na8k1q*3i*dHB}cKVX93;RE3<>I)kENzDg+PXXnpWAzuEP@}^ zDmOz__>6!K5+IWL0O*t6Wqh$BIu@y{Tx{)1gpc$&PK+YA^b6~N23$q2BzOesSt?2D z6B^^!_5T`w^nC2^SMQuQw!pthRGV@DJg3Qk7xhV7$jEPJR~cIu04&=h8m@5si`}E_ zN{8)KtZQqr>yMn^c5zEyxhqoO1s7Ym(|}p1D-Z1$W@EX_5kGT?ecfd~!?5aa-}kfQ zfFu@G&Q_OOrNlg{Vp?=t08v8%j(Bxy*BA(=uoEX;qxVKaJhw&1%BzFUaa4|3_{ zec6V-@siVeAPH^4A1Z;D` zqJ0s;m0#Z_)#x=kDi@Oj>5$x0KPJs+^^3-U6U{PAu?1)oJxd?U@U0JYI_0vT1)5c) zuQ($8O74L>IcLut;B|hWeJ>*i!?loJ-KdyR<6^yIPcyTGD%7Q{Ro&j|pg7Q{3qPC| zvVVvE>1qAIZ3e#qZW9+~PB4s2zV-*+_=FSF(2QV4!}(G+ugQ>F9%aVa2K9yOOYw)o z5ZBBEf-!MuiX@1!dGeK;ho&0ms@79b7-jt5f7#e?&leWmii9lH3acCiM#&ypo4-f9 zj`9oN0TY@yYG={=v|5VdYLc?w^xa@4QcJWi#(5=p2TWxfh)tJTaVP3e>yQ!l%OD5q8%yYR7pSeS$7_C^Hl)4E`f@g0VLgk1Fa zZ9T~*;@h~kBu5RYQv|UJJJbV3JG^7`RPW8Z5L&?g_)0SyVWYm{M7Pgba>fXklBqLc zl#J>FtlTWqLRtQ2vhC83dFZq#i@Jntj;~Ne^rpv!=fLy?MUP1lV5X4A-1XG4f0D#c zUib=i5EB#Ljko?j8SKz0^IB`R$kKA4{lSNOqLK>5v?od0m+S6y=L?woEtm-Eg2u`+ zDDP)I0Yht|goBC}Yz1>OQM>yJXYt^RpLU@PaEL39&)u50qR^EHlaerpB2_5ykAVlF z%w9=AwfbZ{ErVf?5U6*>|9ObR4%2k-D9rMCi@TiJp#RP^2e;cj%!W>cN&1jdoFy@r z--#s@hX4mjqYYIpS+tq>%~5tLlkL4(&3kq$p9t3b4Ab*rl!eUSQvnW}N-E_h{22}x zD_I&-z<98>8S+d2MjP$L|ICci1wR>m0$gdT`KeAURK!~VDarQ?q#mfQxm$wrI((On_5E{85v<5+#oB}fj9Q3q&;t7PbN#x z7`O&2o<$Q&O|(UMo$(>f8xCMSD~@|s^R~n z<3l|ERc)we(`CISIEa$TX1!U<_mSe1I&mw&qUekzzjxak6ok)1cLQ&$*$?}IoBM3iN3b{v;qlXk9xz5kV}!Ly+Gg=~N&J9|l$aTgLSwpbau=v1l2Ozv`@ z(bhE}oFlUA%9P97(HFi5eJAjQut`;%$f`T{TarbEVx|HcSk-c|+{!goF3^qx`z&uE z+2gD;TX#0^Q^yD;8_~r zAOtwi%2uD?Rmre3`^!^1uL<*O1_F<&RO=TL@Rg z^r*R=KiZLFPuVb zZG0A5ncyzpbm&i6&GQ$qtMI>kDc6DGupy=FL9(c|LEf1Zn;aVB)u;^A)9-4!RmdL_ zVsUuV2uXs{16jSYd$+{Cm%XpQ%tksUAg87v%Hf^5D4Pz11OmqABawHyd3|PP#=OBj zWRGxI>sIM670|zb{CfVtp4|#i^y9rMWHa)E^K^5B;z!N+a~@P()sV(@6?odaB`t)_=X=B-Fs-bL?GB zwV^Bx!;~&99>sk-)|%FC0|781M+v*vONVX_?fcd3ejdwK;;2i}7VpWwLBQ^SA}ZA; z1?poAiaf+()5a9>*m~I}jxG&R$jV-*>u8;dreBu?CHy4JuyC7rWEw8gI;FYaD67u5 zi4m0>H_ynWo8FLI&8wV;ee}3?Ng_8p;mCBc)Q$Cu0t+GAm^+haI=Q3;D1r`F7HpG0 z2S(N&o?RLZsjnA<8yOjyftjBEP_wz(9I9YCR2c~Rqn^yQJL^@T3W>KX1*k^d-M|ubOVWGKwim@Q``r*ZX zJG44rQq5%bw%n2ST%bOD*=^Rj2Aq~TZG_7&_`|3$jLCdUYz*u!)ImxEJVG3>6fPr- zlq&pHVy$*K?34Pe~w{~$Xge&rJXX|T;Yd$-ar;R2M}|G3aB^%8K~}IrpNV>ZsSAhzwD7%#aPc3wWg< zmF3sI{~K6Pa&Y7MyO}zhlI{SDbY3z{*ty?3cCPG192C0G`qw$8JDgZlJ+7*Ek;gn>ZJ z{%BX|jo4K!?g6R6^tR<1b}*O_w%4%#$2eJB>kK5+-#>VE#K?2gZ9Uo<62=_LiX(ln z3{pG;*QU?W^rU>|v(Q?|KUP!QzOP#v9!@_p-63V=;ZM13xcgxAX&D^Dt>k3*w$TGF&E;N4Q*7xHl%$lVoDp9!Oj)SM{Cax*t(Hcz=%7c3bxa_sE#eb*6Kb~RB`wOPGL6uNpuG|O|u zG>~#R{kLI@@L)_fdegE^RG2UjMTga)Qec2n0J+Oed?!|!_j|C^ekv>-nN!k=93-YVF>*= zxDn1iN?y*`+s}F+ZkF)ah%LS0YpXsXK1;Rs&)nS+WyaSkLbukAKjxBexy7^w>NAxg z@&)D+Ob^=u&5lj6{M6MHPNkqjti(oD4VP)8Z!zcB7Zckm+Z}u8{jA5)(Xqr1!lwG| zfpU7Sb}`)2XekXMkmhgMQ61zd?LL0P(?@*Xe(^Zn00Zu|D=yaze{#(fGwwF=bFWBwj zCU3R%k?BU4p`sI}lWdc%!e61|RIe3~mRMi0^NDC5yEUJ^Q0J~&z{Mk-JM@=0@4XLt%{(f>2_b&3{<41m#yg?wkrN~b4RLsfKwU#qS*CYBE z#2;YySW&I*NoAF>XcPpgv%fJbzVVWe`^8eUWZC5D=&8g93Gf`JR#8BnJMLsxc*`dcJJps%}(&mGP%<~Lp zv-+n5&~M7^ZRL`NlFMrOIOEUE}iXB0^#O~Qv%(i zJoi^|73%Dvs|6Vy>%vN`K z7#JWV-TSH7boM#BSj0&er6!y8YPIwLW{tAfRiyMllFfh(%ny9_hC^@oy^`(yjc zM~6IOwV13SyV->0pH&;?$ykZht##xb$4iZ$XI-HC!N6vRP)$xzHSX+eakyH5K+4eN z8|xib&D8FpRAjodIOK)5Cv!L*K;*$5H_oUSEMkuU=Hw#+VZQ**{}DI*@{fQxVEvjR z7n1+Tv@FpymueUy>EXNSfHL*1?ZzcGZE>g^xHhF;;f`1oR>12O%s~pORqjxlHD`kxi@y1CQ+=g94lmD?U9V% z|EWM6=@S07NS)&n6tGnmnqtm&H9rTb3x>#-li!80gnPUjw<;DRwdgdGUB_@j9@4GD zh~{MMvMD6A&=fg4E2kNH_VaqRhC!;zDVL#G;`3tJL!aekz_|uDQaB6?`?KYhM8hT0 zV;X$Bx&(p@J%i5he-EHET{$`NPk5D|ndxiF|5`_d$5CDVBQXyOqwbem)wOmc95kUt zFZMZG%e;^oVq7&y7SNgPZ(rKHR!opbriR4T@d3_J!1MoRuqVyP7u)``HR=Mc2xTt3 zhmw;ds^;Izn!HZ!;>_?0!Fa_FWsT01t-1anD%~p$?(){4&7>CEh#YTcD86~k#-k1T zq8N$Rs|GAvgu*)>r3#gk)7$>*=$gNWBT;6Tv>>=@tb8h_fpK4PN}qVaLT>h z%WM*1wF%%XQ~3hENI*tbhhw}EKcyvU9+BTtLtpau!zUD$#LUVG6f-|bEu_mt{m|N} z*_lO$(zAP9Pc|(sYGWMq1;YK`P(D!@>hJBx^@cJ7(&{?$r7mW~a@B34AFp*5Zb9Dd z^tbdS_5Fei{;mA%U%A%nAmcaR$E(A5FVqe-lPwih(O=cO)RQP!ul~i?>PUN8p9qXu zQ4ntuZOpG)IZXC4|Nn7~_Rn60_;vBD@C?xW1edQ0P>W7p!2_;RsDB|HVcNzjh>_`A zHJRs=bAdHUc|1Gfl760ay;MZzKu%ZP@4Z(! zsIuVw2W#%Gg(ly~DC`wxbe8g$B%m{nqiruw4 z@1dcV64dtmJ#)XghO>qQj^kN6y=6~dnWj9(e7)I^DyE?DQQzh(41I>rM#Z4TTx(%Y zdMD<|eM(VwEzsE;7NPiJw&eJr}lIACspPn3WqYzqE|93xP}J8;>&LVR{ms?VUIjcJKC$H%!7_*sc{> zc7Ji7rylNu2AI%+q!?#4q%4EfXzV@VEX`NtW%O*aC0oz-s91a|$=ImFZgp@x_=bd| zeCVW@=Cw0a4XWI={#d+N;01$0f7}WyId5AJkJS#hn_w#RD&nHuPCrcp(3l`-H=nEgJ@uY<=sAZ=o2ZUX7rUH)ez3>pT*m7Tu+qod z(}NwTGw}fBEQ9^tVfwnSzchj4Yd%ccmYVLC?`yB8+i}gq;dCK19pY=qHRjfq$o>tL zN@UUaQLJI-)Cs%jk|3Mm^9wx96xp%s;SKW<#e}DTL)E+Dn4)F*|2R}7YTE>l*kDPL zVlRg3k4wKjLcN9#uIP2i&R4}7Q0e4j)=IaVqn>kNFge4P@G>i4XrhxSQDh-PTfM`v zYC)1ckpErV9q)>}Dx9ibXMrx5C3steQRyDc?Hd0Q8;W>#aAWmfzOT4fe~-tLhyS9u zvm0assTPq^VqYjOljHiETfqWu`->#8sOOv64A}F0I)$`k<1Ewkt})!M?~^`UMah27;$vD>xY-zAq+^}s(we~6@urBd| zwEi8tK+4?{+f@Yo+82!_v?rAjEKt^^-&J%tGUOMk?ms?0G~rPWIz$I1ewjS(2+ey! zylE_~TT4F}fKg5XCjE#PHY?TY{$+9<20X4(*g)Gd{B<4r*xCvO^>DVS`mD9GI@mw&eC+~+xLPMy}vhc9|IJ^2Eul>I_>S4 z)4!#S91A=w8uBf{7E?LmCBllxRgXUM7HfA8ZN6~j<0Y---}zqBd;RgvoI$QheT_m| z&2yx4g2=6#ZHX!?@ldn1CkEC|krE+(2)Qk~5nJeHCLr&2;m7f*l>Lfoo&Vx0B|O;H zMHjkWxWtOI@p4{%ZPv3mHL{r>mkABH{JydsZEIrE23jC zqXf^qII~c1d8Gr%936S4)P#+?KWisj8B%N>L-LlDr#q68^2E}k`)c?WA+Xr=|in%7Gb}T7MoPg}~dkpRT#dWJG6Z zX*zYLMfmUiu!4PTkl<+ZJ*?(GRc<7Yxu)b_(kuSo)hGX|kOO#6ssVg!iYbrGu zPY)@3JcDyP8|P=6)JvixdgLIx(t+~`GklIFY~oaGaWJ1%sEWy56|s=pH4$A12fMqd ziJUJFi@DO6O%e@DzO^Aqj=PpsgAwVPf$3|$a%l6p2Whf!Zn9!rMSfGgPUcb?NO0h8DYPCbjUw+v*j&G=O^{)>wl|ZX$zEu08 z1ZRk4$f3OWbW_zz`<+yo`GKnqniZ7MFFT`P6|o&hJ=?<|$`+~oKl^3dOnw@eVGo_o zLIhXqUaKKR;C~j({gG|*g!nBxfeS1dD<*PVId-nE1!Hg#r&ln#s$TC$@P@K(-C$Nd zj{a6B#Cm+iRlUX1Bv>G_dy_BSU0YVjFfMq3x9>lwL}3rx9H< zB=EY21WD@G2HY<&=zkxdD{1}gI`BPfNCie*_E#5l#-o~!$==U5lb#xlv6X$_wzaU4 zP3*YtO<%fLG@m57lYs^XDrd45Ess&_x=m%8DOd2~TCk2bh%~ut2;z%jA1tx+SS$qt zK-8lr2NhfQQwg})f=pmZ3S6}HeCBiE&F{`PD~<`zJmMYYa~m;uia94h9j%^z(w_P; zwS0Vt-8MGIsvKh!YUdms%k{^15g4vly*RN2Wg4>e3~BdBSBfI(;fK;RW^vE^oJvB_E*0}@_%&s{F{3V+vj;LVVKK)-fN43G z8(inw0&w4N$rx8$6R@@A!&J&CB1-@8v1coTmA6a2u`GUv(M-I4fp$hRv>-}(f?=Yk zuXi&+>oYAfv+{#>DHzRFo{C<9#v&oW%oXY}&DN=Uhmi8S(AbyAsFt0w1}e~J*cpW{ zr~f@0>;1os)!QXu*V~Y6rO|jl&!>^5kjVuN;ekMbKfFbi!2<5P1}({pgzidZ%N6hY zkLpwJbn59h3u0LlfU3hvuS*QEUB6yJ|L)iz(D*Wi!mR*;gw3X4=9}Wk&rbqWh_`wH zHKa%F?U9Ak8yz3E7$`k7nTta;h(7%rdw;Sk}oBZ>`Up#JH226N!rKOKA{ADy=e)zveV+RxM zwn96f;cQaoX8{c)v*H-~J^#+WsGdmZbN&<$~+;--lNZcnV&vp8e)5 z?W|!svgF6-pU+=uxi16mf!P#96q~vgzxv&V8^K|EJK>ASH~yltxAd-$43~E>vD5}^ z*PPNgJcgtkcMRUR&P-L?4uLL*gk?mMs6Hj?*RmZ;@07NI<$8_Ei;y6Nezw?*r8o#f z0S5Mwq1kJ=HWg~hzt9R~<-g9$MOAjnYT+cc0*T+Dq;u?nUXqF^dEQeiMGM@4)gl#q zq7^n0VT8yh;d$ygAk7m#P5FwyJEb1Is(4uVMFRz;%77V31I{yrQjA%wwYy_q&1SqO zZYEcVIFy9R*W4S%7&f@Ffx~S!y)77-DRHnTp$AyOVZiFuzw;~$!3VeP5785X+#^G_ zU7BuBy_3_lM6L}!WKF9A#JQHb&%E8Ad2cSUy4H z%o?`R5|zTxu16a*4AjZ=b_+xy8mrjAhE*^KZf~?33F?fJ*i<6CS+^Cga;uh4-yPRN zEPGh;qIM}La+IUG$~@!*iM@pidhhR#9|ij0w!0h@ojietx-ALM+0n7tAM&;!UVN(1 z)b5@F`BS;AK=B%xzNAzVu_-)=^G@HTnGZKymf2@SU1VveZfRqWy2`cb*}MJJq0jQQ}bdw zA<=}y$eBIXv-{c#Z6f)Tou8P!C6<)i+5r|dwTf}i6! zoC=0bY9ga_*wwF_?y-0o&DT$PbB6vwTi?!e&2rayDf`TE=!UFSbZh?dZx3`LD)ogtkehVVm296eH zkru$W_ftnat(m^|+4K!_$v1c2*zJw8xGoUGPA|sRD&mM{)}le6jj60!O~&R%54oqB zl>RMXP(J<7?R*?p*v3ocwd&adG|CKmxU0H2<@0R>B*yAL;)P$l_0tD_e>f)i^$8m^ zUK`3rLVY^HG~wx>75DBV@)`uRc9#+rLNF^lf%ZJB_F%Aqf>m2=Y=A?IwE?bBv+{J) zJKjfKmi3hjj~kJ7OB1+H=4oczJ?TvP-7dZL5@v?C#c_qw7Rcs^5z=DQS8H+DC9N&# z=Y{z34OeqQo?W~8TKLdSa-9C2wK?i+x=?ULW3$vFsODj!xS+P;K=zE~CPus!FQ(;H zmXP6GMv^+_;*80CLsJFzn^IUSWXZ0}VGc`qp}^|X2ZN4~6O6oX_1suC>;>VksM-T{ zgc+^By@wC8$H!48r@t0Vkw+HJd{GPyY16>$-`vb|?4uRbf(a0k~U9n^9!$KkT8Y34p#e@glqs6zNd@0M` zgs<|pB2)V_NJ8nJif6ORdc?wrWV0o2&%h6}oFbbpBSq?mjQw65#%Vu0ORa%Tj5kK8 zOWh`BCZHX|)e@$YqCYbWBWLV0GRRF5ni%JUAdo0xMtbDYKd(F4k3A2p7xQLk0v90- z28(5NtQp5C)fcgn6VpvTGUK0i4xnSbKb<}UqMZnIiTv5%jA}GH*}nkX75vroniWhu zl5)+69dMi!pyhe96%=pFwJ+plj_1TsVcAeYtyOOoB2rXC!MqJ!l&@NVj1gLFW9FwP zy?tyJA(P4R)`;Esq|5_bbHTpo7=^tTac%eBADV8>4*w{$^}>MrLpM*`+q6pOd9QmB zxNzmAa+Itp@dvS=D}1R1qE7-AQVjMtWmxC@K$!nZu}YdTswu(1`2c>r^O>+k3v0n zGLa!qT}RY;rc(Xyw`(zUFl!!A0dVX%FC?rvZdMIt%@Z_Vh0E3RqTPMRou znu2c^uny8A-(8{JnDr#%1o3is5nix}=j~|DlkED_f6tNsi#Pr+?Nh*6p2P;H>GyT( z1tP%*QnAL#hMUU|nNB=gON;i!8j6gKWy|80Z?@R>V}84X77RY4txnUnVSr3hq5d+4}bunXk-!Jo-XZ^uhccw6}3{ z5-YPwKGNi`m9*B&PZxYnYe;Qt=H31jt*)vZ%L>cQ1?R11^K3Dti5p@rN}y8^_}bK+?V_6FO2SQr zX6Kb5*j7E)Am5}PX2lLzuS!bHVpJQJ2dTFB$B6o*sJK-)Ma#w*0jZ%k_$6j%l#-my+qQIwV_#8^-xoO`K-5Nx3JS8vpX#k@YPrfP`5j@~_?-#;6B z2O>gF1mj!R!?dtXoib0vSPufjOtW6&G{exo zWZ#h|M^?WAyK=vn!!JLdK1h7MaWl8AjC5{RT#IOrR^T2uTx<|B;sXl)2s14Pu7FCu zZ0(kE=_NC`!(c>bOR{R~^9E-^c0Faeec^NgSbgu93$T>AeBw^Yh|1Q~wd$=bPoQMf z{QKvy5O8oC@UNUI^kDeKQmg8ZRAwoTN6Z(MR6iLQA0G7$2Ew`Eo#F&&Z*x_%fdm2a(8eW zmoU_zX6kwxnWMCKd24S=hs^3r=SSH-ebNqUeavX?kDuEAw6*e*Gup~yjGIc;ohZjA z%OyhvJruv#O}xO7mm2ncq?A`8?p6tPoq4Bd`%dP|!qn`uLtMy7Y&x9*j4995Ma`MD z)MlxCR^im3b(;rH--Lg}2nn|c{bN|7{_NO|Gck!1T1eSv=uV99*Z|}8wUC+!rqf6t zdz)>2$H$)0w*DPsB6aIw4ni@M-f z2#W9Q%J7A#ftron5eqioM=W!Bd1H_$wAHkJi`hF1NnM&Nvvlcdf7{UcE!uXoCT^)M zgLy0vbB=4fyQsX-Ao)|Lcp8N#m)R7Dl9R-Lb1^Hiy%QJl3ncwOJw6UPIo&hLXCth| z6Eg#y6V{VYZnWu9*qC-Yp)R@Pjch@~NRpiEA~ubT>-}+W;i5MK>}$-Dc}LXKVdoph zJ2=d?=}%cZDjvvql#RfyxRu>N_xy0!TAeu)kBr5!OGSn;2Td@W=t+P@AamiDJJsda z_Pz?wev|+S!Wuj1165ez5DTvh!kvx-OLC@N$s@*-LLPUr(;0n(MIOF2PF#Q+#G zJv##ly3o9UU}z1-lS*&{3%GSfTkK_&opo~DH#PXT4k9mr6C`V1NJT#w}b zf5?0Da47$`|6eKUU6xW=!X$60ER!_$85L0p$-Yhz3MD(kkd%GN+cI`V!dS)-vXgxs zVk{vt1~X(CGmJ6#UVZNSK7OBie?IroeSE*i@A&?X-+yz>{4>Yvx~|vjJfG*|d7cp^ z?J>e%uusZnT$K~zAQ0{?iAwi{EwOUO(=k!zr|QDojPb6dfb(#E%tY5K3`M2@heFH} zoal)=xP_APkwL4n8F$X~lQm>56q$@g=hw5Fi+$%@YZydR zQ(%a&q9UhBjl=4vuv6{7BH!*xf!jIzRNg+R+S!)zdSp6OQ`s{5$e6mkH!tHo|JG$R zHYVK8@od9fI()lN*J%U|e!h4z$M1U>)5uGr`drG^r@t@?r{&uy@^u&Fb~6h~1AP_b zqND$DJmYlTROibvp<3WAgoTXCu~ePCMfwK&p7ic~>eMN(J&bXiD3>K4*qfNVhLx`c zCL-G{Yxnwj^`*J_A}Z=W42(jLjqzkSf1&xwpzSA%KT7Qht@iI@Z#(^UyD4c~Q`10( zIX)e`X68pbJr(M+KHq**?)m1%Mq8M!w*}1zQfhm?ZHKm^vnN4VPyHRH_4(nR=U0vW z_xb7U)ec?;y2J@Il5BItQKpXm7ka><1A}>8{VzD2@bTB6Q>KoagC z($gY>)|JLL2U~5qnL-{F)X!iYwToP}IhT}p9S{2-JzP&8z;veso)>p?C$k#~ZIywM zYnuHs@m!OUFaNB$-lax#cERpt(8?i;tuyX&(4#XZC@xDmzs}A`9c<5#!47bi zTt{&QQ?8xYO+J#|SDe<<6=<3Lp=|DHsGs4H0OD0~WyEmLAx9bY5fovX7UYP6Y^|jJ zn)oPXH16P8I6uOzHmm5_J|ivO0iyMu-|N>RVi!W1)R$A|%nx&n zjm=orH4T-Cq(M%FY};-%8ZSluS1@z%+4W++QkR|{aRcZ9I+m|e1J zU`scjhnZ4V|RSOsN zZ#g!Qz87*-py4sgub$3-78if|+{pUZRnK>QaD`{LzakBzd&l_}Pz`YnDd|fnDPPZl zZjD2Z)=66@pFYO;7o;i897Ej4FI@~68`WAJ%n-Ci;yG3OTK-yO3^SHvf z;?U0OU|mPk)elBibDr>xjwM0%CwvyZO&?D;N}Snk{s{tAN^jg5WBH25ho{!lG8Qa9 z%FGEfQbzY0L)4K@lJ!&~uD#kLXzkM=9B{w&;N;^Ga_;u5p2oa&({avaV+X82py*WR zYDhf|2a1T5Xb?W4FF&vlRX%p0-g_f0kLb^A45Sb4txeF|buIbUx++_7Y|%Yj9`afK zBa<#8A-hUCPbW{}khBP!tz1-Vn(|7tA~edx3pc!wImkQNJFw83Qsno<0e{YQ=p39% zS)8@35^(UmvDqvvoQs^UTieMj43)stU;g@RV{Bl76y+=TG!IPfk8FiJJaLz2}|^&ceu% zm{30v$9k>({EhPdgvHPEn`V{byLB(Vq7T>6OMyCK&jRG0Hy1)=1g3UAX%cj;D2YyAi`&&D z;MdyPt??Ltp{dROp+p1H``vGORecxW=R0|30>sGk^ZF6R7 ziiutzI8JXlTUQ=^5>>apIMqyBQ4POSc|m3A+^WFM>-|i40MlE`JAtM7FPMY z0sN9mAai<{`Ra%cPF=!n_24szR{=0g8DWkOjpBHlo3LwahcHXVek-uDv|jMZ2@`-j z^$08-BkFMwhw2MsIP^H}@Wz5PQjH;Uqx2hC54kZ)#HF|`!e;Gz3#+RNhkHI3Xz*iH z=n1qB?Otu4GoHN<>kxh2rT5~ZhsB}sXz3&F#J|!_h<4H=l#^HIgeGtKx7^Eya@iku zCw|hj?eqokEMsDT}c!zv^5s8D>4MZ4?wR=&oEpiCrj)m4-&QvVZQ{i zSLb;?Hk@u086B6GsJ5rsv3f|Ie*gGgANZ*~fo4+g#XR4DMiNd=MecCH&PVU9;3CJi zC8NW}pn4#IDBap^{90*)k1lh>tNtV^bG;%7swCjWA#a1JXI}Oy5N}(wS>xSXEOJ@f z>L!#X1Pv%HX1lbHTDoj=s7A9!BOL^5{XHa^v)kE~zE`Z=mKE3D>cfS#>~T2Ww`LRG zo9Wo8EFWx%Y0QA1r~uAxxj4+Ir<08q#!z?avRnDOx1s6MrHVW^wRCFMT)+OSZ4je; zWaoUn8y>Po9;uaMFznhN$@#}P36Ytg6H~uvcK`m;^TpM*gRA)DVDR(7)Y~Abx`Gr_ z#~2-GnM0q^;D-&;y;ihOiU~xQ2X{3o-)t>1^sZ**Hq0Z1<(Z!6vRU3Lh!t7lPGJwRV_b zJC^t?6KdgFoX*{j0;N(J+1cjmI)5~p{q6cAT%;<(n!9LBHa>N|1iUy~@%a{}hV&p# zD{6{^W4WLQHzAB_!KrBqfhSGTc7X$Fsh(Cp^=CJHmx75@ECaK(keTiuvUuaePEw z;xx8q8)4IAVmvW99xnTJb688dqNCX)|{z(S94+6bgmM;)b3Ff_yy;M(_>++F&4Iavc9w}v<~_` zxh&C&HV~_|y}=mGl~SU9V2xnmYi32-u@U zmcE}Z;%Lm_-^X$E)-MJnUzWhhxBCPmEu)GTNZsdFmpeyN(Ob$52ZVXb`SL5Rjokih z8|G?L4VXn@AAb8};g5i@zbL#$Ez6$nMq@P>y{(Ic=+-l>w#+CQmn`Yi-_e^4g*q+f= zKIi_3%oF-~3WUudZrvffCMlI-Ed&f7!Yb_ALX06;a;@v_L`$Ckn3n`psdZWt=B}hK zo$Ii8G`y)z0BV0W#FQ8G)dw9UTkgT0`5X z*6lW{5D@>iWD<|O#ZH~c4!)a`BbJJh9eHA-w$>x78<8L}(!zyd-m=(>lm(poncUgt zHQ93YG6F}qBI|wST9yL5?FGwxZcrsn`EZD)BQt}}-kO3+_D_c+O=?^msdjN*dxgtR z`#~`SSR*DnS9ovA7NuDLhQ}<|LwDDj13)_9O%aQ)u(MX#tfvPI=NvjM&_zU&~0(qv!T zp06wYA7`6aqN+~Iw>}x!J&OSH@77gBp}-eG`}FN)lZ{=j)*{DtYa%>DD3wd~tbip_ z=4;m`;p@Qx<%$btdz81{Gb!-4HmS{)MO9xbN#7mwEN2`4D&;93xnW0__37_xZ&*?4 zx=+ql4B59Hwy!%c?Dx5I>?rKm6n&z~rI%MaTHYVwvxFQKMe`OJ3A;MIoO5oFT~qn3 zu@gVsD=dMCU16`~t9uu!ED~&vpaq%M3Gjo9yoJng6NFt#CZ5n$h?Eu&cxBN;C+P1u zDB8Q;8Up;}NO?w=bE7MV(QH=uzQ!oSO@-TcXTukS#|1DvQQ)?ET46e5r4!?i=?z|P zhpmjQ#Wyg~^s{5CqJA+>hb^uIZ8 zfBEV5{&ilCw2bYOKV&kDgf^Z$Mnn}k+%;U0P#PwJtxb8#zRPzSN>i}LX>*rBj`+q* zxTXZJFR{ZmL35WPDtuAL zNF(QKX8Kl;qITtE5HjcrBZ8Qe0*EqxZ@YD_+gM43x8a5#Q4x!o1f6k9`1h z;^Q}Q)hG~rwKYlJ*GPrbGe`(kg~|l8twe6t&d}C^!4|@03_HyT-RHlmK)>9Z$QSjAtcwvlSTuBM&L6(p~>@>(XV(ZZx|z!tuYRGX9bd@;8w%CeeW zy@@;z1GCuVI3)tyzbqavy?~o}5dymrCu+4tCfO7;2BX#bxdWB%#O6Gl4f!B*u0oE`9I!?;QS$SRoI_RCkfZnn zPKURrF?vR;ZEcvVsZ$XWn_uKlrPHb2dyZ3r$ZXo9xzhth=5p5O z%3q5BeLWtcvXQT+Rrm8>|K}TYhllNX?SJ(G_&E^1GhKPu9U>r;8}Rkn~GLTrDf0i@2TU z(#LL{m4SiqOpf(W3Kcn>%Ip9K@6pNKGc)q({9I3{El{^=LQW<#_v5leX3QcAe%x(c zDnCJcJ`Ur)bv6-xYW_)KEIVKRh&3iRLog)6+jVJkTJv4Ze{;)zy-i-nJGdNre^eJf zU^<$38%Zw2#VIO@;&^|9`6AKZXvZumStQfK=u<|$5fYlFFidT^+@08+FKk6Q({gsm zMq5&DqsMk<;;GjuKkk_!LV*H)M93h-FO+Pf8ER7m^)FOZ{$vJgAv=}k*UvmO<|OmL zhmECN@0j1Lka(#gm>A)DlQS=3uJpJi`opbUw`ctB)e3=KqIK>)6jTh0DmIt1gP{)T!5}4WoUJqMX7eLs9j`cJ0h}5wj0oPSDzxq&V5xt&GyUaA zDuJ2yYhw+i^sC}mo=3=VOh-M{sGk{18K~awQ`jWtwsqi&W9sI5qlHt-*Y}r8qcD6+|LI8g5x3%Ku zhneuhPTTwG7f2s2w$BMNOFgcHFw98yIbI2Y{g{aUhTDS|{d>qRcmY+Ct0FPNYAY#$ z3p6}5@A!?81E$56!hHBg^KgY`pJR`h`=&YM<{!t4164X!T8=*F_f`!^5*8>PM7l2! z3oI61Z|uDD6bMMX@%~svx&-fMVv^zsRw%pXI}}D*>2dmp?7@-Z?jtQgg`1!US#ZpO3mrfqmlrw>YNzi-`??I8)u{7s3sVcQq{-%VjnVt=sBP zo(2>$J7cmM#8Yd_ZZWIu>n=+BPle267)j~S3*GY%e6-ut%A_PY-0XP{%#UUloIq!pyPi@L6{DqMHIsD>=27M*p7w8LmPQ?Fn? z6D}(I&fwWoyV02yPOdqfHA|_jnx1ySfV>(HcU(F&uZLtfk1aC0!Yu8(hz8Qsa1_{g zm`b|bt)rrZzqeyxsI-LEO>^y*7Gi8bV6w;m`d;|#80X89xlhN5?N(O8P!v9>1zulB zgkNti4!J7n_%g*zU+qPMtLr%?ALCp0SS@p8zml@dP%c~9Oj3SxA%lJ!CjiZ=R^p4`CLTa%eP+}WAP6>-T14eXM<&b`Y?<1EEB|Tw8#9y$BfakUQaI| zJjQr?)P9FxB7t#zGa_6&*$U)Qo|#gdpIpU58~S1*{CKt-yR{KgCD`8$=??NXaNq3f z#`x;a9vM_;Qr9!X4B=ImmOt7)xg%Jro95rA=z_Q36*KZ%AICl#*u{=CM@Q6wXi1~< zAKNu;HY|ji%6?aUO=?`Z^~MOtwi<}u#~eO7mZG*(M8#g_wxfOj%-hZT2`{g;_v8Y# zvMbYqO1_*e8Vo%qGEw;awrR|WW!l~4)i*#ef(F{&?wo8Ciwi#&|n54p_F z-Wlyu?r+vYQbYYryEFOg*gQ;7G>aEgcbwb%?q4hVHz(E6jGXKUGT zPzNy{bN_q=RCR5XFLa}@Gb}Hf+0hADn_;b4^A@3fxo(7PKZ?DPG%217PU=!Z&;8$h+jfXgU0n*Aa}XB(DU5@-q8RDD%x z2!1}oGRtDAGirfZIFMgYu@T2Op#hx9a~41h;^b3suwYI3N3_$hcD+x8U&sG&`e?i9k`r`29 z$$#Zux5v)_2buTKpia1v%~=7$xcRcMQ7BC?U6o zC%3jIJO}1Ks&#>2!V`2Jh^jr8hJc5>^NHiI6zDX;;g_Wd)DbVqg*^9StgmkUPJ{m+ zA?$tKKks7Zc^laonJ6#wR3JWO7~wZ>XBM#S6l5zdnB#dH@ECKshlE@{fTc?AyakrT zE}3@6s8B~P7dTh+1Qi$RLdV=pTl43Qb}G>MjGh+mh$zIYt+wTI4ujGv4NAB4M+2?> zIX6Pd5<2rO(b_xhlGr92fd4IY_jp`p=MqoLS|5h7A)E?5M#T1K)zq%VP!T z74!WWf}>%BT;Z-4thU{gk8d5h?DMCspkw+;WnXm|Kz1{}*ALmnyHuqsf#qQ)d-?9*lZ^Ee6T%S71l$oc6e`Zf+*7RO)2mxz!<{I`Py5 z(x9=V*vni>4ri*_J=3!%HIV74dZ=Z$s@Wk^BBetxsCU%e;-6$&)8hxff!S9&UA!x~!SkadAya?;~ z5a_4+LQIk;e5<@Y79=$91V>dFs7|8GK9@x_kW1`thCacBfqlLZ`olPUJWkDc-R@%T zy>d+Pzze~poWWNm1!4TBQEvy5BY=6O*i%lV1ap+sI=3ba{{Z~FFhL(dysj$>p((Ow z3C^PGq4NH8LWFh@)MY6j_vVz^=6$;ujsU@P<^=QyaDDdLu~0INS(&~aM~1ihA8Y%Q3*eQ|Q_AxrRUR7D!U5SY zxL1}{c{wmRjXmP9zmk@8uC=>7b9|8?FFGJ*ccND6CJKL0PXa898h)#Fdhxh`?_rc7 z3}Rs;A<_|I>gXWSaxZnCB*Yv*nYw~OXQ4hOvWx6j%cwn{A4~5HT8u#o>V?gGDmKcO z_2vk>OZgGpYLoSX?Dl|H_bJQ25L`a)^W*Xkt$*>m(Suca zR_L9b8c@RHg}UsVNvoQ90MK6tG^eus0bgvL5ceOo`}3m84@hs8`=(GR|F^S8rQd4F zp!{D%a8;Eo&b-Kl%H1+8vses7RZ;OyOoPm{FWK1xW-p@ZTs!+D?ZRz`Q-BUK7WBU& z80ggQ{E*v%FE~KzGH6^OWAvn~{D@ZRKEJBde;eJ|CqB)#+7}S~`?%`T@&PiipH#)c z0f^mxGA-yUen5~MlCx_Io*H2JWMKCUxQGs#eyjw8XJg9Vt-PinID{-N6mPGowHntA|`d2ML3S8t}Pm7(0q-70i1Q-E_oEYUuAL5wJ2k z0WV+;zx%8#?H+I#V}Uup+54bEa(3-!(b+=_RJ$qS3AaTdb%nNI$?8(C#IIJgYKPv) zJmU(dFKrqsFDzlDjaZr?f+-zSCcOH6&`)Yx8|#wX$}Nk!j-#Nkx^h38iqPS zseOgslzcY1^bm`ikJUmf;ru8LRlK2pI)5se5F>P&*3I_Jebi7Dl>n+%R7{-XZNzQz z{vUW^-1q-@hje<~iaVN64fusSx`k|Y1veFK^cy4`X`{!%&@!hh&&tHvgCJ+&wBC!t zsbpDEG#CmAQ!~h{qxPV|svEOS8c*<=np4s=Y(myLS#Y#}pjpexH7}7YaZX!*zDZZn zz?`<08vFXb{f&@;oCEn#Fvn*y!`O1)eO(pqV;iMdc5dG{30Pv#-5qxTbEE@ZeY@CS zT0!DjRf+8yFsC0a#NVmJkQbOO=cAMPmT_E%AO>YUvE=Vgz+dsD@WfE(6ckQ3f`P5I zwK?D?^y_N-j}5n7^*a0)N#@^Qdiw4kuV>L=rK1HI`xT%?KO2G=Hr-Yh8;9yjLpSK? z&BQc^ibNqH&;K$64Pmr&)Mx z@)hyh=XXo)IoRv})auZHZZY$=I9~Lx0;9iMn!fb^=$~ z%&H+P1fedwgAKQr_H`m=tMm*tVU{ZK!U4g3F{)X7cJ4!Wmp`{5@tBCrjjA*X;FAz2 zBpMGJ2;ti`BB{1J2Dm#nOC{7%{RcbpS-p(M<(tH6u!l zb-|9`v7MU8%7u=97)R>KBtuv$s;(?yT`qv(Xc)6Dvb3goMPIiHf3z4FOAp|`6g`kK zVxuS2J+8+0`{zZSl#>zZX+u{_06*Zwf=6_hLY!*6_c?612zyX-f};>;x^#9(s}=8H z8XB+-)j9QCQAgchjVnpi_RxA$*eUW{DaJJ(g1wd5ec|o3RDs#+C$b?`SkhBlj@HoF zjjpCb1t(i%5&jG(`%Cb1(1)kA6x*WrB}Rz72S1OF=zseo$bHMz*Z#XHXrRv7*XjBH zkAvckaRSU-;GSuLOai11vy@EokV2ja(f(xS>qqj*jy+8SZ z)t>X!f;I8&ffq;Oc|WnIOLu34M8+`VQFX&t4R}5%(QF5itFh6h<*tfiv+wGcz7QHy zEQrabqDtb9 zIb>)>3kv94_Myqc`Dmtr?!3CH=zxel5Y&aL9Z|R_lwyjS-%ls~wg071sybGQclV0& zkvGzjAV)wI%O+@zp+~IX2xgdmI)FHSPv)nLC?*XQz`X7uxAZ~Rz;d(Sgi|~`@wWzt zeBSB9W(+dDDVObt3f@1+#7D=mKkdNJ54*#F6u@g&mdf$dqW$|F_|E-G@w){?-bUWE zjQLs!JI6G+z%WzN_|1cAOI*f#LxhE?sDriGsRuDpf2Z*Q8DmPy_a(y?N}DihW2$X+ zc@vGK{SsnKk@Z8OAp7RZr2vhPqPmQYl#{t`3x%VG@M;5X_{|SxpKfRk{1^@Q{|<`( zV@()5)ZfpgH^uuC;4GPgsw+SY(CRqSG*UvYi1QlgCjd2*fI zaGEZBWjJHP7CHk#pc$N^Xr!{>^<)NbL!-$CI#*-_nVeCSMx>B z^az9#&e{rF9u=x@&@#~Ud4BVs!0x{=J>6DoRfS7mRyue=>Mld-9i1rxkr{$Ogq^<) zP$aYW&zMPo-D<$T4?UxU}Vdx(MMiS?1J!rWK76VVsWq-C1CWKekhHbxai9igEX zMv5I{8LXh0n#$fU^A%mM8a~FF(>imi3k|gZ?m{hI%?sGSXSx{^nb7OCet5QU8kf!j)h3BF5!LW}=-6>YivxJ;gz`MZVlx zQA!iMfamqPp0b#`>m zIgS|uSvy|WP;B9t>#-3)RSkwLO7nqgV)g=FNjm-V8jjL{lfHg2Stb)RFPyN5iBx*24Qp^lxq zQpoZfX3ORHnxTUFCV-*)vRoZ(VBn zE260>!I*cp-aRJ<}l2QjJ5m1^O@Y~yV*`U6Y9U_>*FVO$d7ocb!LHG;8nyH?hz_jk_gfAG!* zvj4F!rA~D_pn8T~f^0~Di%->LOooXIehKFl9*@jk@19PCW?n6_it%CH$(_?Sp5y!C zNni%=7=Viqc8~Ao!~pH5h5=$m0CUWp(G>e%+^bELb8-wuM1oCOv7529*3PcC?vxx- z-uEICfUHv9Lh27Gy>ogfeoECfVF$N_pD$3#|FSInxd7(r`gqC;wEf{mNQUSAV~v3d zl2r$cE)jz{R7vADC9LYGd&LHZ*DW58aK+i-?N2@0Kc*jXP3N6TwtG(t>01JVdF)?c zuaCHM{{{B?H0#xuU&U0?k2sU0+duz1V(RGNVWzdE)b6(w4dyf3vEv`-Cm7hVL%S57 zHo|Hhet*^cM6Y}milrfSdCKwI<9yTq#7JNN10!8!efu96X~WSg&RU`Ea2aat@t}TC zgpkmGVx(KBI|%pirWn5k_xBb$_+kDNK~WF{-k8%hOFxoIUQ4i=x7TPd-0nn~98kWl zP3mG;-&54y@zP1NU{nzx)hIYqx= zjPI{xML{)Md7CnQ?#TA3yyZW_cx3!x>G1)wrKOBl6LWsPZg_SyB?uERSYx)auV5wN zoS{GW!UMzRi@rP0I%1MxChDF{{AsP_4JJ7v2j=MdjMI*2jHH3$bSo^3>Obcvk{6w- zPy6B@XzRRW6xxbsK(-WQeHlUH4fit8UGEt~vGIys%8#WQ_Db3{s^X2KOLbBt2DtW} zrf}o7`X$(17Lr?URvQ?)p!FDU7kjbpJJTt|UYFvBzifd(RS$?nsNxI1Wj9(1J0M;6 zRsu#z*KiUT<8j`sS-JAMcgk78MMX#D-uKjo@sY&7vv)BgHa~z!AF`oh#q66ONuqE? z$~}^KLPqkOJ?-OV$IR}F(Iy-hs>eARb8>n2i_;&ce^}0a7a*xqgUyX z@|`6MVdx9c&*>M)-`l#T>v^49h(C>u4RomI4Sa^QvmUW!kup6Dff- z9A;)Xd$tqh^F5y7s>a=)QX;ccT|DJpY$i@d58k>zHThQ~^9F0~e3Q}an|&5_#a9dq z>`_+ckUaF}Ng+qO!;aRgVliyKt&gSG0q4CnJ>tEEZM1>0&n)=I0N91xI0fbvH|eF8 zH)^3a@&2Q;1sRqz+*@U*Kty%TLVy~?=1a@Usc*#x+*9sVy#*)^K3ClMhm{l{CT=Fs zhwk)Cvp6Cj{h~1`j(i(_{k4wlE;^fG%ZW$nz*0J!Qv$g@nL)-!M!PKvtGN7C?oLKQ z9ib0fp9xb_1_<3i07)(z*|MKk0$M0-yqHr^)&2D?)%l_H{;r-lf=0UwA4bF;>Pr(@vr_WI;xZH<21k@CF6)wT zW^(D89QY+jUJNKmU}-DMd%Nl$#1M44s^e{1RiV1iSOyt|qGMXEW4+448IxY{!bq7iRfaZ!p`^RKTe)xrKs@~wdG`EJbBebFAxMEha* zP0|VdFYywSxqWI=Pkrph@?QNPMCMQ_Jz;7cLD333EY|vW0LS4SD=Pi+>&r$S38!l) zr5dwfkW4Jd*WnVHZ54o#!P&QdonhO*_2cZ^!u8Ali`v>h*B}4!dBJIa^VSZ**kXuh zuRJ4BRZBV0X2ZGFXU|3wvEcc^T{_TAY7T7i3}JQu24_7>AD0Sz@4YVSy}<^x@H4I} z10t&i0~#PekwpxILVe-Zg$IdJD1B({?6uGvdF^H%qXhk7+;>m=CU%i%vz~B$0S#~6@fUvx<#7gj0N35`)0OHi|ySS&cD_+F}-`GIwO|AEN=z}C79Q5TUe)FTk4Tyfca_w7+zYY#@SNfkMSx#2jGNE4#c?pyJ0& z!V}OC|Ib9%F5Wtdj0EThmpt+*`50N$7D>5Wq6dgM??ibkHWctW`eJC^TCy8ESu0oY zOGK2zB^yA2=OguZ8&~y0QZ)JEBg?#?tS)W!%oQAvmLNg5j3#pOqeKYO+GG z#8+Wb>t$`mugAYXM$bHcXM`jl&u()PKJNG~5(PYO+~3qx=05@C!6IzIW8T7Oal_m7 zFZdcdN3bPZ)YudbNyx07umzf7E*f!2JC?im4*e|$OZ<_8Z47Kp|DtvM%S*u8WIN*7 zT4kJH?#%VEAGG>Mz|QQN_j28)d%F84$HwR+eGNhfvMX_5&pt`WlLsgm%RT2Z;FzwQ zi>;Wu8z8}Dz?EQ%tf972UOl7rehx7IBfxD|R~q4wJaDX8IQEHaB`_3h+W?eV3WIds zfENt|+p`Sa#u&*21}V!GjX4&TWvPXVirarO`Wh%~Mb6fo?Ka!(S%BmsWKE_XTHxo-FGRlS3rE~obs$suxg|)X`{a~-HqwX=QsUv(8 zLAh`WI)B|AmVO#Uj8iRhy_M@nzim7`pq3+3J5*+b999AvlxU3<30r)1aE1JDmD1nv z96o9vGQ*#_7-r}-kY&GxJS_5t`KrH9upsEbU_{c_<=+Tj=l&7T5kfK6dkDxNeOWbDgkXJUCF~dMx$29 zFJ9#J+z~s!j@2;0AdPl!VIJ@1N9f2dRZeWdVV03;#DfYYOIH+8jjqZE;~}1b4*^rs zU#wRbwrm2h9Y!QqX1$lW-BSVt@Lw>Ecn$3qm=$XsRX5KOpjEK%z$w#Vdv73 ziH~^}`lQ=!0~7_=Ir6@{e7PX_OqDxtWc|oA>kh8_v!k0+R}<^Q{_L(PHV%fdrdxj{ z8te~n8crQ;x-vaoYC4DqVK;DQ{%xlok`lKAE9`bN*`cRp4=YznYM^bP+ zc(bdC=&t8ZKhvdM$X5Sd@q;+K=L|I{%OZRPX8B%y_r)FITm0>2_N{%wu`%TAZ2uZ? zIlryN)7-vpMQ+M@@%1!7|0oi$7+#LA998d&_z&Y8s8D6mK62>|YUX6s$T6=v)vm%*Gz@I_~T4~QxVx#yktiQ=-%ksTHqWI;>&`4F-wN*ooVTSPm zz_F6VG2K1MlJV!yqEQJu_cKfzcwX1U${VwPD~d`!Un~nJ`<)XsbI% z-sSKd`T?*<3pC;%_CmbhAo9pjwnq9N{7A11W1OXPXI5{Nh)^5J@IL@5Wg$OXW$758 zNw$92?!rK$nF|W`+toce43bfLLWU*NFa)A@-N{$muX9j1M8~P4pp3gg|DNz8pwEE_ z_w0Rey7Ws+?Viz(N2B^I4nSW-m*3aIOjH9RlL955(|6y)qO{Kvyog=nR7M)B9w$X> zD&w>&bFKA#Q-;FEkp10=x4xIk+JhU&i+h`|wJnl5#gWnl(A}0n7XSYL@W59^|KhWF zGx(#}HkkPa_d5g9`fnZRW8Cxd3pgl+OiUMBr8EDaZ||I3O>gziY#kxflH`Fs|CGhA zU{&e=Kf$W2n%wkW%X05s)y+E)G0&E_UIew_vgWlTVBx5p?Z;jp{sS2KC+Mm``0Rf& zSA9?Lym!EkB;7q}7l-(^e?V8HSGGlTp&~=LqCuw0A+>o_R|eMi|Z(B>74_- zAlC;Ytp{~|o&GAds~TnnyO9dU==m_ka!t+b@&l)RfsPxdJtw*gAzo)Rs#e8#X@>GB zeXazB1E*o3)&`lTG^~W((_+*^R=TVF^PtwBwa0YbAF}Pbb zZ07VTdUDb5mY7fM?2S`=A$ZBAW8jqILmD-llm>505Rl*?r&mKIcM{jSU zcm^LwD~$>&9CE+JX(fCcb<&S1?ld3het#Fri-oduU8$57$h^l2etuW`S}+* zx<9v=l@;oPXalBD{u(Z%;u+3exQ1$W@-~FZ6CDy4X2T-`2@(&+k>`lWk9A zf6ihTy!M}ZzPWw+_e!aZK$cIn#yd^-mz0B5a1~|;q%#*<#^Eu+qn`CVc{wb8PS%s! zK7Gz}K`eqh=mV3AmO~%UzMC_CKlEuvqP*;pZ;l5(?O2>q#fc|nny|Kd>v&OBX!mZ* zfM$6p!3nLY-P>(8+X3Iu+RWNbve>vZlOGXdWs*-blxih0(Sh*t4t!N!VCI*uUJ@m8 zzXU|+Iv5p{_&#WZaY7fS*mC%VhHICCwfAal?$;Jkpgp)RpD*7U8qPR@%jhfgBj>aG zDsh#UxN?EE8C@SYLiOSJk>oM`fSED-nB5!}LC`jE!!B}8J%X77K}IG0$n<^ePa}S> z?(vkc)b35ab^e`n(#TN67nsKq@wSTVT2#&?lvJ8cf(xg_hHR703A85f%0z@+}kr5`X%kwrJmnCOQ< z5e2F+_Zq4_=1RKp{CzHvfED?kTHO#_v8vo#c*a1j4xjnamj9rUgHoil*v&eRV>h*E znEL&VDSl_H3(MODt`-Iw%_V}b@5nw}v*qdb36+3z`_t}n05}4aj0L8C5SoGJ*)e^( z(Gkc!<(-rGX2G#u2Q~fe1 z%)&4UT%NZEBQIbqPSI$?UYnD)&{TJ+p2h$1AC1msEPrni%ustV)#hvj zNA^D_7ejb9ar~JTIYJG40;JIG`H878aiJ*%7n`rX#xTEqf|eJp4M>gy1J;E(B->($ zZ+PtTDGhc{7`ZUla?`P)d4zJn`$+AD>$@19(7z0r;w4@h!E{gDr~v4 zlejJ>43KAGaY}vZ>;#=;xGs;EB;{;CiA<1@=>Dgdz}e4b^-<2H_?md|D=9rh-kyw= zez{E-g{SHgKi@1CVJM)Y!tx7(#r-wSK1m065IDAA$W*NB-}olKne8GhRRCDAA@X>Y zn_$4_L8IC^{4{&2cBGi^rUQ)`vJVJJm&1*--k4l6YdH=pZyn(c4`k!p*1DZFp7F7v3yGB)n3Gn zz=c^z!&g$ajfS;~a~EWfEo^6w zKWB!Rx{#+FBqRB8;9*mWmpy=x`artzVsFB)CPrS@Zxug&-o?o}b0{8`V!iJ7sx=!t zoFx1L)CFiuD{Ai`;13l|>{sVY}-wtffH^0h531j zkik`J*R!mYs!$u=S595}wY+<}C3AO&?>6!8jjcvGGRt6Do{BUrUL5Bt|0nYCA(LFI zpTt_{=^@-g`zuhV)!{ z5Jsi6YpA4Y2Du(L^>MHbdZ(z(%$0J=lp&V6nh9d4A1lt>ItmJ?-=$aO`3wd$TnU;1|~ z*BIM>SaAU_w9nr8gPkG$WGGVOoJv%i!|z5G*tWhs*+m6 z#$$yIB>b(Xw3D1Kl4QUi*k{wdjv8o(VD%Zx@~yxzZz_2^R8EMTYM^8%!Ff2^BKo#; z*5L)I7Ck#Cm5>s}eARjl#vnU6NP9MZFedD!$hwSm517Om1OGmJQF;1Nk{u<|m+}c8 z$Z0#OG-Vg&b{Z$QzLfl981W7ILe$uGwTdMv+nk>ALSlm_YUlq=4omYemSHga)( z#ic}wMU|tw`d+p|Fwt!qIKps&YI!TBEnW)BxTA%SoVJZIj?`CbbI5H>*`ndMs`1oB zmD_05s9^UKwAmNcFGjodb;KBFv5~L5JeAN5kklM3jVCreU)Xx}%jxs@BVIXXy$%JO zRMSlaPCh}*&~L3FyE#=-JD8OXobOBescd*KU$>Rl(Exi3dzY0e&ZqQdOVRT@MNgPQ zzkF{0Y03Vn>d2F#>yxAW#600dxBRP8hl4giGY!^4Wq_&6=wZ#9BZ-f)Ntg3PaJ9ta z$6rN&*I&sqD%mCeR_dma!SFO@*RVGl<5-i+0At;*fa9MFY4^trg%VZ$GV20jO7b&z zkG6hU&ptz$W0-3dFRBiB!XPpcQx9x9N8de9BlETAdRAmU5f9AU)gC40o}^OS^@Tbf z8Xqdg9X+TYSYRRo<<6R|lVAc(*{J3sO&U;jaiUVDJ?ZHyoso!%46UiH)ZjoytCOmk zHLF!s^#WQuGe?x*Vbi4j&d+U3|5cAj!{mp9Vxi~Wx^$RJnxj~)+M_#u&sgs&-}`Je zF0vCz|AU+o*zwg$@f6-(Ui4e|Hcm|-;I}0m5>M;#+&QU}$ZU?O|+vdL25)Ov3 z9D)|f;!?=sy`L(K7Jt+oj}80viZFb${qqIgUiy1;LiO!^sRlckk+>gW+sxdjVxZWz z53TmjSt4%!BbTkVtr?YD;nuQa`?vkhtb?=)wvQQ6s6hb>ceR)Hy%bNs&kElhEar;v z(_gEtS`UUnHx1=5lZsPDd=n3)>&R!z0N2B)+%D#W_kGTQfr+8!n3u)^(mKOyGHWO) zpnLm@2kO6-tpvA*WyQyW?J_CSp`d$LdKyYd+4{s2xfznVIbH)eu%W6L1?jh@?~}Kc zU#?$k$h9af@|{Yx+;|H?=`q@!R2^R-!7XUY$-;TOYH{nw;XhjCuN;4RC;H%>+40Ns zX$vJfX7UShd4o}tR>izueLrf+##s5U^^O_-QHW@m$=3ke7bbb!5vc3I1{ylPJM+aO zs%o7QYK&sY9I3||N7lxoKT7u3EcHJ3!$2SYW$MK>`oz182@3vOrX?Nd0d+IpWtm5X zq;;I+Z_j>U8~k^VZnO0Fj61**?<|7~zsd0+otAGHyJxZUIs1ByZ zwPp-vBDtA6@5{>tjCUXX2AVrRp@b)PyoG4u*m?SXM;h<5SMs%&SI&8UeqkUlDOgxt zeIiuhd0#%G;tv%oUa*9@_#I&QZ~9e~rh=uzo$!A>11`sErzb0shZ zIUJ|@wauk+|Lq$<@8=N?FJ$L|xVD!ii*;EKhll}71qDa+e{EWy>|4|N*^zPg|2;nj zS7+2}@29>=QR4Rebco%m|9gyZjgU{SqIVF+QR}0%d88RQ?`YpcUAE8QjU7ywHt{HN zjf-~(S>ikdcEe|y8j`)J0g@wOIA5Dp0b4)WpTFyF8AMw0?$Nw@x|L}TWlrf*@nZRa zy(2^h#-PTnbamZOj?_7PTrS0QDryL{Qn(Bx7r+pA8^;nA5;RUNT!aO-_@nn*Xw1V) z=gBF)+*8-JBVk@*fFZRf)O<=iMI>^p{>DkIss>=`IJ7jO!z{3?ydPJ^p<%HI#KyW~ zP;-{9qDJwxQ5}f{#HYLMXD?_JtltQ76RhIt%)Aq66@{22V3JgFp&2@Hq!b(NY8O8} zmRNIls~oqQZ_|GVEzgFgdmduwM9)qGe*2f`>CN$^C-#0s$C!ZogDy|%pj z9}6s>st!CMuF>>3P^hN4b&#e*8Fc--vio-MOJP0fVFJT3gj#bcE#Y7S?=o@AtlqtG zw{`ONkLE@|-js7RaQYuoKosOb>(!mlUWh{>J7ln>wwd1$;2JG_ zz`-KrSE|cS1)H%3iXEi7Y?#0%vq#r)(rt8w@9KOQ1-=g3u-o5w8+9IMAT*y=>uQU+ z3f^0B=cBd*XTAIC)fZZypeO@Fnq`)9GYY4 z6=-I22TSB2Lyxd-@DR?JJjeNuU+aPY?)x}bMA5I?unptlU&~SrrU$|nTJ{2m{SALb z$@_<8fM5QpHq@Qm;Rg+ajPau8m4Macj?f_YC*I{fI}A2jU>Tmp?B;vz!Ll*J$IoX4 zQZu77z1;$5?PkfT;;F&L3;g}?aKJ~+ z2pK)qu*R0eFOj$Q>(!lbei`a?8Y?Er3WEpfEdZA<-_t70-U%5bR3-Oqb(Gy{+)7U{ zx^ZlLTeQDAh&=oq!Ee=k|JQEv+Y<20UfNLmd(7Y3&Znr8JlkBHSj4nVc$p%#X(TyX zaXw*!Zg>jEgofIqcgfy;wriAJSu6QHs9H{dxH?zBOol>$EbZLKtEd!uP_4jz=PSVR za@~z$)85IuOnLA3$oYSiAx-%}iz>oeu8$Op2U&&R?ks2_hcPY0&GZUTh{@QzP+z;U zggt83Bd4gQAiLx|XfdFv66x?7t2k1II1N{*OpDbI)T62%ME1TQ_Hb!d^YrW(yLg-> z1%ioEwr%OIp0l39og=iZox2IF5D+_{p1KR*1QiX}tF$pum5U>W_>+J=_$MfM+HCZI zD;xj?@59__jRb0Tbgbg%3U&hUQ7O(T^&Jn#?{T5r4)X9jRJ0X!ajM}Jcc31NEzR9{ z(DAeW2;@H{{Q6gt{67{V)kS%ig|=UhRX!H*LpG=q{V!&b3&&zCG0tbxtIFlBzT)BN z7dkZ&gB;8t&58A_KbQma8rUKdsFomiND-(nW&=M$2@kq`Pu0*%#pCFd zraCwYWnOm=-LQN%y_J3-58+@~Ef=)!cSv+Y9v1j(JxEC7gZF|cNxKVEv;i$gVt!-l z<^d8vWyoB)&%jg=*bgWSE!K{(H45t0+)haak~L)9T;-Qn@BPCD?avc?Lo{@}WdAkJ zDI2DXGX2}D)1i(B{Yd2fjd7Qx_Gxo>FPmv+2yf4Z^2v>SU$P0?UQToreL|cGk7l;N zu5kyHbLqOgtUOLAa77BNNxYh4@iNzPjy$jset)AT;)ogaYa6{ZLBVv@)1=y(Wg!Ps zLgbw(4^xa5V{~GYW#r`{>q?ZnuaMLCa2l!(5oUpuPDt_Em~p!EwP}O%gpv@pPf%6( zOp2X3qrCM`VrW3myAWqUv!FP<6+>%6rRtWI61b?Ueqxj^ z4`zU19q`DlV&7j69sbeEEWbQS6RdEp`TYKn9(fbXHV+G%wb})b20r_n<`o6N> z&lbACdkUouTFc{nbG{N6dA}U(VR6)*skGpt&{@{YaoK~Rl1+u`&a>vP!{zoD(6S*? zN=fJz*^N5}?)j|7^W=Q6zpX<|$J%2$&|)8MML0?c$&s_PynIY&VX9WwHJ-i=5zOJI z@ittTwp$UF;?b}^qya?!B^mhM-2eOi7+K_}S9l1*;IvUKTaK82RibLbwv8T(2kET8 zitBFFf{Oxgta)-CA-A1CyGS}zB*sPsH5O;_!K8U`KdJ(>{?8l?w^O+vYmQLOmYBUo zzETJD^X21sBy5>OvI3wRyT=T(>Q=U2hYy8z^z0UV@BDa^EYJx5=sEfP&$reqfg-W_ za|Ji$-SC4e^2lo$Hdq8CU(0I(SAGNCQr7)@%Rsod90`4M!P{r}QF&Ki3s-q$$hpM2 z9O2hT-#_Qp;jgta#y@KHvM4B{dy+T5>MZneeof+H$Kkle7V``jN?(1rL(G{3;{c5U z+HKg2uZ=S#t3Y!R_&Ry=sN=~!Qdpa)7I@Im?}61s9sFh~HkM@NLQO(>M^)K*VkmYn zZals;FQg+&Vtv5!$`ei>Cl1ixZpa>D2<3e*l zyvqg~OUbo$<)6qoe{C5@ezuHDZhy~~F~i3@eVGR{WD?C>=t~1u0CjzzrVb%>4)&K9 z9CM+s8m2;au3; z5958jYZ$%1rt_X5UG2*fhv-eaIJe&ypQ_y06?vlrQF9R82j3U7{F+{NNabpQ>~H$r z1BeGEQhzM3b{Yll;52D}FGOdp{GOqii1jRx08}TTGsPE0^~!EYNV(Xl$QTh)6`H7K zU_FXdhz6Gxo@i=1+OpL%X^Y*8qDh0w`{&x>OFwcAxy@!li#kE9JGw5##zMe3&ydlF za3W0P(dJ9Qh57~O5GVaUO}OQ`r-q(jV=yk*enrkybYanZgFfrhH~G9-eok4&^hLl1 zDv#Fcmd@@@l-O75cb)zELt7$Nn|ojqm?}Iqr`RDkJ{M_Cm!)h>!Q=b)oYA?S72xKYD{O}s{3OprvTtk8sBN_R&t%^f8Yxwr<7D4nquEawD z`P=oFJsh34 zZV@MQ{Gm~vc;?r`v1*KPS$9yWlW zF#JbNaA-6wb89viJ)Z~l%Pk0G^+Xz@>=GOfndi6*3x+C9f4N9;B-UzU6!Ju`*V-k^ z5uP;>YD8IgpSg4o0G%FJB2`Yt1C$UnfZxtILW9M`}aZ_Y!Nvqij%~qX|FjJ zn(Hyl1UEGu2atXfVf-4pEUR?hWlMP=|K?W#+E?Jf2Of^n^1;7{{;Z~dLXBu2%4xUu zItFCAFWkMN*6QHPysR!&JmY4dJCf_WF5T0lFX&30#z_%m6Mh>SCed!US0kvNpC zCa&XV6iqhWxO@T*wgc9~&t$Hs>CQS9Znb$qc8ywYEDWQLZO85S^+8?u&nE?3BKVNL zQTl6?O*(ZcXcfA@0njmHPmOki3Drf%-Tar(Ki0tQKLs=myCR;{nb)}PsO`z>`&R1S zntlq0UsVJ-pM|3j^Fn+SDykxctERQePf%FRU*n zGLlN6FUh^!fb~aibmHOvZH5u>lN#a5t?mBHVD{hs$bRw(_7D^muwjtk^GL8wv`Ve0 zsBs=G6O-A`S@txeGDqAbIefcEQ?t^4`z$}_94kKbRY;XoSf8eIhB+b6V0H&>E%QDe zx+h&{VlO?;I?dyz^4d6@27;oOlhd89SdfexDP+pg02p?IKI(Hnp@PuyG8dLiiF*~*~kZ3 ze(Kx2L8x5m-1u(CLa7pLsZH~BTA*E{6gn)rtyPtHUYkw(xT`IqThe8!W%t42e5FaH zgEDW+XlDzplw}h1#gUDfdASAPUf{U<27*JQbFT;4^e(*lTsxN z0pCbzDGa)6G!atiGvd0+g7V+}Yu^*}^Pz5Q{k^0K0Atx6t84cqCk8m6u^m;Qa30Q> z(aN>mqe6+qm%~D4s}HwUukt`HXdeoe69!>LY1#yiz%=V(lDIH}5N}0Z1 zL6o;ajbruX`(*jBrV+$xM^U@&Eg&MU|4!j|C6vdRsoO-23*W-_AG_4>ZTWHjam!=v zQ#w%v$FX|?;dG07d{oKY%g#J%`Fmn04knw(9YFO}gIQ`K7| z45Q6%1GMnOs946Iw6Ig5IYY58_a`lkZn&F!vry75z~#Zs{p-y@exkE1a!$ZPrIG)l z*F6VGR9bvsZ<1XP2*eGrpKXUvO?uF4Q+H;>IA4sJD)kyE1b=54eEzHMvi(zc+4h+^ z_V10UzbH%l3e|v{J8hX@E(F_m0Gp z4Iz7t853nGsNeVDJ3l1wKK9IS5UCIAHIYiOWvMD|plZ76soeyR%w&g~phh3V}41;C(4m=r#?0)MU7trSEpy1Fg|d_cUPh4DHqC#(7}e4ic&W4-+=RVYqUr*vvt7>Knp2+__6{%6rt7@JCW08_@qq1Npncy6FkK8yGJW504Vv_$;GnRiMu

Z-A=z}_tGbvRDztJHAhto%& z?kpbP+O)fO@AQ-0^)oN9j_L(5lyY=&C!<|7o7i&Lkc1-6Eq!B9SKMt=xZLUQ!f4) zPLrSCM>|~675!m#rJ{^o!}zoorK z?F5TilA=iH7ig!4-=Cdf|ZXVTHY5w|o_w_&>V{GSc&W`ua5YoWo#8)pyJ>G#>J zujyF@I{k)$?`DobE`XF@)ncIWI_qscnQ-Dk2LicI##AG>p!P>@em+S8 zuIT)(CNl&LFq*sP&`cFPgqzv7(C&a+o%^9Fg_&ad`I8$7&YcFD$l2h=XXgGw6?%kmH# zd6!TBT68=m@c=_C&`!m_mxVgR&r9@jRNk6Uc<=j>a%Oqqz!Rx0$s2SZ`yA>LJW)T? zZ*4g?slCX@t$OB5_GDs}@uO42R|pn?RW%0!aV9*N8?)EvbMl>|4!u|!ESJ0FHv9_7 zd33-1P*@+$q#cH##VIK(iz@neM&^12ygiIkE(Ka?}XHZSr4uI}RYLlnb!KZD%U(vK(l7n>ScV1eOlk#=+s z^t<*D<@k-_3Uq`0nxlei5oe{-jEk!Fg-nKn0$MMs+WbU)ocF#LYzT7~mi(Einc)71 zfk1ixPrBP>{hkBaqfpeQx67K zBj;`tlv){N#CpL0>6mP;v4MK)jCeN{!jEb-eWeG^;kNH3i=(=l zr##(biZfZx*KCTuYi93<{#W(Ci_kdVyysIX^OlmS(4$JrR|buag5O(~Z;G3UK6*>b>y z9aD!!AB4k8)o|J#VM_&9YiZdbc0Hl!1>qunzx)BxSL2}dR^|U4+fEDG*Z-Hw`agUS zCzttyln&s0c{FgYs{6E4cppD&)0NGCBuG0}Yf!UqJ9@n#TtrDlDw8;inmD_~W^lmxyPL1=ot@7uvc8C(D^|O_I;CSKIOtqH9z(2_vf)rg zNhzu>)QRReCG`tptH2-kXJ_D5_Ul*NoGfWE3(|}7r5%JR z=J&93L#eNd*i4g1tF%aQW=_G6R0Z81iB7<`me2p`Cg zc2k?^r{f@GFC=BdFu+j&9IsNK4JmI>GBCqB-W|D zf1w3+OS4-J4`-O*+Fz@Y7>c!!t>qw&ZCUA(=+@TK_;ncCPC#&f)0fL~i-ftt%Jmc% z`}K*319m3Uf3oPieJ1J?iPD~X{*WxoGuJ4QsgpxFJ#0?I83*jGw15YPYGj$u-j64z zvz6^=ics)Rn5>)=MJrP8?XkrU)38EA3fuv?o6{7H{`%06#Oj_~iVQQONAl^R>Xch< z44Fq3dQan11Tzfw-FCCyN_a&>2JU{M%F<~7eC(=E%y$;F$s?b!9lugr&m^oKFe9Ac z(B6tS|q!RDKviC7?g&Sm{fXM&t>g+8|t5++7;N8&Tb{AuqW&}(Oy>pth)Rk zW7W#M+cYvCHBRd^|9ojZ4o?a!+cmmVmLqAjgL%7vy;M^E{6V{_-5KH*_#;MLvs^FY z21`R{CH!=mOa2Xe>u@bgS-t`XbVS|UHG7o3$C7TbQ}=UYm(-VG-p<878;kuO%~OSy z+9E}P>*aKoBAP&3Zgu0t`;G(4$mWN_Gd2m5b7vHy*vldF-@=L9?>?l+N6f9H*J%ZW zT{h{qs#ACZPYe&*3<6}UrkF|=hW$?*{SF|N96u_P2WZCkiG!&y`0&Swn8Z)xD;jf26Hc~BR&QZ8{(2ISI?s@Bf9NUi1xaeLw;-G8~+|^XFB_2rD+f_f3m+Rp_(jb1hzmO ziTb~T;ok;5Y7qUTcykBS^~e*MeZP)3wfF2b=h+hT4gXtt);dVx%I&-I7*0WO=jBdE z%fr0b5T4r3hfT{f*LseKCEi@JeX5~5BA zZ6Om*%ddQb9+o!-|B8m$VbcFy`WOS30Xc1p!pu^oCdiNW50$QI?)&D`;$~7+g|alj;doQ02&u#^|4te#pFLODATV9(x}Dyr_>`@NC)N?~>QNuL@tNy{~#^ zN_M%HwUc8_3{UE|T>kA;)1Z4+i}ws2Z7&f#He{&bW>8hl4AF+mc}I52{ur)8>05cT zq&u@6hYmdr4)+$Un!XIL&_uSu5l4IObE0yFHT0#|{tnxp3!S1;#cia`o z@l&arr+;Wt;f0}`KbStWfc>-y80Dn314Z4qYBmn@yM+kW={?TbK%j6d_cH`*mxGsN zS}5C1044e6%AApSd@DqC_GvLz2oCOLdI_#4IGn4^pMYQQ86A5(X%$+JZ=G={2D}wn zc^4_4iokliI;F*^_u9(w1nFB-JqL8s^i^BZ=bLfeS9Raq6mqt0>9kTb_mK-Ys~=Tn zx?gXy*lfMeiq~EJF30up|1pz5->&<&FS4rvLug0+%Q*(ai?9$1?E~tHk-eW1ojDuk z`KEb|F>XIVmKBep@3>A^KsE)Uda;x&;a4-x=xzx1hE*SmW-*hv5j6`XKA@ic!GHt7AS*3`N3I5daEg4OG!M zc`N!`*;u!vQU1}I6^(QuD2M0rix#Udccva7EtGlRM;S{7T%1CPL@pk-{pdVdR&p@} zEC50=ZV9?{=m#}EXdq{Zx0$@wsJ5cWjlU`aGj3xIEqm4v1`B71i_={S#q%9#Fzd!* zyz;q6*E1Aq-oG#1g*s~}Dkmg;!0Juy0VSrVMQ`mryF>Wud{w@8SH9h*xxh9~>Ou4v zEwk^8kVGrhY)sOgU$bW_Pg-s#&sF}?x!79ObV zIo)iFdylKd=(#qdK8KC}XJb^p^@f)KGe_<`ZV=%z7|0_GYXDpJsUIVvWmsXLwB zI)ZE}0lp-9tf=zTv}k1o364V%)V$X`d0Vs30yz)e$QkTPa;KncUa*1y%tJU*mT7m9t-=1eY;Q$ z5-G8SQdB|YG|Zs^^v;|?vHEGe04#oKJs>E3jkH_}Q{?>j){Aut`+0}|uchaOr*2X} zXH1M<9vb|`$MTns;eY%%s+Io973b6t#ML?-@G<^?dLr-g)3SBJ;PkkX4VCnbFbo-1ix5Dz`lOB&jk&nApUU-S39cN!r(nx39+wBvyc z^uTa<`@q)MLd7QjqM9>$*J=5XQV!K1eaEi) zjQ~f^T5}R?jGb$q?u4#qzb@_F`IBfYG}W{iJdw1>Fc67siq{DFcvwo*zFks$kOj|J z@u)J7(*R#+j5BZ*012g7%sv7h$t$k;oWy*dO>)s-Zl-#47pn{FpBmkNdpinSH;h5J z+)3|vTMBI9UdeQs)q5K+E-GKJ>nxCPTqS4_LtQRb>`n=kY`iEcMor#1HMaFp{-m(3 zHRC)v3itoHOC*`cj-a;1&_R#pWj-vzxvec|Y*rn7QqnS|Gb>g}=X&XSkqJbFJ`YV1^PjG3zVlu`QO07?c= z?GMjzx5XHvy$OePgLf*$)wI8gy(G88S1;=^XQDWVIklTKGBwts;xAAJ>|#;ctRDy8QnmV+%Iui$~+1zD1VkAHRwx|DkJO#*J55 zmb5wT28vQ#(k*ec6nu)3<^hRGM2(fZBs@NSU0M0LljBK5sf?Ys^SLwATJ!T~-|5XlKMr?`LgfgAZJqp)4=1Nq=7x23>scmC_ocrU;-gU6st1tV23(^e zVJtKQjtn!BA}*(a= z4B}6J_{hlLOV?O7Kk?YN`iPtFrVe`b#rr_)b4#$l&rj>Ze-**!QBF%n;|??A)-D&ulUmWKrFt*_MK*Sfkp z-5C^Ebnj)%{#sLPd1;*cP-)=}2j`ZnbJsLQZ}SX?=Ky1%z7ck}Z!aocR14&P_LA#x z0+Q`Yny07HBNFRWoTH7(5Cz#4MookvExXl^dAF~muk_vtndT$HEbs^8q+}WyY9Quo z-(~}wckM}J#h2vN(cmGuQvdV-VC>d+FCNTFJ)8U1?`m-55pM`c;p~vB?3*dygDT2) z4Ypm&2X_YM`}1oYlmfZ;^dVH~-8hUx5U1g8lx89aFs3vte`9onQ)HjZGfTnGPdB`Ei2cJ@@%(g8LN-KvWdC+qc9Yf!R!~dBON80mLSC)7CIh0%k2EDLaE_N@{A3p*hL^f_J zcJ2Lx*_1>&GTI;0RTGC?f0V^rn_MS4#iDu32rgF1JVH04>{W7+8y+nHK3X!Z}eW_fLC5JsXbX#^> zeifdzrbRl0nZ7ktG8C>g?4{57BvgAUa45j1ODzz6Zcz3#GS;E)Po7U)YZc)64*I~8 z44iJ-PvI3(N(-|NkDVJdf@)7rR8)y4{JEVVb--;?mh& zr04xw-yNP7A_is5%8#~I+3kKof9P{tqH1lXpgwt*b$M8)19J_M9;#7~O#5d6Vsq=26VRsLtQaY?ORMp-ILeb8@F8(%H&w0>yADj)*kG-itsAYnn#x}k!NS4CaJZ;D#KMDk$!>5V?5W0?6#r61|hQ==*Bp3G|k zSOL=4nZawW-skS{jenNvruS+=4#9lcD7dH%_U+WQsQo>5_ouF;UQ=Q|4ph(+HEM#V zGv6omYsVrvQ!XP5zN2}_=s1~ayH*EF`=O>a{89{&AZ4>&k~kUKbPRuG)MC1!nRAdi z@1b*k>JSo;GK>IC>eAuk@)h5{TDds+TNtFu1MqB>$>a^~o99u0n`HHF)S4WyClOm* zq>+X8gURK5?O2}UezFL#-(7l*gH;npT!ky`YhGOZ(ry6i;VG~ z0rt!NQp<#ZIr=e>b5m#BSLVZQv7hD!kfgQ9PTk;b^SRI=H@yGm1X^p0wBXagZ2V6B z;x+EhBm_|PZRme+Qr4T*D>pv-PUDEmS$uQujmkl1cfVT@yJqVnN8E*(`4+2=UVdOz zwXl!A0jiQGZ05EXUkFq$ByI)RKST#cl)?oE#qxKhcU}iOx?cFWO&Muq_TsO|bIUom znV;IwQB%hevJ>fG%mszl<|0z<{t<1U2pR23cX}pySOiO4qr2NxA6Dis5VQIoMgrR! za2k;-yO%*>dKpz`d2qNim@sp#ewY#aaCvg2I2<6G`qNmc+VS;{9hsT&_m4b1r)jEE z&~}s&`D9tVUPk@{b=g3)HMRe*zAd{8>le_u_1UFBmU+X)>CRMh0g&l$1I^Mgh|I0z za!&#+uCQ^dZPF|V-P2WF0o^pXblkr={3;Tl)-C+uuhzYx% za~q8M_r~0#yHm7#fswFvt8xqJTDpzRY#+G4kN*~uaT{buw*~NEz2ueI48Eu8fK0tP zU2>7u6&fhHCENP3**ajjWxMUkKPuIHA0AYHNnIKtlnMti8uc~|$k=w5!j=M4%b#Gh zT|3jf=UAq|YOKWJqmE`V;XLRO-B4=U68C{Xe$8nGgqrv!VV%Wn266GmOYf7a;aF2l zcnutfwcMh1yMIoQvm;bp5_f5`dxTNwjS*;=hWhx_vUh){))dyBAB5|_i~F+ZpCO#a zDe;wARR+6w-ChG9a0?hA*)6}zd#9n25|AeLl^iT}@VK+Uw7RIh%WEYtSTx#OZhe09 zwl?=V47PjrZd-Zi_)NG+F{WPUVIA6X)xSTBapIylZneuboYm z4^b|txm$m;szM5&qPmt&UHj8_z5_0f2(LO^ANhN&ycEuN@{OM~-}v(n|1y#h(PJy) za6$K;dc5+aXK_Wx8;SL#akC)Gn=_EfudqN#mKTO4<^`P^Bs;~|UxU$rlq03t#q)HS zctMD}uc6|T;Di$`{3q{CeXD-f!6U&En^vp~#~q`! z4y7HktPJr^Ic{8xQ2ZHcyE$4Q55h9Hm%-nFEgZrVnK_>ym38-pKVQEqFr8ShD0VEGj2;8ibIt0`5ibsh`KMR8 zFb+L|U6q@Y?>kUfWDVU)X&ZShgcF&b8&Nsy^{K0_>sqzBs>4rb8~xC-GxpzD+mLK~ znv){l1c+v8gkU?eYKl!kQ(d5LT-AEK0l1@0Jn(|1gLCnHq3+aJ@KG0QMv)Bh2D?cEW2o~7!vaB2ti=NG0>B)$yS9|p*@;KbvLgs$|i+u8* z4P2K5c#*03BufY-3=6%rA^JJMhULr;;HDvVzMk*#tx&?lv@Y>JmWofo;UJcpPgCOJ z_oFcXt~mRpzV*yAXnjtp8S$c#M5>|E8vB8O$~$B7(nBAFQr#`=NY&)J@8Bv@9F7t( zMkYlEZUmmj&`d^NBli_Ga@wr4eMdj{SK8X=A8je6XmuJX`PRj=+Wk4KP^joav4NfE z%$Fo5g)6AH$J;y5`Nt5);4(&2iJ#$*hmGXjYmNp3gNm`YPsJXnj5h!>i(9#!ulm)| zo$bt~Ku|PjvlC<#>vUs4Zio88?yzK$ZY5~seLp`_AekSi_m3$9Av!WEzb8hB9bU-0 zk~3pE>3D^6K3XmVFq*D>rRZuaA>amQj4RQAnHKPU6XuJwIXwz}6ZGs5HhwP3f5I3S z>l@vWs5+tOMbs1x(9X>;pPV)=$AZQUlUB+W{S#UE2u0<(8{L!Y>U(wx%KTm`ILIFt zsDK4Y33_Rt*_)dq$$NgUc(aM1oePa-@MB)qsIK2kqFiZ3nrS-Hg$1nr;HhdUde7Yg z1P!KurBZOlO{qyG&;Tag-IO8O&gyMWt8x4NwB0{~BMGH@wN*?au|Ld;(#i9=c;5}J zxh=<<1>hA3?Tu;}y)e>dol*|JF?jv@8Q$erjwG#N?q_COB2iq?cZ)wmsW03MwL!AP zjBiI5{n(7Jq|xxCxshcuH5nG9Cy@Cmz;?mc(>d6E&ef+OqyQHA_Op@IhsP%hEAPSQ z2mO#gHW&fpksD};!f=`FquN<7*{t+1J(N0>C*6b0sb0qswhJE^J&Z2?%zr!cN5pf4 zmUuyx7|=-MoW*W;rG3m<*bs+gfp+QxgXa zj)U{#@x}QhEAZE`gj|!}Yd$9Wbbu?@iz%y|5XQ%%ieZ2PtDSx^2Hbd~)Ic)JcZ!;k z!u)EoU2-OX*7{X4%RhI7p+JX4^)Z(z|K^r4ZKf&}V0M+-fXw}A z^7e5a0uRJ*?gnHWr}`_)cb9j1A0V`n<3z{o|NSuQF9WYn7x$*NEuCC-SmqP#rH+Op zv|p7BE+)<80AbL=r=aVu<-13vT=X+EvX}Uw9+-nq`fl?;)S#dx)-rwtED})9 zyVZ^m0)XhZd@ft-GhnmoBb%lA^3K^nDh}NGNW^FSs&W@U$bJBt7|Cr_2f)FF@8#3$ z-dl~oqGvlq{xiG-xH(J{Kc&!%In|fCS~HI#xsS|VwuNywg_^*~A>p{t4N?~W$Eyq9 z?mf&2R4p9z_p6l%ac(;r_LHSs{lfhWj|iZ{4Yne47P4mg2C}!mYX4X?l)Wf<# zivX>%Hkz|*G)~LMP5&RB@c;FUXV~=7NQyzZQO)56PRXU;+O(h;pSGr3^U#Y&kC7_$ zP*ZmwJ_OufU--v^x4Gm~kWHN*K4Z5ykrmuWm`<(dSp{zoxjK?Lz|4y{Y@J8=l=gf| zl&b6I7x06t6?Aats&erQBm+`?K?Ke!U)5h=9}xkzS$_h*A=fjx-Z`Pe>>s<+*V7zMnla&%W2}b>HuLzrlh}gzLP{ z^MC%1-=Q3A@_uy%V8vV*-}9plt2|9@TXh4{j{#jR(t-PcP1c`4Oy29=?%t|Aur;WQ z5-&gnHrj4^qU&t=W(I>K3BwKGgS6!==Pp7?iUYKMY&x_%+RTUgnH+=-`$1KY0yINFg(qmFw ze)VwuTV=#(4u0y=JDS!rV_8%x+$HmXzR4O#-deD*=$hKDu>F4z!UQVcZ0>9V5*t|? z4)%_GDTsrQ-_?{+1?zx7D_`*q!z-bX%6rF^rGo5vauFGs@F;3@QS@3FS*7dM2L7D- zY(TvZ4(j$3I_vnsjRDvf1eNe^1z$g<&K9uONDPc3)D)Q)z=lkItZ@PRDW?nQeS3$N zae}KDHZwhnm@0)g#pCQEuIjW+M7=t@KX%!tWz2T$sv6emu0mtC=?I}A`Sjj9*(=o# zyL2;S(c^J17tP#{C=Y#($R}dGPaIeBq~orqX=C2{DBZ?R?Htxbe)*1Ye*KPcPS~~; zv2W~E+`PR_!7HjDye$Q?>Rlxj3Fk^#;-$to0~|4UZ2e z@FO}eR#y)MV|abOfj7OIc`f1lM+OD`dAy^qtZ=-i$8Ktxk#u z%}ndB_>QMoEe>MbuEJNRvSdb>nO41UJBdmqs3W^QT*H4s^ZjMs(=! z$qa#1e!lSyk9ywd{uY({Ef0&V9fiK3q@VS+$$(j{o^vsgWgZdr@^TR@RXKIn4DY2KZQF;Vr|F7!2QQBnPcn8Y+&nFRYIY^#*r@j<)E4e1ZnjBZyx69D zyY499eTrna#+^+neKfdIseS(~Jqa^;17+v1oxCg7KR3C77;Gp9Ot>wATYISxJTH@6 z_<8hWom&ZU{ZM`YJF56x9pzIM)h7>}lyh-a3P33?EX~awuFtRiPIz9=jen7Vx|ukI z8fLRsDhnKsvm%^}Rsbdm{lmyP>O`)V-YrW0NtdHBMo>&xYco#i1u4z|hd!%-kJXO? z5=8tK7Gf%Y@iR~eD%}Yz2Gc13LJ)gQd1TipD)4)ZPxsOvr|iS3=YdQS^_?+i|DR4} z|L$9>_;<$uMDxMyJ`J$bokq0YTm>_x;$Ho4tQq&BXqCY=ZoqtcK{^PPbg>%`ZqkM#FGOpUWGI|N#tSYrTrKi?T> zg=SabK|1kaPESq9XUr+`xwMyEzg0@T7R&zPs}XakUz~_u<*Gswrr!<{Ul4!YkOo%) zCBNP>EOu-1I~3YgrIqPZJ>j(abA=BHU_z%iX%~_%<{O*3J*k(e&(U&kWm#;tz>PWM z&{ual6pjITFD(EX5K<5;s!M7vg_X1jv19n8|0flSOVt`M){H3Z@PX|9V4t~LravIVS1yCar*>X4oV^u9pQ3K z2`G)US#8os=kBOChN8GGMT5%SN6tN*Bk8u-kGxTQhe!MQx$wYued zjVY+7agUCe+}z`ldU5MkmosHud8I_llhi!lvf!!Dc5ru4mcIV(J8fllv+Y(#fcvac zg=-f=w3#~&>^XAF?Edjv+RVYVS~59qx}xXHIKpfba?x=)N7217XrSJ1=n(&LBwS1_ zB$m|xmB$Ln+~LeB?mldJAIWRrCup>YM|5X)rv)IfUO~s}f?9pOrk4!gUVRc=KPpMh zcl2}Y*uLh}U3RC9eClG4LF7wfyf;iJ*6CvB)&#t~wz#zZ%Hp)ZG#k31+~0Z@nCX;Z z$}QbdC1O-vTnsItZe=BhEM?qi{R@g8cI^k17<8s|eSKH;MeDts>=p4X7%Y@Lp{Ui zXY_R>y2pBI%Qx6r?rOcu?MM-S&2XV7*{)sP;xL7=ls8apgCyC0Ls$jVifdnuPfw@R zl#tyfw_(b1@M7P$FXiPUbuhO# z^NIen&v=x}e81U^xv87K?AW8u$()WInc6OX7Rd$nXhxo23Us|Y9)eTz4+L`zn2Pk$ zu7VVA+B1d633GtxKt2srRDe&{VZ(^RbAIUrt_@268Deyddr;Y<^~dYzKOfWdjDgi6 zO)!b^`a^Hx|GU5yD0vO34uALZ1R{P18s0SDUkSD%+8%<7c;$@WR4`aI_vp*7SL3dC zHAa`uL?9J3y6w4>0b|lRIX_oQBaA?MOWTk?>TQ2{+7#(R^dWTt`%8|e=2doYQndC_ zR`0&w%0GJ^-FR`QoO&i^jvtEE8#6m~&ukqCQV?I2tgBE+!;FCuW$Lmz zOCB*NjIYWLN`F#`hviJDO(Uy!GkkfpIkVHNX%HqW2RTop*Mef#=4N$D#y2Tlk5W1W zRU~zfp5H(__PP9=yQ|oa(7Gz6jUIUTk)HkJUUry}0Sn|aE^d=ul1aSVt`VGF`^ceeHveLyP**t%uj9e8uQvt<|T z&uKP}Ht=2#5=e3ce@DUtEE2obLcSHZxvEt=6GXw1!dk^HxALn21HZC- zvs+orY0qXfw}PA0%;+V18NPLqX|p*em3qxt19`RRlRUZja%XsOJ>442le9m#eybB^uX08(QvJnJOfj#t~ZNh zCF}dS`y5^1isJgl5NBXe?kDGXYr*Bp=Y!At*@sf%43u3s%oO$DKmt$kIjUh|F2aJm zE7$D}wF4elB|n~W30DB&%@cB2!hLNg5-TB%1xDVs!#C^{tpv@rZVM2-eIV5Yx48TZ z9{xYg=Dybou!z_iLAooeI6DvtORS_&m6kk zX896{NO?aqvjzgO<|NN(8=~{^;C|d%+9Kj`)~Dz?!?)UT=AJpaBy*zLkdIp_GLPte z?EL(zYhdU$xl&!DQd?NDpSznj(%%#*;G+jlY)bs zX2)8KJyxGicq%s&LjePJ>a^1&dsJ1g-v2j})nGBuQ_+DP*FB_j7k-e=F9cUMIrIS# zhsg}1eqiTY3=*J7Qd%5S5$CqUzI+_*mq0zgC-am0=?z9yyPG{anZC~SC}cu1sk=%S z=AZR=HpZF$?qilqZ+hv}mvkFI#W&0H9g4I8iXI$SozJ+8Oh@(YeTMU)x2l59ii z0y-?+Ob?kXp9&hz+|Bh#Yj!J?TRCymI*OK1T(VmqeFMFHyvk@47*>o5!wK*R*^)qWxxg-@2K3p7sZsIeI!vK8A=g z+{rrc)f23bMrqQmXdFkAhgeSgX*K&{}USsACn+zg}Y4pY{sl*Pd=y4y0qV(;vt`!XWi-4f63vO*g4jLn=@(Q&2j91(ff=1}(WM9)<+nsMd%UDi z0;a!d0ii+sde1zc2TJbm{nO4Godke?dVc<&aj{8$uwZ7%u9 zyMmIui}DQ_r8eB$=Edo+&Fr0n!Kz=&b;^eP5GEd#>T)O^g88JL&=`O)o9q1q!!A1C z{jr7CVpy97|A7wk*1R4FJXU_-{7x5ypVQH)>wXO}AbZ)b{xE7wW3*R&TC7y?R5Rk% z%#(dji1^Nfo?*mCS0@pw;s`_wGA=G zYkt07&^xX8jiO*w8c#5akLTJTrY;6!ces5dGzU7onR^U#pK6Dr2j=W)mE^fX9fnJE zdRwpx%`(yv$eM1KkYM;o@|)VehRx5x`X89!ZLY8fkLy{9Q3|VCbk7r%={AJVJSe`=bA zUE(x+%$UCtgRs~jG~f9y?$IBwx#zY5330L{KMecekNtvwnq>dix9>Kd`0T2I2)G65 zjGN{E=zm$k;T3F2i<+UX6VF?hR5uuLLpnf z9y@*1lS-NMEe`OwRM2}b=nT~R;;u10t0?90J34-ib4$Mz2qwiC4Rpak&2=THT^dvQ z(R`5KOcOCKQ{Ay5TIrzC2CVV!EyJ$%S*Wc?4L5W0My;z^I|BfIR~PvaWmu$~i=s90 ztL^g1Zm)6KR*hQF3UsmcI=?&PTcq3CLC*KB%GbQ-A6`3pOfD1ZE>Mbt>+|w(%H#7n zx=5Z%Pe;J}t>8RJ@smIEcKzCK{h#eC22m%v;*ws!l~ruRZzTc6j6fr@79VA^0xlXr+EAG4Vxx_UDP$lF2#*5g%3?6a{cGBCJOA1mfmU+*d`OMTNO=- zZApbzEEyGZW9&@mYEEcBcioBiip=Zq>XW-|{p?#>On!l99vBjFwlgmoBNr9>xjl6# z4a2KDu%qSV{Y3Ig69jwfRN7iX9P<(x{c}{Ob{l*e@8=%WVR3lSl|%I*9q2Bz`bEG& zA=X;bY=RawnVRXsYOev`WOmo=3elY`t`aa9$w*h>`|zh8f@Dh*?PN8yfri{es$XX) zVnsr?8ul_R8i~W{kBn~}p0(0hdS#P>BiCHX2U;MF#sHm#vinTa#!r*7U+N!Rmg&

Z-b$(}sv*n6g09M!=3y{?RmlaM7%EbW)(A+vJEcng}g9k48|IP|e$%2;O z5p^;B;)p`5a|}<>uyRJy!~Pb|RFcUU&3awGYxvDke5lIN;v}Kd{=YJ@TuGe!?_D zv(N!&t|Q9d_dnlUNl4jufPw{^+lopRZzA9F*pY+4wkiA9BznlPPb2w5w{sJVe#t^r zSE~PPA`Cv`)|^`H-;hNJmVd4SJqKiCX~0u?8P%9cN@n}_}DL}!y|#9a5Q*# zVpMPH^-O&|sm=AL&(j~!gSw5FtK`*+0M6!^u)4%Mr+;i+Q!^yFG+lOaZ@U~n`O|b) z~N9379ssrD9kB3g4c}59{wnc-%O< zWMb0bk(uh$>A*^`kbCCDHXK|9K6|i5yJ}^S7|h{KCve%OUAK~Q=HB{)KK%5B4q;Ko z`ca1~GAm>234I0&{JD$a;@TP&Vqcob0^1-`6b-f5?W7r)tlser@@9hE9A1(Z)klTz z45fXv#v!8u_>}gYaoL1Y;HF_TUmx3f)Nwgu8`e!xldu!~;|y_fFVCye^>&qO`8t){ z{*$>cAghvE`Do#J|1cn{a*=ZRhpZ|QeL5XI^B=%4cfyeRJV%OO24P0EmmrmjYS=nJAHAMeW2W3*$vQzP>rq2%#gh9_`1Nv+=pk&E zXM?(?N0@O@wX!2{$Zxc9IS2hU4b(C>9T{Cd7cm-1c=Z{0@`K0MyabJ38Lt+FXSKz2 zkJT+j=QDmH248x+hGY(r0|Gq;OHO0Q%hUH7OR7ZDgTJw*8(rMKGJ%ZpHxjBee(P}1g!@^&^^;pdiQ(QA!ytVF8#?WDA{Jt zz={Dd)n@*Viwo!Sg1BBd73*vV(N^9`tJ$+hYU%+7`IgUW;^$$6;zQ z(46sc(?Y~!(H~|VA!+M+7P{yW_P^fa|NR&52F}0GBdM1Su5_!SC+ZQsv0{HTQoA3keC_< zreiQ_(*jmF40AFD!hRFLIgJnNgw`l%1kbgzm~?Cr?@NHF=U%@ZD3WJ^)swMykTHUp zHDrQTKidRNKVRV!$Om9SYy{%0J4U2qO?}RXEH|MX#Rbbytph4DF&5yW*q>RS68%g} z0I2ul4TWo8z1GT7S)CmsoFYW)h2TK(!E#yZ9!W@3H5W6Q{S{K zNc}`vmzF*|QQccBohalWpBR}&>ABx_XH7;y)_r4%-oEf!qadEdF(|mtVKNHDodOv@a2=~=7Z^aUZaQh(@j8Jm7tQwCgIGd3^~03 z$wtX{c%TMeVdpzVIbr=D4r1ta$&sE&g17O{tH8fmEc_)xc(bB?(c$wHm}k|o7)Z7p zcb_S7K-g0unpA03@eunZGj(svHP558g3J$;tHHKs6eZXEawO8LR#2*MT~A?WFX1DR znJNmVzGIr#rDNfnL`~HqT`X@BPwkmFpMn9lIP*Af3)$rdnpDc;A?aXf?aAk|=VZ$V z>W+nO<5?WnKX_eZE=&S%bD(-Ek} z@p)m*guK45*BKoKwv7O!rOm)dl3AvfG+ul3!fO2RzTfCH3QjnVYh;2%E0?$E>*z_u zRa@MwOJ5H&-NLADTJY8K8~I3}N7l5JJP>bHusYIQ`ExSZ$<=8Acr`qQ)i@=@8x?Hn zSONY=5b<<-H;?_9+AW+TF-Zx$Y1)Wut8}(362rMN%Z^$@g*p--vnVYPT?>nTV`blK z5!{gu_8w7L%L%$^7`yo<`jOmuQ->>h0l%)^&@%zM6ogBr*jr`GY_L8g__gV#%I~Q5 zu2hm0-JW)^lJdj|w-nKkBU70oYW^M7*4x~klt!`0R|9%?aDva@QSCy?2yW9}>K#Wi z>qFNW9O2HNKJ40ct%jp$YcTHbPD&%syRePgY6Jsq9%Y$&7Lj(BBZzgy2NYr0OS0ZG z4_}f4e^t>gCySR0>^q>Y+49lrs;er?4zy5SQISc~!a&p1& z^gN>v>IZq9X;rxkU1<{w8>rUynw(HoU3x1?$%Y1BN>TGQ(jCo(MG-M$Y^lqvrC(4Q zp%y)QskQ#EUM&JUKQH^Ga9ntn#8)SJ@ccoQwPZ`xv%0ceLtNI4i~IWK-ZC4LJ!9rY z0jM+A%haHbgRdV=UN0xM0;yJU+jE}agOYHJm+nG{Sd;`zS2bJyhE1n1OJ zEuc)P>Kf(shu>ljAXH3M+-J2ccG26CWM=j^M|l;&FLIw*xVhvH*RuGxrl>%5A_bA8 zm{KX9CZyz%-S#wJIim{HS3!e1sz#*qtty35u+h%hqy;&)tSiRb7Nx{}2k1c2CXq{Nb6p`j#up=FuhcF6?pd z!9A|+5A71X-*$-=lz&&k_2q9Pu_1sGPAO!iU)0nB^!6s0PHWg#kki@Yf2rbx>jMK- z+$uTbZ^ zsnkcFMB!vW+jY1&2s32l)EY>PN~P*5WD9w8#)WB|lnRE`%PL+Lq0Y4SPns!(x>=~U zCi&de$l~v=t&~J!Bxu%;i z5U}S5V?*7ZE#Hh*w&pfLMyE|`JC3!FmDW;jP+o^3`GCYPD3NDj?UmAod!J2Ju6Q^2 zi}G)iH%GI!JlOtB4Dj8_HK&0Rr5bXTg9<}ViNAfu({2w6i^bd4dTV)hydu*| z%`fZLGJ`DBW?!3XWUBXs9qfvsq&435>SLyZO6{=TNN zc--nY8}AR{u{Twd^^Ve?+{f~nq60>9!Rb;`Q+SXA%2$@me$7`1JZ1+#H!Dm$KHdlv zXPp$DnA@VYq00l9aIj9nH^2!9`ry+I2H&lHa)-_YeYf`Eb#FU|n=6xOHiS}}Y3e6u z=aId5aailQ?I6P_PHEFkdga_Hz}nZ9FjuIKMSl#-Dq|#e8rOC{#HO_4GlVH%ipjK( zrPowW5Ci^X^6AdYgUOVvt+E8=)&lC{1_tNXjf@m9uz^rvi0kZpA!j1%jtu27nZ~_S z-2-qetJIXnL}>ic)!&KYi+O>OI8g}9mtA^VdGT}?G!stWJB#z2ov z9TRIIB61!{m^vfQHKYjw#Ydh?J#9(1&5vWSWK;Rxnh(Cz^?q6@UmV)&u3UNi0Bkm< zRHB*@7TadC`q79IaSR_p7Jb=YJT5kPK(wSeAKhKU$to5&5b@yj0Jj#CGKM^yXSd6_ zId@-*Sl5)Q1wHMwf+wx)r7fKo*p)Y~Np*kdWgL@JD>P+&9tv>lSZw~*_KPSH4xZmd zp+Z+HA()1U36N_er{k81Da;6m(2!g1p=RyTZ5RqVDb~_We*a|o;PtAJe*1xx&A$r> zv-9_w_^w$xMFqL0!k4l}ckQc%h*XX4zvN>6)BCfzyPK*#*9@af?4`JM1FGPG zu#jVE($nQ~Ao&!|f@`VHs`@;?&mZelZ56!Hes9awF6q_6IX^Y+!hN^0AEBr*Hr!B6 zN{pvN?54R-J*s*KH`mvj(_ttPEgya$eXT{3!Tw}6qq~fwIL`}*SV5i`l!qu?1^@UE zSuJguO=w&bPAGZVL{$2hT|JnhZp2$#j<_oB=YLfFTki3qoCQ)^@Ifzk?05jP2lXG?saHcQWTjc~fh5Oy1 zIA9rPs}AWtMYmnlFe#q8SmQR_u7&Mtk#bk1Xg*{1v`%X}_Au5&f9{0%kB@wM=ZCBE zp?k^a(3UOAcN@paC>vewZO<^611AwOTa1rc8x%dd=DhpW)ZPnzmunP%L+Wk)R?vGR zjPg~L!zj{{%l)?3M4n_FoT{GGi>OBx6S-T2jJP`R_=x4v7Hu5ZRiW&|m zRKEzj9H}$Nt_fKA=uxv&J0G~{9J41HiIJe8y$+zh)%d&%E-62msYfrm0Q+gQ6`KtG(LE48Q$J; zHCDUKhhI=osX;BOE!_&7@lmi->eVa0hCjM{Cj>eLI-0{kt5PyH;ST$W;H7hnw>gHr z@Y=BVJ_@KuJoZH?Ln149(^0=VhkN04B(Xmu$?Grl!*JnhW^$ zR^xp`mSFRn?e394{kv)x!htx*O>@sohbe@ZG#{V=9K{oTEC0p$_IBsNt z{;-4pJiXrh%Y}bl*8DrN+Kmzw@;lUIW-GoKd*VZ~beu+3tQ*9Qpr@w5U{)>+cU0q! z9f%HH{;k;cla0dJ>C+Qt8~rjv4q(g*laDU&W^VNd)VH#-M2mGmLBFKaZJu^(NKeAi z1pxVa`FyQ6lgiW-rMol?1y3NvRd6W&J^m~H6@T#5*D`9^G9Mpc7j#{BI$kBp5>$8g zz?}iPNM3UBWQ<;MK-(2gX*S|;P?^Pnz9L`mj`IF)~pc|>KdXe}j6|9-iY8o}8j0LL^C$McF zXd~xI3hUgt;gG^cb+Dmqqoa&HGAi*x6oz6B59*}AaJ+Z{OX8vGv?Dt|2EC{LNxJPc z@HtrMqs=2RKGd4@pnFBw%7U&uMO+gzr`sq+m;9*5wI1 zFhR1*PIyi%;QZ$Tl27aAZ^98Lj&;p2X*@-zq)RNeId7YKwfi0e?9ia?TEA6kn53p# zKD4xhP>Rllx~!b-{G1&2K8Ifdop-^<5^c5&D{2P~Tts4FW03M%6F zbM_p}@NWV}KSj_O6rA1I!>! zEDEdBbljuKIdrf!<9cRo=Kjc{isNS0QzWl1%=v@VArY39SS~U>b8r%G6@2z?e~DHM z)aTN!vagBha5-3(D_At~O13NxzG1#u$K&HbK5@mnWeFr6?KgO84L3$gZzYB;Q!UbY zQLnSk>(o2Bc^^fd%-OBmx9=5R$-(>X0mrz9D)){1l?DozT(6&?jO{XLj}XR7n<|1` zD3|k%cPCi`_Dk=^g7X2%9pYRoA&LL@>j7ik^mQAdL;8#kjWM zd{5KhY*vq<)xA?6AaYlJkNEql89r zs+>fQpsyXV@_B!o^cvI0BC*k!?kp| zF#JX1$qWX*D8jg_0Keoe(!QJCd!XE5tro(5CQmI+?r!)ZRtMh3%Vt_irhw+P)|L^Y z3pPLMxqAtg3cXfJ+HCsrs6Gn%E*32V6K@gbKX&MF&1OuBftwQHAfvecOhs$^{X|S>KEl-%l5Me~SL(vJ8)6Hb#~d_(`Yu8tDDc@d?31bi0Bi}#udr$V}`W>kU;-Oe%F^*Gx)`o(3x2i=>!hGY2_GjbN|>oK-RfU(%M1qi80}W`_f*u%`enO87`(N zmT{_62q~>^Sg*;0@I#so zewJ@7!Uiu7=K6!F6e{5jy*Ubh5l_-3SioQ;M z;in_Soilu@6=(u&N4aEqCp0G5TsW-T8u*asL`<-SV(} zV;PtpV+yU&C>siJ&>db?iD}A)9BeG=7I#inIKW|y8q+^b<)gmKNmCUJ*6gi9Pg;FP${*?ZRTJ{o&eq?`6`xM{@KHumf;?WG%jw zhO!+!+a8Cu>4lq&nJocO`Jo+5b^>;TvfYDIAPV%Ry&eAZq5H=`Bz|Se_NafVNhNn2 zQO9C7naTOrU(P5+(^B~b@~kQY+s)}qXiz1GQCAbmquh&u>G^aEIq^7iN{mf(39f3~ z{nYcMOs$x{lAFxD-b4XU=X~&=u4Ug{SP!*795!0`yPYY}D%_0m4XCmB*e00IuvhmetiHvE?Y9UyH z#UZ3gxOaJkdE&ThUac1N$V2!5dz1Oe$iA5vS7klz(7B$y^|-aJfZ?LfHeAP-fX2l% zNsurT8p)K5zC{m<)>)#QkEoFpTguvj(a3h`W5o&4d@=!})n{;8)Q`Q+9|#hiOXEI; zhK(8>I>_Bu?0@ym;9Y+ww3D_S$)BkFHZA=m$oAY)3T7@;HpqK{>-jc6Yqw36wem5C z0_DcEkkc{JfD0A%-G%D^-G!PY)Bn(x+qn*mPo5#H1LIl3s^q~&$6y;{oCzRwluuXZ zR)B*z?+4(gVb;Fc!tWwf&D(_)TU*t1_hd(IzW6!8nZ5HcOXhxC(#pAX-S-=g8_qa% z9>E8gptH48{@DevE=2`h6uf?4i9NhjMMAQDG}oP|ou}4DyqtN)??SalP*8r}1vxBI z^{I-3Wg7aK*UC2Ug8mw8eO}iYSjnGpl>hYDjkVpfCuBKihdq3gkxw|MI`oZp_pF&t zl7)^FS}?T_MGXH2$U*5f%PLN{sI&^M4m3t+rbw1@#IH|ON+oNQlriH$jIn5N@mM7> z(qUOkH7PnH;ZBaw|Hh?VEi+L|&^mcJ^0%s<;DDf;)|bj5FKuPr2d6)GS}?<~j!9B1(`z7(qHmU7AAgXy{`rfaqc`$L z*75-Hhr)3kqejW}c$==Vp480_3egv`cHX~&MN;TrD$cp5H)~NEOmtQE^HOq8#GSI& z2iE3No&)nbNefTKi$B(uli1REO>Ee^?^iSwZW1v{l4Ac|^Tf z5s+Zm#yCiD5KjeRR5XGY^UXawU#7vQ?)oPc-$wh_um$7P$Bv?L)~v&9LO?@$!@HYQ zYHq8Qy>EM~sxSWsb7D@)A}OEoY#uHb3=U$9;#OlSggS71vxo&}zCkb1()>rP$(q?O z*4pU8*?=z~{%tHG$jE+elt>Yzb0)4moQu)q(-skh> z!a|YSr(}1$%ksT=O{rCx5c?hHE@+M{Iq9M@nRkHOqX!{ zF-cNdUl;=#@7cgxHrPi0Q<5@y5lm4=8N5kVP5oK&JmLS?D`v)Teq|5ZRl0{w=dg&4IRJR zGS|6frOJ0`_&i7KRewq7NXdcJUcU|n=P?hDp}G@AtKX&|v+tL~>9t%sV!E3w^>7w# zSo-q$&kOI@WaV;F*1obP{jsO?OY^0vHFGd0+gb^n@a;IIP)CDG8uB+UfCyAoy}6@a z{W<#kjC_&Iip4bX9OzibO5}L$Ni!Ka(*_rvlgZqbHlRdkS~&KgVrdN;Ht)b8s%q;> z!2%{Ly%?Tp;u6#4jbGtQk6A|Pd~cxk-6$D$f5@PV3uG~ZzIt!mLiPj(T(*yy2Uqii%V=(>PaTD! z=>8g7nRR*_eA&)Zk%{}J-T*`!Y?X=V2WPHuhNGGle{q`y= zaB zlLsH{KDfK>IOlG%x+zC1{SdU{gv8!-P%w-3AJHboDS7MYRbg8XkEEu={ zalGGu1kZOWXU1uNMz@FIqb5Xl5}-HjfTNZU7_Dk_@juqf-DG``>ue`|4O@RLd? zZobKw!O*Nxlk1m1-VL_$}Vy|^w=@$LeiNz|(!-=@A?)cWN1qv>KZCDMF#|Y8G|B;7 zx15=ryIOIJcJpXWC_x*zN)Xt@HA@GLmEi8q`$#&SWxrxsrtzkKnlb=jS}p2FM4_Hn zL8VTko$AQcT_E5yI%%&y0mA~L$=Ahn!{W_1JHD0ZJ~Q^dpr=NNpEMs$#8hp^zt4Fb z_gb6XOf3j#*l~FI${nBsr)pFN6tvA>-rDp1#9iw15O1JCRaq^|stIdM8#ilfe6?UX1a9 z@WkE6MYD-+)WCVHg+0G)nL)x zn#`gEOtg6Pm$|@Fmh1d4X4*#X#Ljnm@ju>p+c&%K)fbiVeNpr-ZLbLfv+(_}fXlMJ zjh+{yRpLZXJ?16f(VLdsQ8P{NowHHDc1NV`pH6Lg6_MYh zijMuIt>Qo3rO2jiaa--2M&jTxh6REt9A$iPsS3C;%P>D^E9+h-8nEe4KRUlJ96DV} z42v9MrB!4)M7E2Dxy37w)*3v5U{RepP8>=*v+S#9w3)lYHqzi$72M5!|M9X3;Ofqt z7;K*6(mn`E5`{u8-b-Wpbxh#wBlP+cyyBLa|W|4i)zmamN8cC`7 z*az%7RNv`YwCKRI4yp$tIm)^$$3B*UEM0u-B-OW@_?v%QLhBe`X?(fXm9ejF9hIbudpTEc{^s=d zVbTW1xG$7vRv^ODDMf|T3{A(SrhvtKM>%G-U*khLzM>b|!VGUL{Fd(I|6@IzGzC`G zJ16&$+nZ1^nlz!q!?tOjO@c4ay*m6>0=hzhQu^rFGk3|i5k4_GYBW6&zk&f0s#?L( zwr8&U{c;BPG1u#3J!t>qG+vMEZoI6Ty&KT@g$L?slNYZBdH*^T5fdMxYFr+v{9NUc zv1X*OOpQ|*k#oS#0f`xTL-o-puO_9-B=AVeYwdA%6K2wXoYRNm1J|(UQ z?=^xdd|3EGw-eY-V|To>zH3*GwXAMv|I1YUKaE5=9(@zcjRs&a8?{gwR^w2xp)QMp za2jnwFpUWq{j!d2jM?-G$jPf_Rf}CpUd-sBNMY78etSB`dl%;?>&x`6JKfYykTAbu z37DwNTEwxEU_xV)!8&je8R;v#`of4ZQM{~m%B$lbSIV|zWu~UTPqup5ac`kQC{nUk zVRMKAwlJ|&<>Kconziq_w|k>A6XP2Rwp=ah!cET0I@%}2wR}Tqc|GNSV!OG~lfnX4 zE_n)N=8&2TuTrSahj8U{3gCkm{gr})jOW%~QD=h2Qo$9^HuSHKxCpO89G3PUc3W^Y z!N1DJ?%9a2BA>GsSY9WwKbnite2VNiZDP?x-EKRQcaxSyo~%<9v&SMm09#R_kDUv9 zlPpZ}{r`a4m6N|>95_Cf?kHIf$K8qgsmtjr$3&N}NsIC$NwoIXxsFhLMB zt=3=is6KXpYuY%`a;<-v#SiSAT)8@3&?>7YqDOt-)c-*Fe%8 z#r}|wG8sD`mKWRX7F}lf;kH^q)&|)_iY&_6OyABZqz$&Pc~Q5B^Jc}T$o@967k~-q zcD|Fa0w8g)G<6Ibn%Ip;Q`kbkQn|Sqhj}e zkR90qq^bEuTZZ@AE^hjri$sRM+#h+sN(Sx}Z*-kl|L2t{K0*KC-9dhDy2| zrSg}S6qeK@n(h{8D8BSYGqDftVf$EjDpxFMH||XXFx&xgVBZln7vu#jz)xw`yc?=V%=|x%VqyjjG5$Elfm>+GgQv?U zCyUXC?{+$mwN?29HdZ}qbZkUe!XCKOF7JrA*_GrdRmnkaFm`fZ{bHFa{`eE@P*)3Y z=L=gba#fAM3bapkx55crM+d69(MGoTWm1lc;qKta-m=M?7Vvg|@!j52S)ZuX4jXYK z{^m%<SgtlsLLuK`|sVJ+lp-wx2rGX&- z=hf}w9BY-Orqk1H>9w@@oJ5{~shK}F^y-Wfh$SVkHU6qd#&9fwNW~B=kU{NzU=l6) ztVT2ZKY;EGT$PwnwQiFswk^+^3)DRi8)pOXE4k-^sKw6V)%DvfUlQk?UmI$gjU!EECs& zSH|yT+TrJrpO%1stz2R?(28c~8W27z3nD>=snkQNT~pR$ugOjwae@cYkpQCPWM5PB zOipoyb93OQ^Ip2oQJtR)bV|C#EPnn#tewhn7j9Sl2bfkj2dkNT0B96_uNkO1*U`ed zugC?_RJ}XWQQY^iC^x3c^e`a-bGDnh4*kFMJ6QhbYwhm!m3Er^V&3!buC&{sA$C8$ zGXj|0IG|i<`=)!G{JlQo-j2+OCo)RzxxY17yScP2U7pTU2cInTINdiEg^5BnoHD|q zp9{h>@owVOfou3AJ3{HYB#kf^C{V2gxNHkaQ0<$m)A@E0?E=fqWVhJ-AoI=Sx9?ka zY9s-Fl8ygLZLPZ`Pp-QpL-4xXlXBnGu4vUm>cgxBUvdIyJ}#pcFg-|n@ax~=T~;97 z){VY~DZIS8xt2tp1YOI8qq22)1!66-xAIy!Flv(s-ynKT-mv??AK%ZM|1_9s@S88vE3!i_MHZ9oJXIYS<6*m}Ps#Z4AOfLX$>7U7ce%?Zyy<`DHiNN*2 zJ0CW&{cjH56W(2b-2e{#;`fQI87lWPZ#%!RZcxj-eo+(&h(u(0Jy#=}i0qibhBF|&x3tj@QJdD>JBFP$eP}oOQPTF;PR{Qn)asFjJuvp}N_PzJDuYK*kS6`YfC(X$O3Hzs?MEFXc;CoU`E-WJL zlttq;^n(n!=yRV}J2=U?&(8c#1vbB~0$a{*Rr#dt>;It$yB?EuxYC^nj5JcL?i%gB zBj1;Qtp8p4L#O&*OO7u+EkC>R%Zm#Z&h-cP6CJlanf1s&fCa;S(Lp zU$MnHk4a!o-PY5F`|Y<~%O^yCHCk-*RYBCX*EWXMW7IEGnj-bmcFv8rxR;2}>7~u% zAsu!hUr=aB59juj2)}!e%|j=OK!9-OJihW?dX3h9+FLMxm$Cu|eQw+6-PF+XHnXs~ zMx(mz(cTmH7(28NG`MHDbKV0S@kG$1XjkU<`_oW<@8r2!pbMOaqO0fPwk})W(zpxk z96ng?TEQ8enJ|`=bn`tk+Ru~x2D>!DH^#qE3OU5Fupjv18-RzsFU;BHW5*t88GWVO z`dFd#;OHgWK=#6mXK|r*KV0qfxS)gd!54h38YjQr_to<}sP@)WYVn2WHP27oYirKB zxwL`UU8esJ6Z!Z@*WLHte!HF^{j&`M()#ov?fC7t&acmLE+KlrIpGJq|G^|Bl`hsj zym~ynz`24-O&U_FWjb5^qc#iBPa0>;g3ra2`q56Ln95VqN9r7_aGUz6cIw`he}rk&xPIPV`}X9PO)B4jjw!*cQmx>JjDN9rTXdE` zv-i@sqVUH{sz9|qYBaR}$&Yx7znz@F-#v_P@^|>wuR$%MdmkQu$(U|RIQG~=>Tpw%k%9j!Y zMf%w(i~cTw|MW@Crt4BZOC zo>^|F2`kICdI<1%RO1B4#`bhvFa%%SJ0Z{b!w0C{anB$1W6y6I9 z7W`Zh%OS9H?*&o%qxnZ5QTgtYM>0(ivQPTFi)z_tjTv>7j-Kpd?7p?w6>;gZM0a+} z4kEIk>28iWmfZAwjQqfnv(ehpe?!Y?i_?}L_xgzprcc4y=QGpiU}7I&fX-g4JP&@k4*)RFsh2`Yr6-Dh3HtK?EQ^xhYeg4>Y^7+K!p0pBR;@{4valuE{+Y3j(4zHM-qegBA zH`Gsm?z(I}9wae-BFtgqJ_j%8tt@;_@W3(D8e z{YqFLWoGnhU97DENb(<~)Tf_pHoQui0E)=t&P}KZuSRBT^-qGQ5tMr-3GG?CeDI>Z zo4t*)7fMG$2?(&iFt-TfZ#VS}n&H;M;qAjS+YjSBTmZQ`ADpNwusu~zFa|NmsaKfdpDSW z)WP2`VvZo-Dw0c0^y@ZOC8lS#y{B`VMkvkE#Knw z-NHZkwQ!G4+`a1Zb6ec}d2_Fwn-IJWDvBB5sfCeydb3@VWWQ)&7s)6ajzl-q3D~5C z0XAt(e}MXDfB5evt!EdE09GE@q!snAOAw}pU-gmzCZxcyWs2=+WKnm!+oh>-))QOlTQ>%pXA|s z5YEm((8Q0nf%*z0v@XrrLn35L#jq19xH3*cB>_2JXNFU>=$rZTapljl7wZhWUv4#g zt{T4StjSM5KO!oGpdE;xy##VY*G^x5gNLgc44LZAGL)_IX*5dzpRsiH8UUaR zT;6E@{#@AeOAaP94gg&izd!<|Vw}$TiZATc_s@R6tdvBG_R#_W3%k_!Lg7N`)5avb zrPkf&vRz~S(xOFa%ITF;JWL}?e4U+`Nx;h43s^YEL(94qkpPNwI+Ek6ee zYZ-!+4{w2a*N;K}+{qMj;XgZ>4(bxSuWRi$`)v$W{rSJk&2LaQ7jNm96z$YTVA1_y zwuFRAvn;lgv-4$NwI>g~kGH?gAc2*JOk(YvJ^p`{lI~H>g(H2|dM})ClU!i~MP_Co z(BP#rbqLoeL%LWj-V7MOwfb zFOP9=2-Ak)_rw%32?&%%nYmiSPvYz_Z-EYkz9SHFNkftB=@DD(+dGI|h~;p+FP0UR z?bTRs&K&<10jMsY-p5H}e1Se0%g3N=iK%+=6joc0dZ)tE&Kq7`?a)n? z_%!!kz+YEA%S|(P2?r)oeqIo6ikYKjEwpLJpV5L%iD1AsA87=z&1Xm}J2d>C!pr#D zctE3vdc5lwA9x1$381Af%%JoXRmpdh{Z5gmwF$t#aK-3Nh(9@-4p5kkZkkL!kz}BG z^)w7+O|XK9C1&qC&ng)7?caNT!s}~CU_Re=W|H!bcF63zhO=}!BdlZrX}e8WLzPS# zNsUEesZHNqfQioH`)q@~i(u5egtqKbb|cc(O32c|U0HH?+kT#s2ghCXNuINH-XC-X zyiMii#PDIY?|n(D8-IAU+2i>>220=Wpj?95Rfq65dOG&oyh`S5fb}+43PJIeLMq9! z&lWb^fiQUsi*zN)z9@d6yxgl&<##(S+bL<}q{F>j9Um>mZuRc$+!^Qgm&M!@R zFE0E2XqIIxFg@#~5P+YPVD%!B_*v}gBca36aMA;dU(QGCoCgR|;mvRDRv^jRiU@!v+ggHNbyu!UAr1>TBf1yqG z-)syJk}Lp#ciBzt{7G6O=fcMGml3lizJSs&&T;Zmu|pOQP$7!;C`hS(_e|cob)I=O z{3PLy-T}kNy30Iwa!L#^ruj@m$YaOL=*HUZEza0;>Y$2A1ZU(Fjs#g*>xPtloln@` zcJxQ)Gs9~?S=jYG`x$?}%n;wTxuWXrq2n7ut4aeY%3Ed{OP-Wi^)#pzey8K7=6&KT z5@Z^3VY$(Mw{i9|;enREs~nX|L*a#bbLms&zxJZ?0aFea44>^7y0Q`1oUWv;LKZt%Gp4FqXl7 z`8;;vp+vsG0J+dhNff<0_o25iO4u;L?IVx8#(xguw86OKN5|u|jTPuoD|KuV`4<__ zjEKfkhD_L6?B(IaAYL)7#D3uj2D=#8zLpJ35xn%GeIE?d-TKR}?n@W&Vg0z9rYMq1 zyt2J|ZkD;i(_4f<9!W+n?IFr{_PTX2iO07IS09Q)5GTW*5R+X;4vtv_dAS=(?$hvS zzX#sgqAtY1T8FOA+ZGuFPaw9s>r*`5c&5Nw70ee{wH-rxa$Y6I7q|WJ;0k&sL+dCn zX{XUaE|uG-8?ssuyviEA4GB?WIA+^nh*sl3iIs_x6uUAiL0oOA&%~G*MQDp9d zWCNpx;4K32o;nEEpDe<~gp*rJVd$IY?EYEqscA(d;FL&PGeybmLCTZr!Aj@=haGn- zx9O@h&-|S6>k-gPLZSW-QaCjGFxqE+{Oo*h-xN_$nr-4R3BFk=*LiI>ndT9%=<|Gp9b{H~Si zm*lY1h+>)Ezb?vukKp6$^RK79*o_)hax&56LO=n$s6K$-;t%P1Yq_76Z&2sy!*kGd zt|#_sI<$!MT$nLNQS&94Dj;^pSl8azdNW6_rq0>MHPv0oGg2s^oH%7&su|PVRvhFAT`}OHxx5|lw;BLt_pFIBPH$MK@ zz3uu3!1qjJ7bnW{hiIic^~HYp!1tb;1h32`J3wxV@E zDrg7Ax>#Vq_qJwDYeJ90IY?P5U7D#*w<_T3YD95Gqihny4LwztLrWE<`L%nN!9sYP zLS^Z!X7>IqjfMLyZ^o*!Egg;Fi^~xUmK>FYDh64U-CDe&7C)Nwb352%`)c!#cH)v% zu6H+9*0pi*w2}x|v8M$M?=Bz~MX|@#`0rIj5Pnk-&b#=-7&TbSI8>JxQ_66aA5_^b zhxqF5$G7E`{H9%Ucm@Pbk7eiYT*(w$A>TI>4P>~EhinfL&Qsa%wW9s>^|2?R$S3b zCnoW&hqwdv0)|}imRpt4m}3J~*qZiFPUD!zG;kaPD;m_bj}PfnEBfeo%(AN+uj-e< zmKXZX^4n>pvd}hT+EYa^ot6J==g-HdNqs9?H?mL+o>Sq6R&y|oEq;~>g5FSmuw%JY z-He~H$GU|T%#t6b1A4*@5$gkx4l52Ab+7dHGU zFCvJm&Nx=N(lgPOKg9GmmSbz}pDz#?PO}Q0t#$?~q>I`cC}2A68PD;l?HD0D<{i(| z29O0Y43Jon%hP6u-57Sf$STK%8FYFQO!Th|$J)-=kSDBkIKXX>vi5}mKPF)2tL9#g z01a_>J@I2~Rho+47*=kZKk`lFMwc%6pV{4?H3sQ~-jzQ*zI-nLtux&xsXKM4yRiw> zU&MJPvk1CDS>+r~P=2t_eEQbz>FDUhP2T%ZAJ5U!wNxhI@CD z!hQ7hX~lJ+V^mONdXWz%2+ccU#<#ayu?Pxb_gVz|+wy7Z)&{1NchbP&k!d1PeIc=u zkE|ShHabXf957$0BQ!62OP}Bml+1+R?fwdytS5lo^}QYw!ReCB2Px}}S+@T%{U|{VFww|yQfLSQ3&Q#khZ9I z_V}BGD`q+rM)!i5nKb0F2D^cj;wXq;2|0}`MIn1sO44?uxLaJ=B%a~gbnn?lD|R8e zRjRl>?OJ`V&ita+_?VElC$?97C?Jp$-pd|2BJk!Mw$Yip4E+6oZ41hG_&Leiq{!AY z^0V6AQ{3(oxRrgIYr1xkrA3N6<<^>a$*nOq%pBjF@Dbjqh917ZVFoj(w|Mi<`4Dn- zz0tL*%W}QC{_fSM_HPX_P3?Pd2}imW-k^ct&Kxh+WmO+KMo{%OT&PQrgTBUb%y_`= zdan6gPEHGVp5-GQeIa_wGL&(KSZCv{3KNVX3EbAk*jI~3S4%INhIJkrQQZV7&!0ci zt?kv&;Jq`9r#r3|M!r?h-wQ+YbO~6_kl|rA?_99qg3?+0Y?vzQHbNQ_v^vAo$V`NW z^yalZ+|h(7MloZnL_KPOp`QBLQP^^>ou&LBLM9eB)@lGv3BR)l3Sbde*KUYFf5svP zdFti3&`>^mqB8hGE}ROS2RQ%j(eyJu1Wu%buS1(B(&I}j^g=vRDErBr(UAVZ-0L=p z2=+PEUVEDHx^FxE@`jAeb56Up%WA5X{J$1o)3pP?i2SkS?G9S zcgvWfS^8aZ{Ql1no0c6x@$X*=EZ;xQO`gBm;5JmkLk;fwaPz(j9qFfAcQ*4ggSdju z1D(FLDrf9;*aF#x@_eMj7)+WLNu#?A5KXT_VJid@aS4@ccvLAI@Td7EaO>3GkVb6> zX@>|{bT7SBt$1_*SZ0glXVyww9*R`ZlP-yLV=zcm;co`?m*9Xpo`hboW1;P+8JJ za9UMHa<-^(LR&kA^SP;z_l|7{_U^Ho-|WS@WmNGbxG&ridu~`YK)k2HF}qLFoxFUJ zQspQ=IAA8HochT*tmp#(OjhM-^gCGbe+Q~p+P9FYfU;qv)94!9y;2r=z}Erq-W2KR zi=aI4VX_H*h-Ke~t{z9U_k!o+9Uydo#9W_#E{^0B#;oeMO+r;P+|DEm7QCgv-ChhZ z3>{3&PJ~9)ftRPgv|@~S#cCh~I}R zvm2sacTv1@m=@9m{mpRQa&@qD#`A$5`@I-!zU^FqqUk35yd6c>E$E4ubCS=L-rhI#{+UYd1Y>N2{v_5vZNaPkwMAze>f)&`0- z{vd383fa5muhX-$qiK>=&jZoRAC3UInj5QdFN(=~wI7KLNN{K=Ox_SA9PtP_u@D}_ zi3s2zZKy?A8FjjxvBIoAi6lf{#njIQq>Z9?Fiq>Dr{s5A_(n9IRQ7ioNcXW=h{=Xf z197W`Uwu_x*qucD;$4XQ=3gn2vO>9Xb(Lc`>83)tVddwVQ20$zTGJ39(1wefRc`k0 z;#Ie-cE5?Utz2%?rGfa}aN~v&_1cwX`3JEkNW!D&W?!7Bx6#gWuErTruwf={+clu* zum4GsvVKQ|a8H##cSpEeTvs=m%MT*`m$weGoINnQg@sVkSFm}Ls-eU%an43;c zbx;Po|8Bdd|I~Ofjn0`>4aWIFicX%cldw4t+fPK#S!lN24FYd?4!)OktIdZniDa^fwht3^#N0j+YSQt+Y?j&s$E^AiB{X}cgtiZPku!E$ zY57SFT@?^`CIa3QCqKBGDEs)LR13F!FUMH1>z4mh-m^DiqrN@>$|02iisP2bkOz3~ z+H>fJd!+Mqnl3zdQ6{a3#j&u-SD}Z9Eeq2dkCLKP|)208h+B^h6v+1GHXF`q6O4A8M<}$ zl-gMjx7=yD^AYP3sz^}}%PQ(Bi{)fMn;R|Bcqe+!JC97aPu%^8|_;kLM z)wZ{nGBGO9&V;f19_lGza6M{R%7jVwEDDWAF=mhqPSir&6(%SoH>*N>a~T6tOk4OG zBr3@nV-ucS4PVK0s|*e`+X02-UH7nwWA%7cStJ;tij;ga{k6?Vux`~ba)GB3 zMv}vT3CEpyg8@No)@VksM6;;bnd9gg*W->=#j=J7{WM7Veh%hzH*D%m)yb)SpX)~K z|Mx6_igT^I$(KK$^`w1!WairP9&GEfqY!%$y8t%Av>XmoeE%aZkf8ty7jT@JF}G7B z?<=|0Bv%@e9ghorOn}Uk?Su6<2e*tnarAWXH)*D5f1M9+L~YJ%bIkeNHPI_z7N^}O z-n4Jsn=WM+EBq;MT0Xm}AHODb0rk;q*JCX|H!+r!;A5x}LP&+8ihC*H;b;dSf$Mf^ zc;?TwM1`QU(As9YJMf$ElkA;giZFK9u3Bvgw!shVbH0v#Tr7tLc0wNWs zDtCTQ>W@xxaiI}sq-+5xsA#n-xjWD$S-aj*fvq*tXI#km6oFnrYx`9XH4g?^Lz z&U6?Dg}ii6(}5jtO|9G8TViaz(o`SR`%)(~^zr70RTZ5NkiMJ>7onmEX@v|j<4TxV zaDOlFbr)8^UOr32F2qig@h9S@%Cj&SuAtVv#0AlJ*3JEgFt?!x_N%wYZ`N}m9}J8o z4{8e|nCy3HG>@4vgPHJEDCxG=!xuaODXP0UxkaE*Iou;@@M1ph)3z#I&6(K-hFb_2 zC~ZVO{Oahbpkd%GBC@k6Yr-O<%X+^%iNA_FUX=mPnR^w(aHGJS6E|G(bs{zTEU{jF zhsqzKopbEKG8A=&-@xPG65r_O+a@a^IF+AR0?-Ao(0mPdVN_#xleN zzE3#9bmc#XYMiuutwgOYl=x>tX6H{6oCci5dwM$|h?55B1tEE&1u?yNTIfWi8BaDM zh2fS9wVJvbz=WS)D$4B#qBu(w3Bpf*`Ge}N9NoE|Usb+QN-JVc0NS;CaG8EZdK zy><4SO@Uf>VGk-aH6C}LYkt+6j9@kkrM3(Jho4c`)kpdjN0+9Gx@Ko!t5iGX9m74Z z1WZQn9f16w16UsrELaXJ{|^2Uo%KH`se}S)TMEE!lvr3H_(nP2zV4(NpB;;7rRh%L zLbUSF;DO1*VCW6duu>7Ncs#w)XQ-AiXcIlnJ7$NQY?h4A9_gMsSs6(Mkc1U|EZp*y zy>{uF^nbTgOcy31=#B zk|xRPsP>i~=-i+vRZsjGfgeIKPZP;fRet&Cp0N;RZ2THrgT55r7dm8Q7V47i${7tf z0C2Q%>9uAJ9@_7ch_zAJ6R%!(bzD!Tgi51)8bML{-@&#tV+R(^^?{{W&@C+lBX zSp*mkyDAqPaA6Q~nDP%5F4L?R7V*j3JRf(GoP3=tylcCh+`Q5wed2c^0tALafO zX~G-5A5f=$wr9o^S5A~1HcLZ$H8;arB%j}w+6KQPI{ImiJOZCzXW;Zwl%mn#cgjcQO)(DG+j zeC9tRSuifBHA~NS zOs&Z6m#{aW9DD=A7OPiFDpi>z$)czB3XNgnYa}V0$!`o0`)Rsg*G+Xb*kx9v^6La7 zqPg$7uiPo)3$5Zj_0J;JRK~cHlchMtm030c9_6Ll((A-~3=-1VFM}*ZjAo*( zp+eQ{@nT!u9dPf0V5`a6o90-!BfyOkvn{c+H!l2Lj(931#brHhqgmjdbJpnN;;~Zb zNj}R!{wb^EQ2Sew_U_k%CO6nl9@18*Mw8}%CXzxTBCJg}Lm^0vWc=k1;c&2Cnz1c)0mHDImh) zLpVr>q+CMchLB0`Oi@?3`rKIsC}7BIWx2?)wdJm~Cn=wh7k`;Jms=ZHs9am=Da&sM zalC-;P`Axzo%*{%)P21u55m)3Ks;~F{tNNUft|kY2}jb2^#no$Dm`;2zoo)OG@evL z!~*j*v{g!{YIX*Y+gt{;MvftqqLA3m4{)djdLY-RL=k;6W6~E#3OJo6jq?h&zN9lN z-#WhOh;}COHt8|$rq#^P;eyGoki=0!mZkVEp6A*%r4oO{Z$TNEnbvVA9_ZRe<30o?nz2BzrIzH^|Qrm5{6vLJS88UUpg0YpZGg(rvfl zpGMrEbpj~3+UCivPfqQRyvelr^^~Q4x~MT1v*v9z-{=f4s4v2U=@w(a$OWGtIx8F% zE>zG|rQM{M%ieRBU6{=dlu~MNFe8~BZl0nJSjbcz zY9Gi7g@lR44sX-^XinJ{Z&}6zBTiNOr?z8vdvOn|?V>+)zb2;3aW&U8?Z|*gWN_uN zW!(@lT^?~UdOQD)JRKBIx1y^fgC}Qb42Unqr@s!q(QrgJOV*khW4<6bbhhlA3)$o` z=%oth?jt}9`AN*_fX0ELVo znFHEuBx@;orPL_EV1C?x^-v&sLD5RLArk+na=2<=m6v!2k9$dL!^UPvYd{Y3V99*M zf@1V3rryzmxh9(oHetMyJ-ahr$-Xc%l~QlH!9(@xpfiDec{a#Z7PH4}*iKoOFt zXQB3S5tv@5D?z0aA#G~@Qj&URcu$Eg54^U2>g%5=cHidpdj0 z`-V^`qe)qGR7qBvU*?DNEq&&=SD7iUV!Ilq#d{=~_I$ipkLTeKoZSscv2Pn#<+Txt zz^@uewGafhtyznskNyQVPH15SO4izucikKUQhCk#7mu8g-`zY(WYdYQzJ~J~+C2S+ zJJiPxm$sHPTefG@OjkngXV4QR;*uvd6vTG8&_7RERB|U#i|5L;Wi=fKg)O$6J`g6L z$zJMA+QBzhXdTj5)>W|>UX`!&Wm)L-pK@OiKfA5z?}qX=GeRE2<1Rh~Vf>0;Y?%4q z%Fk9feJ!wm-UWaJ0~fAJ%up|t9)%)(??qk^l6#yaRPMfBlE0{{c6O9?%7FeN+>$kO z7hqu?=pgwlk_(?ZM$!h|G)H2SX^h}v!h8jXNl<0>K%>bM+Cx;85(AVc;6vUwAHfYL z*AS-O9(`7(JMutN=cknK$E|^A1u_Yo6vQy^&kt?Nu&J~_OGRpXaOp01EDPE)UQQdQ zI1b!Uo`vB$?U`8R;`X=_amWk&RXq)hV^C2-sZLbtQh2XdDUY-p;u0u#QWFjoO=gYt2N-#nQQj>Ggg#%S;M!g+N(=<0GEzs+3%e1wd0 z+)!;XW53E=h~WGBqjuc*C>(BlKYu^eV)K&(ipoATZ!D?kHgT%yc|G`tK-}aPTn|%F z0{9TO6A=BV!Rp#I7`)fQtF0?MfTCy4j(k-$%Q>VlJO0Lm@6x_HGI{_51QFoI)HJ2R zP?vv)!^+lc^;5a|vwte4(si$_r}GrRV9+Mm7eGRv- z*_4PekFME+>MTvqH&@xs4^fJ#6dznb{IZp|%{WuS8VD`JqrA#;!!1XS2EStTLcqCA zg_MXepu~JO&_ck`XZODEd;o`WQD5u!gx`v5ReeoT*w16aK*TI2&{EQsMw6-ULc=$f zkk$O69>?COf=q0Ir{b|nnJsJ1)%^(%U?$zk-njr_K6}1J)5^zy#H!xnSW{N+|Xjp94q=KRBfshg%x`1OoCR4uG(t*y+UQSeBROSbj~K6R1422} z_pf{Uc()#AMYR)cw#4n!iR+7CN5_X-ia)RI=C0Oxd+YW?Qq)Tb(IX?Z_w}<&#wWIx zz*icWSP3ojBxQN#ycu77MpG#}ip?1dz$;xFz%PndSJI3koIg1YMZsS!Lz+iU13)9Y zf5kUE>IDa3XyJR|OHbdl$n!hopN?D6u4Y@eqS#%QP2szD0VIzm0zL0-)2iFCw+cP% zi$k4)kA>t-kd4swuDy-P-Ed?W#|)01^8>0afph!de0A`Ai@P9v((tT%^t^Ez5o>kh z@ur!Vqrno0xfTEOcrD9avv)=oVic45qQD#p4{b)+>F?1VWH>2)&}K_VV!U~bqc3)1 z3DWWu5FXacB4+7m3Le8=0NYHNnk#YseQUF;jR0d@|Kj`Kc@dX&#I@Mo8S$qOmsHg; zXq_yb=$%FV{N7UV<`t?T zZ8WJU`ef;{AD69J!ay#JcQ^lt>>sJ#Dos z&i#;Jx>wU{(Q|~Xa^G`G31a8LkCJ<5`qkWg9edxpt+~ z87N`e7N-pC`ld~{vabV2WFUenea8i_!jUINq0gZjrr&V`*HzKy6fJXR0vW&;Ec8$NW zhD`zgPr>zm-B8@~5SNy- zp`iG^oJ<*8m-R>K$tTfgFjl=Bs92b7y9T}3yfyu@k1o668FYJr5v`al9`@H_D4O2X zbc}tY2Gq{8cFte1DQ}T9Xst|Qv}~fo79z1(71XNU7w)8<`T+~F)8{2jli9CZLbNP; zZg;uISEaII3p3)iZtPLOgu@i+)~xObr5IpNiPa4Pt++Gu1Cwo8cc;ao_p>)Wg1ta!E70hY^Qf{>g1cFD3 zhd*oiofzyd6F+5kr-S++l}pW&3vs1lfd4t~qzHb>YO|PrEBMYrphSJhB zK+?9gz@%_>>ofO%*oZmN2 z>hwtsm*nUXD3J~Ub$8|42!Rb%69G7sBmU%bSnc%aJFU%i<4U6k3qOF73uK;3{ncoG7jRli{ z*jS}WkPm(?=H~J3e|0%Wq_bEdK~7?mjSPHU~%i9$0t7HFKY9z?zyrw z-yVD+dtLm6hmNyOQ4@R4UleweF{6T{1GAGorN-6G6fFaGJcHf5i`Xm?#EUxZQ_Slm zy`3}{1Y9^$b0UzR;~kVH>3-Z@g!8awDj7vKdLH2Krk#q5o&m>|77z#S-P{C-iD%Co zwO}`0dv3qR`BDxud_De3SA+K9-s`5`V{yf@PzW{vJE2gue7)7BR!d9*?OraTwCR2q@6jMx(nd zbcPG;4vd92CO8iCIETG|W9N>h71rHt3bnn36n4SXOTT{S-i1e{E4UVGPjb=A0ESLtH`?B z>|V~bgL>2r*wiZ7^%q`A}R;Hkkx>&c*)F?}^ zAA|OF%O!?%ZwGpFe1!LE0#F6qeeDXn0jOk>G;|u@(Z$rZYSJP%H#RAksAtn){ zd80zjc;zF|yrSl%!5l)LGe1H#^elpo(K1i*Uu0>P*s(i|6=a+`CVhEI)2b<|j!V44 zX$Wfe-dzE6<|AYgvW2RwrLBWApL)=%>nWQ|eev2S0P~MZ20(Yy%5)W;pK}!h;7_K% zG_36)xP&#jm)#bMR8FPS3faP^C|?a|lOsBij5K7k+Y7n->V}Dfc72*L$~DYoXYX?F zF@kwwA_43*kktlVN>oOK@`2_af0x=w#AFGTNckGv0;G3NEwDDkj{$S*VB`A(SI(I> z3%QYU(Xg|JyGy=pc&{N-f^Kb9;4(=7ZxXh8_JxSR&u3<4PJ2OhCRB(v32p5slZsqZCxMR&4Gm-T6O z$KeIDGK&Qk%L3D+{Xj+?V@>(GuB8VzWPWfJXApsE+vFW${|sfmWxQCsYhD;c#&z#U z^YdMvHf>D+x_82U0ewL!j<7@m(}dw+-Cs_3J4r%!D9Om5F$j2l^}E&`9I}L!;ONMWp7#l`92B>m6@{^{6%Z_`jdB{_wAE6`*Mc z+h$IqDx#h#u8@013vHpsMf1?#Y#Po#KGOLmh7j3RL;x$q0WUPUibZL<=?AK0CeTCnB)cgBmu*`)cuX729 zyWJXQZxxc)93a51Ick}iChbmx&b2usWPmoXb_|e@9{yB5`j^Wnr%#^_!i7dn!!P8H`AdDm zSgifva@K3vvmM}kb{~6#AJ0YmlCRB-HF+p}#|~|9g#or(ZS~D`A9*~_uF?r)1tg-l zJTs!njAtHl=@lUk^E78i1t8T=UusuC^9#6W(;`WvzQPTHNxkzpFH*87J7XZBMxGGA#58J8<=g&tA6=x-f`sxQo}c8v4hou*dwj5#4TJgb_pm8hLe=2|X%6^0t}F5-*dJ7rh! ztq<@$Z3GEqrBpp~sY_fRO*DJFRc~aku(njVHrq&xYrzlUL4ONtWZHQEQb}&-fhsw6 zz;~$UtiqS5Md2wUOdL%+W07&ng<9J#wy?Cd-0GRzzrZEHZ}frbCG4(@6m1Glym?-| z>CjS#%K*ef_?DW?)=7uI&=@wiAAnK4@tm>-!SR7FqfJQL5C>}aAFR8Zc$~`~0!z5@^??Nq(#?yW!lOdj0GSLKOMu}p@<39L444<|&!(0fEIh>vx3-s`6g#9$Mcx40C{{Vk5QQ4R+5&SaS z5n{aOG%f(BKL#CjpY%WihP<}8AXtU3NxlgGn};&EmdRMc!&lJZlHY34RZWM#YXVx; zUZ0|ZpDUyIwOE7N51-G9ch|D^8!OJ2bhoJmE2GrCr4UTM4#ik}M}-13#XfjpwKFCe z9L3L!A&)1WnNBK-T0z<{g)0kR@2DaCY~M#UN@<>Ww)V3iP_bDrT5cC*&lB%?r9%Y3*8Y;w7kuWEIZmC!l?CUV5RSam0^DH#@)!$)uJOlyq+IaLTCHd>6 zkmxb5ycUwyLQPOKABsN(3*?tCKLxskr<%(`%9N3zdjSifM6gG4kV2LMXzi!vvw^03 zdm9pjmubnzJfhqPwhqwx=BT$r$5vImhKD5=&P`C?yhjZ?@Q*n2RW;OLB8%u{73#4h zA5wIKo0fGxEPbudRck*XILOR)_84bwu`_{W0>t4<6UY%xpH4UkF>{`gnyrEFN#s!Qy#-&G?2 z8WFa5cu+X@o2+=95Jb9ZK1KVcIk_mDqu`D+Np3@@lo%r+A!ckGj~lSfD?Qt!3!oZY zbfh9Z{i8{=^17k1(}?bbBXO$CjOgx#aNjiZV|ezQvA%^@0UYH;GlZJfVR?X z$lYE#7@gXlhP)b*uk_9MjORoP*HN6|FEJ23&Q|TH;09~+TeLX9NC;@8Ic?^Mxy!sb z3C9~|U7g{^NKA!f>6?aDl_(5Q$zK>cg%d8WwOIg=8ZVitN6E5&cMN~IdAbeg1PTLM zrm0H5TF~Db6w+wqHWbE?Gk-P^MW3wLolC@^?rvTCR_tiAl7vd#p^dK75=>61Ly@81 zNiqj4-_M4}cA2Bh#}bWRl4>P&r`r_zW_!wP*YJ{4&-lMIzk9WO)8HFFj~pjyTjY}3 zdzKGukHslla@4TalN}Z>NJt5a;|o_lhr*lz!FQOH&nFHuaR&e~ooVQuS~9;pA+lmT zhAr#KyG6ip5M9>N381AUIEw1bZ1b|Qy!MP3@FdIdk(8vUrvRgBlzy;VdnM5*0O)x1HeLXZ&KV5J`mh29^R27Y@ z_^>JPyjeI+` z<-e*w8+g9Z_21tD7<|=VN3VpqXWss4f|I|C_lgcf9LS03J&(W@EGIft(SRqR<0+YB z6fnJowY6OkMu+1<@rzCjL5eQW8AS5uHu58p9l&`s>&DvWRM&V=9h zsIciQ@%R3A*6zI1?pl`p6tSED@d4o4;fR1R7T z>w2HUQ4R+O<|3J;?boz=B59?WC-lYo5%~T+_!!}om2qe>#wFk5vg3^MrWPbB8Qc-9 zYDUACF9UFI_ae#kdtM_aOnxjX(!mGggI(Ebwk5I}7I%>*{d~FvPkkD{{y~9H|1k@vbT{vFkR7dC>=X%FWnQQ+mX%R_;=bAm*DV>aeQvz=gH!ev z&V%e}3MEhm5`8)mHtl)qnURuq!1kybgXg;DhoZpKZ4ETtHQ_lxPQ+@sa6^Z$i~?Mn zFty}s@2IS&v~`cGEkYEj&Srmf1^%aj*o%!oYJP0vnVfL2z(f};Kgp04a7rHQ#)@L8 zX>Sc)(zAk>V?U7lQZ6I7CWH0;X#bWJ%B;0#zG*d zuTlmN^SYF@aSG7g^GtJyE7Ko&9C&xO^WLjRi%B{tG}@8|^4)oSWz&8(=iye4WLMFv zpgo^gVq+(9nu*-`o7nPj7XcXZ2%5qP5>3bRKEoaEz4;O3QIV6CEnQYucq0u_uD2k% z%vB26?g6Lxz7O5{hq3sekmatlO836~ubLu|!s%;8t}TC83n*K3Luuq;{nuPeaWzN& zN+al=E%A-0_ZjG&sMo`64C`**4?*pIeqv4%&gu1R*p$L6fyPY>c%-cP);9B$zIJwO z7^pljE2j$@l+fR`zPzvkY>S?*Wh-67H*;mFbCGcIZ>RaC83LWm5%BdEurhmT_mA1kK@2)Z4s6rD=~SdfHklH4%CrHln0q#C@p2%Rf1OU_y!^C@&L9j2R%P^+cTqL^@;#h^ zqM#0r6IT@27Vz9Rlyu&A4dAxF_2+jOfPA3B9C=1lMhYSbFOcXX>_ilK?s6&XWyg0x z>5|>#;)QQ-exyC*jTZBm@OYZeev(d5c#yxsR5azTEn&@*f~*9U)|n|I*2kv*3r1#C z28qZc7<_a)YWA*OXnleBHd?u-0pmVP>G+p4?&-5t%Y6>t2S-xvzj39QzfxGYLHUj$<2` zS-k9vk5&e?4fM{isR0hgSofe3^9eRw4y1L#C{}>a4~e5M^xo7`pn)m7IWNPVW97)` z2LZA+casCB*}COfDTYykrsC2Vek3AYqlDtE4oPUp1OGq6wgvHZA;m8Cm~gM_MpoR> zG7836KAvT`4jp=WwtDMPwMF}XuBlf?U+6vkI}z*Nn$x8Ggf*}NOBNsuknYHXHvz#{ z@|9YHnu|Ntn{?s(E|<6HV@xMB=YVA#gI*#F8YpBWg$K)&XZG;7!w)Q8D7wE}j(m^sxy5S6Q zULdg0L07ziuX6D7X11}h00AWT-t^_-O+t0&2bmlH+g46!}QM~CD{)y z=pHz=so3P{k+Pq%Hln_E1`W%C#+$-yfBM1wA;u0U#`5tTG8HPEG#Z_T+|!G#Xj|{bQ}XyaGfP1 z3sjirr&{R0DYgQI&l9uQ^Q7YV^OT?*!pk}msIZ<*RbUQ>G$+ia@cfof+7W;sA})G^ z&-Tt|SqBhI&Sl`oG)}cKs2aXg6$3nfKVEVv9!xRB;A6!YdtrLaa?r*z!~r!2uXlR3 z_w=>7S)6_hRQKtgU@#glR|0{tze->nNX5ro%zz*evBbAoMrbUi>q;w$>XY1AGAf`+ z4naafS|KZm_BPzNn_a@A9=A~d3Ifr?C~r7xO|Y66(c=x5dCn+)O*0BeF3H7YswYOz zq@I4-f4QUz$sZ;J-@YdP=pZy97h^u%?KM)l2zMhTD}mt?TeZI=IWnFI(A~j z4{q*e#t|!u9xX>erMTgeV^p+}m>JnyV$Sk{GGkfP+^X9j@I35f82|7k2fRPO^cn#ka*H@*3At+a41cUO-%{}DEp<=q8;a^*_= zIwrFIex5L&0*&EZfL2l|v}~+ZP&+U20R9GQ+a}|4sDxG^$!Amvf8#ATpY8W!bsNB2 z5XKyE4h=DN8j8ph(Z5_V70*~?8!n!IC0!spgbH|Xb{{M;0}_yCRE!eCzzQ0% z8^dN@td4cJ1kQQZmkwh6Wj!!Ev48?GmW$LJfK(ayMRoevp?zrZ=j{j>7)lscopQ)!JT0$g?x}exTjLP&F)J)Xw)=)jkTAMX`3Z~jk7>W8#I1bdqM5gs-z=1f7~cavQ>1e zmGjR3Y4!R}ZLacuf+6dMGdTrs0d1k}RZzg^k=TYqZ+ia40tml8k7mvLEZ(5d8P9t4 zLW1=s6^=;<+(`wcxwYI0AGS+{{K4A_E4ZE*;hW}eJl`mmSlLC-)=~kBL*yjyr1r%u z1B#xRhMk~*M^BUtOZ_Ed_XiUoMcV+a_Wn zC`XY|B~L!Scs5jwapkZfsHiAD?`H4lM}t4?m}ox;)R2sjm0oF<^BB(^jD>E}u6gGm zY=(2!PwrDu7{E2(CRYL~CrqyQ*phuEf?5On~M;LEywv(MMr}FB4A?HKoN;2PxB-A zPss8Tl_Uy1_UK~(q*Z7__qZEBS+7IYnGKxibP!n6K)++6W>0}O8cuBZE=%X&NNVs2 zFr{}iJ@1vA3Y2#ERw@RfLp0&H@owWLELkvHsYS~c*z9d|F25eI-qacN|eUU{(VRLs4O zG>GNafbAw+Z(YU7?>H`FK6*0>e)1ev8&< zwr9bHoqx$~37pBAQzx%#+0?_zOXi?ko>eraWLmSH zk1o6eveE1On@Z@T96X8mQ=M$KW`1KkGlxE{1zQso4Tb3Ja~}(xBdcShnzP~NvyD_o;fsNrig^2K=Ul8eC4Nzl+ud1^ z5N6)t8oJa3<>f4Q$iQuieCIZeRnaH=44)rdW#Pb7$9MEK!ZC zk@Ub4MTFMD1K~?u1;M969VQPrXUIz!$Ak$F>`>w^3+47pZUL&oxJIxxTtg^Ygnv_BFrSLkC^z`TCouh%0?Qm4TEF2QMWS6lH_4`5Cio|MuFV!0%&jWnDq`bYVjyb#v;n@CYfJ>MaT{ zH*e38)5`lUi=ndScwCkiT2_J(9dMp*HLk)f8$q5568rnEFm#gY!tpT&ViL?+fqTbY z>T*Ya6GarpV2zNpnL`l70W|kqO%CHlhjjATzNpmhn+)t&puIhk0iF2;D>hDpWW~nK zv`#*`mEAa(Hd}8b}v%2aZSN`oJ-WO#()elscl*zt%uzNeM zGH3(`Z_Dh1$sTeF?qCmIe+$~B!Eh0#WRT>K9%?QpXZ6qf;DN(WAH24H{Mw8Ci$L#j z+;<=zl-0Jp;TPd(+UJX2pHwMqikhewZluE;MQ00gQFEhdsB`3CWVGj}zgBFdx^?%4 zWy2^zuE!VM-Uvy>_NeudG?8n^MQeCht5MVPO4t9O#7}t}?D>d64&C8E>>BpZ?sbeQW*YZ+GGParx8fd3Lr1)#R)nMwCZyKwmn+ z3>=f}Etv3P<~=$r!eyp()3R_+9>f_Nd!DhO6<@)(_u!chBuIN#)Ph#$4O=iP-gYR0 z5UB(nh8iCtJc8zZbOTYjOLWO17|7Aob$p_^04|TRUb7ud_!IUEU*4_ zSt%>Xb&^Y6UX+JV4rj|9jB~S-g#m0A6iqLxWM(iQjFRL9Sp2|)l?$=IR%_k1*}OH! zO}S<8uBdBc|T;Q=Bg=@Cjmcyc(HE_i=zu_+jI8A+um|jW$z;K#Qkcq9H z3NRz~4D|->!elK^IegSCySa%VX@bljD<~p5CMC}$0C?8bcNj_UsY)(Ho=s0r56z+X zEBjPP=xQ>Vnh?A`)4LNJYQq@o9XGiZQuX?5NbEWk%P0UF*lLsB^pXUrp)B?{U&>at zXUSUyDaAdRi83#BXhvcz(3r;OIi9?h7B3_xpzue_`W?fuvWGcwQCmj54(DG8&(7mj zMibY#S81{7cGdDr5t(iZUohiGHtppK zOcc5+5u!hZ^yr~XqAF@viS)Q`ae7G!J~|%J3*V3aut<;J0Mg^}Ux@T5ido2W^_V~s z>sOHPw14l*JNC?Z0SZCVBVWQATGvm)<5d3`k))3rFrkeF=yFcmp|W47(2f&Kztm79j%>z2JDv5mxKz2 zfRb&HX)HtvnEw?34v32Asyusa)Fnm+S>jhT|_Yhg&k{Z7>BW7wp$qPtnDQ18_=Kzv$dNzlcv`RXq z{Nt$=w*lpxbrqVv{7l8mn%s5u6vzh&-|#Zo609S# zYI|8;L~h?hSL_DDunX2h9Do0mPW@5A<$k4bi-jYm9U*wszueVYvVg>2+Fxwm{*%49 z=@{<$26wAWM9j;ncI3XA zAC%~E01!P4{$irX?;nt)wbFo>aOmCBcu%A4n7#uXUOwA3S^&H+U=t?x;oRMI8Nl>i z9&idCVzG)YBhOeMNv+cpzl1_3hYy*2;)#VM!+oJE-UALZ!`X2|Uc%z#LzNj6hiQgj zlDxvXP2etd8`xze%-9mBc8J9D*}8&?>fZvU(dp=2$y&0=-DI`1LX+c9TQN5}6Pyy) zq3#Lv%x<)8Uc2cWqNILjm|Fnxl5rM+|FRHTt~UfxJe_FIg%N}TiLul|BM#>ca719* z>ggbW0d5q998j<{>Nr41UKyM;TAkDopiHyS*~`Vs#Yj-e(PM(|cT@dCPC*XF%zh5R z#$JHgD1K$v^*PK@DGb}xKmy+n#y%90Fw;SyY1(jyJ|*QK@PQWVA^S{1m4R&?RR1B} zC3q8?Hj-Mp%(>M39E32)s4LfJ&#nAA?4O#@o3H_EoVOl(Q*NGHOS+4qUIM*3O>O}~*~^75V) z3vmUQ2uk|^rZVaK)vWIP@M~Q`t0PNba~|)yIwtvw@r=uj`i9q6?gd2W&EpS6;WPk2 z{LX4I?+per4g=|1(Vcp@;zwm35?bSfkqCn9IJ?6rK)@NKSyzpOXp8j`fWHA8eRfML zZ()u7M?MtMW4NXZ8c@Y@Ud7gqRyKT% znrJ_I3XF38suHU-3!S`NJ0@fQZX5NRmq!SrjlO@&<$NW}?}alMGu~{sXRwa3B9fqq zN(Ej9Fm4_EQfHs#K4&hU3M=EYc`yW0Gm@*=3`*{!5D~6`0x=^q;uam+5HG!4!ScsHF6Dw?M?iqdY8S zMdkNd9ns^F$D2jfYK{&(X4auLJ<28@ZYj{lNWRjF^rFuHeDR1B6IcHlMi}Eu-=y^? zON6!H%bYJg9eZBckna(&$!?6{djL{i3}JgGQSC~QQod+oyC+tA@^Q&}AQe-x?z&-w^}_!P-Nu*FyPa_vRa$ ze8cl&78+9+2y3*Gvq~BN#TRlg53sKS?1$G=DgPG&S`K^+u90}njb^lj;vj-VCLKx0 zhki=L!^NoEfpg}%O-8rxVNd>-A}c+63Nz1U7tb#ieI%h9jvY?vbBG-)_JyM5v{rL| zDRd0S&+JpyA1&j72Q6rLAICKmU%CFpBp5&coBv!#HB+d< zBLJ5^e?;izt;xhOId#)ogWTp_M8t*pBTJ2S`Bn(Wpl9aY0et}->FOm&k$29`;h;jk z3Yn)0Zs5fRYk8|VkiXUg zAUz(Y*?md#=kmUMr@s0>XlHfY3-Pn_s#0B5X@KYDL+C*gUZnv&$k6}jLHz$3JxF{( z514WEB}o0kRvBibbJq4!qAaZqgl^~nD-;cWMCjY)-w#mX^N)J8cZ%~s_*yJBxVhw~ zEG`74aksga%t2t2y}61pux>2^N>Dv<(l-=xAFUm0+L0($+d0k#E*PbyIeyz3xR&aombn;=U$bqds?V*i&mobYoF8b7aC_;WZSzWP5^Ls ziP}<}o{6eJ7X$-H|2o8c!P!qC``k`mrI--5hz0B+a!!N=w?a~X2#S&%4l%(7>B_uv z`b!Q2#Zb}mLTh>wFI)O#Rl~H`7N?_BOU)TRG2b0pq@pJI#!Os?dm6|dRRgo>!)nEN z#e_*iJcc%{owYk?1ETb_D6ZE(JUd;C;!X2GZ5va7u9WaCX*msl1BZ)8{x=E=aqoKN#-hh%Xt92v-Vzu%=ysS(J3@ z%?W7AlOpb8Xppt#w#w6QG^YmHl;XXcLjuc8nTgQnKNZcNupoc=43pa1ymv#nG`O?d z5xggjDV^;6vt*}XaNs>%n@1p9J6w$syJWX=*AF3zd)Oscl(TLd&K21@ETHvvg6uq7 zHA2z+8mcUdnpKSApJ^#Ltm^lBgVH*=d;7sByuY@NHxRysQd zIKPDfD~~rZz?J#d$&yjTZF!8rvL}j?VFGcOCDTT^^KhCD!VXVM_kUQ+v3xE-Pj0I( z_ro-}xyLF?080X!WM=@Ms^ir`oQJ53v%i?4qikx^tYf1kQF|z4Q#~#}%ZA^sJzDlzE^Y#S&hh1#oZ9vt8ddTZ(BH_S<8z z)bSYpYZziEUt-c-|Bcf*e<-FM$mrMGTpGB2i3IAhvO{ep?2a&B6q@&3X>iJ#6720%dgn}d;eynMl8+% z3;rLrrzQN%0w6UZQBM>q#UNw3Ls70buJ5l9h$TDVkf(gIHi8Lu&Qg9}hV1$9*ZGrS zI~-39TNE*voh@BD*dZYKkhNp5u^sb3xP9KF^Kuz7ZmcAo9ar)w_o67Kf(8!c!y!EY z5NXnOwGtVyO99;YaYmc(hBF{DYo*`=B0b!{owoX5NRJ-S;!jq@a|gm#GY&lpU8nj~ zfQGEb2VhK9&NxSOlgW;kV6(#Q2O7HG9gb0_J2D|P9n=7s5ekd77vYG)&;nPYCZMLr zjZu37Pm8nE!D@Q?M<9clkfc8MEUWH$y|66~Q<9#(Su-}efpeuFX(tF?wvh%0T`|*0 z6AHV8E%Sz`O>t0R)lXSB)GO^`*Wa-)T>OmNosT#hwT+}U&Ng9evy%gy#rh`?_FAzF zdBgR>o{){0W5azWlKQ|bxieymw#IotSWq_By2b@m>5A`7zN4M``e>ete=|yYH2z0P z)gK8t@2IMhwia(Y3>LAkKnjT$h@$;~NRQinUl@E4q=&b7WifhIv3jJ3XZ8ycln_6j z?rX2wx`i$!_kU2N$M<2=hiXJ04Cx_LEY~7diS+PGSldygLV7HcUW=grd!$DWeG;hU zRXG@2lv%!z#E=j=^DX%xk&hF`!U~BTdqMLltK??(1kGCB;2NRe&SRrH$>M}K(56W~ zXUakDU)_bTBmVbDkCiR&hxEt`T^eBPaF?gbGM~HymD{rRJ;@Eqbx1GpPLCEC4-~mi zsw^Iie9rLWq>zB?Kl<$amrRZ(0ALf57{{Fv6~!f4%;mGY z4CTWxkgTU1ynHncpvwWz^+ANQc)@+i`bqktzvh)z-Fd*p{y4{RZD5=c+a<&ldQp3T zxQ%b4qx+zdemfL-BjxSzR_pnYfQkAdLCDX8MM1ZX?-U*xKyZ zJcl=HYW#Z+LC&@fV`y|ePg#+J*jG^n_`a$=8)TKX>q4iq;tr5KNK~yCmcdK=thSHamxz7(dT&^m zCaeH#@7rEMjH|d~p8{ZkOS>Wn6Bp^q!EB7W*0zv8X;}d8EQm0XQ<$NYYK1-w8n}?{%%n+Q2`FwQdHZ zxuF0ttkaocEKV)}3a>6w#7-0-qI*=z>FUBlPWOo9>^vsPj0}^H*E-H(@u8f68UMk| z^scG5yDHYYSeAS34iA8S+lHIE$y9GvyAhOsOM2MivuPhNv;kR1Y>bfA6s)rPVFA&VTy zob25r@MVsb)%+D&++tHV{ccQ1#+sjnUeptBIpmFjQ=9jSEQ<*v^t88^CoeO&9CneJ zaSENrK*lXf_nKty$C}0_)$l;nL`Xut!Cn$)Z)}j%yn{v*PSA>CGR6R+Gf|vto;fE_ zc3NB7;Rj#n?Qz+C!0PB}tO3U{{OJP}*=*Amr%zcvi>3I4A9`FP1Xa zc}XU4tDJl>p;25|nxA6r$Z`-fw$~qK*PU^YmozKEPB7s?3LVU1R%WGuVY}FKp#2@m z>DJ=+Bg;MVII|L=goMsLe%+rM(Vlc{^tby01%C!m2kPCr4IO2EV~&$ZC08qR@t#4M-> zUEN$++a|4U(}cpice z6Sib7Tq&(mjBA0e?*r4ai2Yvt?w}ZCM7fnPmsll zsh~Yf*g;sz>Us^=ko0bMdC0AEEPh45Fv8}VSl)pUv6x0YZJ^w147W`KUz|0dPK!|aRSZz6OqNA#~gp*q&ZFR*L*qFJ&YgBzIcPTSoFkTG4qSbeH;N7(G`DHG&{5ml900 z&^Wi8yZtlz=N#h}3ouK7g)ue*5^k}Zkeb*~)0`5XA1y(LkbH2Up3Z=F87lWql12dhX~2Ie)cDYEsBMo0ubj@m zDQ|&@?WdzF);ZtJJ`G~*jzF4e{j$09_z@xyaGkfqQFT(a59{Y;J7_$-Kt3g;F4Ic8 zDC)0!{oC1;{TnA1?J1S9}^Sm*f$J9y`waqbFv+G1-+Qb1Sl(96@VUxjEKc zt=)#drE_|ON_tT1s>TY!G;F@QZ&32a7Ji;%WD{_--kZ&I8B+KTD5yd{Hsc=qQ1o;85E#=e_s;_UICd~ zUem#^;zEv4v2VFl`duDCMA6HS5S>lXTn_7Ts4u$~uzGa?^eyr!msVbiBxH9<_om|N zI~>Fd>%|T^p?HaAB&`w-l?^(I7Pdj`~qdd3bUn$%K$%NMu@S8s=myk3k>si*AV>lH zyPKX|l3yxAM%=1$#KmV`vF$7Y8Jpig67kI!wBc1i@b+fFdw6YNQTg;1DBJz8<;-sK z{f-V&)#IwixtKFIJLiuEVF_HtC-a>E-{zFk&d;;5(GHPab1;VmKq8m*23?%+gJ7py zrBN9Xz#dOF@o=9uj@W_IrI7tV>|V1+Kz|elY^A}xJmIe(dK9XN9@07y*fm1)K@(|C9xiR4&2FVq-=qJcZx)-_AaL>2h3ikdyMc z43k4~_yVMK-{spuNg}m4-BJMak$vT*`SyEqe7{Eak z4@H+vOA41jaaSeb+plNhxypJybAuqjautJpBM@Hf-}*->*o*hyH_Fq&fAoCgnU%;= zfF$6S?P9;$*GcaQw#q=|zqV0JJN+e68ByQ3!* z@c%kx8hflCE@+CX_pH9#om?6zy6iOoON^EX|ACY}g1baICnWC3+HMr{21i0;WlDapfA>fV5=6}Om-h!h6fXDAhcIlBZ7`YAWq z${8{}5x@%M1C;FEq}j`>7x}1?1@g+4F)_+`089d^4O|hY{P_*^Qt%Gpk)^r_QH*Gh z9iblNki2qt4+*^Vmg|k0-idCS=#_9%!ufgGvoXCxwDOpK{!KpC;-XhrySX)XY}!gJ zPVbQ_rwsPb?QF7oE|1!W1SI?Zi%BD$j z3jZaI>mK^;-+;g2D)e!Who|5jIn;lWo6ou&b-P^%=A;DMMS;%>b5qKF;Fsir09uFU z4Pp~DEctU{awjz=1{>m4DLR1`o-*A;2Tl#@TlZ$~97e(eN)c%LCip+{An5Zn%{W2p zXqp=l*9OHV4u;X-fPni9Dr)yc#APh$CI#AzUQl;Eqk|%x-}u{3EvCHl^+LzoPv0rc`qhE>zFGrXV(}k034c7MXG80_#5Id<>Tk5Y zWotuxyi*w^67BusCd+(Sm0~l=`rO9A^%-VS=M8bUE$W?m^(GiqHtZ@TgnbPP!JFn_ zt;E)41)d?XQh;I1*e8i}OK!xOklgKtOAUqwz7KH$qaN+OS5ugdU~py@66SPqFV^&& z>0Y*X=UDSN25UOhfQ3w~9S(Ds3-|H1*vd!MZ8YXzLq+vE#N?9lXZmcq(h~SKG!TF& z>ze~<-DVIw{eVqEEVE#0%knl7Wuhv+2DjRV?f;p0EJf}B4j%8HH@&K&ci*5Nyy4{MoabXy*UhZTfBurns4CQhFYnbUdU@62?Z8?EMK_4O$UPr7=fU2&Xb zFba&(3%b7`^-=vK{y%bh-cKiaR716Md!?qx0T?lwktfK3^WJY55)u%ze9}HKB!(JH zUmi)tVEaEeE*akQ1d}C=a0DT<{DDskh{cBoe0r}?=kN3ULC)qdu`S_2nLQ^kB1U1} zE|P>5CC0RuE`#AQ%$?9_1)`gNno7`xuRGx)(bNf)YC^SVKb!s+3!o0UbUsa|ym;aC zU;_Id=cY`ekyF0-It&DMyHAc7J~>hx39_7HsYXo`RC`^FRdVBgJirGJ=6*^#TB~7G zuaxlF;T)`Z@%3i4>W)>?J%0Wt-GiZ`dz_XlLCmT@xIRBH-Q&dVYh|As=SsW&PWc=e z;{a7}p|FGONlfRcx!NDT9jVMBKG24S@#AjXr0uioUzU~`L~AY!ZAeI1fbp`G;2Fj> zwFDU}zQtzuj$ln^w9{7->D39-ZzK~oI30WJPwRS@|Ah!WkxqE(H#CAJD?)hk1=9&|E%LUujCRplvgN0WRXP&8_s^{tiF1?LXbSi$+ zA;{EkmtBNU!BBS7fnaAG-5_B*&U##ql(41<%X{tzHd8SV&kVTm6hN& zWg=eYTMj|c*oel_;?mgY&Mtp|IVwYz(mKAh2*P7STThsy66k$(7r6unz-FAF<(VQF zOfCvkPs1-lD&*ydDRif*G=GS#Q<31U>Oh8X*_>@Le3^3Ltj>X~WhX;t0!!cADQx8P z37Po~il61FbAfNV0rgTA$)?a~a>ll}#JvuO(-5}pJ@(T4E>zrN2t~;_%vLhCVUO`e z?i=Rs*D!T~=JnA(^^vQ~tO0wK|F#SVsVxrrtVHY(20*3((3ko%%g9$4AkShHarlm| zk93%k3dcQHOe3*Ke*7#P^N5nr`5wba28mCZIe!%}iz-ENl2NNEX7*SY3R-f4bF-^YK4 z!Pgx}32)ezJV3KkcHVN^7-d!;zs=rmz%JC#+|yXz1Gf5rH1D5RoMMeXSAuTgE_#3I>6 zz_Yb7h$LqK2zW0&CMMRC4r6wD*FO#wIN>5=vtt3|XA^N9ag1vit%>AzY_5eM;#l5( z(KNk<*~|Uq=xD{SzQov2@1D)vg+r8Jyu^~45b&^>mpFTA`A|^0N;`Vz#M#`(Ct{&I z^(oo4wJ*tTHvFn7Y^V1bq#=qcu@vVDG9MSj`JtVcS>9Lx*^7(KSe~sR_bV$JmCD1= zz1GIlQ`&J!W!zm5<&Rk8P`-y#f_F90(X!{D{ejdh-) zR>6Z%UJ)uEx$?Vb__d=&lfK~%Bp-)84ietEsV@1ft-U2SE(?-mdk|j_ya4e zFA{wRZy#Q~I&!{F0PnH1QQodCjAsLO4&&&Q$Z{%XQG-y)~HL)xN)J@03Uci1i* za>t9k2ja$vx9P)^`;K3}*nmw(eyeEL(_}U|nC_A(c1A0fVI|~*GvB&RZ19)Wm{?jE zBsAK~qU;F}d*+<|{7{OatJ`@R?Lm$5_cYqtg(;A!=#`3dxY5p#p*9uI^6S)ECE3?wjKvjc4--^=ouAC%QAn)Xpzo z+JC>Oda4|g=c>wW?v1)CbI?GtR(j?q@cw0fil!^Qe2dH&xNj3c=bH(q+!VK91iomg zS8qrTD2l3`+vLtK-U*Z3vUb4&ye-Ssf!2R&9eeui$9~mS;9*g%8s<8{OADEZo!}z? zv@{6ga^nQpCLAxg&+9FamxtD( zOMo;*iMtmu;6mU^`2Os1PGSFMSih5^Ik8__`NYJcB5dol=5HqY?d{SnVG)UzEzNi7 zUN{DiQML9Mu`O%HJYzFEVdT3J;Y)TvhqRP|#C4E-__gFteYlaOt3zm+HWMorq}_6D z*xw6gg3F_==}caZw3_m7PM!B70ll`^365ZJECaC9?EsuJ#Ip~c1khp3+Ad%fM&H}P zA3Tu^$=;TIp%{>wBiYcJ32L90D6|>GFCmjt<}U?Plg0`rO?Jiw^S{CBaG*U}k+cU9 zP<{zY?2DPbGx`?W-M*-Jn)E zjV!GGsfSbyos=kYE!Imp^x$yiAX1z!zIS-CXR&iQYRVYBuIIBLDM+^F=OTYdt)0sS zjwQTeWFpPr$-n&;-dhV-m_zepMkb1xzk8=e6#_JW!mCkk< zo|U^y`dMO=v9y>FBw=Hhp=6jQFBedBhNdhXWyL*O1b$5>tO-`7>3B^0v3?q~T(}5} z6D1cgej+JpuYIAA@(RE!B?Oj?YJni)&3C+`)}$bqNBNNqx24DpC2GsK_kZS8nLJ|F$KYpOVm_w4(ju))@8k=RzYyp%TSnFn@pYR_cM4gXN70=IEkjxOSz zWk?QtS4Dv?rP_v5@oCCVD2Pv$3U}Ju@N;lwW35Ih(D|0GHb>KwJt;Pw4!LDj@PQtO|G7}! zIogXx4JeSw$+D__d7wSyg-XQ(oI)=As3^ebP>dD-?9UUHU!!7$NA<=P2;&12f<;d{2#0WozrN4&Mo4LmuDo8V4s!YWG)Nle=aF~e zIQ9wr$wP>b1}=0u96VoNc;8^lvek?DdSbo4#fCjw6;*%JiBy;iUl>rKb&113@G}(7 zn_zWiIW7Vsxi^+-FQuH(N=VH^%?P(>J2Nl0?|8ildu5a~q56QFlcFc&N}(XgXAx%Rfs&Ny_d)Yn z-hg}-gTFkVrSbQCmgKor=d*zMmnxqnx&K4tv&{eSxa{++y9u(7y$`m(_=cg(l}(sG zp*AJ&iN0~uLC%67+z}lH1k01BMFw@01)qm5_^{!vB%o;4mqoQ| z(3cp8wIB=m)rBNw8}J1WI3<9JJkvVTW0lt@G+8lN`mc&ywN+Yt2zxBy4DVt%c03P1 z2XVgB$8c%u&nZyHRYklKUAD5ro}}NlrOX5MLc0;{l<+qS0>@-vPqpt0x$L|IBc3#q zD5J{khpu*IMI;6%xUTq2o%-$LizarX>i9D*Jf|NZ$hBKG8N2Y$eD(=eqo~pB7&leA z7RGh#hkVK&P}cMOw5j@}s~TWWza|J40?~=sW}TSq-Eg_Iu)HKI6LzN>xvQ0eu=N6w z<$qO)MHm+vW)^vO(wWcbjK!gA5+ZO}m)c8cfUl>9x(d0TAZ0Qu8X3Q-DGW>DcIA z?-}>}h`prvoT{-07^Ft$Xsy?xLr-<(H7&>;x{~FiYw1ECLhkz<;NMg0uEyr^VL3+BO!$Aw|`#jq({mx=RA*bQrxkJGUum2 zauQ(&4RRZ~OPrp0;R=}AA9A${V@L7>?z!cARLB$5<*%u=%&`0#^2QRR%~*>#)GE3` z3dC<~SGZdZG?SXIYs@>u-VC~(7x{H%6>{df{5k}p-p=A`=p$sfdd~*-Y;gCG(LbId zV=hJR%%ZT2sM4`i8ATI1Gz!FFfpg9yc))cK3F4!E9f%L5ro=}N-;@`eAWTnZ7=sNp zn3r>#GLg8|VHBBWr&Znj6>Fqw?|2k6v3engy}9MP%6@S$Z0_3|F|(m)m*62CA?4N- z3Iey?fW5prN6XqT(zQf@PC-|eR8MZ9$f?zD!&ii?Z~y~qxX>SuFUNsMAb*5(BtLiw z?6x}#Jb*~(kqa@oUUX<5xJFF(xoBcd^KU>GlARJw#UvIQ%~g6F?_APkMSXLBl)Cwo zW#K<87QL3GHetw>&^1XG7nSWt?a6e2z-D_oV`oxh#zAo>4=$^+=^V%L?a7Aax&YCI z2G()rU$A>D%mEv#wo_`0lt-^~I-;sTWZ3av(l!K%mH|vrwsPQzcHx*f!8f!_p zR9b4xjJXALz4QF#{T}Glr7nA3#fW? z;+;+G`)iEf45t9TB%Yuu)j_3^2%eXRnlL8k(PP7d`zNV=3nu5XaaBU^!k!if7y~4d zWI++kFV(jfXJM3Z$^kb~a*3*m4`(gIa~W0hCF!17@{E(|_VeC3H>kwfprXTZ z+0#Q=l=AptvEJ@4&vfh{cJOLOy*>8~ziCaSe31wJ`ly7TRl>I~V@9&P)U#r7KeBbM zgm*hLjbU@2KdyU&ld$QF3fW)?VP@uk@pkTUN!V@wx7D&OQ=4069>}@nwoEgY3MiCT zYA_xfJf=X$>zPg%yzuTuA zntjzdRlBk(oN{B~I4%t@Jnp(QR=Sq0I4j^}^t!rY%{uR6S={|+rNt&vj-KaDXtiQj zr!WuTI_eZzZP`B7rm_rHNgup=hunlSYosN=Af#h}Z?vQr;sZ!m`dg+b9BdEDi7K=_yh0E24Ss=I)vk39@9SlY~!2 z@hFO*&$mQperDC=DA-Uz`Pp?~dzK6!xH4l{3*TLkZx`<1#Z882P7XhHq>{c6?&(_$ zg(WQ6@1TG@%d4HZi3B7MjaK=1o@4s;JTX$-(~7kfo?gE2e`9i6(pD|=`7jKetn+z; zkS;}k$<_m5z^m(5+WG9Pp9^65WAo*LT26i*0$Mv}=d`#dNLoDdNMFo0!=K|Qs4a(y zgsLI|t}G>TLjLLSfyeq3N6!F7X6BMj`$mj_{jC|UPGyr*{j!`XA@esTe!GI2B*>>t z0U&g(QTF0X7<`~N59mC;HN-|kNG%H%~t=+H`%F4ZwbawxGs!le+Ycc9z1ylwi6n88+8BX_KNH z8Ij6uv96@@^HqD8i8Wz1%#Xb({zHee1U45Q8W&Y*FCX8d|0Lkk&<&RjdO8=jOEfKg z1eO|bsrKv!IOqBCpg;&hs*Og9gLSuKu)kRAMy}7zb%G?o8jF@}tfS?E#Fly*aI#{) zPkfEwm;2QAD(<*3A#1=N_hzxAw;`hY*$KpCgA>mP3&|^}ALU2ukVbS%K}H z5a;mx1%t;8R>mW>6B%wB7#)6Vn!WtP4wrOKIdr6wp%o;xiLvg^a;IhAKFI`cKD(ta zgiKTK!9fn6uhB8HXBWxc$thfUC!hjuB!6VjLNHp z+(BY6QJs0&g)-1QriaYb;=W`|-Mh?jL;92{W0^9)B$0}PrSaiiup{^wdHDMu3Qaep6tkI^Pw%(>BP{%Zc9eAyts8U=Dbpm zy8bJxb^4cU7IGX(0doPi3;CB?q8sCm=))yTFCJSd^Zlcv8vKY#hEMjAff^dbm4QR} z&LYst0lgQg-{NA-=f5A=JzZJ}KP(6FH@^8){)1h8$)%^gPEIv$#OSguHOleZP$J5k5(m4NZdqI1@Gun^uV0# zaDI3i=_KoDBSP2=Fxp!(*xiZ+iN4X_IG0`_$x^&3z;nTvmggTtk(9NO>Qw{w)*03d;oP? z7t|x(nin%!l+zmc_@7(UzqnBM@DY}W0sam%WZn1lis}(IBZZ986pxBpVfZaW8MoxA z{#U^sZok%fBB5Z?eR@IWR-;-{4n31%l;b;oA0bWni{Qbz{R0y@Ii7`%T;87zfp{wZ zKOvCH|1tzp1VSK1?;r#sa)SIOqI^3ckonY=5J4X{9N zKnjD=lidbApNJ8r0ra^C{Wox_C%zon%lSG^UflhU?cq-e+Q<=t86LR@smMsHz-))F z8~?f53UI#QIR65{{>E>K<9#6mM+&>4m^viv7|THJt^=7AmSJYi#G5Io=dSt{dnxCK z6{iZ8<%7zh8alXKr@sCDSy>zflE{-wI&&9)_tW{~e_Cfft(dHi630a00n!8fPQtt2 zDbnL`z>M3ow0DN|2$>$4Uc1U}d!X&5S7j?}`AXmp`)z;nL;?1p?WIejK6d!{;~62Z zlWgk#X7=1rANmO8Ik8%#M<+mfd}Vv#D&!+takwoe^YcTf3;a(e!2~mOi^dZ5{pyrI zi}ctj!xT}Qjw;FiDp7s+0%U3Kvel|0+Sc@^2yjiKD)Az5=VE&WI-V1C>_PZThs?(=L@*H#ci zj!*e~DIa20nq#(jJ90*->ZK`5JvkOj8{jt=T0IVbGh=ny>MWKS!Lhw+cxSrnQYPei zpK@zmNEXCHzk2vI8e@j|3sM%aO0U~b_p}XPV!s_J%Vcz@;`KQ>5Rsg);+XAxPBnXu z#Nf*P+Z{FFLbn_M2Orw(cghgg>G_I%1z1Jc3Lc=A7jhQdycyYe(Gk*8WEnn`8%a(6 z-U*2<65N4sHk7+4f{(N7LEX=+p6pou8=|Q{zIE%S>)aj0Yg4%<+PJh3+tb2nuaPMg z#@kS;cKue5-VTUtI+2b_pwEsBxp{rvI6RT23hL26ea0x0ieh9!*$ZLzFMIuk)O;lN=KFI4%r;* zN9OyGcx4TegZ-aG+huI>w5UD2yYBCa2L(derLXPOi^>tL8W+E8_;4F4%-*;t>=A=G zJ4iS|$}QFMLiKe|qn$K{G7!x@v$aH?YuC}7zOn^I(`x|h-cb5w-4G^UR)8j^Ym+CV zz~`_uol54?+yAzzv5ZjXF)=h$%o(jJI-UdQ4E@b1B)4}eWw}v*zv!JwSx!=E%U%7e zf4zbX$o!Hjwa7WAAFMFE(+o)AN(LnUe~jKpP#x>|E`a#?umteoE>T81EGo7r&inA$`D^ivwHxQF~r&1PwAZ5}211ZZB+qywY z`dZJ^(I1PiudRS2RM=JMV1mY`nAI>pnr~kn>OJ#e~br8ZO|B&JS6PGi^gceHrxAe*(DAq}715PgJYV!u0Q?>e(}c<*E{{;kTT zkF2d!`EeeoP?I{u)cM|AG)Bp0bz2WPX-)_qA{l0?0&Zb&1BS^KV_sqW+tdWoQsQW9?SO&ksai$_87c(+_?8T=l*Q z!`*N_fx*DCMH46TMfY9`ah+IeNAO_!On2$n6eDF$Ph_?WE=hp#J71aNIKw~ATGvE8 z5{Na5LWIE_UC#?pvg``&uGSL)GbnRuc_!m@&{tN6r9z#Dw;x$_U;MNG~X z_#Dt$X~}XRYX@o~fM}7dYZ1Jv3W6lej_Vk8hP{&5C`bW&YN@J!?Cc?57e z;12#qQl=p00o3m$`yK=@#9_EE0mFA|lmfHVVb7Pn4h*U@W?J{p{yKAWsbnDYXB`a~ zz{x4p$XOBTaKgHMW>)d}Yrg!Lqj@sbp^>^-@V*~4tP=5AN{uX;UT(0*RMS`sKBQb* z=f?(V-XkYxHetl7dz`3{mHYifReh=}vgHPI~<*!Wwt@8Fq&eTz$qG4`N`74H-) z-i5w3Y(%zK7d|Xs`XMTggt@*mwrc1_48Z_#l+oI5bN8etMDeTQ*OZhs=e$KRS7-|` z!Omfy#XaYzHGXiXKdG}xZ$S?wvBSga7SOSP0~J>Uc1(?Ct0N4{q#?Gjrl86a_I_J< zXp4gPH7X*anN~7^vO|!jhT^!ZbO!`(=mGfXXi+Mq=Hw>&%GTt&CVCwHX72vGA$s(= zi=_Y;U;Lk@Qx+>()0&Ha78lZ^-sy`*Yv2#OYJQa$8M>V(vK1doJ;Cmb1byM8XOIdRKyjMz!H#x75uimi ze(S^+>ZcFhLq;9|kr!q*{(G`CKZtvn7-rm^d9|f&0|uX|do>b({ER*~@D4Y?30C}> z(*rv-d?->KN^)E{;4am{71vX>VzLMgcXKT2mL&QR=_ohQJWN>Y+?y{z`|c);!QAOg zm8Dwr@~A)>H@}^Jl0Tt{6gh3&n6h`MX5r%PW}xaHgWN?%l^$^FP6cm|A-;Q`=nomHei>mdL{; zO=7S*&1R#b7+tv)Mx(aMEjC@M1YbaAGFpE3?&6_UxKu;oRm zsa6(B=dENwRKv5)ol}Chk^%Yjzs!I{dQ5{1Nd5mt286l1I6PX0T4uMewiVXY1csRH zQOlUHNCuDIto%Wb@{XrsU!#xXoL1M9O@ z(}&B25&vQVT%4S1?+pJv`1SXV<~J7VRN5}b9)MOMIATd>Xn(rblM$ z@7I)%QlM4ARvaqu8TU}IV|g@0b96%0!}Qq~mrMYP8ufhr+4Q*HNXZy+$M6Q|=nJzEgsk%Xnx4{=8Qt~$aH{Kv z4A$Q1&$%H6@a}6}Clg2}8Jj$;H^bKL*PIw5XyeG~jOnfGX%QPD*BN5G@~q1!w1@-~ zdf4NQ*O;)*%#C(29UVDZbq2%EB&t42Ib9EOY6kc*=7ahfLrD)~Fo=jdka>dNlw$;$ zkn3>OUTY%{^%?43{Pg^x^IS}QWtt7?a9PKqqDvS=v6^m}2eZ4$0n_NaY};63-w4K1bL zfzLr*9&+}=)np^_tZCL(W$b_>d$yJwmtx~D;0}EK9mANft!zPsDSVh1K@(6fiu^Ue(=gBTC#E2tI7{Tk}aK*|rql|5N4TD@fdUeC8E8eN0<>s}4 zqi@sDvh!btmU-UFS%C^zt)WHVX<$b8sh%3jy&0@g-oH^_`PC4hs!3}Sq$P4o2m%vQ zZo+=?Y2S3%+)b*cyFZ#t>n%wkhl`IjM|gyO%EOm#p;^tOc6ECMj7Z2(;Me3tj4_}U zVkL;&+iM0ixYH3bev_br-}!y56n@g_o2mQun%i_XBpchhY?T*38s)~c3DCBd&uimP z4kA&P7aHq--LZ9jAuyL(Lh#DQCRdbyXpU|ywB+$Ihbp2D_m&FF3YvR>LI7K@f9N4U z;zZpw%C^dlgJ632&r_p%dgKieha?NUSSprd?cUIB{H_=J#y_7X|7K_rXSYWIL(54q ziRV4hX&i)Efh18Gz7s#yz!qNw6ks1IiuK7wYdc0Z#>dg%;z!mv-8M(cT8^HqcM@dM&dnfoTBKF9mJ%B*(yU^oKR#= zIa8b4QAa;<4D8`5qR)s0{>1*P+@dbU_`FCLRO*5t>o+^ae~qbMto0rqWv2=ai!9v& zrYtAEs(rxe+JjCE2CKGAJUBD)i75s>GGFvm*!?a-1Gl@oW#L!)f}6Mv^4ySAM~f8V zw)QB5PXTFw&;h6>2*llq*W;5oS#?vdi)8rc^_L9|_h7TjC@tYM(h&m9#i#Mv-SUW1 z*ac(*rM{P3Zqd0zxUVRgc4_2;^{6n%&$3r?%GDn2532B zq13f@t6qe)dPNA|kI2 zW^KrC>ZqVo0Y4t}J|cGc{glD<-F|}^lS|DYzUFZ9#j}>0na{fs)$FQ0>E{7;?zG~R zLu*KByk*ZQMWJ|{jmd~%mcyWF{?((HN-KX?pEyImsOkMvmSjXES2$4U(hu`me1ujN zKFS>a+y0`E`(M_PTkfxWwpJK3wO`~@F1m$zhxHo zB55b4&iJ_Z<_UiK9o0hUYLOm=0O@h;?I1mJ{{!i9LX5KDaF(aabXO^8SyG~+qunK`uNV_VkQlof+ zfTYNoj3`4bRq!EjSCX0D<`W%dSu$eIlJm=Nm#ktN&Lj}5Mq^@~3@;T|Bngb66fFnx zBuYn|uAa~_%xT>VVLuBEy`Dw@Y#>2b2s4UAvp^<KWM~MLzR)md7K3mc z`xk5(_TsIDf%7*`CQF?BXpNog<>Nefr}iLkX=~2)L|6tfP=EeW1_DstU0cxr|~?9 z7^N{w@+q4Py*2w|wcsG)-p4gGKIsW6YERopUK+CXz#7&^F4YtOI>14 z49_CPh{OJxII%vOC=4v%dgw1*m6iK+(V@geqZzDU*#u}u;AFh?Y2mXVo-}2$H~1 z%gFY{b<&u4Ok_ENI^Ozd-uI=qVOB%e;MpP94G7tNP#tcTWOXNpRr9El5lO9eIvwoO z=JY8zYp~9K=P%4XRWhoySs98sFT+KE@Ak7$6i$ho0_2f;Codb{JYlxYx=8EiQCN6O z?G!ORd^pV!Q?y%gv+X1C`ZlJ zYo-qtA2r^B@+k@}AA@sY8m*y#STf!3c_-Y$~vdo`vwD7#PN;&bew$18gVO6Y(a_p!2T#upAnv`8HwVwh zg)5W2gg3UvF1ScW60FJPR~Spwik~Q)t;$9+CyO`z-7BM{XAOE)vX=dh7aAVm8=R|D z%xs@|qT-{(Q|Je|fxNUP;e}4p7jssz!p$hPWJm1|M#TDzvoF#7wOT*13Zo6nTqZ`E zVk{OgoUq=di(7v_G#OkPF}f)uhWGNM+tSHY_}oQG^ho6*(mVGcsWMS1KZVBRS1p|z z6+%9Y-cViW3dw}czK+HeaHGRRr^lJ}{*j=I$~PON!D}~stroo&X}{~uRjD_gD*umw zERWN%i4f6N<_hyb(Bi~X0Ltw<6}0&047~aSK}*;FP|#9U##2pl>4Zh4p3~n}d5-++ zmU%rk3-XhN^()U7up9M{7d^j3;^OJF5Z`&=EjM78E2pO&&Fk+3hXM8tQ#K9O7`oIoDuJ)Kf(C^2tDZ3ewIpv(Y0TSaKE*kMCXHyRf&mY&Qfg z*r0uebIDKNF8&IQm5rYAfg5eU3@b1`W&9W<)N6Uevb4vHQOquh;<~!0KO~(R`r-d%DwHt*fX=QK~;>ZUm6(BbNuACH*8!kny zviTP->cs~U!zVdidF|-mHjABU*L^WN(lR>Bd0{$|kMys`Je z!75Fs8$u4yEZhCeRga-%h$!BnU8fuP?I>x^mgj{Q_$U+2jH-qEX*bJei{9`5jCQKg zD;3$QZZpfS?HDvs^JZ9{-t^6#VBFL#1AAf8R*T(&d_k{qh_WC^$$ote7P29tb+ZVv z-O7hIJ>@q8HtpirF5+AI6%jBKh1f(#_4rs!$)<~Mt;BN2qZZ`9{T5c%Mjy`r?9u3+ zf4rb&{3LV*tOd*{GbJ+^Q`qUL#YzJ!UXqu*X}}pUigk&Nq!vIifdv#g21n2yqE7GS zD5{^qIU+X*!rlNgDG#}ik7Xk39pPUS(u&0iYh9Oq> z(s=TT5$*8~Q(okV>q-i3KTA!H0awyjPSBiEwPRSnb z3&~d-LtHWzeu_Un?SpUVghr2n*?D3gK_aXrLuCsk!MIpOW4_bLEmmVp_rr$e#fB`` zs0=Fx60`s}bvR=*Cm%A_BdqEabq^ehippD!S@UTxcPbHyCyXVZI2#QM_-C)iWi@P; zDHN?~yfoYejqh|2kRuW{SI^TJ@+$3YBIeplMaSn2&jOGiVNN&X0gcb6goGRmLQ7ol z{O$P`Q0P+xP2WZf3Vbz(+OGTa%I+^THM>vbhb@nGFU06t5QM9v6yO{NR`AgXIzcG| zDg6HhqKBLPL+f`$^yqV=1EL4m{`)tZ!2e*}NPM{dsS_~0pbC$ZPBbqZ7rMA^sK8dR z>t{9&a$5F~5OE8~RZaEz<_Ng=W0RLB`%ZSIu4N!auJl{O-i18S7xvaz;ula*myMnY zGb%7q2g%xK$H?ba{ZBP4WNjvjP#)c|DiKb_5Tj0x<$)j2j{zx%Y${$=e%Ap&e$!tJ zYS#*i^|>o9O?6MNtx;5Zcz{_Q0t4F7Z4@eD>+CReiyhH;4%07BcOv1ixll;;n4cl) ztC+!K+-?PR9IWXrIzi~9#UYr};nfxzlhhu?h#<3JHr(ad0{~~EB3tvlG--WddLp8H^P(t;qY$zj zPoC$w|8n%C2t)MtTk1}%a_seekr#v%j$JQ0)cOy#lO;+IlzI-vW6kv#v)M)KX z4EG>litL$a*zB_@;AP7}L)6z#&dy5$**(sUTVl8j2!2MuC1)q{%V9I?w7Ny=0)$d4+=uW0n6%4<&qU=5Jq;8g7qjd@4Q za!S(OWx6%AF522|xgMZc>_osa;y%BLz^EE)3A-w=OsLiqS9;`2aOPu$ya;!HH#%*r zH{*LsB{jFXBEQH2N0fK~!hYH=b$p$oq1zM}z=4R-D(jCn)_nU>=INY}*k1InX2IHA zg&V1_<(Yu+1)QLb)e%3Rw;|(0PnmL1A7k|$2?UIMx=GJvbg@<8+(A-mwG<}H0UyVVS~vVQH?(cqD#n6Z`pf* z_8>S`D@vC7-8Ak#0bX6`tFeKvq4`)fD(tv&+6%+$q-A)?vT}$SWf3kHUM2&oDPk{% z$PwN{R)b5h!X0ggCu|P=v?m#zV_~IgIZC3A#xX;LpKU=5MN^M?j`z6EIY@5Q|Lm-3 zum-7=Z?^iT)=a|lah`NY8~X$`UdLF6*SKB*OE9*s)^K+R0BC50_G0?p*6U;f_`nhF zYpWcF6=!_VenuBM_7T)^i#Da-_g7!pKUK0Gv%K@Y^-oElA69ezKOsFfZU-<|ivg3l z*gyCH-uymUQ&(=_nn1N4WB-#+kL=tSVs*3k&KY7xTv&syr(o(}u`&DUo&zaBfiYW` zPDVT@@~nk?=Nf^{Om;R`AZ7ciUYE*Vu+5ivgX|v?>o8l|y?3MaW0V7YY zG#YOR1#sY)Vnkh1GHdq;+o9ED#Ac&=RXI_@b}(4Tul2Y{ZOQFBF{1bLeI#+aaC?nH z&?6tDSXk-efs~bgaM#VrQ=*hjB(T-~a`?F;QYH^((Zkn2Mg7MDivZ7N;C5gW0*b4ZJ&=vitTGiC94p!qqNNK7a`GQ~^_v#pa`DJfzB ze%JKom2tuh1F2mS(H-&VsFS|vgXD_mJ}siBdrLpq55aLe>=W);ZFJFe&vXB!B_47& z%a+=$S{v-lE#wdt7E(WaSvBPR9F8z&2!%|F96e&Uj#YydK(J9hzuIdS7+S!1`mY#T ziV%NfXzBfL3@wGg&~kjr_xFaDw_{~Ni29Gwh1uz&* zkI6uNTCq}}*6vvx)7XW;;Q;u-8d?n!Px{$f&=PsEPdf|NeGkrN-$g9R0==otd*geC zPv<}Y$QxIR!CqhMsXWosW|GwuR5UXExh}L)?u}-dtApqE=D~m}Js%=5ze)Ad-ULMR z4+)rGLUt0yf|2WQLn!rufCE1~LC(0=8fCrwgCUZiKe>A^EH0o@B?z(@0Wk(2O`>0= zmC~ajgav-7LRnq|N`RH+ zE96tk;p}4pvo1NP>AC?^u$ginf;78O=c-RypL6Nzrf2a3K})&qkW4#$C#3%=CM49j zJzle-W>4WJl=xPE7Q+=nlJFm()StF_l`X*oqeqY@#7m&8ej8Sn`S$jr~ol?Xs8@|AIL%=1HLU0he)7?1Yzw0onnI$8SuG1?y6W$IO6czY2@f=`b z>GlxO0c14v6ci9Ta#@Z>{q=<@+p@Z*BkeC+e-hf7zVD32;Irp|tA3PZlw^b&y0Y2G zYWBnVh0ScV`Aw^5yMxaYB?$|U1!zZ(!Zj69wVj$XUCW4B+tW(66x~* zY3YM@+Qd<`+~P5iR^A<4#bKhIanmbp$l%(>voX8@W9c&_+fW~)j00_i^tA)RX%oF# zn(@GLTlJF87i3V>|)4ke~k!uvC?NqT(`|Zb4yDLv*nJ|GTLkc$tLDnS*k~#muMVt z+AaT*TH=a-@AVPQH7_YJzoP+TUDMk&&K!$5kzkqCl-yF*vaO-9u>!_VuC)?J;r1D5 zu6!*P+F4FUmEq>Rqy4BiTHsF|S13O1TF$TD`1AkkjK7)Xm^*Ol=>0y`@IL@!&t1&* zx6FG%-L*ECYIx)|Te1_6^Yh4|gz!J+^iBIt+;|p%EfDNzSJ%Is!rYrQ=t%15Vj0>s z8&F$XGRjX#kD>%6uFczaN_M|W)VfT8^|VDhldoyCGm~2x+EKk|@!_*AsdPn)?yCMJ@9K*(tqlAlVc8gJ%Waz$Vpyj;+UV;&fQ5 zFY)RC#c*8Dt~s(!KndnG1h)9-mm^)osA!uS`6Nd5o(Fts+DmxiU0QSP~v5XJxpG0?SQ0=rU?~Z;}`yZ3)L_ZuFEg z5Te6&Gj00S*d;x~QbA;2Z!%LWsy>hyb~r4|xGnQTE!q(IfT@`gx7+VZo0cK29sz!6 z)c0dhm`g*=XL#QHjSG)zR zyG^h8uSi)Yi)8ixjKE3Xj+6yNzoN^xAwi=wEg9N;b+>6^F*n0w;^iZqn3QtfS-knp za1gd9d&s)1utUHq!mKWt+W$BYTYVD@BYR=(^qRhLS`X6*m*BSa>Eop6$&Mu^JSXY+s-8L~bA|E;R_1-&Ce)LUI z$5Dcd>g(|54~MDQFV}tA(d8-cVYHiIP<8M?SYrfrEo5kUJaoRg(A`}5`cR-awfPCP zz?T>>qK%dBAhhbC#M0=A4bzG}V7F_iO`xuE<&CFG!e0c$fjX=#2nfBGSH=t3D;F)f zf>t5p1mwl=`PzPNv<%<-HxO0?TIc8S8P4$!rt2FfhEmd5+lD{QnRo4Xb;B0B_uGs? z@%{kDIOUwr1+;JK=&Si_!21&h+7ZmWvW6sUt!QQzo=~)l^+8c)g6-w6S?l(O*=~3x zHrjXrd)AcKBa!A8sdanK?@%S&YX~ul{OC#f6r(GQ@H(H{BfE1`R%|kNz;S&u$O9JC zPIN2epN?z}-8{eKHctwlnH^-(7y8kwoHK0&*L8SUv&BVd<_m*e%)AL|6{5YlcQAl_ zzsjP0i+JkmYE35{u0223S_PbMr{>v#`O*?0pzT1apDDro#7@S;Yo=H1@y}+e3n}Aq zHk^(!Eis=iE3k}e!^e3#`PFtcPkp4p81`;^96{WEl>5woLi6jjr>-(CH#pJ0YxFlf z576v3kS@<(#vS++JWkoB6B91v?6Fn_)5CaS?YZ;kqXR-=0M>o^{D%y=odK{oP7gd>NxV-T5TpSus@u+Hd85&lF!s?TnW(2A@UG=qMv|E=hl3go9`WXWoteMY z!B8j6I*5AbHy_@m5O@r;)Ddu>ahdaB>*epJ9Hzor6nyp_i+O}UajrHsF^H~G9wMzB z{6dvznLY0!FofQBHHk1%HNTJ|E zztoJ&V`^4Y3n03*86xGxv zA4U0lby0dYOluO{@xT;>l7`GB%Tr@2%JZGf4uk&aPU>_9pgy6|MZBe8+Hc{&w;*K! zK*j!iByV#5lcO#X| z#MC~C`M7RSUQOflp}P-5xJ%197`#(%9`h&B7-+^K9=Ra?aT=9g?={)H|53zzz ztc}7~pQIt(R$i|)V@YNRXgNEdQ&O0D3QajPF9A78deB-938(cIODU0W zA4|%x!j7_N<-OfZt8>QChODIwREai@SpG^sq*2mhUG=E)9%+|+$LKl-&CJ0Rw zYgcV{y1}ihhu_ky*X9Yy7-7-2`51pzb|)}N@f1%MK5QBqL|Z+;Um1la}j z!9#$-2{wRDs50Z5zUBcuYsU)M1E)$$KEuQP8xRGw{kqoS?BCZDN8o`&+4qmqh*MiH zAgTML51d(rHOTjV*20P@ln9ZYA%07hj@Z4`xG$$Dax9&@2B+A)1;v>Q3L3U2pUFWo zcn;hdkUZ0XgW1U<$d_vY5gz{5n-ihGJYh5k{qg4Ca00H0-8?!kwD3m6aX)9*gxVME zqCJnULMotzS<}bLz`T4`=wl5*QggXQaZHmAv>$QiVe$9$UbnHvxN#fK%jQQ{WS|8Y zbh{dk4Nptn%V!w#Ob;1G5?kUlVbwJqCkOjohd=ZxdOWio!g4%jHv4tTgRU-e^`q)X z**+I<@fS{cW1>0o4;T0VzGfTK!OJnX)bx{Hw=sd91nQp6gATUDL4R{ewR%<1N!B>Q zz{zn&KWGgp z5z4ty{!`tvGZUJT*_d#^cpC4yg4e_uYC)e-H^*0sdd%SDQ{Aors+8Uj#l=SFbCtXB zi`J&NC^wda`D}x@nFhr^k-WTu2L3aP&il22#36QphoM3MMS?eMRqmAbHhUZCsd^<} zBxsYmpgvmykp_}|?F4%JO{o1*ZpU|1)~0rYtQiW$OS<5>k&m$K$XQ9^Gb(ScG-6a{ObVyUbLV`2>V;2UE^O zg++NdY1Sz~q~qM*6U*JW;H0#a`;;Mi(DF|;>;jehWouoha` zfu@W!yOMCT=3~KGvhj#q3-iyS+!?TKgOWh0{r65)qpa*$2MtPXpzX@T&xjD`B?*Zh zVlcEPsZCd0(5TQEuhvwq%j|3%pH39`AXVKh_c#RkFPUM=2O9BCb{H|X6a~O(sEBaf ziuhr-1`0TWT;3PKVQsdU+uj0KFv z96U_)rA75ZdLp{oX#cVI!h2_|RR+|ou=fvW8YRoW303T0*AQ3*o;BDCeRR^^;~$nCyEB{7~~ZL)DB51!9SgPzyr?Mb@borx0@?V zl&TARjs8rR;1p^d@3XNM3&$FdO{f)%lhFw z9IrI^hm{s$&m?u)7beK-|KWV~%g5M5`ICBfa2)mrdc+BFfx!PVYUs%1ba7#Mal8H= zX~>~`d}ZeHjjs2XWp{Kn77_UPbmCT+Xzdvngab#1|HSBGXoLATIO(-i12ubY(P^eM ze3EDCXJ6}ha%n2M;HCP!`|He$WZyEda0cM;``sNP>^f3Erk@kW1>fK`t0-ng6JW9TSSkl^-p!LywQ1` zTmv?N0C$_O^JdiS4?1ioLf#XB7RvoK!Q}jiHDI1s2M7h^yE5M`JUvfBa;@&O_}y!p zwPE&2<*hnCMiU!A^C;cNQRBJ!ww!kbvCY)nHwL*rOn)o%LRymQ_JD6*? z6tkDoW0YeQtbmNF=AY=fB5)*bDRHTep&_i41>BS~sT&as9fDdz(hxvSC`N11c+biK z*s3c1JST9&G?nP*tQ@0Dk5~4N^S|2YbqH8~MIIR*2g$TcKh5&NAisQZ=b(I>PoN-S zzaNs5P}11cvkTTyAn-EhFSSPOK*?xbb}99a%X8-`Bd~0Y;e1^0iH=ZC*TSic0gQz> zJYo9094Kuke;6_`|Ab&P>_gmsPWn)KCNs;5qq7Yk$GXM6G853GdH0Q*hSbd7u5#}vpi^vv!241i9jOirDR+#LHHs2xU?r5EIU-;1uKx3$!%($ zpS>}tsZY)O#mauUK{*O&1hxED}7;c8CJA0!(%Dl^yugHx7kq2x*p3=n=;vZV`sI~Fc)#NsLzzf!gbU2l= zW`yO#$gJ%(Dqr;4@!4!&OU;jDEh{nN$WcdQ{h(#}tBvq=Bx$+>U9V^pDJ`UjVN&M; zsR(No_yo>EwIaz)q$8sFO}w7+U4rZl_W49V$bO7PjA2xlfHLqafP79(l??ap%9oI_e9+Ty6mQ6 zH|dC()jHD5-Rv!UFvOO7bXDfss`7*qi_qJ6t8~?`_Sefkfef(jwS8$7ncq$i_ny+Z zjIeCif^2~gy{>qASW6I>pHD&I z0y^kx2S$qBNru*_3-rRUC=l_PRJ^~ssF0oZb_$Ci1YsNsh$B?Nah81C!2 zWaT3w7cYgv2mypq^_qoCt?so3@(hUnLUFD&3VwRd$8gcK!3O6Yjv{UEC>DY)O;LA# zQ5It13K~4PfeJHfOBn9tcHRZGaoj6G7$_Mh!;vk*i`wbLC4cVmMAB}%e zJmH)LO0K37u49m;+EQ@AvTI_wGr1D1fcbqA(r~lfStXS0WR`H+#%co%sx`mMM)zb; z_GS?|{4pOR+}MD%2#lk-4@t_+KK!=tYkS%oqG(<9+(o#Nl98RW9;5O*Dt3YBTaIB= z_o}JahCLD}Q)`AF?f0L$wr~m}Oi6|=J$GdtWv>aA%C9F4a;`mEP>V}(xryT_@&)@7 z>d7`^*e+cf3@pH~yzEp4a1qDe_LvSS^k^H!Wo+?I0i{Sr+=;9?DK2y38udp^Q)_zP zC@?nj|614*xuHin1Kf*1LHTFnAfo?I9Hc0a#QZPfAk82S()T~m+}HmAL!`gR=ysj}6gfwTp!iE_m7uw2XH2)yjdk?CmKA`X`ERYI zEj=irAR=$VY%(*U*m7ZJbb~+h=HBCcuToveItcc0_I!Zm#8nwhr_?E`W759jTl0@+ z*JEzk6Zipt)3!Z@+yJ?NyorG5K~(JKUZ}R=W!w**nUl}Zh7~2e>FvWmSK}saf_HRD zGN9gcYOar_vfv5@51>eqH)RPd$Y6eQ?=6;9DDfe$X6eG5ye4aYm3|iRGa*Bw!^czI zt%09~?5`s9y;DES-vVYB;_G14HyAj{TREi1*l4Qkim8RT%bzHf zFV!MeInzB6@m^Qa%1l>D?i4|I-fBJNZlco>@2zcTMNViG>=C@s3rV=)5{t0%J42^U zuGY^|5Bw}U|64x`$yDd>4jnwI-7&3-^63oKZD(8eeisSJ&xXo>0tyF)xb+DLmF~MEO7JIYNZH;a;$E6q@OMK?FamtF5x3_mu<1baXY zZR?DxHbT$Va}^a?2#1QQ&FA}x_@zO}3f)fNA|`5I?rNxN$D}Gx<+{?^UQTZ;=4so( z5FlyI=dky+ynz^2amGHWW$$)ul?R}sBb?aiEs@t-7V;*|^5Gr%;YI+wQH+cZmG9;W zNj~wMnen(+TuSdVP{4Gyd7eU`xL{<7t{-t#1FO3i0LSMWEh*;y!EtY|6ZJEM9q^r+smV+1Oc>a9uSC!e4?m=VDuU2JRO#t1p_32!_{ z3))MNTwEE^12p|)X=%aMF5!d{Ti}UW%8XVvtSZsN0uVh0SB>Z)NnkE1MJp~}&o6~5 zcuNaIpnP5KY)q_X9wZs$L8AX(@*r=fOMY)2#4wm3YsqHKWuoG8tJhAOz86V;{-@kz4a~>fh|hH zDe0*@=OT#0fQMX)(M(MkQG|#;iVOt;)JM#lvhl`}h!Rb(AKNO-qo3mpXJaPV>d>XX z&wm?gB|7FrfeWa1qUeY8i<1r^Mt^odyR~l8j@LV3$4Bw6>TcMsgYW-GqK#4qJCMvK z2iQlRm{W@=!9)*}3|=-qw?L0)0cX#eQf9&C?-9&~ynMAsoT|HgcEOol z8~mnAOAUocX~feFmTc~=V1fJC9t<1 zkE8@xRW(JxR!_I1dC0fZ@?-GzNNj|_UM@LE09(JrljsrkN<=K)Ljg1p(F;o_>ENq~ zsshW`E6js{F7a|61Ub11c@Pv~S7-OCw^fD$ zh-5J_TK|*ZED|s3f<@w`{vy5iU-KuV|A7x-1)>kHE|u2n_Bf5(EsR1)httGk7>mx1k^uO!_N^4<;RY!0NOGTh$7AOb|=m zgk#{x&zm&NGf|gV;l?MHC;oBowW&gn=@B!|CUhUE2}h64Jzv%JSDFwYkAOgTMWZFf*eKK3ub z=JT=E9g|Bit>bJm0cmVcmN^a;T3{AUzYr7G2f%l<&K%wHQ9Sk+U832NT;D2dsrY=Q zt|Q@eks-?kf)nv`GhwlH&t@G79K~a=etq#Q9Dx2(yp!gC$S(w~Q4qpd@w~D9S3yf+ z+ZgwE2wHNxMJo}sM1W_q3WAn}*R{+z3%{u+D{79mEnmApvlv+|>wS0AfP>G=A0=p^ z{$D{0!Zk($1TA*cvSmSw=w|ikA0lXh7Dg?Mc4i|iGLu7BJeA+|O*k<^F@9P;2sWW$ ztT*`G#B zy;kcakfilUq~mpz^j`Ndej?#b3jgTl0Ao=L0yhSF|84Q8*vQFF*vdmb|0H@S=GsR2 z#qXRfzY;ytSBvOT0*D^Ye=yPG8E@QFivt?zr;?APz5m56-wBG9FqBWK)9-<%cW7PM zfB6|WSr^)-$ia)NOZ2$>@@KvOK=j!EM-e?H!HU#Z@2vuz(*iI?mGSR(vizuPv-HuF z_3AiTb^|Ai)haq!+FhZ@XA46gaes3)`!JL%DA?LvT|nfZa`_l#Ef1Q4zW308Jz_W8 zP6D`?t$1_ZT^7k$!tV9k$ZFTe8ai!$m+Cs?A_#kZCkt(i^az~&!LR!l^g;S?p| zabI!`>_w#(V!_>;*eZ^C!+KPl2g@-fymqM+NlgC)8u4&Ix*aM~`-YlMcj}&b5|PR%b z!t`58CB%u=LrHfgSiuAUd5H%f+LdJ{An^)5WoV%kteDe7ea7^b&wz%89iQKmbT<9yw}&aH?gv9 zkofhSHZ?pVAL z9)zc-23jA62A!7pv+k3zkB>xUP!2^aMZI-4>A{=JUcYuh0U5}62v_i#dX>DaG~3B8 zt>3qqf5bfKoa7~m|&p&D8lkThf&*!+rhs=i9&F5WcB)+WRcAdg{^h4ofTja@!VXUhqOglH*OeVu{2HHusEMgD)SjbQv<4JFKmH; zLT_hcab7rkA4E~ZHR3&8J}5q^$nQuYfAUL&?}nf0ijsmgrMg;QUMjbmSTm&g!~lW1 zBuj4?MDvfJ*DO>vyHS&b(c&-)z(dw0J*({ES_k;%XaZ)s%Ub!=;me6@&~{<) zXoai{n;9!+PuMP1kf_(xs1lyg#U3{;H^)V_PF0Z7b-@F~!xKt?j2Y`k(IScGkNB2y$ejVOl#|&EPkx=c& zxGoS8_ZIECM;5|zID5mS1DGQhf&d)IL|PlakB#qLF7)TJiqzk~cKr83|6fC@F3pLMES>%(Oqp$qjsQ%}(b&sE5c^Kf{FhkaTlT}_d!e)>XQJSJr zVG}%h>k#FZJT3S~Fm~zJ3MJt4C%q)|GS6y4?5v!VEL4u~dhdVr`G@s>W)BVs(sTL? zT%dU`!J=*Yo4t>u#q8$Kdg!BX#Skiz(|dP^dNiR^2Tvc}pC!TKa9HFVrivFklX!*& zjmXI?gKQ|Nf)_Doc0y&0Y$1pAATDZw>QfmW3E%?ohZjybC9-=)#?dfe0aVv-7f(O3 z=!dY(P)#~nf{vK;pEy!{72Xt##%zzhSmQdF*Z55L&zMM!CL-H1IN(?{V9Fn$ZX0$; zksJ*RsS4%oJ$x9j=faGhdh|2ZhRz&Vek}ke{jBiqCPtV-_3vlKf%Uk*gG?ZuSlUJU zZ=J7yKXHpp*9GsB3G{N5>*NW`S8?VecIUopZ#rwf=C_!_XS zfGThwp~z&!#;aC;V#bL;=xJuMYdU*ql!pENGcaFjaUSD^CbLq$U7k@3sl;HKZCXAZstr1JabT_Vp!~L!(KG)_K7#R`$htV5 z)J=e(C609gRu;si=`0K%g)}(o|BzQ0~0Fd**(23N-I{$a+s_oS;b17 zEYs^jN3b?HtLItG^3+Wvl&-3i<=cR?^pBBRtL0>&vgV+D{$G9m{`>KPnb9}8r9=X_ zZ3t0$$ff0u52wx6v_V%t1Ifc;egNA)oFvD*y3cwTmW~Tz{7RiH=D^9~^*=jV5R_|1 zcb^Kxl-Q2ORIXUPa;Q^LAHcfb3$ZU&W>0N_p=`xfScqTlznm;SqJCo(=okC>{c`v> zD;XaKZWz;*p8yZy*M9NxW#jR_w1x>v%=d!h&9Db=z+PJSnGz|ZW2&~mLL%^HIZxvA ztAMoos$-t3xyau!Tou)`;YohD9f0HA!bF}ZvEY16H2cU;nbH21?ZAF*K$kw}HD@i% zyo4TP?Sno$vhiqUzC&rF1RJ+bd9XqJd1RIVtJGeF-Xd6-jbMAvxjI@nD z(9KfE42-}5GbuO;SVQeku!7K}D&7llg?W-KWRuR^Gk(DQtxnjtZ$nZ6IwO`(&B7I;U5VX7^ zBO}L|EnZ8EcNpkwbdWElCUEO)rzbnlHX5P+fD#^cn*yoPin!A5;eM7q{CLXWX=+Dx zH1=)|QWiv*k#85z-s`jD0UTInuM~*cACf$WKg%pb_qjql@=HkFofTsMh@xT3`!x6t zRX8ejrIU4+jvaJzvD2hH|KYU592;pkn@6l)tEDl~b#rXZCDqkK4+^WN%FsDZ9AZ*b zPvkYJjXJV!sbPMC;8Wr)Z%FOonWjg8pz2}e#+yoE7%-0M+J7$~$KvK%_iH@nL z*ijdEyHGVPDZEclo4+)PoYihhlcgHfh%&K)K<6Ede@3xH< zGxE0)!3&meyQG+j#I`4T@@h#Px^M$CC!63B&2ljBOup^(>QE0WxK}mWoK_CDORLE% zY>4g!k6>`@CP)=qfdz~pw_bQ0aKDw;c4|7u`Q6{c8$5-FWbVqmTmPkPjrK+d@(yFP*wF4x5wwTlP#yy%@kG1I-sK={ z55z@_fap=d_gh_}hd*O<)2b0Y$WYp%&~N4Ct1`Z&MAfec%GZAi&!P>!3XJh%IcHpr zy2A4hBV>>R&v}^`$D=c1c5d)TZbjG*HTs7IHm7|de@X%fo%-9@=s#`aZn%1*DvE!R-*Up)%efK9H#=S~kU z|E@9pB>X~}7P1sUWeTUwZ~$Ra=F`^^wUg_ zEZaA1%l=`H>LcTy;`IXf2XwZT-}OB&FJHqqSTb;>?Ok(qVBx-9-5@zb&F>`fQ_*#` za%fVyeYq|sd~6DAod(eZ`|42Z%!f@fRZY|cn;G%GZ%e-OqV2yAeMaUzTbvO$SL$(N zRz~y~d&iBM?HtVycgxY@DH=T4_x7c{Ny&A5$j*O+!N@xe+;9K}^HN9j0t%fR{?_PY zHw*+1_ku2Y^xMn~XGRaX3yM_VR^BArOf&hDq$TzpB4@En&+2B(%zh%p3K4rLQ=4A_ zatqUbX@2|go1_t6kk(uf82#|H8J*D)V;8#~b)TFIli>9khqwV6_uqSnA(k*iR@&P!sHNPG<2pn<$pEGi2q% z%SEDw-o7Nqpzx~E8*d?t!8Ij+Gu4mm_*rXat){(nZ z6QODYAj(uxd+n>=6eU?;PkdqNO6BjF8znuzVR~j!QB3v2FQ;VxIVM=Rj>-I$1>ij| z3m2R<`1@N9`>)cx9ynk@f>oMQSo>IEBENw`amR&<&Sebl1WgzRdk&8RE8(%YFa%N~ zf+OFCA@rYs2(iEHGmWQd@6ltY>~I+3G= zmheNCW)GX6O~Q@o2HVdp1Fc@(2H@G;91J;r38b8IeiQbJUJiRLZsNuNE;ArVIVts? zSNkmE1OW1-8yuXgC1`Q$+N1=6mhIyGzY(;!@!b9}K}%R()B@<8BP{$B>=lOauRNCl zIh1vke0lDeP^`bkDZ@DsE(8k+Lnpq7R@9}^_rZOcW+{c{$vz(fiIfb5Qv5MxEg&&FO z`eVludTnrHMS$!pqc!i~6+_3cy!2j0{fQDT__zfOJFuOC37}0nX|?j%V=3`hK}+88 zc;DY4XzBHBUxA<{83X-njXTIXhRG8P1P(y8>Arbb0; z3m`htU?rSx&lZKa4iK|qhuXU#z}&{&l_YOMN(yFB!# zj?WRPJH*JJf-WSSB>^J?9Ifr|o_hijb(0_m@_1 zvi28ViT4&Q@dC8lib>s+&g1Gi6n{GC8#0E-S_o#r1bcJtoZWasMPu#Vmase+v*#gP zgtfAeNo1gv*lRmh#!tScI~ZnXOJIzKhbj0+EoiAQQ$~l*9G|8*E#y3g23VNwsys8G zF*V2{7aiOdW39t(Z;UE%yGQ_{{-bW%^_!Odloz>Y3ku=Dadp@Wrofn+xf9(Z@> zwh_o@?O?ZKpY(S2h9N{zH;a*~n04NKv2ef5f}hUbHLB%}YM{M3^x3~()1JpIgBj<3 zx1Yt0_Iw`rSx&8rpT!IKSst&VpQW0pm}>6TvpDDSn`_#K_Kr)5phZ|ex_pd+)HxVB z<-T#q_$H9Vi*XBb0~5#-f3gR+Rm_Cy?>1HS8QnGk?-E{nBKJif(ToCjv`tS@XER^B z5`_?#RhHBQep#LCx(Z zJO1H;&0HLSrB~ld&62$yg+LN`A6rcbe&LwI(4F?u4FT-S7G)2@d!y{|-wkPp$hX(K zXZ0#NQs+bH)t+htbKBOaA9?S+_`v-2*!txlT>R`9ur?R?E>&!0f+O>-of)%`)ASgP zVNDd`VSG`DS-GWR@3CYpgcX67=JTkQZT5`sH@U06%p3j6*#)OyfE`XuoRuDY>LvFj z#D0jPoc+<*FVeC$*#dV~9C?6DGS=bnsFu8T)~z0kJzq>e4M2Z^q)szl_yF*emg-Erari~KhP*ztYOJxg+XTI z8HS7Ogg*aize1_Ct1+#YF#k!^drw0{{K3DHDu5EB^(lx^3KqDJVu)=QCZg=vrTe~W zG!xM-AF{?^DC1GQHW*?kPi)jxf7tG#4;0;c3=3prwt^SrKDLt!7p4bT0+siWY^ZMX zmYS@Jkq4LA9)8$S%#z?hxOu>Mve5{AOHlQbuZKfls>>rzo&7P@STtjrsjs{=;KH7% zO}tF93FdPLzWAD9(gD;os3--RiQ&J-YzdilG(XwZnC=;%+ z0kLI2R-;yLPH?X;sL9KTYgYtoIiUsCbz>C0@2a}D;p%kC)hNsIAK4J9w17ru?DVxS zx7tuzmX`3+pt-%wgU|5Df-tILPk)l=o>d-;6N$h+Nymdw!ddqCx6tlS7mBq)MnIuw z0nZC0paJ?{izq01x_nSv8who8!5ny;J_DTC&u$S>$s8 zmlC&Bz910SORp#2bKbkz+Y5>aKu*Z7r!k4VVHXPx%;|`nE3pf^GWRbCN&Vt);&Ef{ z@x0*_wxZ{%33UHCy%*r8UJPm!kdKs%ypNF2T!zCfU9$h(MgPABPMepf)bYH4i8hmP zj5o#O5RDNy@qIOX;Y~qs5lTI-H{Lh<|8d`gx4r&<^|>cxcl$yOYR{#498E5b=Wv{XcRG+ZE$2Ojfk7oiN<`-!B*k)_+(Zs7PxW@3e@EQk>XBTuWPC zY@-(jlC};`9JRnq0*KMXRtUUQ)Ib^#9W9(s0hvFlv3DHheTYfDThX+CC+%GArWzO}zu13+Z`Bmy%S0rIk)-C#M|`Nc0t_KH>|LH@C@J&3wsfowAcIN z1SuV+n6V7C_~0QBV4qFN474ATfcYD`M8HV(26Nd$6y07`C|s$Z<%TKf4nlnwhIw0- zCvcvqEbGTtL10ux2sy3(p=%@BVd%sL?CR4TJo38CxS0*bO8_Uk@@`j z3?mcan9DAWJZu!ObL$`})u0O_T(O@e!lW5&@BB}Gmj2hj&(GrdFF(tu=hCbk^p2Ml zKUuwpg!}TuBw)hzFX-hh{jT8>SSeRueh|O*j=^Q)<_(HBj?2#7SMp=#!S8PZI{KAz zI{D=lD2{N|T4);}lv7x@sY z!W^?Tz=bnHQ-4ZQ_2gKnG;D9qH~IYit7-F-R;RGc7>?bKkUJ9V3smTfKBazLL?+b7 zuxc169Lx~=^MR1$=!oJ(2K0p;OwTsX+O!;ARDPch3wN9;-l`HD$br~naF>{yn*sgO z`kzFjo~1PbE8kZ6_Fvm7U_BTa4)7$G;2xI<9C2j(eY*ZxcCkx2mQlBZ{oGdksQM{I z7d1JYAfPEv^f2n&ePaN?F+CaHh=0Fgp`3@MSroXgZOMnZZ0@=auDycJjle z%ebGaH{G$^_F0y*V*B7Rr|n{M{<&9der?m>0=dpsu=cb4Ww5i2>ewQh_wdesK=zSG z^@#iWhm*AejP~n9M&92batrnV#J$N{u44FvNoHdMQQQETKbc<`ZySf7ivd2kYwtzk zJ}?`&-0}jffh>BTg8U8%Z2*Bu-)uH#7IAq2L2YH-@B@wbT(w4k;7Ed1a9-R+?@GU{ zg}4ZvucYeQ%N|;bvRUf>B^ELP17tyE;!HsEbBSvGOi#jwNQsK)VUq;T>S>0ag8}0p79UVSBI#Txp@8KDw2yrA>6VQ~M2!gPDu8*PWM_C!VJqt!y zFrLN+l}vyF1}EcXNCY+EJSl1N-dmf&K;7$3*8~~2?}IpGTnqX_nE80!Eh-^X_NVO& z)V`mA>dl7Z=;~mthn#&zDx?F_2eS3CF|IE2)$0@R7arwN9rmDKyx!iydWoIveIgcJsdSF-|A&!1X{lxF5O}_JuMuUHQP#A~Cx} zk8L3%R2n$0xZc(;*adfXcF>URYSz$mESw-bU$&cRWgB-w)#01OKT23AA}xCKZ)55a z+~jXhTH(t!7e3cMV!kz%+OGb~j8TPP;s9*Tef`}(C|fsPuHZG-bACybMl9azLS9-t zhhahOEkWzR4BMhL=YjFDrpNXRSi8~_`sJT>+}BRdV(?0gW&RFERnUB}-S!SJdi%z2 z-h~fCpn=HK;_z_Sa_~Oi1$d&Wg^;DkILs*^={ax%emuw%&O|%vR~&AFZ_0zl3IpJL z1V0ZZl?1=4KVd2aZk~9&b|R*klGy7zwXB`+$dnvvGQnP>yDMMq7iN_qgu(QCwg9)# zrxRyvirTLUC|=urdu`> ztpW4A&TL!Ukn-HINkq}Y+PvUBqJd;hOO8VPqog&$a=Qy51k57C9DK)4V8CBzH97Ic1?9QQjN3etWv%ap|A$#g5&)to%OEM^&)CwEE4yzpaa`yb&6;W#a=< z+3T1Jn|id3u5lzxux&?DQWUwY#nspLL(y_F)8|Xpgt>m?0=UiAF8kA}8xH)nVZk=+ z#nC+26HTnB7H?MD{jo%D2%tBX8X#=gtP`$@)kQDDqjQbvmh$UbbTEjy^VD8HAr%%Y zq9)KrQofl?DU4mfII$)cW_E6^A$@(UH_sxiarE)h*I*U9aR+hDHv0AlXzAvCElc)>qK8vss#eS;y=UkvxD=NDH#R#xtc60e0WHpR>l>b^}@ zozt6_)Q~vtaf@xgG@?FLYU6#FNGt3}!{V%`pK|_nOCmQu=07k!_AfI%_J1JL!#a!* zE1VNiTzQI9dx(qF&NjHZxM#QHBhE|PqBr!*BP@=Q*o0R3!|qZi6jA#X z9B7(rw{2L}7^s2cq@g|ewG^6$3?6Kn37a3GAfz>{>Tj#Qqk@L?H$kNNU0j9Fshojw zZA0}Rn>zj^TUXcrkv><>JvVe|?N{po5Wqw;zRpPgnKav-Y}B!Mpl7_3ZWDJbF-z8H zDKeApQt6yA(UQz0_8HaP!K7aYJ5xh>mWxeCu?D#H?&Nn+)4 z>@Ymo5(L@*3MLI;2Qde~)_^?@W9-wTI1Wwpq9S z7WQ`MVX}XKP%@&U%pf^kI^hzm;jS@Jx2?8lf6U^}un>jErgGx&;iTw+?q|oy961PK zgx6&m^)v<&0z4F6Sw4d)+&uCYz=kC*_~>tO9#WnNhj>0aOTNFfxi6F_^pQxg@fc;T|y z_L2>6ruKdzth~-dfxStFH|qp1Qgo?NoeUEJY-#uS&ZV8N%eAGYQhkn<%NEWTBB#TN zT1VoISufhXTQES$b?G(-5-)O(7Zd?Jc@Nl-12?43TP%ziribZEfI?eKB7|Zmt1HB& z@@!W6JuS=_wq&V4PYSlWa_|E zu(xQlD#^_(k5HVmHZ7aVx=4ZKAtlYfW6N%@RVj`L7-pKEn9-j7s0L&B93=>&&m3Z7L+t+>x%-5=(ru4l*;-0 zZa1T63P0-KML+S%KMmQWZZpHKZ5`aPCV*jia?4kD&funQ894}2^ey)C^Z30c5z72< zCHw6)c!Wkwla3I&-3kpLr9snoS?QPA?xI_Uc*}Vd2m&KlSmCv2 zK5wL2PvB?Yv3z+TbW4eN+g?p+3HYI%hhSTE-MR9@irVh>zrpX8iQ8aEb5_ic4XkGb7Cp9pHq(I6hsw}l7Omj>( zd^0Y@ZR<~!n@qGCr@p@R^Fin{5>@`-)G-XyZUbG*w8?I)jUg%|uNkfFQSi}yF^5_7 zLz8uit!I8tpw8ADGQ=qydn_&9 zLDhnCT7~T|I(5c&Fp)7H9S^u+d!mM4;EXWifn9Y9pntah+K&#eXsF)?!eS!bY|Y9l zfkUEEzuzef$)s82)uMLqm}_Ko&R@31ZgXlCi5&er{5qR04>*hQdl@hk27ehJ0@A;k z2TzNRrR%FR=f9#|Hz))qprk32%&MvVdbs|CK5HOeN0LlU=Tl2=!jqhw3OxF62}~`* z%PM)57>sbvuWE*}!ol{I3sg`ChsVz@vlyBGKZHPbuWAUSY{PRXzyPgm0sWS4Y0R%7 zkb>j!o~s@LX;_^QNF3KV3x!{C2n1X-v|Pe^6f+an%MNT6uGy0LNCSLdb06z}eQ1)> zyI^!N6I&(lDClmofiXGq$3VJrQS;8$`C?sb5f!a~laDwH@r>PqA(yZ^6+D|+HP1+M zqsnfcPP3l($jYF^&ju78i@rWRO(mD%hebMH>^$GTC%&CqGwR`XV0fT8iTrsE^ve@s z9+knfE-8Qp39J%MD?3e|r3K04rwEm2&A|5OHSa)d_1E1JaE_ayr1! zvX3luov1!%{&aM!Ti?V)IFM{$piZsCtI11wcE>nU4kT zkDP_1tb|_#{!RiqtjY|7mw7#EbOSW6B$<7-6D!PR3`P#FjKVulInhS#jd|eL9_zSl zV33ibrPb5VhO3b?Klv{WaI~3PJB0W(TY@pKV%B-Jt9{Ms_~><*apX^G2S(;^gy4)P zdlhv@f9QDK0PQOT_#E4?i*zOLz*WsVyY|0w(nMX8frUdBw?r4?i$gyoLuda2Bf%__ zV)9%kJ01eJn%>g_ z+4u31?wDTqwbU$20EK>>mgeCeP=@7^?bz*)5!MLlZK~{H&N6-u6Gks7zAx*%YO>W( z_NsyMtfE1o2xw>Z$(VhSosnmp07;4vz!E4K#Mb!TjH&L=8GplVbLt>`-ndR(l2<4b z_8Qr767SZkTUs;B@nq~dQ*}@XI$EYn`qCQ?&gkun`G*0k)0csDnqeSq$Dj+}Qup(D zvL*|{_F+rY1=HZ(I2?|+^!CUf76K`_67MdmZeP_9$evx5XICo((hVm5MJo+~w9}r0 z(8DT*Kpw4T2t+B7q^Vo@PSIA>G?AH}kq!^nkGGWf=efkYCxeBc<2Nqv&3lf`Z=AuWT9!oAZ3pE_o#*h$iJL}aJjq_YkoXb1v@8WjWXuZ4iC=i? zG(&4E&-~V*uK`7WmbV#~qwaH!6D;FG4SD<$@?P#5gYG>TI1ssCHLK+lZQUwj2#o=cm zFzBSv#pja#7_ox4jIvnx141Bl?s5pEWpzU!H|kz2KZQR$1X5Pa@dLbq#4RhsHh4#` zGhM!bRe}nTmD>((r{ZOZm{x;07xqNl(aBiY-OrZW8a9NbAla=$wIpY#@MQYfURd&k zyuJKtgn7GuWLg@XmQ{ zmA8SJgbbgdNV=w?4OkF_LyC;yrEZTD97aiRM`tM8Mani%!>O+r=@Gxq8X!HEeEX6YNRN~Gap3Q?dQ$Is&3h}9Czh6nR7=+4kKRk={0 z7te{+V=iMjGyE2wUm*dP=TEhsJnJBe=HdWGGuR7Sy?f(E5J9eY+Bj-sq4tZ*qL&8#@GaN@3^8Q5_I{so&?Mrf9({rSP4K#o*wMn&nDRU`<9Yz z`~d%+f!&&pc#&r|1X>s2uSbiDac4U^eSn>+1X)aL-)R~^zyvp++JTCp_rAQsA=>DM z6DDXm#t3FP2UW=5HT*mXFg}iv>2_7gK9K!(h5WWl>%(^s-?qHar2it}@&&CURF$2+ zJ+V%Ahh50XpC+U`GRWR$p%?uJx`6sr8o?sdXfo!m=-7ic$C45ITf40#d7Y?eWe{1x zJjPNmcVSKfWXR_E2Q}r|U=p4D&kyPfJvH{fcK`MPUwrDU06!E@dhC4^oy~AZ5v21u4s0CJPiPf0UGEUJRrxD6i$4 zc1BNT7)lyx> zt7DbVj~m!G#Mbf2XL$8tjcCI%B9phIlFqj*Evy*nG5ZebVOU)jM+K6a3ZARp767sJ zHXkzD6D>GVh7gU33v4ks1~VnFy*@@TB(@v34RbJ4X{cK1mLuADTH*dH2;4*xvvkB} z$LzR4CANBGYG;W`%zONFKW*-wG1#B?*e9*{j+!MC>n`4?+g11}Ugyh}bxwgTVq~WJ zfN;l0mmt)DJi;Kih`ENamq-I{Tql-Apx0z+Rjl$V6OeH*lVY>Q@dQYvEGA7R%RyfB zwHh9TOw5MS18rxrIrut{taHd^GB?WQrs>|j zgghaq2@DWuI*IOA50#?PS7y_bdrPD2hlh`D`7$1x>&Rv2VM}^+#<;PZp0Iiuc|NG3 ztnqT;dgT1(OuhCtf?6#^-XTL3zz?B&GiYKK7n_Q!`n-2QojmMyKV z`{g&o?XYDecDJh=|My)t98Wm^+&3?t5w%Tqdd64&uu372d;dcSgu9XuNTa8pYF;^- zuyQMlYT3#X)?-__05(hKJ>w034S|4_7WN}-3HJQ0`Qz%hI(3xVm~-^Yhge6=H$idh zQPUu=6FYV+oaaQ=dJ*O~)`;GMcOUDtFXRu>#~vIqAEF=xi!&E`W5G5?V=l4p^@ZDL zXU5iNF`3AvU*>Hj)t{anuH#?Zm~wyDS+1Dr&mF@UO`RVo2z{t|U?j`^l0va53xSIr z7ALy1_Nc?j*a1i7(zA}=Wo3y|j7SJ8wX)b>pjt0mS(cN@&8ur=aRXKsw?EX%5*JUL z7S~AqDC-`x?Pa`Z&5ZJW!P!i80eSqg4X3q4OVp7i%eRbcj=t>Y z98~MpF!k|f#&AG$X$)bzGq)yqLh}o?6F)L8*1OWbeiaM}6`K)kpzVH-#vMDz(KuzZ zZo)YMXP@=rnXD*YRLjG;P+~|VT%KxiG4x}G9O$e?-#~ZO4K6f$&Jpp-;hGgQJyh$% zGHE@fgxERi^69DSKg2>6_Ih|?f(*V6B;BAK=YY}3hC-dQoOPnazA|@?oMR(mAXB^|J9zxa|lylz7@t|pHkL{;$h1J({@vk#d$6r7qPzwT9tFYY2CfMPdl_5q1* zgX(Kt&=eEbh&&r?<#!!Zn8@+~yD0C?NkH43S6x88mTueO0q|#&nVIw@)>6fn^!K4R zA871Rt(Py|pHy{YK>Z5JwzX%3tI713{eNeAwEteFhp#9Zg^E#3&0B=atPiN(?}3$W z02OWZ2I!rw@6YG{O9-<<2n_G?f%<&cNhQ%<`q~qfzq(A1-K)d&nB&i}arbOb?=pU)fZEp%IUe}(Q5d~0wxu)giicY@<>Oqf!fvb!AQP=}JD2Fc{;$iHY_ z&Rvd6<&&54!i{1hxrhie0J(kW+u&q0-zkY^#S6Yh35nyI3>)ke+p3RJ9onq5e`Ntc z>>XT_BKrJJ70L@=7wT7Cp10ZNbp8NV^Na2g%cEjDWBZHH7DS{LK8T@sYpW_*i=e<74m$7nJVdrT!hAaEL|m89chVYB(aonnMuqL$(BDWbJPU zE?6()McEEhhZJUM-JsCLujA^$L~YhBV#iEWP`b^R@tkQ(Q`>-i6gGfqj8rw-b9 zN#!X7!4Nxcil3kWi@l4l>YKD;qi5ugX9kZFCT5qYQOg@ZGc|xyX}{8lPd1PSj^0HF zc^G^Zg}dS5jlsaPg%jR+!h2l;TpQNf1v)ACTu*guib0w+5Ss0=6(_+v+PY0~oZ;_g ztgB<5@I{*oBLrtSdVXhNiL$HoyIRlq%y6n|X_|5}e7DsRsX+Jf?FSc9gJe#^UZ)>m z>GS7D_U?}uyNbQ-Inoi7Im-2*F4}zE*n0@j;adkd7C%DgioZ)#bi6vGi3Pj|!P~o9 zwhNe?t+uls@jhCz9H<%y)ZuWd#B_@Y*Y^*F52X9XuY=;{gQ>0)eJT)#`yn6Py_An& zkHzfaeN5Z-XJHp1_IG=kjxBxh9_j)hS>hV_gm7AI9fOUfOn$-xSWp-H9yD5j!*IL6 z3YdPJ0;2*nKH1x_@H!Kwb^pwpX_BgVp!;Xt&G3+4)D>$IGh;Gr@#_zmSzXCn`1DQ2rFG%uW5IZnE``F-F9uc!~Hz3Iuw|27^y!R)rUlq-8u7Nt@M) zAks!5gLzs&66epXis))QNEk}3A&tLrcpPmqe8<4}?`dC*IJQUVLidM`i4$12rGx8l zIaS)?7G*ly2^n7Tcs7DNQpy~myZ2wzlpqOh$5?pHqLxI4JmP75+zvh4FA=h<#m2GA zS^9t`U=Vl-2C++1D`t9taU%$}RQu91^JVSD8KFSaBJ`wS0&zDk+vKs8e|5~2GZ6eS z0~FYtojMeb#7PHhDGH^h4Z?wNl4okM$xzmre~;wdLE`6C9;LcxofAnnjOD@-qdVOb zfW3(j(0Zr6-FxI3e*r|kRP;mUI=XV8E9h0&K7Jbr{pcX;TJ)*}FDBxe76c&r&5{g%UM=D6QRrJ z_q)6BkaL#KD4M7l63*H;`hX8x@&QEHh^#@k=Kzkcf3+ero7#$NPs zl9Amu$@Srx1dWv5SO6Ln;H*jd!6#b6%*W(+nw`rr(P%-H!&7}c2>{8V@yH%FIn&rc zd>{D~y})J}EC4d&f<*axQIGrb>B?+Ii`wpK52BHX#n}DIa{wboK?hdd=zR;8OK(;` z8(+gDc9mj-qL1^8juemfNU&db*@<6OVC&Q0rW6v76wjaLa|{?&n3<7|#=j8+5rEQJ zxKWh^t7O$a6TENwAKwgjJt2x+^Twcj zduOAgOXM02`|6(>Is8hmtc;CY5Ha($3vHfYq1d@7t$*8}n@w7O-Z1}aQ2jBIXf`3A z#|^O?!pvlnT4Z2-#I6mNWZ5VLApxpZqEu+q%<0^6{9K_CUaYI-o+@7 z1LPj3?WGdTCPB2rf`}+Ys6Up#uFyT)aFP2q9WjgMD6S{Yd*Xya7~``{r0fYu@Cn)Z z(x<#9NQ7lwK(=uV{8)Olho7HV(NRw1d6|1@P9(`vnXcjv8j43&gzwx+q<(Jo+J&!C zPX0fTAqh)DRFtI% z(K-T=gs4=}$`&KCgUS+-kU+%{BmpFt011HzAt7wv9qb}AN8fk)+WG$T@DC4pc%FN? zuHSW@KX?yp&R3Q%)aE6#X1kr|9ICZ^lM51 zw(oM!KV$hOUi-l`@gSw9;e)JFJF$J%#&5-<^IjQLw(xrwp_7I9%$Ok!{pv`6yinvN zn~Lh6P6MtoUUVS8eg6&#fo7QfUefg4tkjMDDT~p>xss0%ga3HAVK0KGd)?j^PQE{K zT(tXIv}at=j9F!iz2$Ht5QFP6xV#HXlVJ~ORaqhf4ZTif;aQJ zF?+IXSrMK8$EM_@?gQE&T(PINK&aG!)2YAqbQ(kzdIWDMDdgJ4iVsZ-6g~eUe~7?3LUcOFtYC-K8s`{Q+(pq z4Itq>eC`$MKKs4}Ma70#y#=vdDgqi{x?m%!M7gFh5IE^o7E3UUwwN-ww3t9^NC0=Z zftPP7DF!EXF{lrL5+P`?0K?`A>dZfNtAQI(^knlcW)WundLfk-a=+W#lPgPO-o+d< zHC5>0i08lZX!nL7M|1U&2~Y^knd{edi>}Ppd`ddF-F_A6)%Ak)JJH1U8}#`+ow};D za@&}zc>CP>C;Py2fDEv1bbex=Q1p}@7d&Bn25$G%5VGEBuqYFm{B%!q%2AMHS?n4i zx94YC(|48i7*<_4?vg4DH0e&EW80&+{30?E7v4qJ85l0}C7C-QW9dcMDDXQ~fq`_d zWkbiZKL%^G&=bteP31k4fYqX{-@plKEDgqeNP*i+{9$mETWta^V$Dg6wQdIVdMSq4 zf?^`z!9-=(M+N|Wt(5V)K>?!dt6t4;Zto4m{ZFRDAp8!yMz??%uQpA~_NUh%bL^l9 zZS2ePA@BpL|7vM23EA`fHc9&aDY#77?4m6k{!Z18{ZwMeeICq*$j@x-UU_0F4L-?eVRB7;iR?yq^Eq*CF@DZ_ znv4uy19v)+oA^Agbh26vK+?%b+*H>i_^W+ zHRB`zr!(>48b^FamYF~q;yQu7*-dES_Vl#RJfhF|NIM~q%t=kO1Tk)-KqG#@`6-9c z#mdTu!>`Mqjg8}!^{qlL+0YNG&zPI<#1vGJ+v6^i4iYYVp&mcHUKM{I7K>;hHw#m% zY@clv?onfu<28%^RJ zbZesdp+v4hTI0$Wpg2L8R=3XQ*fv#<%vvv_#_>PV@^3URPQaJ__3t3{ALQ#5wRXYj zv{(8Aph6t7BlMpXX2|Bt%;eit3h^a}QzV_TGst_?1FvV-?aYlR!3w_B9Chi4zMo%?Ya?LD$-cd85vmhbAiaPS~Zw6S(4m60d$((Cj_ed7JXQp~HKl zPTu^aDYgCPs)st_vNW-JI@3}1lQ+2=kQrpnSm$F%3e ztfpHjPT~jsSJZJ14bBB<_OTsgR^N zkpn(zQhxv(T}G}4g$7gF_EQU9f}u}5+Mg!;r-W^T%Vx-)J97P~v_gN@p|obmLwYrI zwfPzHWO>U;7RNk#{RVS%Q@wKmUcSM+euzgG`ta_jOxAayydiM6(EOYelgxbL^@i{H zLzmCko;l_-a4Yk@Bsg26ihyQFsxj-;P7BEgzcBd97c+g(Stf2lPbUW` z!igvb>Zv>{-)G?~bqWPyj_a?=Dt$(;i`nX+0KgZLw)OUc6!4aY7BK#&HMCgcqewMQ z#HH-$|Jcy7?SEis8GXHis*tC=-Wo%hu3b5j>NX*KrKKDGSB93Z|AV20;>Fs%=ZCHM zl#-dF2HBS~YKQXTt4smnL^%6@HMBH%OWTliBypm4<;2=A7T-KW{6W|Y$oaIkf|6Gu zp48yv94L+Y)zAWbv)))a&frUE|L7hlpm+?fDFxQR+}4m6jadV(N#o+rJ&2?2AUUy@ zKju~!Uj)LS&NULi^*&-={&@dx46BxoDD#anuVBVMAJ^Ewtrg7O{DR_e_gXM7n*dVyiNld1DY(#n^cCD8_iw8g*; zpyelwd131i<4gDBy$s(0Sj(xojSer8IcjgZ3gepAowITx@z0KeA$-6@0=}}h%6FW7 z-zhC~ZP3kU6z@=DDMS3lNwJo}^?g zsaYdnNV$}HqTvjT>5Dh7fYv00vEwEO9Hj9q)sqBz?yba;O9z)-jnY}0yI?3{j$+l-K zEH^|0Q}a02Bi}i0L4R@fi#JcB{}02VBEZWkjhq45;vXyj?x{ka z2b<@&biX)0=&c7=-h|-i*2(gFGO_hM;9rt8I^+V&K~-U&hO-jm85$8g{a}t!XT+jt zri099nf1FuZ8aqmcUr^MCrkoPTW0%h-{eqg_`?V+u3dOKbj3ltZ#vYsjo*(iF36KWXIhZoZYhNGjzZiV81$Vd&Yp0ENdEc zErBhvg|I;B_GduAp#+sWn{k$s5$F@H`RTOPsgz^ceh&sXHn~_q_z{ws%l18le^sUJ zf4pmK!LAD60y>(a3)i<*a4eoNj3unRg#Ob)!=wIT-nxOYY0(B#r(E8CaI+)8Cf12a93cl|UmRWz$zOZe2te2REv5qHZ8 zrvy~|7*`JqLMsweBAwQ4+Po_vmD%nV_1NqlZ~DnA)s-%WE@8?=B2=w&+o2Kp53zLN zPN*@Zr<=p#mlG}%*mez{ea%+Y8%9(}tbwF>@n!MC>c{jqm(|Vhbe{qw!tMd9u6_R% z6G%mU(5ed&R4PYk{iSGxx3sWat&9rwl$e!aO4rS43ABpkuZG>I*H7GgN?pea9XcXTL2W2}+lbGU{s7WHmc4zO&TUS~&J3w+J9WB0 z0%(_k_^CGkM|Mwt^doevd*G~;o4cf2=Pvck@?N7?#|H$U+bIqvZ3>^ zFeXIz$EuoJWJty)!OVVzs6Ko2ONeRJ;~)-J&{XR;wHLi8>)OXcNK2*H7N&rGqXP6z z7AIbPEPt!13{d_{HbmAcT7|t@+iEe8Rp$m`4`kCQexct;e7X;n6}a9@)RMDor4Oj% zd9Ppv8SNAw^s#nS5{_VmZ8?}%H6`K*VU7OE6>UkIzqep=T*FHGU%)+NODJtp}&>R3OO#Jfva4GrVl*oN8&mLrWIz_W<(wEhP)Bd2A z*)Q=Ohp4{F$)3Xgr8pCq`fRxzxESi5bM0$6yJ#o(2@MK&qXQN#98$=Q+67 zz;1ce+VL6w-d{}HoZbCdqs#H{R}+VwA_og@9-E_WqP^XYmdXF4isXkY5FLIi{7!Ub|m-!)FFA2g^Hb0ZKf zsOGb`Y%%(Q%;nO&&O-HiW-+q#rQf#6B6i7Lqtwfkz>s4fB5`OxXHg+g+1C%Zvmy}$ z$0PJWeYEQ>GFvkg5>$YwDet(8uagYMch}efUJfg#OyB-WkVy>X1X9k9f0%c~vMe>4sa*HjK=dS z<8d>YlSSwmnAMtiZk2be!Na>uKvlA9K+E*zz34N(^64mdnfC1AH=Nm>14oNvd&-T; z9MD$&@epv2H&J|RoTgZ4Ldi#f>+{0$v$H3~55JpXa9ITsM$#8^%9llpXH$gaJ=@V| zujJppHW1~W@QC~p0%;UaHmonh2jB8oixcs0H%1Z(&oBqbUfoHzxZZ&P@|P?`0K!z- zMSVN)#lL)AG2U|V&8>C7SquJ3oLHCm-<>nU+y}(1n^qu&s~;>@`ph5SA@K#>dP^B+ zZ0CkH+p}%LG!Twe(bAmjeTtVHor@@m9{*jkzPQe2{303hd>b8Ag zgaBs6Q=PXkuYuj>?k-XC6uTZmqHn6=yujB!vX(OAXvKr~wJ$!Ae!r;ca7&p_hP$v4 z=c$t`KP#eHO5O|iH{1h5ZTP4r{_)=pR$P;K-tCF6#e)RQwIFL-Qe1;in+9AIaIbuI zK6W~LrE4<;Hn#_m>YL4x{qEHGp3EDFBz_^=k<+wU%s|wk3N3U70_P-`(1xU$b8ji` z(Zb;Xtg{fmNW^Mlwb4nzkC;++RdsG4=tqjbnQxAgU?qF(lUmB4(kJfjp+V^{Io`-u zp9Z$c1u}MWB(E@k8YGXYRoFh>6&~6;#Vfqa$`(EP%0?>9@P{OJa}(M^+8zSveDriW zpwhE6Uo93lJ&L;2w6*8BS&-`DXZmJM%z7RjkC||Ud}jb@5;Rp$ICEam%=qb(hRuF0 ziGen{oq>;sz5-sF#Ac3pCrdMYizIW4;GOsFc4?S8eSt-lf!^DAPtOdfq(?-*T{Ldi zvh3!U+R>GoO$$NAivbyXzXmpQbf~X6H8cfla0<%$4v7GCl4>ZlsBiL~?WDb7hIhj@biQmN5>xc0(;WL1EG&5pJttFoe0<>D2`f z@b9C;uHw`DAQ7_1?BuLXY2yzfAuRjRUI#n9dftGHwEw{hbrcB2HU0^qI4u$D=E{?) zMe!@4#oL>Dyl|=4l_Bdv;ERyixZz>Sr#fv$uzlyNI*d^kay^xIe=aI;K1=kNoP{8B zp*hN&UfwonjoLRA>Sj4zxwU=>mgQn?`s%s9BI;x2wL4n@apCbpf12SVxe?UfqVX!! za4-3)XnVL)Jk5X_Mh`I!@GE2N3llKc&=;;~rcUQ3&yA8XqEuu(-%pS(awo0_GaSh@ zxcyu)H|y9XefUh5sL`A>2#^u4SS$~V+PH_9Kd<63AEbrHd;fF&qw{~m+~d^jtohCW zu5)LYQQ*28qw;*D*wrFvS(mIeHHBTgROK6U%a_&YS2llb@?g>^yfo1)gSIf%Yte~0 zz;%-A*HqnlNiCgxxbq=5fTu7L^-h5CmHx|3u701Ww>)NP_H>CuB%Suo5mf8X0}a$Oq*3WSB>#5Q4tWck&?PAm zI^th7jMR4Znu^ORoaWYzVsQ68>zqb?0JM4D#2Ojy`GI~QcnWD|XYN_z&Zd^doh1j; zlO8pvf)iHdL@nw_XnXv0GS_e6gnbgvx)2|`#%CM9GS3ZO!#*FPVwvgF`oFcZ zly3hYSXn&59S#DZicZV-*gs}h07yxJA3#WhvS5wV{1U6BVRVlQoIL$ZehAIR0s?j( zlgXZTl8#c$qrbr!M4+rJ9+r^pMuE&qjU4;*aN(?a5_DSshI<-#Z2#B08jL1mu$hX#I@Vd=TPh5OYjT7t6jmX-vn|DKxIt%^(b{u3*+X znGP$8&_=yJit}ZdKtBFKRJ-O2xH8IrsL=5BJdnu>Gq$pQ5%N!XK!{c5NjJ*5e;0}4$mr?yq%+N)FBF}l0>kg)Qu23&} z)8TeQ1*^yRfgGbPV3dFj)xl!k`1Bh;rqKA<3WADWrn~&C{yU@8mD9hB47aUNi^> ziMeolj#?j3J?(TKw2NGKrodf(66^fMDcJitOv=mxqacvMTU`IZSg{wY5t6E$!VFX4 z`ig^x=2~~{M+V;>PrZ+*=c$U-a|y-$^KlDP3t)C>Z0oWg^$(KLr}t{vHG!q>+$9L9 zTgb*|Gd|*D>*SoNm}xD*-24vwV{m(QNBTv${@;W>b0i$6 zxT-|tSozTpUc7TZY?gd-@z9KCbM;(J?!PAQ6dA4B`$-f%;^U74=Gvb(IYnAL{pae( zy5Y}8e|#}DH5I{2p$nX}zlG_~j~=?&H~%x#18mT*p&r8qH?KoypHOJt-6JS7{QK2t z0wpoz(_TL};kTNTsYhKZQtYTpDG(Hzq9YUxvtM3`(wK|`B|77g0kclMS)JQxUQ-Qo z+{VMZ^ATfTHEbK(T6MU?lzRMqMG*6oy%VQqHWSKbyf}n!2~$v8G_K> zmzC7`f6NGF>M<~{>TghX*1^GVNmQOx8=gz?6348Q9D_l1+j_h`(fD#0v(3593pd_@ zwuzM-Wop|(;V!MA|)UvxchBS(NaKy7YL$>LWy;Ur0n7jBXBJ;fmrVUFW&&e_T; zbn8JP#U3f`v7Qb~KNPS{y)*6RyIHL_dx*OYA8=jYPfL{l1vREmN};_woUCv`qrD-f z4gZR$6KS3+tT|3@LNL9*g!HKS1?l1c3(^CN9d^x|Nn;`uLm~4q#kMvU&Pfm666uj? zeR6hs3F+ZYTv&$m2$!(6NRQz(m!hUE)GC1V=y?ga1{N{bkLYyv3!axjp;EyP^jQrv zA6n7-Qo|xZ`vl@g-2@qD<}jHsl`>8xwX_JMow-X$kC-T8L|ZKO7q3gx*6kMLNG;MM zGqD+}+D`0zHyK&|AV-7WX$kv0qP+*ItXx8R$iAyqX1>gaj|&+`+K}(}e>#a0_2F%l ze@u!e=ol8q5qf)c=sV?CkbO3Ht5U6Mf)8kjI5H31DVWJJt~rvNgw_7XMH2 zHw@^lC$DO|A}V`lyyO$2fWX1_s;+i9p|~E*1*U_dp^Y>;6|m2QtM3&@?N*I;U2%d{ zR@lbAi_AV_o5Yr0XBuIyqc9eHCk-aQUTp

5aG@maR1xdVXkc7k9@01-?%d^^ODb zY~74qnhPBwgcDj@v)a9ICwxe^wOW^xcF42wp*G>uk?uIm$?+?y;o7yG-9G9(ojeu4 zvu9nbN$~8+V%vITL)^rmmgsSJ*_V>`;Qxi_F)y2HTOxYYhrdDenC2t~m)UhYjngtd zwg_6y3-X+=%Y!K<4`zAy`=~cl%VB|T+f{sF=Lk1&eEOi=+fcZ1YzV44Y&d__YAARl zxg<9O`m@&M^6wEn%6`?lz?NxUdek=}Rr$YaU9KNVR%VogaAM=^1QP-CN~@0VAroQR z#AzOcV{3tkT0zkHX}L!3j~Of4mjag3OHUIUd};Zm%A8I+XeoPOr~YjCj?iytH8hLQvJ+g{4!%`5!WZJ7d|bq=<(ID{xKvlLGpQXhpT z@g(!qb%RQ9OR6t z3u%#!9lLht=b5&6nGNUX1W5k!1c=NWSY2S4QlyjC>QVp_Ah+{4CBjY6zTN8fgnUKa zeKYIY$Stq*elj!ex~JGI@0;?vn%9=7O@LsD?>=6*=`iBDeOK0G$EA+;bL2W3c8a0H;LQqF6h2P^a!p2wJ$=fT_=hWeT35j)zOij{FSyxh9snn$J9%ooy- zxOY>$Vi?B+wTKHhB?G(Ax>r_y+U&JgRCwsGL*-d`!1L%JOKqP{Tgq5a_yQPU?}9Pe zhmce>4J0F;6Z0T>eg;XRjFS%MyyniA*DG%s8V^p)A1$8kM<#*(wZ6}?Y~{b@VCI|Z zoqk~f{9jMB0>V2L9`2DsSe@$G=v1fAVq%ZNBMhI-qj<0W8kF8|en_Li&pr%WmB)Ob z3Buc~H~%#Zl9Cw1(NGmE-RQXWdGY+QcacE8!a2+W6(#mwT(H8bn@SSPsHNEKkuM?s zHA=?Cw#jIsymY%g@#TYcdt5$qvpIS)bOZZvMa^+!mgV}*h$ntcTZXQvehq`%TndAf zFNHyH{SWIP52|^04eI$uq9Sg|Mi281I)h!3NbU68V>ffTmhBN`3%Z$;rM7m~Z*!!L zM66tB7)e~z^nkwAIOxm>X8czl_Ra^Vi{A-@#E>)NFu8dfrQ9mtG5-07WCCAy{Pt29 z1V7BzhCza%2Wp`8&p{Z(bSVsSHu3D0=b=POxVz_kYVi2JV-^aXj^R~%&GXO~C^v~` zohQDGkUh_-ZjNbje;o!9ErmgFzl1@i<KVwH(lDNcW2T9zXYwS--Bs%88D@pXbTer=6-TfF#QOVBk-yYm_SBYFjeff? zCW%+M_a%<=tifcdFhP8&JjpKuG&*ru&PurI$%P*=41=PWP)iL1s+$o@3h%7=YQ%e7OBP9dd;3K>iSO%qt#a82OB7m=7gbvKEtM- zd|^7%AwuolZwB&IeND)B42CT87s~RI9c8keKixm*OWk!7a^H|wy*NK}DGEf`|Nd63 z?>vCS9vTAmD^@d!=y`2tXP{uC#L4SF6*{qv66^xP;-QG>H8#X^?l#>EL=S&EgR*u;#ZPsUsd{#t z!4FdDaALH_8hfptMdTic#-+PVx#o~z46UB!5?p#0ld4UF6nXxd2I+{PZW;!9mX?&? z^ehyI*|S&Mf6=qp13gPJ=aKGSpq=E*v(Ir}^E^1iN#CM|b!*@_g16@C5ju08bZ-iD zQZ^WZSK=-0ER#!i7IMy;c9x7R8WY19ZM)Y#c0v+PMdY{t-Da+E0A)UorZVsGE46kO zA)?CFddbcra<1o0Y(g7I2#RKVj2E5%iRLJrr?s;bV!y8|=5KG$^LTs)SXY3Z#h#0J z1jkSe(+rLngT90AkLNf-5C-Y2(}qD{ufrhJ*I|&6FX`}@i;Yw_VN)%LW`%+<$fFhz z1`)jugLHdv|Aa6I_#*1G_clcx9FzsX(GK`Y-w1=S4pp+U;!5Qm_atbyAdc$L47Kwm z=eICOL<<{^8DUYXggs1r*S^s6&hu8J6P7Yf%zcN!3q5&J3E0X1#R-a3c> zI=sa57*12X1LZj7n}5LS*R*i`3@FB_7j#Xd7golg*@q3Iw%USU{NwZGB~?`pwoca@ z5IZ}`&|O}=E7X71ajPDyVtO=q6O$^mvn}VhH7vAKZCt=Ohj&Q+WvCMfgWQOGM5+3Q z%7mb8a>xBV!pRK6~s|1 z0nVc@FIm%M+USh$UT$aUIz;HIeHsevEO}Zx%k%O#?JT!ZBKCEBFj3#WX>#hByZI#S zfjgvSFg0><`hZP%nySm1m%!KVc+E#aNN94LYrF9FI1lh*fGT3c(lRO0;ygfq|37ga zKW5SI->@Js^2kDh8hn_)WkI4{iMX)iRvYlFXkLKlFF21dXet`uJZNxWYdO|fQd(7J z$&z^Tw#~sa{48a=JS~Pq{Nvx9qqVFX(`Y(8D@x^zU+pYT_4^R@fu6p*le>6@Hg*P~ zlNURHoh9=(JBzAbwC#+_Z<|>Y%Bs64>d@q+oC<-rbOEGK0SjBh4*9nu zneYQpRIH$vv{?PNalYBoUjDbTlm}yA?ZG2vUo#okoU&ryyi3J|M1C0k=@n*jAKxSZ z;Gz;aO>o_suEv9(Iz76eqUJS=jkbfa6oIAKQ(|!qB88ILdKTJS>zsEeFX-1OG%*Lz z?m5E5L56pmrtMx&Wd$NyJRM*xc@aT-S&fJJ8O~_A+~5jXv$yy!~f19bs)vKlK6(5#qa-UXR!}BIfMgZ;anUUKbpuUN z6t|6l{Tb&`UDK|=UmF1@e_&v@J1bG7y|p>3-*4oL=9)09eY*=T88fnyhK3rCTGJW) z5q$=7wuME|F!S8&e3s4` zZCR9m?$7NB3Ao&R>TftKj*HPt;LKb>S4Fyr*lZ_JTV#@aUASKP<8kL`W_^q&Je=&MdGy3r3Fx|z=R=1;11?lduj5Pa`QNP7h*2dLGYP8>y*HrDYv_>- zOcib095ZpO$@TlEhFdF4^lrXRZd)bWwr>iBxcv}zCrK`(_t*8Um>p_mDbC6Mo`&Z}zu z46Zj^Xf0qn#wNbZhh8Tu8DA~(bDkHORAi+ljp$gCVLd?Q^Yg;`eDLiHW7j~;ZV|9w zgg%QE>yvMl+=z5y78|%j8=Z6k3#J(Y0jO*t#e`Ra81GhsFi3kMibi>P5DcaZwPBFS z!xc>IJxt36OY28Hap9VnLJ$Tqqy=)0MROUmqVUWAIQ%`;igEZGE`Q@`6 zAqnl=#6hn!@RY|rW=$7N15=8NnO%phm%N>8POY2>EL}Mf^&g%8xixy9tyqAn)0{2;t0B|1)+cB52ckBuz(2mS z;nSy2_E9rK@PG9Q3=N_wn!6nd>*PkEM@_c4g4R1OnB8ddVz<;3BfHZdZ8pQ`lrRt& zZ&Fo6-A-mk1GdBaeFkfn;$v>KnSIZN?tnDXHp*Imhb5i|=Q+VhWnhP4p*F^fE&1!h zhad4GBO&lfBUgm<XR+>xYZ9xlk*~L!@$}B*s^V9OBr4}l|HY}BmGyi4B!+p-P&3VUs_0C zpUsN?rXO_RGR#NfPw{VVan`xRuVQ80!c4!B1{qE(f7~kA0lT+DsnxUayIMVn5-b^2 zwWMc}4fDNO#OSCu^ei_lf(fPzETy6*Tb&m6Zs6(}FGyNXt!(%6n-X))*%t2?3^8Wl zN{v>}f<0l`bU5$b?Wx7(JD%cFA=hcUhh+;ZE5p#;V#Iv65;q=6L_U{|d8wB4EC-kL zES00V1I8?1{ z51QZ6sYy*7_03?~K_N<5ViXlV)Bl6*2eSYr<$fdEzVCQ;$mZg^Waq&2FyX6Q;OpegK-&a3zzjY#lK%P3FCir?$Uz z*2Y0RC2N~<^#fzR>aTWlCVV|;B%j!Oo`I-QRyl|--5}M2z;eV2v+c`XjA?DFd!E!7 z@ZTLbZW=p!g92&m9W6gTVSdtwU9xa5d$NpO@8r_PafYiFo;X13IW2ch3k;#<>M~3r z8FRNSHkZ1)(AvDlwqAe&L=Rl}RN7VF zs1~n4NLWn${f@`I-(_~H!=JF;r#lU^R!oT)g1knd1#C8G>qoNu_J)J0hW1kU!9(tr zrcsOPUVVVYn9Oydn~a+SqK6}fY=k1pi<8YE7!*Ce41RE-?FLB!py@B#a&q5lBFcgO zU~JclB*|1CD1t4$8)8rM;egSgmdkrjgnCQ1Z@&+Nw}qE7OGaN4J@Vj#>*Pwi16mN$ z+%1&N+;BT#=xcgaS|>ufV=`zV*Gq0R*P4;(^O&mKm6J3bWgru8;nhDrE$lfu9j3p( z?;FA?NX~&m{xIVZX)yhv2T;u(L=wFCX-xZtHSRi>;b-CCXZOfk5WLQV;HO<|zU>PV z^#z)!43N?*{rOc)#DW0hIuBcsm6<5D#ZER(D|}QS3;1UQLTVbE=1(YRgg$exDv~+u zrs`b({bCMnvSgUU|Dcp6gs-lIT}nQeH7perDFohhkeI}s_#oAb&cxxQQWj;m05CoH zTBZm7h^!k?+1RqiHoi4zht!l=@~fgH>^~JPRIQ?=2hLeBxaOV-9C=om)Aj--azm=y z4bKWUi63z11Q*HhF)=HJom7NcY}&|jUo$Q-JiCcUg=No_!=+)8gGqxI4SAYipdJlh zK@fE=Z?OE~t}M93nE>ZR8yIo8dAYgvZ-X4c-zFQafQ960~mfaM$3$wPVwVc85)KO&WR%7GzzFg`)H>o@Piw!GnE!x!;BIaZLh)LtN2VEdIn?8)pP?Qmzd=0)@^9GA z+~PXpII^_+o`nsON@v6iOm8Oh=j6KqTF5&Mj8eVPhiWm*j!EeDqzE$}w8VetX9O*i2wH*UNr zB=bXD?pU+#LzbDG|E&F?H=`c&X!ik`fN`%TEF=)9>}%UiCGW6&YM5-?{2n&xOc`I78i=iav|WR0Qik4 zq>&)cN0?)m}_v4nyz1&9;UCE9^!oH;C37P*rxht z47e&|ZD5QP2z$eP8{-2<8AV)Yw@^@Fo$=-(7=do#uY4Zn?EP%V$%FRoa#8$>B*fu8 z0!-n?FpxizZQlbq4*||>4gWRMqdQB>^ccOF7>XW=g2?#A+`OVvq;j3?uBGAl$qKx* z=#C5WIop-0Ot-d`=7bTW6~hXhx5QsZ?mpdHv1D0jADtv?E9QR1n7g}ApB_QM(J9|h zqW8O+1%JH$1=}2Yk86V$@e~(~X`9j(#Jm(5#aj{yv+ANNsZ~OoZlpL*A+`tnSrnd= zlQ2}^K#AV0DXQpCmPeS82JF4&e|g&xVU z**MqvZhcq7rT1DbPlR#uZ?o#E6qNa+o?XRJ+f{=2@hsZUOb=64J?6HS>2dv1o*Ix@ zR2jhNJ*WIQ;@<)cecG2pW$U&0U-gv0)m6m<>oH-R1CAT6+Fvjr{FIC?Y{2Rj2TNd6ws6Ln7et&iQToXl8Cf=-XoA(t7T z>-m}H>Wm}W9W#J;88NPQtLRx#b2o zNGvD--HvjW&brT+-n%sCub0_rGy}NU@6ny!2?EYPmrx5x%G!R?M?5=2quZ^NYhj4o zB>_wM9F2nIk-tL9Y{6~rv(4i+nGK?Tk@+=eI5{j zZ`AF)$bhlQg9fWi!@esoJ4DpX9nnM&lKwXQIGtr_yz$VX;Zfjc!Hz)<;`W?WMN)qA zvp`i-Y4TLB(d=X@3pQc75NLx3(`PRq1x60tM^qJMMDCDcQrFt0Mm^HaQ!o+ZlJiET zwxAwp`zHs%egk@NwLp({^G65oK$+}&F=B&2G&Vg*eA)5@p$dhMKEOt;jk)-AvS@sJ zF${F2&6Jdyas+yO!n24=Nu2K-=~Z2T(1g_>)rK46IKhpv|zzY}+DZwtLYQY4gmPN#}Ifg$ zbSl&Q%5-hXeXrC)1vc(V99Sj5WS}9ybxUFJjy0z~X?cGW zGGd=)DOSrwN>1`4QSKWCA@h3_;P`!=LkWr0fZ_@8mOPdB&hdw0CQJj*)_l@5h%QnV zyApGaQpa_}go_IbV3!E!_{YE1LusHMnz(pI3Hfj8p#x%2Cy$Adaz^S(zbPaG23K1a z$)|>SkHg-1^@-UwXz{R2V7Vs1icfu)XIO(_4F9HQ5nRIXBYM-56=B*0MIT zo$B@MzcsjPoB^p4&q2`=f);3{8Gc?&&h*PCOEIJn#>h6^tQDKCd&jIyhSnU-t`;7e zjb6i8q4-L?WxZv0?XP+k=xaSoCJpFW?#&v==U4E`v#}G+DI3v5TyxxLHc5N_IN+ z1gg8fYezN|_iDgxfr2rwKyF@rn*par1SGhKua@IWBNx88t<4o&dfl`B6*J2(_XDeqj;)wmO*rfG zUyT4wKmi=QFR=nKGbJDAK>?ae6QPHr|-Or;9Vnu5?d7w?BWA1tz)FC&)m=Eu2o!t5Z-;~&e9pnpt2 z0YXsL*47mW5Q2I+Iu))RqI?7Bf%_TgQQNg6%WK1eI&N#u;Fp#5AnX)LoCEXEWtS53 z(@_9B(Kh9S7<|mlYJe|5Q>S67us{KWT~Ml!o~U7Ebr=UzL02+tA?#IHN>mUct7YBh z4ysPOeZrbci56tAV~xapt|z{ia_ZcGdy(B5-%H(rgJO4NSad0*YTcl@`o8=g3YsK# zQE8nl%wL@>!)mrh5X3qFoGfu8+O1{5*=5VJGT4?flD0m&XgYmnSs&&1BJGKrPpUk% zGTH`TP!L?^WC2#ylB>qaw()+{ObmUd<5!?Z{Bod221uM*HZcH0N#n$HGrNwgCa}{p zy`)^Kz&i&tYJrm_q;BvRCrfgqsB2H5H*%*v!AmpgxV~O|1<_X9W4$UuuJ&bVfX$?Q zMC5J}3xFQgyU18MNP71rLm*uh(FaskrY=ankRfXONtdRfjx844C#_P0qwV&hF#X#TmhLXi8@{u#HDG{4`(;4aeKBhkEiR8Qu{x>Dd zF=%KX#SO_}k8$$r0Kyj~8-dIm(GTj*Vb-lnW%m)D-pRvHmA>1*m3H)T&?Q8NuHzKD z@!kuo6~R@g$D1zf+l!yLVz%#q>-i12(L9Chg5v_uAxRwbnCf_TH$QFC@B$o_oe&3& z2fz4zp+(sC_PY4ab@R%L=}FYv51+4o@TVQIifiaZ4Y-`uXl=8helyA_ajeNdUb5ML zn=ArdMsLk_tTBgOu93b_UkAQXx$v+dw03B3+WuRqk*|3kT|J7uX_%I7N9pWpsUtlM zRH+8ReLvNGT(24d1aZwYW#(j`S(kO+MtN1u{R=XGz4&7(sXu+RR?~3<@I1sc``H0I zKEd&{xU(eFpF~{s1w_n)KqlSIP0>p{k21^r!cyF?JdfDf3Wt~=ms%~)qmcu4ydA4e zbq44pQj#Kd19t{~=q;DZ98e@*S|*XD&EZmD+30?LI9FO#sdDBMCl5Q!|Hkt${gvmz@lnz9X~;M&&*Sad z(tzioU3&lk22cwAo##O{pK9S~c^-Y3t$i^54Z!p0T$fTS5p1_lJqkpz5(B#iC)I17 z2LQ6T%f~=`)Q=B%9#AJtwXDyW+zxmiH``n4lX#q|A0F30rtN&wHJ zicV&6Q1chm(u|VDvn_Ry(_XP>uZ(tmIpJXK{DSq0Ob(iy3DoDq?YatA*F?*@f+`U8 z&pR1bymH8BfwV1>h^nmMdiOg95A9>?hRuh*E*4*0hTNNgYIz>q0jue=|J7dNKz%TF z33L&v*PdF8F4u^BI2AitPxkR?y&*Q)fqMAJ?3vzA*cGE5Hlf%a#=1rmh5XqF7T^`7 z1zb(nM;kEZqadobajr_s^T3^jV>zSK->tRGqE0mlmv|nmtl^9jBpkN^+kqw~28i$I zw*tj^)`1RTM8IF411V$NzfPvTh!&WVwKuhgo*P>%B-Z)x^@AofY8rOR${Mm7K6Ad= zJuq#)#{nUJN*DS)XQ!6l_hylw997>d@P!B$Hm+z`oKnnGytR=9%qG0*Yc2LbEQPJX zIl~XfF8bRew$0>^+gE?hxWi1${|_SzhJ4iJ*8ZgN^gLy|-8_|b<0htFuuVL8FtTZ( zli}SzC%DuNm+pAFHR=@;VFz85H3t-q?R@#n0fJFJ?zTGij}@i;bL|M-LbU(Ni^;B5 zi0`RMMyDB|0p-&#khiQut(Dh0Y{1TS@Wpl2HFlUlOW!pJRuZ+9jD$pr0kd)q?g+g` zG)pn0%^G$uWoAKzI3vRQ-)?RdTH*az;T^?)^}sC)5g`HGs+Rgs`oq z4T`z5orLXO89HApI?s_86~VHPGpj_BtM}sh7vm4GmXs`@zL&r<0o@fRT)0g917fn0 z=Q|p9203_eTv1k1Raxlpt=Pr22w$7Gc)9z-MddZmHM4MhN-l9DOrmp)pO`|mF2n9# zv0oB!K_<4ehOIbD3v3OQDDsOv*k@auwMv#|@U4w*6#ym6M#h^;7S3-<7E#iZ^Dfp) zN)}q;C{SL_Ebflij4{z~sbraa?`I{83UcRZM)^`~gHyLtG8&wu%~AR)H#E??X*xY> zlSWR_HaLuO?&EA|b<$8!eYUWwhoakC`BcK4JUL@%D*x&Rt)KQFB7 zbKbfb_C6Nye!K6y80Tpk$~S(F1w%NL2<*u#COp^*j@h;aHGrFpa@b`!Wqd;kP_l&g znF5?8`UFQatW~mr93!o`fCjDCgRSGVpq}QywMv%ZsWXvOSo%wgXe8%$sfwyqvRrQd z!Sf9zi@casB22Y;8kW>&%=$oJ_c=$rIYpq}86H6cDUx`j+1y?KA9e2@m-OBL|JQ2i zR(Y6PYKr9C>bjO`#_|9Pm22)=rCV*OsgYW;@|2?B0kpExE*0ARq>-QE{de1KH?!CKb$C7>&-=af$7DjUZFF1F z=^o2SVr8IPkVQ!Q4ua0qWCX#DIJI(=urxQ9$a0?Z$OW9 zBw0xTQNU2?C5oTAD2cm2#ijUyZ7fMt+IYTla+lhtF=Y6`g(sG}ktg}$qzZfr1+f71 zs3je7HNKC-&I%~WjxW8F8OvIm^Lu;+rvJKyByJFIsF@TArw7QkcpGkg#4Tj%A?v;1!ZxT`gp9+AbhCCc7-eRUhyU`L=pj7NcZix!0iCw4 zc#*Jiej{)iIdJ^LL#M6U-SGE4S@wYFk)J%5mI1|g0-}d@MD~wF58>>|fmpFSWqY1n zCzq-22vHY$xbp-i_YPKwLTpC6js;n>;Ncq@e1Y3U#rGQ-xbZ>q$z=V2G$82XRoUfQ zYZTj;&4sS$KeA+D{KcoM1MOj>b~^Sj*eygI(%jAf9N09e$;T!;Ob_AYUCb%ZYRY)D zeP)jd@pAs-WEz4<&G5Tb$FaUILXU22VEP6=+2@W^(dYI%^yD<})+3B#BN|AzGx`qG zMSE<5V#c3Yn6b=D18=yk1X8mGmC7qaQFiW2aOFsAz#KpxoNnKVT6Gmle%5O)pM27# z53}^23Yj|wCzN{k`JaemS}OF+K(?j=KkePAp5)M!>gGsWCG z>I<|aC|$x;$x@VM2QnN1U9ODbgGO;|EYl9?S)Gg%9<{}t*1roDAgSg&r? zwBH_(SO|b2zy69HYkCnk()Zw<{=LoyhTPtWRR)-=&4L-r!Wv&as2N&S8=kO1#^0)w zAeN8_!s8Ao`=cP6J-eyF5f>1HO5D(1D(28RB|Y9~1m>j?nNYeA`SJ%%74p)i%3top zf=3*88E8q*0nuoYwfK8Oy!aqxemAw`F?mMdl-gwKe{kJ+S_z|kC`#}&K19f1WyYnH zBg?3rpKb~uVuIL_2bcg@W0T9yG=7q2#sxBiv9Dgm+= zs2+WXI92eW7inN4O@ZC#RE;=b(3GNR(m^OrG!}hoJz|hcC>)nz8xBGhr3Z9soWiB1 ziJ2M^*`$t?zFwSzuk4KVQ#;!#`$2%=#8s(7@FBKJXn2FjM~kJ}&f~N$bcegyy;b@Y z{Yihh@S4b$dNV9Q?^HIMd~^-w{J)xY{uWYyx6-W>lmCk9;f)RflAZx_U7X4(ic2|n z`+!kmCjmQtZF!i*~Vu2gbei;+9J-Bz^cTs1THs>n>EMjJVc%|;7(h~+hOH({d@-ta@{5=7`ODLAdc(z}-Pi-=P9a(`OBWEc zv~3hWltU0JT8-8uy#D~tr|oEcC1z=)P2PMhX8DpP6uuI(*aI<(5b$qaiCGdA6XO|R zG$SRNF|~w%^Kt0`Z9R0Nt^@a{@}e$=UK#m#6yljNpx~(54sq^m!!+&q>_JlgFsC{) z2*Zz7nXqYROw=1nJ}m+RKscV zhNS52MC6asMr+;7SY?@U29f*w;(3l&GlD16NPQq? z;IJn7f)T866cw%RR3t1nM=mLg{zV*6gHg=9W-6Q*HL3@yKruy7TeF~znM~h$r$by$ zZ6uE0(d8G)l|}NlW%eK@D64y7pWY1HWj&`m*G{t&7!ar>+t0(mivbfszh*UAMCxIp zL#BW7NyG(vcdzHp?k9r@c<*foK%s*dH+eyGC?KQr{pvN>kDm^_dmIPltr%1M_|9Ms z;<4B4qg;Q?a@7%a3n-qj8*GpHj8;_R)E5|BaB>6AZsP0_(6i}1O4Q_&k7TWljY(!z z`C$AYs@5RnV4;U|tT*^pQd8Z?(5;{RwDgSqixe@@d&24}uno0^AIwek1r>A230lUp z_txx%c00lD{hYQLzMy5n$S+?b;+SS2F=eoZ**JRsr*HU$2l&0&{4JhWSg;@bF^Qz zEb``bo=k^z9h7#M5^g+R*8Y{^48=xr-(!}1B#$%qC!ueisCdVN&5$cN0tQf3KGy{Pyuq`vd z4H`%@n&O214)goVmxoHtcvbMSTkd-D7pwhh$v68`p^68?*7ek30afQdX^xs_JEv=( zIa3Nw+Lty*?T=#_u~8O}NiEaa51aMLiK5;b2 zUG1C^$S>Do%R{-HA2hk(@KGv7C(9)xp6}}LC1QqC)$WQK)@6FBu4)TFM5%WlekAcG zZ3s+{r=5R-$v}QJ-EOGMYI3yLrkLIuGCgNy^~sudU$X${q}Wqm?c=WTQ`DMUZ!(T; zbWlXvC**fmNgQSdlT6(9odpZ?h$dhQNNkTG!Tnut-Sx1;lYwaN6SrWE7-Ybbd1lM{ zPA%n${pGeSl}Z(=h9-JP59UdL=PHWB*$k`TJVN@UQofgjNtSI_6zP4=u$s2yj=@)_ zrc->^A!WJ=LsKE{vi7{*LNXAX_f+4@X0M+vy~ij3KdO6Z`^U!P9Ec)8)!!QjvI~k6 zAPloX;B}zzTG8}V?(85X`NYT2%NK;P~} zPg9wBZc(WE{pIFE&fL@bCV#|z8w@Ix=ZTl0J$kiDggoF_hs!VUzMfcdCSj9m2% z_&}{Dzi?mGWEeGCR975EBpAwcnJEBcGm8SHudx}}+|&~I^Iygt&#Y{)J%u{l0~BbS zTie{4WOon`Fqk-}1wV@P2P z(Ohe6o4&*wfY-8dePZ^;tfao_kA+M9EMC&NDd1-zyse)_8@$iR@WH!}63Z6+EQfLG zwx_h40MWAidob&Ed^bj-=RdZ-R%~6GAfTo0X5$;YF=A2Y#q@z3Dg%j8kMA_kc^qVc zi?8Lur>`^G0Y}9Wdy(d)ezIMX>x7U5(~iO0-8#dFAww?-zPYoTQ}>~rPOfY*X#Q!n z3AO88M*EAfr{uttcT>pQjOn^eaaH18IUi&Ec?328@yjBHTd1slX8cwU{^Y1mX>nO$ zlC6Ecqm;3^;Q;&bDM#=&0#Z}pXGx9+bI)_#ARjodmhRy!xp(~ap`BCn;i}%6gh`;> zV3nCH!zW~&{!SYTe6+U^c25s0ts_|1b-zD8ZC1zGY^STB3j?is&BYrVR9N{zgni(c z71Tcd(8#s>E+%ylI8K_KL=~j9%F{}4vlw=Re0BoFEG@3xy6=tNnBDgM{51i~;EJ1i z+2`<`->}7|M{ga6`s+J?XU3Ym8AhklGjz}|c~ohIX1U#0={*A>ieJpO=@eDPM=Qz~ z{Va9ju3!Bu$?+i#Po=h*p>x;zll!GtluTH1HFdO5Iiv4kQ%#(c{Tn}vgVxXD@TdJO zxlX4urg~XmIuxH+o-=c_2--Q=Swr!oVIP9x@xMlV3s)3Sy;BlooZ63jMWZ3sOtJ!D zyoVSS*`mXmDH>JV%~bk~hzmfIsobHjp$k4d^u=wm++}0YMEdx=GPEKG{_IZ`9XC7ujYYrYT zV1D}AcjAL(447J$wwVQ%P6Pl|v)M4_hslr1w81B-2qiU3rU?~$&6~_Yx2^M~p<4n@ z-7}u+bdSeG&kmA~SrF6Fp4~3EvpEJLXV9Tkpfk`g!fHjt=cHw)#pXZUZwoZ5Vh7~rh} z3Z$KE4CnfsvqeCb-(1Y>0{eFC%nbYNXs9v z>^?XjkWWkYLGdrIGRAhc6vY-|QP^t=3-$EX>U7uxt)HbpZZeTMK9bHX|bT^;MXJZ`Bng zU?-N4e22D5_B+_w>JUr2P>8ZpI!`5yxsB48ESpyXzyJ!cedFKqi-;N3zS~~Ms{wgI z>`D9a7-nM@rGv?jFp|@)dJ7PrznJOTe_261fW$;GvA6i9hZL7{AZ*o{VaR6ewKv)))gzfMIUyV2QT)FuM|w+CCg1wQE_f93wjoLVK{Y4d=)v~aFW+kcJAott|zWA=l|Jw zyd~Kt+6cOR^j?<^xmH~F-sfaos7xib+M(K7J~w?CKO%5s4AZ>&&a54GCYBvw6ZA^k zlIhdex@)R_Tx~Y!qP$RMfzzINb^@?2)L>KxRT;zWJN}jnqe2b9xC`54?3N&(#6wNY zgJN%r-!V(Q&9IuETRuyWaVzeK@0{rtL zzF<`&Cpumf#D}c;#s~r3E8~z!B^Sw~0L8}JP^Qe^la|y)_$2CRL$DPW^)VqO&z8{q zxN5Xko}KmJIeUEQlbUho?tg@QgN@+Vbl>>;;cjo|~KwjiQWma{b*Lbldhj!g9 z|HxvOt1evsAcvb|Wctbz0N;&RUY9-9a9xV3^(Ty1T*Cx5x?DD`( zB<>6F$L*rCZYLq7-HL5!KM-*Vz4+K^(hYdv z!cuqx>NK-e(1@|dsdmYD)#G-#b29NSK}bSbGd$tDRdsog9@X$9DDZ0X$h;cj%$c{x zEljzG5nnC@ufaXz+1CL!f?`aiL=din&R1EJ7Y|w)g+nJtP)FdDtke%#XdG87a%2OFt(HM(5%0gRL@*4 zaI3c1dElKGjW~SL$lQ0x6?r3SYN(ku#EHGhW#X^1-REvE>ntoRVV`<69VJN@!|C4;I zT{r^$)7vk^O)=VRJ?qGw0n4aP2gN>JemNAMV>1QadRwIu2qp@LIo3?yo81gS>D+9t zBXMBxYHJKZ>2s^O6Tt<{jShNXpu;95g^spzEk7!4KnrD_6YJ+2r*#e=kmrT zXs<2!*7iFL@X}*cc!0co zj5jZ7YzxnI5gmWacT4}!QLv3XubTIw9WGpma74>5Ie8i@3P7e(c&BFiMWx*QNdwOW zP$;?@8?CMB)K;aHzM@RVZRR=y)A&eiP5Txu#YYlabexC_NO?wz8`_;`GkUkWS||-1 zRe6UqL!5xX2F!VZD&I_?=Jx!-fPwOV1Z04`T>>TJe z1Tr>eqs~BBB)W!H?RXOCJ_(v| zuQt~E6>nV_J8&CV_i7HWO)Tfn7d_r^Cl~-kLkg1GIHg=I&SjjPO!M}{2c0h~;LS!? zHP;0wdc80~P6x1jHwRngxU#bSMF`{tb$s`e3n%R@va5y9!^2drdB#y9&OfZDQf4FE ziB%HLU1&gw^~S2me%-MFHo0`?`k;t#7u*YE6y>l&k+bM$v48Dnv5szQOcJmQPp3N% zDH6a?&{~<^k5W(!*rqsgW7Qy{qMR&3yz;Z`n5y~s$TD>&*iyUy;AcUt0A<4YHUF24 zLk)o8p^bM$U*G#?zfWfU?oX8m%B_b=;QVK!Pd7|?dawHDJGAoqMM%r#NT+q%?{DgM zeDwX;H+$@YzW9lv$O*iZ>syLv(Qk^sJ3HQt03$jp%9`)F2+V`TVCWDgc}E5&dgo1h<$`c zta-A#{ZN_lVBgn4uAck8(A#-2i3JCxH_M<9=kq%;7H2GWvb_Z(%`XBm7K2YP5cxYp zA?`}?F5ZUi%I7QWbY?oBk_P=m0-af5#HOjNPtXZE2zrM=ga0n9LK;mCCFf-=&NpAM`ZcVQ07$AR> z%V1QEbbQ+ho+raR#~FXtPhQhs*Bb8}GWge8x|Q?U$5w<7XD5tokVB8;b>}3I>}|nZ z29zLv>B#^Sa86Y>0$UE%Hh_%fLLdawyCaP`_NlS5h($^!e{FsS@PbUF3?C@VuAD!k z?d$rzWgw(;F%aTY0=|#&5v6Ug9Sd~uxOLlRN7igX;Bd0vF+Bp?*iKzH;T+C&#GEoL zfZDYEym07f9uyD~arZIUA6KB&zQR_koW}5y;qgz6VU^P$He{m%gsO%EAyuYVOs^bgADNw5Tid5TkcYC5x6dK)9|oa@ zcHLSF!6hE^1@)rsH7ez+iF&7Q)P-rHh3Xb!CBF(lu4+b&AJ#6pwH%q(W>DuH zWbgim>+90dsL37u3r0C)4LTJ)hijowyo?zIPlR-*(Vx3aeFi%i!GWi;5l&tp;7H5f zZjlXmMACx1jS(qIW&x(WIssrs)1UI)*dPu<-$zH!K0HqXF3+Fp4)Gm=D8CXtHvf_6 zA=DB*{LJvnB6Oan(V&l1P0z;Y<2RvdvCgjWwb*`4Lda0vtzPx;#V&HREZ0ONxGBc(Z4%xRP!=R$ zeY5@xzmivm=S9a0=Kop83lf2-nFqsAthc(w61ArZNKS#ld_a!p+}xHnLfC@6r;7*8 znRxasGPZme7~s&jm1s;{Ge%9N^-yiql#((FjiqqhO_+}fORfcZL%=-;X%N{klVLS- zxMwcRb2M9+{@5J=Jp`?mFo(EVL7L|byWSHZjLogDWMi^jC4p)$A@TC;{?GuuiKhb7 zl$;}D2ONVL@|8bR%-^{O#d59)+Dk+`OT_X0r+rXJ~ZfNehQV+0))mt!WZrG{kG zBX2X-c5>*D>W8BF=>eI#CUQANkJ98e+j@BfKZm`N{z#Mk4 zCZ=^OjLv!XF}F1mqnF8I6m#WwutCNMAZQ7tVr;nFwqnu7`ayEPM~`WeUM+j(P+&!% zgyfi-N`eLS<+K8#2k6?rN%SDoK85l2lxc|`t>}M*ywqMc0MX;S--sRp`rjL#8qcjk ztZvZ}u_?4;#3=Rt`%03ufSv28)hQ|!EqVvSM)}^iTu~#h zi5{K7#Mrs9apGGNJ&IjUXFF(#9xq?~p6KC%*AhLRr8(ArZT$#h2D^ts%NmNLmYXmq zHmI_FAaOxKG}bfHH;H_#7zZm(mtyqgkKvUPEWLly}v~YskIkIQVSsDmj4&Ak|pAe(jp*y-& z4S`d8i()tG;ARI4``P=)9+PAJxF8NfZFSNQfoPZ>XtiOKwc;A?3x<{>_Z^M^MKEuFV$CQ+O+cQBh@Z^d~Cm))tkPccG` z4qa9jozs8hM^lsm>*y$#GN)FCjSl4~9nEg!5X6Vst|+QuBz! z6&41|Rm5qgA_`SR4B*#}|Fu`DxY5wHeD-p^Fhueovtvd4B} z)P=lRrd7QZ+!3l2$>dSkTPDd~yeF(=g0m_k+%s3d6QB?va-5ux0Ibr0z}JcvxnL~% zV3tYHVbkjk#%8Qk#9{`dcWDNM8C-{^Bk?j7_EvbGYXTQ!K-e!h#l5c-ExqGacY&hi z#4ANh`}l^C@Hp$1=9@H-0pT&K-#MDtmOWvWxt<+6{EuPrBlh9W@iGPy+nIcbUq@P0 zv^WL>MGHnMO1*f|Ksf{mS~CxLY?&h&(kb-CuPSg?k z-ktmMddp|%jnDcWs&()Gp6L-kIo+6KZ2QCSW}g0HP7264ot>BwvlDWFLrMz>N^0G1pZin$YR$=aHjP#RNZ2NP z!hgzu2w!DDo{r<~GllFKTIx+C=C=&Uy&{pgfV-Fh>45{|Jt+9#2AzPGg}JC@*;Ce4 z=m9wk)kLU{RtJ5tCY^2a8$gVZA32#Hgs_6mZD6xoMFe zv{4$0ppJjbTj^q{qpw(7>i8YfV>g@PH?Vh2^-x5F1D7Zkg}lyywEr#x0xVU@2J9;d zf{Ey$EXOYrxi9TD!2^m=*Z_tN!d{E?xLGyy8tGBj)sSCH3DP_n9`k?B6M0Qv2?i|6 zTe$}9Oi?%xvzqfg^T>!;N00$=1QGQ#qIi%KKPF02*~_V#Ck-w7arlYpyAuO@iSo($ zRydfeM&ibz0;3|GuA1kdT?uHE@Y%YitctfS{!R5J&Nr~};fV}5v4RiA;}SYd zy>UU26mMFvpF=IlqE+5??f59FWW_6{hdt&5?b>$o3}9Hao5DiHzmO4F76TKysAYjI zYFWx(X<3fNy3HRN3;pH2^XB%?R}fFR@|^cVkne0*XSR?5!RVAUS{~&tYFT=hYFQva z%Mt(!f@rlYaj^z1CyqLu}*pkWjYKC+GB9-H8E3$vMx6kaCl#HK!8iWHPlr;I-nfEN$Qa zHC}7Q+(Q4TpyN4UecoNi0I-*5zMB<=oZ`C%$(JbTV?TU^!eM+}M0sHl{p#Unb{LZ2 z_@=I&LI23McmNAV!PFY|Mg71A%Tc4L+f|vKkUe0DDAz4dcnD zj}Bv>?L?Ajx4edrn}1tUqE9?VJm$t;ww>z#fayUeQtrpB$}jTp3oz%1ts=e* zs)P@!tsW)Es2+6!gS>uRUnQw~<~ODX#jxgI-sJgS`P~@Q7I3EGXP=*N z{!_gCFkPW<&9a19uwcB`qO`q~vt8e1Vv9LNAM1UI#kZKb)D>_lPDtDA?#^)V(8{+5?s6kc*o%=C zXzn=kr;D=CbIC0Rk0?5u#cU*$oWoXGjstMcoY8t5>K!`O@I>6L|1|{iJY=~iFb)W4b@-1&zP2zr?|1hV{3hd{(D!*c#~2!v!J2lU?ZPUX;!LSF1* z2t*0o-@wa)lZwb!-AZG{@~*?J3tpDeW{0hHdx#S$)l?9u{V+$GMc(P!E@xwA~(WKs`nP)Z@V-)T14H zABmX-R-@iFHm0wNP}}yqoX}r?&c<(Y2qQ*LNf*ALxK=yH9bJ&IEVyg(&F)c3&+H#k zAW*~^y=&`c%8VSO*?}r2@}7MX0v*hBxC5w%(+x)T3_Zg$TbX$x!(qld_cA4MGN9xD z{>PUuv&l@tkks(=PfvAjN$lj+KKJ(AG1T9hLjEKV`o$3$Kby{XC}%~~d#%XEVZUYT zr-watVVS|EKDzt3A1htmGp^YJ3nmLHe0)wUAb0haxa8$=dTuP6(H`co27M9K1d0bIyr2v~~ zCahYur9)hhjsQ%GoYot!Lm=?#jnh`#2@8GcmDLDs2n16f$7ao-WBp#Dp>d6+i6=2B zUCBRUk*Cg=ErdX%%m0Rvy$*p)EQUbBv>_1L&@=tfg`$Q-t$RZ7)i092$yh&Rl?;8N z0t#`Fr27KQmPK!8>(BlV7{@lLcjo7TSt+geYJPU;IUY67dHW@zol9?H&10hDfE}gt zPk31*h0xf`CCBh#IPp#g=>d;fcvu8i2oDe5CuJD9THBBOm<5ZD%~C2K7ys&IA!)rV z^`z#18v+^hMoW1trx>dKZZLQs7T`B+AsKVm15ti$2&C%Q5D1A;6(Avj5J=SP5Qy}R z5XcnhLu#^YLnGe09Cqs)ZJm^{elDSC(aRDo|FGfJ)ju z5%^4vLHu#M=Qmflozh1ooL&3N*3~Sfpkub>W?ZuexZ~GCT!+H+0-mJX*75n?>=%12 z>XAWfqlPSVC&ACd-!W>yL_QV#NYR08H|RUvgCvEvmxl)!5Q=KM7Q8H4)z#?wW#~_q zY$ED+v|g6gf7;8kebY(MSovSPEFpmOyXHqL;J|RP6AzG1<|@;jCObwQN$TNY#kBJq zUKU5jhXLf^!96)5$EdrOB~=FV2e+9$IPr0$?iq7o$IJ$qo?W2GZVg;vFag>Uj}C_a z>SZzBfWh8zFpgW5pYH)pae7iR=jf0yElO>EOmmdK^0F`k>-xZ0ygjot!@~tB9N(0) ze9Sh-1;ElDug=MM%UeiT4pmq|jMMI;QwxozJ9iC&zN6fT?!DCYeU!k|Yd0CFAwy^_K3V>6XAW6DLJq>egs<3ynBm;K-15BFJba7 zDcPj&{CosaUHl1hP}@#G@^!A;+ak#KpC1=FUyJaJDV#B{Xt1{&u9H&^>C)SSmN)qa zM}wE|m}`4RGK`hDOg_@p!St9v)+>|qr*1U&l6cjDVv$CepK9RRqu;5D1OcGx{b=@DR+X`X@$0a_M} zG`mjab6u&A16mfAR?ET+cHq*~;c#2!f|f-OXj!PV7vGnV9sp~uYhpvAe)pyNN1pFj z>wcWPAv6UtU}KSYFPj-sKG0@Mf?`avNR7;7B1qT33O;+#F(%bLj=8LJHa(}o5b{Hlq z8yMY2Lf`<>Bd}aAj=)Jz5bqq_I#bd))09W%T7V=!{LNLdW945j4EnCnS@J6D3FMQIK9w7D~sA@st3(=8E+ljWi^c@c1O5o?y|WiGj&|FzlcQk{43NQ5R% zIip!3Wg#`kdUCZ=mK;B`6+&TS?O@u1ltoa;BYB}+wqI~9dHq9sVCHsGUelF8||ntlhA zL0s_V6(~g@m^V{`-rB!$vZ%IaD?6~8P~%T@f{Dyk51{~*KR%rM<~|_H(HimQ&$|34 zNb8cXd=33vM{wymflxRmSDGJT2C1%IYxS*Db_FYV?O@=I-32#8N zK}31|Me_Q})xZpaLa*rW+x}npl|)8Hiulj{z%RH&i3+xx8o5{wE9Mk_%oS{#y3I*$Qy(Iy&K;r_R~F&b-jifhz#0Vn#O3&>F(rxz)3Ina zc(zQm_ZRjR9*0N+t-jP0*0g&X{ZzSn+z@$+YX8Gpi)~O@osb^UfOZ7c9H(Vr7O0=> zgr+~)L$9_NHvPi&&W(1~rB53GDu(Jhj19M#b1club(Mh1Eas0+mQLVg>FS!%fcdBH zx8ionlC-Bu%^~evKG62qT=M@;5=^q5JsBdtQ`ZgV(P#2%E_3A0WZVXt;JaCc0sOv-)aogKaD8}5+7Rn6rJFGZ9gQ0z!A8e_C2)c2bXH2%{RKQ$KKOY;`}{nW!F`YcdY#na~(5;iAj_ z2Yf6D&B-#zl7IXkj+Y}IEBQx9XdWIQvfvi10Yfj}Qy9lKTw){vGcWNOms=>Eu+z&1 z#-(ab)wau_#nHl}sw1u~5%#AV2IYq5I6SGTOT8t z*HogHC3`HH=;+a&u2Z?CI)C`%GlOpEy=DRYJAwfyj)C%^#thn1)vO)EmaQ=1is$eH;QUF zJDJwYL`VG&?jf_L#2&u00QZ>tIv_)P@c?j-8^6Il9+CFh@vFx$0`F5u6BJiwExjSi zx?6ETeFvAAX{0^-3C#8i+K(AI4o`YZ?|NZ z!abzS1-J*M-tu68p+w#*%6w+YSZvA z>_9LQCn4m!A>-=sT-1#^oG*{H0QV3Sm4xNn*nSe{GjQ#I`r`1}$08>!+~ZnZaSWUL zOBUnEn8bQ4TCGF5Xny^^SVoBxEWkag2D?-Z0qk2n5SKFbjj^>b6kJw~g`f*i@z3^# z4T8T#l(zRa5dOAs56ydva1T~_jW-Rc<(w?QJ*GI7pJ5AzO}{$^_QueP?isI;X@Gf- z!4`{d;j0g#fw#LJKz*~6rPmzh;bAMD@*ON#m=nz~r_yd?%)6+}GqwpFX=IS4cqok< zdqg_SBdP|;R|6^fJ(tdYGP)}$!`>lV!dWV4k<7G~X$37&3xXDDMdR6G{qqZgmTL=w zmKChvr%np{FVMjQ;d)U|TLFE@vB{tZ2wG-9!E`QFGN)s(=XZ~lzdrEtW1OU|t>j=G zFfKIhenZg0vVT#3HLy7PDJ}I=3;$Joe@{(WGj%$46T2{c3&B7>LM{1p9U>0Tosg8^ z<2Owevb#)_LojfMQw^kDOuea(dF(5EC1|lN`%i)vy}rbai-H!~n}Qa3Ly0J8YVNh5 zB?B1EYYsJmxONN_D1LQTkB4Z99&$kRAdc5{%_K?Io(kWg+Vo~I^e-2WUqvNnSsl-T z;|cAl*-R!+KtD!*G@-p6GQ{2dbaK0N^ z|4|rvq&aXc!E2<;r9?D98@avP2K3v-nu*grancG}b3sCH8_g_$YyCc`tW0!+5a`FMGga*_v$o9JyxJ5(D zBX3r;z{LlOUg@&SW)NU-di6bWkTG+x`Pn7>XM@v!xn(cXy1v3@06qNx<;F2w2aN$z zqs#@Q2k^87Kyn&72aXSV>uP=5c(tJ{rz<_WnopGt%jz61=K{xlUayL~9P1er8a4S) zO|LRwQgeThi5r%a3V;F3^r0R}vwxA+!R&fq=> zgDb0>$@^?{Y5*tW_ehW4#p#rto8L0j(k}*)r|vv_4Im@=N)v72bH`tBe}TiAPJMqsdKa8K%D30n%{M)3>S+OB%S-QJHJ3V$4<@i%K!3zEF*~JNvaxeLC zW0LI*h8x{8cgo~nUyh!ZMEOI$6vlI8c30EpK!?yiYIjNZCdQVoMXgyaGvm=Y*Rk%H!MqJ-R- z7YcDeM}xO))r`HIKd{#w6o1N$cobl0p)DF(?lgn(!oR`Tgba+P_}*`Zmbe8&3r3A` zj(D`}lQW~)FAb7W0eXZVXTB|T1A(6n@&!XnK1c`xLrZ3?(Y$WOMbMaY4c8lNVKjZ! zvp+O~e>q_o%pGf+3w>2F+>9ml(Z6bX>ijh`xbTFLmIT{n{k#?6^!09TE5DON8^B3x<|G$~O!xDy^YK;3aPDoIdtcHf$KT zD@`%?b^PPReF=}pws6?3j_<6zg1y@HCD}hfGCpjmzD#mEd&E6h*9(Yg*VmP9kJWq{ z7NYWA%}N;hG6mn?{onwZJ53=ov_uc#uSAc5G#)r)T;N)whm&Ty| zyHx^X)my5tnPjI{!(a`?C>wzI7lIdrMpm&y8j5-r%E|JsHDZ2hxW zxsXJuSE9JI8cq~8)=@xMwd)ESBZC=ZUKv^>GB^A42`#J}>@0Ax8Nrs%llie=9(D$3 z^4=2Z0pef_NRQobB0VC%LSwP2X?3FVG(D5YFj-Vq$f2(?1n~xo*+PaJcDUH0-56GO-FZryTS}0J-94#OOTCX zd8_}4!FD6bjJ?Th=p@~)rJ+AW$%8?zj=o@MVejKKf&b$q&wWdj zj4}7XV#EWb)tG}83iNPwy~|q`0xPHHW*v~#@w3?-&+E$OD%U9rxKHlFGMYFezS0Np z;U-dWJiUGK^RbXuNDsQx0qL5eSPqY*f1P{zI4mncNa?1z1TPv|au*FPtXGDX%}oeZ z=b7*f_pL*v|9}p!Fpm@akBk{EqYF&#uKL$Ej)<6jdY0HP7Y!})C5Dz^U}!POwgZ<= zSZwPnLrZ#3C3VrzB3v-E@SwwecY@@Cm;CJf`Kmu%_ELz`5xEK4u>I^(Lkm}H zXc0Ow7!%&?eHF0Ik&(B|MDU)6RSF&Igr7TwzRyNf46 zd-0rmSBiS`n!cn0_=b!2p>m-Zh%Rym*w3u8%b|evA~{6C9K&5Y=UB*5f96^+O-G1E zOi|I&n6cgANStDzj`D`0WwjY#a^EER3P_^Ds=e7>xiM13s*wU%GQP_z31SvN3~0aB z+37ocQ8c^x#iw($-8P1kS2pXvjF5f)c$bGLC5}iO-YngWfUmlJfu_F^CzhlEq{oY< zdyipXg%U?T5FN3HUVv>Abr?#ZhRFIhAT50)k8hb3gMQm@NRQ!Pksjrp4_-ALiQ>2G zP~%+t#h?w_4HitZHif_DlojXJT`CsLBSdVy!b<8LHa&c-;d=yrke1}fuG_m6bJlXy z$sv_%>4gKiZ%gr18sr*O3QKJ2nQOk#1MVIdS67XzA|)KE4GTBe3S?+|%AS|{E+4BZmXD>U{c)z5)f%JQPX{(i7Q>sG{f+`$$#o;6)k5&t52IA9=YK*@vIPqh%=6M&Bv zNJ7UerbiA#>C_DcTFo3Ja#sFqbx!8e`_*56&h{ceZZw01F42BLov9?s_q#859XovK z@u|<^c(PuJ!30&Yofp}2zJWrCZpi9U3k;)l%bt|bD!lv5+jz0QC*YD)KRaVQV0!RO zY073Yt@3GM`FGisjXYI7N6j#fr#(phpR7It=b06neD&|kE5l}333~3l2k(5WL;jNR ziIZl-JAviBX=T;So^-2*^@4lZsqlm!qT1wLJ(rm!7q_g+4MfR@*tz-+iW_-ut62Hu z7Xl=ZpU(||=o8I_IX}o0WNut~zWj9s?FUM3ULLyWJQQTD9lMoa2ycO_^$Z|ZAbOkUf0q6=b}XE1NSM6@l*++Gc;piQAYc(Dclm!buM(LAXm zY++#;F#QMKxp7ZBBT_+>FxDsdP%h0RfDRNb)cht^VTmp7S49hcLD7N>;XAskPA`*PU12Vit1yJKuB zShJvLDH7oTzO?puke5Wec&0_bS5tt1)s47#%x();ln&q1Dq8SB(L!zBLnMI9JFc7* zC!hX!=!*(7vO79Nm7P83*tQy@WqRQ1HI8}JPnir^vS3f@KWrh6?+~WPtwJuI_Z9#} zOK-AGM{vT^3xV&+O+LnB4P3(rruXl2L6zj?hDp2Nt5*6m_p}rItKyQMC|esy9OvQN zr>FH~lMx{|s)!;2z-GzA?f2i?3B~c+cct94U+tymQ{Z!_`8@P`jx)7Ov*M&Dub4|z z*(!qY<<-#8NgQDk0)vi9-2Kj)j3iX>v%p08)Y?T~|1@czwn z=!nirIRW?cvguqtz$2M@0*;vXZj+#(!_jjm9O8naDaUAY!zqE7-jB@aLp$yT0z(Vj zr_Y?<_d!u&DKNAM7Yr?a;88b}*cO|=U}%X3h8Bq|q$Do7y=)Ftk74c!g5posRqr3$ zZQ!)>xT{Q8-+x>e`WUG>o2t(&)f!sZw>Vc6vfm6Xqr<{0?H7TQmP9C5t&J%qEb~Vs1z~}f{>Ch&k!J5 zD1!)b1Q9|+OOcrX0mG~eQHDeWLYQX)BmqK50tpGzsY|+1mwB3u@-k$poLaf?#3f*Sle0v#FD(|7Rt8u$o^9kSEA_!2PI>5VYF0 z6$;BzSjBC%My9RFXyvN9#dg4U0!we6Zn$_1LZ>YGn}_5`>Xc3=BWuzXr~yfb^bLDw z2s{84X7oBt)XPKVLzm)Vi~Z^mk)N7&Y1L9Xu&rBwcKfUW;BjW-41x#Lm3;o#e=n(H z*{g-H6JwNt+A>XW!=^V3s^Iz8kAAx})L!>I+z<8fL6FGBU60m38?EB1j#2(LT- zrWcXli3xLEkp0zIyHg4zXEc_d1dZuD)fDSux}d+-HG^vZYS2>LD}{e>(==|-d4EqV zCb->~M9D`%L%g~$q9fDA_DE%YXb`9<*cWK&=lR?GiZ?Mx|3kza{8eS32k>X<+2qgS zMXU-40sL9m^ge}=DRW6V*jIlRf=5(HBX2h6M$~2|X$^pT%luF4ZY1f6b8*msDOkLEm7!RM=A!;We#xB0TeoN2<9roO@+w^GJBYw zf3RnHeF>>@Uj;grAOq}R@8qt?w3%t9=)FJg=N(0lUwJofW=`bUJ~pm72&h4$56m*s z!^m`uadfGfpf|@&VEb6-1T9c4HnMBPaR;E1umYq>K+@>H4$0%kj}AmAxG%@VG>?0V!(F!UV5tp95Ru@u-C@6J@923lCOY zKvT&{I>HYCjL^2lkG1^p{wVQ5*^0>BWSf)_A}@dZbbM2s!E9iUJlc@VTp(Nr3zUqg z#4{%U2YVJLS_O$noUa39JAM9ueEdh)xeI9hHQ{y7F0E_D8wBR;dS&F?s&wqbV44$g z2s<-AaLg#cuP0UceGi~@wjT)AwG11>;9M#T9=|F4et1YL4vc zAt-}e0sZCnG`s`r5_B9eG(VtDKi;1x^()G7paY>N9@@kse$$@~o(;_z{5ExGM2ya* zLl7^$BRf=%gMhIis1=R6kBXj}oZJ7^o~5XrJMt=d&<=<}z*Xm}P$dJvo~3O+)`Hlj zEiNQC0t|M>esF6<<2cHX-0aitrih2w(V)O;{n|WLu+<=P^XvMb^1v2^{Q2SK={axU zk!9LJoldr0)Ck1K2bK+_#Z1oS=ap8?X7n}@Poy|10vy0nRvEDCgk4r$whV24VY=X7 zOIDbp;8lrZFURjw0O1g#;AKPV0I$@(wU6vKlp3KybAx?qV_o%*CYM?)S?@`&UN1H- zNhm$NRLT!ixrIUPl@9T`hvnRbHW0Tiyz)Ajk2lLyBN_qkb`1c^RY-*_ zk*Sx+Js94Oh~5Wrq3`;uf>UNbql{QGu&A+5tvt4!bLRi$G3@I2I$mx~%h0fJapBpJ z&{`PXn>q!vfPK zoLN|7>ILv(hhlA@aKCc-c*M|PQmGW8$tNoKLU8z@j{coe=&`u7Y8on}UXO$hDdmtR zZ<9hIepLK#YmIf?EYNU`pnY~}be&b)+Hz5|3N~d0XxfrqeBTPJ z7yz~t1lISS28SfEkcA5X6@mZc6Xf|cMV;I7VT=QF#6n>NB zI9z4eVTp+-g+xS3hw!iZs=!AYu9D`$0qu~V&5i{Cy`A=awiKOgPhfaCv03JlV#@G) zxXqWdPf$3WGKp`51l- z&kzNTtub7=wT1SYtCQz_0MDSxi~{#4uW9MP<)e|G_d{u{=(!zC-U*TD^*I}VSHh-p zG`?Q=4M4SB^QB1qB?i6&VynJyA@EjB^mkJm*2fERRp=`Ax>6~H@()uMW4%ap_mS8% z>)5xV z@<{{itQ2oBcPX#t2VV0jT1_f?EN> z^z;^`W2Jd>88rZF6mY$WdsCy;DMwp4Su1HFOFBaVMuP9gQ7+szpL`Z>>V_E%RQrAv zu($`a$)S?Zs!qUPm5NWH7wL+h!Mb%}=PvAoYsb6rsDqbC z@8NTjCq-TEVSjD5Kwtg{SM~<9!wf(@&bbUz3Mw>YwL>;0Y>Ie7U*LxcCI@%saJ{3w z0t}avw0`y8iCx|gkD^@x9c>)tzX$Np-?vljHYr{GFNiGq7Un(!kQzQ$MC6V178u(l9 z(T>My?|R<|4PtF>Eq@m%llTDMCvXd>fK+`H{bg;zFMr{RBEbJ~{^~P~uz_qCHU>m{J%&gk5?b3ZVb)X<3sCmQ; z62vJ>j_c#N?9wAn0}^ooFLln>=+w?KFv`kR^PQ59A1`)7KB$DfH40$^6SM#`3zf)E(7-|(N4)W%ZbV#Z`vu>RN@ZkD%Odx8 zQx;R|;QyGih#MQZG1%4@^w%ygm@Wjj^C)duTHJnkl(6A3Yd&*r^%_!i!eVotfUm=V z@C6yqLw{)yr|rJK+~U;opTrR%FHi^({2JVAE*L7B+mCvgU=GJzwBZ75f806_BbulQ=p zqWrrlOI!M~S^Zs;#!gT~pmbcO2&xolE%U!52mTIqRIEcCt|9}r*0H(hUUxEiixted!{5W& zKsH7z++iRo5VK-nAEPh@Yu63bV5gWN1s@Zn$2Bzlm+_tQA+DbfHDcd@^rFzcMk<05h+b1n?T$!c!R&2vKYglCE80dL(1SzXf?r5?d1m5FKbWiJvjgUn$6V z5Vma3eQb4|7+MRAqQ}0v!q99mPZiFl8y1l4nz1mS3NTOt9`a6x8CjXsNMCd7Md&R) z;CKz)B$u8=_ALapd=q;><%>kbmbgs(Gd)+aQ<{+2{4Iam8zf$obLd7;W902L7>FyG zAnS`{_1j6NJ&wC9t{5&98PmzmtueNgH^!R$kPdf-k5^~{7Bbo=w3ET$u*xk9QB_>J z>kr@V*?LHN!%y+*H#bBgSLzxD4vL-mYd^&Bt$Ej;J}j{J$)!fVgG6ot5c*nSdxoZI z4*jbv2-rv+rESHy0}d>R24~m=dAQoLt#JAc7nJWf+=-s%+ywL+EHaD$eDBq4V*w@mtehQi`hYVlH7kH{U z<+5+GlpMCF%d2%5_2IAweD8}G#^I9Gnkx&ElfY6iwVo;$(}4yy6!-0vr7K5H2?9d-BnofhuEcgSb@ZH zsdve(GQ%u~kFD5%?^NhYN*zA=@@O`Zht)oH$p>*gpr1G0xD!9@?C1!I>EdK-8A^Jv z9({hO=L{SeX&F-p^)T6Pxkf5v-l5xko|Ju*-CmKZ`;l`L3Z33GC9R>35-<;utqCYU6+XZz8DiPX*1>W; zi{wIBN$x0OhGt&$BDS|x*xl6&a8^vvam%1AU4>&p&wmRxYsTLG%Gch(?$`;QH&tJNZgJSzSu&Nxk z$VO1E%ogqz`wWPN-nVc5XN|0a2B7|??L>G0-TMcs0H*DZ{=mbUfAc>UY&z>NCb z+eRXgzTLN=KcgbbAjFCjgqE0Mql#7s4d)%9J}E2x*Pi+6X4o%n{8PUTz|OH(Ui_$KKQ!yO_3dWkbu4&kYq2~tiM z6reDbJi7HIbelX38PLaL*qXrM#Qv#R#Y2Oh}q^|oex#EL@%(7m-ScSy@sdoaRQozbm8@&7v-qXNJ<#@ULxgBh<=BWS23 ze<1ZfC|5CZtrK?hO0P()b|z{bXY3!{rH#<`ESDdt=j{*hx!vt8^_@}l=@PrR=UpPw zA+?X%TP6qlF&T0PqGuOlD&9aiMV@NQIlfZ&Dbf*NVj{X0w)J8RR5*>{p^N#go|=M$ zhGBsDVlL^b%nuA%U0P4RX56_t_kc%v=l<~cq!bFp%rK8sb!;{P8GJ>6(Y5Z4TfbgQs^Sy^>_%@`>%` z!NoYiOm_lGmeMovI)M!i(c$@AHXCE2@}6ya!*_SU z+e;b^WDf9GuoP!1c}sb9Wn~I;Ln^_=#%F!*L$3W+5R;@5&#j*~#*Xx@Em*b8<0|+Hpf<)g&wde`a&A{`}}2_ zbBbSWU>cvBY5XenyA6yI{JI*!h%UqNMh5cSl4zt?5ItgVQ3a0f+)!D1qVz&_)aUTM z0er-s3uvKcp z3o-Ty7vIqDFdiPWC{aEE97c2SiumRqmAJyxtxG%MW#TIVE-g6;oK3- z#l;dQ>C#|Zd|8}N)bz2FoSmt-OwpcYyB*ENxt$V+Qin|H11NU(y1|e!X-3y+7+bvF z$~aH2N3XWhxGql+b(7J{3!d*Fj|=HDi4RPNgW0{d;`Pw~JMXdkDVH1l--(W(y5crl z!f^5iDeIOnxFo`P6?InO^2gWPUxJ*|p%@<|oKmO$^IE+H5`opv2F8aRUVGqcVPu4E zXy`9-H8>g6XV74;6Qge$zLv`&!ZKGEj{W3S{dVH%-e@+88?K_;yar!=d z2gFr6kWTVMu1WS;^PT(0xwbJu+%JP?Onf#}|9+BuIcU^*lhiAg|CfNPJlJ2hbv?lTz+b00_Kr=MYJy4$)v9+Iz%wxEXxGYQGk|x0#=VxE*TQ{spnc0RfuJ#!#s|g{ox<`zk6=1ltqS5R<1Nh zd@-AC5HVooNd{Tt^nYigFf=sELw>i1>9&=Dx%X#zM^30NCuy4*gZqVz9R#~Ze?8h2 z%bJ37$((X$UG5a>Q&XI@g`?NfnLb-*_A#v) zHN>~7_Mi8C`?W7z=|2tgaE*HAc&=|BhE+ICq&zA@TY*Fe=sE9Wk`-tJ`76tG(mjf^ zG5C`yo#bSkCrEO$P>x(Ghw4p*%%F<)k!Xes*8x^aWmj>kpgpH>C_KJ2wuWIb@bb>q zY;~393*Y3_X^MU^7xY_;&_4k-F-{(LaJbWiO;I;VKMKbc?# zj_fNy?Y>EJ1CcC}!}BNnkkO~6uanBp>yntg&c=w@$EaOBFqpDPouTN6GHO-k_rB)f z^QT(>&;s~-r_-9beu)I?ZQC}5?BAr^kqk9Iz^Z-MEmSuF7!Gu{G*o{-)-v!tt1cc8 ztk(wh6UR!-o;^J`AWNek(^W1fqjp2{EUXYKoa|IqW!G8yyw@?ksIKh7(yHa+aFw7% z21%s`Hx3KwS)t~JoY@^Y)sF!SY;wkHY;YZ>HMxnhJ2MI|$HaVdC+3iYjY8wXv`(gk zn_6;Yz@0d$st>hM-;iI)p&;u-7369>n<8s=DQKMjDYNw8^pdNE6eBY|GLy4PPk@tt zF;S1A4|C3%^$F>pvQ)tDzuy~tovN|yAaOPUOVb9N!N8zHsWuws)cQY=cGO& z<$#;=HJ)@2vAC4$)iBV;Lk~LL?1!8{IO$*Q#94| z&AF5_)pz7yyb&)Gm%ph+Z*pK}$!cW)z0>Yn_Jq_Ml8D&f3dFwyyxynH^xx!y52Y$B zPLqagyvT1o=i?fpn+=1Anc`Qn)tFtLO$Gro^NHn9EQedzm|sA8E#Ay!JkK11>2J=s zhl&T*K^A=7`wZx2h~dxAON#jIhu*JxdLAct#{tI$*x$=#;o3S5)6p~MLQy0Ist@)` zObs@F2bQ>GM_LUDDVKok2P8-Y2A~g_VU16t$sq~@LUKLHO@loR!~t>bY(IVOW?jhq zgr{b-=NHlUz(s(&ah1@4+DMx)ZT!^bn79U9Wn9CQd!#MB<{4Z!*mXCZXR|-v=e>0H z3tFkK#9s7)t-wmgFNm>Dr|!(-FD^-W9-4Y*{bQqKL(gIoL!4n}TS zeI!6|=ANg?!C@rOAFGrn>(^%{u@(DQs}vVQnYWK~RPD`Hwl3R5Np{ECT1|QF|KVKd z@qOrCYfgS!WjP@AX8Czgwsk-~rk9-Ssph>4BBodgZo5uenfAS}9-;z&VXuhBJJ4|c zQ?$}lu&14Gd8)!41^7Ex>x%7&CL!?~ggNP#fnTpBYJ7Jy(?#-b7?yMS*O9G^yYcU* z+7x z76lbKCKD8u&!Ka#z@ws^!u%qK>o6_y^`n8;+(|=GlN7Am>#0w|gcW=O2cHFky1Kg{>bu|7xC;bJ)rTDB^Y;0@`uRVQv>vASf32d8^W-}Ea zL;a;!N4#~&)*2RyGb~NS5FD;WO?w{;iamx=d6&_CMCDLst+%A!9R(_UhN@Br`%M#} zf(V=QoZbB!U^$ayUshFs^4hxcauQ21)W+KHm=6+vf}}MbdG}&0 z%eKZu{vh$f&K*!llLP6T$vVg7Lt|FyA_b)A+*0n0L^2v5!!SVMkGQ5X4i;Ar;RmYm z6)lirRbFo!zz*Q5sNB3z6>qXCNjPDd3iFN%nd`5C$(tU2SZd}{8GTz&1c`u;f~$E} zMH*T)V~cag5!`vLieZ0Pb{(HlcjdgEw-F-lB6VY9wO^PbgI7u1Lu*PJ4E zWUrCqsC2>dVeB`Ft*;PU0`9XOb$2BoR!y2;O2kG?Z!MbD`Ry*iiUIfQbV}9X60&N4 zb-YqhhhJvSgf^LLA-}6OwFfCi&)aqz3i?Z5TBfh=W`}pwVwort-3IN$q;0p|2+67Q z(QD%F)Fb_^EKKP2p2bgUQco=+Ie}=1iHU;~Z>*JOF=q*!M?}lxxaIa8uUBV_94wuJ zIwXt)FbfmgImANTq`Ow_ORrv&FTIOqn+k+eK!{fi|1I3L@xMgcpi^u+FeB0T8VYh_ zlvY9h&b7%iV&%3KxWXo(l^4vgjgAa1BOD5~-5<9+G){G~FamGR9i#h6!7GUS`^>nu9?25x&a zhKwQ(O1m-6RqGbd5R!@aUbIU01E7-0@mk-Wr6+4!&f?Azzq>s@9Ew~S;?5t-n?(u& z*m;E-Iy#+`S!N;fv6aY7uYuw$`T(}ZtM45)a@>Ac^YLTL$uG*OPxPxfvzSyl=M539 z->C|;{QEc`0tYw6?cYS$Kv8V=?CeK!2MtaGplC?An1`**)D0POh(~G-L@?pvR)}L8 z%U^(e*p=T<*i3`N_fRtrcq0)qF~vPok;m}M*s7O-kh&p8W}i1SD6q_u)Mv#&iz{cz zp|q#(;V7NM(Hw4Ov(_)Km#^*+A3xQ_df@cK@{-JsJXE;DZw2E`#WINRv8do%KUi=8 z!p;XJjcmE#oF1~fZ?u&$uvX-naJuc4+L=p15exY_C_!Fd7092Hys;gIDYuP@s``gBc)-PHbNRcZ{mB7Tm z9H!K7cJ12rBXTDwf2H2a$v1t0p;60Q z-vJ!C!Ae+p_i3-l9XbWXwiBH#Dj+Oz_EAHdx@lMAm>c^#%7&oQ_3{nBysos2?1HNc zUxLk%g><$|5d{N|9`7)$;ATOL@}lzkX7c+O9aHvk@5(Uv$_#BdL4oeD?!O)rd=AV^{1BXLkoHS>&TvaFWWwX3#u(T*!jQ`D2&c5BCc zBiu&o@)I_ezW0hKbb~<>84vc0fX-E=U5}QiQ&OLE%tB%@be*=Wrl}!0H`V zVc6a;m`QxhsZY#1E)nbC$@KH1MVyu#lyoW$eX(Dp;FknNTHJO;AlE!+ zo$gTmNk5r{1V{&SOvqCv^nOTie{UH=-&qf*w0czTea}vOV;UUE?*JX0kTG@uV$7k} zghxDobvEU>NQ3^`FhN*;@e&iMXnw2+*`C+xZXB9nH1ZqF)3b75ZA7XS%pI~eXLobB zb$n%afsqGab>mB|{tzf6t;g(1=)YP>j^K|J=SIH`>71TY^z0dA8-|qd&pM)C2YaM! zv6`|;yLk=LCZz}4fF=Anhvd*^ zXd5xb5Bm$+e^SErt-v_MmA>rf5rPg}KS&Wbz~vI^T$rCF%)Ry)NXNaFJ5DLx`6d@# zgyT{lNJwkB1H3;^Tr~2T1B3MaFN>7UL_$?LtgHE_OsyguLTa^Egx}W+X>>JhD~0B{ zLZTuSq_d&5<;cO1Gmg9w>h+(NzeKr>Bbh%B%je{QOU{bTAx7RWGUlU@=D4h^tbitW zcjbCeJTk2u{$qySh>fw}9$)~_t56SS6$JngT>Lk}zfa#QuA zmVpHEehg->vo2aO*qmKcBc=pm+FQ5XL0(h8WJ6FPq@tv5eip6B zGqvF-i`hfo$h5Wyxn;GalrshU7%T>KR9i`MA=Td$I=5LSp=SWElmt^SKC zpo80Uux@}%Ovdh;;sp#tT6m=zGc&8;c6$w1HPtC26>$Zluu7qi+V=cx&yP85>>AZ4 z>>kLwuA!^nO&yCta0gH5hTB0!yHFXw);BhuT}iix_VQi1BO@;Oxjy};-u4wKTG2D= z?rZO39H&~HBG2JxTbv>1p2D6>DH}Nm=MpPYWpTBO9NN&;^5o>o_5&Mg_~NbW9pbjy zB?rU5+977TZ50ic3m8v%DAiq#paqsecIlj`>LYG3=C(Y@4a7?3mrzgNcXJ06Z!D@y zv0ZaTfZ~myBj>%LO@S|xipt3@%5}`wL-Y=phU;@Ur$dF$gwwoFX4xt*4^pJxnsrNF z4yzXf`N{rO&Erb{M7x{s_Kv;3efZ?Hb5$Y<+%5NwnBI_ZK=I}bJu>*CstR^H_6Pn| zy4mj4+Jl_T-lry{H%SJ3`&SIhLG-d|eXP+$AcRgnC}o^?zsw3K=TUl+{eE8uWQf+K zz1H_KzS%mQ0|lw|q(vykkCs7VO^nCMj0< z;i=Yb`17{=%!tFG`nGWZ zi|FZL-S4LU5cTYWyTa4`)^S(U?7N9A3#B@R`RmMqhcr_Y?YW%S273$JA&oElG0Ww3 z;gp=gxliNRSV7)RbMWF@(ofauOz+(c#y}DE1Hnz%t-Yv_h*BQC7#}_dD@a`J980`7 z|D{?<-0W8UsM0T-7lPx=z;OBw|BD3GGsSPfVj5!B0qxf*&nu%76fyps557t`nMLL0 za$h*XBideS(0Gro^1E^8mzm#Mh>0- z8yC9V;52Yo-iyZb?ybgG&&}pVaK77=A!61uL^FbT?5}4CS%qG`2upB7!+JBdiOz-1 zD*b+XLi&O-h%<#RXMbj#mSmNZJ>fqGS`)&?-zGc&=v?8A_yEn-2^Z6k<2T0__S4!l z!{eFLi`b)j0gPdCBh2|)WIP+t$#opT?6uvAO;%4m%^g`fMJ=wq;nldHK$;AT$6Zsj zY)9AJebN3jj8Ca6xQ_I0es@(I9j72Rm?Yke@9(Q&-0w3Qg68ulgRg^Ih6lQ?Z@`K_&I*rz7re zJkI~-yB=@)VqRjz%p&u??X~S!(T?tNJ-xO;bUHfGs_2c6kF_y^b>H9jlBdk@PHj%d z@D$+Iv>WQW`x+xt7HXusZ@j=)SU5S_i(@DR} zqCe9XRP#WOpo9KC(`iQ@mJU`7{{f*lf0AbV66zghG%04fTWV%o4PXN0a8Xfv>p^+Y zR}-kpn4T`_6GpDJ^=+jnL|kJ+Mcs<`vADKRrf*}COpqeXG|TQGbWS4LM&-A5ToI0G zFR!dUq>!dS$W$>I6j`nX?BTS56kxX%8otV0?A00=Qs*`I)V!g;yMgc>{(fPNF7Km` zT3dn@;1##lc~O%W`>gA7JE;cgyTdUntMZ5xOi!Nt-Xk00HB$X8(2TMcaZ^_}=7E3r z?dK!&7KB$`Zweyb#?cz&>j7t9+Hl*S=ceO)Fd5*teM{da2Ydee{>Aib#xc{DlSB{E#%;p^r0&V)k zT=V;9DHN7pNI;E*USpJE9vVUpyoC;Yc0s9<%Ju5{5Ida>#d8{n#K%s$p!ZP{akft;cQP!W(}X$J}3mxJw|LjHTasU zDFi8CT0HsmqtG<eR;-e=HFzGbR7 zNMOr&on*JnW6>QQ(G*N1KTweuCs^tFt#*Y|vVDc}wwqIt&CY3c)a!;3fH9q;j*e5Q-Qny@ zBiT^I%gD7MeuU^?o^_EXAiF$o=ssu$;{UiZ;O#uSN+TDj7lrj+pk3x(#8Zd(tqHPf zl|{(9QC({wy)H8|o#%u^Zp)~unGvw>JE2A4^2DRU?D=zA_bqX^(f4(Bgr>wlzZesV)AE8 zw8~B87{ml z9}=-<-PoT2d*wT1a&?GJre$9G#dTxFMU(}A1gM46jl#bSUsI3Ywh|2%i7ZnTLB3UC z{SuYo3s|{|Uk~<4#oN?M&kbm>DhiGddz#>$b-Op6mqeT$ru!7455x;P`h`os$pzwO ztr(3;W6XX`n3(ae7U-HvSX1l+vrEJ~MKz*2)k}nAg+w0{^$-y6MTGzysH^4hT}b8F zsKJiPyg2!LAv~PF!%qeieuk@4uhv1B#C@@N0s9ky5cAF~`=~2u{Oza2_khwnHc+#X z74GAj4>QTbmD!?fyuCrr-^Yv=C=Uv!Gf`U>l=IS6WM{FzwXYGXR{yoa4OC#QcX0$XjW5^O(Ga4Lqa9D3&{iv$0$zT z8}q5eQmCP~fTNL#!=W|s3r(#WCV@WN`r7L1OLE^>$Xg_h)~Fs==rRp=WcOmtdU z4QPiKY3f*jt!jBV-zPCBFu7N&E(m5@8rv&enH)81Zo!TdjHx^}ttC;bs*Fylt$DGD zB5+L-praLKgrd_o;$s`poIifo+p1nxyJA+J?BvX!&yf-xX~UivZkZj=#9OJfeo)lWC(TGE(FV7He09NvIgUHs2Z>2<8-Bvm1ftO@zUme-25 z^L2p6;!Pwk(3!sbKG)14?0xy7qVGy~G%G`ZThtCKk;rRhzxc zm5(?#yf~$wk_fC<4b?iYETWyY5Y1dpdh44c#n#}ST715J1!q5Gw^_2%G0<8UY#>G7 zk;N+!oYSH+UTuo4(t2zS=Z*9?j}$ky9Dn#OJ^#WyYu!o6h7WbXjI*yxcW39K*Oxgv z+ltHA5Az<2UFxNUg>Adw*1m%7!S)8%PG3#EJ79p^GEIIB#R5$-gYgOt#_rIS;Y_*d z$YGe|smSS!ZG$H8M~NVRM$yguXpTu{+`zWPbMhIKZ^M|v3t^`u+hT^J^ZROk(QQxY zv`|5f@D7z!Y&YyWnsOb^{~6br6BCwPF0MCw*#el&460C+59^-?sed8AKQGmY7~v`j zAUuRmfV3;)_8jtDy~r}hNF@5g_ImY%BTwAe7Y0HH!mY#UYS0<0nz51#t#D^S?oh22 zN7=x}hreiT)H&O2>fTQ-aPQ8wnha;R4qH2f*a`v+ik7+-WB4lH4GV-)5nIyryfx|~ z+7(+qeteU8?5B;BnwEn=ar~5-8QA)Vfd1*P2I>DKA{wgvzd}U(KIPvL5$ihf4jfLOA(?8a%)bYKdnN~VZt2tArxAS#*DXv|cHMFga3Kw)XJ_NhZ{+NV z94p1BTR=Yfo(!{77>i!38d|x3-6wWF0UEjdgM8%r3``3@R+24?xf?>uhS*Dj(%SVS z*|Xh~qVv(P{Rb8aW)|d)kz%E-H^S74^s2w!2%mQ8u0Pca(6VA9p8wu#SWTXOcEvrJ z9B%DljU9!#>@$w0#~UH)_L%1zlJ!tZzX4orO5*cfm#>=ITOk79XG*0Tv1jJ1eUO^b z#Cbee6|g%u5l}z)9*Y2^v~FczjAvOmu>M+15Whv&{MO!`Imtk)Ve@1A`^_4JK=;`)|D z>*tkK7}&Wn?Emf?IIri+lK^3vAEE%)%I0oEYjL&xfHW6Q;2Am?qEoX=zns}N|A^31 ztquvuxjjvY^ASc?3IL2{_TciT3VB3eU&IouXxPMhmXvKB7#bHsu?J+D1RZEbcVSX3 zz!98}oC-%qChk$x`hMlc9$m4S+cq+q9~zES?}aO>Ik>*PJDey%0z+OidS`1F%2S-% zj}nDlL8zqD@NFOjdsHi`h`R=06P)z~h#IzeT{lVj=np@`Z(!6#B=?M2c;%Z2d%qPo{! z{YHH=q$$)m0Tt>jg?aW&P=I_Pn6a&>?ed_cG!e+{2!OOcb z8HHiTC5Kd6T6ba~wa?^k`8&wf={kT_5zZGSzNtdctS#s7;snZX-n@Cx&RuOp$aw(_ zLu{sHKU+eZLh zXi2T(;S8J1^t`_Z-l>~-zVR@F-T)^*;Z~0qxL6#Znwp!$2kB9eLyM zCf1`om;djmo;r&J0%T<-U}+kQvFEdk!h`Vu8irAP#p)nLU#*Sk(Vr?XJbBV)h+7!C zcYDj`8RX-22z&}bD)`F~IR4xJUvfdQ6UgI{tP0FZRlxeiXC^w?Y@aPM3A@3iWI$qK zVkX;rs%xu9R!Hgq-R=2QDj|9?Y(*HwO^xD9wS9BYS5O%|`49_s_w##EO=bA1H#F=Q z!HE7X{h#lV&FS^S`m0k&;YQTvUk>QTmKc^G!g`=+rmrJXn+>rb$8FX^8}IA2_JE^b z>Be@OxGKMBPJVYH>?Q;}IdY%^o3q$}e!mq2B%E=vd6U^^NB{xE+G5b!bJ0xNRk z1aqmN@xDwB777U{s}SUc`=5FET3Ty#+uNBfjQ8jIBoNxxk<*P5KKF7Rt|;0{-vDB0*ekePXv>IP)3IyZ7`@`H>lpdA>Inz! zzlwhmx2$u%i;4&ec~TqA@+iigiE}C#?Y4KhmS35w(XfaDn7OfW|2E8hSS>j^LkcJ% z$9{ss0kb?Le1xi<60t-;p~31ey+gQVfErkUt~^wC=Jp67whV_wBopz^pc>WB90K3I zZy2>3Y`D%kQLDjmYQsG@!fp?V%HMUi!X@7FGrPB9+dcE$TOw58WnkvbB2SBFZLh^~ z(t%w$Nu(+qxb5LX1ibipToI#a?v{a)bgfAACm|RS+TOKg@?)T>3oyQ&Omyb8JUWSJ zx3W%=caH9T)b-OQ?1i;H^dh0S&+Ioo`Ty>_-tf{3^Eb&}%99c!ZtHV|-+lD<4Zi<5 z$ium}^aQQ1`B|LB=}-#|K<&cAJ}(ztroAlfHO)C52d2KN(=Mch=im164w?!m=xI(X zA~|v1-mK|$a+P+?AHC-|c!0i-Z`orInc4AfTY*!^=^t5Qf!{SI;^Ov*$^W8tc9))3 zYi8=j`~GD2BFVFHFVI~*)TsE5X3wHr&YkB=J@c6&L7q6+c{39=qp1AT)!+nwU*HWw z6QU<%Q7>q2I9MIZjz(jBh#BV#1wYq{NMfjG=W5n&FQO6ApV^f+_)YEst|iC!5?>It z9!ZpYtJ~|Lo`8hQS(;1#pcZKTl(>=o?6OS;U~BD+=#_XkTR-BmU+I9x>H)naE781J zozDWjEUUa_Gs4DN^-rc>8Eaw@$W%QY%gpEDxeKFRX}J~_-MXMF;5DR3K*NzE$4{R8 zne02%C|}R*qE3GrYim4_nrL9wnrUdmAyyhy<+Z0du9{4h%$oYbvskHUhI81X3nphw zqWYD*c4!lOo;RpK5qB!-;q*~_UXK0)U|HD4QxVwGj@+RR&fu<-vCTZ_jMENzJ&ds? zQ_b2B^dn;C%2MsKlX#I-_M@#IP!`%ffik4xQjuQO#&5O`3MtE1%LP0>Ty2PDg_Ct< zE;V#yC;%ae1%`i(oeKReQulFD7z!5g?co*LV0M^co1ddL?3F zD*R95lj_cOc@DLKX5md*HTik*jQQFyM7GWY|IuyzmHL8CwdiX{XKxt*_?NR~$Q)&8 zMhaX~6*(`?O|h<9Ol{>PI(PjGd-DZXt6&!C0;pH$=2@qznxURh9ha*`?0yuRh3=Nz zU7#707gzay{yk62`S8X>`)A+TM~^!~U$z`vUYhuM2J)7t0htb;^<>_u-+A!z|HIsS zhBdWzTf=}TxRE9*DkUHSDhMLdOH>3@1XQF+34(ys&}&Eplnzmm-c*!G@6rj_tntIHG4m>D{le#@s(!ZgIVHr$eLbEZTz;rKdduA za61kazvES391*TtvzU#r6jRD$uizib(npiUS+1lqYgLr=0oTgT7l3^O^3I~@Kl(*U zHg_pHA^>zIg*pu}bdIqfHYSBKg@hZ|9;|J6kjC;4ON-pyG*FAk|A}V+g;Vw{kkF=u zb+#AmxNm%x-vyTh{e)5^ob~oynmXIW_1#ErIn+^Z4VO^dcZAf>$ zs`n+azeg3Y$1d}}k88@r$mMP+j)G2uWGR0ERq*DCZ=C?3X z%pa5l@xV#zAiu2ti2RBo=uQPmcFG@)=~^Qiu9YQbg0KmR@mHcbF3>|LP&pX`7drP# z?k`uD2&LY z+#x=Ik;ut3Wx5vx31oPQd-Zu~b8W%BLKe2=w$#sdrtyLE17E}lqm}rseA`7&Fho=$ z#C!MN_fRd?R4GCsLf4ll0Myn~cLs7hMnN6ChLAK3mZ*)Yio=+*DOVAH3wWZ|ze?V2 zD0JF-5u%pIYl=}iZKu^nbe$NuoheXQ0OOvkHt5+BC%{ z3_n++(Fns4FsOozq2CXn0OTA{R_qpu+j|t#RedwC17fB%7@VNH=r~4eyI{og%1Sjv zC3)KY+&M1E3dP2PON~!(HByC`G`ItBzVhXyYE-%7@0>z<=mC}qo{Uijio`2x@JLoJbLI^o z9Pf-##?zGU))oSir{OZ+p1dRQ!%x4lL*LYG3j^59Je4JFjd`E0DUmc57_<_He!srT zA-uBb$#WF-x99(lx5>)16y6|fLfaiD<$6i)nS12J^HvW9_zUV!4p0ruU#`X`U3)w6 zOZ3a)so=SqI-=)hrN71BSt2hPo}#2|4%qbtC+Jh?J{rJsl=1AV!-3BS+;Dq3cCs)OItVgLZJeCp=e*GTLo#*Mt zv7_Z|wFhEMZg$JUL!&vljyW`ji&fFibN%UP7VFcMr6F56x+&>gn7roR4){KM&%Le@ z^aO&$yZ}*xip%R0OB)E;xCTozr%#Wx zH3_w{TcS@n{>ljXYv%jc>w?>K6tzKs`9YG}OmGBX&Hd2hdJnu9lOgnp;($g?W){#$ zXWUfpz-Nh6`da&p{5hcUaAm~>px&NKNzmW+X43;2i1<+T&FtdDRamZ+VWBt6hMAv> zch1D<+6MOx-*0P?U6MBtc*ANAvQn_0Vj6j^FSW^FMf~CDG4ZV1nnfo>SQ&;Ej?1|z zcy&$sTbY%Z=Y0yr2%T9ORR;n7I!k1rE$qvl+M*<~HQaV*U}VQ2X{P{sIN)H7S)YK7 z47hA28PG#S=1yDZk=N7_@$b~}zvy@ipD3|DF~~LLW!EIPdPJj?nsm80?&R5MLXYOG8c@RDL2jPKltZ-hSXjldmHE1u}6Ry86z`Osp4MHh{smGNXaIhBv zh@e%G`-y|4Vzv5Yt4mvOhDm%L!Dg*3V7q$h9EeiqM#X+GK%G!9Y zhy4PZx{`frW>(E)>Q8Ri((oFT+16ZAy-KonR0%91t+!zORQ zZ)Pnc$;<0Rf?P@5<|*T6T-keB9u@dPonV8NGO5)chqUJJE><;+49?r%S9p~R9o%u# zCV8DOk7!t!JbbSq-rZ93UHcT=e!*u@3Oh*o#1_o9irH(iX0{lCX7w}ywEHScfJg>E z@g4M6XzEvX#PG}7f!ph(^%UdUrVQjz`3Y5ZX5il82Dtk+=HvgRSr{Kz*PDp7EQgl| z=Lc9b!c6Z;a?(X6zVoC3~Bt1t!(G1XT&VIH)nH;$cmpBaN~zoEVVX82&`ow}kqv-$hI zZ^K9+&$)wFDi-lh)#P#p8t!ALN`rx7i_XK#CmugxTWFN`%%Yc zeW3}dGrt$7Kyvdhs~zQ?qint0YYnSI?hwjC+QfcX&NXI0#4hH#yXiXDNANr|CrA(trv_Wh)OzJ~)7Il*#(bQ2plY%HwO)^xp1vh@1Ru z`wBpn;srXP9J94#P`t|YD6o|($=UL#{~vN>7pc>kmw!JEop^sKiM%&YALi9<%Ag+> z9Bvc)P9ccXZT|=6VE0AZpt|6p9{9;$aigBi>oUFG>0e@A8SJ65F<^O>;%@nUG{MBm zA;sE#?<|*mc7PU3;lS1lXsR8+>E)ff0k+EpBMNvDuEpzF=8Aw4lP5H$1d&-Sw)Dr_j-ri>0KMip9N}PSI~^t=gCN=O7Riy?!bw& zfR9}BCrnz+A_PJJJiGj4w6(W(&irkA8m#}qQRj)QHY z@!gUC+_tM55xh|n#J}nOHlJUTrkn5A*i%fe zCb6=@WDVaX*<2%)sR|Qm99BmpEs9>3J_?Znd}g$cmIj_hl-0WLa;%=p_a1cWjx(@# zU_Oi<3zHZI%t8j6!FDMCd5Sl-!AQF`;0uE?i=Co0(e!RwX%54^;LJ9RR_ZbA-Ik$2 zo7p~sH!nlh$YC#FVdPV=7(PQ@%*rrLr|UfTFE0QDY~V|fRQ717`^fpguASn3CN8@% zw4*P1O!h=w*#?M<+WLq`DCD=Z{Wc>|B>-tMWuuqtR37g&yP8Z*R8!9}vyO zOSIq>Nl7K0;5uY%W*h7s!5F43hv`3kp8Mi8E@^0Gq27c^8X!`IV=ox$S-B(_I;2&u z(F5i!=t>pL`oY6`sn){TM9cc#5evb&v4CF}w;E?W{WneTu8q~N8=%%3i> zz|^UDSnhd0+3PR~H|WxutoTNLxOIntElo~$Z6cv^ICTEbsPW-*F0^|e`)uUE}w z>@L{tutc(KPgpAj7{jb+4eKgKdln#fD)w5C?}FD;W!(_6y^;KJEzkGy&{VixZyL;X zbJnQjvHjII^4vk;F85iMRDm@WXX`hr$Po8)q3JV*$n5XWBI6X$lu{QendnKSTWDT|UK#u0px|C_xVs<2NHJX7e-8-L6A=U9e_PD| zc$=I}e`1AZbCh}Y4~VMr6Y#p^6YzF%vSlTOJm5#1(69CEQ38ltNPvi?{5*hh z`xuV&LvC-!&lPai7#i}8!Y(@b#XB62a?L#w6fVwI3~6ZZ%)eRkkULv4Z>7;D+gAKs z6~Q1^9iZ|bJeL)jffW59XLbZ4DLH%nYS&?8@4dV{ExdLux#AeP)Uct(9{)28fIH+y z3%KmA+ux_c2PzX9p847RlYOn(r_XRB2gG%3VD1N}P+2ZgE9c!I z8H=3%tG z&3Wf;Ec%oCjYPl>Qg_YDB*7Wmb3^2y`=?&13`a!Njk$^LE^}AL*chPk%(j|6t1gQq zC!j4i4st_rlDeh(OjQTXMe5dCak}7xVZ0@vQM3n45mQSEb`6vH9K}~Y4=?}0IenW^ zo>MOeiLO!f5L*quJZa!IYxHX0@8sMUf!$}Q;JejQavaWzluZfyNnprmY6>?A6NpvR zBNdFM8LTZ0vmg5KlG3?4Y!R-TzTJTIXRh^a@-)f#DMKB!o5o9!{r9c5^BMq|tRXXg zMBEUwA7Vu^Ee{P}>#c_FWpFuOp{^mwxXx9Dq~>XNyN*QCBkZ(0rD@8Q{{js{>d?G6bw#{m;N$E^CI#{@f+J!p zjl4JyysoGUL1Sq#e0=ZQSO=Iw#%<)eHl2-&L+s(mcf7GN`PY6)Si;M2dXzZuVexij zw07(-eq|w=lH~I9IA^lBKDB~qAoZA`PQ8kDGuW07QMe2fam`U=6ahc(Y~0=?i0GLo zpdH>G=*@0PW_N@|a_@!Ij!YOUNUrmhngH!5&_a2 zTNfeN8qYq6kz6Ry{DrG0Y@)@tgsdd#&2;XMv^+0amVot@>9=1};11kzr&;8TSc!?-k$-KymJlW)u#$* z{f-etn6#OimKtKEk*>UPsoe)N`Z-OhqalmxEmnxtSyZ0#p{|bbPSZ$Q@(;N0xt`Hctytsz z8Ow92ax#G`C(ZH}ZG07EC-%;=NtNH45zJg>Vn3fv2J!-4r*H?$|+AgKDAKRCn^+W$OJ~A_SSJ7#Y)@W|FZEMTPwI=kRdqO<7rkjMe;cuJ2SS z5(>PPX?@gj!L?_w(rRt=W_4;lLVGYDakz26`^W~Em$7gGrSccn-#>Py0BTi19{f1$ zJN)=jW8bXh%zg#=?4~wiPjVhXiUz0d5bZU#GNc_w4Jc()0wh)+;*Nd#QNd11Xa%}f zvsVdO-G?m&f<&ovAnIhbb;Yy{^coSodD|0*I9#M!O~&tZ8&H)!eu2pZQ{R;ah$G+^ z3lqsk`Yz~spWnA~e?21Whwn2?i78c+B5W71FMcXs8 z{N8`rfr1Kie-VsVBX)A!e{fdplRMV`kB*=-emN?dwls_&NSoFC_WGK(785hr{otpO z4hUeba2ySkF{s%yDlOkpvfU5BYjd;u&QvRS4_ZpaQ5vVA-?~(U849Dwatd(3EgZg; z?n}hg=U@7Vv{}TG1_pyw!|;R1I3&);PR?m_Dw&g5y=Y=ExwB6ENJJC;=Ii{A%@e6p zX&)Qh<4GUZ##ZyQldky^*F=V@rr}{&fD5ghx)+5kIeZZkT5jO1BR6VNLRwH z@q-g}X(Ij09RG<3Q*fFwC$9l#x5~EfMy|?CCzRF3qPQ0o${c&3Lu3$jAK5*;6%-s? zg^o7rR+%~kY-u(Q>JF4L;DNY)4n%*DyE!~1SwUibA_ zq6&N-urP7on=m*m^R;u56Az0#-#9u)VjF`rC`oNbFS3S}c6vfoe9WugWu}*SFQuLZ z`!=3Gv`9xFL~Fc9t1H)1;#~O#3WZjKNcdr}bZvP4g6iMSxLC0NjyKJb7g@f3v3B!d z-45r8^CKoB*h@1g*J{d)4`UsdlBOLgmJMqV($j-LDkUv8lq9tlNf^SD_n_p!ZE-3V zyXla#@-6diHcD|fQ{>m=y`1iP$B6d< zRLpeAx}~d?tkhG3XrkQHjP9STC6nY_XbfT>2`_`+ZtLrm+=1_(-bWuIC^%|b&CcuM zs%sePgOmq1uST=+eHDIl`OW0@*O%_M>^(`ev+Q$U`(CxT=Xt$6FFV_@&qV**)x0pi zr)S<>6TJQXt`DoA|L!`KoZ99p=PDWfNT{tuabwYSU2ZXVQ4y`+?~CYBLczM_< z#oeh&3N_2)WpkGR4tN~KCSR$vEr7aPnx6rv%=B$Gr$}xXg3PUD%>2incOyCK#3TH= zqMDx&*`8p{<6E4JRFi`mo}aFpE}TKKD#_f(?lgZio$cpc=nPgBt}=H|kCBt=AVtK) zk@jtQ8x-|f-*LRi^K#p65<<*d`9&BqSu|Z0E*xejVCCjT6kHPrRq!m~AJ(1B z*gr+;L+>)Z{CNwXr7m70eKAW7Uc{l!;e_S8sn25G8Y%wL4jcM{H=3bOzWw4-tBUf7 zMSM$^zv*R{gH|=v8);vD{gGy4BOJ>u4R;_XA!;Z z^5*>fUG0eN8|v|KgtIzpBIp&_?R1M2?Cj0Bm0%-Nkz|u2-CzmLyY}vyur?i@V6EYI z`gZ(q)K}xjcEFtD+wTG^+(y|v-p3afUZ6;s2`sU@MI8UJ+n(DM>m4GHwsM2>bwrGg z&-`81_lYEu{sXyIaXP=LGdFub1&>Wet`q2q? zHhnxy;KbD(3AJb8$(xRC{3fSFs?Bm)Q<~>cwfmLW!eK-7V6M~`>xfjn8Zmsk>h&#H z6YDvleVgkNIgPKN`}#vI`MO^;ORjloypzsm{-S5$Z`~JxQ z*pgH%sBj>IHnw%J|LwK0O_i_0tQI~sv;!L2;whwlaOX&#DZ#z3y;K)jio6LrwElBU zvrC!JBept(6|lehXe~7rXLy%&jK*m77X>f;^^v*VqnDSYO%~>u@E$Tr*!4T)DUq}EYXecP~?$51LLf+0R5(1U-^X-ExL;O6Ps^3PeDo*OBFH_Fidf!yTND;ZY7w$ zedC8??|HZ^nq;K({N^9~ZSxI>>R(?7ySnovtpXpWqfNV_u)L;U zL)`?6d|~MqhM^ReK73ZL`_m|(m7lMa&*x2K@9-OGRS4;%F|75i2^XhVqDAyasg6Q1 zuLKR0)hvoMH^9wv&+er3Lc5?s%?%yVnr6KJ`T6=d;{pAN^Lk>}oEfEIY)#*lYgRg< zv`tFb@6e#lwJ*QUk5F&Pk5tcQ<-Wn^e9cTf+R$|&!x!XrLwt2ffJJ+@Ib!9N#;(tw zNAABKp*$a5%6l4R>+WQ?u2Qt-5M{k`cigo{=C1qEzVjWDvT%wsY1zif&riUJ@KtVG z=Ie?i#M8rPA;B6$%OUht1nyzz{;I0S7rU!fdguFOIb7vA<}Te{p0S%0EqA>il|n8v z{PN>RMjOX)*@b}!=ccf;%hNWPBKMibWBt7~LDI7$@ReX*`1iX}3~3fo%JO|s?bs%p zJ){!FtEr2A^N%yU{}U(v^`?LO4}hDcZN}Zq)i|HM^_anCeo3yu+zqxvGM-a84em)M ztQEzEi&tK$S%iu^#*OA)x25yiY2BI)stn?&TMUkis>oNaG2(vi!phBbmtcV@!D;Hpo$eql(O7%UpD;I&Uqe*_HXBp20~PkuO9j3 zo>i)y3-}Z!?%}q(bT&B3htUEnVzJp2)GHz_^8B#=u7_Sp!HTL)FOmyJUF;}EU2ZO2zOf?+oj4P3p&s(Y58v2- z-Y&1UQzgR1DQ7pnY3H0V3%|McJ4^BEcf3Axg(YqyOg0TCDAHVC^C0M3_Bg-(7Yy1q zeax_?wQfr6*v2D`fKLH<4&kX9(i?qzw@bIfU*ln~D%+AMy%Pm-M3fnS2Y2tv$273Y zup!(}o;bCXrscPmc~G)(OjtYCC&|xs4jQmtdAPpo&x*Lxf;jr1(eDkF^GvE3Z7{%~ zqzO?!l(j-l%jUl>{V-OSqJ`Z)dc5~8kkzqR&`p|7wk`q$R#sMDuQG{9_1bRRJ=zf` z7yP8(T)S(<@UN`kfBUq7eBp%uUM<5j=D94{TZB1`mZoBgyHOFY;KlL>B>a}cc!7io zDHrPK9ujTtZM)KOcJmIqpi*mRYEDjdK{6cg&};zbe*I=V2Q!_lv94^T zlOemaF~8jxj*YWPjKedvr-k#fn|DLDubfbdgfV&?Tv7A!D#_|O4_>*Ve`;s+BQp77 zTt$h@+8x4~d^x26^xmWE_mWMUv-rVHB4D5SddO-&Z)>grKKJx#e9kL&(ML(wTx~yN zxqtc#K1fCQZrHv=X|aVq@f+3%YfKhgvi{ z<2>v4MkkxJ7$>G7gCn81nY`zBqqRq`_3Xh?QzayoHXk2jUkFiQeZYVRJ7#n1{l3%u zZRzEY(Ix{>wF`$m_rB$#<$5m zciE)ay?^c1zIpT@N;~ZwnXO!rHhF+N)412bssKyUHJBw6!EDIK1NyXE=kul;F!2%= ziIKCCtCjAnMKyqoMb)k$;iB1ul9ph8WO?i#;AWcO(b3U!Lzjr71_H<|dNA*ck<-)U zx=8~Og6vsy^{=JF`1{O<|2df$j$tez>X>B{T^clHGPL~`B(W>G3sl(hw}VukAiMl3 zF+Yk1WW1fB=^NzGM}8Tb-~D4Xk7`01=d69#GUijUvfbf1qGMI2i<0`GuwE&t8IBsP zUCTv8uK>i7uoS`9JGbT_COb)P>q$87U?yg}t|EE2N8{GjeCK2pE~2l!e$^Ez;24$p z(?)ekgGVOpUWDE$*XB*9Zw=bsZFd@iS~(H>)nP3e&v!!x`IWpwRnA*jizzA9Cbrz@ z*-}w=z^bE2!w-K3r49Ns^HiIz>6AW$NbG096I4odL1?{`CxLV6yhB*z&AfB#=Un-Z z^Lo(UW-+H>?`tkm_NRH(e^PYe77)n3Df^f-Zqr@O==4w97D*F}xIetR#AdF6m??!f zXK^)fH&DC-W91Aa51s{k*-FM;50X>cH){x1sJ959fgk+1-#3j}wlo>AP~3GLbT zI^{!j+=_qWbta_gFVzEZPL$C5ci*M~6YF;{yUUW>9w(X~V4yXd^==CntTX)fCaVOE z?B|M=wu#&G9hgk(R9^Za=H-vk+FFpqcCb{~#+B&WV=GUQsY;lYc@e;eij z?{vQraPxtf-VnCfF|?bk_O@wikBL+cj^vRPS}Pqgjfqs+!AmYLqfq*=mu#QCW@s61 zZMSGms)lpQ$S2Ub$f2B(7o{Fvz2-+4ZLKl;c~s&VUM z5_S6JuGh#VD0n(1a;;+F`-k>XG~JR5g8%jEuoCr zZklcn8N$>U2&~RLzomMj1v-c~w6QtzGJNSeXrO~pVCMP(xmXLZ-z>L(i7`V#PB{^) z*G};{s|4Z1&4bpZO4?-ee&XedF~vQ~`i24oAi@679K{oT?z-{EbE3xa44LY}XYTP^TlvZoI2BSagYvrvQ=<0P zC#OKQbLq=_3hVbbyvD}*87LGok5zt^Ilqw>O)!nJcp~rx^@mI>?-SOIvma!~b?M>u z-WF%TTV{nFL8<4R-3vcAn36$4Wa{eLg0C8EhQhUK72Xej=N#-*KTR0Wvjd`dg?_3-7!$2{kC<((w0E# zd04zfdfW|h@qq33;X+BT{he}2!|d}GQ6RYs9okX}#pm8gl*a3*_~a&eJ+FY<52%N< zh#`DdT0va(KCO}9FY*zgFY?YW6ojeM(;odXQ6A|XcSeg^yI9MxJxL<0C27emH>%0} zTx@I$^u+lheh~2^0yUIQ$k$2iKk6U69j}XH>(O05hq}CCrTlX1tcYH7BoS_Nn_B6R`n8!f!az5j zp`V{>V{xS29OU(q;i-wZ$n5b;WTrb}Gz>GO<_FMoe+|+8QEzWs^SwsTG|pm1OPPha zhXx0~Mnha(lMZRE3B6*uD=o|pI~mK zvZ7a-=AE-{g4Ra$JdV>I^$?|DCq@-QjsOH6_Lk4MCi>)-;HOrKMyfvz#jRAsQrUTi zHu8Rxq*eF*@N?JmhO-$It(=a^w;~7LAxouO7jq)f9Bomj>qbCd?Lsgr!7Q5Z29i$O zj(bwc3E!hYU^Tvst8}tyTfFf7>7$CAOk<_lj%gKExtG~!x zhd|e^yq#Ywjd(cWS$$}-{9YZD+nL05`&m#y1dMoy(*Og|l|w&)yx|M+SscT?cL1E> zh!_NQzeST2)6Ueb05;ivkNlX$BB{JRY_a{EvNyr`jp)cO zeo%(Dwa9mxdN$pix;uzveM6%Rz6f>l%4ELWcp^$fMtM5t()cHfN8;!YhhdtE&u7kK zFd;9r9G5NP9d<31Veu;E&tRuqqgISBS$;?>zo}+nf8P+|%LjToI?O<5n#Xd34=mKR znVaV@)y4uo*cMKZt?m%3?&_PFs=Fm8{nfPG?A4?U+$vr;JW`T&cx3kGTDS`%H}PvNmjnL8@o+IaB*%imJ)^c79nd35>#nwWH6-_YQ;*IkMlo=w(exOOIhF($ zvvC84)DzzP_s_E`ZNFlxN<(sO8;{c5qHK-YwNAM$-C;O!0p>J#=M!aKYG}b(M?4=k zQfQM_zJ*o-X$d3d3WfVEv?+q9gqz;x^80md-lv`%uHbGBObL1B{=#YV$NXK-lo2 zaPNdGZXnlj*!2VHNiZl;jRi__lWnS!`D8A=MvAz5y20+{^Hxm4ya#Oi~coyqcUbsq1R zwddZ24z*ZEpB0Hkp^xS>@d_UJVc5-E9Fu6+-d$P#i$#+4%Y*M~R#!+UUFVBZ_g*m$ zGH%VE92BJGR`|L^4r1<*_b2bykDhSJUJ2q6JnE8pXxp`k^$--o1SoQcmN5Ak>9`UtG9?;|-nwkn^$r6RajTy8qs@I*YmzK?843PE>7>{C0UsdOQ zKVm3weka{*H|IUa2!9#y_l7N^+74Vkc)h^At76X^t36zgK8eeoZFEt#=m@Gwq?vqf z-)i|cfb;jw{U`L<%g#1c<+^@sD@C5@KWd~UM;?HIUihvq@iIi$?#=1+2SsxAgD74a z#p~AzA{^BVU-eN?7-98WRzrj)4Q@+=op_-K`Q5uuPi?lDmtLbh_x`bwq8Hue)6I}$ z=(ABG@RjN9cE~;GNW-(OCXlIUt>r0_3oix_jMbe()^=)e*N=WQdg*lZs@*?D2!d^h zN|jT(WYT~atlFJZ9S}L^8yd4RYqX%2?`~!n^Vr_{E%)d%xxtxU2{kwW1UrkBVwLJE z3_c@E{7P|kQ^GGqlU8D1-xLa_8Swd-o)fA`0t~ek>IWX@^|K;sXxm8xFSSkuu-00# z>{^O7-wGYP>xaD!)Gq1gdLUjS3*|4yW9CCqsamYyZG*{6G7Avzafv%LHl)4*tn8-2 zW|Ct?F8j~QUH@vQ?d&L|PT8ULQ-XMYMcyr$i`naYFg5zmKF`_eK%BI&r)+g7drcZ) zxtDKClNn6~lTX11ZBWk~t5sOa2~kxu13wnC6uC0SUj-XSabKk0Y%^kNKV3)5cyl=)v9s#dV&W++A8Ihw~b*$Ywl}jcY4-v#v;x*Oa)k9X^k3%Kq%S>xUKWu>j z#Cnh7;CSaCwnN+&jB+rrW@oFc^N;p?~Uwv03x5hnv#)*9yl)ASWi&B@$$&R31M4_~M(x|^O z$e^_k8^mkMI&XhHRIcdu))sq5vNrerAZoACxVd=BP*Zm6!;+@a%4cO|)MI|1P6x&DP{U*|mrhUhKE=gaq@EzvY{1H{Yy2qJ z)1lw=-dX%MgkIK^Yl%beH@P+2pkxv@I;gub<=(p^Qcqxq)n!t#*ISFQoRjtY0oN7xTb$Kk%FyYd3jg zxm~#A@`Nsc`6E|7LyB~VG0Ln%+dIMTRLDNR`ASCyc}jq%#+F@xUzlJy#I0cA5@Xk_ zZHKMQOy?ecrbCEP@nwojR`DKYkQhj}fk@;GSVw#ps^AMGMoQxoj)%j=W}ux_Ulq}A zhCb!`eBB3)4<{J%rBf_~6Izv|7sXF`!3z3sktctgCU2e)s zsPlTFnO3J>0JXoaA9BJSfT>*y2wUKYu3#wF8OoB+65W*a+agrmf{jhxk|XP5m3fshdg zUoA%DpW`MWN4gw!MgiIn2ENCB3rS!BQv7lOsP8RhD47ljZ%>%2m|FVD8 z<$EBHrO#*Sd@7_vI--R&vrM0dF9_1Y>M0!C%ah65CPrM^YVzCP)#L_q45LBw!M|vB z+K0{7;_%&Gpda)Ge<$#SrHfDcJtLv*tA*DkE}Z?k`Q#1@H1rB5*y@BZDdlXfPWfUF zqTA--2cHL~(DlkK=vjI{muDPxrGq?8R@TH>ufOKm|Fj!!&{drVpfJ{F>+{3<)uOf0 z!HL80ddxjEbpm0BK5n00v{|uvw1ZIxAHB!7`Q_-R93?7J>Tpy)pO&%7$(KQ_@Hv&` z?yB`DUzJ&mZk)-Jtv-(Mj^wiz!XPIoYNL*l4CH{LE3cdkrcu(#_YO}Z_2%sD_j?=P zN50^-;NaAU&$QjNj<~`pcRn2@5r^JgYBg;Br1G5=b&emsFq|OJo;|+Q`b`$gzQL(b zJ9p{aXK~kboyZRu4b6q&frpL-wp0317Nb6WmyFUrzv#1n{6!UGw__jDWfM)us309` zUMhCPugY|Lfe}s@P`HvF$erthC46gvtcJfh2h-KJz@mnl-fLDo11VJ&)eeTH`h6D$ zQGm*8AldXF1S21!-t*iR(1P9aq|A>yt*va&>0mG_NX5}PX}OaQ28zwTRA&oGiRW4( zdO44VCcIoz_d=t8Xe%6GPu`WGdote)o{Tje-;UqHXenQ1zBuee;<=1Zf|7OiRzaxA z6abp=Hm!W1Y{X8ZY!_yj*E6FZZ=nUPKm=sp4Um!RK|!xC}2BShkJ zpw!Y&FEyL4cLO>%3>S{N`FfRm@h9oW1Q04hN@Tp`jsQMNaVBIp4ZKfWdCFtkolf0% z7DiI+kUiE|dZ*OnXAlTlGeY*{b77mf%c~z~jD-w1w8ea;{27XD>))K*dX`ZmvarTp zx7d{wx6qlAMDD=kh@3Ppa3qs<-I9eOL)^N`jmLlyM;yX&WolU`rvyLywfi$j*V_R* zVXFc6HlY{R*{8m!lb>|ywQKH1^=e*qGKIW)S~y%rFu9%Co4ZK*fNgR%IjkF#%BE!j zl6QLr6XS^|H6lMIMUNC)qYk!aU%XlEWc|W0#M(XdfurB((&}Ko2G@)m+hCpbY-HaX zzXxh*60T~`OI|s{q39z^@$BSwQdm_XboTFYbKf zp>N&P9cW}tXV?i^?z<&kwVTh_-DbwJ)P<+5^dFcxlpkO}iIAroV{41v2gBy-@<{sv z!@VM@sRnPPVhQnac0ZA@tZ$?+9p?FT&K^!Kcvil9UwVU{iMA_Y6gl|0)Z98psj0yI z?w6Fa{+|>DUq@vA%y9SL6i|bYUiP`?iobPm^W2R&3(-1@@)$GD`6$=aHgj;czJG!AGRAkIpOB`ePuM+ZXjkmG?E;OKl@kIO>AM6U(Nu(2f-^a$e_+ z_8>78){UV7$>S5;nKS+xfzKYqWvr8#u;o8r;Ztc`mzK8V||aoXl+ zxX-&<$wfwMY{%v*ZE|#r9NFk;>add7pzEWY@EXc?qMZnOQl21{uSEzvaqTiuX2Qj2 z=BwM+%dc??grDsXaAr4L_TkPx6O%UivRKxDfZt450BD)sL4~w`N;fSnY@t*Ut5C0^H{`g2F=@#7vtoW~T>?*6m(6 z(-5?l)Qsdx>$+}eD}^^G!I!7WGohQ*Ey#;NR? z&__T+^s%8;m4#N*>+(paKV*kP==01%W>koyB5PbjpA%0-iAyxb)^qkA3skHnPO4x` zRrcC9TKZY~eD{(^wTflqA8N(MOH-oA}7S{N#*_*bS^inSeoSyDOlU@CJxg$jYAX3Zo5yI zwUP76ZEdI;={za~V+|%R?~+_i_1i|yo=}>h--I7Kgq-(H;9$NaC?jvmZCFJUYbt_qMC5u+b8g~2XdR&S4H%E1+z2>!Ha1s{-0oDfaW7b4>oRh&fFsE3?!C7!pvg6qpW1hS1d7Vpn#@ zaJYE)>gof6HEJb#f^t+haLaCQ9Itb_E>0Zsp0bHj*tT(vp*K3gR@V~A8zaPXjam`E%?41nZ7c3wT~ahaiT&UBz|v+_e_zhXqi>$r>M28!&B+ zaf-eOZJp{TtwbCzwwZ6&jfCSnt(%X{?2G~}V?Enfb)jR8cj$%HujW{^f4myg6A24~ z;|tX>iBfhVj_*3|B4R>M{%|Bc{S^m9wyB#;-P`5ll@0`wAU)iKP-_C>mCpd z%Aw8_Bk@P$Tz8uzxj2Jy-0ufll+LWbP$n8T+))!wb-GI${D#Z1pAJfLe3VA&wBA12 zPCL4#nJimqzIr;)>?_N8V+0(3d}cc9)uyrFC1Ff>amRVk!lvN`%-7)6c3=TRY&b{G z@=)gPek^`5D63a%sk9>SO$%mvRH{tae}W|SXDYjzvo#lKAT=wt*m)z^bMGj33br>@ z=b#AR^Nu{f3m@dMoofzgMXBDjR++at&RCN;GkiZmol7Mc>iR{#Jw36L|C#I0d!oXe z-fj8|mU;WlZSQ4*0u)}kIvEtbR5u+jfV>aX2M<}bd~cEGmzU4JIx)nW6>&k-_w)1?eo4L2 zqLDS(?e-5Say$~V2lEgF0>Wq>rK|MprMd)EYBFg^O1b7Rc1-Tc)<`ww15K1Ub_Hug z>NMPHB^<d_|Joe-l)|>uPVdC0G>b33`O^daqM;v(ASVeu zF}?U^5Yw$Futog|^&+ogtd$Qkg~;+BinNbtO073cZ5)ogTpKD04z(pwKzsF9YeoTT zD#Z3H+pvqhKYqrkDw?L-+9qV8dgvYu?lszA(-anSaBD4)RsMU?S73oB?>Q5dh;u!* zVfpkW=5_LX9^%idWr<&3(|2c1zspYI&>BNXw@x*No>Ep+o&_W`(!rexlEPg{U@)=| z$t_p(M42)H*d13D)r_~y2x|22E;FZPvV!piM}ZL;gPV)K8(r=ibo+VD8JU%Xzp;G& zRWAS5wHcmZ+|61}u{|Vcat%T6+s*LB?Zx6ueH}>kap-|Bmenhb92gT%T*_cRZm&j! zg+0Y(>Z2P_*N=ax{*~keQ~j@RJJ<=c%HpJ_U-Q?uI2bq)k;_{EXgtpejwS7XS5|Vx?_&gZu|D&<%<~^p zO)XsBA&>eC&$%_a21b!P@_atGmnLus`^gD21VrhD*?tyj`KBG-j14t9^K8Cx;oa#Q z=X6caL@sw6w-fcdz~J@zlj)Dgx->7yjh6=E&~?^PDN;8F--f*C{!E(ZJmu6OiWs`$%m~+}iu9P+V$H-sRUi z`F#|Y1{;o0UG`O6Zk)ftT{O#ac zdvjY~_%#(XRGSDt$c9+D0cZh3KxASq`BoK88t@EIMqP-&UiY;j% zW3q3sb^pyz;S2X>Iax0G zhI=xxCvj=qiuC5VWAM!;B1O(Qq6sT_0)AboHsY)XQv8bn_WJDB6BbgC%$5crG|p5i zB-rzj$$ojKWqRyALV`sc*rF-3b})m$k#0O1XZvxhJrH52?Fuuxjy-9V6ryM!6nVcy zu4}n3bZUISiq@p!rGE15r#wCf?P|Dz)H!vn5NzW$R{53wV(Ix0O3w^?HJ+)|7O{(S z)ka|BqlnY=rvcKiN6&fYt!>2=#021Gznsx&E~DH~}bQbJc0R0LF{ zmk5YRlimXnQRyJkyNVEcKvj|be_hZ$sb}3i_6yIB_^7#)c7OP7mR;GsBgP{v&Pbk?daR>}cWix%>;Fs}R8`>X8$L4wt2x@m#YCIE??0;DtCKau6?-|p!I_B5 zNpvSkN@+{*#1gb9UZ}=%cr>c0)TV#c%aK4O)D!ZE*F{AipMq;gbs8wHs0nHx}iJog#)yepBe*K zHqIB_rPfM*b;YFv1rQQ+D+yg-?8{TG-40{h+g)FKKf?)%Y|YWURCHWPBdEmpIx6_b zBj?Y!%ENsOI*;flGxuIL1Ss z3k1(A0~9cT8GUNorhh2|CN5@NR`umIK!CF^%@f4^nS%XGJo)b@stN*qQ#yf;c88!N zLff^EwZbNO3bTZ{L0Ld@A9Y0j8tzq06J?}~2h*+f2TE@BhzD%?4GfxOoHbs|<$-vU z_E)k%q&wv`YTaP=rB8dNT!%;YThY1khh zfSF71;1K9I70qhK5nNn|kk9{SI_E03aInB!Y?LHmty5Tqj4+Z=!W+@ouU?hd(~Vll zQZ_Xa5*#ynNavgK@)AOZhQ=YyJhGdg>_OP}M;p-xTa16q>v8W74$ik!#e0nLxr#`oi+WPHC7-x#Pa z{_MDBHIn8&Jwz>HG6~EPuPgF!^o9|igBOP}~-!<&f zQ}~!ECJ1D{;(l$Ho*)E^!C&DCj^1+!`x;~G~I%^y*B#=@SI~R zFqevhR+ji)4#)Bt;9O{qX9r;NqP@j<7E`=PxR??U(>do=fB zuI&Mrno5y_IX$;-3oZj=LBE37C3tJz^g^^|C`B z!yX&TijHquGk>o~I(fIfj2F0sO~pqBXX->V%g|nMW~Qh$$K`bIe@tG#6l`Vm6kELq z=p)dbF94UBe($>ctNTC+h3g5Q`td27%e^lS_f3bWmU7+YQ7p;phridsL^ec+mQ~bY z!2AkOiNzG}H$dS2uQW#c7lMzEvT(ozIJ&N@)T-?>jC7E_Z+>5M1W?EJ`m6)n_?qlC z3b6Wc^_xVKEI(BtOQmn2!MOx2Cp6OV+PSY4i!xyRBe#xm_i5Yzx`lY1a6uJ{lao zKQ6@2WXVT-%T^pHQ1*1SH8%qt(uIfp1a?juUm1#4kCD0gk~6nBh~S4MQQK7gIdS2J zuT8VlOWkq#IuakOlJG;H;=$#tD@n}o@L;4dj!Iv7J^!}ZLL6P~NG|*0e1e41O`SCH z65N7(NdcXeHW{e)`P8e-Bk6$j!T2|^g`0It$g=0(-aEcve$`m2!5yO>$!?CFyG-nM zc|{1TD*cgmKPM79s0cYgrn`yV%+ zXssOBBf{Z(=Zaj>&`Ey9@f%--VeGn)%QMQ4qXQ6?6tFhTkf zP;N)>I5?YaCXePc>K3NkPqr}{V|3*OQNmQ*gom^@WtzXu4!wFX6{mU@wmWX~75IWt zOs@M~yr0$XBZ{SzdBSN{prlvc_brDMHpZ+t9MLY9OHM+zenVcv8p4MugAZixQzOBow)Xc8nlRcVpQ?H2@0sv0*_dHzIxvAt#R!>d1d zGxe~4yww1~u4x7Ts&s&g9p9TdC6q1vka`wZRseHzMB4Vi?o4gJb^Bs2q0^fb&*Qy3tGH0Mokgee zIOkq3k6aU1UUclj*x`@8sm#T$)J%_Hkn4jKIg4Y(#W(&s{@%vEF8i87jIYKU$&aM4 z{?l^gy}uluK1qg|V})Uvwkj`ZX_*~9zih9sc<0zbrQv{WWi8P>h5UF(g=FPB$T^kN z1}$}6O@_DGeiIo86-s-D^jMKqK;O2Vz4EVBvALloy!~jlhs(B`Nf^yc<+Q84VhzF? zqAH_7Hm$<*rqYR7NY>f^r2MNZIz^XMGVI56_==ZYh544{o$u|RLzxH7{eH%`)oo2J z#;vwu=gjv%EbW{TGIF~qBcz-7h^aBv#AIc9GO6t-u=|8FvI{yMSh_?sV)M&lU3;l$ zCbp;I3^V2&O<+cXi)xL%pJLL+Ong#globPQ30sUDy1PbVJ9G0pt(vS$lV5Ip1~w2i z-xU;K8*RE%q-_r(IQA)>lo%r>(}+C{ECQC1!xVwXz_em%u>Ceq@DpWd!_ju$eA*T{ z-GcDKFt{;Tmx#48^L;wsWdxwZZ^E~U0IwyFt}{B;;k=B=r7z8Y#!&uap{UBq-#+Ft&Ob-7ZZeQeY=)4#ZupfW2=ToHBFYeMnSQuWZojx>I?$V&05v~x> zh&#?>`1T4aKlPLkTaRLUVT)2LxxC$8*0aKG9zj%ToPP5(-Y=Ys!>KgN z=gGsfXz%LP8Kn=1aT4{>ljn3D&Pg?}D#=sUE^b+H45Gp>Ayx-FwYl(lrz8?fUHb(H z_k=dYNY_`b)Oro2<1^D}P><1H3^v2T#HS;7#es|^sU&m8t?0ax)&A8f;fL7tdrVF9 z77uF}B5avfPV$sugkGqaxz!!2V1q{1% zL`S}Tpiznoi#M0vvbnFzgC4%g~^o8Kp*U4J8mnNafT=X>Z;5Snj? z4~!#VW>mW@5-^{Go(8Bwv{T)F4p2T5#CVo)C5+ykbpbc5}k~- z3-wy__XU;{18|_@_#B5h9@Vw4o22$^&BPp_rGX8cmz`qJQSi4&J+0AdaT}qsl;%#V zUXu2MJWV|#pB&?->487h8*bejj{a7&r91m|;MP4B`UJ3N`)GEY8x)(xCc!%WNQds0 z;0p&D(w3!OCQnmTMxC=Q3tNk*F&p!6HavdPWT7Qm`VTsl#ccyo(ty3$yZ~L3{$dOQ zqX|OiBjmbE%Z=|;eErm2>ik;kiyUsb>_H$${<)hz5Bp|?)QeRgXbYP)~FW^z~F${h!*J>I2ylBC^T^Item9>Wj-@24P$SluQ1{1*D z|H7!y=S?+7)jue5q`|y}B0y~LbozFAXF&;J6WLK`z~k{$On_{$z`>cCPYnoky4lqF{hN7K_~ zoJjV*-%X}dlz}xb&o0`sbUlDUnq+@4k`sA@WX>$ORl&sE`2FmP5~8Qj=ez@y?S{A z5hnFAMN8jOxD9y&kJr2!zIK9FmF93e5&|eWKX!bYw4S;~UHu$0g%Ntly?9Y10eNAVkKXE*J)@9O%{6MDyu72ipmunkOEr4E zPC#Oqb~?sz->y{De7~>sD)}3Uiq&r0Vy(wZkCas}WI?KzLr*;*Qp#Hm8<;P|z^WX| zd7wjvvfvACrYJ1CK9N1VJeuDA#*nTKctsCVGr*Q^hiOZC`>r-cj*c8UkMW@`#-Izb z*900p0x%Lf+10eHi>d2fK9lV)tH@QJ_cgk2&EL%{E{2R!H!EEKH(^ngP5p@u-%Axj zpV|rlyQCrJjchWK)!XKVkb6O(`Tb!7vv_nA$9G|b>z-VBoeojO2N?JUks+^y%y3RT z1p&+QXS)2JGAeuZq$r7qnb!#-yyrj2s7$_BX6n#5R^^Jq~^jRx+)XI6)I#nU_eM`g8LEo(wxS*|wEGZws zRnt!3&5s6Emj$2!wY{$+Z=y%CJ@S#O3yoqD9dC*zMV`3|v#PXaby9Afj0mPCwZ^te z-5*j`Ev^OKZ_b-0GPV6$%Stnh>C()+y9aSw6}H{qW&w8K<)mwKE(2>!;VS@%S^IdW z1>~_BZp3`J!tJP*MuDt|)FziDuhVU?mTv|0dJGw1SrVUz?MFU)tc@%THm+ehHv{@t z*Vc}z%XCd|OAP#PsnqzDs$&}IhluvEdBZbDW45BN?eBr9lPqaJb!FuH3w!+gIne=J zjhlI*GLA(5nfw%0nY@k${dIC^Cktk4yeUXLVtoDi30jx@=BgN@O*{`L1w!xqRH1{j z>Fs&-Hg;~8cU;!G=agwY(aYZoeoGF$2JKbQoA~3yU=a8&XSO2;w#=c=NROW_ybzB@^uh_6~$ryv#}&olKB6r;xtS z=fo%;*m{QmnGv<`Hg7~cyi7QXr&hddmnmP}rHgT4P(E4eZDTiQh{yB#?Ra{;wUy~& z-y1rQ-6ow+((i*MDYqC;ruKG&>i3L)Pese?H0#2Y&c%Z#8Yk{Q@T0OdPay=LZydKt zAHFj>e)&B7hrI(5rqh(As?b9pR*m z_tWCS4RUB77b8Und3*$q2tvoH8&x|!WqEJliEf62--OcRrbrc)aO@mf5569^b24k6 zZmn;R)N&Td^gWPRsZjZmvFCBJ)p4*low7dF05khnA7p25udqNe`LZk~^fHqTx%0^d zs#y1!$3?WKAOui|3~S^PPqq&S$y4%(l9uoBT=i}JsL|JdT|;O?9I*c@ZWW+lF6s&` zE^JBS3TriRTe+!clsIxOGw}d7@C~x#>KIX;!@da34{D$Utz>5zY&@z|oBPsEcbc^a z*niEkd3fDX{O!0nw=%^APJV7mJ7ULqtE@AB?4O;#s%K}Rw$-XF{}Y z_ZObPPyL{k`FAY+d-;JzZQjONoIGqoE)eT%eUbtmvyi!Uyh3JlqZ_K3T!7oJJC zi-GXh%C+QY*9)uo>sl?0&t^PT5V`c=QtrH70C_Xl*7A6v_|tPD$cP2VEA?}3t=H6( z=Ay}*g(*0AITFE7SaOwpi_G>7Ax5BD@rbEE00!h^P`v{H*3m&%@({A`p=$ASTS5jL z@Pp+%2(#m3hDO9ya>aKgzrdaBf#NS4Gj5SBxdObQW09kI8x^fAjc9EMsX1|=s?@5s zQ7?kt18aQ-u7+FxA>tS!K|P92eErK7+TVLvU{tuOBiF{D2;KfTAWsm`A+q;VG@Xrn z<3_+H^>j3I<87%QrS(I@c+Ke=TQ1Pr0(a?R%K9qS=-_*i^#_hFXWU|!dsEheph)K-PYj8lD!QSj+J_>`l z_=P!3_LK~;6<)s@EUak+;&dyj6(&jTGpx=*icRn7|e}rJ`r66xDSo!#-1RWX{D1M&EU^?5b-J-GJq-+2*Swz8t!lrV)A|NTl8= zg=Q`V$?Knmj|X(DfJuao_Rlw^Bh=(j9A=-kc(N{Z=r8t?SD^5_NM839f^aNqut8+F zob{d_s@K>Pce#hE*tJXjQy=hqDExQul9!_Jtr1bI^C&QYM{=UD>s__m6OoM-j5Es5 zetZaA3LdR{UQprPqIa7h@Dgz^=);xwSL%#!x$S?nI=93U!wrk6X#Lh&ta5EzAX~+4 zp;t$?(O&{y zFLEuHDFZubQ4ElZ!U(pJKVZK5f3SJh+gj7>Eu3$v!u@34=?79l9aL8YmVNW)FO!m! zkibn%&fKWbQ$EHbk_R=aN|vACVNueC)->%a9+djyy3gG)txGH`V7=DjeWM)$t3G(&}G{W=9aG3OZxbd0_8)? zLiUjk!|L|Vi3K>oGg0nh#QL*n^0+=}yZow(Sn@M2cdJLRpTFGJ^$d+KYe9HnDO9f^ zjX9_UOw?rP7m+Ou(=bR^t61flkCjk*6}|neHK7_e#vZF1fVyJtIo|xZG#=$x@AB=< zJ7Al{96#Tj$@9=3jlzY?_+sl$Cptw9&i~br0Vjqej+XdR|ETfkgsY#hd%S%I52P;# z8d%L&|1(2g47^X;V4mO1P#Spau_m>j>gT~KP}0WBaDP~iocL;NbN#t}Rw$*|&HSng ze(e?uu`@HyW(#V)pm)BmvpUgqka4TAJ6jLM&k+O&E%ADE+wqiJNzWd>xEz)(lwdx` zuD_1D^AxUuqbIN5eGsLm1J2b&zsr(`Ll@f8a#B$1C4a2YQL~a$|O3iGF!zCjI!LO!=t*rD+AE z>TAjj9g1K|WX7iYUo8FWXa76bI7X`WPPuH$&Tq=?b8gF06Ow{PM+}L~s-MiA+jL#^%<*ZZuWk!vP2{t8p7pKr0!5;=!M(2kO(+pelqE^GhO&0r;cwojx zv65Pz-Fj+xKw@S*Sbp=A$^u{F_7jc1JoV6cOnaW3dp;n)qa04S-IrI2IZU@{J0D(=-Yq?>-%7v0MX6EY*<}_rWfzNuPOhe4xy6oP72j1& z1fG#TIzb+@(2?l9J|LoA-fl1wZu^G5P=5Y_|AMf~1OH*Z;MKX{3?9DdU33~Wzt?ol zvaW@{#8a+>rVmqg<9>%`FICy{06K|15N-NOdq2eS?CXJGxqbUWo|39D98JLcZOk3` zQLcDtz68i2WCWsw*5+9sdNW@X{+2FvU9u~nixF>}N;5q$m{kxdbD3r)F_nzxj^VGr zUX@L?k#bAinX$6;&5Iv33xk3LOU7@4TXK4@beqI}FJ6B)`F}A}Yv}_wTqe9Wy^TfY zon8m|%I&8fx&bZ==fC>ojuPe8ct7t;HB(jteHc4GSgj%Jay)`gu6^ZlSDRkTHKPh;+;-HE*ebZ&nA3-|v&jw}9E z#XlJp=%dAWmGLO~p_>%3pGQ0b9<3E?jB_Y(Ql!0tj5<>g>I@I_#nwhwemLvTBAYE( zrdinBw+v=?2dp%N#0xEFI#yqAyr(X#!)(1ZdDB}^H?{@v7d4|l=$iSi<^`M+adXWr z-u;kvQUara!}s&F3J$|yC9x(#$1NFR`Be9un*&Y#x>5fG+xyMJ=N7}^1I?Y`5>HCV zuas^N-tI#W+52~7aS=p#K&`ZbKhMMJ$Jqsd;~EeqBm^$`7;EO{yFMX7qCuKI$Dwj( zd(D%>*|j649)}rdEf_!+A4byX5HHwvod8FZT+#G@@3sjWAAph%d)rEDbv$*NwyhGh zHVThilbs(K;M$e?C*99W#^*fb8!dgl_>J`RDz;PmesfgIKviC1BhV*CGjqgAGvh{a zhGxcD58&-v-{#F}b{bxpj<~JQA|(6RDA?T80BgO%xWK1AX|!(z=RtM=+Jws?gN8E0 zA1+rvR&&E!SMH4!;O`=a9dV8e58!LHd(`@&`a5u7=vH&%D(ZF*!LCE z#BBltWaqYRnbYK&tf*rmlWCBWNbkuR4Z02XwB3KyL#kp(n!V->4Swn%)aH{J$EmWs z?OXaAZAL)kc&_@S@!i3W<#mONf=(CH^hkGxZiTSwuqj!2Bly)t-h!>X>jnTxC{%w* zKLfPiss|yigfOiGWw9k;l}|VY_CJ;fhwgFp}o>}E~m_P4qYa!{o%u2 zVoXuX$isgS9#uy*$OgOs9Ut9jZwmVjznlHEu2VVP`&;Sffix}Xd=gV6_(~QiooQxv zJ{3h=p1PuF;PPaJk(4{45i}k4p-rb5#IC%ZsKxc;{bo2_EunNiF5Md)ri(bh^uE>X z`G}tZTG@6T9ptqJ_n{{dear~_ReiJ8mh-H~;I~F`YS^I@jn6kCN;0kq`&JY3eB(W5 z!G=lVWVC8y&eacyPh(X$N8W}AQGqb-lI#LwWZ9H=c|XKztu=yTqE{2wT7$ulMr@+A z%B9=jh0*Et&s9*lJWm~ODd$VTh+8&M&x=!r_|&mod5F3rOGSQ~8H42iA~BZn*`u0gUKNd=*^6yJWKN&XGi(YL_(avA7|%U=B0`6&OR zc5v^`kD#q?!{%9e&QV!KmtmCCN6Zw>b@i7G$u$Ro42??~COnZU{C9e2WJP8Rn(bNO z@xWm%+Va3_1V3mV-t zA6VO_y}C}J;pu)oFiU=w{4}SNyzf43?t=w+0t1VK7JNDgYB6>0Y6Nk0pby7L#D7D&RXOBz5H?}457`bOt{-C`jw zjA#FInA!W$yT4}pzcc1-#&#Y3g);?M_u~T%f4FpBkX1?9TGt_0 z1kWLoi0dlX$9EVlHbU%&*=wQk2KAQZvaSMSKtQD5apfK#OJTe8LaWfS{l?%kY4IkD zu2<#c-B>YM_Q5nwUqH}%-mYGt96AIb4u~y89L3+|aLkJ_3LyjBn5*mQ zIp~+$M1GY_SH`C3DX;7eU{>-Jh4plFev~cT&G)0An#y7vv!+2gqJeFG z;47GyvD`MtnzmLhycL|(TXeRRj1u65wR*zMN zjN&Q_5gr&-b7<~IW63Vxl@fcz*p{x=s@~>98DBtWO`s51=MR-3o~-l7z)D{S|6bVy zYDcOrXcoxDJaH=n_NB7*3JkLAgExNU?Jcx&{cPhw@;jh8}9d)#9Xp_hoz_@>x5 zYgax=yLlI4Ryug{&uZvfRh2nggu?kyc0KIEZj$N}oSwvQmjER>@2cf;Iv01WQ1Ltl zljUQ}yd>LY+rkPW3ZmlirNUI4pAHH`@wU-j)__8SvixwLaf#HFuyCNgBR{KIy@gm3 zaqPNH)4Pm*i!6&+8s{Qf*n*HYCpubE2{|x07yKmap{B3zc0Y4)`awRNN9mOoFmI7t zcyt~|C{T6*ti?0lZ=svcz94gIa)2DCwmCw1dK;-lAZ zi(UVtuP$%Vpkm)rpF06v-JV^inYq+|G2_ZBI=bSjlI7Mj&qM@4 zYwj+_{WF79jw0rIxhx;!-@Qjge3^XLID{!DHxne5-$jQk0?+{1NW#i)_56)uS5Vj) zk5&VG{u(oNRa$N&gXZAvTLz0GhWKwn&9X8n0OaQg-HJb-ehVLG;x?`cmA(v_e%`{? zZL$^KfEEz@OHT_x+}$aCQDBt9Hb339k%E(EWb{tH^SJ9 zymc-SStCRT0mRZ6Oo}TDqmibN6;07!S2LNtaSJ)Q@M^nG4JXP)<5btdQ|H+3%ae!m zTBPd~JH0~XjKnr@@&@BUQ-x0nB_C+v2NJX2E478%r7cUK0hYSX+ z0Kwe|2=4KzGON@KXFZ&L8)T~5+&T&H-otgzel7g|$0MXFq{hphcZzB>ld~X$(^2ob zcM+2uf~G!XECS0IEcAa#=O$a)E-qGwF@t%b^Z(cNLjgP*5 z5r9Cre{!mz!^_I3wupvTp8&BIOJ3H z4&t?-x7Cgs zC@v3Q3)fNxm;f3Q8^t&r)A~HqD8K}i(Srchq6t940Erhd16sU)P%CM%Mb%C4(z0z$ zP^$7elwAN2%_J`C7u_CBA@S)vIV$B0&^!(CVXLTi4L3^;=Af(U!I|zge{@MlS!8*v zo_}M`mTJl$kOh?L(kr$!)f|APzh+z7h{8nDr5!f&a$Dw0f5CIy{|or;Tl+<|?H2?5 z^@%%_vc_XG<6x9tQC44GXky~|mN7Vzy*Qun^_{LQrWq)%D_KAeI6Gk87h^ozVyQN> z`#u$I$gkkGe-*uX{B>_v^1I`{*{Dx)at~*EvbI9efWD-~AMfL+9EC$sx7yIR*c;;} z9$3MR8T(${V6=?yzaM$i@}kJa67Br5itOv;g2a#6NhzNK^^2%NEJOS)4z8uIB-6R) zC`q|Rt$p3wsV<(b@AXiT*mF~n>iw}#Oz|HvZm8Tep0?jCADP-qfzOjiOMN9ggyZfb zlc>CQzRuLo~SWe;>jQJL!SUDE)Bl zZj{`X44!W*g8FGwJsl2mvtBb$X9whISMxro#qQ*M0Wr}=-HMH-y%8PluO1v}O7cFi zR10CGO=Vv#$r^Ri(>X#XBFAlrg}VH4^C>D<560{DPr@ z>>+=8R27_aCnFY1MO5BrU?FOipJp9kx4jU%?=Fy0SRBcr9_Hl|!$0)Kx!$cJ|#BkDl&F zON9k8J(b4r`9hIT8Bl`T!#$#CHW=&gVm7a#LpK+CDs~qIFEWH*pyk}J9(u@@DNo8+ zSRkujdetfmk{kkqA~HR<`7LLHw3Hkjms`t_k7e0zyvVSK7NqCKzr5xlep-neKFAQ* z5LD&}iIAQiLX-^B-{1l>VEG`XcUvwiXM1DTG`<^Z5?fU@#Kqmw<7hhNo9UY8oX#Ew zPIW4lMc+&VqhvRv5`KaXlJ}10GmlVh9FLezNizKD;XKN*Ohzy}KD`Dzhf@7V55*(E zK!6H=9ahW>O)z#;ZVYiZu+Vo>%NgErR?}qp0^gRkvqh&0=yOp9| z>X<;c2X`kWJn1tLtDXs76X1Ep1>fTO<_)&hgJUET5jAO$k7!=z=C@1Xdk3 zCpbxoPoqWXqIv|TD3|-kA1XxA*X(EI&bce{GbSue!s4fS*N6h&4u!T)prc_3^d6ezowr|0)9UaDf}Yfvb8VF=IHL9d{n)zIZG6!;UB*wtJaPey(3Pvvj#? zODW1aubA*%4e+o>CUy91d_O>L%S zdA)%;D!2otV8W@8H*_FOo#b=3*`O&`y~>(u9CL7mKlq>zEly&j<#M{V!=$F%srTdH zx%k9H$j7KUPqR!Q_z+u;zbzqu?gVHBH_B=s==^dvCT*$Y$pYXoq&(o0%n zD4pUWkwO~|k;hA*BMf9O*uVznYSvIC-c#!8(m1|Tl;(r4E2M6Kzeuj!sfPb62@>+^c6;J#ZS~qbg4Th(V-3Z;V!FIp@?c+ zYK2iIfuQ{U{yUAcTs`M#KI$&Iz4LT;tJ(wk|FKesOzL+@)&$WkK-!RTy}COD!-gTa z_0+A@Y8yXH7CbUUVtlpK=R+zo)G4$9nJ`v}SQVy9PePB&x=NAqjw6OilMO@_D4-K# z->^JN%&|dyHcj|T+>tzqJA1Liv;R2m=$>;XBRUbg8?XkjK_`+BX>66Cg9wL_b73Q{ z*yw|0HB)JCw1EvgDuh`aP<#Z-)MHB--#KBhfPKW0U8Ddjr)7k4St+NE2`6EwTP@YC zcGqq3mJTPVckL0T;5h%qHOU8k$k#xDMp*Xhs=Oa9L`QJ>a^I3mj$6H5hZ}?nwDo#2 zA$MPFd@MIhK${bM$yZNDg~{WPKWg6hPHNij85kD0M3>KPCkUYpb%?Ujt3-wfA>|Gp zhS|S>zO!Z41RcIcD2DWsZ}pOPj~5$`lr{2Xit!0x*%*@;V*wr;E=u=-RP z;I^mtYN?VLA6uhBbVOw=yZlg3@I-d=IN?=L@Mtv5WLbU};@}jeLn5F|T zK`$oY=M}BCnmnyscuzd+oud0QlHu~RC5J(uqr5pa&g7uP>o_Jd^o0pjO6sX065@1M zWP>sR(yS5u(#j0#Hkjc}0PXmkdib7N;U?Yp`Hzv^X=8nozzSU|vJ-ld*2;eeb^u%^ zx_OW?jhBWT19y1NUjEfa3f-#Ijhnb$gC(oKH_9)$eGi8)j<_ zY#@fC5=G%s1t60|o9E!(4zNLQ)4-x)fsL71qTNpaM)Hgmm#;@$8Otih@2%&-oJPRm z+w)M(ZCi~cpC5Yl7`5-p>;?2o0ZOpKs7I2BswYV;*e6*pR6?b-P2Jl|>+M0a4KJ07 z`yNt1UE(I=))>-VRiF-`+va;`h#@d?&q$iT@0N7Cs3VTW3aEhd{Jy~SWczzQ+F`1n zZG@`Kq zJN|1Sjm-;iL)e2QQ;};wQO?>4w6#lK1|AAK_d=6sL33bc`*SWC$?2Z%1m`>4qK?ao z%%VtaXIX0!46SRhE(I1+_9TX|P0P#Ns`bAXu-i){@T{4AHVlZu&0ysT&f2| zsq~76G1kRG&53TSdL^QXt%(|j=6Aw;-~B*Xo8GOcJX!_qe?0!#5U^3bWIotHfn?YG z^?1-pox~*K+%W#1#w70!jw-JnTx;cV4df6}cYL&YtWZ!3b27`YUx>J}WT4bpn-6!Z z9Rlx!J8#6-ESdFltbs>;9&o8l(3B1}J<#D+Ds5++-YH+4IVTo8GR&#Q1x7W}Q8lyY zWn}>lna=Ja94P?u@E2~%T*@@qxhKjl6~&HiVuaLX`?~Y3%$)^Sag}7J+wd+sAXY=! zsV{vy7uM7bCG2FasD;iHXu~F$Gb>1#IfWyk%gQs%YCpz8-*ES9ixV4%GY9HM_azdG zKpOX7oWs}zxCKh@`~0*!KBcmC1X}=Zv_u3PCb}5@CHdF>EBTW=@rwU6GHp9DZJVoo;vS2U`_@R;AA&?Z(h!U|h=?h(9Swd|55{^;#*LH?%A(Z1 z4@G{JNElnECSj7C7IUJz}3F!OYruPF? zH_@&}cMn_Y6X1pU-fN9~4}qb(!B2@O$gpm}5h@3z1HHQ7jgi22zX?<-9{UFVLw++_ z)#j20#6>K+6nFRLVswZ(-v}+p?E^Civej*22Dx|Z=H3Vif)y_6okRhx;eE+U6?vJ} z-S`S{R4Haz#{`0LU~c=kT}iZ=CU!%1B%lih{*K3I<#2+(7{^)mq$T-5{ITlsYpnnK z_C)dLN$sS7Tx&S2nBF-InD#;-Ns~2lhTTn1dp`U2B)ped3IP1^hZ};YF(=Yne^lm@ zyp?c&Oz+pKxDffDQq-PAIazzU!&g0AK);~ozt|Wp!{%{IVT^e?ZTBH(5^x%j1YXR8 zO31E1Myr-EQL6N1EKq}vi`;YShQ+5HPiH3nj7t>))$_@otINDm^1+|#XG4OYxP^pE z_#VEVs+*s=8O#taVacsv$yI7e2wD|Df0n%iVmcEIbA}NQ-TR`;*qrFR0B)u@0{h4@o)Vwe{Mq&CQ9W?tX`%+xcCs$>6QjBZ_G#VOFP3{+{L3K{0H_tYKe; zl;d=ewFV)F^j<0ciziy1c;d<^uvYs&JK%r63V33p&wxigk(xBqun#N~f3G}hT*U^D zwBB&&`Q+*{GbB}0P_v>K^3w-EP576=U+>i|87d9k=b3BQ5WTr#WVrJ|V`zPBYDW0gi&o-Qe_3|Pw~>Ozi8j;p7) zC48Ml^hwV9!Bc* zUm88?gzTjkSb}vXB8if5WufKs_eHD44De4i zf)N!)vWQCro?Y|d*e9~|gb;t(1Q{C#C54D7IZcNVY^6j&O(gvxij7u*fRYbbZSSHc zt+RQ~ajDdBep~N~WGdu!z4Mv-(=B$I#31JngPBb$U-M14xj*~t^koF63*DGc+2`eg zw3?zqqPbNteQtqp_PK7W!=#o9e}PPus_Ly-GC6RG0ERR81?D@*tsl*Xm6b|J8|ps} z8?9TE&OEX~uGPXe6JaZfM^aoD@BUJA@lpY>8#h^lLW7=CXa7kdNwP?0SPje4!_`9-e#Ry3Y+Pj7kQpT@XO~biCmRPky9Vl)wg@7Ia%?)u_ zr4l2$WiDBo5Y7C8j^7hq-rVT>Xa!%dqI{JlA#-=6x8gH{EOiLa059_qjyknMWg!0r z>fxuIXM-=q?-h^3T*MYac2Po9>7H9FoW8H?XymbZ0#PTvoZ30L*bF*CH9k8w@QCd- zJof*=IZZ&rwrY__3Z!9)!vP7uwl)=#3u%Sqw;1+YT?$VIBAiNhgSLP8Keb(L6WNkF z`00Tf><9rn-X!EBpqs%e#Mw;4Ziwk<_}cdUwfq+^c%J9rCi87v!Eu1^y3=4YVs6_g z2J7YdsVB&Z<55q5pAxVvC!m=Za)#BTw~t8*TbdkA91&*Rd1s;^bLd1wQLA-@M$@GN zSjr$Vq0@tTB8m~R^I*!53})&=MrZ!0%P%i$S?*l-OMpz1{`sovHXofSmq*#~tdsKG z)}Xde+&JV=@r+C_F4loqPn2xTJgR`rgduvcb512(>%! z6C0NN8uogL8`Fn~qj4Q5h8bk&NLp~BgZ1uwPD{p5ie8fG{rt$)lLfpgR~x4C|1tLE zQBB-m`)#eFRf$L|SeB?L=vNC;S^|Pe6*X0qRBh`55+zl%Y(ivDGAb%WmQ>&iQ&&=-=?e{&u^ZxaoIS1yD1ZD2rd!PH<=ib@5jM3oz zyZDpu{qXv!xX_&TUsw*8`}L($e4fhkS^TTyTC7D(SOP1>*^FK;eF52XkeNVCMx>rl>9n;I}-+k(`RnQ;~$-GIs`2%Bo zG$AjzU^SpB0vG40o%YZ!@CM`FIuoMx#YLH>XvR{)WU9~Ni1Ad*w@P+C&TARmgt?|U zGXDjhvp7O~)gevYA&;J_0_h^MW&*3TfkuTIEm?jIhx{WY&p-C})qeiR|4tk2uR#^g zZXoC3>;KP5w)qn%U;ycq{etLQAvIm5d7!FRd2^>~2-Pw0z3@5pA#G|5Mty zbd_VfmzQ943d`Uf4trF7L7#G}GSKy9y342)W`ms9g9$HvRyf{#<#X2N;Xl^6?eoHT z^d7v>VFItI-|^#C{4zn*_+n1qm*dR3G#{Uy8F_qLEB0hYS#>HATv8JXw(+WYNbtO5 zg)mC)I&)x)8UD4SS(M=A1{{8|GtXS$cbBbJHX{@<`7@}wYG6i!<7yNGFi{ATV5M-@ z8(h_HF7nL;)GS|yZf4Cp#5qv^7wtS#x)s!-`6Fo$vH#a}d>&^$<336x%-%3V`XE$_ zzQQrYID~}Nzl~?a%p-LZ+Pv7@!B5JiUI#<1zuJ-C9M_w*cjV%u`2DW@>x2!68c>N* z!MATJ9etP0zZpsOw#cK;Zh5L!2Z$$&qH+jI{Z>TOeneb5k3Fy4U*LQ`Ie)#Kx*^dK zuC>c|);ZA=q&sIir3qZuzG1>e;Wd{8jrcBQtKZvm3GX6*!DTGyU|-s~Ms)HKDePe) z(N}Hvp>qt&|&$VbR?N(b#te|GG2=L9rc{B4cC$^FX~^o##pysC!{ zB|Zr+UEA<~zFS*9fjob8nK>{~8Qw+BhV?x{y*D&LMEEkm)Xo!72b71(YcY%&|J!3W z6WaRl(9sOV!wRZ>+BSdB?MeHYQD@Q)tqCekuIr|aZ*oN+bK@U9H;n_idVY1>0JV}A zn(!5NpCZaOLPYT>y2l64x!4ZYbYLL*H_WxS6&30=;~PzMo|%@Sg$lY8j@hB^_4>k4$w-~iViaUc1etDn7o4CVh7SG`O3 z{ulq9_odXoo>(I-o_Z?v0vd{)(|?bChn9hOU51`T=O@dEzxAr$(9y9~8VXj|Q&!06 z6vRPuW&~}Mpr9~FQG=$PZ~*346vi;7xbFkFG#UB=gOV9tv`VGG!2w=3zFH|>jIyDg zT=5&@rSB`Mk31GC*_%^l#Q`X)S8P5rvP}pLh4}Cw6}gqHASps7NE0DC3@4V;fjoiz zb+Q3M3_1>%sAL?%9GoX3(IK%nMTpfQ0+p1*)kQ9nTtSfY_%Aj%!0>6eD_ugiR_6^t z)p=YlGRi`GP?$mYgUx`PF%Z?6<{|*-R zL>(q5{U4R-c?r9%ii0-cE8kjCc)KvS(@UQvLSW^@_r05GrY+Me2^2?{J>#q`pY&gQ zyNQ?5>g5{c#)+L?|LsP<8R`9RhMvUaeY0r&3}sExG zzkqj(D$>QJdqeZ;#1MAccn2wv=W>S5!^wF0Z1s&yxwvk(H;r~SkwBT*kTV-Tp-qYn z_j_g$z+n>j1o;v5xh*MJE0=~pjMj2#aXb3)qFiioncODDXVfHg(k|ljn()Ae^hl9+ zIYD&KuB*&ka{NI%oS$s2$6g^ljp`l}n=(N$WG(v@MWlGo*VHdkgsKly- z=yUXU^gR+QB+enB3^YrYSp&@@?{$$fVGX20nzs+SMF_E4WYA!_$=0i_dw{W!4plyf zFb_YHk)AGG91s_4D_N8$bD%?~u$_ii9L-#?YEH9zn<@=FRf3>S89M$7Zqpr+k^9UB zENUPn65X%M4_KmDB#LoTVYL;c>>!zAtNYD54Zo&9g^da4t)}?ylOG9xV&K8w?jiNl znjqy>55XwlSR_kxF87=73-oa)NbDOPBx{kp@Jn&a36Am%dR;KV4iCl$)Efs|&Gi+N zrVL(B!=B7{^7aV5R1iq^Yx( z5)8j|nTF&Wa+YQUIZomtbbH}Fes&>W(i{?Y{BYebe^VnX`O~(Dx5%0vtI5Z~Na>Ur zV)^Us3r2zVjvW)+ozCvFcg6SFg2wn{HPg;MuUK?=C3tYJWvp*V^DUf6S+zI2Sex%u+pbcbMV|AV+B36d3dlb7=bh zw(heN;1ldAZXw=c+U=WOs0{sWc{sPRkJ+z=Tlf&S^g@%0YZFt>(NEEyV7PyEhRRdNQeyisKZ0-MzNPGG9Vur)LFOdkNYA;N zdntb;)+CPPX^you#4$YCa|yLK($BART*Ge+Bn z>aH5QnfZb1GyQ$&>r?iAO~j`YscLoT>X6ExGxxiHS<0-r!dkxlzR(i0O+zePzP;jh ziEP-(4w0Pb+>8uwFwS6fbRM=ALc?U=CJ)QBp475UCVUTHaT_IaODb;FrQocS3wKU_ zX>_G!$NOkEH;Uz7NEvhFRd?0rH&|7?rqG1SCcB&JgRkFQEp%-jx_2)0HETajAX?En zf+<-3Lfs`dC0l5owc7y?Xpc2*v-LG$N6qm>i6`5Gmn`B)sQMHPcVZ@O>^p>F6==_Q zu+9_Tair=;rD}g;KP%I4`|~N`7nJ?QTRI=q9a(E;pkESP8`t7v{E|)D9Z!|p#;)#x9G3Yj`!M)jrkkN059ZwhfET&$b`0YdJ5EfO~X_3DR&Cb`3;Np+T zKxSw~kmt~gX_$IorANA5>Hyb}FrKIi|9jF(%2$ObcVJ$ip_p^ag2t!wp6cxPxT=KO zZ|47WnUPbG5pSbccP2v|(QDUQ@VDBd_Bn2>m!5a5Trt(2)+ahF{Wj-jqGd|jQJqKj z(hQ&kF|9SDQ4fCYVdch2Q8CnSf)cY`>+fepv(&uH@%stl)!68BVw^6?+Rcw`hdp@@ z$CZzc1OrsY*l3Fnx8Fq@ALTjux&_JQzq}32Ai*|i>noRMWS3G)6dhJyMhSTN&EGTM zI*T8+T3m5nfAo6LmJvtXHp*O`Q3mcaSCf5{>O*GGFF*}lTfh#|Kg{%|2|6l^Y!n_n zP0zhmmP)H^ddZiW&VGB7DjkNzp4ho!nG)j`uBCD1i6rLH>m=U`rFPiS`to35bFojE zd_|%$*EM*)=YchsS$-#9$lkWjR$Ojha8!LGP5va)#gzOaPd&Wntm%`4C3aoR-Ay~- zm7I#(Y75G0guw--KKO6;mf_82$lY08Y$vm)*$Dv~=evYQrlG#bqp#Akju|k;P~R(R zhqf0SZ*CQNPRKaZ+lViX0*pjo@2r_GpI52jdV2f@RiY~Cw82qZzG<>CcylQ_xVI+{ zCh9QLpGsdV$y0>)ZfmFSJuF9q(SAgy-#_E79yryg5IIra>-f<@r>xI`pTB@{q*wM+ z++L_0#TS~?Kyyg#z>-kRZup%pUe`u^51CN8^L(F^UbJyhD60kWF^gmCtj1sSi1`?q zP(5D$ICFG?b$rTLyz3NZ!{z0*DJwSTM5hGNDtWkwN6z;SY^k(EhCTG(4CWBR{a8_@ zQ+Cnvp*!lH;%wJS>YS}%CQ|Rb!l=v@_OfN?+Q0Byj$ZM^Eth|xc$_=!e9Ew$E~Ut*kC!`OBjP| z)CXwBb76HcMP@HF^Us4SeahTRP2i^?|HQ_OgV)CAn2FH)OnCrdc31E&xR__p3E!vt zoh~uMVjGs@H{2(<_>`K2vVwxZj!ntiBbNIVEpif4OvzoJ^RBq*5cf1*bBLW@*2qs! z&TmO?)9Kz|F*8-#~)pceX{0l(`C71i%`GER4v zYDw%C*;gv>)G2ODU@001@PxvhRrcYe1mM9|CBPC{=$~bkg%PBFU3awbtpN-0rI*UL zu>Vw8dhjiHhae~I;x7u%@Cx#rR+e{Xl)-pr-gAfDqH zF|V9Fw_Eo(n2~xtRGH}P2Pq9bhi~R7Sq%q}wz$G<4zuKO;UM+}eD8B3t2FV6&S$|E zgxTIj*kyCo&>L=LQ;2Wx?e>tX?3qWK{n~QEr!XhpG5KFDVr~7zjWotGzV_EoEymty zKZKbZMXxw_t|d?KWATM$yf6*Lf{4E`yi#Z$CgA=;->q+oFQj~*Lj#P1&eKxeAoe&x z7J<985E)G_|5A8#-|YJad}y*wx!BDAQNj6yoG8cFbwlAg59a=AN@kB(eeRadh2fW< zK#-q78{=MM!}$l8E8N75uJT8wBm(PxPL%Eojy!Fq@f7x<=@Txz;#O9d9cMnimT$)0 zG{lyP)iPv4(<|+juoZXsS?~3|+IFq(ADE&x@%TvyuzqIjJ@6uk>F!Xg|I{SdMIRz**z_?u zsE}Pn{-Zh%LuPmj@Zm=oDGdppv>^0zxXq5OT2L`e-g^sh-EWgL^jm%(R440$%!y34 zKJMO8wz`9*Fe_Fb2z;~J4dWdbV1b<&cI>K3FMSlp*Ofb_nzEy)07M}j(a2c}&Td2W z3Q>K2VFwdD0fkG{kCfGm6VsOx#5`^a#Q%Yb*`QX|%QIW$4r$G4D`~omCurjhr|j}8 zYY)zN@c7pVdGgz!Wq3bjFd*fC{2^MbV0|4qSKhvCSH^pOaBm_+W*GUN&uMdU(Qs_0Zi z=0H-t9if?Uq&w?l0RU&5MMHgw8D<5&AL@XyoLef)#1tBfoFmw{~G8vAB|&?40I zdH)pl9CcT0mEBU3C%=mv!e{KXC@@6%S>LnZ%^&@otrKEMo|D?_PX7^V7Nob?R-53H47#AzCI2&GX!%u)v^$?bzQ0j}mvgPN;9* za#tVwy5#44hWXM};X3-39NArr49n#D@=8JtEXD(S{eWYne;|PZ6YqTfds$#+Y9G?XGHxFj;7oie6Z1+Lj6z_L4A-;XpEep~PVy}Axr96eDR$dBC z&#cn^vR(7)M&BX)VyxR|_B*|XS8^&@a9Jy_g}IET-3#E{fF=Li5OvRFe0Z23pGi8= z_sjOqwh7V_e77EM{D#=`Ac2*$&9x&VvrPS@YRR_ww3+OvmmFiEH%~(U5r8X zTX^V*j;oXDpQ`lzfk*&SS&e*$I-}omV@?Pl!&y~#APDb6zEK@2R+q3#I6#QjO~K_V zRH0%kh0+>3U6YdC`(-iRzc&CZvE{Z@8*%_JsoqPwRfrl=bTC>|xYl6PS*ye+aHKAT zOE*{-M0Ba@X-${TA40cr1Ljn01Zh{L9brJ1ObaGjgxi~RxYn+?F02B}g)HS6B`fB! z-r+*@Z6&%eWEz^Q4K`*+3jp8vu(i02z&koV$YlA_X!Yd;N&U6L?#IF5^2U1?LwdDI zrtI03c-OYWmqYq3Qxjswhrbo($;A{)MhW@k#d`B-G+m7#vlUI5*_MmJt1Gbm!v}#=t z$Vkp_k9_33cF~KtRbW+}WOh$EX64zW$}`K#K&NFB@8SsNB4ORC$|jbv3ENqdWWqjV z891zxIHoC23yOFq9<(r%xNP_9F@X}^nJi6lKZfnzGtv|lE=nL-+)FML9|<8(nMTN2 zoHwPRd#&Zkrev6Bl<3THl1^@p5fEwfZ!U~Px(`6JTjiZr^5$qOd}!JE3NxKFgT#RGMKUqt*$z9v^QVLR=J#HjOtn$P*J`z(_FVvbtn}ia`tNVC@db& zdZ#1GuyoX|HN#NRzt{O2@W0_i+F2tK;8jR8D{g=QQo147_iR=gm>|*{6;AS3CJm+9 z1N5JkwK#&mZ&_G1+B~8n?(>^8Yh9KWBTBBtgrWydkjMGv7Z}{4@60wtC&<^C`FYJ5 z)RoJv;`t_Ys~3)w7?aTEIIB;|7RAb?nXb)Om%EC@@#(j2dNPVK-)wK3TS%U6o8Ugq z7ru)MFKw(>&*SnddGAuJtr#h{wrvY+7$ZIMO}YJh`zf30Dj3IbYH<8I4&L+GOweMh z9g^i+nV%4Mwt1RgIVt|ztMLs&d%j9D+O;YA2a$^{wT8!F>&KNaH6dU8$NRmpHIPV2en+&UaPf*F}mwH?nzj8 z2;$p4px^rv`lUP_{33!#p~K3XW0#OKT~bsl@nx>ajF_tnf$(%B7P$l6fmG3L^R3@M zn3w)J!R;$Wru$0Kp6Ijab6E!6zQ^AH*ZOsQPT8#c9MWlkWi?Q7{3LuU`xOG}G*FQF zV56OB{Bf8n^$+UUB6{a2ElNls#T$X z+4r)3;GU{5J8^)kq#l~wP>uU_{%2yh;eLsP;dWhbte&C3;&Y9^>r;yEIJ&^B!EHPf@i1kr>?W4I+(>1r>x;;NIDtZi^4(ZUi!mQ87N zhlvuIgPml}{UmyG`YHTv%4|B&z1)7| zY^}&G56*etz()Rqc~y>?-DO{oe;eZ1VZz@K!h72=?b4Q!wk<}Gre?c~Jgtjo%E{wr z6AKT}^vP`XXb@QoOU;w>tBtXc;^}x75l)Wu>2VlJJZCLvIPOK8UCVa~ACkGhIiY8> zv!}U7@F-vU5Ci~zWgT#N_xMsI@J+~stY&+H?lvgpQ6IMqhitcAC|lYBT%Q|dEr|`# zwZfY7R-wkB$lX9RJO{8n#qB+sL0>uNpcEFt?OG})@;LPI=!LSnlMSDg;P1myO@IIP zpLH^Y^*z|cL zLU*vI5IRd1pr&y>k*#Y*5HEiU4p|mzx&Of~-onIfh~(FN2hD@gLSbp5=Mrnb946_h z9Kb!=$u+z?Mpi-axx?HmEMZ5hyQBh(d?Dny{Nt$}ec9F``>|J^E8RJl>y-uPS5K?> zkqvEKkR)9_OX)KqlSN-$(3-Fwmed4%>O9}! zx-sd;`*}tQjo%oDmYVqGJFL$P5KRQIy-J#VX!pp?9F*NF)Raf&*Zo^v*|itrR_J4cxw!$yc=+Y*uX)gUWP7A*6hM z+5fW)+2Qj}?611M8aUl{%Hsh9iZ=GgWbiRQ;FU<|ybPMQ+xRi<_am9lFKa%@keM2S z!AQ(d>~2FOppxd`QaIv5EAoju-%$x5mIXRe!-m7wmhvXT3Uj*C3(UDy0dhBj;L%);in zTP=CH9!<8Pqya<3w~m14eP;*G!EsCj)laWc`kn;0^uvP(|OIe?^Zsa6kY?w8s7?=Sz07=e&~bUog02OxHa{ zL+?y<(4-mj@inOag!LJ;PBt2{x33yKN1}~u54~d>!f;XO)?+kXvNd*JSg0eqQJZ13 z9Y0=Qeqc!owI?YzB`1ATS@B^rw$B&Nj!!A=M2kG57go3Mn79z@Fq?*V4ne~QOM4$= zi6a9?>)DP(r2Yq1PfqkxF|}#;GM66PZjo9ij=yWi&f6yVr_Gk5v`8}@ZrJ)0&0#!A*hi!(wxk`#b~5+&zG1Y=vGT_7 zB|y)TpZtdf6qpbs@4Oe8C2}gWLDe>r7t<uBkQhJk6_+3r(gR);zM%LdQt_+dvG&0G)>h7NBXjB| zS1lTKlQ%y<6c}xbXQa(+p93Qh!)~z`3cfbd!^U1u89rb)7jk+ymtPrzpvb6b}@anNWx+onI48DE`% zr2f-1a^Q?*v`bVnVVgj00g6?+2$bImq+aze{j`mZi7OVYqWnyR6G8?~3$B!ji&-TH z=qZqvVw%WdwyMFhE7N^i5BG?x&Wr?gS+fm3M&8(Z+J4;6+$cvqj2BrDnRo zUA4mjA7L+89PY@&8HEaF*y3Z&nTdnA*7M)L^Ln=Z%K|_ zeaOXBpdIL)YpXh1TB*J?m6*rjT_RZ=WMRVt2V>gPV;?!cz>D1Wc=wW6KTN5ab(ms8Y6(&VFuf#G-O)(3B+&05emC9-gO#D$d8B5z_v z-AcciL_Mzu3qBjk!|5qMV(OMO$U~%poO(z_kU?bAac^aGUmxFobLY zaPWxjQ!p^H!68A>R&85xZ5vSuE1C`n3986L)64$?MY~KX)Cu3mqCL{jkzPR0`nr^a z<+z>jjs+k2_p>gt;%tX(n^@F^O0|$-XEvAPjzK*NVF=oq5ii!tToA zGnwzQL{!s+5XOa$WFS^&zf_T5*cuDpOONrpeUzt^tH}+1>`Cml@dk@0Cul(QNO$JK zc4pz!6&{&~X#03kx+e8hqI{SbpB@mBtq{4%lk>j2_Rfbd2YHOQHnqWArY`P<W`joV;eg~t6({ARqbo%ALm>^PxLA&+@hb$Oy$s_rLKYPHqkwPh!1OYj6Q-8|yYN#FZhIXZZZYu1qpo+G_$m@{$kp zjJAxc*Gck8PRLn4i7c}A{xKr+Tch2+3SHb=W&D-Egk92+i*nVXo8Rs8lXrqK*&CA7 zA80E)XYcSWO!Uzv;Jo z`?ov34p#%#(KyqMp-;ZIzMQh&E_8g;^MgmYkIncjMoOLVdJx+xX92x z)4fyi4Zc3e`5}FC3@UioBk@$3<8cK}se+kbNj39Q8m4jiX+Za|THExxBjAKIfpPi` z=yzBO!FynG>o?(b^j~#_PPi5e#?o_WG~?RvwZB0Zha|nBWb1t66#i3Ob{~=%vgzqB zuj3?Gx=aOMb?0-TuW?eSC}kZ!Mh10#0YQqN!p2Agl?2=>D`)Xro6+XtP1DaCjm&&b zuIqyw3OrNZzK;yu^!)I358J`3LOkbm5yg%L|Anlf$zS{1UsycV$c-*O z0De-ZQC_uOKGDpQe@NiR)8ZXis89d-qeDIQyZQ`sY~DEsE$m%Sz~}ZYL9T zpBc~FfQ~FE*lRn7osdX;bzv3itI@aWcIUi3DANQWL%wH`ep%e^`m%H3{l$Usd(Dt< zhGOqTYfHT1cVM{IP;@)nOlErF8P^c|rxgDGVmz({Ft}`Y6W#H#0ct_M!Rf2gM8`fh zSXG@eS1M-`z&)ERCqs^q_!{CoW_rP2unJFnwOfWQdaE`~c z>@QJg-JQ@uLe!8O;wlG2g@nEm{6E?WS1zcv{}3Y>D`%;bZc1BtpoWo}z$mdtBt?i5 z=6WKDY(mRNn-Z;|qS|}k;J59n30DO0v0Es`B&*PbiiQl;N@PwIxf55p6{7`U=TeVd zugKercA@N%+p5_FW=a+nsZHr2`i<~uJ@8-DCEHB70<8O z+^B?iSoW+pj?}MTWwEYtyzN;2ch^>isoUO?Tt&J%ZQR5YZ2G{@%3t=&-zJju9qoIX zh>x;w9xVVlBx|l!e)!0l?5Ha)Jbk-Se`!d{1VMc_zAz)cN}U2p>KIM9-mua>=M3jB zXLp0O9tkWkJ8_+4RZQ-h-_TVpI{Y8WgJ(HM=WYSaz7m_QF2T!_?xm7K6Ef~IM5g)a z6D#q>$_;u&$OeDVl<8KKx0gs#!6#Dj@B-11Y61iM+~G zX)e(8oGx%Ju|HDsf$Fyo&6ZdG{WHtp^&dQ6aZz;qmHw^vMaj3|A5434%ux1)u_{`$ zKF1#O<8==-<(f3z525x$2)GrGWl*P|zUkbO31vc+#4LY$!In;O9lc%OtA9hk>ymaJ zv=yeGHn~Q2jr@MQncK|mvuP>8AGry?5|u-9v@}psYN}Qf1+KD<@4Ub`A$hm*c$P@>7(;(^_%ML zBsGaf%O`}(#~kiwZ!7K@L0uR$yXoN}7eGh+b0Euwcit8Gr625+&ro+HKNpH}ac6!Z z(antd^R`7NQ1$Ayl2--Gt#;-xxtl^1gwOiVcv0Iz7rm^%PNSPv7yymCdZ>8ESP~!y>d) zo{yIwp#}u7)r0T(Oj3$xbi&BcWjn>Qaa&$5S-;|fp&P+l#1|dB`Nlb1-Wx{J{5@&*#ravW-4wjOc;xl6auG(8bG+Ony}n6`3xB1Zh>O!um@F zk>4~>ZXA#arP5rL>|+Q1#eYvSfyNa>hdy*`^)LP-YyUv%2#?TM(>hOs4lu&kj)qTn zI7ZMRi%hct;}akxpK#iwLuffztV*XyOeCoubvJXz;pO)7RvKN8?1;@FoW|qgxndu* z)S>*F77dxUHOa;yB9H-HT}rDcaPJ~{5FeL_z?sCK!>kVcR4Xgth(J$|QgR0y1IB;lNkw-X8#5m7Sr83IIzcy?x zP>4ysej|I`vx+yHg7TZq&=Ml{5_3{req6Nh;Oo#IM4su6>YZDPQ*RbOwyW)qn!5R2 zuc>fbRDygoxqsONVK655RGt49u9FKmk`8_!GCJDmNKZBsn$zk_$)ZypXA@oN&8Ifm zI(F4N^Mz zK7%V74sSrodP9Ww2Gsvisqrt#V@M27F{f0Vs|WF8+z)NuP9VVh2nM-^g2Au*dFw); z-H0$Ay!`zur_-gN6|2&}50Vj@`N!OK`>-ax9b<0y2_r#GkR;ZeHZw;MweOL@II16Y zS?c7FyUTtnGGxIIv4AM@c5Jrg7-jO?AlKqv+`dVmuHN0x8Qom4p|W`>{cNVcAWgfT zx?kIeA-k^}41vy)Xh7vEm#&MCF7oc?{G7?A>LR%%5h(w^UV5VuAwI>bOJ1x$kk?X!7=J#t?l=qr){d-vvm6R4Yo<>O`O&dK;lv z{fuicA}$-BC9x-8t+stZb6~sTAuIz zxh|&1jEPVeBFgM`5xm|&n{Ao^?ipgiMsBq0l~y(L=P(eLA3ULomo^q=@gWsk^{Sc> zgTx?5dqK#KR)ls74Sji6?l!3*497S$>2iU<3LJp11K9oPLcpsDh3ab;fb0T4&Jc2o zTIV~zHv_*p1P=QD406vU0ZC&tA*Uj;=7TTP%IV^Lti71>)aQF8(MzySEEmixKBm~Aqmhzj zK3b2%RW!UO_iB4cq8pFQ7HkinUCT38bb#$!npdXy$NJBHK(Y$@j8k^wb;i8JUW0 zw6HazRy-5*?`Njc=nNlP!|8(f)sR|$$G=4cNyQITkV>fW9oO`B-_U`SNYE)HS^fHU z{elI}Tpcn6RCvz_&j>Af&$!RH)%-F8ZB`Co3~K!2@BS?WKnR~hhGJI*d=~q8K{UDI%p6jjaO^{K*6<2obnw_&(AzgOV(Sq1 zIruc$qQ~KHufNIn8QmO0G(p&fr0HJyU=;8OLp|BbnqUFfFS136G=`ZLfc%!(r}6s3MXts=f8*#3 zwdA~haLst~ZdULYLAn6KOLmO7C>IEC^pl{6-*;$Rmkp|2k$-V5NAH(rB%i{D3MTV4 z9f>U2Gv;so$6wt@=<``Nxbj@Zw?8h5m^9k9#OAhT0;gdtmyj2(FZTEw+Y98{JggK5 z8+q5c3!kBXm=$ABju-lF@oU^cSV1ZFF7LCPhWUNKM3=9Q+Hk~drKei*u9dSAD9Rh& z|W!0;dF*k_?$XJP+e z-DUR#s1Lnx201@)H!HT~SUhohvx+;-t?4exBxY+iHPbD0LLjt7rwKU~3LjF9v~ZqX zS*A(LKgBiM;tjP3xmu*8-#T9gwPX(1P`Q5D2};5gDnN5kWXP$QaA1m%MLZ6v+%8v| zh8j-+<&|sz#iBBZj*fy}4?+37{`u`+CqjgTo`5J4=mfKGD9JEf8)C8aXDt1{y8sL# zUwRb-756p=4WQI#rykS@k+|>2s#N4aYD$?G1ct+G6}om_H|x;7>D@w!y7TZh+-R;B zt^4ro-?Cvi&ZGHol6>IRo)eaQhiei4Z;ca+b!0IJ=!W`s{b1xBWY3HVGI%ho>cK9`^b zY|%oj@h20BzR*6of0AZQY$C)z&OeZ?Pi=7N>TMve$m~(saP+;ThIME|lf0d9g<~_j zqt|D4$D{NGmJ?2k2>M10K3sQ&%Oyl80*E;3`&H~iV34x~UpT%*C=}|uhg#End1)xn z*{??&grF}c^)Hjk+|#yC>$~;T0jMIv=Qv~t`V|D)K%Zw1XAH@e7D`#M4`H&7+r@_a zpUtcE#&5RQGRzF>%W!TRLV@go+P*tFB`Q_+fx$6oEBg)d3xkKZ3CUWWrvb|8jN4T4 z9PS)ErVpM{T{E0rmA=y5laZwUyytO|`zBKHPEoJS`sU%WUHES2Y-S&Xlrv_vSQaLQ7x`@-CWmMR?Dc-3C`% zyrbw1AxKVtkhJiYC)TfMZ8;MYb(MRJIN~ohu7Je^+@XCt41E@Fn;sn6>*1m+Typ(Q}w*BrAOyX5Bqph8;xSZ z()mbx*O{h6LGWq)Xpv1veQrvRGkb$G1skrPJ2xv+*Benp?W@vm;@7I*-gcVx^N3F_ z6SE!16Fh7Qqi6J%+{)(NlRRP}5c)QTB*k37Bw`k&RW?8WnRS&QgIw-~q&0j%X!Afa zpC$cN;(JAU*|pu(HziAYE&#NJs;(4h%=TDUgN&XfbCV8bS59+tK&M6`RD9j8Eoo&w zs2q(-Sr2*46W4bpQ zs}h+*p$|c)ua(q&jx9oIgGzV=nfr0_Q% zbafpKkq_BHp>cCn~s(<(HJTgO&Gfftd1BVyHDtn8!%>St%@VwB~EbC(O zTq6*ua~3nyqwzUa`s4PUwhiw&f3AFKw_({Qp(m-Ibil=y-)-Cbe0`4l3OsY&ZD%u% zk9E_k$VXm&lY5K*V=BZpWd2AK@$&y-DNk5%MqlC>V0jpr$NZ0SH#95o4{eMO_DdjH zQ#RV+!y7K|-%rUmCdi9yl#t|x9d(eH{ib-3pkcebxsc~jdLyH|&lEgaiG6gGx5voY z4E@Jh-tcUE@0l(8AP;@?J zh8e4W#Wo*L*ai_zv-`!Lsz|@FUS3TJ`NF4fvyaLReG5!UI4|7T5sSJLj<}P~f1IA# zIU!?UE4tj7^Zo?^s#xUc3;Q95`TBVbx=DYV3RCt|k-8%^<1ci&On=d>#G@B{=a$1+ zq$5;C?w9P9CPI0xjaiI5J07efed~;MTpTo+HdFs9q>GuMPRVc|{)+NTxzYrS+Te8< z9mz84b>2!VxSs7k?BQPxdp|bCGt}n~s$Qi{ByfMu93?T+DYF|mV&_FrUMc>GT5@3qr()~;5c|`n`<%{(cxm9!^3`Q|G;2&|Jo83;ns$S@ChstSL$g~(dRNiO!2x&|YrdU43wqY!G*m+ zD{A(#6gdet^4Mxm<=Pj(6+Esb$?|5KvV5&IO>?ZX-F$@70A@`FfTEJVYc5msGBbu= zez8}J`GmC3yy&+C@f!1u;roovd1FKNgsmy9S@Jd`E^1tmK*Ry1y;C{iA-!ZfooBm> zMn7vB?@(D;dhp#MY+HPlrs--c5A^+*2a6o{?BkR6R`;DWWiRONnJ?yQ#qns|OmcZ^ zYJw(3oR9XrPVVVqAL8(g>X1Q_h2_4}DQ)-+Z;K7lJV5i$4zdzh1djS-E*)sI_b;Pf zC*fsW8$7oH0-)*y2-OgiGRoXl_dG`RaL^{23NRDA*2&ps{wRe7uE^`}9O zZ`YQD3<{t?4s?lxuF&1bZg8GGm3zQT0NSSHT0*G$&`N(H4|LGOT989*by+^f(TB8u zy=3nvKRz&D_M36frDOXlc<&4Y)nQE@{h58{d&v*JS%eJ~H10jo1SH9Bb`Cd(kaNS3U%`wkwrjy(fC)1l zx~!4g>Ov?(shU46eG*PjgcyzwQk8#wG<*Q-Xt&OQe9KVAoD9XgeXO4RWkNdS0!4yk zTlQRlI2&>+m}ftv_j9-vB*scE!Dk&t09D!5sa|uXpNwIhTTsVH zoAHgcFQ;|f=-a=SoZ?@z4n^2voDp7hd?kfJeVDteX>Y$zha3$1XeWlE|cU6&a)tap{ah;o<|4Ax`V+c87|HhX$I z-s9xK7Eo<4-A$x$b7N>JY&#B}nl!v~CURM(A8drh+83QkihiA(d=$IJlQOd-Fwx1; zKf5nM?Pn=xw(U9LvrjhioD>#lS3$*Dg1M_9TRa-YZ|2yLD zB9lj1_t>oMl9i(Ypg`_Gs9gVQY@a_?wqgDm*X=_!ZK$XViVG?YZINoTYTQvbmQd&u zV({dPpUR9>$ELVS-7EjSzGrPx4Rv=*@qpccMW2JK#B`aXtdiW;umxOtwI%=;;&76dL{eGM}N$KQIRg{MOa4C<9Cx_u_%-iUv2c zm87Jg^K;*K9|}^Bb{>p}9PR7R0{%Noy;ju!C7a>Gs4V8~ffF#cQ9XcD%n?X{L^_Di zB7n9DTzXL3YrfewXkvElz?SB#UfW$rKYtSQPBgeldhuayF6QPl*5|Fx;h*2HT)kp% zw{7S!HLzz!Yy?)i-Zd3EAw_Hu;P`rz;{-LQf%1ROFmXq-&-kNa5hxZSmiW%ZN zhuEs>BHeihiS|PQFRrkX(>=j1T~i@)@iZaClx%-Qdw{nT;+hTHd>l@8y|3|yR#jlL z#39>IaPg&IP1{R*4GulMP!_{DpZBwC)J;^TFMR9e8!bZYc;q1 z{{qZex9;A2n%(_*Fw_8NZc|+r3hB;0o-@@iO~OCV%sO>g08P4=f$(lfq9x=SqajD%70hze;cp=W`N(~&qoTm8GQCI(oOG(8{ocA>orq-@kvmcEz&I63Uhap;C-$ z={$qbl8nUWPz{n{Nov%TrXD0oX{4yO!y`#7YC9;MX3$~MX%IR$HEE{voNCVVJnwh1 zzyJSz-|N1v;_^&a<~#T4^ZDHOw^Fl=Q$6w&%qq9$!uDr8U0Zf0f_Xg7I>e~N``VDf zh+*WTLKc`;KmV*!bPXHMlefAtCsjpYCFLDAfKk#huUx_ArE+#zeJu;08?l;8SFX8B z3|^7>$n6(7{JkKv?J^ z9Q?l7NeT$NAh2W`h~^YReXM2?C+aGNpzflZAV2kq4|LN8249HH6}M0p44J}xkd_SRJFl=w1QQBd z(6_HMaawTu74{dN&X{C{j&r4|25nKr8MWEgtu8Z98U<-y!_r*22<;ajJr!Y{0*oa5 znhRVGmK1JTYpsa@y*ALt@vi|kEMK8zMq(=-fSjP8uGfQ-P#IhSa~XqNf%C0^J*SlA z;KNWq`@;f3y#NSU&5<>hgXvoRWW|)a-kTVH;nh({f4*!7-Yn^z7sw!BGJT#*XGW{6 zd!>IN0xddlLA-{K{ZFPKw3HIj2K5dl2r3nHFt0~v-qWI|Bc3dzXtaMx!z&-jG|7KvuVk^!ftm76w94A09 zSWU|u{LpKXV`NCn2-q*ZWf$w`Wukdei7}P(Ixg`n=k*sa+9iL&UU_#4Lu; zFu&f&W|UwhS2&!-ASI|Gf@cGT%pp4#SU?Br_}B`+?br#9g5j4!ysWLD6A z>O$U@xfvB^6*o)jIGu-_=ZDsNPp3NQpEMrh*>U5aW|xI<>rG`TVE#N+cpJ>h6iF4k zhkDpTHv8giz|ZQi$kyRkA7S2B6e?nuqt(d%Kmep^?F6&YdlSF+NFWla*4WZkPeMJY zQkU)g0fYl!%3AMDfXLLs;gP)psF$c+8URj4O1?^d_+Qc^Z2>R)98j@pS6{potVp-W z7iOA0&vUYn@8@rSKicsPSe-2D%#Qo7IPz4a7Oo3K!&NGx0y)*noQg3nMNjzu6PO*7 z&Lqs3D<968<0zSLck*G$Mn=#`Utx|*=@I?p!{gnj7gmf&>R5P@eRYcxH`g9Fm=O;k zBizQ&@$UNe(-9RHV)LB+g7Pe`^)2BtF8y??x_RP zGcZJAe%9pVpZObjyo){PDn;_*;GS@u-EnsR)P$@Xvb#7j_MGCG?qwJNtqc-%U<_?v zzCt$1%{qlZZoF}B2zHHlb!W?3yu;*uu3q#VNcmKcl(H7RK-PsT*wzX_Vl!6Iuiv8!l z8N!2G_#DlK$X8fKXp`GGEEyE3;ecRI)B6s==i>|MQSy&O^`Z%6{Ih&-Mwt9*dEMM{ zUJ?}a-cz6B?YdCBDBdW5*Pvr%yVlC~4Y-|1w_v;>kg0_il=Yhh8@dxi4iOcTCWm=B znR29G%GzQtnz7co9BIBNAmUu0XF0JQFPdS#y!(}SVC9l)Mh0OrlcqOguAH0BQqR>z zo-$TF2HNx{e5Nw&_+y`7(eOj}1kGQQd5mj;1mJ;on5mQ07CjUt^EqWEtdO#^(<44I zsD`7)++W>w;*F)h!(_2f!PIMm^;27&*6cWGLM|WDBTqGlm~pm@+M zk<-d;@|B7|&S^3<&M%WRk&z6k{FzF2l+ed)e>@>Q9Y|>|Ce$-CukKdBo`wpzL%JE2 zC{?bAY(~+DX5&L-KSF!5-7{+vvJ^L z!1MDWFJK+Z1NU1X4l^F=nQrD1XeqEPX7hT47J$7)V5bGsZDm`0d7NLNO52n3r6Uz- z0bwf}Ok3r(94`kV>Ox==GG&S?xk`i$e+Kn=dMg; zg|~F|xOUtgq2lu}(JfVP^I;7dXsFL0L4FM6{|lhe(CC%>!uoYvw# zyX@GFr6nI+z4oVR|NXN4n_^?Ff_ls4!UN=NCkd-|I$qG5JKk_EBS`dAAa6QtT<0WT zDXM?)12pB5E{uP7^r_^v1+)6(YK{i`*)Wb6XVj=jp$i9>cHFgB(X34I=lpa}`DEE} zl%EK}D?2KVx+O-o96~885+tvdZCX3-IX8qSkPDmmG}%7YPox&IFo~WZY=?mBrfTdb z?L&W4WuWg+WBn8RMXcp+%b+ajVxN|@D!F7*&XiZFbJfq(CF-hwO_gBU3|KDhoHxLt z{b@A&zh@-`Q1gVUeK~F#Y!C{Jgq)c6Qq9b#AA=s9TA`WNyc85hLX%o4feKNs;E+VN zY$aG!w*aiei@3x&Lr3%3<@*X&u1ofwGxSMQ^FXE3VYjCz>{89$6UZBHV}-d!WaZ>3 z{XlyYN^0a^rLw5#$yVq0t{L`}8ZWun0k;1|mEUH9FfhEE(80j8(tGcED_C(55!J&g zD2N&vN0LgC&jo9y>St^=;`1V06GK#eCV7$#gXpDT5xg;M-jbmYrw{$QRxNzEzx$U- zi?weSVE5eRKk5IyIu3)wEjz%FY^e9j4qnFy2@fdIZHyW(ZySPFV55RI+*^yMJgsu= zp4x51+nSPS#j2!Dw`$@E7?m^4$~#p|?$Ka375+|>Hlp{k>_63?%x-Aj%np+Gp>>A} zg1v{{MAh!UA8@L;BaR4PesGYNh-*kBC_>dPy$j;PG0+sLKhA!PGHi)xq5WPucDAfxMWadfE zG*b=+ip_m=hMc$p$@waBPs_F&f<56W!X~n6q;gR}_~i&+5P;ZBe4T6H#A%my(5TF`2;C8 zR<7ZRHpL#$czSI){DnStyH3XZJ|`J3`b^MFE0CvdpVH^V5qt1f{G%6IScGZO6G-`H zt1exBd@rqGCGR6~zB^47N>dHyx7mn}$V%io=j5@vpUx^tl>-Z(Cbx0UIp+Jma{Lrt z3FX(cAg3S+fvtef|Bj&3n-!eAc(ovW9XL!vH6}BLi>q#U$YqBZ-(toyix%xyxXzjm zdEkYhurpp55BjAX?1z30X7VX?YR|NrFumPlJ8uiO6Nh}wp*yd} z9?67?%p*~5EkQI2%M)7hUxG25s6GFr@imm6#~`56KP=oP?9vfrk_og=t3s|X3`?r5 zjT)7BB-%+WVxz|Jt~03u;`DAYI1Gd5%ex#IN`3Trg(!}li8Fn}FdF&K*5&KF^ylCs zQ_SjI{Lv2~hWV$A{H-5bD)+CXTaW6oq8d`(rAa1pGsR?Paox!T#hu8h@0>7|l7TFF zOOFT)C9wu$?!B*%t3;wQrpdYsJ1w|SG;tv%wn~7t5F+suM()nB_w@{_fmp+o`%7;7Cc>0P^Xz{@a76uLIWb_h)fVEnZ5#h0SAaSiQ|XZ(Xk%}cOw)S! zFUs}_`G_h$D25`Hw?`>T3DW|3_U=6w2V?5;@v6aSR#3wo^JT+z)PR;n=o3ccb!@i1 zYkCxPh2y;c*6^!wKljEHMhD6$XKKg6T`ApdMXi6`!I;BV{&DrMA|CBXEH)d=y=3h4 zKE)io4_wc3aFdc~IP37I(el7H$I3uI&&T6s^u-EKW}`CrdwJE_^^12_%pFfLJ0s0q zs63c?>+y9ME7)%K9=kTWHcf2zT~e5nib^uzo7JX@Va@RrxSJY}Hso z#UDaheE6llGu$dX&%%W^?AUO$&Xq9^ZYo&-2U!j1s1`BA{A|Dt)_bATCa|*$eHycF z{J|;Ruf}KFG3)5!OOy8qH^P7=+S#Y=?*>>KN~=kW)tec-V$s*PEid=n_bO)>J+Z{>_jjATCl+#2fLM zHE>Tyz7|&euIF_-2UV)b9L^V?5mk>ur56CE=ZTJS`;^ERSviAwV(FKf5tXM_eK%df zf#35Z)HtfBUxp2KK7$~4@J!64h(K#x3>22;3DZcW5cx-nk4h_6>8fOV{zDB8By6M!?c7{8zgg zR(4aeBNHNid7}DgkPk}}ndM;9`=I}uIg0Pk#tYKUT_-K)+VFCO!xqt2iV;28lm4;i z$GVzA3M2;n6TP5>N!1*HRn-1_Mq%|iy)xV~N@QS5&?MJJ-$=P?#+twCTwrapH@pH4 z>i7>s+{d(Q%f~+C%)FX1k98={B)@a=--PYvcd;^ox_3D=7hAzSdILrrq231}ka-p4 zrqgW|a#!;X;X(Vbf1%EiWD%=Jdw}88TZGh&x0po31BlC`Luzd%Y+Y`K+6Ckmxrk)T zU6w#FKUZEQ&rtmX39>^E8lIe(lo=^=xP^H-(^fOP3M-qD(@+iI9M$wP8#Dvt)nyQ< zUBgwzuFG9U3Gsvuj^50wdQLru_iJVx1IiNRm1&D7H&oOv!3m0Goi-CnDyjohq$(m) z-9|;FY&j*>ucsnKNP)fe18#2ldihE7P@uu!a1loxTPArT5$5{u`Q5wYs#C*hX7$)@ zE2TGXZDb<$a}O2QVWUbnWmvCUHhw>40Vk7hC+W?%9>~y4khxa)nePO&Ui5=zOl3G3 ziRIeCGkXdagtt+!C6nI#$nbZo8S%ZF!pwC1!^}oJuYLh9%nO*$-bjp!x}I=AV^xg1 zRxy-Bq;y9lg&MaNzzh zb{N~qQfR0RdfGat{f}=+FcnILWPk+#v2@!U8{dg<9$6Zt(=IFb$Ev>h>Wix58v_)9 zYUD}HM|Hi{-K zPW>3ge`_;5DNoqlwlneYfY@X_5^YI>gA|{bD%V8%_(h_iiy&{I)*P3tG_>@uTqidk zg@c6DaMzA_#+?@cSeMD~tz}T?=7qcui1lK1^M7s}x1Df1HIHVTaw_~FN%_JuBFOgHw7HBRB&u^Ovd*fa1C$-TphNiF}z0t;!l%JS#S6MuxZV|^y#i#i< zJBreE-cb%QW9d%*4uVAt1F(e(TeEG9_jfkJrqHujwjG&mG{Prsi9o~Tf9df zs>huyhDn)s7~s7A*Vuud|CKfSqER=~Dg-!k;%9A>qSj|H<$VKPU=Hf~*YbkQo&f?n zp-6RVN4xW#_B4!op`TW5cYbcQS!4w~SF975z<<}gI{|_V7 z_PSHaRof5KaXq2TSjtqZ-4$g%8Mr;PQxYg8TWmB3a5Szn z!>+tW&U{*sHm^b6|~%bjj$mKE8vuhJWh*L!3TLBA-8mcpz6fmgwQKH&CmsG*rR*_`9Oxql>~zp-;^LsZ?t!j$Ct<65up_ zUL9?`&MJ@xH((-=9GWQQDtxa4zej@$;XOe?y-1gr|4OD0^~4XK6(xJ!{sZlr~O~^em%%L_~@tYt6HcF^R^|} zkYYX%v!Z?~8|LS@Hc>GGB#9b>X>b*$>miE7+2)=)*SH((_Z2Vi;;4y; zEMfc=rq24Cll9)P!G^CxaL7jBTkBD=p^Jh%Yo_?Coe$IzUD4XgHQbtpv9n z#WOK$jjsE?*LM(kq$VtdmI2ESkC?@4yhNsqB9J%@q5a@cPqge^=!1wHIB)+DZyk9$ zTe+%2SNINddKXRID7!ATQP|$ir1(QZ4=)+US4l>Q$BuASE*IoU^;Lc?a{d#>U%46z zPH2tUUPd`PPViZ=fF2Wwpk=kl*(9$x6tMCTz{R19q2bVX*& zpy`pi9P!q#IWq(>VtfEWq81j49B_b#;!sB%t9-Thedv8b>|y2-N*1Ew6y9Zh`UhjKk`4F~vV)L!^^=MS_vax>(NU1KZm|CVs*)x(c%o4L=LBOfA{_2n|^$ zF9&Ph;yo=oWK320`F!cF$gVadlVRXU03- zv>34^+~w~8?8ZN0hS)JpL8TJ)Snk$*1hg9=+Gm$QqmI+2Al`Dc32_)pPRwDx-*q3# zs@$fp{AK!}Iij(-kxn_+?*J5MI2 zrIbt=4+L%a^hW>OSUr9Z-}v*f$SDqfPnh=l#;RTNslj-gqQP=brO5Ogm7WlXVfq#L zH+72A7ueH-?^5b3W7$UGb+GmF=oCKQOQ4Tf2=%vDFaA0ER$8YtD5$f#$zxHX=fka} zY-`>tN%-={s|Msm{dNbxJ45O#J&J+-AuoB;ad$nABJr7C z_dp4OWwwIc>eP}?H2&(yQn+?J6Isy0I!lU;CrMdv#+B*pUqfjjMf9pDfBPxq&gK~= z-3By7ztgO;1ZhJfEQOa`==_%4q8KABWcOyW4R*lFpeVUp>R2o_F8eX^#3d#18FQL> z>0y)ul&^th&{)0->MoohN_CEnY2GtVLjo3dWF0DD$eSgH)FoUBn<%waWoT+DU@uW5 z$f$nmwj)=}ZWBx4VQ3i2oPSf|fgD33W;B7>bTMiJnIo3K>Kv*QaoUg_PhcND$;8%k zBGJ`T8$k?MkG^%#0s*rX5V_@)`qlH=vsmpyN1Y+CC!EHX=}*6aE=!SCZ1^~b&%u_4 zM5t>WvpAS)G({rdeB!If-U@BC#|heF%nkgyRgcmJ{>PnbWCYO)*LA<~J*k=YWls%J z$AZ=j38u_Tl0JtSk+ZSOHKOSNV<^SRk#VkDl;jEzafuqoeP{cqqv|;N!iLf4v>}J5 z&CLdtoA8mIBPMB`5K1Mlx=C z3R&@xBop0`GfmgMmQPEz>TxsxJe^WenN5Gm$1<(P8<&7~`7Id|GGf?H9aTf^yKYoo zrE=LC$6ayN7V2jbQ>HDShr8zU& zoomV@g{Dyc4A{A@-_PfjmB=LtR;7l@BTZa77lZP?Rtzkg(eO)Gjm+uW3aTnn_Xloa z2u^-11k_cavTEHqt&!{pU5~?pS-ZmY7J$0>foa z4!4>nMujI%c~uJ)n|5V|tYq6izltAz$CTK!HWQ;ZrkyL@fiFI9LBAWtv)Lj#>yqG- z(s-4n>}9G4YUgy>cDTZ?3Tib1bz`S!Fb9)fuoJj>Yv+V~3J&+o9#4}`yN4%}@X9Bg zS}OLwBbf4Sia~#Z_zMUcDpCn`!R`8I@@Jq}^GFdG*~&A$RF_LAYC)fu+(kDaW{7e# z(l@zd_TAT>02!pr<54(s1TRTsphmGn4*=4Nqi9jqK*{{(S=@ls^$lYm4smkU~0|ONbG7 zF5)r%^D|CM;RNQe_-y`2&kPa!$db1gWu=|lH&4Ibr1 zZ>UqmN66})dG86^^imygb9Uw&Yz$J3N@9*Q#eRRtI#M>z_^XmTkn1c8|M1IhgWp7F zo89Jn+=9jp(8i(5fQ@_i(z6l@uV=muInUD9SG46`I61#TFc3e^IBl32M?4lx1fil= z#&+^=rW`7Uq;myJyU>LU0ZDU{?mZ?G4(jXl@0Ox#Xwp>`re9<}Dhz27Ca<48r*Yql z`VR_=nO$%m328-O{&Q7%+fG^F=qeS3_tVJsV^(ew%usJ$g@mNC_iV{f=zBM;*224Kss~~q}^oH2O$1S>#@qa+(NCjdmS(dHA9X%Y}4<)bwpby z1-mAcbey$EUt+WWO`gPwE04h8Ya_CE`N@XNk}02be^5*5lk4o?KcdY0S~hrkGW*Te1$j zN_LfCd==>ODD#0HQI?~>4M|;d9a~&_K~*Df@hbn4bhSEi#q&k|yTPRJ9G@;iP(d5v z@SRr?qrEGjR)?AI@Wlnfq<40HoIMw&j%`D~)9caSQBL@pN6dS0IBdD($4Q!+^z4vv zwVCH~PywYj&p@m>@DS)*>JPxdXKPIvXmjY-177%{rXM4?*j7XMTq>qwu_T~Y$2>y{ zTzud}!hs4sbR;UN_HrLHtRUGR)lTy%w~F0%1Cf5<_IlRR}%D zOX<~SBX0>o+vad)tQrt1t>H6xNgb@@uwik!>JVsK2VwqCS@~$lX-B9JRKBA&MH1K_ zEn()PZ1gLXFs=pjw9)Wu>VA={D7FGz!U;T4wj6uhkf78&1vp-1L z4^$i~`oiwSt8An0ro4U3;KZ?jiJu@23f@1IBa&y=xfUq%@FJh`p@cYs1|I(d<+clI zy&E=|;+>#`!xQitQQ?wnCwbr9@rrqR=8ND&P{Q4yJt=LkLVT}>3C+lD&Xpv2Rx<$5 zr@WiuaP+)XUB#FB{OguaYxDPh*_T0Pl}9eDNpS4AYlZ219C z0_^9Jr2J$DCl2CgWrVPg$qH4mbDc1sN(g6Gp{bfyL_E0$Ejhn>%i@nM1^zzek0_9>`@DNj^m`bE=p0LEj6@`1;)oo@ip9Zj?EcpmXbDYh&h zGM}x7v^CLsR9VO;HFUHSqC${iOekCdNo?~9f*K&?VkhVOF~M-rq<6n;3cbD5AbBF% z>qx>om-#%fJusVc#$-_3rrFdrW4Vs>OW z6!VZ5Hh2-8ciVuR)e@t#xZ`7#Y#}C6P#?<)_vH05hmN~YeDpY#w3b}m8xh%+`wJv> zu~gv1shVT4sjQ0WW7Nn5(japNIN*~>CfaX7>-YlVmz()*bh?z^VDQH0;rt?QX@^5~TW3fs^;}->)p$;>Ds9Vj~Bj4<( zXzrFGd5JvP?wZbDq8KY3%@@Ai442*kLF*9*_I?pRJn$BwX!SR^s2Widwfh%>FO zwE>qKk>}IppXzfqA`=|ZU{GY@)xx$nV2R5H%&=gfxR_iJ1Ctu3AoP$z@eJGi$Lb`G<1)_rxq9US&0s{FT3ALMf7ODh6lPx85!4sI! zwP@gUGUy_CP%EH~+tlBR&2b770N&b^whSO|DbSOvV!GBs47DJS-5hmm;lIF52@{3- z1vqW{@Lz59X^uuiiGsFTz$+jVJ*;lcFf>pRTiExo7lIlCb>HQLt2L|ACfvh8N+~ev z7N|Xsbk#n-!$!RRUZVz3{E@x88keR9 zxAj;p*C$yDHAOQXHShASzrHe%^=RQ9E8eT|(DUGjVJpV&Xj}^7E5SKNczhyIR`NZp z*F6sT^5ZJ%80c(&x96JZ{3Y%+aY}R)7~?hX$y^g0t@I+Jd>V=bY{q!zB^1v_ay|f7 z->bK9)TChSVkqJO!Aqfw*_99odobWQd=*9#n9KAx6*CnawLnpne(X)wooN%W@M>=l zSBBx)O*u84rJP=YOp#_opoH$z{llK$9q($6D79T>N7rlkD|DYed_4?bZL8%cms46D z_<6Iv#cY3}dA&R1_xYo)@q|=-!ffk!dxIA3i?diY86DbgV?7xYBG*=(=t1>6d-a5b z?;JL+HYE0forX#3CYkOBX<`tZse^t^r%hWBY3Jo?O9IvBZiuS z;U|oVMKu3cIt^=w8_8(-Jw`&{oZc&sKR$6WqpVNa-2M3a`CRV?=SPhLG3_@7qFLCW zXBYSQ&RaVqv~sm1{Z(v~e;p{tj856{8^Y8!qR-{>f@1*aK9>^fe3O12Fk_B7#%H)T zI?LN$KEfz|3CXU|?@75!c>@Rcp}q0Se9Sed1FeI0p^gY%$LNbAfSd}1UAW))uk`(^ zpe75NGP9(4dqadUAE_nrtu&Oszbv0rzo=@>I-n0q6rz;cwP&)!xSa$3o&{{&Woq)88T^5lp7u$7cEZFwqRn3~(h!`R#0jdYw z@Kwyi>TYIa$}hC0T{q;(bcC?Wa)hYYwBLiVH)T6|FmaD$la)@C>_3Hmt}{Ekri08@ zlB_ATicd*vA6tjgl+FgiTeke#Xv@YZU5*J&24S%FcgBMv9r3Rc-vwgFZ+OF%k7yWt zaP{5-YMVa1xe8Ktf}z%@&ro~Lj9JEF-2D9aB6WW;H`ljtL8+q_@XBTHeP$RbhoxnR# zWeN+Gdo_O|vJiy+Vuvk{Irc6s7cl+JB?CUIzqgppZw`^qsi(Tx0F?F07_Be^-C-C{ z#RP(YXW+318_dB&mjCJiwy@s28jwGRE`&}%-`YmolYQWp6sbnPr&A_a>N##YZ8{8d zlA)8yA7%t2a0Laqhw2O^X$Ut+8gQu_z1JDtk!X;eY7bjYE&W;MrWA#+YNrcmsyW4*G&kEu$9xP{9*nCNwO%}qWMV3BcPF~@nm&XE>s zVOtTz&^z^-|JSg6C9<&S3cS_qUFw4a-Wj*b;h6)nZG$Z{^{)xLV?6hX>sPY$YjgUC z_tJPKv3SwhlDSa^&bayy)k$h_eY%=kJ3-^W*SQ~iJIeS=7zVbQZ!9OjOS4W{Fn0}J z(-edPWdXHMD3;e=^k3m)doq!NjskcU&`c5g`$6?opL3m4A#E=ohgei>O5>r1y8OT? z)LA~_RWZg=G%iHRSQIK)y5fX8^vlDdH+ zmU!97Hb;-yn&pT(&VA)$OVk400IERlLb>z1SED199snk%aKQGfI|1vdFk*KZn!SyDjfQGJ}~JzE{Z(a%`V0b;KSl6GMC7zQqtZIQBhb`BZ)2&I1QRwx zK%O8#5!J~(M!o`cp;38g7RFe07{jgu@7eF4d>kW7!wcG&<5aqked~;l?7zDJLL9u# z@9B8tBsT?Aq`Uf^YBFStP_I${k@$?nn#{!2Egxk9JA0FLTz(kCer;s)^(fVMDJ4Mvng z4fmjfBtJsWOi4n{O1C!d9{WQxu(^9j@z zSvem<4llQ-Aawx!tOn4R)A5@EW4_u?zD3u#jwTa$D?@1=ruZ%MDoS(0kw4fKP`8Q$ z`((&VWolOBtEh%S@&@p^_npMz8!~}}af(FyGKM6MHPb}Pd*;(*KNw%CFWP@Q1vnkW|ym;V*FC!0`IZnEp5%CUWfT z6zK@J7Kf*mn&Q=M9$VH%ay?hmHO(%tTx{%P+m+%a2Qm|eLDQu`piMnt^iVg_7O%YW zmUQ`dG{0u({KaghSWQK~RE#4b==-fweyJ^}Gy_52!^r1NpU8Au@lf+YZi7a6o)8HR zxFG!Z(V`2WgGfg01up;7NmNX170G`3709AM6Ha7q?ce%*$2*x*h>Pzw7=rHdN7kb| z=IhL8Bnjos1g)`E`;jBS!W)(kV=Ybtxrg80HZ2ZUUQy2kQ)tUxf3JS3V*mO;Hc*TH zfsh$tOVQ~0#xhzrgy?)PjX>!IBr#FB4j<51vx$mm;-h*#QE6W`$=GsdnzTMm&Z~9p zaNk&b8gV6ncjT7qsEuee+MDHsIx?JEa&+BkUz*YcbBw#kj#!G)-C$MzLE}7wDU#Z6 z#Q(hb1IoHtk1pB%W_|qPwcFNbR5s1zJ^j6h@mtuar!m-=+5D_macx+(smX1=l`iw# z%O&w>^KVW-)#k^w*;p{%>Hpz|0c>3${5&VN&G{zr?27bHIkExb@&a;!i^BNw*B)C@ z9l1a*+)hEqfO750Gq6U4zezd|8iTl1iRR~6R1CNI+^Fwo!nv1$Z85M^z$J7O&Ru^? z5PYwcw}3ldh>;Jy*hl%$XpH3XKC_%QP9dUSL#snV(Kg8^jicbG)Kpa)d8L>+Zuu4Z z65a?phGyn{A4}9}sEy0^$MVY)${C<((1*r}&4jkYB>-f}Rr@J`Zd8nmoMXBjdIK_` zCGy);nI+;hxl<%l{&BT$fYuUtxU`wDFXHdpc>p83Y=7{BjN_t{{quAZI;kRa2r2~V zcaUuh{d<8L<0i9j4l?zOK^Sm_ZxiB%$P<_Sp(LG(P8uyfl>wteH=SVk7x9;nqf zq?>qn6-4N9oZpTEM(Yu$GS7}KrSJ83?~)3Xuu~&70H_QtXhoLwSD~gdpzBh@x7n3p zE1QJG6{MPyX=a-}`9p;3Zk5TuHH%Ry|G{i4o`G&|0F}lH6MZzBnhR=;5_!b15vUSL zAj*M(*u(Z~L?(~$uMEA49%+U-wjuW*?4M?+li$QMN52by0JW6XZqqk>lVc3Ea@k9X z%OE(Mb;$A%QZ(%eG{iA;?R2#G886LiOM8)+4W~nQ7l5|A)?R2?J%e!G!o`o#mryxD zXZrR!yhJL|Nfsrlycomo??v?DGx2U&FNrkC`i6mMfKxP^CdzGW^*o)zhROK4G}d6OkmWoMp!V7Gp13{lVgoL_t3 z2d&ynOW-PRXdR0CkWULl`jSGm;6tQILt5_h&sD^w zAHKZRfbYM5d&Dv1NRun}uoJhPkEtmXz6mBAkBc}MxCU>X6W8q2{r+q2R8)U_VZnv% zXp&oBNM9}4*e`{P{hYC}4>h9rG*N1%T&ioF6U}7r}&^#^FQUH?wXho=*F=zek^{2rf z30@HT8QQN^yUBkUx}AI3q$dTS*&NPG{ccR#k9-r5F*hKGsW}3{;TSF(@>IJoRCu6F z)!gC3ze2&Mr!>gOBD^GYq4JKS1gokGNt8D@7QERaS;>Dxf06t18!{XM4h^aqZyxD!)2qXJb_z@4_a~0Mpl{jn&hBfbg}S~7@n2D}K#_cBRRwPaM?~-~j)QkG zPIa8l2zhv3Hw#qxSIg*QFD_&(7OzzWpJD5}66om672MRw<+U05ig{Qk*nH?GkUkqs zXkXshl?pn_@;ckVMrvVSk4Mc*P^>NHZ2l11vKY^M1@$!EVBJ+N#TVaOfOGm-m#-V= zb{42M1Gzwcbl7?wK=!)`A!mS&%o}!*dhr;d(k(+$zZf6ER<&Td6Cn{X@Vm@fY)|69JIe&o3^7e zHCcRx?fq_MFRFv~GRH4wTbt#dKLxZ&wz5JadEsoB+(eHp%d1WiulP(LQj(#l&HSGZ zS~{v_tZPgdCjzBdw3V)a07o^&d;0)!e6+6@dUTFB4><#C%2tVFHjUNQHy5k za&!eYa-n;$ZX{i(AjGRkyX{zuX|ijy8Lr*hHJm@QDCgsGf(R)(4_nc6ofw=L0Mva; zks2AMP$JcEYIVH&_MIM8^OXoH!ErrECf)t?Q=rdzjo+@O8RRWHDVMizQg0 zt22Upm>Fmi4nK~*&I*e_Mh!H{BmApU^^h?`RdVpLft0;iA@)ceNP41&Is`UA(*gmu zZ)H1qDwXHfRrbbxn7AN5j+k2(Eb}Zl}VhECyp=Rm^?#emA zHBuWkaFKKAKj78BPy~ZjI{vlnUb2inQ33H>8Z(q$Bw#+PgM&l~$;3R|yjQ9L}bv>T$5W6le#CQ+pLuMS0olK;2G{@l5*v zr5NZ?$cD5tT)+gg@&b|I1$HA`%Ok9V5(EpQy;N`Y|!1E*P&4X%cXUdOk6VN_Oi|?5*HKnF;@6dZa4&rnHJ@ZJ0-1uZz zxOcNhB%WsgK(g_svlAcz`QyUJN)wm@-*&H)IIbaU=522UD%=hFZM~j z+)qItwj%tNm!E$O)kAlK721k^HEy<+(x&8QU8Bd-yXvujazE)XxFt*i7{()jfdL{& z|IsV%h?#$$yfEf`aQySn~~i$up%Bo3j&c|;{Rhi>gXb>W213J)oeqGKSj zYEI}laS;1nfJc!(K15K4p;1b&Bj5O}ONy5)Fp*<`DqPcTkPu`V{l~Z=au6xsUWyz?if| zXDkBzdweWi|4r?-D+Z~w^wJlEw=m9|hCW-+&5a&>rsaNc{LS#7qYr6dT3VSd46e-f^JkB8>FRK5KXXH%`?otc@ zHICoH=~|EIH%Fc7q`riB+nCYJHP>N;UGhb7ta1d&BCl4J&=!?RZ6+Zp_3TPjME^^m zl+t(9!T~!Fz7qxrsJsW9o1pu;rxDe8a1&~vf&_Hr`L_u7H;S43bZsYEgQ>^zYs`?t zl`H33AcwbHvjHQ;QV!{+%_E@Gc)SGK;4>0vXQHjcvSYdQ_CGG#Dv_c~`vCxW_4XAo zFv+}`8^#mBH*NTWz(n3{Ef{}5U2*9|^_%as>Wyh9+Aeim&0zL!_ymMd=S9#_KkP?m z8mq94KzZ;?p3JaNxp6K)NtBqvUI3XRN66c2t@=Z`N^}I4Ph|wNIJioAV@3foZ6lhAKon&SAcf3twjys-1-T&2LZJE)dM9 z3Yo%PJ94VWtUwXo$YoL9H(YM^D~F@dT(xWUmgP!y2n`jRakM2U(RZxv1Nwm)h&~ti zB4A#~oi_Bo5B-R-Cnti?8)MG}!HLQvNIm}66HGg!7+i3Dx_sK)4d1cX(D!%Ch7pQx zKm!j+GpDI1qGBN4CEjaD1)AZ?PYjCwEuNx#v`!7x841&N?tc z2$#{Oqn!aIAHYuWQsrZh=s{B?BSnFbk8t7z-JG|nfL#zu+Ez(JW)QdwB@d8BNfn$T zR2YF~q3!r!StZ2of@XG9s9;wqHfk~uKr+dI95jGW8kSnr6WsJ8kQ3?`*=8loLJ6#9 ze`Fm(Sm9vcdym}{z)XBIzesGot$~*|y##?_VG@MmkafWhlRuCjY4MtVFia}OwYezx zw_e=FnHQxFb7B|ku17b{+86vu!|?yp-h0M1m3?i)V@1aj%P1;HR8(|O5gF;^sOT_b z!!{yPqM}9yl|iH?;i#w)DY4L0ASx<4polaPNK|?;0a3aMEeSm&Aw42AY9Mgbt+CTSGKwLI3Q1Uo(Md6@pn zpkU!n@e65t8@d27LT&UtZ-|`~_%LxN>tj&#$hN@+6T=He3*nHMR}813M8@7VzZ|%o zaj(MCD<@>_ugSLb?U1%ovT7}$hYD?)!Z(V00=VWnOU8w+a6Pk=EM@h>qyccAfK5jA zKdhXzq|}h^+r-85dArPoLl@52CCoeV&5mi?qTm=Rm-o*H5Ob3j(RzfhS;R{-F z1Td2%0O8n&;2HQ3dYAL5eeVKCTsaOJ|C!%{O)LYHapnpf+K#uEn0j>?)8wGXq_}c_ zc@mH)o&V>rcc&Mc<0?dqJnlp4Ekis`#O}Ox_#-%$w zd@0OhQDW=9A|4j@!)2cxhBPkRQuqn1!gpp9{MG|hk6avzcBX!-5Hb8@=kFnzB9_oQ z1!eQ7nsnwnl%>WG`GN!`^;>Q&$V#$65rqi+Hpd9jq-hr;J42#$hUo z740zl6>%?EYhD_arbhe)gX%aYYeVusmJdTbG3QZaQbrsI`^OpUJJb%7u!h4Q7VUiL zw7o0HWX!#;F@arZoUFSZ7&2ND*`E2H^vOkYZy*4T%@E#1L54i3K!4{S?fG52ssY>c z6T|u;+b4{7%z_O~J8g)+nt8{V)BMyFzfl`s=JtNM+X_yYU~A0&qxpb&vME?_w0MzG z##-O%;*SjfXS*EwvcQm7wNKMe|Z-R?xywMlEQ^HJX#nOJ{8yzk-Yn@*M>gAx%LH&!UDk_BJ zfRg)vHkimCOBey|8Bj0#Ol#m8RD)zO@69)vYj!WlHGV8#Pqw+HIH|tvYKGbd{DqWx zuLYFZ@tq6%nUZy2+|R(q=xTlCd^v+MXe>7Iv&-v$DZ)$kzo`Ikb(Mo|)^Jr$T;Sc; z==M4;Z58)5_G>lk9U=Rg~Vh{6+{)E+O0&4{Cyn559U6Ygchv_cPB= zfSkGiKwCe21Dtr}dDXsRB$~vUGio}+lmDIs+0XGBb@UAF_urGV zO1bo4p3k+4+z(D3Mkh7ILzVs)byq}3WBZU~aBLn$yMfZy0Usf8CX8xUkcRoixw@;dJm-1zcWWJdxJgt#uX{{>!`+ymOd#t0_>p0dD# zrN6Wxh>jnX()bNTOE@+b8f`#FEMws_fGpW~Zw-1h^uO*f z9i}3#2>)q)>?+nd>P!$M#gibo`bj$ruG5>kN|QW#1|1P8U(KTY6Br^Y3p)4e&)qwF zjhKKIl2yEq8^}vNnh1I`c{M=q<3V;LlK<&B`^gMs_eeVUWmr& z;oqRMQDIU$o%46!3{nb~im{+g2q!qNv}|TUv1lwfClKw-7}?T#o6Lj5J}VNsct5P+ zygvF1dTf3qdJ~RB6MTC_)Y9C2Vo@dxus$<%E$SwJqz!7Rl%N4dZ}pM$Q+VJAv4(`l z55^Nf^mpVF6}4)C6d#$v4@o-6pOFh!KRwC)D#8^w);UlDME5%vfD@oBy)+7Z`7j@< z-ZmSzlCWw!8i#tlQn~=yYLdh`Agden)+SEMnriN@Xus>Fkb@@O7vxqbrCm!W_8#eQ zw=kRb*cZM$8ZxKn(WhM(qHF;+CFu0peIX@S-VnIKe)2}dS6=q;>RDoEWB?9t2(Xo= zr-MsjNsTdJaX~&wO3x+gvU{LsFWUW-NLd@cny#$YE~N;W*F;N7PtIzLo4{#@?C$_U zkz|c0MdhJ)4zx)n0m|=x+N3hiS=qiL!HE{4_6#zu6D*a`VZ?96LO>k$f3$Z^u^l&U zn3pMLs1G=`r@Ok)Moz(O|9G9arw3%*!eVRZ9dehp7Y?5Ql|wEvSO77_QP5HB+wQWmZv;evmd}w zA>$2Kf7|7z{eTy>fqNc2EY9)JQv0WRoN=sgfE|$1z=!i;gNVHk0Tt(2QpiGlACG6i zyp}oWggB>=h4>7z2$mZ=o$$B?Iw$U#R9T3JQm?L_O_?*Gj?zW0Vjek&HUepJCjR6> zg;ST4OtfqP8k8ZI{pwmckd|b|(fhs@NBKg; z+XcXK>5Q`x3YzWqzF@IXQNbt*=hZ_}z@$M%9Zd-v6Qd!bg&F(j9_4xX8F~R8 zxq!T70BS^q1B{&hA_fu#eLsVoiokDxIFP-IlB_MGG}RtWG`3;b`0ErS!lSo3DXKV4 zcg>5dcvf@Pmf8LG?L~8L=-U&oXxfN`qRNhCRgP8eJC!ywj|HFURdiSfUMwCtsQ76= zEp|QOP3dGt^^r~|jHTzw;i{5Vonjrw6Vm)Vy46t=g zG&OsU#GaNTt9#jn_%vull6OFVBD{ewf zAhiaS+n8Sw&%jQu!uR}cz@_&JIe(L-Mz}nD{17HFvr+hYLzh)GcxpBDc6wwrE8Ykr zi$SxP7FgQbK3bg$dZ zp(`9>MtM(99ucao* z-vC(Lt_G@NVzOSZ2Un7gmmg$FbrbBQMyRpeP1*d$o3olF#=pVHud^?T5L1+kIG9zw z{g}qd-REMYb&)3!l$6rkLyfiY?J4F?1i#YX7QVrU_21FtJ5$;ux&^Bu(FYL;m%FG{ zF67P~j?CteIem(a8`+C`cAeUwyQO#9%mj%eh&q9ofX$a%iP_9NLw)=0NV?gSg=Uo>1C zwJXZ5BE-|a-1_0DltoWFSt~DP-6=uU2pU6TZLC!|3`&or>1mA!-IY(T-r^&-K9#tS zpm0TYw}mh01!yxAfa9(g5bQzMBRZSu6E*|A#5~T@LwADUn^6`d0*yHLgCxD$r)a*2 zC=`WgO1@#VA3(Mnqx^(vg%0L~Zssp&Q4AKo6FKkQRL)}sACfpNEEfzfW(~?#>yM($ z*69_ItTDz9Yh>}9z-N1Mw1IO*bF-R&kZ69%4CB1&RbE+^C92fsTw3zWZkCz+c*zNls$@ zfv`q&#NhC#q*3JijX}C+X`K=NS)3Yr*J-+g7rGj+(WL)bhJJd`aZ0j6o>0xT{)su7 zs_qY8;x!C2W|(!$-SQcC3fKUkc%}4TA7jG{x8fV$4cjU1Oq>0!B%wlL#N4#T0~f%L zban&hfM4TSPe$F8lJ_{~c4#Hi4(Vcuop#U8R+BZP-R({qbSFjr(>0js!s`qwLPvQj zjJgP7bfPZi6e4U=&UbqeMleRIQ4E8|nBd+nxtUn{is(#GGWTv5y#k1L;qrRw6`=Zm z{t)2Ekz3=mqIY98=rVjJij;qV zuW=syDQ}X&gaxpfLo7`3M2=?=I881Zd=LBu_0vnCqU{D@quO}%l*28>02kqtuZp;< z1sTpTPH>i2;^GnmeWcO+b}E2WpRB<0lxL@1(6IhuJ7#y3F5t;TDe+|B9Ap&O#xjb0Sa_3eky{i5>MsBQc;nrUKg0DE z*<(#60U}5?%+mm@c^pJLW*4$-=g<|)gs=hsq)@pcK&wkpx;Ugd8J+2ONpA3^#vF78 z+B5<&Q6g$B8wOnBfF6gl-~84Npv`2{#`)rR*@GH z(X^z9@R>$us!1`}70aB|PF&)y^Wcci_eb869|0|=&^gbg^Smv7ubT1=2YE3EL)P{t zBw1-nFVn(|HWp8Fk}V+Uw7!GI&!Y+#_He?QqU?bx*LCO`C-g{(8wgDRpPCMiGU5OZ zVefhhAUEs7U6fTwF(6m4Ekq`|ObhjbF?tdQNk$+IsIgZflrZgWFhZx{Y?j~xHg$`& z5Gbo8^QPo1E}c`SMY2P=2!e5QF?$49(qqKwrKC|^frz85>=HF8wlVf=L3yJ~B+Iu& z{6(G};vlBlN;uMF*Ng=h&Qnnhp# ztxG~0%zP6qyhn~h&lE0#O%a;V6$KgJU&vO5uJWGPL^teMTwl@Z&CxZ}XI6%!%M#F< z>u7WjbB(ZutEjFKlvRs%rRZJPj{$l=sVB#~LW}};{;{sVI?J~!(q}rWn?0ZC>c4(; z4+VKX&D`k#djZpn(@{v0tt?-_Jd&|>rly@CSp#5T_a1ZuK{Fk-2eCcRfN$>)n&z-3 z#|Fd)&JAeCiEdN5X6KH8NsCE&9@AR}dNZ&xleyO`S78xWR2MJ+k?2N%$>EpEU7%E6 zu=gsGt0aGm{!x0B(3_C0ELU)OoBhFaO2@el$>2<^z3Y6AB2V#a(W53nd*@4d)(&wH zFhz*jb8o9+V<|a0K#9R!m}#@pEicde90N)#pmLlXT9*$hB-f%iYRv=W(}ghq#DKuZ zC>hZ5(*~V@NNj16EP|uc;Fs!!G(Csj!PQ|`MRxZGo^B|Q?G*Wbh%@Rm)%?s;!PFOz z5q0!ggAV>yqtnC{8rkcAmQkukhW!m6_$Qiv@*9YCzc{i?S@4VdPdjC^c%?L7hNFQi z`{{bZ)5OZ0;UtgvO#;vNG|sL<&ON|+*FI*xZLsTuqXD7PVmqqUxQP`nEM&3YGn>|(=P(t3 z1_kGoJ{D`-gd!HXoIO|M0o1FmsR417bA#FK%qMm%X?PpYsYRb+hnzi#P_rha;<@isXX)S$xVA7xUM`2=r9g)@tU3VKSK zCS0==83x-di=sX_t!3zZ zJMjk*hf)FhvNZB4B`bDb0B)-7$g$uxNs}Ni!)3Uisb7*S42=*|J!PrGzg7o82U~EL z9V3kI-q|2r!u?2^>pzqu0&c5Z)M*!p!x!(pf)*=XG$e=0&>6gd!t0!mLAcJ$Y(J4M z4R+@KY6mm?fxtuyG<*O|!ALqF#4jycfN2*(>b=JE*`9R#x=kOliD zkxx`!0hJzS_Jr-;N&9{rPd4SjNTb4pJ$?K1%ySxoTH!)%a8q^w4UNtF2$488c@VF? zyPBy3%AP84%z*ApzDc}<#Lz~W(>6bH3t78-2>lzdwgT>=Z_as~r{N}RU2uafRO!d% zt%g70a6=)zeGGkHqj;}gOS<3eIIr01r;|Zc8osXe)}m?>;Ub`Ac2{3?kU-%OnvN4h z(02<>Ip*@tQ}>in&Qu$aw}9N9l@BK4hZY6c%FSiZvYpf*xZ-S8!UE8~%7zq$p!TAf zkBoc&u|f*)MFBucMP`j6$=dw?RLsWfX5mLB!au2^Sy=B5i}%k4Yh22#u8J-W9o4-6 z6pjDGKq)P9U3aZHU?D;9-$>OvWIHn8`xk723Sy`$(UV-V6jrLJYl3@syVs;En;gPM z5g#WZMND5+v|_}>C_H2S34%13GiRs(brXW5Y=P3Z{Q>y|eYioN9VtHnbQiN21z-Av zm$h?qbhVCCS5ZBG!p+v(3(9JeNaqJOl_ygYyu17_4Kb9XHu7}@>sruu!1w?)pO*?i zxe-#(?b|pVsdo$DQPfUZIRj3njiQLAX)NH3*9AACXMCY9_zeogz|aAu1pthfhjEY% zZOYr)ffg-B*T--g5NSAJ4KXJOUoZ`eW4IeT)`To;Emw{)7*&h_oEiyjy)I!%Ac~_( zBuQ?qbX=9sI(LB0YIWx2mFHiz2W%I%52m^4Kx+V#nXQ;r@fiP*LD{+o6KUH={1MR{v=v!CzTKeg!9?Rj^I zo~^f@`X{FimdVU?E`05-e8t~x(rcm9PEWU>T_$K845R$ESSMEA7CmQvDZas8K+p3} z#I?jH%scQ(mmVbZF96wixqIU#Tuv~jt44&Z7cdz5+2DMlCHD zfU#-GSd((GzKSRH1a%2CDR2HzVs@w7qVB;tLHo>*BkFx56|Z}r;S)lRMeHq76*9Qu*tgfEf7t9B~wg zqqRVTV=S0%A^vs?tjSweTU0#0eonLtMw9WjxMBPRtUka5vsa95RBrf#W3WZ;;~U`m zoChE0Whu$J=o$D<9s>)QqZU`QY6(1rqNz*NP#zjzcM{}~4^Riu?_jR#F&~fj6OpD`zLs z{v_~^g#E$`f8qXmH9?{>+p(H(r0cUNEU_ZBHdX!k8UBLNCIKRR8j3?=6*CccQ7LJ| z8*U-0=yFCz64q#W6UfO$a!gloVW21&FpxWY)YjcDm=`)c&G z{eEp0zzHSe_hYLKTea8{qr@FC-zpaBSgc=Qn9XBgV%-0yVerL`=~zRO>H#}y)~CYt zV*S!t_B^oyKcdym=DTznD=gUPa>4HhiLV%!^Ci9lYCLk=LZ$%JRHZ`UOCA<-H8dgQ zxTcf!htWLwaOZ2#RYJ0wHxd$T-#hwe?d>EE|Iu*geWlS(FmYJYwWMUf#*Q-Uf6XQ{ zdelWl^NB{$Q_l(Br7ZRD%0`wlEJxQdDU55ZIwGn$gA%W0x*wj0Y^rn-Iy+G18kh59 zBl8Yc{yWHdGo@YcOgX-V7x&vEeTtrKSJ6J<@>eYbE@IAyK;z)2VAL>oi7nKTDPWc@ zj)V^HzHEu*1IjbFxpw1n0owcipWHLF15F~4)g%dhR+cBIcK=rc$FMC}EW=oDNbko zQP5@^PH$)2%#3mEhW*f_SoqrgN+ETZQIg*$%s0>n0?d2^&#SYeJ&=49dB8rjR%xZM0&Nw{i#%_F% zcOh4*z;Uh&94ucx+^KSL0wsOFpdP<-l~)IeFVQ;IuPP{qPt2?Sumxvy45xRla#HTm z0baQ)lXe3;@*Xayn*y$k);N$bf^RZHfR`5iLooF%8&4PbL-OW#ffP$nFzMFw)T2v+% zvaEVrtcSCQ=#urtP4h(#%Ko217`NeC^mSZ-eIeXv4mx1^*{t0BO*dEhd8+~SftVU$U8-M|GBeH5q1{5hOJiQ@@hZZ1;Qby(R z_4bX)z9BQIY5W z;lhd>Ko$HE9w|9C18Kr*IYdT_|Q!oDZbZ`2ScH;9olPJ&OSjf6Od{#|T`#5Tpfl z{XRHZ!-f@*CSUsiWFr7sm^lZxHEGsb6xE1bFxSMpjMa$-eGrAV^G`&GC}_ZCDS}ui z2IKw$w|@j-5`2P=DFVVu%)6H@?$vN4bE$xi(ZL(XeHu1UR?M-b zc~kq_m&7{p+%({Pc*VRhuw%R=S0yW7X?Qw7 zrz4>w3mF5jEu0Low;&M8KshKJgp4O3V@h9mjM!U-H#O?jG$<&r*;qXQs|oyXTWN%y zxPZj)&~bDS`)SXHwBI6E1qm#|U{xg|*((q^cV0`9&ZP+Exs7b84i#xgulzHNBRAi! zsCA!8@Qdk>cArG4ue)S+`r=C{bZ8-=k~3KCTUl^8_^I}sl_53L#)H{*l`=!n4yPto?#={TmnMw@$Dp2 z8gw4;Jb7?~f<|VsdJMa}Spyo{5ev>6QL0MuRpcD)vG$PyL1e$8`<)K1e#21d)>G=C zB_sT_Tbd;uo3c|I<>$-b8Y6p+?oYgW5U^^-@&{S*=fd%+(wH9(){Q>-h*sRrLr0f`oC4RU>3;K6 z`AbSBqRA8|5!L~q<+r-;MHdyr!m^XlYZm>j8g#?N0)~vvK+0M$_mw}=AcEv-2bC2$ z91ZG%Pi_$vqdtuvnKWO*L{XfMPu=c&W(yy*$}#YQ6=&YtAL-qzGY7K%hM{Wv=XNYg z^`!)xIRW@q$pMVgeKT|B20QfWbkOZv{^9c)!>*zYIr}DOlj%mh1VvQNeZfqS1QJYEF@S#sxumD8EKZX+g3zxCVSiHsP3ICf=STyvO z)_;AGu8_%+M8_z^(}0%!5&b8k*Lxr6-BG+0!FOHkF3zumnwIQSHKodimyFEwy9B_T z1F|z!)&aO-(0%5hG&&m`+{3sKw^=wGV0N`Ae$lb=Kngk{0ge> z64$)j8Tqnocy`j=u8AwNf1P~k*inb>qcH^vPn4^{on!dE2-$vYTiD44ZO!C=&TLOh z%e>3;FRd~ZevQ|BDOl)rHm5M3OJP!*?1wyPq~$T*x1Bhor9W4Y2h8b-7kf1}!!7A0 z!!J3cbBKQ2@JmInDuc>l3W>*3Rw2HTETG_Jinepo_`JB?99^akNc!fW?=*+eL+~N^ z7H(uxPrWKtoepdO2|KFGz2GEk3KN~!JEW_S%z}^lCUwghJD%u*{Fa?R_Tic@_AJcW z+nm!`uO_RKjH&qtby@OgGP1%r(UpD(-jXVXWlfUs{>*+(zle=bX4wKZ_^{4VL<~hG zzA*Zce4Q+;$_z%|`*Vck(=vOXPkX1Jy;?fkVzw?n1G!Fh3mR;^Aase`zs(>ICoDNi2Fk5C7h={a273ziP zs#>!Z_+oG|;)~i|9?@*3kOjN^$AUmI@Ku#AbrEKQpv(-MPHff3^wNAqg#PDH&A+#K z5}l2Uar0*(d3i>6d(PIhrM!9($B@cEKP!TYYwSZzCxk7o63wrBLHfyp*8OXYUvG=m zn%CKx-DETA)NB4ZwmKh<6U4C55bnxOkBII0_0r-dnf1EcD?2)pe5}LzG(0j=#1ReL zCyFU4vSc1hSOKAh4D==%NBVRdM7%W+pCNHp2|abL$a?gRA_vWIc&t-&bKtM|AEu$= zZRWl}{vERnP|&$&EPDKh4{)J`L zdY&I5$%aCip-cmvNUdoasISVL)1jY0nK|Lel4+ACP1x13jO|lmPrXL)pFBsAG9e8q z;%$DGq9KM77&TB1^PTfYU2WFoV!n!t_Nv14kCt*s5-IZ3L!BASgcHx-LB0yf;7f;i z;GjxguC|Lct;h=LNkGqq^(+ZaWZlTU2j66Y3(nW>irENzeluB%GBc68L=8vI0LJU5 zWAj+IAyrKl;gTU+_#*fY!HSV42-9-yG7^J18efq}o2zJI6S0{dfb@f}II{R52;_LI zQ1tacDi<0>9w~6ea4%Q`cnVynp|$D!5M3(i&vm_;u*(GU3%DjYz;~3+#?fQwAoC)#o zPyS7$o!&iSj5KX)t?SZO&Rixaew#qJ++`azE9c&Culh{fS`$(@4$}sdltJoLbyJFn zWPT~rE#<1_mWpDD7pM?4z{3H(^3R`IDXYu3Y?~@g+lKg)>yE*}IcPrms%XD1OR?|9 zA$UFOInr*1|CeP42BcrxqAJ8LuupeT#5)|_tjVVa_Ud+F3;wf4pKB@;K?6nLUM?g@ z0?MwCC&k_M+saa87GA$I>zoL$Abi$TV86>!(2LNGzn1YeD;v{?xQE$@ai?HS}Ev>#EHSf~lSlOw&V-Yn{nsx@mi)pJFiNEKOf zZ3V(1Oo-Iter_|l$qbshTwe4Y9yNAbw?hi{CRZIWPOl ziwxi0@$rr%y~oPP{63R>RuzcKhnr_r-@05BpkE z@Jhh)RTl*_y06-(hgd@_c~h@{4LMHa@|bX>z7X zZz4iNOZN-;0pFUGK0*s3naN0%PnxEjfn0iev}?gcTlsE5`-zc8W7jeK?7vn3jaEXVal{NIZ8SioaEpCT-3EuZ`I)y|t$i8!Voy zaP6*c3^_aUK;o;?hxXO3QaY)E_TRG!lAqe#hTVrZ=PYr_V|#`3V!@`aynJHA2LR4R zR@W9}o29o9s#)d9LvCI4=IvVDKcY+m>iuY-LPX#N{0&{c#OifE@@|!AP6un)xN_RB zlS&r)k46>0Hh!;icx18lZ`y1>4|Vf9=D_p(zvw!VJx>O@6d6?|vaeEiLSbNk<_kQJ zP6*^WMt)Q2?va)ry%tTJqGvUx>KbUp|rEb-++H12}Nw4Ae_xR zv@aQ~&>%$4OQ@RV-ncgzvID-jU3FRaQ94D(<|VT}-ODM4f$+J}!~_I6Q}(AYlT9pl z6q*IriEQB84?Mf+o^}IX1Tz-IU$24kTIZrS20nu|uZ|ODdrBfED^IN=I{!30IYld) zvNCkWM#7`Ksq4Ii(@OnkU2JA|TyzNF!d&t<`Nd3mR4#Qu>d_$Na2~TaFV(moWzJU| zJ$Wp=NTv#_NMTvhl%gYbJfIYNP?9MAOB)A90~?CMh4)pri%WEqekaX-iM)LY=ET2H zMp^WN?h0{KCK#a~hWlGjKJAGDigc8b!12Qe!AKEFv%Y~r6WaT8n9LK%KlcB9o5nmb zhs_&k|E8gFp)C&;X2q~r`$dz$WhIe%>0#*OOkF?X$nLV}N)NMavWM*Q8Y#`jtzmL0 zl^gmu1jSuqeQ~D#5y@M1tZwc;#AwjsnP`z4GUI1K$l4P0{(Z}-xdR^m;uYTAwo$ij zGGjtCfHahy!m;>fPeOwjqWi+J``1h5X(i*39AUs0Vr%ryjB4;UO$gFgPq>0E z^M~u>v5(LC{_-^Uk;NL^zzU*Hkzmgug(;*e!z%sxbz-J6%VBugmdjhk=8>}mbA+?z z%)9lV{_Y2v*Hm+#f6Pf+9brOvNRthtBvHmuL3|a$3*G~&cb<4nU!g{)GNOQHQ45ak zFL!$9vMhLHHtQP9;UR#_iGT`*3y9IU!{2w|{D8yQPWTm6VD{^ZIsQop?ehbW%jI`4 zUrZs^t3XpTHp#IiFs%KidZ4R6`fl74mkiltW4D$$$q~NghIR{2wSqVP*vz2)n6I8h z*uotA;l#j<(2}{VeNz(AmysMEBt`5}0`3M_dT}0SfFha9$~GmUR^9CzjHtipvBNqvdsr7-HHM@Y-$kL|Gh^IlilBN83I+3~W`P_uzpv<+>ATVZWQ zp#Q}62e4p`n1kA1E1^qYlFw*FwuLTmyP6hqccEnianRps%zKP^5OwMX{}t;`7`;S} z*f-nFQQX2-kOI-rnBn-pzK8c%h(7}Tdi{t`eJ0Yc!^^G^_UryUbO?5H3>*u9yo$Rw zo7KJZl_U8I9-WI8X5M$Sp(Q`YQ+tpa3wL^+5JEH!QboP>#JRz%w_Mn^dv#PFCoA;k zWP$hGv$>=UZh<$=$VPNLs#Yk|x*17si+XWm zFK>!69m?7-YR_?`KRhT(3?$GI!*no!!|uC^{TpI7-%7#5I!E|nG7^t|liZ?Q)CpUyPT&C|0s{H3J<|vExqc%`187aE#mctdiKCEUu%LuDr(uE{2;LR zwz7hV*5S{jvG{PleUBIA)7$&&zJkwoWYSvXCWO7ydgS42s+Z(gO4fgSuQuSU>_QqC zUNT9t`>E*YP~o$sp(_z_6Ev#V+UKj{t;eYr5iMS=-X&x2v1{CNlhx&ny;CIc_Pj*< zMAF&+_Fk4=A$5DXqrxM_6cZO$uhg+oi-5HVhK+h=z=TI;J> z=zj8NgM!aaG>~skf=;bUyUPf(bW_K;8l!E@Df;(5{{CvTemRgFe(&sB)z_28_!Q6d zYOF-_d_U}X_WHId^&;rJu^u^i_=2sfkCgpXl(<>K8gl#R_S&;OJMl}wu^RvLmj5>f zR^qE*?RdnPd*eNA?nZI#$+M4_Pye*b?Wh^yhP<}kD#ZNvoaDe=*%zBr8$1hDXVtyu zJf!#gRa@RpUM=RJH|CZGZ#o=hD$M=BRJIlMOil>-5S?Yuf9~L=ZeG@(%LuGF(Q=Hw zmpmlMroMXV^CkwoXvI`NhjVG)-t?+oU)Dd{v&uvueEQPfnOqKD@FvT2&IWTrlzw-0 z$hol`EvO>WZuZ29y&h6e_vOofkDt<;a!jqMlN1 zQBIuDn`4c6sGunySC!MmC){l^_l&u#;b8N<0qVR6kp~! zKUv-?)5_7lNlGUqzpFHHMNE{wpjRK>*P_~f_-@0SHRz&)uOHDXy~|VlNTv31s0dr~H3jwmUAPF^vxWAYy}S91z(r_fQ3^s1a&l2difW`2zg=SZ^R z0%PEjNTmsyKwm2+{x+&ly#Y4ZtjiJRfftTv>jnLNe89PdX?{Ir)1fRc8EfIBf&Pv zdyfao9Ff<>n`}N=Ta>>}kw$$DF$-;SBx)DH>Z#ykDcydHN~rQKzh{13mPE>6lj{qO z)Lmf9!#+|O@A2`X-Fq$AQRW#!doOU(8CO=P50^2Rm!aKjk%hCmPhGh0cRK30gK%-W z)N}L|jfr`NS=!?}#rbCzncZ!OvhbQYFg9F|gB(W7h~hNg4&1?;tpA5gMProR1=yg| z<}T~JGiUdl)w2lCbQX`SGoz>9F!x#B{C2gM`e23OXK6PB9Xev;6}f0FayY88{IDe- z|Hry}HhJ1Y#cK>;SZq+fOXf6YG&0}S?Uu>EtbbXRbJf>hGWYAIN38OvZ+=#H2>uJ+ z!wU{f;G*u!{sjSWZJdz1E$IguchBJLr&(Vaw~lP`nd$%QeUKP(`V2V32XrBqpM%`$ zH)F~!XL{OiqDhv01|sxr)LU!3_D1k`E1_JzA-!YPl{QicoM&&vgy0CCHu ziDlc)8z}|$M6cC8<;@q4lhA%bl{P zwEkORWN=iF#Cqp|-lOgI=AXpxz0sZ%V2BR6+>NFr)}VRBsws@mK|R0MT#MGFYgTg8 zUV1f+7)AA^R}hc~>DWu&t9FlPdks+8Hi5H5^@kngVmcId$+=fw8Np0-uK$~aw=31; z1Pm^TO55w;ui^=Q)laP6dp^hg%|#78lYI{+wj^|!VbEAgky-Cf(h)Uye;jmKtZonk*xJb4>dOERwrW*2O*eJV7Y_vR5$ z)7y9w{Bi^GK=16cOq&${3p>(41atN584~^+lCPU-`N#Nn{&wSPcAj>|?PN!O)@hfS z^$Y+p)W^a3j5t_)16$IVCF_5hP8ta7HtJer_e9F++6bTuCsRB15VY?M`oW|cvNIZu z$llCbOC99rO8&r8sqI%YEOd(~Xk^B;E zNb>sXm@t*z&wM-uNR)SPWmvmOqs@E3=hJ3e*CttL&YW^$X(wHi;0WRrt#tBBJlF+T z^h*Xed6byG!WXrKyco{*RCfHy9=@SsBkgsJ&VSGX?8DCofM@xwr7q!|HlO|h^w074 zYZu$tosPo$$EbeaRRIuXI$;yl5j9sV@oJ8TtDy$`pfe*Y)AyclqLX0)xI2Lco>(y0;mdz+Qo^>-c?B~$*NG9<- zx?#H}1+JNHx$zFpYy0)u3N-I6ja~#oSkp3|WWEU@OsHm%k?FO3SE295dH zx9%`J$HVQ|#I*65CnsK*aDx3Ck*y09{3UeOVE6W!sAG}Qo|Bxg>mC~CF~b%7WTTj` zSnOYI=tXYDaJybp_0)43Tz&48)&Knc9V1w!zf7=O%5V22c?KXk7-BNBrqqIY3(*A4ZLNi>g zJ3hQ%7?1WyX}m(qiC|IScU{_ku9Hp6aZW!|a-`Tl>d&4VibUV900Jz%`@# z>r7kWA_b+g6i?hTGOIL;N-YQYN$cm(M@~79GTAoeD*Q=H-{xhn_xIM+E=;DL^DeG4 zZmn|>8g?rkPfM@QnrLv1S$np=r76B~hQs4o)Bv`54D>%w`JWN{|75~s_HamltQdJQ z`Jeuk6Jgs4cSd5REXh_8JmiSNDHSWvstw4Tzn>X<(+$Emz+p*|frpKyrmgL7BONBf~Ix%&KOLR}J$uUK-J>wd~Mt!-HOj z;B`}9?+ZnZBe>`xm?vn$AnhNeH4MJyuo?NX{X!1)nLX!$F!A8;*geYkv25N0aI;O@ z3P9blN5LOe{-nOpxi_|eSe(A9V|iKpwqK6dMsB=nQ|?*2oZX-Z6J`A+EY4}CrPOH7 z0??g*FLEY-UCF7ra6x6{;nR8jC!HRk3t**QLP$lP*0FTmhVol}r)RDQ$`S58J4`Ly z0^X!zo@WHNK^k*TMZ2*U?Z64|4KbuL3Kk9?fC2qoXqy!Dm{23 zEs>Pi;C!sdo+>P^IGn8bjQKtAE@577$nq25X1GnMeMwT-L}Ou}oyZ}tzbGLOWLF=c zx1$Da65L#H6JNVruvjoUf02zdFJ$~OfGY+1)lYfAi{3~CH;>IW=WI-4ysr#Vv&r~>&e=K#<5KR5qp9R6n#{NG&+lx3Guy(}~0PtgW) Slb^t!KX>fi{%YH?EB_1GLUoh? literal 0 HcmV?d00001