From 846d114c822ee76eff57e5f4edfdaf8e2226e8cc Mon Sep 17 00:00:00 2001 From: Jeremy Ellison Date: Sat, 8 Aug 2009 11:47:50 -0400 Subject: [PATCH] OTRest Classes --- NSDictionary+OTRestRequestSerialization.h | 18 + NSDictionary+OTRestRequestSerialization.m | 45 + OTRestClient.h | 87 ++ OTRestClient.m | 102 ++ OTRestFramework.xcodeproj/jeremy.mode1v3 | 1351 ----------------- OTRestFramework.xcodeproj/jeremy.pbxuser | 51 - OTRestFramework.xcodeproj/project.pbxproj | 204 +++ OTRestParams.h | 69 + OTRestParams.m | 139 ++ OTRestParamsAttachment.h | 38 + OTRestParamsAttachment.m | 38 + OTRestParamsDataAttachment.h | 20 + OTRestParamsDataAttachment.m | 27 + OTRestParamsFileAttachment.h | 20 + OTRestParamsFileAttachment.m | 35 + OTRestRequest.h | 88 ++ OTRestRequest.m | 96 ++ OTRestRequestSerializable.h | 26 + OTRestResponse.h | 69 + OTRestResponse.m | 79 + .../categories.pbxbtree | Bin 84 -> 984 bytes .../OTRestFramework.pbxindex/cdecls.pbxbtree | Bin 172 -> 81672 bytes .../OTRestFramework.pbxindex/decls.pbxbtree | Bin 172 -> 80032 bytes .../OTRestFramework.pbxindex/files.pbxbtree | Bin 124 -> 1616 bytes .../OTRestFramework.pbxindex/imports.pbxbtree | Bin 124 -> 4244 bytes .../OTRestFramework.pbxindex/pbxindex.header | Bin 24 -> 24 bytes .../protocols.pbxbtree | Bin 84 -> 936 bytes .../OTRestFramework.pbxindex/refs.pbxbtree | Bin 556 -> 61392 bytes .../strings.pbxstrings/control | Bin 8212 -> 131092 bytes .../strings.pbxstrings/strings | Bin 68 -> 172994 bytes .../subclasses.pbxbtree | Bin 108 -> 896 bytes 31 files changed, 1200 insertions(+), 1402 deletions(-) create mode 100644 NSDictionary+OTRestRequestSerialization.h create mode 100644 NSDictionary+OTRestRequestSerialization.m create mode 100644 OTRestClient.h create mode 100644 OTRestClient.m delete mode 100644 OTRestFramework.xcodeproj/jeremy.mode1v3 delete mode 100644 OTRestFramework.xcodeproj/jeremy.pbxuser create mode 100644 OTRestParams.h create mode 100644 OTRestParams.m create mode 100644 OTRestParamsAttachment.h create mode 100644 OTRestParamsAttachment.m create mode 100644 OTRestParamsDataAttachment.h create mode 100644 OTRestParamsDataAttachment.m create mode 100644 OTRestParamsFileAttachment.h create mode 100644 OTRestParamsFileAttachment.m create mode 100644 OTRestRequest.h create mode 100644 OTRestRequest.m create mode 100644 OTRestRequestSerializable.h create mode 100644 OTRestResponse.h create mode 100644 OTRestResponse.m diff --git a/NSDictionary+OTRestRequestSerialization.h b/NSDictionary+OTRestRequestSerialization.h new file mode 100644 index 00000000..1caed68f --- /dev/null +++ b/NSDictionary+OTRestRequestSerialization.h @@ -0,0 +1,18 @@ +// +// NSDictionary+OTRestRequestSerialization.h +// gateguru +// +// Created by Blake Watters on 7/28/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import +#import "OTRestRequestSerializable.h" + +@interface NSDictionary (OTRestRequestSerialization) + +- (NSString*)URLEncodedString; +- (NSString*)ContentTypeHTTPHeader; +- (NSData*)HTTPBody; + +@end diff --git a/NSDictionary+OTRestRequestSerialization.m b/NSDictionary+OTRestRequestSerialization.m new file mode 100644 index 00000000..6dec7322 --- /dev/null +++ b/NSDictionary+OTRestRequestSerialization.m @@ -0,0 +1,45 @@ +// +// NSDictionary+OTRestRequestSerialization.m +// gateguru +// +// Created by Blake Watters on 7/28/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "NSDictionary+OTRestRequestSerialization.h" + +// private helper function to convert any object to its string representation +static NSString *toString(id object) { + return [NSString stringWithFormat: @"%@", object]; +} + +// private helper function to convert string to UTF-8 and URL encode it +static NSString *urlEncode(id object) { + NSString *string = toString(object); + return [string stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; +} + + +@implementation NSDictionary (OTRestRequestSerialization) + +- (NSString*)URLEncodedString { + NSMutableArray *parts = [NSMutableArray array]; + for (id key in self) { + id value = [self objectForKey: key]; + NSString *part = [NSString stringWithFormat: @"%@=%@", + urlEncode(key), urlEncode(value)]; + [parts addObject: part]; + } + + return [parts componentsJoinedByString: @"&"]; +} + +- (NSString*)ContentTypeHTTPHeader { + return @"application/x-www-form-urlencoded"; +} + +- (NSData*)HTTPBody { + return [[self URLEncodedString] dataUsingEncoding:NSUTF8StringEncoding]; +} + +@end diff --git a/OTRestClient.h b/OTRestClient.h new file mode 100644 index 00000000..53e77cd3 --- /dev/null +++ b/OTRestClient.h @@ -0,0 +1,87 @@ +// +// OTRestClient.h +// gateguru +// +// Created by Blake Watters on 7/28/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "OTRestRequest.h" +#import "OTRestParams.h" +#import "OTRestResponse.h" +#import "NSDictionary+OTRestRequestSerialization.h" +#import "Element+OTRestAdditions.h" + +@interface OTRestClient : NSObject { + NSString* _baseURL; + NSString* _username; + NSString* _password; + NSMutableDictionary* _HTTPHeaders; +} + +/** + * The base URL all resources are nested underneath + */ +@property(nonatomic, retain) NSString* baseURL; + +/** + * The username to use for authentication via HTTP AUTH + */ +@property(nonatomic, retain) NSString* username; + +/** + * The password to use for authentication via HTTP AUTH + */ +@property(nonatomic, retain) NSString* password; + +/** + * A dictionary of headers to be sent with each request + */ +@property(nonatomic, readonly) NSDictionary* HTTPHeaders; + +/** + * Return the configured singleton instance of the Rest client + */ ++ (OTRestClient*)client; + +/** + * Set the shared singleton issue of the Rest client + */ ++ (void)setClient:(OTRestClient*)client; + +/** + * Return a Rest client scoped to a particular base URL. If the singleton client is nil, the return client is set as the singleton + */ ++ (OTRestClient*)clientWithBaseURL:(NSString*)baseURL; + +/** + * Return a Rest client scoped to a particular base URL with a set of HTTP AUTH credentials. If the singleton client is nil, the return client is set as the singleton + */ ++ (OTRestClient*)clientWithBaseURL:(NSString*)baseURL username:(NSString*)username password:(NSString*)password; + +/** + * Fetch a resource via an HTTP GET and invoke a callback with the resulting payload + */ +- (OTRestRequest*)get:(NSString*)resourcePath delegate:(id)delegate callback:(SEL)callback; + +/** + * Create a resource via an HTTP POST with a set of form parameters and invoke a callback with the resulting payload + */ +- (OTRestRequest*)post:(NSString*)resourcePath params:(NSObject*)params delegate:(id)delegate callback:(SEL)callback; + +/** + * Update a resource via an HTTP PUT and invoke a callback with the resulting payload + */ +- (OTRestRequest*)put:(NSString*)resourcePath params:(NSObject*)params delegate:(id)delegate callback:(SEL)callback; + +/** + * Destroy a resource via an HTTP DELETE and invoke a callback with the resulting payload + */ +- (OTRestRequest*)delete:(NSString*)resourcePath delegate:(id)delegate callback:(SEL)callback; + +/** + * Adds an HTTP header to each request dispatched through the Rest client + */ +- (void)setValue:(NSString*)value forHTTPHeaderField:(NSString*)header; + +@end diff --git a/OTRestClient.m b/OTRestClient.m new file mode 100644 index 00000000..ec990375 --- /dev/null +++ b/OTRestClient.m @@ -0,0 +1,102 @@ +// +// OTRestClient.m +// gateguru +// +// Created by Blake Watters on 7/28/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "OTRestClient.h" + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// global + +static OTRestClient* sharedClient = nil; + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +@implementation OTRestClient + +@synthesize baseURL = _baseURL, username = _username, password = _password, HTTPHeaders = _HTTPHeaders; + ++ (OTRestClient*)client { + return sharedClient; +} + ++ (void)setClient:(OTRestClient*)client { + [sharedClient release]; + sharedClient = [client retain]; +} + ++ (OTRestClient*)clientWithBaseURL:(NSString*)baseURL { + OTRestClient* client = [[[OTRestClient alloc] init] autorelease]; + client.baseURL = baseURL; + if (sharedClient == nil) { + [OTRestClient setClient:client]; + } + + return client; +} + ++ (OTRestClient*)clientWithBaseURL:(NSString*)baseURL username:(NSString*)username password:(NSString*)password { + OTRestClient* client = [OTRestClient clientWithBaseURL:baseURL]; + client.username = username; + client.password = password; + + return client; +} + +- (id)init { + if (self = [super init]) { + _HTTPHeaders = [[NSMutableDictionary alloc] init]; + } + + return self; +} + +- (void)dealloc { + [_baseURL release]; + [_username release]; + [_password release]; + [_HTTPHeaders release]; + [super dealloc]; +} + +- (NSURL*)URLForResourcePath:(NSString*)resourcePath { + NSString* urlString = [NSString stringWithFormat:@"%@%@", self.baseURL, resourcePath]; + return [NSURL URLWithString:urlString]; +} + +- (OTRestRequest*)get:(NSString*)resourcePath delegate:(id)delegate callback:(SEL)callback { + OTRestRequest* request = [[OTRestRequest alloc] initWithURL:[self URLForResourcePath:resourcePath] delegate:delegate callback:callback]; + request.additionalHTTPHeaders = _HTTPHeaders; + [request get]; + return request; +} + +- (OTRestRequest*)post:(NSString*)resourcePath params:(NSObject*)params delegate:(id)delegate callback:(SEL)callback { + OTRestRequest* request = [[OTRestRequest alloc] initWithURL:[self URLForResourcePath:resourcePath] delegate:delegate callback:callback]; + request.additionalHTTPHeaders = _HTTPHeaders; + [request postParams:params]; + return request; +} + +- (OTRestRequest*)put:(NSString*)resourcePath params:(NSObject*)params delegate:(id)delegate callback:(SEL)callback { + OTRestRequest* request = [[OTRestRequest alloc] initWithURL:[self URLForResourcePath:resourcePath] delegate:delegate callback:callback]; + request.additionalHTTPHeaders = _HTTPHeaders; + [request putParams:params]; + return request; +} + +- (OTRestRequest*)delete:(NSString*)resourcePath delegate:(id)delegate callback:(SEL)callback { + OTRestRequest* request = [[OTRestRequest alloc] initWithURL:[self URLForResourcePath:resourcePath] delegate:delegate callback:callback]; + request.additionalHTTPHeaders = _HTTPHeaders; + [request delete]; + return request; +} + +- (void)setValue:(NSString*)value forHTTPHeaderField:(NSString*)header { + [_HTTPHeaders setValue:value forKey:header]; +} + +@end diff --git a/OTRestFramework.xcodeproj/jeremy.mode1v3 b/OTRestFramework.xcodeproj/jeremy.mode1v3 deleted file mode 100644 index a3025034..00000000 --- a/OTRestFramework.xcodeproj/jeremy.mode1v3 +++ /dev/null @@ -1,1351 +0,0 @@ - - - - - ActivePerspectiveName - Project - AllowedModules - - - BundleLoadPath - - MaxInstances - n - Module - PBXSmartGroupTreeModule - Name - Groups and Files Outline View - - - BundleLoadPath - - MaxInstances - n - Module - PBXNavigatorGroup - Name - Editor - - - BundleLoadPath - - MaxInstances - n - Module - XCTaskListModule - Name - Task List - - - BundleLoadPath - - MaxInstances - n - Module - XCDetailModule - Name - File and Smart Group Detail Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXBuildResultsModule - Name - Detailed Build Results Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXProjectFindModule - Name - Project Batch Find Tool - - - BundleLoadPath - - MaxInstances - n - Module - XCProjectFormatConflictsModule - Name - Project Format Conflicts List - - - BundleLoadPath - - MaxInstances - n - Module - PBXBookmarksModule - Name - Bookmarks Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXClassBrowserModule - Name - Class Browser - - - BundleLoadPath - - MaxInstances - n - Module - PBXCVSModule - Name - Source Code Control Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXDebugBreakpointsModule - Name - Debug Breakpoints Tool - - - BundleLoadPath - - MaxInstances - n - Module - XCDockableInspector - Name - Inspector - - - BundleLoadPath - - MaxInstances - n - Module - PBXOpenQuicklyModule - Name - Open Quickly Tool - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugSessionModule - Name - Debugger - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugCLIModule - Name - Debug Console - - - BundleLoadPath - - MaxInstances - n - Module - XCSnapshotModule - Name - Snapshots Tool - - - BundlePath - /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources - Description - DefaultDescriptionKey - DockingSystemVisible - - Extension - mode1v3 - FavBarConfig - - PBXProjectModuleGUID - 3F4E187C102DD18F00320118 - XCBarModuleItemNames - - XCBarModuleItems - - - FirstTimeWindowDisplayed - - Identifier - com.apple.perspectives.project.mode1v3 - MajorVersion - 33 - MinorVersion - 0 - Name - Default - Notifications - - OpenEditors - - PerspectiveWidths - - -1 - -1 - - Perspectives - - - ChosenToolbarItems - - active-combo-popup - action - NSToolbarFlexibleSpaceItem - buildOrClean - build-and-goOrGo - com.apple.ide.PBXToolbarStopButton - get-info - NSToolbarFlexibleSpaceItem - com.apple.pbx.toolbar.searchfield - - ControllerClassBaseName - - IconName - WindowOfProjectWithEditor - Identifier - perspective.project - IsVertical - - Layout - - - BecomeActive - - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 0867D691FE84028FC02AAC07 - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 445}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 463}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 78 374 788 504 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 203pt - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20306471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CE0B20406471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - - SplitCount - 1 - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {580, 285}} - RubberWindowFrame - 78 374 788 504 0 0 1440 878 - - Module - PBXNavigatorGroup - Proportion - 285pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20506471E060097A5F4 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{0, 290}, {580, 173}} - RubberWindowFrame - 78 374 788 504 0 0 1440 878 - - Module - XCDetailModule - Proportion - 173pt - - - Proportion - 580pt - - - Name - Project - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - XCModuleDock - PBXNavigatorGroup - XCDetailModule - - TableOfContents - - 3F4E187A102DD18F00320118 - 1CE0B1FE06471DED0097A5F4 - 3F4E187B102DD18F00320118 - 1CE0B20306471E060097A5F4 - 1CE0B20506471E060097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.defaultV3 - - - ControllerClassBaseName - - IconName - WindowOfProject - Identifier - perspective.morph - IsVertical - 0 - Layout - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 11E0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 29B97314FDCFA39411CA2CEA - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 337}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 1 - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 355}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 373 269 690 397 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 100% - - - Name - Morph - PreferredWidth - 300 - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - - TableOfContents - - 11E0B1FE06471DED0097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default.shortV3 - - - PerspectivesBarVisible - - ShelfIsVisible - - SourceDescription - file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' - StatusbarIsVisible - - TimeStamp - 0.0 - ToolbarDisplayMode - 1 - ToolbarIsVisible - - ToolbarSizeMode - 1 - Type - Perspectives - UpdateMessage - The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? - WindowJustification - 5 - WindowOrderList - - /Users/jeremy/objective3/OTRestFramework/OTRestFramework.xcodeproj - - WindowString - 78 374 788 504 0 0 1440 878 - WindowToolsV3 - - - Identifier - windowTool.build - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528F0623707200166675 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CD052900623707200166675 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {500, 215}} - RubberWindowFrame - 192 257 500 500 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 218pt - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - XCMainBuildResultsModuleGUID - PBXProjectModuleLabel - Build - - GeometryConfiguration - - Frame - {{0, 222}, {500, 236}} - RubberWindowFrame - 192 257 500 500 0 0 1280 1002 - - Module - PBXBuildResultsModule - Proportion - 236pt - - - Proportion - 458pt - - - Name - Build Results - ServiceClasses - - PBXBuildResultsModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAA5065D492600B07095 - 1C78EAA6065D492600B07095 - 1CD0528F0623707200166675 - XCMainBuildResultsModuleGUID - - ToolbarConfiguration - xcode.toolbar.config.buildV3 - WindowString - 192 257 500 500 0 0 1280 1002 - - - Identifier - windowTool.debugger - Layout - - - Dock - - - ContentConfiguration - - Debugger - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {317, 164}} - {{317, 0}, {377, 164}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {694, 164}} - {{0, 164}, {694, 216}} - - - - LauncherConfigVersion - 8 - PBXProjectModuleGUID - 1C162984064C10D400B95A72 - PBXProjectModuleLabel - Debug - GLUTExamples (Underwater) - - GeometryConfiguration - - DebugConsoleDrawerSize - {100, 120} - DebugConsoleVisible - None - DebugConsoleWindowFrame - {{200, 200}, {500, 300}} - DebugSTDIOWindowFrame - {{200, 200}, {500, 300}} - Frame - {{0, 0}, {694, 380}} - RubberWindowFrame - 321 238 694 422 0 0 1440 878 - - Module - PBXDebugSessionModule - Proportion - 100% - - - Proportion - 100% - - - Name - Debugger - ServiceClasses - - PBXDebugSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1CD10A99069EF8BA00B06720 - 1C0AD2AB069F1E9B00FABCE6 - 1C162984064C10D400B95A72 - 1C0AD2AC069F1E9B00FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.debugV3 - WindowString - 321 238 694 422 0 0 1440 878 - WindowToolGUID - 1CD10A99069EF8BA00B06720 - WindowToolIsVisible - 0 - - - Identifier - windowTool.find - Layout - - - Dock - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CDD528C0622207200134675 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CD0528D0623707200166675 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {781, 167}} - RubberWindowFrame - 62 385 781 470 0 0 1440 878 - - Module - PBXNavigatorGroup - Proportion - 781pt - - - Proportion - 50% - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528E0623707200166675 - PBXProjectModuleLabel - Project Find - - GeometryConfiguration - - Frame - {{8, 0}, {773, 254}} - RubberWindowFrame - 62 385 781 470 0 0 1440 878 - - Module - PBXProjectFindModule - Proportion - 50% - - - Proportion - 428pt - - - Name - Project Find - ServiceClasses - - PBXProjectFindModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C530D57069F1CE1000CFCEE - 1C530D58069F1CE1000CFCEE - 1C530D59069F1CE1000CFCEE - 1CDD528C0622207200134675 - 1C530D5A069F1CE1000CFCEE - 1CE0B1FE06471DED0097A5F4 - 1CD0528E0623707200166675 - - WindowString - 62 385 781 470 0 0 1440 878 - WindowToolGUID - 1C530D57069F1CE1000CFCEE - WindowToolIsVisible - 0 - - - Identifier - MENUSEPARATOR - - - Identifier - windowTool.debuggerConsole - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAAC065D492600B07095 - PBXProjectModuleLabel - Debugger Console - - GeometryConfiguration - - Frame - {{0, 0}, {650, 250}} - RubberWindowFrame - 516 632 650 250 0 0 1680 1027 - - Module - PBXDebugCLIModule - Proportion - 209pt - - - Proportion - 209pt - - - Name - Debugger Console - ServiceClasses - - PBXDebugCLIModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAAD065D492600B07095 - 1C78EAAE065D492600B07095 - 1C78EAAC065D492600B07095 - - ToolbarConfiguration - xcode.toolbar.config.consoleV3 - WindowString - 650 41 650 250 0 0 1280 1002 - WindowToolGUID - 1C78EAAD065D492600B07095 - WindowToolIsVisible - 0 - - - Identifier - windowTool.snapshots - Layout - - - Dock - - - Module - XCSnapshotModule - Proportion - 100% - - - Proportion - 100% - - - Name - Snapshots - ServiceClasses - - XCSnapshotModule - - StatusbarIsVisible - Yes - ToolbarConfiguration - xcode.toolbar.config.snapshots - WindowString - 315 824 300 550 0 0 1440 878 - WindowToolIsVisible - Yes - - - Identifier - windowTool.scm - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAB2065D492600B07095 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1C78EAB3065D492600B07095 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {452, 0}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD052920623707200166675 - PBXProjectModuleLabel - SCM - - GeometryConfiguration - - ConsoleFrame - {{0, 259}, {452, 0}} - Frame - {{0, 7}, {452, 259}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - TableConfiguration - - Status - 30 - FileName - 199 - Path - 197.0950012207031 - - TableFrame - {{0, 0}, {452, 250}} - - Module - PBXCVSModule - Proportion - 262pt - - - Proportion - 266pt - - - Name - SCM - ServiceClasses - - PBXCVSModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAB4065D492600B07095 - 1C78EAB5065D492600B07095 - 1C78EAB2065D492600B07095 - 1CD052920623707200166675 - - ToolbarConfiguration - xcode.toolbar.config.scm - WindowString - 743 379 452 308 0 0 1280 1002 - - - Identifier - windowTool.breakpoints - IsVertical - 0 - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C77FABC04509CD000000102 - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - no - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 168 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 1C77FABC04509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {168, 350}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 0 - - GeometryConfiguration - - Frame - {{0, 0}, {185, 368}} - GroupTreeTableConfiguration - - MainColumn - 168 - - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 185pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CA1AED706398EBD00589147 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{190, 0}, {554, 368}} - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - XCDetailModule - Proportion - 554pt - - - Proportion - 368pt - - - MajorVersion - 3 - MinorVersion - 0 - Name - Breakpoints - ServiceClasses - - PBXSmartGroupTreeModule - XCDetailModule - - StatusbarIsVisible - 1 - TableOfContents - - 1CDDB66807F98D9800BB5817 - 1CDDB66907F98D9800BB5817 - 1CE0B1FE06471DED0097A5F4 - 1CA1AED706398EBD00589147 - - ToolbarConfiguration - xcode.toolbar.config.breakpointsV3 - WindowString - 315 424 744 409 0 0 1440 878 - WindowToolGUID - 1CDDB66807F98D9800BB5817 - WindowToolIsVisible - 1 - - - Identifier - windowTool.debugAnimator - Layout - - - Dock - - - Module - PBXNavigatorGroup - Proportion - 100% - - - Proportion - 100% - - - Name - Debug Visualizer - ServiceClasses - - PBXNavigatorGroup - - StatusbarIsVisible - 1 - ToolbarConfiguration - xcode.toolbar.config.debugAnimatorV3 - WindowString - 100 100 700 500 0 0 1280 1002 - - - Identifier - windowTool.bookmarks - Layout - - - Dock - - - Module - PBXBookmarksModule - Proportion - 100% - - - Proportion - 100% - - - Name - Bookmarks - ServiceClasses - - PBXBookmarksModule - - StatusbarIsVisible - 0 - WindowString - 538 42 401 187 0 0 1280 1002 - - - Identifier - windowTool.projectFormatConflicts - Layout - - - Dock - - - Module - XCProjectFormatConflictsModule - Proportion - 100% - - - Proportion - 100% - - - Name - Project Format Conflicts - ServiceClasses - - XCProjectFormatConflictsModule - - StatusbarIsVisible - 0 - WindowContentMinSize - 450 300 - WindowString - 50 850 472 307 0 0 1440 877 - - - Identifier - windowTool.classBrowser - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - OptionsSetName - Hierarchy, all classes - PBXProjectModuleGUID - 1CA6456E063B45B4001379D8 - PBXProjectModuleLabel - Class Browser - NSObject - - GeometryConfiguration - - ClassesFrame - {{0, 0}, {374, 96}} - ClassesTreeTableConfiguration - - PBXClassNameColumnIdentifier - 208 - PBXClassBookColumnIdentifier - 22 - - Frame - {{0, 0}, {630, 331}} - MembersFrame - {{0, 105}, {374, 395}} - MembersTreeTableConfiguration - - PBXMemberTypeIconColumnIdentifier - 22 - PBXMemberNameColumnIdentifier - 216 - PBXMemberTypeColumnIdentifier - 97 - PBXMemberBookColumnIdentifier - 22 - - PBXModuleWindowStatusBarHidden2 - 1 - RubberWindowFrame - 385 179 630 352 0 0 1440 878 - - Module - PBXClassBrowserModule - Proportion - 332pt - - - Proportion - 332pt - - - Name - Class Browser - ServiceClasses - - PBXClassBrowserModule - - StatusbarIsVisible - 0 - TableOfContents - - 1C0AD2AF069F1E9B00FABCE6 - 1C0AD2B0069F1E9B00FABCE6 - 1CA6456E063B45B4001379D8 - - ToolbarConfiguration - xcode.toolbar.config.classbrowser - WindowString - 385 179 630 352 0 0 1440 878 - WindowToolGUID - 1C0AD2AF069F1E9B00FABCE6 - WindowToolIsVisible - 0 - - - Identifier - windowTool.refactoring - IncludeInToolsMenu - 0 - Layout - - - Dock - - - BecomeActive - 1 - GeometryConfiguration - - Frame - {0, 0}, {500, 335} - RubberWindowFrame - {0, 0}, {500, 335} - - Module - XCRefactoringModule - Proportion - 100% - - - Proportion - 100% - - - Name - Refactoring - ServiceClasses - - XCRefactoringModule - - WindowString - 200 200 500 356 0 0 1920 1200 - - - - diff --git a/OTRestFramework.xcodeproj/jeremy.pbxuser b/OTRestFramework.xcodeproj/jeremy.pbxuser deleted file mode 100644 index 4708145d..00000000 --- a/OTRestFramework.xcodeproj/jeremy.pbxuser +++ /dev/null @@ -1,51 +0,0 @@ -// !$*UTF8*$! -{ - 0867D690FE84028FC02AAC07 /* Project object */ = { - activeBuildConfigurationName = Debug; - activeTarget = D2AAC07D0554694100DB518D /* OTRestFramework */; - codeSenseManager = 3F4E187E102DD18F00320118 /* Code sense */; - perUserDictionary = { - PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 341, - 20, - 48.16259765625, - 43, - 43, - 20, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - PBXFileDataSource_Target_ColumnID, - ); - }; - PBXPerProjectTemplateStateSaveDate = 271438212; - PBXWorkspaceStateSaveDate = 271438212; - }; - sourceControlManager = 3F4E187D102DD18F00320118 /* Source Control */; - userBuildSettings = { - }; - }; - 3F4E187D102DD18F00320118 /* Source Control */ = { - isa = PBXSourceControlManager; - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - scmConfiguration = { - }; - }; - 3F4E187E102DD18F00320118 /* Code sense */ = { - isa = PBXCodeSenseManager; - indexTemplatePath = ""; - }; - D2AAC07D0554694100DB518D /* OTRestFramework */ = { - activeExec = 0; - }; -} diff --git a/OTRestFramework.xcodeproj/project.pbxproj b/OTRestFramework.xcodeproj/project.pbxproj index ecfda21a..64ea1415 100644 --- a/OTRestFramework.xcodeproj/project.pbxproj +++ b/OTRestFramework.xcodeproj/project.pbxproj @@ -7,11 +7,101 @@ objects = { /* Begin PBXBuildFile section */ + 3F4E18F2102DD38800320118 /* OTRestClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E18E3102DD38700320118 /* OTRestClient.h */; }; + 3F4E18F3102DD38800320118 /* OTRestClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4E18E4102DD38700320118 /* OTRestClient.m */; }; + 3F4E18F4102DD38800320118 /* OTRestParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E18E5102DD38700320118 /* OTRestParams.h */; }; + 3F4E18F5102DD38800320118 /* OTRestParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4E18E6102DD38700320118 /* OTRestParams.m */; }; + 3F4E18F6102DD38800320118 /* OTRestParamsAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E18E7102DD38700320118 /* OTRestParamsAttachment.h */; }; + 3F4E18F7102DD38800320118 /* OTRestParamsAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4E18E8102DD38700320118 /* OTRestParamsAttachment.m */; }; + 3F4E18F8102DD38800320118 /* OTRestParamsDataAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E18E9102DD38700320118 /* OTRestParamsDataAttachment.h */; }; + 3F4E18F9102DD38800320118 /* OTRestParamsDataAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4E18EA102DD38700320118 /* OTRestParamsDataAttachment.m */; }; + 3F4E18FA102DD38800320118 /* OTRestParamsFileAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E18EB102DD38700320118 /* OTRestParamsFileAttachment.h */; }; + 3F4E18FB102DD38800320118 /* OTRestParamsFileAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4E18EC102DD38700320118 /* OTRestParamsFileAttachment.m */; }; + 3F4E18FC102DD38800320118 /* OTRestRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E18ED102DD38700320118 /* OTRestRequest.h */; }; + 3F4E18FD102DD38800320118 /* OTRestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4E18EE102DD38700320118 /* OTRestRequest.m */; }; + 3F4E18FE102DD38800320118 /* OTRestRequestSerializable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E18EF102DD38700320118 /* OTRestRequestSerializable.h */; }; + 3F4E18FF102DD38800320118 /* OTRestResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E18F0102DD38700320118 /* OTRestResponse.h */; }; + 3F4E1900102DD38800320118 /* OTRestResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4E18F1102DD38800320118 /* OTRestResponse.m */; }; + 3F4E191A102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1918102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.h */; }; + 3F4E191B102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4E1919102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.m */; }; + 3F4E1936102DD4B300320118 /* CDataChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1925102DD4B300320118 /* CDataChunk.h */; }; + 3F4E1937102DD4B300320118 /* Chunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1926102DD4B300320118 /* Chunk.h */; }; + 3F4E1938102DD4B300320118 /* CommentChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1927102DD4B300320118 /* CommentChunk.h */; }; + 3F4E1939102DD4B300320118 /* CSSPartMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1928102DD4B300320118 /* CSSPartMatcher.h */; }; + 3F4E193A102DD4B300320118 /* CSSSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1929102DD4B300320118 /* CSSSelector.h */; }; + 3F4E193B102DD4B300320118 /* CSSSelectorMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E192A102DD4B300320118 /* CSSSelectorMatcher.h */; }; + 3F4E193C102DD4B300320118 /* CSSSelectorPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E192B102DD4B300320118 /* CSSSelectorPart.h */; }; + 3F4E193D102DD4B300320118 /* DoctypeChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E192C102DD4B300320118 /* DoctypeChunk.h */; }; + 3F4E193E102DD4B300320118 /* DocumentRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E192D102DD4B300320118 /* DocumentRoot.h */; }; + 3F4E193F102DD4B300320118 /* Element.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E192E102DD4B300320118 /* Element.h */; }; + 3F4E1940102DD4B300320118 /* ElementParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E192F102DD4B300320118 /* ElementParser.h */; }; + 3F4E1941102DD4B300320118 /* EntityChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1930102DD4B300320118 /* EntityChunk.h */; }; + 3F4E1942102DD4B300320118 /* NSString_HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1931102DD4B300320118 /* NSString_HTML.h */; }; + 3F4E1943102DD4B300320118 /* ProcessingInstructionChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1932102DD4B300320118 /* ProcessingInstructionChunk.h */; }; + 3F4E1944102DD4B300320118 /* TagChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1933102DD4B300320118 /* TagChunk.h */; }; + 3F4E1945102DD4B300320118 /* TxtChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1934102DD4B300320118 /* TxtChunk.h */; }; + 3F4E1946102DD4B300320118 /* URLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1935102DD4B300320118 /* URLParser.h */; }; + 3F4E194A102DD4C900320118 /* Element+OTRestAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4E1948102DD4C900320118 /* Element+OTRestAdditions.h */; }; + 3F4E194B102DD4C900320118 /* Element+OTRestAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4E1949102DD4C900320118 /* Element+OTRestAdditions.m */; }; AA747D9F0F9514B9006C5449 /* OTRestFramework_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = AA747D9E0F9514B9006C5449 /* OTRestFramework_Prefix.pch */; }; AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 3F4E18DA102DD31E00320118 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3F4E18D6102DD31E00320118 /* ElementParser.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = D2AAC07E0554694100DB518D /* libElementParser.a */; + remoteInfo = ElementParser; + }; + 3F4E18DC102DD32A00320118 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3F4E18D6102DD31E00320118 /* ElementParser.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = D2AAC07D0554694100DB518D /* ElementParser */; + remoteInfo = ElementParser; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ + 3F4E18D6102DD31E00320118 /* ElementParser.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ElementParser.xcodeproj; path = ../ElementParser/ElementParser.xcodeproj; sourceTree = SOURCE_ROOT; }; + 3F4E18E3102DD38700320118 /* OTRestClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRestClient.h; sourceTree = SOURCE_ROOT; }; + 3F4E18E4102DD38700320118 /* OTRestClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTRestClient.m; sourceTree = SOURCE_ROOT; }; + 3F4E18E5102DD38700320118 /* OTRestParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRestParams.h; sourceTree = SOURCE_ROOT; }; + 3F4E18E6102DD38700320118 /* OTRestParams.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTRestParams.m; sourceTree = SOURCE_ROOT; }; + 3F4E18E7102DD38700320118 /* OTRestParamsAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRestParamsAttachment.h; sourceTree = SOURCE_ROOT; }; + 3F4E18E8102DD38700320118 /* OTRestParamsAttachment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTRestParamsAttachment.m; sourceTree = SOURCE_ROOT; }; + 3F4E18E9102DD38700320118 /* OTRestParamsDataAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRestParamsDataAttachment.h; sourceTree = SOURCE_ROOT; }; + 3F4E18EA102DD38700320118 /* OTRestParamsDataAttachment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTRestParamsDataAttachment.m; sourceTree = SOURCE_ROOT; }; + 3F4E18EB102DD38700320118 /* OTRestParamsFileAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRestParamsFileAttachment.h; sourceTree = SOURCE_ROOT; }; + 3F4E18EC102DD38700320118 /* OTRestParamsFileAttachment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTRestParamsFileAttachment.m; sourceTree = SOURCE_ROOT; }; + 3F4E18ED102DD38700320118 /* OTRestRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRestRequest.h; sourceTree = SOURCE_ROOT; }; + 3F4E18EE102DD38700320118 /* OTRestRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTRestRequest.m; sourceTree = SOURCE_ROOT; }; + 3F4E18EF102DD38700320118 /* OTRestRequestSerializable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRestRequestSerializable.h; sourceTree = SOURCE_ROOT; }; + 3F4E18F0102DD38700320118 /* OTRestResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRestResponse.h; sourceTree = SOURCE_ROOT; }; + 3F4E18F1102DD38800320118 /* OTRestResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OTRestResponse.m; sourceTree = SOURCE_ROOT; }; + 3F4E1918102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+OTRestRequestSerialization.h"; sourceTree = SOURCE_ROOT; }; + 3F4E1919102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+OTRestRequestSerialization.m"; sourceTree = SOURCE_ROOT; }; + 3F4E1925102DD4B300320118 /* CDataChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDataChunk.h; path = ../ElementParser/Classes/CDataChunk.h; sourceTree = SOURCE_ROOT; }; + 3F4E1926102DD4B300320118 /* Chunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Chunk.h; path = ../ElementParser/Classes/Chunk.h; sourceTree = SOURCE_ROOT; }; + 3F4E1927102DD4B300320118 /* CommentChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommentChunk.h; path = ../ElementParser/Classes/CommentChunk.h; sourceTree = SOURCE_ROOT; }; + 3F4E1928102DD4B300320118 /* CSSPartMatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSSPartMatcher.h; path = ../ElementParser/Classes/CSSPartMatcher.h; sourceTree = SOURCE_ROOT; }; + 3F4E1929102DD4B300320118 /* CSSSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSSSelector.h; path = ../ElementParser/Classes/CSSSelector.h; sourceTree = SOURCE_ROOT; }; + 3F4E192A102DD4B300320118 /* CSSSelectorMatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSSSelectorMatcher.h; path = ../ElementParser/Classes/CSSSelectorMatcher.h; sourceTree = SOURCE_ROOT; }; + 3F4E192B102DD4B300320118 /* CSSSelectorPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSSSelectorPart.h; path = ../ElementParser/Classes/CSSSelectorPart.h; sourceTree = SOURCE_ROOT; }; + 3F4E192C102DD4B300320118 /* DoctypeChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DoctypeChunk.h; path = ../ElementParser/Classes/DoctypeChunk.h; sourceTree = SOURCE_ROOT; }; + 3F4E192D102DD4B300320118 /* DocumentRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DocumentRoot.h; path = ../ElementParser/Classes/DocumentRoot.h; sourceTree = SOURCE_ROOT; }; + 3F4E192E102DD4B300320118 /* Element.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Element.h; path = ../ElementParser/Classes/Element.h; sourceTree = SOURCE_ROOT; }; + 3F4E192F102DD4B300320118 /* ElementParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ElementParser.h; path = ../ElementParser/Classes/ElementParser.h; sourceTree = SOURCE_ROOT; }; + 3F4E1930102DD4B300320118 /* EntityChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EntityChunk.h; path = ../ElementParser/Classes/EntityChunk.h; sourceTree = SOURCE_ROOT; }; + 3F4E1931102DD4B300320118 /* NSString_HTML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSString_HTML.h; path = ../ElementParser/Classes/NSString_HTML.h; sourceTree = SOURCE_ROOT; }; + 3F4E1932102DD4B300320118 /* ProcessingInstructionChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProcessingInstructionChunk.h; path = ../ElementParser/Classes/ProcessingInstructionChunk.h; sourceTree = SOURCE_ROOT; }; + 3F4E1933102DD4B300320118 /* TagChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TagChunk.h; path = ../ElementParser/Classes/TagChunk.h; sourceTree = SOURCE_ROOT; }; + 3F4E1934102DD4B300320118 /* TxtChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TxtChunk.h; path = ../ElementParser/Classes/TxtChunk.h; sourceTree = SOURCE_ROOT; }; + 3F4E1935102DD4B300320118 /* URLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = URLParser.h; path = ../ElementParser/Classes/URLParser.h; sourceTree = SOURCE_ROOT; }; + 3F4E1948102DD4C900320118 /* Element+OTRestAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Element+OTRestAdditions.h"; path = "../gateguru-iphone/Element+OTRestAdditions.h"; sourceTree = SOURCE_ROOT; }; + 3F4E1949102DD4C900320118 /* Element+OTRestAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "Element+OTRestAdditions.m"; path = "../gateguru-iphone/Element+OTRestAdditions.m"; sourceTree = SOURCE_ROOT; }; AA747D9E0F9514B9006C5449 /* OTRestFramework_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OTRestFramework_Prefix.pch; sourceTree = SOURCE_ROOT; }; AACBBE490F95108600F1A2B1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; D2AAC07E0554694100DB518D /* libOTRestFramework.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libOTRestFramework.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -40,6 +130,8 @@ 0867D691FE84028FC02AAC07 /* OTRestFramework */ = { isa = PBXGroup; children = ( + 3F4E1924102DD4B300320118 /* ElementParserHeaders */, + 3F4E18D6102DD31E00320118 /* ElementParser.xcodeproj */, 08FB77AEFE84172EC02AAC07 /* Classes */, 32C88DFF0371C24200C91783 /* Other Sources */, 0867D69AFE84028FC02AAC07 /* Frameworks */, @@ -59,6 +151,25 @@ 08FB77AEFE84172EC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 3F4E1948102DD4C900320118 /* Element+OTRestAdditions.h */, + 3F4E1949102DD4C900320118 /* Element+OTRestAdditions.m */, + 3F4E1918102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.h */, + 3F4E1919102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.m */, + 3F4E18E3102DD38700320118 /* OTRestClient.h */, + 3F4E18E4102DD38700320118 /* OTRestClient.m */, + 3F4E18E5102DD38700320118 /* OTRestParams.h */, + 3F4E18E6102DD38700320118 /* OTRestParams.m */, + 3F4E18E7102DD38700320118 /* OTRestParamsAttachment.h */, + 3F4E18E8102DD38700320118 /* OTRestParamsAttachment.m */, + 3F4E18E9102DD38700320118 /* OTRestParamsDataAttachment.h */, + 3F4E18EA102DD38700320118 /* OTRestParamsDataAttachment.m */, + 3F4E18EB102DD38700320118 /* OTRestParamsFileAttachment.h */, + 3F4E18EC102DD38700320118 /* OTRestParamsFileAttachment.m */, + 3F4E18ED102DD38700320118 /* OTRestRequest.h */, + 3F4E18EE102DD38700320118 /* OTRestRequest.m */, + 3F4E18EF102DD38700320118 /* OTRestRequestSerializable.h */, + 3F4E18F0102DD38700320118 /* OTRestResponse.h */, + 3F4E18F1102DD38800320118 /* OTRestResponse.m */, ); name = Classes; sourceTree = ""; @@ -71,6 +182,38 @@ name = "Other Sources"; sourceTree = ""; }; + 3F4E18D7102DD31E00320118 /* Products */ = { + isa = PBXGroup; + children = ( + 3F4E18DB102DD31E00320118 /* libElementParser.a */, + ); + name = Products; + sourceTree = ""; + }; + 3F4E1924102DD4B300320118 /* ElementParserHeaders */ = { + isa = PBXGroup; + children = ( + 3F4E1925102DD4B300320118 /* CDataChunk.h */, + 3F4E1926102DD4B300320118 /* Chunk.h */, + 3F4E1927102DD4B300320118 /* CommentChunk.h */, + 3F4E1928102DD4B300320118 /* CSSPartMatcher.h */, + 3F4E1929102DD4B300320118 /* CSSSelector.h */, + 3F4E192A102DD4B300320118 /* CSSSelectorMatcher.h */, + 3F4E192B102DD4B300320118 /* CSSSelectorPart.h */, + 3F4E192C102DD4B300320118 /* DoctypeChunk.h */, + 3F4E192D102DD4B300320118 /* DocumentRoot.h */, + 3F4E192E102DD4B300320118 /* Element.h */, + 3F4E192F102DD4B300320118 /* ElementParser.h */, + 3F4E1930102DD4B300320118 /* EntityChunk.h */, + 3F4E1931102DD4B300320118 /* NSString_HTML.h */, + 3F4E1932102DD4B300320118 /* ProcessingInstructionChunk.h */, + 3F4E1933102DD4B300320118 /* TagChunk.h */, + 3F4E1934102DD4B300320118 /* TxtChunk.h */, + 3F4E1935102DD4B300320118 /* URLParser.h */, + ); + name = ElementParserHeaders; + sourceTree = SOURCE_ROOT; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -79,6 +222,33 @@ buildActionMask = 2147483647; files = ( AA747D9F0F9514B9006C5449 /* OTRestFramework_Prefix.pch in Headers */, + 3F4E18F2102DD38800320118 /* OTRestClient.h in Headers */, + 3F4E18F4102DD38800320118 /* OTRestParams.h in Headers */, + 3F4E18F6102DD38800320118 /* OTRestParamsAttachment.h in Headers */, + 3F4E18F8102DD38800320118 /* OTRestParamsDataAttachment.h in Headers */, + 3F4E18FA102DD38800320118 /* OTRestParamsFileAttachment.h in Headers */, + 3F4E18FC102DD38800320118 /* OTRestRequest.h in Headers */, + 3F4E18FE102DD38800320118 /* OTRestRequestSerializable.h in Headers */, + 3F4E18FF102DD38800320118 /* OTRestResponse.h in Headers */, + 3F4E191A102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.h in Headers */, + 3F4E1936102DD4B300320118 /* CDataChunk.h in Headers */, + 3F4E1937102DD4B300320118 /* Chunk.h in Headers */, + 3F4E1938102DD4B300320118 /* CommentChunk.h in Headers */, + 3F4E1939102DD4B300320118 /* CSSPartMatcher.h in Headers */, + 3F4E193A102DD4B300320118 /* CSSSelector.h in Headers */, + 3F4E193B102DD4B300320118 /* CSSSelectorMatcher.h in Headers */, + 3F4E193C102DD4B300320118 /* CSSSelectorPart.h in Headers */, + 3F4E193D102DD4B300320118 /* DoctypeChunk.h in Headers */, + 3F4E193E102DD4B300320118 /* DocumentRoot.h in Headers */, + 3F4E193F102DD4B300320118 /* Element.h in Headers */, + 3F4E1940102DD4B300320118 /* ElementParser.h in Headers */, + 3F4E1941102DD4B300320118 /* EntityChunk.h in Headers */, + 3F4E1942102DD4B300320118 /* NSString_HTML.h in Headers */, + 3F4E1943102DD4B300320118 /* ProcessingInstructionChunk.h in Headers */, + 3F4E1944102DD4B300320118 /* TagChunk.h in Headers */, + 3F4E1945102DD4B300320118 /* TxtChunk.h in Headers */, + 3F4E1946102DD4B300320118 /* URLParser.h in Headers */, + 3F4E194A102DD4C900320118 /* Element+OTRestAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -96,6 +266,7 @@ buildRules = ( ); dependencies = ( + 3F4E18DD102DD32A00320118 /* PBXTargetDependency */, ); name = OTRestFramework; productName = OTRestFramework; @@ -113,6 +284,12 @@ mainGroup = 0867D691FE84028FC02AAC07 /* OTRestFramework */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 3F4E18D7102DD31E00320118 /* Products */; + ProjectRef = 3F4E18D6102DD31E00320118 /* ElementParser.xcodeproj */; + }, + ); projectRoot = ""; targets = ( D2AAC07D0554694100DB518D /* OTRestFramework */, @@ -120,16 +297,43 @@ }; /* End PBXProject section */ +/* Begin PBXReferenceProxy section */ + 3F4E18DB102DD31E00320118 /* libElementParser.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libElementParser.a; + remoteRef = 3F4E18DA102DD31E00320118 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + /* Begin PBXSourcesBuildPhase section */ D2AAC07B0554694100DB518D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 3F4E18F3102DD38800320118 /* OTRestClient.m in Sources */, + 3F4E18F5102DD38800320118 /* OTRestParams.m in Sources */, + 3F4E18F7102DD38800320118 /* OTRestParamsAttachment.m in Sources */, + 3F4E18F9102DD38800320118 /* OTRestParamsDataAttachment.m in Sources */, + 3F4E18FB102DD38800320118 /* OTRestParamsFileAttachment.m in Sources */, + 3F4E18FD102DD38800320118 /* OTRestRequest.m in Sources */, + 3F4E1900102DD38800320118 /* OTRestResponse.m in Sources */, + 3F4E191B102DD42F00320118 /* NSDictionary+OTRestRequestSerialization.m in Sources */, + 3F4E194B102DD4C900320118 /* Element+OTRestAdditions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 3F4E18DD102DD32A00320118 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ElementParser; + targetProxy = 3F4E18DC102DD32A00320118 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ 1DEB921F08733DC00010E9CD /* Debug */ = { isa = XCBuildConfiguration; diff --git a/OTRestParams.h b/OTRestParams.h new file mode 100644 index 00000000..d010e22c --- /dev/null +++ b/OTRestParams.h @@ -0,0 +1,69 @@ +// +// OTRestParams.h +// gateguru +// +// Created by Blake Watters on 8/3/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import +#import "OTRestRequestSerializable.h" +#import "OTRestParamsFileAttachment.h" +#import "OTRestParamsDataAttachment.h" + +@interface OTRestParams : NSObject { + NSMutableDictionary* _valueData; + NSMutableDictionary* _fileData; +} + +/** + * Returns an empty params object ready for population + */ ++ (OTRestParams*)params; + +/** + * Initialize a params object from a dictionary of key/value pairs + */ ++ (OTRestParams*)paramsWithDictionary:(NSDictionary*)dictionary; + +/** + * Initalize a params object from a dictionary of key/value pairs + */ +- (OTRestParams*)initWithDictionary:(NSDictionary*)dictionary; + +/** + * Sets the value for a named parameter + */ +- (void)setValue:(id )value forParam:(NSString*)param; + +/** + * Sets the value for a named parameter to the data contained in a file at the given path + */ +- (OTRestParamsFileAttachment*)setFile:(NSString*)filePath forParam:(NSString*)param; + +/** + * Sets the value for a named parameter to the data contained in a file at the given path with the specified MIME Type and attachment file name + */ +- (OTRestParamsFileAttachment*)setFile:(NSString*)filePath MIMEType:(NSString*)MIMEType fileName:(NSString*)fileName forParam:(NSString*)param; + +/** + * Sets the value to the data object for a named parameter + */ +- (OTRestParamsDataAttachment*)setData:(NSData*)data forParam:(NSString*)param; + +/** + * Sets the value for a named parameter to a data object with the specified MIME Type and attachment file name + */ +- (OTRestParamsDataAttachment*)setData:(NSData*)data MIMEType:(NSString*)MIMEType fileName:(NSString*)fileName forParam:(NSString*)param; + +/** + * Returns the value for the Content-Type header for these params + */ +- (NSString*)ContentTypeHTTPHeader; + +/** + * Returns the data contained in this params object as a MIME string + */ +- (NSData*)HTTPBody; + +@end diff --git a/OTRestParams.m b/OTRestParams.m new file mode 100644 index 00000000..8e2f76b1 --- /dev/null +++ b/OTRestParams.m @@ -0,0 +1,139 @@ +// +// OTRestParams.m +// gateguru +// +// Created by Blake Watters on 8/3/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "OTRestParams.h" + +static NSString* kOTRestStringBoundary = @"0xKhTmLbOuNdArY"; + +@implementation OTRestParams + ++ (OTRestParams*)params { + OTRestParams* params = [[[OTRestParams alloc] init] autorelease]; + return params; +} + ++ (OTRestParams*)paramsWithDictionary:(NSDictionary*)dictionary { + OTRestParams* params = [[[OTRestParams alloc] initWithDictionary:dictionary] autorelease]; + return params; +} + +- (id)init { + if (self = [super init]) { + _valueData = [[NSMutableDictionary alloc] init]; + _fileData = [[NSMutableDictionary alloc] init]; + } + + return self; +} + +- (void)dealloc { + [_valueData release]; + [_fileData release]; + [super dealloc]; +} + +- (OTRestParams*)initWithDictionary:(NSDictionary*)dictionary { + if (self = [super init]) { + _valueData = [[NSMutableDictionary dictionaryWithDictionary:dictionary] retain]; + _fileData = [[NSMutableDictionary alloc] init]; + } + + return self; +} + + +- (void)setValue:(id )value forParam:(NSString*)param { + [_valueData setObject:value forKey:param]; +} + +- (OTRestParamsFileAttachment*)setFile:(NSString*)filePath forParam:(NSString*)param { + OTRestParamsFileAttachment* attachment = [OTRestParamsFileAttachment attachment]; + attachment.filePath = filePath; + [_fileData setObject:attachment forKey:param]; + return attachment; +} + +- (OTRestParamsFileAttachment*)setFile:(NSString*)filePath MIMEType:(NSString*)MIMEType fileName:(NSString*)fileName forParam:(NSString*)param { + OTRestParamsFileAttachment* attachment = [self setFile:filePath forParam:param]; + if (MIMEType != nil) { + attachment.MIMEType = MIMEType; + } + if (fileName != nil) { + attachment.fileName = fileName; + } + return attachment; +} + +- (OTRestParamsDataAttachment*)setData:(NSData*)data forParam:(NSString*)param { + OTRestParamsDataAttachment* attachment = [OTRestParamsDataAttachment attachment]; + attachment.data = data; + [_fileData setObject:attachment forKey:param]; + return attachment; +} + +- (OTRestParamsDataAttachment*)setData:(NSData*)data MIMEType:(NSString*)MIMEType fileName:(NSString*)fileName forParam:(NSString*)param { + OTRestParamsDataAttachment* attachment = [self setData:data forParam:param]; + if (MIMEType != nil) { + attachment.MIMEType = MIMEType; + } + if (fileName != nil) { + attachment.fileName = fileName; + } + return attachment; +} + +- (NSData*)endItemBoundary { + return [[NSString stringWithFormat:@"\r\n--%@\r\n", kOTRestStringBoundary] dataUsingEncoding:NSUTF8StringEncoding]; +} + +- (void)addValuesToHTTPBody:(NSMutableData*)HTTPBody { + int i = 0; + for (id key in _valueData) { + id value = [_valueData valueForKey:key]; + [HTTPBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; + [HTTPBody appendData:[value dataUsingEncoding:NSUTF8StringEncoding]]; + i++; + + // Only add the boundary if this is not the last item in the post body + if (i != [_valueData count] || [_fileData count] > 0) { + [HTTPBody appendData:[self endItemBoundary]]; + } + } +} + +- (void)addAttachmentsToHTTPBody:(NSMutableData*)HTTPBody { + int i = 0; + for (id key in _fileData) { + OTRestParamsAttachment* attachment = (OTRestParamsAttachment*) [_fileData valueForKey:key]; + [HTTPBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", key, attachment.fileName] dataUsingEncoding:NSUTF8StringEncoding]]; + [HTTPBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", attachment.MIMEType] dataUsingEncoding:NSUTF8StringEncoding]]; + [attachment writeAttachmentToHTTPBody:HTTPBody]; + i++; + + if (i != [_fileData count]) { + [HTTPBody appendData:[self endItemBoundary]]; + } + } +} + +- (NSData*)HTTPBody { + NSMutableData* HTTPBody = [NSMutableData data]; + + [HTTPBody appendData:[[NSString stringWithFormat:@"--%@\r\n", kOTRestStringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; + [self addValuesToHTTPBody:HTTPBody]; + [self addAttachmentsToHTTPBody:HTTPBody]; + [HTTPBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", kOTRestStringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; + + return HTTPBody; +} + +- (NSString*)ContentTypeHTTPHeader { + return [NSString stringWithFormat:@"multipart/form-data; boundary=%@", kOTRestStringBoundary]; +} + +@end diff --git a/OTRestParamsAttachment.h b/OTRestParamsAttachment.h new file mode 100644 index 00000000..6a97b824 --- /dev/null +++ b/OTRestParamsAttachment.h @@ -0,0 +1,38 @@ +// +// OTRestParamsAttachment.h +// gateguru +// +// Created by Blake Watters on 8/6/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import + +@interface OTRestParamsAttachment : NSObject { + NSString* _fileName; + NSString* _MIMEType; +} + +/** + * The name of the attached file in the MIME stream + * Defaults to 'file' if not specified + */ +@property (nonatomic, retain) NSString* fileName; + +/** + * The MIME type of the attached file in the MIME stream + * Defaults to 'application/octet-stream' if not specified + */ +@property (nonatomic, retain) NSString* MIMEType; + +/** + * Returns an autoreleased attachment object + */ ++ (id)attachment; + +/** + * Abstract method implementing writing this attachment into an HTTP stream + */ +- (void)writeAttachmentToHTTPBody:(NSMutableData*)HTTPBody; + +@end diff --git a/OTRestParamsAttachment.m b/OTRestParamsAttachment.m new file mode 100644 index 00000000..45254993 --- /dev/null +++ b/OTRestParamsAttachment.m @@ -0,0 +1,38 @@ +// +// OTRestAttachment.m +// gateguru +// +// Created by Blake Watters on 8/6/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "OTRestParamsAttachment.h" + +@implementation OTRestParamsAttachment + +@synthesize fileName = _fileName, MIMEType = _MIMEType; + ++ (id)attachment { + return [[[self alloc] init] autorelease]; +} + +- (id)init { + if (self = [super init]) { + self.fileName = @"file"; + self.MIMEType = @"application/octet-stream"; + } + + return self; +} + +- (void)dealloc { + [_fileName release]; + [_MIMEType release]; + [super dealloc]; +} + +- (void)writeAttachmentToHTTPBody:(NSMutableData*)HTTPBody { + [self doesNotRecognizeSelector:_cmd]; +} + +@end diff --git a/OTRestParamsDataAttachment.h b/OTRestParamsDataAttachment.h new file mode 100644 index 00000000..638e6240 --- /dev/null +++ b/OTRestParamsDataAttachment.h @@ -0,0 +1,20 @@ +// +// OTRestParamsDataAttachment.h +// gateguru +// +// Created by Blake Watters on 8/6/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "OTRestParamsAttachment.h" + +@interface OTRestParamsDataAttachment : OTRestParamsAttachment { + NSData* _data; +} + +/** + * The data being attached to the MIME stream + */ +@property (nonatomic, retain) NSData* data; + +@end diff --git a/OTRestParamsDataAttachment.m b/OTRestParamsDataAttachment.m new file mode 100644 index 00000000..62b739d8 --- /dev/null +++ b/OTRestParamsDataAttachment.m @@ -0,0 +1,27 @@ +// +// OTRestParamsDataAttachment.m +// gateguru +// +// Created by Blake Watters on 8/6/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "OTRestParamsDataAttachment.h" + +@implementation OTRestParamsDataAttachment + +@synthesize data = _data; + +- (void)dealloc { + [_data release]; + [super dealloc]; +} + +- (void)writeAttachmentToHTTPBody:(NSMutableData*)HTTPBody { + if ([_data length] == 0) { + return; + } + [HTTPBody appendData:_data]; +} + +@end diff --git a/OTRestParamsFileAttachment.h b/OTRestParamsFileAttachment.h new file mode 100644 index 00000000..36ebc104 --- /dev/null +++ b/OTRestParamsFileAttachment.h @@ -0,0 +1,20 @@ +// +// OTRestParamsFileAttachment.h +// gateguru +// +// Created by Blake Watters on 8/6/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "OTRestParamsAttachment.h" + +@interface OTRestParamsFileAttachment : OTRestParamsAttachment { + NSString* _filePath; +} + +/** + * The path to this file attachment on disk + */ +@property (nonatomic, retain) NSString* filePath; + +@end diff --git a/OTRestParamsFileAttachment.m b/OTRestParamsFileAttachment.m new file mode 100644 index 00000000..f8333f06 --- /dev/null +++ b/OTRestParamsFileAttachment.m @@ -0,0 +1,35 @@ +// +// OTRestParamsFileAttachment.m +// gateguru +// +// Created by Blake Watters on 8/6/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "OTRestParamsFileAttachment.h" + +@implementation OTRestParamsFileAttachment + +@synthesize filePath = _filePath; + +- (void)dealloc { + [_filePath release]; + [super dealloc]; +} + +- (void)writeAttachmentToHTTPBody:(NSMutableData*)HTTPBody { + NSInputStream *stream = [[[NSInputStream alloc] initWithFileAtPath:_filePath] autorelease]; + [stream open]; + int bytesRead; + while ([stream hasBytesAvailable]) { + unsigned char buffer[1024*256]; + bytesRead = [stream read:buffer maxLength:sizeof(buffer)]; + if (bytesRead == 0) { + break; + } + [HTTPBody appendData:[NSData dataWithBytes:buffer length:bytesRead]]; + } + [stream close]; +} + +@end diff --git a/OTRestRequest.h b/OTRestRequest.h new file mode 100644 index 00000000..041b9bd3 --- /dev/null +++ b/OTRestRequest.h @@ -0,0 +1,88 @@ +// +// OTRestRequest.h +// gateguru +// +// Created by Jeremy Ellison on 7/27/09. +// Copyright 2009 Objective3. All rights reserved. +// + +#import +#import "DocumentRoot.h" +#import "OTRestRequestSerializable.h" + +@interface OTRestRequest : NSObject { + NSURL* _URL; + NSMutableURLRequest* _URLRequest; + NSDictionary* _additionalHTTPHeaders; + NSObject* _params; + id _delegate; + SEL _callback; +} + +@property(nonatomic, readonly) NSURL* URL; + +/** + * The NSMutableURLRequest being sent for the Restful request + */ +@property(nonatomic, readonly) NSMutableURLRequest* URLRequest; + +/** + * The HTTP Method used for this request + */ +@property(nonatomic, readonly) NSString* HTTPMethod; + +/** + * The delegate to inform when the request is completed + */ +@property(nonatomic, retain) id delegate; + +/** + * The selector to invoke when the request is completed + */ +@property(nonatomic, assign) SEL callback; + +/** + * A Dictionary of additional HTTP Headers to send with the request + */ +@property(nonatomic, retain) NSDictionary* additionalHTTPHeaders; + +/** + * A serializable collection of parameters sent as the HTTP Body of the request + */ +@property(nonatomic, readonly) NSObject* params; + + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +/** + * Return a REST request that is ready for dispatching + */ ++ (OTRestRequest*)requestWithURL:(NSURL*)URL delegate:(id)delegate callback:(SEL)callback; + +/** + * Initialize a REST request and prepare it for dispatching + */ +- (id)initWithURL:(NSURL*)URL delegate:(id)delegate callback:(SEL)callback; + +/** + * GET the resource and invoke the callback with the response payload + */ +- (void)get; + +/** + * POST a collection of params to the resource and invoke the callback with the response payload + */ +- (void)postParams:(NSObject*)params; + +/** + * PUT a collection of params to the resource and invoke the callback with the response payload + */ +- (void)putParams:(NSObject*)params; + +/** + * DELETE the resource and invoke the callback with the response payload + */ +- (void)delete; + +@end diff --git a/OTRestRequest.m b/OTRestRequest.m new file mode 100644 index 00000000..fcf11cd4 --- /dev/null +++ b/OTRestRequest.m @@ -0,0 +1,96 @@ +// +// OTRestRequest.m +// gateguru +// +// Created by Jeremy Ellison on 7/27/09. +// Copyright 2009 Objective3. All rights reserved. +// + +#import "OTRestRequest.h" +#import "OTRestResponse.h" +#import "NSDictionary+OTRestRequestSerialization.h" + +@implementation OTRestRequest + +@synthesize URL = _URL, URLRequest = _URLRequest, delegate = _delegate, callback = _callback, additionalHTTPHeaders = _additionalHTTPHeaders, + params = _params; + ++ (OTRestRequest*)requestWithURL:(NSURL*)URL delegate:(id)delegate callback:(SEL)callback { + OTRestRequest* request = [[OTRestRequest alloc] initWithURL:URL delegate:delegate callback:callback]; + [request autorelease]; + + return request; +} + +- (id)initWithURL:(NSURL*)URL delegate:(id)delegate callback:(SEL)callback { + if (self = [self init]) { + _URL = [URL retain]; + _URLRequest = [[NSMutableURLRequest alloc] initWithURL:_URL]; + _delegate = [delegate retain]; + _callback = callback; + } + + return self; +} + +- (void)dealloc { + [_URL release]; + [_URLRequest release]; + [_delegate release]; + [_params release]; + [_additionalHTTPHeaders release]; + [super dealloc]; +} + +- (NSString*)HTTPMethod { + return [_URLRequest HTTPMethod]; +} + +- (void)addHeadersToRequest { + NSString* header; + for (header in _additionalHTTPHeaders) { + [_URLRequest setValue:[_additionalHTTPHeaders valueForKey:header] forHTTPHeaderField:header]; + } + if (_params != nil) { + [_URLRequest setValue:[_params ContentTypeHTTPHeader] forHTTPHeaderField:@"Content-Type"]; + } + NSLog(@"Headers: %@", [_URLRequest allHTTPHeaderFields]); +} + +- (void)send { + NSString* body = [[NSString alloc] initWithData:[_URLRequest HTTPBody] encoding:NSUTF8StringEncoding]; + NSLog(@"Sending %@ request to URL %@. HTTP Body: %@", [self HTTPMethod], [[self URL] absoluteString], body); + [body release]; + OTRestResponse* response = [[OTRestResponse alloc] initWithRestRequest:self]; + [[NSURLConnection connectionWithRequest:_URLRequest delegate:response] retain]; +} + +- (void)get { + [_URLRequest setHTTPMethod:@"GET"]; + [self addHeadersToRequest]; + [self send]; +} + +- (void)postParams:(NSObject*)params { + [_URLRequest setHTTPMethod:@"POST"]; + _params = [params retain]; + [_URLRequest setHTTPBody:[_params HTTPBody]]; + [self addHeadersToRequest]; + [self send]; +} + +- (void)putParams:(NSObject*)params { + [_URLRequest setHTTPMethod:@"PUT"]; + _params = [params retain]; + [_URLRequest setHTTPBody:[_params HTTPBody]]; + [self addHeadersToRequest]; + [self send]; +} + +- (void)delete { + [_URLRequest setHTTPMethod:@"DELETE"]; + [self addHeadersToRequest]; + [self send]; +} + +@end diff --git a/OTRestRequestSerializable.h b/OTRestRequestSerializable.h new file mode 100644 index 00000000..a86e5b25 --- /dev/null +++ b/OTRestRequestSerializable.h @@ -0,0 +1,26 @@ +// +// OTRestRequestSerializable.h +// gateguru +// +// Created by Blake Watters on 8/3/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +/* + * This protocol is implemented by objects that can be serialized into a representation suitable + * for transmission over a REST request. Suitable serializations are x-www-form-urlencoded and + * multipart/form-data. + */ +@protocol OTRestRequestSerializable + +/** + * The value of the Content-Type header for the HTTP Body representation of the serialization + */ +- (NSString*)ContentTypeHTTPHeader; + +/** + * An NSData representing the HTTP Body serialization of the object implementing the protocol + */ +- (NSData*)HTTPBody; + +@end diff --git a/OTRestResponse.h b/OTRestResponse.h new file mode 100644 index 00000000..dfd166f9 --- /dev/null +++ b/OTRestResponse.h @@ -0,0 +1,69 @@ +// +// OTRestResponse.h +// gateguru +// +// Created by Blake Watters on 7/28/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import +#import "OTRestRequest.h" +#import "DocumentRoot.h" + +@interface OTRestResponse : NSObject { + OTRestRequest* _request; + NSHTTPURLResponse* _httpURLResponse; + NSMutableData* _payload; +} + +/** + * The request that generated this response + */ +@property(nonatomic, readonly) OTRestRequest* request; + +/** + * The URL the response was loaded from + */ +@property(nonatomic, readonly) NSURL* URL; + +/** + * The MIME Type of the response payload + */ +@property(nonatomic, readonly) NSString* MIMEType; + +/** + * The status code of the HTTP response + */ +@property(nonatomic, readonly) NSInteger statusCode; + +/** + * Return a dictionary of headers sent with the HTTP response + */ +@property(nonatomic, readonly) NSDictionary* allHeaderFields; + +/** + * The data returned as the response payload + */ +@property(nonatomic, readonly) NSData* payload; + +/** + * Initialize a new response object for a REST request + */ +- (OTRestResponse*)initWithRestRequest:(OTRestRequest*)request; + +/** + * Return the localized human readable representation of the HTTP Status Code returned + */ +- (NSString*)localizedStatusCodeString; + +/** + * Return the response payload as an NSString + */ +- (NSString*)payloadString; + +/** + * Parse the response payload into an XML Document via ElementParser + */ +- (DocumentRoot*)payloadXMLDocument; + +@end diff --git a/OTRestResponse.m b/OTRestResponse.m new file mode 100644 index 00000000..dec3d6e1 --- /dev/null +++ b/OTRestResponse.m @@ -0,0 +1,79 @@ +// +// OTRestResponse.m +// gateguru +// +// Created by Blake Watters on 7/28/09. +// Copyright 2009 Objective 3. All rights reserved. +// + +#import "OTRestResponse.h" + +@implementation OTRestResponse + +@synthesize payload = _payload, request = _request; + +- (id)init { + if (self = [super init]) { + _payload = [[NSMutableData alloc] init]; + } + + return self; +} + +- (id)initWithRestRequest:(OTRestRequest*)request { + if (self = [self init]) { + _request = [request retain]; + } + + return self; +} + +- (void)dealloc { + [_httpURLResponse release]; + [_payload release]; + [_request release]; + [super dealloc]; +} + +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { + [_payload appendData:data]; +} + +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response { + _httpURLResponse = [response retain]; +} + +- (void)connectionDidFinishLoading:(NSURLConnection *)connection { + [connection release]; + [[_request delegate] performSelector:[_request callback] withObject:self]; +} + +- (NSString*)localizedStatusCodeString { + return [NSHTTPURLResponse localizedStringForStatusCode:[self statusCode]]; +} + +- (NSString*)payloadString { + return [[[NSString alloc] initWithData:_payload encoding:NSUTF8StringEncoding] autorelease]; +} + +- (DocumentRoot*)payloadXMLDocument { + return [DocumentRoot parseXML:[self payloadString]]; +} + +- (NSURL*)URL { + return [_httpURLResponse URL]; +} + +- (NSString*)MIMEType { + return [_httpURLResponse MIMEType]; +} + +- (NSInteger)statusCode { + return [_httpURLResponse statusCode]; +} + +- (NSDictionary*)allHeaderFields { + return [_httpURLResponse allHeaderFields]; +} + +@end diff --git a/build/OTRestFramework.build/OTRestFramework.pbxindex/categories.pbxbtree b/build/OTRestFramework.build/OTRestFramework.pbxindex/categories.pbxbtree index d3f6bb3b64f07dbeb63faadde56acc354df3e9fc..b2bb1d60bd57f475d22100de42ef15f46cb84f46 100644 GIT binary patch literal 984 zcmbu7OGs5w6ox;0c)`(a5KXSoKqo=esIk)?hGB&j)V+q1i6%YOp3p<>rP0Wss7NR( zaA4xhf(U9L4uc{r2nUV=M-|w&y7%DmHgM2_pLNdO|Nhs%*4|aXf?*=J5>}Y=A}f-} z_;E$7ZG<;_VM?4o3FGIWr3t=nh3`AuI|voqpt8jOupNf|KVE>_`(Rdd)x+losNMw^ z)fw4e%_q9y&V|L=^`6@!zV$Bp_@tNB@}t*Gvu9dhKrE>B<7m-ShrV8j(GK`+e~JD_ z>))5NMt{8pc;xwlUZ%z4Bk)Uvr-Ywgf9APHHSg)KFKQiwmuFyJBz`W*$;p{>?rrwc zCpTuX!Md%jaM%5qeZo)s{G!*ay~ZrxpMv$L;jP-?Klm}9sQX0CbnSILutkgwz>L^* z4XR4>N$a%BX>yK}m+ezbT!mM+mg>ix>&`BnwNn2?;wN1E*002gj1S
ca zWPc0kq^+d5LK@PEzlLyAYS#&$PVC;wuZQg#&b{JZuP1jbZzSSSq@}nn%Fhnhw-9$l zl~B{Y8Y-`pK1*~i5*h8p-Hu-oPeJjeA1z%)q9XmJIr>ZYcHNGwk;stgk;vIRQIVP| z?bJJw$XlTT)$?9KCTYwr3~j?@k;<-_VS6^!Z9nChW)WHHUdsvjxz}d{9UDZnb7nK0 z;Y^_$GnwbS1uUkI{bj-xtfs4LHNQwH+m8qzN72Nj;~C*|w4nvR3!8eZ*q`#d55<+%p1JaUmAIx>8rF$Hj}ogdK@6H8u0KT(xgIn z&}l^^^0lx<-$s8pEa{{pv=2=vQkbF?CkJV?qf$OE64ETs)r4gz z?X#-(>#;_=evpmMT@%iyf^(WVr!Af7#XyELj?K&;XJrR#GvcTqj4S-b^^?Vy(ROP03+0i*v8rsc{RB_(41Xt2 zqWZ@_p*%9_6yrxmA}^LVR#Ug3JWZ5$ei*0k+CMCOgLby>b9?|Dnc=#DB6;dwWzK%i zv*B)Y1a-CTc&__F9)Iku59ov&=a_rg%pO+NywOfWy?ih4Ul)%=u9KvMzV5op%IrG@ zmRi}@UL1+kUl57J*H|82A|2ws=A6RnaLZKvp?M_o^HBX^n7ZN9$NWt%{l zL7J!7&LzFCOwhOFXFG3khRa+hN}VJkB^k(0K8jG9N`y7aPn_W{*Gy(GLm5s#q8Ul5 zKhiPN_7ui4n>oy7J_}jQbjCB0?x=>yXVQNDAC|$*<)-(~E%&XB<Pud!#(OXGT#p{9_h#Z zM(g*{<~i0_V^r{YKke$GzMQVFc5T04HtooG`R;7()U}Uwur{eL-Nw@`u6df;$*hNk zl{A1xrLQsNvu;C>$Jmp5PN3tJhZUnDbzzct?2Hp6oVkIsrjvP`xnA;)TC zwSKb6@hv>fr~=B2C);?Yt;l9!l=9gQa#ftm<&z{FB zI$o2;w5JcF$z`0+Dz5F)AD+{eC)CE7PwX?BkN@kB;V5Q2oz_jC64yJUl*dGEZk4tn zzLWM-Pg3TN<>{*~9V@7fRN$CCagJ*wE@E9xV&_zLZN7%asixK@9o2z24&320b@@KW z?5~l&bmCg9PL>i|9u1|THciOHleBg2Y|3aKeS{ImlBUx~ZLZ~4c~9@yCh@cq7PB8o zZtcY?*F!)&LHilh_Ae)U|ihxz|o<4`S;a?_j)JH%=S3*jkZ9*wT2^L7i5Nio_kHpMRs@G*BkH%{%Tf)42~< zcAZ9WM1CJFqAnC#wt9}|v8HMw-&K|0BR&&%+3Mme>9entr~J+7XFTsBKW`gvn;PTx zsh38|Vx#$}j&+nVa77z+;(k~3>2rf`tXmXEOuf7$49`;!Yx|?WQy%gaFIwNVHrZlr zQ`Z_Hlky(#+VGy@lC(u9iHe+2j$vN-xy+4m$n9hLU(HJT?ox5;FJYYgIH~iEb+3#S zN7kswH}&P|IdRK(Sqt0A*~ELnebilez8qe_XUU^t-d~0BevR`pU9z6YtF7Iso|`Gd z*WB#?r=QSYL;j0uL)F!1L)+h|#{xs-RoK(9rj9jd|2*l?hLRaah7yN2j3+4_Ted*H z)N5MXJtphFS-nFPUNDC2?rjdCfzO|5D39uAuyP*GCbpm$V#;e}0&^Qnm`A?E`V@zg z7^}tovvm9@?sP7QGKME5J$Lat-MVU1EMpzdkfDchtF8KPuWb~SZk=ILcH=wewWq$? zSfVz{K>N|eV(PVpHs6Pz)!!TXOLB1x6^>K>FRJ_TEzD`fyi3tWo}#(5otvNy3KMcv zp3+EX4o=xV%jeF!#4jXveFkz-m}2s?jt%TB;<}Iy_5PW-HYnQzd_v}h#wP9@Do$m; zTi<$TlCeu#s)^?-<(-D~WF zm;02Irm}Q$zvnZ#w(S3`!zO4G&oI8PXH5n;Z#Z+D+fvw`$+o))dokViFWOHW+cj;c zNNwGsA6-wW&I(#@QYpWFMHAcY*g~!zW2o)ywsUg_g?L*#OC$~Zj1lR(Yx`xbrxsfm->00lu|#y2x6A76 zI@c(o&eL>OzuLgdI&DVj2;;={d7dZkRvyyyJ;QBpoGjhsF5>y9uykqX+j9sd{^?xS zam(OtvPs||Jvt$j4GxMNU3d>q&0mQ#5jF!IN#`Jm#FVpN$v0#+t)~4Ts!NgEja$3<4rRe z7w90qZVZ;MUQIk(xsRmAw9^yP`2}ZrNI5;idN%MFn|Xq*Jjq+i{yQ#Hwwz~i7BiEd z9Q&T|GU7Mk1%6-$FS3io#>gJ}Y;xi7bT`T)jL%nHc9}BDzpb|aAkT76z6Pk@aV+Kh zFk_%L@*+QQW~O#SE!WjydR2L59nbL!`#4O(F|L^`Un4wwj*`zfp7HdJby;t$!@@ju zpZzCU#J$w-YEGg?591kArRURzvN+E8xzrkLnex5QI~mqdXoc~9rEySMr*zN9v*~~A zOZfzE8`;JS|bBcXkS_0QsD%31oR4%e4R&VKuc*warr^|wZ~eT;psIly6F zqrT6=?{|hMmv@Ob%l$~G{yy<}n$gmgQh(qnD#>5|9_BFDRj{4Uwo_xCpI%DgzS6Q= zm^8U|Wc!ru%=~KqsQtHX9}pg97awzq&-jo_Tp@+?!!Hca^0obg!f%BcwS}3+oH@kP z4zt-WLL5SQgn9j(^Hv!@){@-zKH+{g>T3&m-3aV^C4M>?|EE<|23kb_L*CM%2N=~wnj<8tAD zLb`=72`^ILIcx2owf!3FY}Xa;qc1t_=jGvq#y|J`T6yGi{5>upJ2B63o$D)Cb^kys zZNmIAp}G0;UdQ-_<+FW8^|Z!R8dUlydIrz6aem)Ju4t94?(>xhS3AGT!z?Ml+W#uJ1!PdeM&_4B#$0QB)fY z5vEhf356*F*ZwTCzmdUyYxR>)SW-I5^RcuXaK5UFS*M3*zZ&ZJVo7yk`&0>hmhDMv z1^MZ7O}~$4{otBZ%547+(h*;~dRTsi(P^V1C57R6d8@uVzp3<;(Y^<%7Zvei8|Uh~ zKUVVm@AK%&%2k-CioRG@`x&AB3ya^qIy!$x3-h?ot4^}Uac-Bp)rD&hPu5<|6*HFz zofp={Aad<+D9stLwVL#+DXmHXSe-Vg@g3VvHZaMj@>Oh!P~Y^a)KH5uQ8XO+2fcl7?X}H_P0oL7~c*y($*(x z|MIe+i+0NkJUv++d2N(6me1GD(vDcHEf#O>zVnRb+Qjk(%2gcu`KFliQto@$OAVjD zz*xR8{{O@-bHb30P%pQRgFh*s*s*YyI$FccW8%DF)&bSb z%T%oH`G}4+%wdi{tS{(Jk=5?8#C6Mw9XmIR_esJS`m8XFqv0nDp}&0VSTXgxN!eYr zJy#go`=f+5|1j%#kgxTh*go*S?a&X_@@IWvRDEsTIj0Hz;=lbUl9*?x@E&@>aOF;| zzUGdx)?0*k)6crTZ-T%7e)?sR|DeDd8e96Xw!C?gYc;hm?I}eVH2(O}G-IB*%f!_V zr2TCL^uY*ogYdkuXqaR3%!v=(>3K>y-_h8*LAbJqb++?PE%0n6?W@_uTrLkYAJQt? z^MQMqBiy)|x=L-F9B(`H+c3wawV$Dl z^ElC7eezUWc^1~PzRp8?^V8|k=7aw7PS+X63;d7;c6puhBSol4%HX$9DE$}&Y`Sh<*6#Ym3qoI<)}bK_iW*KnX$&HX#K0X zd1Q#T+QWOv!QN@wUbDnK9Iw(i;60y-?o&7F5E?Bs?w0wbYn2JsY_dWFqEb= zrvshn#{e{iNZWYUFHtx0YHE*kNAX5_BdHNZ6{&}28dEP}{21=q*tkaC65k4u4liMC zscl{=^#6^&hP;G(>=)sZ9MV!pAIYuH=QSRYF^~3_Pg}g>uhSvwnEAGKWo>kneyV;a zF_+bBVmo^|OuQb(dYS4@YUdX<_FrYAv_H-^wy=rUc$!Cfik*b-pY7%)p08#e;?v|e zo+-mK_NR`&#hc9GEJyf&cR0wq9ODy?^AU%LXI>fBK^xTOdT=B)u&_2R5|8C>wczi*dCdVK*A{WjbT6P?g4{ zW46XJjh+k5-Pz<@y?@49+ijiKfljn%;vjLelwsP=5PlGUR2l8q=Xa5Cf^~_$)=$5h z!;{qLZEes|J&;R3s>y5WbiFc&EsvY?60M*2nyBv)%~Ed7-`nEcLu@{0xn`jB4C2r7 z{JnfXM6W?>SeCx2_6wgVg|ZbTxH$MJTZ`Q;nHP zXQ><4e#KgTXCIvyvOxP`0xyd*sd8T8_!UArYKr?~eo#0`HJA+Kpb+J$P9s+F5Xbq7 zOZ>(=In_Ivb15H6QkBQX_jLYv$JZ#A2MOs2?=06Si}h?Fy*yQ- z9?#p~n9-Vw2gqmt-7)6w`RcQgZS7(oWtB&1`z6L%OZzOTJRe=GTKQdj+IBT*zHK2@pAbIRo5u!*!TC#BmeKUzy zc#^Y}rXo+Lvv#Ap?T)-;dk=3jOxe9J{FrgJ>-oHddzPgXDT-N_QWGD={0`$e3EECc z`K%XTf8wgNWpw^$i;Us3T}Nxj^Xm7%7St}MS$ETmiOH1(!)iOmB%-;OH#x`-*L*0x zrTXuc#GZkuYW(P2`j6)*=?&ixo}-+z`I6_Qmd4H>^^aEMiHdZqFMSV~OSJFZ8KWYZ z+DiLnb6YdO*~9lTv4BcjM-JA zBI(n*UlHTUNNucgROIC@!ZYee*rP~P5_5b$S z`v-c)iB{GsDMwso-`w0yvLW_`-^BC&jzZ44_4{b=XgA?^fFJNCNtO9$ig$o>tMt@< zm2;)V(lS|niaUH~?N!Hb{@$9d9P|6LJPGv!vXP5?Y%S}WyVXx)?Oi>5R>k^^ODoL} ze9kq7DAR%Raj3ue_1&!%%!AU>ovtLNBX@EkjWJpszoI`iS0CTY+mC3LF>SP(bH0(6 z3c|C(PZH?gwtJGC&f&OozjFKxMU_(-&Tx^Rh(A;r3%}tiaqK_uy432bo&4WLA$9hm zn?9ud@6dK07d}ZyNBDl!MfXmo3`)7K5XbG85fE2h-8bf{6Q(q@L7%K+rr|K=0db{rP?9N}LPt?{1ilq~| zF=K8aa~w2Ze|DoXf;@ z?6~j~ejvX6uY~7GX!|GO&*YZ2=F+*Qu==8JMr#-bI%ax_X&-fLKdmmloTNNj$}6Aq zAsLM!kNfOCeeiJ-RafWaqBON=L&q7`IrDAPlfByOL5^^oQ+&aB>bqZSDzjHTh(2aa z&m`ShNJ9qFQIYbLr6i>po7($AVJ>~7(+KJ13Q6n_7w#k70_)<$*2$zZR$j&DawV1*u))El`n18ZDadw z>C8ZWaJ-eU0l#U8&lV6@b8`(tQrXsr7qgs@j_~`AE-gIMD5Hxi>PISH6Bo ztQxA#X(ZY{?zK9jHpcL)Ne}}QGmAR0H+VADG#u4!j z;f_W(p1Hy^<$zVnPkH`Ko`vdyhO6C^&B`Rbatz;%yVH3$e?RU4<&e>5N0ikGK5wVo z_=Uvn)iHS~$ve{W1y@L*zueDeo+XF!2+#T}8~CiN>k}wE*Gu~!Yi=K-4M^)n>HBTGJlOs*r~1sJZ8xw4si(Y2O=faafRbESHu02Em&E35E+#R~RMGcIqwd!V>&7)NQ<19lH&zZMlt=i! z$5!{>pj_Ke)lS6qJy%K9L*E(g-h=f8WjL#hHpu;zj78G5Pg!3hq4w}Xdvk+zMIq|Y zl|AA+ONwaso}uhpYkNc)L)!B^k5|;jq$B*^cBi?yQ#x~`dwrozU*;b3=dh;wmUR5u zQhPW5RG}L6s6j32@U^~FE4?&nU$fZERMvAlKN*}9zSpwa{U;1m#`0Q{J2@gPC-{{e zrSt{T$x9JFv|URXM!RkzONLVV3jP7gkqA z)D`Op^%BO9xk;=qa_e(V{9Zttew?k{wA=p5!?{vuZ2TAV!XVg;-?XD>=am4-s zPVgpamD5aRxqubKE2^)PR~daIf9dnMha4qhIC{g6XADLO;ec1Sgh<9vVvt) z)23q6@!#SoE{>9a#Fa&ujU4165BbPX_#Ineic*@gl&2z<`M=VU=8y9Dt2nBPr#dyc zv#dT#C2CWZhHTTnW(uDbHW5B8Y%Y98SYB9zR^%?M-bh1Al97o}9^rd&2dZf6w4p0= zSjcGlv4R9u^%3D!e&z({iE{jya5}BElXb!;c$p8FKnJ$7mkQ3WNmK5mt^8$^j;856 zbE~&w@y)y1%|PvSleAYeKJI_jc&HEmxW`zh?X~Qrox0cI7mTUS55L#HEZmaUoF%;I z`mM#h-&rKy&dTMOdaR=@y{s>oOU?57qO`8M zUws<)JBa_HcKqIPdFyNY6VKB2+e*ushT8Ns>m1ir-6}6xwRL0jJ<=Z*G~1jPJycxs zk?E*&s%cMaJvX^WP2)=KX3lv^d1|{4KdO#GSrk`i`b#a&JFjOw`EH;O6Z@TkPPP;D zGtNzLEoWLu7nRg~L*})$o-x)88*8nkoLjo@eA`o+8t+)a7T$ONvlMclveY0+1#_l! z#EUj(NJBi1XV>7xUkUGT*GSVNY~;<5KIzRxW7^S!!HgxEcR9>4 zJ|})IbwLNZGmvS_VG%3HXzt2MQR=deC*13#>ouvE@3eMN_DQ8J2lJ%$5w`O#XSm8V z*Ayw{8I2N@qMc*w^^@v!q!)u|%uC$O9IoXtF7P3RnZ|M+U<;|GBVM#R>fjkcn{PsK z?Y0Ij>A?u5^A;a+hVS^DlgMldlc%Hk~UW76lQ-D_mKH7!}#d@uiST&bcJ+; zdbzbsOVrf|>XR``vv*iBAvUb z;eMT2Xl~m__=goH=(BSbMktR^FR7i^iCzri=JveG{t{*o+V)&w4ej7FVL9O^!kuKX z{k<@J=_na#$V~w*I9^=%m9UAhKAq@8S3)|%?_DzcyZ|Ms%Imz%72-N?FyooVTyn_Q z9n54U;qNWBQcHO^qYHicZ@+J;B9333ANzY3Nr)LwPb6Wm8Aw3_qWIeJ9Kw9;w*5Nyh`%2#Sg5XF zB+eb?@qEe?a>!zsSt9H%+SXPl*09qS(&P?u&jW|FkF6twLgxd`*J9f4nQaBz^W@=c7gK*_%`^H;SN(P^8LKyN)wmHgq5)AY1i)IXB4vWV)pH1UDYw!wdNz_|ea9SOmrCnR=k_F~y z@m>)BMJn1pZcX|nuQt?vjTsN1`9|VJ8~1X_H`mFl+$z%ESTul%%;$T4;$U6xHS~q> z_j5JUS*KT!erg%hX4BC*gSeYT{OtVk&YjD4R`$}4CRn3N=Q?fbdgMmEg!$#q=7yol z`-nDmk}tW;FT}q?Kc%qtUx|f;zp>lOdwj~b+&Z`9bj?ghz$%6UTNR%95I~)ZwJh&JyOi@J{MwaqOg*eD-ww0p~o(!#qR> z$2!xF{`8?66Uun@BMlkI$VbZYV?O0`j&p*uoa8iT_=KYzBlMT>?zE5c9!y5Elb?#z zq5&=GLKp)EGJ*+A<6f2!J2s5AJ(-f88+tIFDa>Xmk8tbwp_#?hOKI1orYKcN#8v71 zor|0&uVb@WNL`wdg>yc8kAAktGKIhUlk<;sTy$+xb@G!io$ztt2C~?GMA)&O=PpLF zlWDAC3(FY7!}Mh%wRncX>O6<~&PqiZ^9cQ!L`N29cTedE@1*+Zr{P)Xm)d@RR!14E zvVO~D?x}lY&9|-ojk!HuQ*)K}a;mqrs`l}85B*vg>1PZqtsVyJ@6x@tnYmm1b!&K* zRaOo4)lJ&YV&hK@>rgLw8#@{C{7 zvHt4W`TOqDZq0F-x+@EPGf_8vC4sr!xSlkPcGpS$N!HQ0#&P*5D*fw{NT0aR=C}45 zV!h`4l3DeyIOdxF;8_MY$W%mg`F=4UiNSdmr{K~v2Z3jA!5svj1W_HW)cfWC!S7&|q z33d6gd}p#hnBvC2*BWS(*{n5PpNdc1=PdJGzl`@*!%RI<7GWq;>VOr;=wLQl6QQMWAn?#s{ezvRgmF-17|JbDR8KFGlMTrR>0yo| zs=G0#jrAMdd6>u9&H;{6$TiawT89!%&Sdh}z&drb_i#RYh4AjXD<|uidr6*7Jtt6K z!n?VLw^~`}X@53j=Gx)~y#JvnrRiWyC@btJypxi)OHhh3MCEcHbrM&3oK!ET_>8lB z!QcH!?Se3-=gOka%W4lJ)q6Sj7;P*O)*WSj8)F`c>pNb`YcbVF--p($8{FyZ!_z7E+($DrzR(bnbAb~@Bmxc!NWYuk43Z%Wu2K-=Ag%zAg(&% zZ%3$;Fm~*+{gbkeFMP!Ku|@biGo3q~ZqiUj_=@l(r+AcR+RX^zWS(UwZ&KUw#%xM& zE@m4q@f!O$z=zyCc7#3~$35?2D$7~VR(9|zZ*!dF?vaavl%YBeX~SSfGnF~4rkZP7 z(2bh3rYEe1H&(s)$1(40pzXgV9pXqeO!4zi^%)NiXA#>;u0f3)#OpHxTEn`r$XZB*MREdO6~ zlIGk=Z(h+(u5*Z#_O}TykWaamv0sBt_W$jVWXFu>e^#%L$O`<&rCUFB~i z|E>OiGCpL`Cqg@zI8phkzYB!#XSGl-pWBZ8o>m6wSiaPFqnvXn*B69u@;v|HC0^w% z-s274C!cedD2MyVYC8c1NXRnBRrmdk zYEhpiw4yfyS*iVPWDntY$#<}gs~a+IpOto~eZKg_V7_i&}h034Jb&ew{R#!a0qqNp9J9B2V zx@-DB{pE_h-#ixHQ$jl-VM%KM8nDv-M`W};h?YEI|2*M&Vl*9z9Y;$R(JskBD;Cp_ z)l_8)p){#Tyl89h z%;Mv}eOI)Ei-!-D?{?PSjpUs~our%n=GjzTtm#Kc8&5H5lyxDG(M#DMoTt5~FgD3= zk>bjOW(>`!tvQxTI>Nt8bnAPQh_c$mc6PI$-$ zOkx^yS;po8>SML%fN}26#!m7_c-M7bdt)YT@AK|vv9VrTtxs!u(3c@p(GSA!S|%D- z*BN_bf9Dd$(@-AwxK9tt(~yzukmn7;m)XW!JmAyrs{yn|vrJ2*bl_)1f4 z_3?s!2O%88d=}mVtzkE>+JBK}No0(O!)DtpeD=F=FC$AB z-{@v697=4z-RPVxJj2Vp&RZPh2*)|imwZEfait>{t?ADM*07N+JkKshI)4eXxJ(7d z>T~P&_rn@_r#ALF2RXte%Dd(#=D21d%ek(NCetpnQh+y`inp2ZhzrKr1o})aDzij8 zeU{zMd0Uu2uJx4qIc^;JQG583i+oKOKSI6C$ZL$_eoFHc%NSy;Y)9d;(ptuIr0@sf zSERCiPN_x5r6at5x!u2~+E`jWS8_k??LTB1;T_~8 zbEUQy{?6(-d4ERxzxnU2nkvWPOy#z zc%nWrogeBbdvj|s;;Dypm$SKZonO}&n zPbMV;!{jIQjRV3*Ime&%ld+EXc()w~)%JV{TbuO$-RjN~y+Pvbky2AQ2 zuIcQ&U~^Vx#> z-VySpYZJeG519IFIoJ8yVoUK@4RC4X8_FD$<3&^ApC8&`!6Cdp(n+slInf4cV5@vm9H= zE8bng*Li_=iQ`!8cNG54J^$=n-6`g~I9pQdzci7stjWCNQBdLEHr~Y>oz1Nyw81RK zRu*w@2v;bh#f}M^FV!BG8K1P(9mDjK4Azh1jnn%1YIe3Y)(CI@cabMsR2bb-w%DNe5-$QP`QZ(h<-3hqGDxGQ^lrT^YPfEza>h$JoPlvbuhkdW#b7 z6s8rH;jr!c!hiCU+C^c#o>L#IKtW!rZT-($T2r0gJjQ%xvz)sb&qxMSiE{jt=j>1~ z@uIc$yw)ykCieTY#i}Te>dM2Ic8y<%+t7N9<;J{+IoaO31I|-e{g$T&?Zxx0Yu|9q z&ELWOL_R;`JQw+i-w5+d=(m}Sv6;z2R?>1xT%Ykzem5@Kzx9*B*`eQlEKRX>3fr^OKCS6eBa2lxNOXuH`Br9pQapRdabmV*l;f`)lf_yhJZ;zCYL6=)cl% z7o(ZNem)@lEyt!_)<`7ntq+Uq=6`$k3-=vZ$@#+fIm$`S@Esu?p?%!?F6V;Jek5L5 zc`L6y(5!-fO%-L+j7PajBk>Po5{u}ezYpc_ybnq(9ihLRa?c#@xn0<;)IWO`64gKc z3FQ%fFSl6w!`~8Znrt0Q6E1?r`sct$(FfVFN1&+g{uquRn2b(T&&uJCz}&Ntq9rs{8OmjCb_ zif*;Fkrn^@yATlEBKISL1(G#!fvw5rqn5*9RkYByeBC+x)ri?clGtSpk z=e0f4*H!QJtRXzZW|}Tk?^CT8ma&-WUA$Y+=q8JNll?u?@+xogEYG9ZBm12*+c^u! zVn6&YeY*BHk=e{=DnC2FvalLo+CIzo46#3k5sYIL!x+Re9%2p)NkkHok$?-XPbVx& z8gfyb&{sk_GT1ImL2{6VOk^V;`AJDBZvFR;&yG=6TqA0%d$V_xc490TIZhlCm1|t> zRM{jKzU#T>$N+6ncw9I<-T$QHn)oB?BMC*RKy8}SkvOC_n*uXY2_fRheo;`_;edM#IzrpQMcN}W}uA#Lc!U5p``E&PWs z(ij^F=?LYK*0IX^X+;{-m+nkr5cL?&SYB|S=jiO3O59Bx60)1iq;cMVoRd?S-Tq6q zGYP*`h8NhN+_NjoJE%fN=?MKLx|DZst-Y%kmec>U%+yCHO?4LaF&>DkAFa5P-t?de zZD~#?y3#7W{%GuJ&pG$+X1vK~dl4gR8mD-Hl*Yq!32(I1@ONs5dNyPVJVfU(R%;f~1^DTwV-JctWuMqyT*u6V4FY!t27D+ry7lwPP-l zsM`N-AE7)#z1&)+%f<5`N!4dc(vpcnlnkM`N>GLhgum@?|o9PSQ`PO(S|}PjR*5w8@NrKF>^2GLoFc zq$D9}Nl$9BayvhvJi_mQ-cgosvX^}v<`8f2Hm~p+yLpx5@}H4RWFRwH=&c-53R7@J z9rUxG)OIp1+y8-7wom1<{?{hwv6w8<5uO>Icl;pr@))~Vshu36jJjD$hKj})*FPuT zD>e0T<@}j)ZLLhF_fdxCio&!to;}dexJLOZ?vY47+07pQ+fOKuutpx{K1FE57=Cl_ zdxg<-XNd&AmqUN6Bd@un)$jTa=XEb8NO$yOohU$U2~q;TwO;X!`lBv-k}WxnAwshxLRm_=Ac zm{gdE*|s&$nDPkUkwiK5qLw;olSp-;4g7Kl^TUra#hgbKT|@Um;@axU}uq zdM;u6*1FE_Sg7yX!n)L=4ma0-Y`*_n7(0Ia+x#@tN9)m?Ry5%bV?_~4QIO)4rDsjg zE%asq3rQcjvEJD%{ofP5&%1>y%-~H@iZgt__ifVH4&U>Am-M#7_kG_ZlkM=m-w()Y zJAD85dBXR8cM!h&`yvzBMfeWztAy_X?;-Oa>B!;Q@V()!Tw^HDa-Hx!;t=Pr#Ks%` z5#HFini#}s6 zdM=CgnK5YiVj(MelsnB61DL>UN-Wdg8N>1rx^5hkm_Yb@{jAavp7rNwu;c59^N2n$ zT)VFl6?r8TR%v68aJYMS^*nlZr}iiAQ)Qwewd34)K0lIQzPoxi-_iMTq9P9z)t7qS z`2F^PKIR11&3wYS$&IhA_1((Gr73>bC%hu8FP`w7_ScNjEeGje?Y+0%W!$N*e6mMH z5|+`=r{2hGu8L8SA9J{_v9Z9s({h&baowrk&CS-z>5T2~XESf#Wqfts7IV?<{$y}s znDhI~^AN@|mGGU;C9LN%m!>Z9HyWk-9ul1mwm<{?(g(*q%2;(VW@x0?v(r6RnK znp8MGU~`d4Fl>cwbgbA-V)ozG03=3NexwU#l5(p2Z~zK;rP!ZF#+%j#m5 zIvUDuKC_=dxQ_bn(@S{7vBkoPtl&la34Qjp?H)PI101k6`JR^Qt~ev9M_&4K!DnA^ zg40|llt)O%bopwLM#$m-$Vc|LxyR${-z~JpOE*Jw+YIXEeV`cRS%RVJ2aIN>GK9jx`WABQ0GB ze_J&q>}yYtP=g)pqDpo7r-AJmyiZ2y2y6A5pLJ@rFn%{QPw68S+KI2T{PY%oe|0L& zyGF_TSnGp{);E(qH_h-&yVSbK_|)(|eSd{H#qqpU9%6mt_qL4(sw48+KGRrQI;k6R z$F*J8c24QYG}j!F#&aGE*=db9e2(X$+3xFpdpOF^9LuWx@;P@ihKRB6+BD@(+Ue#W z`-ORZymrCydDa=q>>eKB_4eAT`ieW)dfaxSxc@V^9F)ge^7pW@>8{b{!YO~I zv4!+Y{Nl6S9O0mL-cuaoILPPxOlolzV0&Keu(mp7 zO-}VM9pPE-&z{4EN%PImVk7MjW(={yQzE+5PobwS{S}#n#Qr8Y@ei{?QOzM>D`u*h*67z3-rLUlF$U{PP+or4QSL&O*%JEgk4Mu4PWsNtrX+mo{vr&d-YF~4Rr;WAG zpxpW>XO{FeZtxVlc!%T6G4{m%|6!qhgmJ9gz4B)q7&qVb`q2vJvzUb}r$K7>l9iBKU(#mzK$~b3=HI%VusYv!Ir@hiQ|7F)0 zPihv5iZqYwy-+@VEtm6NF|W$U^1{}H(srVz{OL3E+ZlW7T0?HMt}wQ(I;F2S(H^&J z1I`)!xIWy0)ADw=^OO4jb)~&SZ)M#`ANBbl=}ab$!WH!A{f^o1GsgHLUEyzmj>_+a z0>&KsM`yW*@RuJwiz?g6($>=Fkpnlz((wC^?((s-sj_M>Egj9V-SvIj`)%)WJkFi^ zx$TsWw{rZL?S3k>HC?DrVQEN|&G=!Ce3Jtl;RI*+nxsD8sqO6I?o#TXA@%;aSq>V4_&&MGr5<= ztYn}$X$cQ;MLanaOZaZm-}(F0UzA-E^_HGo6rm9 zQ`1;fPTv#W{C66U8gs+nYLqe`g}>MMTp0dl<86JpyX$+R3;nOZ+i>W%e?q;4x#f1> z6)dXhzVxCu3s}g%{fVuY+ga~F>3#zl&rKu%hcTj;c29{u)`c{p4PEKaXr?fa1a-6xGRZ{v z?#YB~#+gE%rHm=}kV2g4$w_|3aCW$7^C{LvKCi(b>QImN{M^Vmq_MQB>-mSd+|O3J znK!38XC_ygNQ<$t5;bU2{(pWCl}uYaq&(ILmobaC?avp+{_ZGSHTmUso<(HuZ~cUN z3FG?T`L}g?O4}f2Fqb8Szp-pz+d5RB5)2y40RyvP&0%nn}TIsWcXsF$$zID5C}!7BRTLhCp*_bAiq%32uKxHFe%FYZ%t`Hl5$#rv#x?LWNC`a_sZ*)CL;H9M*+;nU8$_5ac= zr+=JUsciGQ&OjLcUgq5EH?FC9#=Y;-f4)+_ar~}nhWDP%>G8SpmDrXQq$h#v(_2SN zXP2Gkc=KfR8}<{M*VOs=?B>~3-W!;+3+~gW6H1GUztq!O;Ji66k#ufRN8*{2Qk`V= zJoL(q=gH7Ej>^YJ9OGj?A-;AHMI7Q1k8I>2DaiU&P-lr*z6nc{|+}aW{okvjMLYx+xPKC2YtSqwtlC!YK~Yk!o1wYJkrbf zGR%#JD`!eliRKIuM{#3b1|Ns#xION>jn0Jc(eCFE;rp~(_>kKALil$8{?6a8-fo$s za$COO#GMZ#_J)a0W zm-gIbZCqR#^`;CNr6c@Ke`951EdS*9@%id_H_8;|a-1(isO~bUx7+y%p8le_gkcqj_|wV z-tL=O|H#J$+ewB0hPh=D;_V)in8< z!y+EwF}87${PNpHUMDKg87$>N4(S)2OSzu+I8QFO3TvPZ=9}EEIj61WGv|IP{K~N@ zC9TUS(NZ5~LThU~W-*T?tmFaKvze_di)#(d64tPYvu@T?{r4urUDlR7Xl|dD;l{IV zsF%O`ef(qc|9|~XUUvS~Pbyc3aqOS``=rV0Sqrm(2U)5uZs2q?ZA)HL4D#GdJ-Rb- zs&eS%U4wf0d784VnQ1LxY+i2d(0Q!!h$+lg=Lb`2 z-|4OOl+*vy+g(6gRke*CKZov;Zs`t1LIF{f?k=UJyZZowv~&pwDhh%KC>9tfAYveb z2!a9zVS)*YaDNj#@5jeW9nQUXjqx9I?GD$@IXsD!d8k4|y) z4>z*h;-GMUKQ_b55@?nm^yy(YBb&zUdgkMLgrgI(LqLfz`dQRM6| zMh6*dZJUef7>0WmI0on0xprsuqRL<;-V@8G_`si0zUN^3C5~T;sRP6l-Wlr{?8H8N zi8*p(NwIw zjHHN-96=vJj$71|4jGUMS&$7ma4S-EU}Ls=W2AAgo$tnM+pgR_oNn1-S5NapoOet- zHds_woYvQ0F&1>SjIG~%h`l?}BO9h4LT+^wMScW1!h7fnTW>0+2RC;er2YzW;(;!% z{oC^0D87ec_E*52D1%BUg_8Kj@qak}49;S8P3@972|3rar8ngU9KgcJDcavoh zoy}*9AN4!RwgQehX?^oZHfD=~s3E7u)t@BI%vZ(EycX<+)vftI_IGmM)j8wQx5>r0 z4bKEs8YBP3XIJt@&bRK|#I4Nd`pK!}o{RaIqV6n?OEZ)&p{L_^v-J|^&Bv&o^n@*R zRH7w2VyQX?I42j{IliDWc}H<)`*7=v=rJ9;gz;s%7=9AZ)dIkWXzXpVmz*PQQF$?twQI$$v#xt(lCO`ipjOx?+q*-;^@YfcOxSL*5) z$Cq&3Fsi({7aqr2Y{D)aMui;wS6g@8s?A*D;2yqkuWjncMUGSSx}&N3*dPObnkS~{ zH2NJHx_aFuwIhO`wkvCFKwk{TNQ_1FbG*6vz?1wX`gz`bbIb?(I=+%QC0@k>_WzM= zPvZ;<$>)tRzZ)OHTlyWI{Y}PZ4bca45uOE3PmVATdR2ZH+s3@H51mwX9-hO?coRFY z2Y0J~DOTb${Eo92r;WLIr5PKMH>WWn{I~LrE>wOYuRo`*XGWPfp`Z5hM9E(mM&9&j zP4BOXhb8vcug6AciTm-GbNlkU_{ynd$wrR(UBoj^wlglO?AXACa$}r zazx1Mn|kx9#(WR^akVjWs{S>j$1ZpaJMp`7U*fZy@c}+V?tc1$a<~t5(Ef_G3j(O1h6qQjOb1<(!7-fR`|dO%~uqyoPNk)6o0_EkoR+4+i6XWTDeRY&Zo^^UD|Uy13qo zU1-+H{Z}m3*7FE*ggjP&P47T?e5~EQ*w@*d3EAneia6Yk&u|o{kz}yzq@n7=U1DMj zncl~z=%0v8Sc@02Fo_(FgBpA%E?e-sshEWY2y%pHqx)ob&s5!CAhlS_CZF7j-rd!S z%01juK%W7|UF~nc*)hhlvHFaO`aR0$W%rpAbrviA+(XSIuJ8^%#C{yZpGd5|<@z_b zn)ucCbmR#4PH*J*a^XAkvY*p!0`is9ha&D(ZZxk}Po+B}|MNS#y)%vTcSS~|X1nRf z>EK?+FO&Q7%Ofwz8SM7(8FMOqdN^z3e|~RwBCqR)BlI?(ZYp|)FQ+lc7#RKgyKs$^ zFD{qk_yyN(^veGB!KW*4>H#;}e-WK^*xjljRZt8QjXUuunxWImX7Dt{f z#fGi<$3c2a#%3>Hv`P5BqdwhC(x>To3eRFKx~Ok7N;xl1dwGVw<99I!!UK2(@8CV0 z?&>qUZN?7#inC~`?kj!Y@rRgMq`png4Zab4^wt{k1)0;MI_jYX+Tv%_tu5Zr4Ub?t z=HhV_G#@FB0puNq_tk%-p8S9aIlD0qw~!kPn~UOhT>h@H)D8`~ba@WnE330va`_z% zPy_W)3)N5ujj*Pvm`cnZIL!asvfobnj?EH$G(4MBiywW#&ujC8N9gh7E%c1=MMNTP zr9hRW;-W17p~PcR=87maPX3SsqH4=0Y&U?8i`kZzUZ&diFj`}cec|2Sv+yf+`22)& z71kkIjyPl3cryJ?ksC2>x^ZfbSj@^6?X=a6-3J;gwLM{g`8+)zAC94XPRypG>sr<2 zJv8z8AN@*N)SL(vP#rxmJfNSI<%Z!88_VzobS)yDx_hy2-y-sdGWxwXndIdgeYcHj zVzmT0!acgviTF0&p#Mbdo($WpM=0arZR@F&X|colZ;q`bZeO#0Ozg&X34R)`8A{Xr zmYQsUl=QZut+?#PrgHUu`p;o}%!c25&ZW$X?D)y&)^ywo`Pi!jZpTP5Qr5nSoy|Y+ zf%=#E{FVH(pt`u{>-RgZBwMdUdUAwohNJxIXPic>=49$F4`VOt)Q~&mzo*z~71rZb z6zVTl)b;%^_XWcF>MmwmVKPmyZ4OSRQ73*trmn_+G!tKM>T4Z7bt<0y2zCi${%Q4| zM}m6h^+<~>$c2KafNE%n2hkOSFcwoV2TSk_p2y306N!`Yy-M;18(#kGNe#NW^!bx8 z2kP&fPMC!aScKPcglw6VKP&Sqk1KO3KUbzvu2epyT#bLMCsoG7AJ*66Wt8>#Haubd zu(pfPVG_JLguQJ42pQ-jc90c@<~y@7Z#y^)3AC=P}yFFvlEzhz&dOX=P_+FTB9s-{BYaWgthmN0&gJ zNQu*#^;3B(HpVfI-^DJq?U$=ZtG}!^JE2M!-@W${|NLQn8FE*k3%W0Wl1PqJ$b=hN zQaLDm=W#E&BApWtL##JIJG4Lzd`rHc5dN!oq2r4-a=qf%l=?dnGjZD#;|8jrHkzUj z#^MYT&|j_T>c*3W^p~GT|JScjxiAOHz;3r^oxI9GvTZg$GMi%?0+n+=^ zQ5m6p=XSQVew#SWgTi@<+H=IMVnw9lhx;3Ij0? z!!Ze;l6^PICnq27!EGpkQ@8`)qZsbQk0^^9UD7x(+$(&eoof+f7(mw}ed6aoJU1y7uGpwhzFDLd67tiwWH?_>E)o~D?V;}b7R}5<|2OGP-z7sYP^^=#C)2b4>(&HCT=caVdplJ9{0Ap|a5%N^6kaXcf}ms5s!Q+zm0 zo!E;H@IF4m*LWW5u?}nT8+PFkzC@fy$)JuS)>q&FKF5oA5>I0dp2KQ{xD9jlN=w8C zoorXm*2jIRA|tkqCcn9HLEDe-(FXYvrHza@-qq)CU0*BreM9!1eBpcjb6lIHKKD|l zj*J*72extEL7&&AkBo@Z$N8tkoATfv^yv80N98rTnZ24kY*FnTpBT(nA|oTliq#2m zoY&Bp^uD1}VohW9r% zzM%ve^Vn7*vH1%=Pr`@k@FVraWXa~>;2X8H(^tFU`NkH>iA1(xbdgFM#nf4%3;Qd> zyVY`tl~jkxp3e3=#IJUze1MmOlQmC8Rr}8^{XBJ z5-T6}cVDHjJbt^pis*ZwV{D%_K+GZfe(1EG#(I6av!i(9mzUlb&B2zrQ3$0`9yJhs zzjVENLf#1XJeG=?@IMM0v3H($!f7&WCewC&f=Z9(;*eBjg!;h>~N(41PhTvGSaLOtpP3 z7GVX};bn}Y+nspHaT(aPI9l+%iuQG7v%konSN*rKW4L&_MG?lgNzTdFL7!%_t7B&o zur;6DNiW}aHa6e~^q(S*Tk+@Vj(1Mn2h9T?aNXO3U*Hjbw3wVzP@bM!_ND7SuATas z*ID1*LYp&Ox1%3^ptBVS`Uuzg9mv%UXBs=MiLnh;(E)!WWmDrCHW~+ZBBlBYq6}JL zARfjVwtPW7Kj0AlK-{|OL^kBdUV8rxO&!}ji!nR(MgIu*va_&V7TZ_cEjRGP<4MJm zKFn+*$0~2bCyv`+-<;g~<^S7ql&n7?d0KWgFSz{wTjtPZ_z#z>En!!fm*y?P7TQ^i zrx5-A{H@k+r=w|Dh^KK7OJ|GUDA%;w{3pJ-r1HFSD;io)h~{|R=NnnlIw)LEeo~$7 zYs#70coIE3y7n2&pOAcrd382+%B>A7z-lC?!^aC4D-nJhuo>T1laW!?&Yo0;!SWo#-{B*$yOiE5Ch{70*!~~4Tj+F91 z#KrmXoc?T&m+>3jRYpekNr7|L-_+;L_H9CWpHqtMr20Gtzw|bL%VIu>ZT9zIuQ8a1 zr!l#JcJ=eHx+*tye?_?-?_g5~=ODywxUT)dwgmh=C+xc*Eyf`H&gPJMGEa6Knxh?h z;;eqwcFqLHr1N=i3i&RtF#@I8Ec}Ks=p)R5-mf8d4WLVuY(wALZ8*%BfMMK*oz1;xYxFQ=$MIpkyU&>kWMb0N`Lqq>8H`h z1Ulqbci;uGzc!b>X426t*VhzYTW3?JG4~G2zseGJg?xIy`aeiacPNllY$y+-g!M0R z7+>Kd?8P2@f{(Eev0ZfY!n2Jd*taabj8PWW&v$3=O-!8Ud&?@Z zh?9q}AT5gH4pc;Qtja4F;ce`}VO(no{t@o0$K?69Y{rM&xcoV|YqfK|eZeka{_$RI zv5T%H%})^C!~Ki?4-yL_@eX$5)^hw`Y^CYMP92P=Ipk626(m=2Y@w_7@d>(jksB}^ zV-Wog?*`(f6E1zHc(6;zV>OzHQFO&dG4(bks`mh1<^O$^gE0#!n#;eojkNv=)>^Nj zOkn#r*3Vf#sQf{>L;1UMxAJ|qIf~zqAfK@cE3qEIE+KD^ckB~b+e>WRWlX>fJdStp z0XEaq4(!HP_z8a^ymO*3VzY#}4cAb^HyKCiJ?F<4$A;|%BO`vaZ-oQyDI^96UiMqN+%Yxfp^x}GTh{x=Ja2@0 zN=N?Zf3|L8+gH9a7OAgPUvqEumwnIqoaSr+zHy6r1{r!9Ltlv>dDZ{l3iod7xyE{1 z{3d!*8!=ooci}nUGIixo>|~dHh{=C|l;acOHxyM+3k}g451|bGChp3okq<@D8lBM- z<1h_Dj_^HcGi_IQ-jW{1HRXI|Y2{>P1?5a-du4GvY<-dAb6Fo`y`J^(UEoSScG$e+ zJ7g6LX?ttCv7Fw@HK@;DwRBzF$MJW{!QyO;{XN*c7o^$?vGO)wZm!;k)b}2q@wvOQ zG9Jd7YOas?_$FM-=VNG&{~R9l5pw#y06>XQ9&VL{Gs-sm$vF*67DDJ!p$T~z0!mC4F z7mYQ(Jj@388F9wTE$B1ZI536%r_#5vFZB#_Uv$Sn^q4I_h?76MnH#HP_yqHEq^x}5 zvhu>*qc#~9);Etbwmcz^eed%TJ~mwrT#CnP=s#VR#|AdaD#zSaTP*R3evV!2*gx!R zZoQE6M=N8p2+IpO{r3CiDnt&ZPx3?-(H5%nt>nro${JDpu9*2C?vh8IQ?A4d$Xwj< z$c~#?f*c{24leC}Hx`wVGqDXj@hJ}AFplDTj2%QSd8Prz408_dw7%_j*AV2rnI)T( zf}eg`K;Pu$n|b#BHEnOk7Z0!#pUZ|LIF5R4TuWmVUhhn2eT>t%i|m&!x^ZF5PtSki zv3G(x;zd~sKh%=1@hd)HuTPPff2F|!Jb`D%$=fJrUuD!qfsFKvJLLPSe5nqaVHA?f z{aJANlGcWB?Q-e+YoBbzCRl?Td6(@ZeHe#J-)Vb!JJn6AF14P1j^ zHR{@St9Y4+IJgCgkr~77-%Q8LG8=2N$~|b2>3HU(S#tl9Oq0KRG|j*p*tG zCv;t2-}udM6Z6xY^fk;e_c*37reUVKX4B;ul(X+WpH+F`JBEF>eJKC@t~`x1IEz(b zylQCf%jas~4Sl>#IlMpL8OewBfAv6PWj%Vt*1Bwr4-k_j=)?3TqR?PD!gbD|lzcp( zUwL})d3w*)#vII8@%$*cE`e?K-K*`UbW=vTxRh}jPh&Pd#(tc@0LL5{aD9n_pN8+C z_R!-le2m3-3=1#^^RNtq>H8dAJW`$ik#8g#qa|u%6)K|`7U4bgMR;!Ue8~GagR^+e zw)Xf8Q;~@r;n|ak@?`R|uE{F!wTkAQmDu`T{kl&n-;WjhWyQe^Wpm|&NLAW=#X0fx zIijF?>2ydfu`t>_7aiO<$~6}b;3r&bNo!~LF1<<{eZl|?M6AfqPIKxljPVI=8BFDw<;udfc#tPKRznna29E283QJ} zABv&qhOuak8t9M4)5R^mo^$aYU1j~Kh6ZSkx@dy%A9LZ}-L{GPjnmpahLiXXL5?uK zT>AXm%lfxYTpq`nUhdKNmeX)M%A-F1ijwc^*^lVw z8}it-a!~d*##%(@qCVoKFhWimqP$XGx?*G3*qFw?aIIfn?oG)y2NUVf82*-oKCJ(M zm#p7Gjt+RLuj`^wuB}HJNANj*L_ymUAuG=Ld(WdTw%4bkBgaVlE`4uOrCZc5o-*_|SEko|Q9iR# zPWr5Edjsnww3WZJISAG}rky$aku=65eQh3(4da@3D%0SQ_2RZSOQ|1&or?y^%=wS-$R5j8~)G z*Q590Z1ES~z(+ps!WL}BHoT4Zu@P_JUA%+s*o?yLb+7?_VIJKLtm^)ZSTA40JQW{V zFRd@P<2J+t)n1UJd^@>Le%VlyukiJp>`~6P`ly54K4+%alx$ZX4(i8S_yHv*@bUR_Hm0Gi zZB5bBdU^ZSRd#KGwD-yL$Y`GQFnJT`>xOP}a5ZzN`p(n-%O*LmVl&>uZXCjo_y?~e zXT-&Ezq7#kYLfXW&Z0*;JDT$;e5p@I(NR17F%@&^ekCHsP*?Vgv@Hd4;`c1hl^5co zq5bbinU~PlKxJlSK3x8vCLw=>c)35)90Lu}0&US5y)Y2x@Hu7`(-yX17rw+H+he;B z`9fYFAjkDbcyCz_{VXWviy$BJq5$$^GF?x=c>ebhU-(J?f53M*j-&Vn=j|IPH-6UB z+=`zb;(K}MW@=mWrDp#vbq1TlcQ235JSc>c zD2sbh9d(eFeZMq#euo3>vnAVqw|S*4PP;I^tk8#bNZOta@e5x&i)8#_7@CN!?uhCC zEnTV2D{aeeV;FA_SLYve*sHd&tcASLnvZmm%O5n46R&SIkq?Ht_u{yBu@yC4({w~r z)Im`^Kias0yRA3E?I@yOPhl?FU;!54alBha3?Usk!Z??d&4)K~oh?50XnTXUE6UwD zhZ)a&o>7C})S`3ijoP^Wus@&A-})T4GTVvMdi-aw*zSXEL$1{8t8WW_8pi#bc@NZl z?JdXiSkh5`#XkIkALWrz4;#OcbG&&nqWEd_yQ40bD991M%T80tyykBGMFHzCDsS|i zi_Nt4AUa?Y4v%w9iHX{siNCwbDIMf1jNo$reRzhS z9F0r2ggk}YGdczl3C#oU_dc~is)-o+^Mg8FmhetmgC{VN`#YrcKfdR*Hc^?5y_aKiRM z7>A!Q5`EDF?a>*t9k&2aVhN_H<1vgxeEZWPS|8QKX1ZnlHEIl-jZ;n=w zZU>kztLI(vOe>=9D18_wu22*C^3q*Ld5u2G(NRU@pX@p!t!qqUN3*u%LtZg|`4Z#^ z{!!fd;aY6G@%&TmEK^?T8K3uTzw|kuAAP>`S)Wlpe>}rB9Gfeyl}+Z+o3gz!`dOgM zh&r}!2> zV=}g41qNU~KEVe3fUgj2+?}nW?YwikI?zu4hojMKv5YeO?OIEiDulc~m9Ol?bj-rN z>b@VxNGr!Mse6Fu7fpzR%TDj1+MOc9OcnnK0507Ip3OOzhK5ZZmwA9Bc z|C86Fl^SQE^YHldI@rb zasQNhPh%(cqIxIsgCY13hjA2j&=|{&hYuy>%L4ypY{E8tg79qT*EoS^bMk+z$IF;f zI^v3paJnEz`C9TFUG>G0-g06i_IJ)-Y4~n>xy!hg(7`FtmUHJx=NeA@l~2vD$#ixZRk3Bc?H|B2WJt7yf28)E!ctR-;Z8TwxEx2e{ACbeo3Am z`-uVT>GbcD!Te$@Kf|xu_!{T2lFznem#Jvcg&er_H)&V;E!w?woLX+IhIS|x)@_?P zi0wyQynYGe?Vox1Wj;QMWBK_Cnz2n!6ci^z=DVkbb?CA{K1EMFhLosGwmX#b>~E)B z|ET#ZGEaA{EPiv%VQc=9DZ6}x_i%R(+pr%0$*0Zel1{JooI-1LkHlGZK0edjK)H1m zU1;YHZ6x)1sPZ?TA6J%E9#XC)%T}DhJjZ-H*L=$O@#_$C62?fCkdG<3;D!5AS#o;5 z2)EzL*K!%Jk?kISi!S1>H4KfBuv4DC=30I97pIZJ=l;qMaEfk+P7xnseQkX{rtInSD*MLr_he+6fF)Rm zGH8dvXidKhDWPq3V{0q+AxF4h7?XRjFRG`Su{{nyuY)EC&rx(jM>ZOxjfu!LhMgvx zw~}oOl1y`dd4^oZzb?Ozn~5CZzQcBP@4$yRgoD_Rr`0!$56ncy0mcvI&Ia14%TIhR zO`cb=3D2PsKEnIhikHv>+cCm9qc9p{F}WtaROL%Z^RIv0)7pFv4`DI}kRel8Hx@sK zXHhE!U&LAYX?hm1i+^0xygkeKJl^*ekB9|qL1Q#S1GGd3Jczcq6J_wXbAG`&r2bbQ zpJ;bCKE^qDX_Rs%7GVVr;B$26XOYN)1~_TkD&>31*et<6!Z>$UZruNnc`TB4GS;ZO z6rwOCVB12hEx=C7WvEiiyctaq+a;$8f`5F~j!oJ9sJTadcHfRVXli>S)Wr0*^xB&* zq8-|x62E+66rWd4#{xWw7mN#s$^Q*@VLx``Qyj!Ge2IEh`G(vc@>uwOZjU;j^G4-M?bO*#b`W&X_$k@una3ukxcia z^k6nXMskGjJ&KheGa8~5I-(~AVH%#oYxo%7;tZ0PG*3ltdOOG0QmL=Ce9{vm@F*Tb zM6yeJe&zKHHizd>;*%{Y4wLmq{DDM1$H4|kH?_JNvqe`F%*rRDoHJS7GWIqfR94~d69=&=`Qz(rUM#^g zh*Oad$ou0k2L;B;TO-Ur>XF?!o2SUXv)Pz#2URy;bxpGA5~^1TRuM7P}_Cu%lW8=#Nv2a4RbP_!dC3UbEr(F8hC6v z8_wl3)_+moOX9wvHnVosS7aqe(8t|k;}!hg&iq$isASAMfI^+wny;+tW!$E#js4h} zJYNoA8}fA3|McoTg8TUKhxj6lBXrcfj<&k<3I5X5dVTA)*gKc?%a@Ql!gI-|TWR|? z`BQtn%F)qi^MFcxVUFC@hfkf8OX#@6O82kSv*KfREX8Ey(=;dr76i za9`|Z|BvJtJDtT;`g#(tVhcXUNhIjY?zjyVPz??7AiAJG!hf0sIYK^vQ8t#&5Pf+LG+HonpVt@Ij2^3C;wox}&HqZ6O&GM(>; z$7q$PkXRUEPgZZj+ zC)~}~rig+3?ukt1>&}fjc~SS9elwmmq|1%&e>5>}eBs(9y|JmNIgRr_*7s39zgR@w zDb)3%{lq?L+hB3mIU+J5Yi4%1oi20G|2@W5<-`26Mjo-zi5$7eL!bY@7b0G;NsdNj zD?mmZpCBgb;BMO@#N$I4ihnxGv0d~Vm9Y*fMvG@Qd2a?=(cdU~o`a6;+QsoVx=_!B zd!|*i`8Gf5Sk}CEpghD6&SS^D*0Y%_W;Z`#n|btCHVOUX!KAL`hKURQ(}z#Ih}V!s z4meO<99VxH@1TQYyW(m~YCD3D)|0n-Vix`$BChl)6aTp%_3)Cq-o$6Nck9YOl3EjMqJ8m}aN2y~H z=3psS;Vbke$5$iGi>A2-rk}!OSl{26LFSMv7Fu70=p~Jn@GReryw|Uzx@TY!20Xx? zxcnV|(e=i(G!$HTU(wI}aG-dZRKvW6e~l#bId;g){-tcoVt%nl`?vFjkMbH@^U*n0 z>EC|a%i6v$q5KnHPT>bLui*<Eb%mr(9GZvyFV)~xt@5pfy)i2TWmD;-2wk&pr zoPMo*oKpUb&dGOc>w(Z7&T2d4=)ds~F3r`y4!W4HvqzbKh`*4xaBfLkd z4_getFE;#!KkyT-^&Y5n+Nx97eIhbNzYpq4ZQRJVvLcJJDof zly9sqBS+z&^(6d$3?GW9?Hr_+$L>H)vD+IZYRN(M#b)LkY59L2liJ6SKRRh=#1wNj z>D9+=YGu;jNV9!yBmHUN>+) z4%w5-S?CU`zi@9qM+I|7JcZ}60UNOy+prV+a0Ey36aGN>kINL~{)qgC)OWK>Dkp|} z9_bp%Yhtrplxz0}@*66!QxV+A`zhYw%dd|!4qy+yz)_sUA9xpE<8%CqU3d*YVmN{v zQDm6fM!S4IKR%)3Ny?;g#RfV4*3VvD+;iyb8lt3eg^Wv-8~8zOdasVyE~!-zJAFI9q-j- zE88|1!=l)43?9ZF$JgbrE69Gr`nQP5673(a@UtyQqn<1nFP}V$`FI@5u?airU>}l= z<=a?<<#?8_9Tkf!+naCVb-arwdhBvxB5f|S$=Qv6wHHTE5L|N+x_~$Wf=0lIvk+%@rC8G+$bzG&db>-Tredp$G%5%_`rQMr-}%Pn?_5kUi7b=ljLybYT<_hBefhvb zJcjvLfH|0s8JLO5n2ITwhDVW;9N~WH)@J78Vj!mfXY@Y*`y3~b!5DbYL}7)>QLe)t zHoo9IyT(^0MOx%U5tK#r{~-k*&8W|3y7B#F?m6A%UKa*oIL2W%)}ap;^kv6Zd^d}G zEhxgK#Sz&NtS?+9wSDN}BiC=Z$ zb9v^=y~t>8`IkClx@2@hxX#bk-xxx-$p@QL-~;Ux9IC(K`===LB1E!V*Jw9=AL{Fa&N*myfeahi-8mPBbH(VcHm3?{vCeB zsQLUEOA(gnc}VCfhbJDd_0Odm>EjvUoT!V zkR@J}G1jqvB8l@Vp*fzLCy!t^;@-{f74@Sa|HXmAa=mS@V?JMc8f!YqD~04}`_`Iw zy(h=cE24oLSZ;Al$RE#W_gPHD<$Ze0wk5dHzTH5x|8+>1dxYnb;tZ8fancxCe3UVU zPj*MPF?!Gu1T~K0`u2dkZGwi7N62eWk$V|Cf>1{xWD-)xB2v`AYwr5&R>} zf&P?BBaN|%u+2QII++6ZXIRc^FH6LybZ-r97RzCS6kBC z5%T&(=g!A+$G(CaeQ*2se7MAX*ESOKJ9IRQ@qf0smhVQ{1%r8#R0Bv!m ztbA5Zj3f}39^nN9LJ$9P6+I{?z&y$vu!piQY8q=gI3~7B8Wn_l>IE0@)2`am*Q4}vPgS|B znz07es>>Vb%WtdNp4YMKZ0~Jb_e4spz-rv=67&(CzrE5sA?i*tHZ*n(rO)@ab#JGo z`}cj!ukK{C4zBfw8_(tNq{xJv$d6*U19#ybR6~6}az{Uu;Jg)vumQ>Qd}e5i?O*-pk_pA*M_4kD!m;^w40e-{wp(hL&VYvGADk z4zZIzj_=D+5ZUmU{QB~v&cUtI&CL+row?NZd^6=MJcCI-KWJYEEVrI8nH-(aHnc(a z#C#v8lkhikgn40ewpcpXoY49A&yq8u8L04OK)8JwZQhqe?%H_8!zww{Ex&e{!lhUWW)%z z7<@NkyxCCm^>%?BAI3mG6tAy4za!f zH@jqWVt5uPm$^?K!69c;PY^=IL3< zcq<-bm*{ta&$ZsSJ|8vK_hh%r-wFQgX!o749?xMlR$>+2W7jLaGyH1ZVZsYBo4&Mh z2|1AuB~c#L&=3!zD+VA6tML+!(%)9Zb_w}B+}ls1@0b3TyMoXC5tH9^$3~XWm2mxZ zpn>~V?TjBdh|h7Ycf~Ix5-OsL`+Q#|*ay~y+fMF*313N#8C8qK`tWuvB7fS5Ob-j#&6_DuuG65 zrvG2~>=fU{buw4!VxEG&O>R~b7tafR8s_OMd$}&_XC6!+o5*^|oT`esPfgTAKQu-Q zv_=PXK~E%089N!m*;3U7IhxA#(Z6l)8RZ(Vtz2nbZ-a4o276H5JZ%?#LF$Qe6&Z@s za|twHgKPZ;KD2kWCHQH$4|KJ6rkxM^Z^X{c+`DToH}sHymA`bCuU+31sb$=GP>zXm z9g3S>nB>BDgG2e~C|vJ9B@-CmFa2N1ucP>vIoMtNGyK0~5#`M+(SG{1xc!tVaRz6o3LCf>&Th%_c`w0{#`$6M%S z+si1%pVsiRgnT~ycj^j#I;gzT|EC5&4d2PlWas5LQrlSA)%~1qo(I7FXpN!bK7Bj$ zcq8K<#zXFjK?SN2V%PfIWEjU$o(DO!l&4&?``|IcaEL- z7JnmkU*j}h&Mg-2l}E5JM{K2VJ)??nEq7;8K7p0uq(0j}h+c?72DUGVYUqY(7$P4f zb$kX?Ky~!M@PIy49;9T4=>LxU&iXri?+nVYOUKE^#(DoEe|oFIKN_%0XUsMy*;rjZ zLB6S;0m2(I#4)0r_oH^U8)LU%8}6pNSFu;U1C>X$cLsU2_eQAv2A5!$ppV^bz85{T zpP{Ed7a((Ob>bbojI~Y7=gYcY)J9>H#9)j2p1@EyX&#fvq@#AMppC z)VGy5h}7f=_tjr;Zuk!R+*JG8-`w}mH`w(n9+t+|a4nZAuK)O{=sL{v;U(i57xZTv zJ%8-J#%sCh>{l_DR6p~Wcl5SiBr;-7U9q!{fA`n-RPJN=oai&*MyJ!Cs_Ci|GttUGUBZV>1&_+E$!*`OL_7k!W=SwRj7vees2SZWVkAFCmAz${Ww>p%t$8E_qE{cgg68a4pwJTg}k~ z&CnE$(Gc~~04oc*pPRtgfm8AI5sQ)6=k~bP{|#JEkem((xnp;J*U1g(4F`~}(UsD>F>h$*Ovq7&#GccV1cV=+46U9>_!Oh6sSPcBLB2HNV&N3AC>eerpZ za1Z%aZ6@m`XQDD5z!qcPH%Jl1p5kVQI`TNb6e7#e9X8-u`6RYWdKH9ghPsdVo(~C; z1eH-36>ta#@fB*JI=)3b{7$yK%3R2b2^fc!SdD%dh#?q`Qb>paIq zx<)o+$E^X!Wkhyl!KHRdL)ze{m)b45j@q1MY`nNGz(ZI1A+yz#X5H)AEXV1A{T^!&=l206la z=@qqI74^^@t0Z+V+JTTeN$mvI8OBeqLw6@+WKO!|H^-~IkVuhHNC z#zvOtcp1b|1{%MLwQ`T5uknVBOYw!~%9_eu>>mD$BBsCTxl!4IT|(SGLXI|snyl=g z9M{495Il|<9bMaE4c@@}IDiR!=S*^A2x7YgIl{f5C)xdREWuLb;|pyt8UryA1F!%? zF%RQ04nr^(^YI8C!$Qo#qnL!@=!QO+f~gpR2?+O#qUD(8^C(1NGDc!LW?&X(Viqxnzo9`#^$Pv>|A(%Wx0V+7-d$xz3?oyMHXa6PUJv#WWrDQ z9@mSBtH~H*CFHOs{e8F7&pJwD0qz~=8gaUN4f1JIpSRWbe2?;4@AJP}JJ;JDuH}Lp zom`uQck0y9?wZi9GW|?*kUnyRwqLPtqR%U58SlEX6E1z<&VA0wBlowneK17N$2w?9DNZOlc?Eqa*Oyc$pbMl0j}y*?M$)_dgp6P0|fQipE3tDuK_ z&jaM$C^;^H&o{B8a!$BEx1hJN4U_PzG5jCYk1{6`Pz&nPM?2S;cn!~2kt1z;S-Am? z%o$?41UbUoBTD?0Gr!u5Be*TfTxpEC53;k_3;1P{=M9YU4{+|LXqMertZW&aJ(f#W z=Z86Aa(S#JBJsAiIw*H3A61UUd~EXhCCta6`Rv$|eb7rKBgisUY;O|V@8MHq<4?I! z1Iuv;uh()3}+VG{0=w`-w+eWkkd>mIJ5m2s74`M_}c%3wXVOOPYv)9^oudyW00wDGaB z{aAB>A>=}Rq)bK@wg~^Bn8g0e-!B+jIf8$L=S_bb%@@qSuJ`|^``O_v{Z}Q=<^O{k z8(Bi!#*1yF81DfB|z)>L;-yo>MUq(x%lC6uA-y|(?5pMN0S>l(yn z+wcLR?|bdDeyw|7*OMuY1A<*{A%tkK4& zh}2FOOvYMV>lyTW=<7<)p}$1VOP@u*THBXy5Bi7~W&UlvcnVF$OlJ(icob)o1{i?Z zI7YTVkctcg%t;4f7>3|$^X8jff}e)*<@o{H=x5&1+I&wNKXx+jz!?l7-zc2Wey!T> z6V-7~7md0&9(`9KOfCtvVYFGImUnJEoe4>i?H$ zEnbFT12&>QA9@7k=w=W<7+lpno*rYn1UbTYw`qFPH}=wZn`Y)k%7w<>WjJA6pOoA^ zFkJ0F>HlxY5%PL{`EwK-Cv}Z~Un^~65zb>fTA&9#^}`UnP8Ugs8jo!M4Y6IK^-(+{ zotWEYSFRjvENO2(F28@Kyl=j1HF}wg#dr!0dN>AO_vg#CVk^bPdzSH{TuT_oP9w); zzR=CsR?WT7`o1$@s~h>BnAl2^S_Q!_gZ1%HU)LB2@A}zJ2Qhu$Pi$lfb_scXg*?3u zFJl}TcH&dKWPX^zJgqodB=ntx{atIgR%+-v#hmOm{(Rw2Kw=|=bAucqugCUXcCi%W zf*e5~2Rj%`(OAC+;%>fD4b6}WCGqn_^AOy(fS=;kysrOHsX%O{xTueiKW4DOJcM_W Nk48-2OCDQE{tx;1YefJ6 literal 172 VcmY#jU|{$U1VD;G1w;&D006`=1VI1* diff --git a/build/OTRestFramework.build/OTRestFramework.pbxindex/decls.pbxbtree b/build/OTRestFramework.build/OTRestFramework.pbxindex/decls.pbxbtree index 5fb938ed54d3ad5bfc9704349b8adb067c4dd1fa..4352579a52d02b5953af977a88de23970481c769 100644 GIT binary patch literal 80032 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 literal 172 VcmY#jU|{$U1VD;G1w;&D006`=1VI1* diff --git a/build/OTRestFramework.build/OTRestFramework.pbxindex/files.pbxbtree b/build/OTRestFramework.build/OTRestFramework.pbxindex/files.pbxbtree index bdfbdb91ecf684d1f1caa96354d5dce79ebde64f..afb30091eb4b145acc858d010e8597c85cafe0ac 100644 GIT binary patch literal 1616 zcma)+S!{?|6vuydL+!PTttv4=8Cxx}m8wWAjeQwG24fpW6}9h6OKaCyQUnh)gn6i# z32B0dF(Q@;5nCieVt+A6jNhmILOjTKl3)Jca_+h3o_p?%1^(Acs5d0gYf@E0tL{Va z?{+pEmcQh7S(#WG?)W~#=eFhGnVR633>oZu72^fgOv;<*e`R38 z5P0I4y+1=w$H&fq-D;0{@JemB6jJoN*cWp2yATKK&8c~3c%W93Hd0{B#qx)9E;qMe z?ptb1J#%;5!S;}6oTyeo$Dp=B(&y^H#=7QUoHw=MsQT?%!*#Z<3~`RRUjyp6L4T|3 zYQa0l1vLocM)A*e&LIB+=_hl(=5 ze{=l4Poi2Fce|T5^GBGJ04IKOU)n+`bx%8Z-N_s}Kz?G;zO?BI!@9WsZm^&`JW@9} zcVMPOtht!h=lXu_o7(e>f1%HLz3kK8@KA;)L6<((LOR+D-^MfCXAAQUYZhbw++6bg z+NC5zC+V>k#>xsgBv+;HdiY1exP=X1Q$sl42=+IIAx)rLOV`yD-nM|WcxVw z<6amHzl^YdQ|;H0FnyG<$9UdGTdQ&KbiDnp2Ipk;1c;vqjV8fIDVPkkr+7C^g)6_p z5;cq)#rMx?Md$9~bkF-Ncr1Cpc`wND*>F+{C4cUhxKVu5(u&S;Ub^Gv+kaAjf#+26 z7dl4P2M}jal_up(Eoe=^THmgq)&P-jF54=;Ro5a%RpaQScjv@ d-s=O*KgBingVX)p3*VorH3yo51b1~*`vhh|1^55} literal 124 UcmWe(U|{$U1dKph1&HYh0P>XtHUIzs diff --git a/build/OTRestFramework.build/OTRestFramework.pbxindex/imports.pbxbtree b/build/OTRestFramework.build/OTRestFramework.pbxindex/imports.pbxbtree index 73067540b3f0a8504ab582d029f53bb4962f7bcc..475385283ed131a78468a6f05d9d07e64f08a04d 100644 GIT binary patch literal 4244 zcmd6rdvwob9LL{dmiy*5votfCSYjA9W@pX)l3T^hEJkdIm1}Fw&ulYmm|>eGl4%)Ep@D$M1%Pgrr zzw;UAhr9u+>E8ntu{or?)U2%JQbkIwE?uuJ#k)vBRi&^R(oYZ$^YAIRmQ>dX$#Xn? zw#w2LC{JGjwyGif@(xq>wfG|EGhYY`XpSG}U8UWlq)g-seHq8xWrj;1u{cKnVfy8$z@ot6U=P<`zIvI#F z%ozy_;2?hAMt2%|ZHz%0OSSuZf#0(jbBBDD^^lI>!%>K3ZO4$`KpW=#7I_BF!4L2w ze9zd6@H5XJc`{Gkdv<3qUkfFbN-d-{ z#J(;0@(!WC!lmEvV{IDogjzF+7r(E;bqFzeMJ^__P!*JJZW z8);KyY}?R{3X?7~hspnE4WuMLX(BaIg)x7je+j)vbS|Qk%sVT-rPcW=a%F1W z(MCzw^LC!K>?htn)YJl4gPl{bvoq^WC*I`a0Po#n+0*3znv2w$b()$gsO^ec$&i}Rw~<(d;>T&`T>@tz2adotZ1e)QtUYgAiPOrK zQa~`Vp}!~b4kNxPq0$v%)`-48v6bCh`Wrc#eeKGaZLpki;pj$(VGI4e_+{d2@)nMr zxMostbEyKl@4;K>ufn&@LHNmhgUF@X*IpsyjqwrK*$;0&#kt1Z7a)qfhIN!MX}4Pj ze`-@h+p*`%voj1B#Ce3gMZPa$D-Bx(j0wSC5Bi^(EY(E1!~MP<;=NT5W)D3XQ~W;q zh4$*lJhu^K|G!dbTqzHPwH33wV?*1jrFzu8+wHOsCyI;HI+p)(xY?}FJ= zxA8x2Kv7o73*F`ps>&EQ*v~ys9ck*O3DU~T!O?}e@uJVvk`J;W_(M|&fEHkC%;e47 zLB_5peZ}bp-lyM(=ibEPCY037zBme(p6C9ZgRf8%+`$9lsQ-EcOr06KJNmJQcpnmh-auj($-T*)vNW1?59J)71{(~+ zPFMCXccQr;&mu=MZvkUpWb8|f6E*)hde&Vm?t;3kF#CgL;>gF-l6pc=4&5A=wYg@rSNMIk_0rP#=hP7>i!8XoD&d6*ifI-Rk z;$Yb=Np}PK-BS2|1oOR^%h~Fc!S^k+W6f1F**g$2>z-Xo)m~4I+<^(yBtsM)N1EktaeH$JwnjiKjDfKb4==+6u=Z{O&xw!(W*=L2 zOVhQXpA0FG2I-IinJ^oStt@0V%m)((^Y`a*E)3&K0I@b>16}DyHllyLKi}%k5C6B8 zBXM&?$K1iD793eu4!-9>J}iR8uoRZTgU!U&)NaBAsUGKYFlUq-dRx13-@_?#U#Ay! z3ZL|OaCGs%UGLi6mxbNA#2j*SxtrPJLtzkmetH-7AT<`n99g}2=FYFm+&Rr=aKb|!A-$#2E}7ab1=#S9 zOLMHB{nBlj6kREWs-+kQf5%=7dp+zW)ks6N(sF~8(JHONdx3Xv81Qztk9uA%r9?=B zU^}V%EmA(FD!Zf^>H@qfa2McisPULB0_Q_B$oV0f^Q?25IAm?wd(^3bR8k?u;-?os z!{{4#1wY2QBp)0v*6SqrV({Uf67g@IJaF#or6qWq+!59{ojlfCWUyH}z_)ptY?BJx zrRxr9r}GnU`fi;@IM%Bd&N!R`I9G7O`eA>o+%v^_Wbm`c2XL=s8rViM*6G(~JOM6e z;^(Y6{t+HlHXpZ6KU!g!_nIUPtm-p^t-UDC$-E*h{>jS$1 zHW6$w*kdxm(Rb^d*f|$3j!I`^QZ{`(k=C#MozsZl|AgHW0^|N0Q2z`hKf?O8e`|C4 UuZTm)^xXX)aak69J(Az!9l@cIu>b%7 literal 84 Vcmd;LU|{$U1VD;G1w>E*002gj1S
ApaqLJxy1;Nm$ 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 literal 556 ZcmZo*U|{$U1VD;G1w@R3(Gb890s!`z1fc)` diff --git a/build/OTRestFramework.build/OTRestFramework.pbxindex/strings.pbxstrings/control b/build/OTRestFramework.build/OTRestFramework.pbxindex/strings.pbxstrings/control index cf750af5e628c8a14a9b395275099aaded65ce19..91f4720d7628d32e6d2509a1b32f5c9afd8314f9 100644 GIT binary patch literal 131092 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
#jE$12UGaJ1!C)!soub9`xudL`KjT^hJUZV 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