From 46ba1ddcbdc79a76cee49045f3dac1df5d57ed6a Mon Sep 17 00:00:00 2001 From: Curtis Hard Date: Wed, 20 Apr 2022 18:06:53 +0100 Subject: [PATCH] Converted everything to ARC.. ARC ALL THINGS! --- .../IJSVG/IJSVG.xcodeproj/project.pbxproj | 4 +- .../Source/Additions/IJSVGStringAdditions.m | 2 +- .../Source/Additions/NSImage+IJSVGAdditions.m | 6 +- .../IJSVG/IJSVG/Source/Colors/IJSVGColor.m | 4 +- .../IJSVG/Source/Colors/IJSVGColorList.m | 10 +- .../IJSVG/Source/Colors/IJSVGColorType.m | 8 +- .../IJSVG/Source/Commands/IJSVGCommand.m | 29 ++- Framework/IJSVG/IJSVG/Source/Core/IJSVG.h | 8 +- Framework/IJSVG/IJSVG/Source/Core/IJSVG.m | 90 ++++---- .../IJSVG/Source/Core/IJSVGFontConverter.m | 28 +-- .../IJSVG/IJSVG/Source/Core/IJSVGImageRep.m | 13 +- Framework/IJSVG/IJSVG/Source/Core/IJSVGView.m | 10 +- .../IJSVG/Source/Exporter/IJSVGExporter.m | 208 +++++++++--------- .../Exporter/IJSVGExporterPathInstruction.m | 61 +++-- .../IJSVG/Source/Layers/IJSVGFilterLayer.m | 4 +- .../IJSVG/Source/Layers/IJSVGGradientLayer.m | 11 +- .../IJSVG/Source/Layers/IJSVGGroupLayer.m | 6 - .../IJSVG/Source/Layers/IJSVGImageLayer.m | 11 +- .../IJSVG/IJSVG/Source/Layers/IJSVGLayer.m | 20 +- .../IJSVG/Source/Layers/IJSVGPatternLayer.m | 11 +- .../IJSVG/Source/Layers/IJSVGRootLayer.m | 4 +- .../IJSVG/Source/Layers/IJSVGShapeLayer.m | 17 +- .../IJSVG/Source/Layers/IJSVGTransformLayer.m | 10 - .../IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h | 2 +- .../IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.m | 5 +- Framework/IJSVG/IJSVG/Source/Nodes/IJSVGDef.m | 6 - .../IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m | 3 - .../IJSVG/Source/Nodes/IJSVGFilterEffect.m | 11 +- .../IJSVG/Source/Nodes/IJSVGForeignObject.m | 6 - .../IJSVG/IJSVG/Source/Nodes/IJSVGGradient.m | 16 +- .../IJSVG/IJSVG/Source/Nodes/IJSVGGroup.h | 2 +- .../IJSVG/IJSVG/Source/Nodes/IJSVGGroup.m | 9 +- .../IJSVG/IJSVG/Source/Nodes/IJSVGImage.m | 9 +- .../IJSVG/Source/Nodes/IJSVGLinearGradient.m | 2 +- .../IJSVG/IJSVG/Source/Nodes/IJSVGNode.m | 34 +-- .../IJSVG/IJSVG/Source/Nodes/IJSVGPath.m | 1 - .../IJSVG/Source/Nodes/IJSVGRadialGradient.h | 12 +- .../IJSVG/Source/Nodes/IJSVGRadialGradient.m | 17 +- .../IJSVG/IJSVG/Source/Nodes/IJSVGRootNode.m | 6 - .../IJSVG/IJSVG/Source/Nodes/IJSVGText.m | 6 - .../IJSVG/IJSVG/Source/Parsing/IJSVGParser.m | 106 ++++----- .../IJSVG/Source/Rendering/IJSVGLayerTree.m | 29 +-- .../Source/Rendering/IJSVGRenderingStyle.m | 11 +- .../IJSVG/Source/Stylesheets/IJSVGStyle.m | 12 +- .../Source/Stylesheets/IJSVGStyleSheet.m | 28 +-- .../Source/Stylesheets/IJSVGStyleSheetRule.m | 7 - .../Stylesheets/IJSVGStyleSheetSelector.m | 14 +- .../Stylesheets/IJSVGStyleSheetSelectorRaw.h | 2 +- .../Stylesheets/IJSVGStyleSheetSelectorRaw.m | 9 +- .../IJSVG/Source/Utils/IJSVGThreadManager.m | 10 +- .../IJSVG/IJSVG/Source/Utils/IJSVGTransform.m | 23 +- .../IJSVG/Source/Utils/IJSVGUnitLength.m | 6 +- .../IJSVG/IJSVG/Source/Utils/IJSVGUnitPoint.m | 13 +- .../IJSVG/IJSVG/Source/Utils/IJSVGUnitRect.m | 13 +- .../IJSVG/IJSVG/Source/Utils/IJSVGUnitSize.m | 13 +- .../IJSVG/IJSVG/Source/Utils/IJSVGUtils.m | 4 +- .../IJSVGExample.xcodeproj/project.pbxproj | 10 +- .../UserInterfaceState.xcuserstate | Bin 200093 -> 187701 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 4 +- IJSVGExample/IJSVGExample/SVGExampleView1.m | 2 +- IJSVGExample/IJSVGExample/SVGExampleView2.m | 2 +- IJSVGExample/IJSVGExample/SVGExampleView3.m | 2 +- IJSVGExample/IJSVGExample/SVGExampleView4.m | 2 +- IJSVGExample/IJSVGExample/SVGExampleView5.m | 2 +- IJSVGExample/IJSVGExample/SVGExampleView6.m | 2 +- IJSVGExample/IJSVGExample/SVGView.m | 12 +- 66 files changed, 386 insertions(+), 674 deletions(-) diff --git a/Framework/IJSVG/IJSVG.xcodeproj/project.pbxproj b/Framework/IJSVG/IJSVG.xcodeproj/project.pbxproj index cc04b50..37b51cf 100644 --- a/Framework/IJSVG/IJSVG.xcodeproj/project.pbxproj +++ b/Framework/IJSVG/IJSVG.xcodeproj/project.pbxproj @@ -955,7 +955,7 @@ 594CF478238FF38E009B251B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_ENABLE_OBJC_ARC = NO; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CODE_SIGN_STYLE = Automatic; @@ -983,7 +983,7 @@ 594CF479238FF38E009B251B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_ENABLE_OBJC_ARC = NO; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CODE_SIGN_STYLE = Automatic; diff --git a/Framework/IJSVG/IJSVG/Source/Additions/IJSVGStringAdditions.m b/Framework/IJSVG/IJSVG/Source/Additions/IJSVGStringAdditions.m index 43496f4..d0d0d59 100644 --- a/Framework/IJSVG/IJSVG/Source/Additions/IJSVGStringAdditions.m +++ b/Framework/IJSVG/IJSVG/Source/Additions/IJSVGStringAdditions.m @@ -18,7 +18,7 @@ return @[]; } NSMutableArray* strings = nil; - strings = [[[NSMutableArray alloc] init] autorelease]; + strings = [[NSMutableArray alloc] init]; char* copy = strdup(chars); char* spt = NULL; char* ptr = strtok_r(copy, aChar, &spt); diff --git a/Framework/IJSVG/IJSVG/Source/Additions/NSImage+IJSVGAdditions.m b/Framework/IJSVG/IJSVG/Source/Additions/NSImage+IJSVGAdditions.m index ff9bf8c..2e1ea0a 100644 --- a/Framework/IJSVG/IJSVG/Source/Additions/NSImage+IJSVGAdditions.m +++ b/Framework/IJSVG/IJSVG/Source/Additions/NSImage+IJSVGAdditions.m @@ -36,14 +36,14 @@ IJSVG* IJSVGGetFromNSImage(NSImage* image) != nil) { // work out if we can get the data - NSData* data = [[[NSData alloc] initWithContentsOfFile:str] autorelease]; + NSData* data = [[NSData alloc] initWithContentsOfFile:str]; if (data == nil) { return nil; } // grab the image rep - IJSVGImageRep* rep = [[[IJSVGImageRep alloc] initWithData:data] autorelease]; - NSImage* image = [[[NSImage alloc] init] autorelease]; + IJSVGImageRep* rep = [[IJSVGImageRep alloc] initWithData:data]; + NSImage* image = [[NSImage alloc] init]; [image addRepresentation:rep]; return image; } diff --git a/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColor.m b/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColor.m index 3767bfa..a587c12 100644 --- a/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColor.m +++ b/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColor.m @@ -61,7 +61,7 @@ CGFloat* IJSVGColorCSSHSLToHSB(CGFloat hue, CGFloat saturation, CGFloat lightnes { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - _colorTree = [@{ + _colorTree = @{ @"aliceblue" : @(0xf0f8ff), @"antiquewhite" : @(0xfaebd7), @"aqua" : @(0x00ffff), @@ -207,7 +207,7 @@ CGFloat* IJSVGColorCSSHSLToHSB(CGFloat hue, CGFloat saturation, CGFloat lightnes @"whitesmoke" : @(0xf5f5f5), @"yellow" : @(0xffff00), @"yellowgreen" : @(0x9acd32) - } retain]; + }; }); } diff --git a/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColorList.m b/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColorList.m index 02537a4..443a4db 100644 --- a/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColorList.m +++ b/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColorList.m @@ -10,13 +10,6 @@ @implementation IJSVGColorList -- (void)dealloc -{ - (void)([_replacementColorTree release]), _replacementColorTree = nil; - (void)([_colors release]), _colors = nil; - [super dealloc]; -} - - (instancetype)init { if ((self = [super init]) != nil) { @@ -29,7 +22,7 @@ - (id)copyWithZone:(NSZone*)zone { IJSVGColorList* sheet = [[self.class alloc] init]; - [sheet setReplacementColors:[_replacementColorTree.copy autorelease] + [sheet setReplacementColors:_replacementColorTree.copy clearExistingColors:YES]; return sheet; } @@ -52,7 +45,6 @@ - (void)_invalidateColorTree { - (void)([_replacementColorTree release]), _replacementColorTree = nil; _replacementColorTree = [[NSMutableDictionary alloc] init]; } diff --git a/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColorType.m b/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColorType.m index ef75289..689eb99 100644 --- a/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColorType.m +++ b/Framework/IJSVG/IJSVG/Source/Colors/IJSVGColorType.m @@ -10,16 +10,10 @@ @implementation IJSVGColorType -- (void)dealloc -{ - (void)[_color release], _color = nil; - [super dealloc]; -} - + (IJSVGColorType*)typeWithColor:(NSColor*)color flags:(IJSVGColorTypeFlags)mask { - IJSVGColorType* type = [[[self alloc] init] autorelease]; + IJSVGColorType* type = [[self alloc] init]; type.color = color; type.flags = mask; return type; diff --git a/Framework/IJSVG/IJSVG/Source/Commands/IJSVGCommand.m b/Framework/IJSVG/IJSVG/Source/Commands/IJSVGCommand.m index 9352a48..d227523 100644 --- a/Framework/IJSVG/IJSVG/Source/Commands/IJSVGCommand.m +++ b/Framework/IJSVG/IJSVG/Source/Commands/IJSVGCommand.m @@ -122,7 +122,7 @@ + (NSArray*)commandsForDataCharacters:(const char*)buffer dataStream:(IJSVGPathDataStream*)dataStream { - NSMutableArray* commands = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* commands = [[NSMutableArray alloc] init]; NSUInteger len = strlen(buffer); NSUInteger lastIndex = len - 1; @@ -152,8 +152,8 @@ // previous command is actual subcommand Class commandClass = [IJSVGCommand commandClassForCommandChar:commandString[0]]; IJSVGCommand* command = nil; - command = (IJSVGCommand*)[[[commandClass alloc] initWithCommandStringBuffer:commandString - dataStream:dataStream] autorelease]; + command = (IJSVGCommand*)[[commandClass alloc] initWithCommandStringBuffer:commandString + dataStream:dataStream]; [commands addObject:command]; @@ -170,7 +170,7 @@ bounds:(CGRect)bounds { NSMutableArray* newCommands = nil; - newCommands = [[[NSMutableArray alloc] initWithCapacity:commands.count] autorelease]; + newCommands = [[NSMutableArray alloc] initWithCapacity:commands.count]; for(IJSVGCommand* command in commands) { IJSVGCommand* nCommand = [command commandByConvertingToUnits:unitType boundingBox:bounds]; @@ -181,11 +181,9 @@ - (void)dealloc { - (void)([_subCommands release]), _subCommands = nil; if (_parameters) { (void)(free(_parameters)), _parameters = nil; } - [super dealloc]; } - (id)initWithCommandStringBuffer:(const char*)str @@ -207,10 +205,10 @@ IJSVGCommand* command = [self subcommandWithParameters:subParams paramCount:paramCount previousCommand:nil]; - _subCommands = @[ command ].retain; + _subCommands = @[ command ]; } else { NSMutableArray* subCommandArray = nil; - subCommandArray = [[NSMutableArray alloc] initWithCapacity:sets].autorelease; + subCommandArray = [[NSMutableArray alloc] initWithCapacity:sets]; // interate over the sets IJSVGCommand* lastCommand = nil; @@ -239,8 +237,7 @@ - (void)setSubCommands:(NSArray*)subCommands { - (void)[_subCommands release], _subCommands = nil; - _subCommands = subCommands.retain; + _subCommands = subCommands; } - (id)copyWithZone:(NSZone *)zone @@ -257,9 +254,9 @@ IJSVGCommand* lastCommand = nil; NSMutableArray* subcommands = nil; - subcommands = [[[NSMutableArray alloc] initWithCapacity:self.subCommands.count] autorelease]; + subcommands = [[NSMutableArray alloc] initWithCapacity:self.subCommands.count]; for(IJSVGCommand* subcommand in self.subCommands) { - IJSVGCommand* subCopy = [[subcommand copy] autorelease]; + IJSVGCommand* subCopy = [subcommand copy]; subCopy.previousCommand = lastCommand; subCopy.isSubCommand = lastCommand != nil; [subcommands addObject:subCopy]; @@ -284,7 +281,7 @@ previousCommand:(IJSVGCommand*)aPreviousCommand { // create a subcommand per set - IJSVGCommand* c = [[[self.class alloc] init] autorelease]; + IJSVGCommand* c = [[self.class alloc] init]; c.parameterCount = paramCount; c.parameters = subParams; c.type = self.type; @@ -330,9 +327,9 @@ - (NSString *)description { - NSMutableString* str = [[[NSMutableString alloc] init] autorelease]; + NSMutableString* str = [[NSMutableString alloc] init]; [str appendFormat:@"%c ",_command]; - NSMutableArray* args = [[[NSMutableArray alloc] initWithCapacity:_parameterCount] autorelease]; + NSMutableArray* args = [[NSMutableArray alloc] initWithCapacity:_parameterCount]; for(int i = 0; i < _parameterCount; i++) { [args addObject:[NSString stringWithFormat:@"%f",_parameters[i]]]; } @@ -346,7 +343,7 @@ IJSVGCommand* copy = self.copy; [copy convertToUnits:unitType boundingBox:boundingBox]; - return [copy autorelease]; + return copy; } @end diff --git a/Framework/IJSVG/IJSVG/Source/Core/IJSVG.h b/Framework/IJSVG/IJSVG/Source/Core/IJSVG.h index 160a512..4d15228 100644 --- a/Framework/IJSVG/IJSVG/Source/Core/IJSVG.h +++ b/Framework/IJSVG/IJSVG/Source/Core/IJSVG.h @@ -64,12 +64,12 @@ withSVGString:(NSString*)subSVGString; // fillColor, strokeColor, pattern and gradient fill @property (nonatomic, assign) IJSVGRenderQuality renderQuality; @property (nonatomic, assign) BOOL clipToViewport; -@property (nonatomic, retain) IJSVGRenderingStyle* renderingStyle; -@property (nonatomic, readonly) IJSVGUnitSize * intrinsicSize; +@property (nonatomic, strong) IJSVGRenderingStyle* renderingStyle; +@property (weak, nonatomic, readonly) IJSVGUnitSize * intrinsicSize; @property (nonatomic, copy) NSString* title; @property (nonatomic, copy) NSString* desc; -@property (nonatomic, retain) IJSVGLayerTree* layerTree; -@property (nonatomic, retain) IJSVGRootLayer* rootLayer; +@property (nonatomic, strong) IJSVGLayerTree* layerTree; +@property (nonatomic, strong) IJSVGRootLayer* rootLayer; - (void)prepForDrawingInView:(NSView*)view; - (BOOL)isFont; diff --git a/Framework/IJSVG/IJSVG/Source/Core/IJSVG.m b/Framework/IJSVG/IJSVG/Source/Core/IJSVG.m index 605b861..9ec6ea0 100644 --- a/Framework/IJSVG/IJSVG/Source/Core/IJSVG.m +++ b/Framework/IJSVG/IJSVG/Source/Core/IJSVG.m @@ -20,18 +20,17 @@ { // this can all be called on the background thread to be released BOOL hasTransaction = IJSVGBeginTransaction(); - (void)([_renderingBackingScaleHelper release]), _renderingBackingScaleHelper = nil; - (void)([_replacementColors release]), _replacementColors = nil; - (void)([_renderingStyle release]), _renderingStyle = nil; - (void)([_rootNode release]), _rootNode = nil; - (void)([_intrinsicSize release]), _intrinsicSize = nil; - (void)([_title release]), _title = nil; - (void)([_desc release]), _desc = nil; - (void)([_rootLayer release]), _rootLayer = nil; + (void)(_renderingBackingScaleHelper), _renderingBackingScaleHelper = nil; + (void)(_replacementColors), _replacementColors = nil; + (void)(_renderingStyle), _renderingStyle = nil; + (void)(_rootNode), _rootNode = nil; + (void)(_intrinsicSize), _intrinsicSize = nil; + (void)(_title), _title = nil; + (void)(_desc), _desc = nil; + (void)(_rootLayer), _rootLayer = nil; // kill any memory that has been around - (void)([_layerTree release]), _layerTree = nil; - [super dealloc]; + (void)(_layerTree), _layerTree = nil; if (hasTransaction == YES) { IJSVGEndTransaction(); } @@ -71,14 +70,14 @@ } if ((str = [bundle pathForResource:[string stringByDeletingPathExtension] ofType:ext]) != nil) { - return [[[self alloc] initWithFile:str + return [[self alloc] initWithFile:str error:error - delegate:delegate] autorelease]; + delegate:delegate]; } // check the asset catalogues - return [[[self alloc] initWithDataAssetNamed:string - error:error] autorelease]; + return [[self alloc] initWithDataAssetNamed:string + error:error]; } - (id)initWithDataAssetNamed:(NSDataAssetName)name @@ -93,11 +92,11 @@ bundle:(NSBundle*)bundle error:(NSError**)error { - NSDataAsset* dataAsset = [[[NSDataAsset alloc] initWithName:name - bundle:bundle] autorelease]; + NSDataAsset* dataAsset = [[NSDataAsset alloc] initWithName:name + bundle:bundle]; if(dataAsset != nil) { - return [[self initWithSVGData:dataAsset.data - error:error] autorelease]; + return [self initWithSVGData:dataAsset.data + error:error]; } return nil; } @@ -108,13 +107,13 @@ __block IJSVGImageLayer* imageLayer = nil; // create the layers we require - IJSVGImage* imageNode = [[[IJSVGImage alloc] init] autorelease]; + IJSVGImage* imageNode = [[IJSVGImage alloc] init]; imageNode.image = image; BOOL hasTransaction = IJSVGBeginTransaction(); - layer = [[[IJSVGGroupLayer alloc] init] autorelease]; + layer = [[IJSVGGroupLayer alloc] init]; imageLayer = - [[[IJSVGImageLayer alloc] initWithImage:imageNode] autorelease]; + [[IJSVGImageLayer alloc] initWithImage:imageNode]; [layer addSublayer:imageLayer]; if (hasTransaction == YES) { IJSVGEndTransaction(); @@ -211,7 +210,7 @@ IJSVGParser* parser = [IJSVGParser groupForFileURL:aURL error:&anError delegate:self]; - _rootNode = parser.rootNode.retain; + _rootNode = parser.rootNode; [self _setupBasicInfoFromGroup]; [self _setupBasicsFromAnyInitializer]; @@ -220,7 +219,7 @@ if (error != NULL) { *error = anError; } - (void)([self release]), self = nil; + (void)(self), self = nil; return nil; } } @@ -238,7 +237,7 @@ { NSString* svgString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - return [self initWithSVGString:svgString.autorelease + return [self initWithSVGString:svgString error:error]; } @@ -269,10 +268,10 @@ [self _checkDelegate]; // setup the parser - IJSVGParser* parser = [[[IJSVGParser alloc] initWithSVGString:string + IJSVGParser* parser = [[IJSVGParser alloc] initWithSVGString:string error:&anError - delegate:self] autorelease]; - _rootNode = parser.rootNode.retain; + delegate:self]; + _rootNode = parser.rootNode; [self _setupBasicInfoFromGroup]; [self _setupBasicsFromAnyInitializer]; @@ -282,7 +281,7 @@ if (error != NULL) { *error = anError; } - (void)([self release]), self = nil; + (void)(self), self = nil; return nil; } } @@ -301,12 +300,12 @@ - (void)_setupBasicInfoFromGroup { _viewBox = [_rootNode.viewBox computeValue:CGSizeZero]; - _intrinsicSize = _rootNode.intrinsicSize.retain; + _intrinsicSize = _rootNode.intrinsicSize; } - (void)_setupBasicsFromAnyInitializer { - self.renderingStyle = [[[IJSVGRenderingStyle alloc] init] autorelease]; + self.renderingStyle = [[IJSVGRenderingStyle alloc] init]; self.clipToViewport = YES; self.renderQuality = kIJSVGRenderQualityFullResolution; @@ -358,34 +357,34 @@ - (BOOL)isFont { - return [_rootNode isFont]; + return NO;//[_rootNode isFont]; } - (NSArray*)glyphs { - return [_rootNode glyphs]; + return @[];//[_rootNode glyphs]; } - (NSArray*)subSVGs:(BOOL)recursive { - return [_rootNode subSVGs:recursive]; + return @[];//[_rootNode subSVGs:recursive]; } - (NSString*)SVGStringWithOptions:(IJSVGExporterOptions)options { - IJSVGExporter* exporter = [[[IJSVGExporter alloc] initWithSVG:self + IJSVGExporter* exporter = [[IJSVGExporter alloc] initWithSVG:self size:self.viewBox.size - options:options] autorelease]; + options:options]; return [exporter SVGString]; } - (NSString*)SVGStringWithOptions:(IJSVGExporterOptions)options floatingPointOptions:(IJSVGFloatingPointOptions)floatingPointOptions { - IJSVGExporter* exporter = [[[IJSVGExporter alloc] initWithSVG:self + IJSVGExporter* exporter = [[IJSVGExporter alloc] initWithSVG:self size:self.viewBox.size options:options - floatingPointOptions:floatingPointOptions] autorelease]; + floatingPointOptions:floatingPointOptions]; return [exporter SVGString]; } @@ -483,7 +482,7 @@ NSImage* image = [[NSImage alloc] initWithCGImage:ref size:aSize]; CGImageRelease(ref); - return image.autorelease; + return image; } - (NSImage*)imageByMaintainingAspectRatioWithSize:(NSSize)aSize @@ -515,7 +514,7 @@ error:(NSError**)error { // create the data for the PDF - NSMutableData* data = [[[NSMutableData alloc] init] autorelease]; + NSMutableData* data = [[NSMutableData alloc] init]; // assign the data to the consumer CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)data); @@ -592,7 +591,7 @@ [self rootLayer]; // set the scale - __block NSView* weakView = view; + __weak NSView* weakView = view; self.renderingBackingScaleHelper = ^CGFloat { return weakView.window.screen.backingScaleFactor; }; @@ -754,7 +753,7 @@ [self.rootLayer renderInContext:ref viewPort:rect backingScale:backingScale - quality:_renderQuality]; + quality:_renderQuality]; CGContextRestoreGState(ref); if(transaction) { IJSVGEndTransaction(); @@ -773,7 +772,7 @@ - (IJSVGRootLayer*)rootLayer { if(_rootLayer == nil) { - _rootLayer = [self.layerTree rootLayerForRootNode:_rootNode].retain; + _rootLayer = [self.layerTree rootLayerForRootNode:_rootNode]; } return _rootLayer; } @@ -790,8 +789,7 @@ - (void)setRenderingStyle:(IJSVGRenderingStyle*)style { - (void)([_renderingStyle release]), _renderingStyle = nil; - _renderingStyle = style.retain; + _renderingStyle = style; } - (void)observeValueForKeyPath:(NSString*)keyPath @@ -812,12 +810,12 @@ - (void)invalidateLayerTree { - (void)([_layerTree release]), _layerTree = nil; + (void)(_layerTree), _layerTree = nil; } - (IJSVGColorList*)colorList { - IJSVGColorList* sheet = [[[IJSVGColorList alloc] init] autorelease]; + IJSVGColorList* sheet = [[IJSVGColorList alloc] init]; void (^block)(CALayer* layer, BOOL* stop) = ^void(CALayer* layer, BOOL* stop) { diff --git a/Framework/IJSVG/IJSVG/Source/Core/IJSVGFontConverter.m b/Framework/IJSVG/IJSVG/Source/Core/IJSVGFontConverter.m index 53abbfa..a37a068 100644 --- a/Framework/IJSVG/IJSVG/Source/Core/IJSVGFontConverter.m +++ b/Framework/IJSVG/IJSVG/Source/Core/IJSVGFontConverter.m @@ -11,14 +11,6 @@ @implementation IJSVGFontConverter -- (void)dealloc -{ - (void)([_transformedPaths release]), _transformedPaths = nil; - (void)([_url release]), _url = nil; - (void)([_font release]), _font = nil; - [super dealloc]; -} - - (id)initWithFontAtFileURL:(NSURL*)url { if ((self = [super init]) != nil) { @@ -30,7 +22,7 @@ CTFontRef font = CTFontCreateWithGraphicsFont(fontRef, 30.f, NULL, NULL); // toll free bridge between NSFont at CTFont :) - _font = [(NSFont*)font copy]; + _font = [(__bridge NSFont*)font copy]; CGFontRelease(fontRef); CGDataProviderRelease(dataProvider); CFRelease(font); @@ -46,7 +38,7 @@ - (NSArray*)allCharacters { NSCharacterSet* charSet = _font.coveredCharacterSet; - NSMutableArray* array = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* array = [[NSMutableArray alloc] init]; NSStringEncoding encoding = NSUTF32LittleEndianStringEncoding; for (int plane = 0; plane <= 16; plane++) { if ([charSet hasMemberInPlane:plane]) { @@ -54,9 +46,9 @@ for (c = plane << 16; c < (plane + 1) << 16; c++) { if ([charSet longCharacterIsMember:c]) { UTF32Char c1 = NSSwapHostIntToLittle(c); - [array addObject:[[[NSString alloc] initWithBytes:&c1 - length:4 - encoding:encoding] autorelease]]; + [array addObject:[[NSString alloc] initWithBytes:&c1 + length:4 + encoding:encoding]]; } } } @@ -66,7 +58,7 @@ - (void)generateMap { - CTFontRef font = (CTFontRef)_font; + CTFontRef font = (__bridge CTFontRef)_font; for (NSString* charString in [self allCharacters]) { // get the characters in each char NSUInteger count = charString.length; @@ -82,7 +74,7 @@ // add SVG to the dictionary NSString* key = [NSString stringWithFormat:@"%04x", [charString characterAtIndex:0]]; CGPathRef flippedPath = [IJSVGUtils newFlippedCGPath:path]; - _transformedPaths[key] = (id)flippedPath; + _transformedPaths[key] = (__bridge id)flippedPath; CGPathRelease(flippedPath); } CGPathRelease(path); @@ -113,15 +105,15 @@ { IJSVGBeginTransaction(); __block IJSVG* svg = nil; - IJSVGGroupLayer* layer = [[[IJSVGGroupLayer alloc] init] autorelease]; - IJSVGShapeLayer* shape = [[[IJSVGShapeLayer alloc] init] autorelease]; + IJSVGGroupLayer* layer = [[IJSVGGroupLayer alloc] init]; + IJSVGShapeLayer* shape = [[IJSVGShapeLayer alloc] init]; [layer addSublayer:shape]; shape.path = path; CGRect box = CGPathGetPathBoundingBox(path); svg = [[IJSVG alloc] initWithSVGLayer:layer viewBox:box]; IJSVGEndTransaction(); - return [svg autorelease]; + return svg; } @end diff --git a/Framework/IJSVG/IJSVG/Source/Core/IJSVGImageRep.m b/Framework/IJSVG/IJSVG/Source/Core/IJSVGImageRep.m index 0d0f63b..89bdc1f 100644 --- a/Framework/IJSVG/IJSVG/Source/Core/IJSVGImageRep.m +++ b/Framework/IJSVG/IJSVG/Source/Core/IJSVGImageRep.m @@ -50,13 +50,7 @@ + (instancetype)imageRepWithData:(NSData*)data { - return [[[self alloc] initWithData:data] autorelease]; -} - -- (void)dealloc -{ - (void)([_svg release]), _svg = nil; - [super dealloc]; + return [[self alloc] initWithData:data]; } - (instancetype)initWithData:(NSData*)data @@ -64,14 +58,13 @@ if ((self = [super init]) != nil) { // grab the string from the data // its more then likely UTF-8... - NSString* string = [[[NSString alloc] initWithData:data - encoding:NSUTF8StringEncoding] autorelease]; + NSString* string = [[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding]; _svg = [[IJSVG alloc] initWithSVGString:string]; // no valid SVG, just return nil; if (_svg == nil) { - [self release]; return nil; } diff --git a/Framework/IJSVG/IJSVG/Source/Core/IJSVGView.m b/Framework/IJSVG/IJSVG/Source/Core/IJSVGView.m index df856a5..0b4a640 100644 --- a/Framework/IJSVG/IJSVG/Source/Core/IJSVGView.m +++ b/Framework/IJSVG/IJSVG/Source/Core/IJSVGView.m @@ -17,15 +17,12 @@ // make sure we call this, or block may get called for a view // that doesnt exist [SVG prepForDrawingInView:nil]; - (void)([imageName release]), imageName = nil; - (void)([SVG release]), SVG = nil; - [super dealloc]; } + (IJSVGView*)viewWithSVGNamed:(NSString*)name { IJSVG* anSVG = [IJSVG svgNamed:name]; - return [[[self alloc] initWithSVG:anSVG] autorelease]; + return [[self alloc] initWithSVG:anSVG]; } - (id)initWithSVG:(IJSVG*)anSvg @@ -51,10 +48,7 @@ - (void)setSVG:(IJSVG*)anSVG { // memory clean - if (SVG != nil) { - (void)([SVG release]), SVG = nil; - } - SVG = [anSVG retain]; + SVG = anSVG; // redisplay ourself! [SVG prepForDrawingInView:self]; diff --git a/Framework/IJSVG/IJSVG/Source/Exporter/IJSVGExporter.m b/Framework/IJSVG/IJSVG/Source/Exporter/IJSVGExporter.m index 18224b4..9bb4a59 100644 --- a/Framework/IJSVG/IJSVG/Source/Exporter/IJSVGExporter.m +++ b/Framework/IJSVG/IJSVG/Source/Exporter/IJSVGExporter.m @@ -39,10 +39,10 @@ const NSArray* IJSVGShortCharacterArray(void) static NSArray* _array; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - _array = [@[ @"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", @"j", @"k", @"l", + _array = @[ @"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", @"j", @"k", @"l", @"m", @"n", @"o", @"p", @"q", @"r", @"s", @"t", @"u", @"v", @"w", @"x", @"y", @"z", @"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", - @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z" ] retain]; + @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z" ]; }); return _array; } @@ -52,7 +52,7 @@ const NSDictionary* IJSVGDefaultAttributes(void) static NSDictionary* _defaults; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - _defaults = [@ { + _defaults = @{ @"clip" : @"auto", @"clip-path" : @"none", @"clip-rule" : @"nonzero", @@ -104,7 +104,7 @@ const NSDictionary* IJSVGDefaultAttributes(void) @"dominant-baseline" : @"auto", @"alignment-baseline" : @"baseline", @"baseline-shift" : @"baseline" - } retain]; + }; }); return _defaults; } @@ -114,7 +114,7 @@ const NSArray* IJSVGInheritableAttributes(void) static NSArray* _attributes; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - _attributes = [@[ + _attributes = @[ @"clip-rule", @"color", @"color-interpolation", @@ -159,7 +159,7 @@ const NSArray* IJSVGInheritableAttributes(void) @"white-space", @"word-spacing", @"writing-mode" - ] retain]; + ]; }); return _attributes; } @@ -171,7 +171,7 @@ void IJSVGApplyAttributesToElement(NSDictionary* _Nonnull attributes, NSXMLEleme NSDictionary* IJSVGElementAttributeDictionary(NSXMLElement* element) { - NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; for (NSXMLNode* attribute in element.attributes) { dict[attribute.name] = attribute.stringValue; } @@ -188,16 +188,6 @@ NSString* IJSVGHash(NSString* key) return [@"#" stringByAppendingString:key]; } -- (void)dealloc -{ - (void)([_svg release]), _svg = nil; - (void)([_dom release]), _dom = nil; - (void)([_defElement release]), _defElement = nil; - (void)([_title release]), _title = nil; - (void)([_desc release]), _desc = nil; - [super dealloc]; -} - - (id)initWithSVG:(IJSVG*)svg size:(CGSize)size options:(IJSVGExporterOptions)options @@ -217,7 +207,7 @@ NSString* IJSVGHash(NSString* key) if ((self = [super init]) != nil) { _options = options; _size = size; - _svg = [svg retain]; + _svg = svg; // defaults for floating point rounding, if any _floatingPointOptions = floatingPointOptions; @@ -254,14 +244,14 @@ NSString* IJSVGHash(NSString* key) - (NSXMLElement*)rootNode:(NSXMLElement**)nestedRoot { // generates the root document - NSXMLElement* root = [[[NSXMLElement alloc] initWithName:@"svg"] autorelease]; + NSXMLElement* root = [[NSXMLElement alloc] initWithName:@"svg"]; // sort out viewbox NSRect viewBox = _svg.viewBox; - NSMutableDictionary* attributes = [[[NSMutableDictionary alloc] initWithDictionary:@{ + NSMutableDictionary* attributes = [[NSMutableDictionary alloc] initWithDictionary:@{ @"viewBox" : [self viewBoxWithRect:viewBox], @"xmlns" : XML_DOC_NS - }] autorelease]; + }]; // add on various XML declaritive things if (IJSVGExporterHasOption(_options, IJSVGExporterOptionRemoveXMLDeclaration) == NO) { @@ -276,7 +266,7 @@ NSString* IJSVGHash(NSString* key) // was there a size set? CGFloat scale = 1.f; - NSMutableArray* transforms = [[[NSMutableArray alloc] initWithCapacity:2] autorelease]; + NSMutableArray* transforms = [[NSMutableArray alloc] initWithCapacity:2]; if (CGSizeEqualToSize(CGSizeZero, _size) == NO && (_size.width != viewBox.size.width && _size.height != viewBox.size.height)) { // copy the attributes @@ -334,7 +324,7 @@ NSString* IJSVGHash(NSString* key) if (transforms.count != 0) { // concat the transform CGAffineTransform afTransform = IJSVGConcatTransforms(transforms); - NSXMLElement* transformedElement = [[[NSXMLElement alloc] initWithName:@"g"] autorelease]; + NSXMLElement* transformedElement = [[NSXMLElement alloc] initWithName:@"g"]; NSString* transString = nil; transString = [self transformAttributeStringForTransform:afTransform]; IJSVGApplyAttributesToElement( @@ -384,8 +374,8 @@ NSString* IJSVGHash(NSString* key) _idCount = 0; _shortIdCount = 0; _appliedXLink = NO; - (void)[_dom release], _dom = nil; - (void)[_defElement release], _defElement = nil; + _dom = nil; + _defElement = nil; // create the stand alone DOM @@ -417,7 +407,7 @@ NSString* IJSVGHash(NSString* key) // add generator if (IJSVGExporterHasOption(_options, IJSVGExporterOptionRemoveComments) == NO) { - NSXMLNode* generatorNode = [[[NSXMLNode alloc] initWithKind:NSXMLCommentKind] autorelease]; + NSXMLNode* generatorNode = [[NSXMLNode alloc] initWithKind:NSXMLCommentKind]; generatorNode.stringValue = XML_DOC_GENERATOR; [_dom.rootElement insertChild:generatorNode atIndex:0]; @@ -504,13 +494,13 @@ NSString* IJSVGHash(NSString* key) [element removeAttributeForName:@"transform"]; // x - NSXMLNode* att = [[[NSXMLNode alloc] initWithKind:NSXMLAttributeKind] autorelease]; + NSXMLNode* att = [[NSXMLNode alloc] initWithKind:NSXMLAttributeKind]; att.name = @"x"; att.stringValue = IJSVGShortFloatStringWithOptions(transform.parameters[0], _floatingPointOptions); [element addAttribute:att]; // y - att = [[[NSXMLNode alloc] initWithKind:NSXMLAttributeKind] autorelease]; + att = [[NSXMLNode alloc] initWithKind:NSXMLAttributeKind]; att.name = @"y"; att.stringValue = IJSVGShortFloatStringWithOptions(transform.parameters[1], _floatingPointOptions); [element addAttribute:att]; @@ -523,7 +513,7 @@ NSString* IJSVGHash(NSString* key) const NSArray* inhert = IJSVGInheritableAttributes(); NSArray* elements = [_dom nodesForXPath:@"//*" error:nil]; - NSMutableDictionary* rules = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* rules = [[NSMutableDictionary alloc] init]; for (NSXMLElement* element in elements) { NSDictionary* inhertEl = [self intersectableAttributes:IJSVGElementAttributeDictionary(element) inheritableAttributes:inhert]; @@ -541,10 +531,10 @@ NSString* IJSVGHash(NSString* key) } // add styles to dom - NSXMLElement* styles = [[[NSXMLElement alloc] initWithName:@"style"] autorelease]; - NSXMLNode* node = [[[NSXMLNode alloc] initWithKind:NSXMLTextKind] autorelease]; + NSXMLElement* styles = [[NSXMLElement alloc] initWithName:@"style"]; + NSXMLNode* node = [[NSXMLNode alloc] initWithKind:NSXMLTextKind]; - NSMutableArray* classes = [[[NSMutableArray alloc] initWithCapacity:rules.count] autorelease]; + NSMutableArray* classes = [[NSMutableArray alloc] initWithCapacity:rules.count]; for (NSString* r in rules) { [classes addObject:[NSString stringWithFormat:@".%@%@", rules[r], r]]; } @@ -555,7 +545,7 @@ NSString* IJSVGHash(NSString* key) - (NSString*)styleSheetRulesFromDictionary:(NSDictionary*)dict { - NSMutableArray* array = [[[NSMutableArray alloc] initWithCapacity:dict.count] autorelease]; + NSMutableArray* array = [[NSMutableArray alloc] initWithCapacity:dict.count]; for (NSString* key in dict.allKeys) { [array addObject:[NSString stringWithFormat:@"%@: %@;", key, dict[key]]]; } @@ -641,7 +631,7 @@ NSString* IJSVGHash(NSString* key) const NSArray* inheritableAttributes = IJSVGInheritableAttributes(); __block NSDictionary* intersection = nil; - NSMutableArray* currentGroup = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* currentGroup = [[NSMutableArray alloc] init]; BOOL (^createGroupIfRequired)(void) = ^BOOL { // memory clean @@ -653,7 +643,7 @@ NSString* IJSVGHash(NSString* key) // at this point we can create a new group and remove all the attributes NSInteger insertIndex = currentGroup.lastObject.index; - NSXMLElement* group = [[[NSXMLElement alloc] initWithName:@"g"] autorelease]; + NSXMLElement* group = [[NSXMLElement alloc] initWithName:@"g"]; IJSVGApplyAttributesToElement(intersection, group); // add back into the dom @@ -738,7 +728,7 @@ NSString* IJSVGHash(NSString* key) - (NSDictionary*)intersectableAttributes:(NSDictionary*)atts inheritableAttributes:(const NSArray*)inheritable { - NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; for (NSString* key in atts.allKeys) { if ([inheritable containsObject:key]) { dict[key] = atts[key]; @@ -751,7 +741,7 @@ NSString* IJSVGHash(NSString* key) currentAttributes:(NSDictionary*)currentAttributes inheritableAttributes:(const NSArray*)inheritableAtts { - NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; for (NSString* key in newAttributes.allKeys) { // make sure they are the same and // they are inheritable @@ -909,12 +899,12 @@ NSString* IJSVGHash(NSString* key) NSArray* paths = [_dom nodesForXPath:@"//path" error:nil]; - NSCountedSet* set = [[[NSCountedSet alloc] init] autorelease]; + NSCountedSet* set = [[NSCountedSet alloc] init]; for (NSXMLElement* element in paths) { [set addObject:[element attributeForName:@"d"].stringValue]; } - NSMutableDictionary* defs = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* defs = [[NSMutableDictionary alloc] init]; // now actually compute them for (NSXMLElement* element in paths) { @@ -927,7 +917,7 @@ NSString* IJSVGHash(NSString* key) NSXMLElement* defParentElement = nil; if ((defParentElement = [defs objectForKey:data]) == nil) { // create the def - NSXMLElement* element = [[[NSXMLElement alloc] init] autorelease]; + NSXMLElement* element = [[NSXMLElement alloc] init]; element.name = @"path"; NSDictionary* atts = @{ @"d" : data, @@ -940,13 +930,13 @@ NSString* IJSVGHash(NSString* key) } // we know at this point, we need to swap out the path to a use - NSXMLElement* use = [[[NSXMLElement alloc] init] autorelease]; + NSXMLElement* use = [[NSXMLElement alloc] init]; use.name = @"use"; // grab the id NSString* pathId = [defParentElement attributeForName:@"id"].stringValue; - NSXMLNode* useAttribute = [[[NSXMLNode alloc] initWithKind:NSXMLAttributeKind] autorelease]; + NSXMLNode* useAttribute = [[NSXMLNode alloc] initWithKind:NSXMLAttributeKind]; useAttribute.name = @"xlink:href"; useAttribute.stringValue = IJSVGHash(pathId); [use addAttribute:useAttribute]; @@ -1091,7 +1081,7 @@ NSString* IJSVGHash(NSString* key) fromParent:(NSXMLElement*)parent { // create the element - NSXMLElement* e = [[[NSXMLElement alloc] init] autorelease]; + NSXMLElement* e = [[NSXMLElement alloc] init]; e.name = @"g"; // stick defaults @@ -1114,7 +1104,7 @@ NSString* IJSVGHash(NSString* key) } // convert the CGImage into an NSImage - NSBitmapImageRep* rep = [[[NSBitmapImageRep alloc] initWithCGImage:image] autorelease]; + NSBitmapImageRep* rep = [[NSBitmapImageRep alloc] initWithCGImage:image]; // work out the data NSData* data = [rep representationUsingType:NSBitmapImageFileTypePNG @@ -1136,7 +1126,7 @@ NSString* IJSVGHash(NSString* key) fromParent:nil]; patternElement.name = @"pattern"; - NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; dict[@"id"] = [self identifierForElement:patternElement]; dict[@"width"] = IJSVGShortFloatStringWithOptions(layer.patternNode.width.value, _floatingPointOptions); dict[@"height"] = IJSVGShortFloatStringWithOptions(layer.patternNode.height.value, _floatingPointOptions); @@ -1160,7 +1150,7 @@ NSString* IJSVGHash(NSString* key) [[self defElement] addChild:patternElement]; // now the use statement - NSXMLElement* useElement = [[[NSXMLElement alloc] init] autorelease]; + NSXMLElement* useElement = [[NSXMLElement alloc] init]; useElement.name = @"use"; // now add the fill @@ -1187,7 +1177,7 @@ NSString* IJSVGHash(NSString* key) toElement:(NSXMLElement*)element { IJSVGGradient* gradient = layer.gradient; - NSXMLElement* gradientElement = [[[NSXMLElement alloc] init] autorelease]; + NSXMLElement* gradientElement = [[NSXMLElement alloc] init]; // work out linear gradient if ([gradient isKindOfClass:[IJSVGLinearGradient class]]) { @@ -1247,10 +1237,10 @@ NSString* IJSVGHash(NSString* key) } // create the stop element - NSXMLElement* stop = [[[NSXMLElement alloc] init] autorelease]; + NSXMLElement* stop = [[NSXMLElement alloc] init]; stop.name = @"stop"; - NSMutableDictionary* atts = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* atts = [[NSMutableDictionary alloc] init]; atts[@"offset"] = [NSString stringWithFormat:@"%g%%", (location * 100)]; // add the color @@ -1312,10 +1302,10 @@ NSString* IJSVGHash(NSString* key) } // image element for the SVG - NSXMLElement* imageElement = [[[NSXMLElement alloc] init] autorelease]; + NSXMLElement* imageElement = [[NSXMLElement alloc] init]; imageElement.name = @"image"; - NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; dict[@"id"] = [self identifierForElement:imageElement]; dict[@"width"] = IJSVGShortFloatStringWithOptions(layer.frame.size.width, _floatingPointOptions); dict[@"height"] = IJSVGShortFloatStringWithOptions(layer.frame.size.height, _floatingPointOptions); @@ -1368,7 +1358,7 @@ NSString* IJSVGHash(NSString* key) - (NSXMLElement*)elementForShape:(IJSVGShapeLayer*)layer fromParent:(NSXMLElement*)parent { - NSXMLElement* e = [[[NSXMLElement alloc] init] autorelease]; + NSXMLElement* e = [[NSXMLElement alloc] init]; e.name = [self elementNameForPrimitiveType:layer.primitiveType]; CGPathRef path = layer.path; @@ -1377,7 +1367,7 @@ NSString* IJSVGHash(NSString* key) layer.frame.origin.y); CGPathRef transformPath = CGPathCreateCopyByTransformingPath(path, &trans); - NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; BOOL cleanupPaths = IJSVGExporterHasOption(_options, IJSVGExporterOptionCleanupPaths); BOOL convertArcs = IJSVGExporterHasOption(_options, IJSVGExporterOptionConvertArcs); BOOL convertShapesToPaths = IJSVGExporterHasOption(_options, IJSVGExporterOptionConvertShapesToPaths); @@ -1392,9 +1382,9 @@ NSString* IJSVGHash(NSString* key) CGFloat radX = fabs(pathElement->points[2].x - currentPoint.x); CGFloat radY = fabs(pathElement->points[2].y - currentPoint.y); - dict[@"rx"] = IJSVGShortFloatStringWithOptions(radX, _floatingPointOptions); + dict[@"rx"] = IJSVGShortFloatStringWithOptions(radX, self->_floatingPointOptions); if (radX != radY) { - dict[@"ry"] = IJSVGShortFloatStringWithOptions(radY, _floatingPointOptions); + dict[@"ry"] = IJSVGShortFloatStringWithOptions(radY, self->_floatingPointOptions); } } }); @@ -1403,38 +1393,38 @@ NSString* IJSVGHash(NSString* key) if (cleanupPaths == YES && radiusSet == NO && convertShapesToPaths == YES) { // construct array of instructions to do e.name = [self elementNameForPrimitiveType:kIJSVGPrimitivePathTypePath]; - NSMutableArray* instructions = [[[NSMutableArray alloc] initWithCapacity:5] autorelease]; + NSMutableArray* instructions = [[NSMutableArray alloc] initWithCapacity:5]; // M -> H -> V -> H -> z // M IJSVGExporterPathInstruction* instruction = nil; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' - dataCount:2] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' + dataCount:2]; instruction.data[0] = boundingBox.origin.x; instruction.data[1] = boundingBox.origin.y; [instructions addObject:instruction]; // H - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'H' - dataCount:1] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'H' + dataCount:1]; instruction.data[0] = boundingBox.origin.x + boundingBox.size.width; [instructions addObject:instruction]; // V - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'V' - dataCount:1] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'V' + dataCount:1]; instruction.data[0] = boundingBox.origin.y + boundingBox.size.height; [instructions addObject:instruction]; // H - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'H' - dataCount:1] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'H' + dataCount:1]; instruction.data[0] = boundingBox.origin.x; [instructions addObject:instruction]; // Z - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' - dataCount:0] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' + dataCount:0]; [instructions addObject:instruction]; dict[@"d"] = [self pathFromInstructions:instructions]; } else { @@ -1454,13 +1444,13 @@ NSString* IJSVGHash(NSString* key) // M -> L e.name = [self elementNameForPrimitiveType:kIJSVGPrimitivePathTypePath]; NSMutableArray* instructions = nil; - instructions = [[[NSMutableArray alloc] initWithCapacity:2] autorelease]; + instructions = [[NSMutableArray alloc] initWithCapacity:2]; IJSVGEnumerateCGPathElements(transformPath, ^(const CGPathElement* pathElement, CGPoint currentPoint) { switch (pathElement->type) { case kCGPathElementMoveToPoint: { IJSVGExporterPathInstruction* instruction = nil; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' - dataCount:2] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' + dataCount:2]; instruction.data[0] = pathElement->points[0].x; instruction.data[1] = pathElement->points[0].y; [instructions addObject:instruction]; @@ -1468,8 +1458,8 @@ NSString* IJSVGHash(NSString* key) } case kCGPathElementAddLineToPoint: { IJSVGExporterPathInstruction* instruction = nil; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'L' - dataCount:2] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'L' + dataCount:2]; instruction.data[0] = pathElement->points[0].x; instruction.data[1] = pathElement->points[0].y; [instructions addObject:instruction]; @@ -1484,13 +1474,13 @@ NSString* IJSVGHash(NSString* key) IJSVGEnumerateCGPathElements(transformPath, ^(const CGPathElement* pathElement, CGPoint currentPoint) { switch (pathElement->type) { case kCGPathElementMoveToPoint: { - dict[@"x1"] = IJSVGShortFloatStringWithOptions(pathElement->points[0].x, _floatingPointOptions); - dict[@"y1"] = IJSVGShortFloatStringWithOptions(pathElement->points[0].y, _floatingPointOptions); + dict[@"x1"] = IJSVGShortFloatStringWithOptions(pathElement->points[0].x, self->_floatingPointOptions); + dict[@"y1"] = IJSVGShortFloatStringWithOptions(pathElement->points[0].y, self->_floatingPointOptions); break; } case kCGPathElementAddLineToPoint: { - dict[@"x2"] = IJSVGShortFloatStringWithOptions(pathElement->points[0].x, _floatingPointOptions); - dict[@"y2"] = IJSVGShortFloatStringWithOptions(pathElement->points[0].y, _floatingPointOptions); + dict[@"x2"] = IJSVGShortFloatStringWithOptions(pathElement->points[0].x, self->_floatingPointOptions); + dict[@"y2"] = IJSVGShortFloatStringWithOptions(pathElement->points[0].y, self->_floatingPointOptions); break; } default: @@ -1506,13 +1496,13 @@ NSString* IJSVGHash(NSString* key) // M -> L+ e.name = [self elementNameForPrimitiveType:kIJSVGPrimitivePathTypePath]; NSMutableArray* instructions = nil; - instructions = [[[NSMutableArray alloc] init] autorelease]; + instructions = [[NSMutableArray alloc] init]; IJSVGEnumerateCGPathElements(transformPath, ^(const CGPathElement* pathElement, CGPoint currentPoint) { switch (pathElement->type) { case kCGPathElementMoveToPoint: { IJSVGExporterPathInstruction* instruction = nil; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' - dataCount:2] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' + dataCount:2]; instruction.data[0] = pathElement->points[0].x; instruction.data[1] = pathElement->points[0].y; [instructions addObject:instruction]; @@ -1520,8 +1510,8 @@ NSString* IJSVGHash(NSString* key) } case kCGPathElementAddLineToPoint: { IJSVGExporterPathInstruction* instruction = nil; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'L' - dataCount:2] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'L' + dataCount:2]; instruction.data[0] = pathElement->points[0].x; instruction.data[1] = pathElement->points[0].y; [instructions addObject:instruction]; @@ -1537,13 +1527,13 @@ NSString* IJSVGHash(NSString* key) [instructions removeLastObject]; } IJSVGExporterPathInstruction* instruction = nil; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' - dataCount:0] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' + dataCount:0]; [instructions addObject:instruction]; } dict[@"d"] = [self pathFromInstructions:instructions]; } else { - NSMutableArray* points = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* points = [[NSMutableArray alloc] init]; __block CGPathElementType type; IJSVGEnumerateCGPathElements(transformPath, ^(const CGPathElement* pathElement, CGPoint currentPoint) { type = pathElement->type; @@ -1584,19 +1574,19 @@ NSString* IJSVGHash(NSString* key) // M + A + A +Z e.name = [self elementNameForPrimitiveType:kIJSVGPrimitivePathTypePath]; NSMutableArray* instructions = nil; - instructions = [[[NSMutableArray alloc] initWithCapacity:4] autorelease]; + instructions = [[NSMutableArray alloc] initWithCapacity:4]; // M IJSVGExporterPathInstruction* instruction = nil; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' - dataCount:2] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' + dataCount:2]; instruction.data[0] = cx; instruction.data[1] = cy - ry; [instructions addObject:instruction]; // A - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'A' - dataCount:7] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'A' + dataCount:7]; instruction.data[0] = rx; instruction.data[1] = ry; instruction.data[2] = 0; @@ -1607,8 +1597,8 @@ NSString* IJSVGHash(NSString* key) [instructions addObject:instruction]; // A - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'A' - dataCount:7] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'A' + dataCount:7]; instruction.data[0] = rx; instruction.data[1] = ry; instruction.data[2] = 0; @@ -1619,8 +1609,8 @@ NSString* IJSVGHash(NSString* key) [instructions addObject:instruction]; // Z - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' - dataCount:0] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' + dataCount:0]; [instructions addObject:instruction]; dict[@"d"] = [self pathFromInstructions:instructions]; } else { @@ -1640,19 +1630,19 @@ NSString* IJSVGHash(NSString* key) // M + A + A +Z e.name = [self elementNameForPrimitiveType:kIJSVGPrimitivePathTypePath]; NSMutableArray* instructions = nil; - instructions = [[[NSMutableArray alloc] initWithCapacity:4] autorelease]; + instructions = [[NSMutableArray alloc] initWithCapacity:4]; // M IJSVGExporterPathInstruction* instruction = nil; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' - dataCount:2] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' + dataCount:2]; instruction.data[0] = cx; instruction.data[1] = cy - r; [instructions addObject:instruction]; // A - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'A' - dataCount:7] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'A' + dataCount:7]; instruction.data[0] = r; instruction.data[1] = r; instruction.data[2] = 0; @@ -1663,8 +1653,8 @@ NSString* IJSVGHash(NSString* key) [instructions addObject:instruction]; // A - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'A' - dataCount:7] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'A' + dataCount:7]; instruction.data[0] = r; instruction.data[1] = r; instruction.data[2] = 0; @@ -1675,8 +1665,8 @@ NSString* IJSVGHash(NSString* key) [instructions addObject:instruction]; // Z - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' - dataCount:0] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' + dataCount:0]; [instructions addObject:instruction]; dict[@"d"] = [self pathFromInstructions:instructions]; } else { @@ -1826,7 +1816,7 @@ NSString* IJSVGHash(NSString* key) - (void)applyDefaultsToElement:(NSXMLElement*)element fromLayer:(IJSVGLayer*)layer { - NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; // opacity if (layer.opacity != 1.f) { @@ -1835,7 +1825,7 @@ NSString* IJSVGHash(NSString* key) } // blendmode - we only every apply a stylesheet blend mode - NSMutableDictionary* style = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* style = [[NSMutableDictionary alloc] init]; if (layer.blendingMode != kCGBlendModeNormal) { NSString* str = [IJSVGUtils mixBlendingModeForBlendMode:(IJSVGBlendMode)layer.blendingMode]; if (str != nil) { @@ -1849,7 +1839,7 @@ NSString* IJSVGHash(NSString* key) } if (style.count != 0) { - NSMutableString* styleString = [[[NSMutableString alloc] init] autorelease]; + NSMutableString* styleString = [[NSMutableString alloc] init]; for (NSString* styleKey in style.allKeys) { NSString* format = [NSString stringWithFormat:@"%@:%@;", styleKey, style[styleKey]]; [styleString appendString:format]; @@ -1875,12 +1865,12 @@ NSString* IJSVGHash(NSString* key) fromLayer:(IJSVGLayer*)layer { // create the element - NSXMLElement* mask = [[[NSXMLElement alloc] init] autorelease]; + NSXMLElement* mask = [[NSXMLElement alloc] init]; mask.name = @"mask"; // create the key NSString* maskKey = [self identifierForElement:mask]; - NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; + NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; dict[@"id"] = maskKey; if (layer.mask.frame.origin.x != 0.f) { @@ -1936,8 +1926,8 @@ NSString* IJSVGHash(NSString* key) - (IJSVG*)SVG:(NSError**)error { - return [[[IJSVG alloc] initWithSVGString:self.SVGString - error:error] autorelease]; + return [[IJSVG alloc] initWithSVGString:self.SVGString + error:error]; } #pragma mark CGPath stuff @@ -1971,7 +1961,7 @@ NSString* IJSVGHash(NSString* key) void IJSVGExporterPathCaller(void* info, const CGPathElement* pathElement) { - IJSVGCGPathHandler handler = (IJSVGCGPathHandler)info; + IJSVGCGPathHandler handler = (__bridge IJSVGCGPathHandler)info; handler(pathElement); }; diff --git a/Framework/IJSVG/IJSVG/Source/Exporter/IJSVGExporterPathInstruction.m b/Framework/IJSVG/IJSVG/Source/Exporter/IJSVGExporterPathInstruction.m index 05f5430..9a20545 100644 --- a/Framework/IJSVG/IJSVG/Source/Exporter/IJSVGExporterPathInstruction.m +++ b/Framework/IJSVG/IJSVG/Source/Exporter/IJSVGExporterPathInstruction.m @@ -26,7 +26,6 @@ if (_coords != NULL) { (void)free(_coords), _coords = NULL; } - [super dealloc]; } - (id)initWithInstruction:(char)instruction @@ -88,7 +87,7 @@ void IJSVGExporterPathInstructionCommandFree(IJSVGExporterPathInstructionCommand floatingPointOptions:(IJSVGFloatingPointOptions)floatingPointOptions { IJSVGExporterPathInstructionCommand* lastCommand = NULL; - NSMutableString* string = [[[NSMutableString alloc] init] autorelease]; + NSMutableString* string = [[NSMutableString alloc] init]; for (NSValue* value in instructionSets) { // read back the bytes IJSVGExporterPathInstructionCommand command; @@ -119,7 +118,7 @@ void IJSVGExporterPathInstructionCommandFree(IJSVGExporterPathInstructionCommand + (NSString*)pathStringFromInstructions:(NSArray*)instructions floatingPointOptions:(IJSVGFloatingPointOptions)floatingPointOptions { - NSMutableArray* pathInstructions = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* pathInstructions = [[NSMutableArray alloc] init]; for (IJSVGExporterPathInstruction* instruction in instructions) { CGFloat* data = instruction.data; const char lowerInstruction = tolower(instruction.instruction); @@ -285,8 +284,8 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, IJSVGExporterPathInstructionRoundData(adata, length, floatingPointOptions); IJSVGExporterPathInstruction* ainstruction = nil; - ainstruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:instructionChar - dataCount:length] autorelease]; + ainstruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:instructionChar + dataCount:length]; memcpy(ainstruction.data, adata, sizeof(CGFloat) * length); // run these through our default string runner @@ -319,7 +318,7 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, floatingPointOptions:(IJSVGFloatingPointOptions)floatingPointOptions { NSMutableArray* nInstructions = nil; - nInstructions = [[[NSMutableArray alloc] initWithCapacity:instructions.count] autorelease]; + nInstructions = [[NSMutableArray alloc] initWithCapacity:instructions.count]; IJSVGExporterPathInstruction* lastInstruction = nil; for (IJSVGExporterPathInstruction* instruction in instructions) { lastInstruction = nInstructions.lastObject; @@ -330,8 +329,8 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, if (instruction.instruction == 'c') { if (lastInstruction.instruction == 'c' && instruction.data[0] == -(lastInstruction.data[2] - lastInstruction.data[4]) && instruction.data[1] == -(lastInstruction.data[3] - lastInstruction.data[5])) { IJSVGExporterPathInstruction* nInstruction = nil; - nInstruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'s' - dataCount:4] autorelease]; + nInstruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'s' + dataCount:4]; nInstruction.data[0] = instruction.data[2]; nInstruction.data[1] = instruction.data[3]; nInstruction.data[2] = instruction.data[4]; @@ -340,8 +339,8 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, continue; } else if (lastInstruction.instruction == 's' && instruction.data[0] == -(lastInstruction.data[0] - lastInstruction.data[2]) && instruction.data[1] == -(lastInstruction.data[1] - lastInstruction.data[3])) { IJSVGExporterPathInstruction* nInstruction = nil; - nInstruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'s' - dataCount:4] autorelease]; + nInstruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'s' + dataCount:4]; nInstruction.data[0] = instruction.data[2]; nInstruction.data[1] = instruction.data[3]; nInstruction.data[2] = instruction.data[4]; @@ -350,8 +349,8 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, continue; } else if (lastInstruction.instruction != 'c' && lastInstruction.instruction != 's' && instruction.data[0] == 0.f && instruction.data[1] == 0.f) { IJSVGExporterPathInstruction* nInstruction = nil; - nInstruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'s' - dataCount:4] autorelease]; + nInstruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'s' + dataCount:4]; nInstruction.data[0] = instruction.data[2]; nInstruction.data[1] = instruction.data[3]; nInstruction.data[2] = instruction.data[4]; @@ -362,16 +361,16 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, } else if (instruction.instruction == 'q') { if (lastInstruction.instruction == 'q' && instruction.data[0] == (lastInstruction.data[2] - lastInstruction.data[0]) && instruction.data[1] == (lastInstruction.data[3] - lastInstruction.data[1])) { IJSVGExporterPathInstruction* nInstruction = nil; - nInstruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'t' - dataCount:2] autorelease]; + nInstruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'t' + dataCount:2]; nInstruction.data[0] = instruction.data[2]; nInstruction.data[1] = instruction.data[3]; [nInstructions addObject:nInstruction]; continue; } else if (lastInstruction.instruction == 't' && instruction.data[2] == lastInstruction.data[0] && instruction.data[3] == lastInstruction.data[1]) { IJSVGExporterPathInstruction* nInstruction = nil; - nInstruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'t' - dataCount:2] autorelease]; + nInstruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'t' + dataCount:2]; nInstruction.data[0] = instruction.data[2]; nInstruction.data[1] = instruction.data[3]; [nInstructions addObject:nInstruction]; @@ -518,7 +517,7 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, // keep track of the current point __block CGPoint currentPoint = CGPointZero; - NSMutableArray* instructions = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* instructions = [[NSMutableArray alloc] init]; // create the path callback IJSVGCGPathHandler callback = ^(const CGPathElement* pathElement) { @@ -528,8 +527,8 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, case kCGPathElementMoveToPoint: { // move to command - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' - dataCount:2] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'M' + dataCount:2]; CGPoint point = pathElement->points[0]; instruction.data[0] = point.x; instruction.data[1] = point.y; @@ -543,16 +542,16 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, // line to command CGPoint point = pathElement->points[0]; if (point.x == currentPoint.x) { - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'V' - dataCount:1] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'V' + dataCount:1]; instruction.data[0] = point.y; } else if (point.y == currentPoint.y) { - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'H' - dataCount:1] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'H' + dataCount:1]; instruction.data[0] = point.x; } else { - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'L' - dataCount:2] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'L' + dataCount:2]; instruction.data[0] = point.x; instruction.data[1] = point.y; } @@ -566,8 +565,8 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, // quad curve to command CGPoint controlPoint = pathElement->points[0]; CGPoint point = pathElement->points[1]; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'Q' - dataCount:4] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'Q' + dataCount:4]; instruction.data[0] = controlPoint.x; instruction.data[1] = controlPoint.y; instruction.data[2] = point.x; @@ -585,8 +584,8 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, CGPoint point = pathElement->points[2]; currentPoint = point; - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'C' - dataCount:6] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'C' + dataCount:6]; instruction.data[0] = controlPoint1.x; instruction.data[1] = controlPoint1.y; instruction.data[2] = controlPoint2.x; @@ -600,8 +599,8 @@ void IJSVGExporterPathInstructionRoundData(CGFloat* data, NSInteger length, case kCGPathElementCloseSubpath: { // close command - instruction = [[[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' - dataCount:0] autorelease]; + instruction = [[IJSVGExporterPathInstruction alloc] initWithInstruction:'Z' + dataCount:0]; [instructions addObject:instruction]; break; } diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.m index 1d96221..209356e 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.m @@ -13,9 +13,7 @@ - (void)dealloc { - (void)[_sublayer release], _sublayer = nil; (void)CGImageRelease(_image), _image = nil; - [super dealloc]; } - (instancetype)init @@ -59,7 +57,7 @@ _hostingLayer.frame = CGRectMake(frame.origin.x + (frame.size.width / 2.f - width / 2.f), frame.origin.y + (frame.size.height / 2.f - height / 2.f), width, height); - _hostingLayer.contents = (id)_image; + _hostingLayer.contents = (__bridge id)_image; } - (NSArray*>*)debugLayers diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGradientLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGradientLayer.m index 72afbe0..41dd8cf 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGradientLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGradientLayer.m @@ -11,12 +11,6 @@ @implementation IJSVGGradientLayer -- (void)dealloc -{ - (void)([_gradient release]), _gradient = nil; - [super dealloc]; -} - - (BOOL)requiresBackingScaleHelp { return YES; @@ -24,10 +18,7 @@ - (void)setGradient:(IJSVGGradient*)newGradient { - if (_gradient != nil) { - (void)([_gradient release]), _gradient = nil; - } - _gradient = [newGradient retain]; + _gradient = newGradient; // lets check its alpha properties on the colors BOOL hasAlphaChannel = NO; diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGroupLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGroupLayer.m index 33a7e28..a08b3a4 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGroupLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGroupLayer.m @@ -13,12 +13,6 @@ @implementation IJSVGGroupLayer -- (void)dealloc -{ - (void)[_viewBox release], _viewBox = nil; - [super dealloc]; -} - - (CGRect)innerBoundingBox { return self.outerBoundingBox; diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.m index 2cd89d2..e121a50 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.m @@ -10,17 +10,10 @@ @implementation IJSVGImageLayer -- (void)dealloc -{ - (void)[_image release], _image = nil; - (void)[_imageLayer release], _imageLayer = nil; - [super dealloc]; -} - - (id)initWithImage:(IJSVGImage*)image { if((self = [super init]) != nil) { - _image = image.retain; + _image = image; } return self; } @@ -40,7 +33,7 @@ - (void)reloadContent { if(_imageLayer == nil) { - _imageLayer = [IJSVGBasicLayer layer].retain; + _imageLayer = [IJSVGBasicLayer layer]; _imageLayer.contentsGravity = kCAGravityResize; _imageLayer.affineTransform = CGAffineTransformMakeScale(1.f, -1.f); _imageLayer.contents = (id)_image.CGImage; diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.m index 45d2a95..37c4b30 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.m @@ -15,17 +15,6 @@ @implementation IJSVGLayer -- (void)dealloc -{ - (void)([_filter release]), _filter = nil; - (void)([_clipLayer release]), _clipLayer = nil; - (void)([_maskLayer release]), _maskLayer = nil; - (void)([_clipRule release]), _clipRule = nil; - (void)([_fillRule release]), _fillRule = nil; - (void)([_maskingLayer release]), _maskingLayer = nil; - [super dealloc]; -} - - (instancetype)init { if((self = [super init]) != nil) { @@ -287,7 +276,7 @@ + (NSArray*)deepestSublayersOfLayer:(CALayer*)layer { - NSMutableArray* arr = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* arr = [[NSMutableArray alloc] init]; for (CALayer* subLayer in layer.sublayers) { if (subLayer.sublayers.count != 0) { NSArray* moreLayers = [self deepestSublayersOfLayer:(IJSVGLayer*)subLayer]; @@ -393,14 +382,11 @@ } _convertMasksToPaths = flag; if (flag == YES) { - if (_maskingLayer != nil) { - (void)([_maskingLayer release]), _maskingLayer = nil; - } - _maskingLayer = [(IJSVGLayer*)self.mask retain]; + _maskingLayer = (IJSVGLayer*)self.mask; self.mask = nil; } else { self.mask = _maskingLayer; - (void)([_maskingLayer release]), _maskingLayer = nil; + _maskingLayer = nil; } } diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGPatternLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGPatternLayer.m index b68c42a..51a62e2 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGPatternLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGPatternLayer.m @@ -20,13 +20,6 @@ @implementation IJSVGPatternLayer -- (void)dealloc -{ - (void)([_pattern release]), _pattern = nil; - (void)([_patternNode release]), _patternNode = nil; - [super dealloc]; -} - - (BOOL)requiresBackingScaleHelp { return YES; @@ -35,7 +28,7 @@ void IJSVGPatternDrawingCallBack(void* info, CGContextRef ctx) { // reassign the layer - IJSVGPatternLayer* layer = (IJSVGPatternLayer*)info; + IJSVGPatternLayer* layer = (__bridge IJSVGPatternLayer*)info; CGSize size = layer.cellSize; CGContextSaveGState(ctx); CGRect rect = CGRectMake(0.f, 0.f, size.width, size.height); @@ -109,7 +102,7 @@ void IJSVGPatternDrawingCallBack(void* info, CGContextRef ctx) if(_patternNode.viewBox != nil && _patternNode.viewBox.isZeroRect == NO) { if(_patternNode.units == IJSVGUnitObjectBoundingBox) { IJSVGUnitRect* viewBox = nil; - viewBox = [[_patternNode.viewBox copyByConvertingToUnitsLengthType:IJSVGUnitLengthTypePercentage] autorelease]; + viewBox = [_patternNode.viewBox copyByConvertingToUnitsLengthType:IJSVGUnitLengthTypePercentage]; _viewBox = [viewBox computeValue:rect.size]; } } diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGRootLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGRootLayer.m index 45f5555..83aed73 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGRootLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGRootLayer.m @@ -14,7 +14,7 @@ { if(self.viewBox != nil) { CGRect viewBox = [self.viewBox computeValue:CGSizeZero]; - __block IJSVGRootLayer* weakSelf = self; + __weak IJSVGRootLayer* weakSelf = self; IJSVGViewBoxDrawingBlock drawingBlock = ^(CGSize size) { // we have to make sure we set the backing scale factor once // we know how scale this will be drawn at @@ -43,7 +43,7 @@ - (void)propagateBackingScalePropertiesToSublayers { - __block IJSVGRootLayer* weakSelf = self; + __weak IJSVGRootLayer* weakSelf = self; for(CALayer* layer in self.sublayers) { [IJSVGLayer recursivelyWalkLayer:layer withBlock:^(CALayer* propLayer, BOOL *stop) { diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.m index b1ae5ad..150a8f5 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.m @@ -11,16 +11,6 @@ @implementation IJSVGShapeLayer -- (void)dealloc -{ - (void)([_filter release]), _filter = nil; - (void)([_clipLayer release]), _clipLayer = nil; - (void)([_maskLayer release]), _maskLayer = nil; - (void)([_maskingLayer release]), _maskingLayer = nil; - (void)([_clipRule release]), _clipRule = nil; - [super dealloc]; -} - - (CALayer *)rootLayer { return [IJSVGLayer rootLayerForLayer:self]; @@ -97,14 +87,11 @@ } _convertMasksToPaths = flag; if (flag == YES) { - if (_maskingLayer != nil) { - (void)([_maskingLayer release]), _maskingLayer = nil; - } - _maskingLayer = [(IJSVGLayer*)self.mask retain]; + _maskingLayer = (IJSVGLayer*)self.mask; self.mask = nil; } else { self.mask = _maskingLayer; - (void)([_maskingLayer release]), _maskingLayer = nil; + _maskingLayer = nil; } } diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGTransformLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGTransformLayer.m index c375302..15bbdaa 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGTransformLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGTransformLayer.m @@ -24,16 +24,6 @@ @synthesize filter = _filter; @synthesize innerBoundingBox; -- (void)dealloc -{ - (void)[_filter release], _filter = nil; - (void)[_maskLayer release], _maskLayer = nil; - (void)[_fillRule release], _fillRule = nil; - (void)[_clipRule release], _clipRule = nil; - (void)[_clipLayer release], _clipLayer = nil; - [super dealloc]; -} - - (CALayer *)referencedLayer { return self.sublayers.firstObject; diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h index 341fd54..c6cc96f 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h @@ -12,7 +12,7 @@ } -@property (nonatomic, retain) NSColor* color; +@property (nonatomic, strong) NSColor* color; @property (nonatomic, assign) BOOL isNoneOrTransparent; + (IJSVGNode*)colorNodeWithColor:(NSColor*)color; diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.m index b574e2e..451d62a 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.m @@ -12,13 +12,12 @@ - (void)dealloc { - (void)[_color release], _color = nil; - [super dealloc]; + (void)_color, _color = nil; } + (IJSVGNode*)colorNodeWithColor:(NSColor *)color { - return [[[self alloc] initWithColor:color] autorelease]; + return [[self alloc] initWithColor:color]; } - (id)initWithColor:(NSColor*)color { diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGDef.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGDef.m index eb438b5..a8188b8 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGDef.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGDef.m @@ -10,12 +10,6 @@ @implementation IJSVGDef -- (void)dealloc -{ - (void)([_dict release]), _dict = nil; - [super dealloc]; -} - - (id)init { if ((self = [super init]) != nil) { diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m index b1ef82b..88b79a0 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m @@ -36,9 +36,6 @@ CIContext* context = manager.CIContext; CGImageRef outputImage = [context createCGImage:image fromRect:image.extent]; -// NSImage* nimage = [[[NSImage alloc] initWithCGImage:outputImage -// size:NSMakeSize(CGImageGetWidth(outputImage), -// CGImageGetHeight(outputImage))] autorelease]; layer.filter = filter; return outputImage; } diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.m index 7a643ba..a3af479 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.m @@ -15,9 +15,9 @@ static NSDictionary* _elementClassMap = nil; + (void)load { - _elementClassMap = [@{ + _elementClassMap = @{ @"fegaussianblur": IJSVGFilterEffectGaussianBlur.class - } retain]; + }; } + (Class)effectClassForElementName:(NSString*)name @@ -71,13 +71,6 @@ static NSDictionary* _elementClassMap = nil; return IJSVGFilterEffectEdgeModeNone; } -- (void)dealloc -{ - (void)[_primitiveReference release], _primitiveReference = nil; - (void)[_stdDeviation release], _stdDeviation = nil; - [super dealloc]; -} - - (CIImage*)processImage:(CIImage*)image { return image; diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGForeignObject.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGForeignObject.m index cf4dc7d..f12153f 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGForeignObject.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGForeignObject.m @@ -10,10 +10,4 @@ @implementation IJSVGForeignObject -- (void)dealloc -{ - (void)([_requiredExtension release]), _requiredExtension = nil; - [super dealloc]; -} - @end diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGradient.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGradient.m index a9c60fa..2c2cdbe 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGradient.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGradient.m @@ -15,29 +15,21 @@ - (void)dealloc { - (void)([_x1 release]), _x1 = nil; - (void)([_x2 release]), _x2 = nil; - (void)([_y1 release]), _y1 = nil; - (void)([_y2 release]), _y2 = nil; - (void)([_gradient release]), _gradient = nil; - (void)([_privateColorList release]), _privateColorList = nil; if (_CGGradient != nil) { CGGradientRelease(_CGGradient); } - [super dealloc]; } - (id)copyWithZone:(NSZone*)zone { IJSVGGradient* clone = [super copyWithZone:zone]; - clone.gradient = [[self.gradient copy] autorelease]; + clone.gradient = [self.gradient copy]; return clone; } - (void)setColorList:(IJSVGColorList*)list { - (void)([_privateColorList release]), _privateColorList = nil; - _privateColorList = list.retain; + _privateColorList = list; if (_CGGradient != nil) { CGGradientRelease(_CGGradient); _CGGradient = nil; @@ -48,7 +40,7 @@ colors:(NSArray**)someColors { NSArray* stops = gradient.children; - NSMutableArray* colors = [[[NSMutableArray alloc] initWithCapacity:stops.count] autorelease]; + NSMutableArray* colors = [[NSMutableArray alloc] initWithCapacity:stops.count]; CGFloat* stopsParams = (CGFloat*)malloc(stops.count * sizeof(CGFloat)); NSInteger i = 0; @@ -72,7 +64,7 @@ - (IJSVGColorList*)colorList { - IJSVGColorList* sheet = [[[IJSVGColorList alloc] init] autorelease]; + IJSVGColorList* sheet = [[IJSVGColorList alloc] init]; NSInteger num = self.gradient.numberOfColorStops; for (NSInteger i = 0; i < num; i++) { NSColor* color; diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGroup.h b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGroup.h index 6866fd5..a519aa6 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGroup.h +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGroup.h @@ -16,7 +16,7 @@ NSMutableArray* _children; } -@property (nonatomic, readonly) NSArray* children; +@property (weak, nonatomic, readonly) NSArray* children; - (void)addChild:(IJSVGNode*)child; diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGroup.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGroup.m index 2cb13de..2641170 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGroup.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGGroup.m @@ -12,8 +12,7 @@ - (void)dealloc { - (void)([_children release]), _children = nil; - [super dealloc]; + (void)(_children), _children = nil; } - (id)init @@ -27,7 +26,7 @@ - (void)prepareFromCopy { if(_children != nil) { - (void)[_children release], _children = nil; + (void)_children, _children = nil; } _children = [[NSMutableArray alloc] init]; } @@ -37,8 +36,8 @@ IJSVGGroup* node = [super copyWithZone:zone]; [node prepareFromCopy]; - for (IJSVGNode* childNode in _children) { - childNode = [[childNode copy] autorelease]; + for (__strong IJSVGNode* childNode in _children) { + childNode = [childNode copy]; childNode.parentNode = node; [node addChild:childNode]; } diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGImage.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGImage.m index 3f8d1c7..fd8df05 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGImage.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGImage.m @@ -15,8 +15,6 @@ - (void)dealloc { (void)(CGImageRelease(CGImage)), CGImage = nil; - (void)([_image release]), _image = nil; - [super dealloc]; } - (void)loadFromString:(NSString*)encodedString @@ -43,16 +41,13 @@ } // set the image against the container - NSImage* anImage = [[[NSImage alloc] initWithData:data] autorelease]; + NSImage* anImage = [[NSImage alloc] initWithData:data]; [self setImage:anImage]; } - (void)setImage:(NSImage*)anImage { - if (_image != nil) { - (void)([_image release]), _image = nil; - } - _image = [anImage retain]; + _image = anImage; _intrinsicSize = (CGSize)_image.size; if (CGImage != nil) { diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGLinearGradient.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGLinearGradient.m index f09edad..027dba1 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGLinearGradient.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGLinearGradient.m @@ -36,7 +36,7 @@ colorSpace:IJSVGColor.defaultColorSpace]; free(stopsParams); - return [grad autorelease]; + return grad; } - (void)drawInContextRef:(CGContextRef)ctx diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.m index 00aff73..2cfd1bb 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.m @@ -19,32 +19,6 @@ - (void)dealloc { (void)free(_strokeDashArray), _strokeDashArray = NULL; - (void)([_x release]), _x = nil; - (void)([_y release]), _y = nil; - (void)([_width release]), _width = nil; - (void)([_height release]), _height = nil; - (void)([_opacity release]), _opacity = nil; - (void)([_offset release]), _offset = nil; - (void)([_fillOpacity release]), _fillOpacity = nil; - (void)([_strokeOpacity release]), _strokeOpacity = nil; - (void)([_strokeWidth release]), _strokeWidth = nil; - (void)([_strokeDashOffset release]), _strokeDashOffset = nil; - (void)([_unicode release]), _unicode = nil; - (void)([_fill release]), _fill = nil; - (void)([_stroke release]), _stroke = nil; - (void)([_transforms release]), _transforms = nil; - (void)([_identifier release]), _identifier = nil; - (void)([_name release]), _name = nil; - (void)([_title release]), _title = nil; - (void)([_desc release]), _desc = nil; - (void)([_className release]), _className = nil; - (void)([_classNameList release]), _classNameList = nil; - (void)([_clipPath release]), _clipPath = nil; - (void)([_svg release]), _svg = nil; - (void)([_mask release]), _mask = nil; - (void)([_viewBox release]), _viewBox = nil; - (void)([_filter release]), _filter = nil; - [super dealloc]; } + (IJSVGNodeType)typeForString:(NSString*)string @@ -284,15 +258,13 @@ - (void)setFill:(IJSVGNode*)fill { NSAssert([fill matchesTraits:IJSVGNodeTraitPaintable] || fill == nil, @"Fill must a paintable node."); - (void)[_fill release], _fill = nil; - _fill = [fill retain]; + _fill = fill; } - (void)setStroke:(IJSVGNode*)stroke { NSAssert([stroke matchesTraits:IJSVGNodeTraitPaintable]|| stroke == nil, @"Stroke must be a paintable node."); - (void)[_stroke release], _stroke = nil; - _stroke = [stroke retain]; + _stroke = stroke; } // winding rule can inherit.. @@ -356,7 +328,7 @@ - (NSArray*)lineDashPattern { - NSMutableArray* arr = [[[NSMutableArray alloc] initWithCapacity:self.strokeDashArrayCount] autorelease]; + NSMutableArray* arr = [[NSMutableArray alloc] initWithCapacity:self.strokeDashArrayCount]; for (NSInteger i = 0; i < self.strokeDashArrayCount; i++) { [arr addObject:@((CGFloat)self.strokeDashArray[i])]; } diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGPath.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGPath.m index 2a391d2..83a18db 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGPath.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGPath.m @@ -15,7 +15,6 @@ if(_path != NULL) { (void)CGPathRelease(_path), _path = NULL; } - [super dealloc]; } - (id)init diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRadialGradient.h b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRadialGradient.h index d8d6179..ed0a8f4 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRadialGradient.h +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRadialGradient.h @@ -11,12 +11,12 @@ @interface IJSVGRadialGradient : IJSVGGradient -@property (nonatomic, retain) IJSVGUnitLength* cx; -@property (nonatomic, retain) IJSVGUnitLength* cy; -@property (nonatomic, retain) IJSVGUnitLength* fx; -@property (nonatomic, retain) IJSVGUnitLength* fy; -@property (nonatomic, retain) IJSVGUnitLength* fr; -@property (nonatomic, retain) IJSVGUnitLength* r; +@property (nonatomic, strong) IJSVGUnitLength* cx; +@property (nonatomic, strong) IJSVGUnitLength* cy; +@property (nonatomic, strong) IJSVGUnitLength* fx; +@property (nonatomic, strong) IJSVGUnitLength* fy; +@property (nonatomic, strong) IJSVGUnitLength* fr; +@property (nonatomic, strong) IJSVGUnitLength* r; + (NSGradient*)parseGradient:(NSXMLElement*)element gradient:(IJSVGRadialGradient*)gradient; diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRadialGradient.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRadialGradient.m index 0dec61d..9ddb2dc 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRadialGradient.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRadialGradient.m @@ -13,13 +13,12 @@ - (void)dealloc { - (void)([_cx release]), _cx = nil; - (void)([_cy release]), _cy = nil; - (void)([_fx release]), _fx = nil; - (void)([_fy release]), _fy = nil; - (void)([_fr release]), _fr = nil; - (void)([_r release]), _r = nil; - [super dealloc]; + (void)(_cx), _cx = nil; + (void)(_cy), _cy = nil; + (void)(_fx), _fx = nil; + (void)(_fy), _fy = nil; + (void)(_fr), _fr = nil; + (void)(_r), _r = nil; } - (id)copyWithZone:(NSZone*)zone @@ -91,9 +90,9 @@ CGFloat* colorStops = [self.class computeColorStops:gradient colors:&colors]; - NSGradient* ret = [[[NSGradient alloc] initWithColors:colors + NSGradient* ret = [[NSGradient alloc] initWithColors:colors atLocations:colorStops - colorSpace:IJSVGColor.defaultColorSpace] autorelease]; + colorSpace:IJSVGColor.defaultColorSpace]; free(colorStops); return ret; } diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRootNode.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRootNode.m index 67e33e5..d2f10ca 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRootNode.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGRootNode.m @@ -10,12 +10,6 @@ @implementation IJSVGRootNode -- (void)dealloc -{ - (void)[_intrinsicSize release], _intrinsicSize = nil; - [super dealloc]; -} - - (instancetype)init { if((self = [super init]) != nil) { diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGText.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGText.m index fac42b9..c6d1c66 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGText.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGText.m @@ -10,12 +10,6 @@ @implementation IJSVGText -- (void)dealloc -{ - (void)([_text release]), _text = nil; - [super dealloc]; -} - - (IJSVGText*)copyWithZone:(NSZone*)zone { IJSVGText* node = [super copyWithZone:zone]; diff --git a/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.m b/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.m index 141c6f5..cd30f26 100644 --- a/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.m +++ b/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.m @@ -78,7 +78,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; + (void)load { - _IJSVGAttributeDictionaryFloats = [@{ + _IJSVGAttributeDictionaryFloats = @{ IJSVGAttributeX : @"x", IJSVGAttributeY : @"y", IJSVGAttributeWidth : @"width", @@ -87,22 +87,22 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; IJSVGAttributeStrokeOpacity : @"strokeOpacity", IJSVGAttributeStrokeWidth : @"strokeWidth", IJSVGAttributeStrokeDashOffset : @"strokeDashOffset", - IJSVGAttributeFillOpacity : @"fillOpacity" } retain]; - _IJSVGAttributeDictionaryNodes = [@{ + IJSVGAttributeFillOpacity : @"fillOpacity" }; + _IJSVGAttributeDictionaryNodes = @{ IJSVGAttributeClipPath : @"clipPath", - IJSVGAttributeMask : @"mask" } retain]; - _IJSVGAttributeDictionaryUnits = [@{ + IJSVGAttributeMask : @"mask" }; + _IJSVGAttributeDictionaryUnits = @{ IJSVGAttributeGradientUnits : @"units", IJSVGAttributeMaskUnits : @"units", IJSVGAttributePatternUnits : @"units", IJSVGAttributeMaskContentUnits : @"contentUnits", IJSVGAttributePatternContentUnits : @"contentUnits" - } retain]; - _IJSVGAttributeDictionaryTransforms = [@{ + }; + _IJSVGAttributeDictionaryTransforms = @{ IJSVGAttributeTransform : @"transforms", IJSVGAttributeGradientTransform : @"transforms", IJSVGAttributePatternTransform : @"transforms" - } retain]; + }; } + (IJSVGParser*)groupForFileURL:(NSURL*)aURL @@ -124,17 +124,9 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; error:(NSError**)error delegate:(id)delegate { - return [[[self.class alloc] initWithFileURL:aURL + return [[self.class alloc] initWithFileURL:aURL error:error - delegate:delegate] autorelease]; -} - -- (void)dealloc -{ - (void)([_detachedElements release]), _detachedElements = nil; - (void)([_rootNode release]), _rootNode = nil; - (void)([_styleSheet release]), _styleSheet = nil; - [super dealloc]; + delegate:delegate]; } - (id)initWithSVGString:(NSString*)string @@ -177,14 +169,12 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; anError = nil; if (![self _validateParse:&anError]) { *error = anError; - (void)([_document release]), _document = nil; - (void)([self release]), self = nil; return nil; } // we have actually finished with the document at this point // so just get rid of it - (void)([_document release]), _document = nil; + _document = nil; } return self; } @@ -193,9 +183,9 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; { @try { NSError* error; - NSXMLDocument* doc = [[[NSXMLDocument alloc] initWithData:data - options:0 - error:&error] autorelease]; + NSXMLDocument* doc = [[NSXMLDocument alloc] initWithData:data + options:0 + error:&error]; return doc != nil && error == nil; } @catch (NSException* exception) { } @@ -227,12 +217,10 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; error:(NSError**)error { if (error) { - *error = [[[NSError alloc] initWithDomain:IJSVGErrorDomain - code:code - userInfo:nil] autorelease]; + *error = [[NSError alloc] initWithDomain:IJSVGErrorDomain + code:code + userInfo:nil]; } - (void)([_document release]), _document = nil; - (void)([self release]), self = nil; return nil; } @@ -248,9 +236,9 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; _rootNode.bounds.size.width == 0 || _rootNode.bounds.size.height == 0) { if (error != NULL) { - *error = [[[NSError alloc] initWithDomain:IJSVGErrorDomain - code:IJSVGErrorInvalidViewBox - userInfo:nil] autorelease]; + *error = [[NSError alloc] initWithDomain:IJSVGErrorDomain + code:IJSVGErrorInvalidViewBox + userInfo:nil]; } return NO; } @@ -326,7 +314,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; CGRect computedBounds = CGRectZero; IJSVGUnitType unitType = [node contentUnitsWithReferencingNodeBounds:&computedBounds]; NSMutableDictionary* attributes = nil; - attributes = [[[NSMutableDictionary alloc] initWithCapacity:element.attributes.count] autorelease]; + attributes = [[NSMutableDictionary alloc] initWithCapacity:element.attributes.count]; for(NSXMLNode* attributeNode in element.attributes) { attributes[attributeNode.name] = attributeNode.stringValue; } @@ -361,7 +349,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; node.identifier = value; [self detachElement:element withIdentifier:value - parentNode:node.parentNode ?: _rootNode]; + parentNode:node.parentNode ?: self->_rootNode]; }); // class list @@ -407,7 +395,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; // transforms IJSVGAttributesParse(_IJSVGAttributeDictionaryTransforms, ^id (NSString* value) { - NSMutableArray* transforms = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* transforms = [[NSMutableArray alloc] init]; [transforms addObjectsFromArray:[IJSVGTransform transformsForString:value]]; if(node.transforms != nil) { [transforms addObjectsFromArray:node.transforms]; @@ -762,7 +750,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; withIdentifier:(NSString*)identifier parentNode:(IJSVGNode*)parentNode { - element = [element.copy autorelease]; + element = element.copy; [element detach]; // its important that we remove the ID attribute @@ -770,7 +758,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; NSMutableDictionary* scopedDetachedElements = nil; if((scopedDetachedElements = [_detachedElements objectForKey:parentNode]) == nil) { - scopedDetachedElements = [[[NSMutableDictionary alloc] init] autorelease]; + scopedDetachedElements = [[NSMutableDictionary alloc] init]; [_detachedElements setObject:scopedDetachedElements forKey:parentNode]; } scopedDetachedElements[identifier] = element; @@ -812,10 +800,10 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (NSXMLElement*)mergedElement:(NSXMLElement*)element withReferenceElement:(NSXMLElement*)reference { - NSXMLElement* copy = [[reference copy] autorelease]; - for (NSXMLNode* attribute in element.attributes) { + NSXMLElement* copy = [reference copy]; + for (__strong NSXMLNode* attribute in element.attributes) { [copy removeAttributeForName:attribute.name]; - attribute = [[attribute copy] autorelease]; + attribute = [attribute copy]; [copy addAttribute:attribute]; } return copy; @@ -832,7 +820,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseFilterElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGFilter* node = [[[IJSVGFilter alloc] init] autorelease]; + IJSVGFilter* node = [[IJSVGFilter alloc] init]; node.type = IJSVGNodeTypeFilter; node.name = element.localName; @@ -849,7 +837,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; parentNode:(IJSVGNode*)parentNode { Class effectClass = [IJSVGFilterEffect effectClassForElementName:element.localName]; - IJSVGFilterEffect* node = [[[effectClass alloc] init] autorelease]; + IJSVGFilterEffect* node = [[effectClass alloc] init]; node.type = IJSVGNodeTypeFilterEffect; node.name = element.localName; @@ -870,7 +858,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseLinearGradientElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGLinearGradient* node = [[[IJSVGLinearGradient alloc] init] autorelease]; + IJSVGLinearGradient* node = [[IJSVGLinearGradient alloc] init]; node.units = IJSVGUnitObjectBoundingBox; node.type = IJSVGNodeTypeLinearGradient; node.name = element.localName; @@ -898,7 +886,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseRadialGradientElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGRadialGradient* node = [[[IJSVGRadialGradient alloc] init] autorelease]; + IJSVGRadialGradient* node = [[IJSVGRadialGradient alloc] init]; node.units = IJSVGUnitObjectBoundingBox; node.type = IJSVGNodeTypeRadialGradient; node.name = element.localName; @@ -925,7 +913,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseStopElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGNode* node = [[[IJSVGNode alloc] init] autorelease]; + IJSVGNode* node = [[IJSVGNode alloc] init]; node.type = IJSVGNodeTypeStop; node.name = element.localName; @@ -943,7 +931,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parsePathElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGPath* node = [[[IJSVGPath alloc] init] autorelease]; + IJSVGPath* node = [[IJSVGPath alloc] init]; node.type = IJSVGNodeTypePath; node.name = element.localName; node.parentNode = parentNode; @@ -970,7 +958,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseLineElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGPath* node = [[[IJSVGPath alloc] init] autorelease]; + IJSVGPath* node = [[IJSVGPath alloc] init]; node.type = IJSVGNodeTypeLine; node.primitiveType = kIJSVGPrimitivePathTypeLine; node.parentNode = parentNode; @@ -1008,7 +996,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parsePolyLineElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGPath* node = [[[IJSVGPath alloc] init] autorelease]; + IJSVGPath* node = [[IJSVGPath alloc] init]; node.type = IJSVGNodeTypePolyline; node.primitiveType = kIJSVGPrimitivePathTypePolyLine; node.parentNode = parentNode; @@ -1033,7 +1021,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parsePolygonElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGPath* node = [[[IJSVGPath alloc] init] autorelease]; + IJSVGPath* node = [[IJSVGPath alloc] init]; node.type = IJSVGNodeTypePolygon; node.primitiveType = kIJSVGPrimitivePathTypePolygon; node.parentNode = parentNode; @@ -1058,7 +1046,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseEllipseElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGPath* node = [[[IJSVGPath alloc] init] autorelease]; + IJSVGPath* node = [[IJSVGPath alloc] init]; node.name = element.localName; node.primitiveType = kIJSVGPrimitivePathTypeEllipse; node.type = IJSVGNodeTypeEllipse; @@ -1109,7 +1097,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseCircleElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGPath* node = [[[IJSVGPath alloc] init] autorelease]; + IJSVGPath* node = [[IJSVGPath alloc] init]; node.name = element.localName; node.primitiveType = kIJSVGPrimitivePathTypeCircle; node.type = IJSVGNodeTypeCircle; @@ -1156,7 +1144,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; parentNode:(IJSVGNode*)parentNode nodeType:(IJSVGNodeType)nodeType { - IJSVGGroup* node = [[[IJSVGGroup alloc] init] autorelease]; + IJSVGGroup* node = [[IJSVGGroup alloc] init]; node.type = nodeType; node.name = element.localName; node.parentNode = parentNode; @@ -1203,7 +1191,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseSVGElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGRootNode* node = [[[IJSVGRootNode alloc] init] autorelease]; + IJSVGRootNode* node = [[IJSVGRootNode alloc] init]; [self parseSVGElement:element ontoNode:node parentNode:parentNode]; @@ -1213,7 +1201,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseRectElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGPath* node = [[[IJSVGPath alloc] init] autorelease]; + IJSVGPath* node = [[IJSVGPath alloc] init]; node.type = IJSVGNodeTypeRect; node.primitiveType = kIJSVGPrimitivePathTypeRect; node.name = element.localName; @@ -1284,7 +1272,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; { CGRect bounds = CGRectZero; IJSVGUnitType units = [parentNode contentUnitsWithReferencingNodeBounds:&bounds]; - IJSVGImage* node = [[[IJSVGImage alloc] init] autorelease]; + IJSVGImage* node = [[IJSVGImage alloc] init]; node.type = IJSVGNodeTypeImage; node.name = element.localName; node.parentNode = parentNode; @@ -1323,7 +1311,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; parentNode:parentNode]; // its important that we remove the xlink attribute or hell breaks loose - NSXMLElement* elementWithoutXLink = [element.copy autorelease]; + NSXMLElement* elementWithoutXLink = element.copy; [elementWithoutXLink removeAttributeForName:IJSVGAttributeXLink]; NSXMLElement* shadowElement = [self mergedElement:elementWithoutXLink withReferenceElement:detachedElement]; @@ -1335,7 +1323,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parsePatternElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGPattern* node = [[[IJSVGPattern alloc] init] autorelease]; + IJSVGPattern* node = [[IJSVGPattern alloc] init]; node.type = IJSVGNodeTypePattern; node.name = element.localName; node.parentNode = parentNode; @@ -1360,7 +1348,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseClipPathElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGGroup* node = [[[IJSVGGroup alloc] init] autorelease]; + IJSVGGroup* node = [[IJSVGGroup alloc] init]; node.type = IJSVGNodeTypeClipPath; node.name = element.localName; node.parentNode = parentNode; @@ -1380,7 +1368,7 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; - (IJSVGNode*)parseMaskElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { - IJSVGGroup* node = [[[IJSVGGroup alloc] init] autorelease]; + IJSVGGroup* node = [[IJSVGGroup alloc] init]; node.type = IJSVGNodeTypeMask; node.name = element.localName; node.parentNode = parentNode; diff --git a/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGLayerTree.m b/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGLayerTree.m index aee9884..16d43a8 100644 --- a/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGLayerTree.m +++ b/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGLayerTree.m @@ -31,13 +31,6 @@ @synthesize style = _style; -- (void)dealloc -{ - (void)([_viewPortStack release]), _viewPortStack = nil; - (void)([_style release]), _style = nil; - [super dealloc]; -} - - (id)init { if ((self = [super init]) != nil) { @@ -379,7 +372,7 @@ - (NSArray*>*)drawableLayersForNodes:(NSArray*)nodes { NSMutableArray*>* layers = nil; - layers = [[[NSMutableArray alloc] initWithCapacity:nodes.count] autorelease]; + layers = [[NSMutableArray alloc] initWithCapacity:nodes.count]; for(IJSVGNode* node in nodes) { CALayer* layer = [self drawableLayerForNode:node]; if(layer != nil) { @@ -549,16 +542,16 @@ - (IJSVGLayer*)drawableLayerForImageNode:(IJSVGImage*)image { - IJSVGImageLayer* layer = [[[IJSVGImageLayer alloc] initWithImage:image] autorelease]; - // make sure we set the width and height correctly, - // as this may not be exactly the same as the size of the - // given image - CGRect frame = layer.frame; - frame.size.width = image.width.value; - frame.size.height = image.height.value; - layer.frame = frame; - [layer setNeedsLayout]; - return layer; + IJSVGImageLayer* layer = [[IJSVGImageLayer alloc] initWithImage:image]; + // make sure we set the width and height correctly, + // as this may not be exactly the same as the size of the + // given image + CGRect frame = layer.frame; + frame.size.width = image.width.value; + frame.size.height = image.height.value; + layer.frame = frame; + [layer setNeedsLayout]; + return layer; } @end diff --git a/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGRenderingStyle.m b/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGRenderingStyle.m index d4ba601..1011a36 100644 --- a/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGRenderingStyle.m +++ b/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGRenderingStyle.m @@ -10,14 +10,6 @@ @implementation IJSVGRenderingStyle -- (void)dealloc -{ - (void)([_fillColor release]), _fillColor = nil; - (void)([_strokeColor release]), _strokeColor = nil; - (void)([_colorList release]), _colorList = nil; - [super dealloc]; -} - - (id)init { if ((self = [super init]) != nil) { @@ -34,8 +26,7 @@ static NSArray* array = nil; if (array == nil) { array = @[ @"lineCapStyle", @"lineJoinStyle", @"lineWidth", - @"colorList", @"fillColor", @"strokeColor" ] - .retain; + @"colorList", @"fillColor", @"strokeColor" ]; } return array; } diff --git a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyle.m b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyle.m index c898520..38131aa 100644 --- a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyle.m +++ b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyle.m @@ -11,12 +11,6 @@ @implementation IJSVGStyle -- (void)dealloc -{ - (void)([_dict release]), _dict = nil; - [super dealloc]; -} - - (id)init { if ((self = [super init]) != nil) { @@ -44,7 +38,7 @@ + (IJSVGStyle*)parseStyleString:(NSString*)string { - IJSVGStyle* style = [[[self.class alloc] init] autorelease]; + IJSVGStyle* style = [[self.class alloc] init]; NSInteger length = string.length; NSInteger index = 0; NSString* key = nil; @@ -111,10 +105,10 @@ - (IJSVGStyle*)mergedStyle:(IJSVGStyle*)style { // create the new style - IJSVGStyle* newStyle = [[[IJSVGStyle alloc] init] autorelease]; + IJSVGStyle* newStyle = [[IJSVGStyle alloc] init]; // grab the current style - NSMutableDictionary* dict = [[[self properties] mutableCopy] autorelease]; + NSMutableDictionary* dict = [[self properties] mutableCopy]; // overwride the style with the new styles [dict addEntriesFromDictionary:[style properties]]; diff --git a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheet.m b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheet.m index e574625..0d894a2 100644 --- a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheet.m +++ b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheet.m @@ -21,24 +21,10 @@ @implementation IJSVGStyleSheetSelectorListItem -- (void)dealloc -{ - (void)([_rule release]), _rule = nil; - (void)([_selector release]), _selector = nil; - [super dealloc]; -} - @end @implementation IJSVGStyleSheet -- (void)dealloc -{ - (void)([_selectors release]), _selectors = nil; - (void)([_rules release]), _rules = nil; - [super dealloc]; -} - - (id)init { if ((self = [super init]) != nil) { @@ -50,20 +36,20 @@ - (NSArray*)selectorsWithSelectorString:(NSString*)string { - NSMutableArray* array = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* array = [[NSMutableArray alloc] init]; // split the string by the comma, as it could be multiple NSArray* comp = [string componentsSeparatedByString:@","]; NSCharacterSet* whiteSpaceCharSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; // create a selector or reuse one already being used - for (NSString* selectorName in comp) { + for (__strong NSString* selectorName in comp) { selectorName = [selectorName stringByTrimmingCharactersInSet:whiteSpaceCharSet]; IJSVGStyleSheetSelector* selector = nil; // create a new selector if not found if ((selector = [_selectors objectForKey:selectorName]) == nil) { - selector = [[[IJSVGStyleSheetSelector alloc] initWithSelectorString:selectorName] autorelease]; + selector = [[IJSVGStyleSheetSelector alloc] initWithSelectorString:selectorName]; if (selector != nil) { [_selectors setObject:selector forKey:selectorName]; @@ -146,7 +132,7 @@ { // append the rule onto the list within // this style sheet - IJSVGStyleSheetRule* aRule = [[[IJSVGStyleSheetRule alloc] init] autorelease]; + IJSVGStyleSheetRule* aRule = [[IJSVGStyleSheetRule alloc] init]; aRule.style = [IJSVGStyle parseStyleString:rule]; aRule.selectors = selectors; [_rules addObject:aRule]; @@ -154,15 +140,15 @@ - (IJSVGStyle*)styleForNode:(IJSVGNode*)node { - IJSVGStyle* style = [[[IJSVGStyle alloc] init] autorelease]; - NSMutableArray* matchedRules = [[[NSMutableArray alloc] init] autorelease]; + IJSVGStyle* style = [[IJSVGStyle alloc] init]; + NSMutableArray* matchedRules = [[NSMutableArray alloc] init]; for (IJSVGStyleSheetRule* rule in _rules) { IJSVGStyleSheetSelector* matchedSelector = nil; if ([rule matchesNode:node selector:&matchedSelector]) { // make a wrapper for the selector with the rule IJSVGStyleSheetSelectorListItem* listItem = nil; - listItem = [[[IJSVGStyleSheetSelectorListItem alloc] init] autorelease]; + listItem = [[IJSVGStyleSheetSelectorListItem alloc] init]; listItem.rule = rule; listItem.selector = matchedSelector; diff --git a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetRule.m b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetRule.m index e26a6e6..a04c44c 100644 --- a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetRule.m +++ b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetRule.m @@ -10,13 +10,6 @@ @implementation IJSVGStyleSheetRule -- (void)dealloc -{ - (void)([_selectors release]), _selectors = nil; - (void)([_style release]), _style = nil; - [super dealloc]; -} - - (BOOL)matchesNode:(IJSVGNode*)node selector:(IJSVGStyleSheetSelector**)matchedSelector { diff --git a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelector.m b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelector.m index 0f66ad6..d867680 100644 --- a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelector.m +++ b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelector.m @@ -242,13 +242,6 @@ BOOL IJSVGStyleSheetMatchSelector(IJSVGNode * node, IJSVGStyleSheetSelectorRaw * return YES; } -- (void)dealloc -{ - (void)([_rawSelectors release]), _rawSelectors = nil; - (void)([selector release]), selector = nil; - [super dealloc]; -} - - (id)initWithSelectorString:(NSString *)string { if((self = [super init]) != nil) @@ -258,7 +251,6 @@ BOOL IJSVGStyleSheetMatchSelector(IJSVGNode * node, IJSVGStyleSheetSelectorRaw * // failed to compile if([self _compile] == NO) { - (void)([self release]), self = nil; return nil; } [self _calculate]; @@ -325,8 +317,8 @@ BOOL IJSVGStyleSheetMatchSelector(IJSVGNode * node, IJSVGStyleSheetSelectorRaw * NSUInteger length = selector.length; - NSMutableArray * sels = [[[NSMutableArray alloc] init] autorelease]; - IJSVGStyleSheetSelectorRaw * rawSelector = [[[IJSVGStyleSheetSelectorRaw alloc] init] autorelease]; + NSMutableArray * sels = [[NSMutableArray alloc] init]; + IJSVGStyleSheetSelectorRaw * rawSelector = [[IJSVGStyleSheetSelectorRaw alloc] init]; for(NSUInteger i = 0; i < length; i++) { unichar c = [selector characterAtIndex:i]; @@ -384,7 +376,7 @@ BOOL IJSVGStyleSheetMatchSelector(IJSVGNode * node, IJSVGStyleSheetSelectorRaw * // reset the raw selector if(!(i == length-1)) { - rawSelector = [[[IJSVGStyleSheetSelectorRaw alloc] init] autorelease]; + rawSelector = [[IJSVGStyleSheetSelectorRaw alloc] init]; } } diff --git a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelectorRaw.h b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelectorRaw.h index 4f07755..8ae9fa6 100644 --- a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelectorRaw.h +++ b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelectorRaw.h @@ -26,7 +26,7 @@ typedef NS_ENUM(NSUInteger, IJSVGStyleSheetSelectorCombinator) { @property (nonatomic, copy) NSString* tag; @property (nonatomic, copy) NSString* identifier; @property (nonatomic, copy) NSString* combinatorString; -@property (nonatomic, retain) NSArray* classes; +@property (nonatomic, strong) NSArray* classes; @property (nonatomic, assign) IJSVGStyleSheetSelectorCombinator combinator; - (void)addClassName:(NSString*)className; diff --git a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelectorRaw.m b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelectorRaw.m index fe21169..d5efc39 100644 --- a/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelectorRaw.m +++ b/Framework/IJSVG/IJSVG/Source/Stylesheets/IJSVGStyleSheetSelectorRaw.m @@ -14,11 +14,10 @@ - (void)dealloc { - (void)([classes release]), classes = nil; - (void)([_identifier release]), _identifier = nil; - (void)([_tag release]), _tag = nil; - (void)([_combinatorString release]), _combinatorString = nil; - [super dealloc]; + (void)(classes), classes = nil; + (void)(_identifier), _identifier = nil; + (void)(_tag), _tag = nil; + (void)(_combinatorString), _combinatorString = nil; } - (id)init diff --git a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGThreadManager.m b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGThreadManager.m index 761fb9a..62f6460 100644 --- a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGThreadManager.m +++ b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGThreadManager.m @@ -32,7 +32,7 @@ static NSMapTable* managerMap; NSMapTable* map = [self mapTable]; @synchronized (map) { if((manager = [map objectForKey:thread]) == nil) { - manager = [[[self alloc] initWithThread:thread] autorelease]; + manager = [[self alloc] initWithThread:thread]; [map setObject:manager forKey:thread]; } } @@ -46,20 +46,16 @@ static NSMapTable* managerMap; - (void)dealloc { - (void)[_userInfo release], _userInfo = nil; - (void)[_thread release], _thread = nil; - (void)[_CIContext release], _CIContext = nil; if(_pathDataStream != NULL) { (void)IJSVGPathDataStreamRelease(_pathDataStream), _pathDataStream = NULL; } - [super dealloc]; } - (id)initWithThread:(NSThread*)thread { if((self = [super init]) != nil) { // store the thread - _thread = thread.retain; + _thread = thread; // listen for teardown of the thread NSNotificationCenter* center = NSNotificationCenter.defaultCenter; @@ -103,7 +99,7 @@ static NSMapTable* managerMap; // management _CIContext = [CIContext contextWithOptions:@{ kCIImageColorSpace: NSNull.null - }].retain; + }]; } return _CIContext; } diff --git a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGTransform.m b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGTransform.m index b5b3b4f..d59561c 100644 --- a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGTransform.m +++ b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGTransform.m @@ -15,7 +15,6 @@ - (void)dealloc { (void)free(_parameters); - [super dealloc]; } - (id)copyWithZone:(NSZone*)zone @@ -63,7 +62,7 @@ BOOL IJSVGAffineTransformScalesAndTranslates(CGAffineTransform transform) + (IJSVGTransform*)transformByTranslatingX:(CGFloat)x y:(CGFloat)y { - IJSVGTransform* transform = [[[self alloc] init] autorelease]; + IJSVGTransform* transform = [[self alloc] init]; transform.command = IJSVGTransformCommandTranslate; transform.parameterCount = 2; CGFloat* params = (CGFloat*)malloc(sizeof(CGFloat) * 2); @@ -76,7 +75,7 @@ BOOL IJSVGAffineTransformScalesAndTranslates(CGAffineTransform transform) + (IJSVGTransform*)transformByScaleX:(CGFloat)x y:(CGFloat)y { - IJSVGTransform* transform = [[[self alloc] init] autorelease]; + IJSVGTransform* transform = [[self alloc] init]; transform.command = IJSVGTransformCommandScale; transform.parameterCount = 2; CGFloat* params = (CGFloat*)malloc(sizeof(CGFloat) * 2); @@ -176,7 +175,7 @@ BOOL IJSVGAffineTransformScalesAndTranslates(CGAffineTransform transform) + (NSArray*)transformsForString:(NSString*)string { NSMutableArray* transforms = nil; - transforms = [[[NSMutableArray alloc] init] autorelease]; + transforms = [[NSMutableArray alloc] init]; const char* charString = string.UTF8String; IJSVGParsingStringMethod** methods = NULL; @@ -193,7 +192,7 @@ BOOL IJSVGAffineTransformScalesAndTranslates(CGAffineTransform transform) // create a new transform object and parse the parameters NSInteger count = 0; - IJSVGTransform* transform = [[[self.class alloc] init] autorelease]; + IJSVGTransform* transform = [[self.class alloc] init]; transform.command = commandType; transform.sort = [self.class sortForTransformCommand:commandType]; transform.parameters = [IJSVGUtils scanFloatsFromCString:method->parameters @@ -442,11 +441,11 @@ BOOL IJSVGAffineTransformScalesAndTranslates(CGAffineTransform transform) { NSArray* trans = [self affineTransformToSVGTransformComponents:transform]; trans = [self filterUselessAffineTransformComponents:trans]; - NSMutableArray* strings = [[[NSMutableArray alloc] initWithCapacity:trans.count] autorelease]; + NSMutableArray* strings = [[NSMutableArray alloc] initWithCapacity:trans.count]; for (NSDictionary* dict in trans) { NSArray* data = dict[@"data"]; NSString* method = dict[@"name"]; - NSMutableArray* dataStrings = [[[NSMutableArray alloc] initWithCapacity:data.count] autorelease]; + NSMutableArray* dataStrings = [[NSMutableArray alloc] initWithCapacity:data.count]; for (NSNumber* number in data) { [dataStrings addObject:IJSVGShortFloatStringWithOptions(number.floatValue, floatingPointOptions)]; @@ -464,11 +463,11 @@ BOOL IJSVGAffineTransformScalesAndTranslates(CGAffineTransform transform) { NSArray* trans = [self affineTransformToSVGTransformComponents:transform]; trans = [self filterUselessAffineTransformComponents:trans]; - NSMutableArray* strings = [[[NSMutableArray alloc] initWithCapacity:trans.count] autorelease]; + NSMutableArray* strings = [[NSMutableArray alloc] initWithCapacity:trans.count]; for (NSDictionary* dict in trans) { NSArray* data = dict[@"data"]; NSString* method = dict[@"name"]; - NSMutableArray* dataStrings = [[[NSMutableArray alloc] initWithCapacity:data.count] autorelease]; + NSMutableArray* dataStrings = [[NSMutableArray alloc] initWithCapacity:data.count]; for (NSNumber* number in data) { [dataStrings addObject:IJSVGShortFloatString(number.floatValue)]; } @@ -510,7 +509,7 @@ BOOL IJSVGAffineTransformScalesAndTranslates(CGAffineTransform transform) + (NSArray*)filterUselessAffineTransformComponents:(NSArray*)components { - NSMutableArray* comps = [[[NSMutableArray alloc] initWithCapacity:components.count] autorelease]; + NSMutableArray* comps = [[NSMutableArray alloc] initWithCapacity:components.count]; NSArray* names = @[ @"translate", @"rotate", @"skewX", @"skewY" ]; for (NSDictionary* transform in components) { NSString* name = transform[@"name"]; @@ -547,7 +546,7 @@ BOOL IJSVGAffineTransformScalesAndTranslates(CGAffineTransform transform) CGFloat rowSum = data[0] * data[1] + data[2] * data[3]; BOOL scaleBefore = rowSum != 0.f || sx == sy; - NSMutableArray* transforms = [[[NSMutableArray alloc] init] autorelease]; + NSMutableArray* transforms = [[NSMutableArray alloc] init]; // tx, ty -> translate if (data[4] != 0.f || data[5] != 0.f) { @@ -585,7 +584,7 @@ BOOL IJSVGAffineTransformScalesAndTranslates(CGAffineTransform transform) } CGFloat angle = MIN(MAX(-1.f, data[0] / sx), 1.f); - NSMutableArray* rotate = [[[NSMutableArray alloc] initWithCapacity:3] autorelease]; + NSMutableArray* rotate = [[NSMutableArray alloc] initWithCapacity:3]; [rotate addObject:@(IJSVGMathToFixed(IJSVGMathAcos(angle), precision) * ((scaleBefore ? 1.f : sy) * data[1] < 0.f ? -1.f : 1.f))]; if (rotate[0].floatValue != 0.f) { diff --git a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitLength.m b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitLength.m index e5b381e..9e9713d 100644 --- a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitLength.m +++ b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitLength.m @@ -20,7 +20,7 @@ + (IJSVGUnitLength*)unitWithFloat:(CGFloat)number { - IJSVGUnitLength* unit = [[[self alloc] init] autorelease]; + IJSVGUnitLength* unit = [[self alloc] init]; unit.value = number; unit.type = IJSVGUnitLengthTypeNumber; return unit; @@ -38,7 +38,7 @@ + (IJSVGUnitLength*)unitWithFloat:(CGFloat)number type:(IJSVGUnitLengthType)type { - IJSVGUnitLength* unit = [[[self alloc] init] autorelease]; + IJSVGUnitLength* unit = [[self alloc] init]; unit.value = number; unit.type = type; return unit; @@ -171,7 +171,7 @@ return nil; } - IJSVGUnitLength* unit = [[[self alloc] init] autorelease]; + IJSVGUnitLength* unit = [[self alloc] init]; unit.value = floats[0]; unit.type = IJSVGUnitLengthTypeNumber; diff --git a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitPoint.m b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitPoint.m index fb73a84..e874d47 100644 --- a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitPoint.m +++ b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitPoint.m @@ -10,17 +10,10 @@ @implementation IJSVGUnitPoint -- (void)dealloc -{ - (void)[_x release], _x = nil; - (void)[_y release], _y = nil; - [super dealloc]; -} - + (IJSVGUnitPoint*)pointWithX:(IJSVGUnitLength*)x y:(IJSVGUnitLength*)y { - IJSVGUnitPoint* point = [[[self alloc] init] autorelease]; + IJSVGUnitPoint* point = [[self alloc] init]; point.x = x; point.y = y; return point; @@ -29,8 +22,8 @@ - (id)copyWithZone:(NSZone*)zone { IJSVGUnitPoint* point = [[self.class alloc] init]; - point.x = [_x.copy autorelease]; - point.y = [_y.copy autorelease]; + point.x = _x.copy; + point.y = _y.copy; return point; } diff --git a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitRect.m b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitRect.m index 581e512..9fe4ee2 100644 --- a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitRect.m +++ b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitRect.m @@ -10,17 +10,10 @@ @implementation IJSVGUnitRect -- (void)dealloc -{ - (void)[_size release], _size = nil; - (void)[_origin release], _origin = nil; - [super dealloc]; -} - + (IJSVGUnitRect*)rectWithOrigin:(IJSVGUnitPoint*)origin size:(IJSVGUnitSize*)size { - IJSVGUnitRect* rect = [[[self alloc] init] autorelease]; + IJSVGUnitRect* rect = [[self alloc] init]; rect.origin = origin; rect.size = size; return rect; @@ -50,8 +43,8 @@ - (id)copyWithZone:(NSZone *)zone { IJSVGUnitRect* rect = [[self.class alloc] init]; - rect.size = [_size.copy autorelease]; - rect.origin = [_origin.copy autorelease]; + rect.size = _size.copy; + rect.origin = _origin.copy; return rect; } diff --git a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitSize.m b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitSize.m index b1f0b14..2e441fe 100644 --- a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitSize.m +++ b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUnitSize.m @@ -10,17 +10,10 @@ @implementation IJSVGUnitSize -- (void)dealloc -{ - (void)[_width release], _width = nil; - (void)[_height release], _height = nil; - [super dealloc]; -} - + (IJSVGUnitSize*)sizeWithWidth:(IJSVGUnitLength*)width height:(IJSVGUnitLength*)height { - IJSVGUnitSize* size = [[[self alloc] init] autorelease]; + IJSVGUnitSize* size = [[self alloc] init]; size.width = width; size.height = height; return size; @@ -29,8 +22,8 @@ - (id)copyWithZone:(NSZone*)zone { IJSVGUnitSize* size = [[self.class alloc] init]; - size.width = [_width.copy autorelease]; - size.height = [_height.copy autorelease]; + size.width = _width.copy; + size.height = _height.copy; return size; } diff --git a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUtils.m b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUtils.m index 33e2826..9e641d7 100644 --- a/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUtils.m +++ b/Framework/IJSVG/IJSVG/Source/Utils/IJSVGUtils.m @@ -130,7 +130,7 @@ NSString* IJSVGCompressFloatParameterArray(NSArray* strings) { char* lastCommandChars = NULL; NSInteger index = 0; - NSMutableString* string = [[[NSMutableString alloc] init] autorelease]; + NSMutableString* string = [[NSMutableString alloc] init]; for (NSString* dataString in strings) { const char* chars = dataString.UTF8String; @@ -547,7 +547,7 @@ CGFloat degrees_to_radians(CGFloat degrees) + (void)logParameters:(CGFloat*)param count:(NSInteger)count { - NSMutableString* str = [[[NSMutableString alloc] init] autorelease]; + NSMutableString* str = [[NSMutableString alloc] init]; for (NSInteger i = 0; i < count; i++) { [str appendFormat:@"%f ", param[i]]; } diff --git a/IJSVGExample/IJSVGExample.xcodeproj/project.pbxproj b/IJSVGExample/IJSVGExample.xcodeproj/project.pbxproj index 5b68a34..a628c89 100644 --- a/IJSVGExample/IJSVGExample.xcodeproj/project.pbxproj +++ b/IJSVGExample/IJSVGExample.xcodeproj/project.pbxproj @@ -23,7 +23,7 @@ 5956658019B62F4600D805FF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5956657F19B62F4600D805FF /* AppDelegate.m */; }; 5956658219B62F4600D805FF /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5956658119B62F4600D805FF /* Images.xcassets */; }; 5956658519B62F4600D805FF /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5956658319B62F4600D805FF /* MainMenu.xib */; }; - 5956659119B62F4700D805FF /* IJSVGExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5956659019B62F4700D805FF /* IJSVGExampleTests.m */; }; + 5956659119B62F4700D805FF /* IJSVGExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5956659019B62F4700D805FF /* IJSVGExampleTests.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 595665DE19B6309C00D805FF /* test.svg in Resources */ = {isa = PBXBuildFile; fileRef = 595665DD19B6309C00D805FF /* test.svg */; }; 595665E119B630B600D805FF /* SVGView.m in Sources */ = {isa = PBXBuildFile; fileRef = 595665E019B630B600D805FF /* SVGView.m */; }; 597AC83322CFD0FC007C0E42 /* home.svg in Resources */ = {isa = PBXBuildFile; fileRef = 597AC83222CFD0FC007C0E42 /* home.svg */; }; @@ -450,7 +450,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = NO; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; @@ -492,7 +492,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = NO; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; @@ -525,6 +525,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = IJSVGExample/IJSVGExample.entitlements; COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = IJSVGExample/Info.plist; @@ -537,6 +538,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = IJSVGExample/IJSVGExample.entitlements; COMBINE_HIDPI_IMAGES = YES; INFOPLIST_FILE = IJSVGExample/Info.plist; @@ -549,6 +551,7 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ENABLE_OBJC_ARC = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", @@ -569,6 +572,7 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ENABLE_OBJC_ARC = YES; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", diff --git a/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate b/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate index ee0ac5d2be9414df0ab475331dfc8fe5b457d564..d91024850eb50cd2defe607ee5310352ddebd865 100644 GIT binary patch literal 187701 zcmeFacYIVu*EoLX-n+YZd+)p1-E8ma1w=@N&>^9h7?K47A&J=p2+e!J0(LA^Q4*Sf zT@eLTkRo6~!GcOrQ9uC|yFQlhxmyAu>cjJXp4Z>+kJp%G@12=5XU?2CbJ|QMG}hHd zo72+X#t?>M1V&;UjEnIw!AQsSNK>@7p?;L3s;PQ%Ej(2?nj0ENIvOTSiBva76&SjC zb)`%?u)JTSHBwWMsPq;_Vflk2-9LZOpp1o02ahTSQtyg(yYmg_{aDs_-XtM{v-Yq{u_Y^oZu1y!ax`a6JaJ&2n%5) zY=oZ(5J4hDWDtc!88L_`Cq@ush_S?VL=7>8m`2nSHxsuI3yDRZ$php;@>TLR@^$hJ@(}qUd6N8y{FMBR{G9xP{F3~N{GR-Q{FVHTgE)MSh$H7{ zIYy3+V>#DxsyGqOM9vh>R89k@k<-j+;k0sQaprMu;4I+W$XUo)#JPiWC+8l{ zy_}_-Wt;~%t2k|(cFuav2F_;ABb+BVPja?!p5<)gZ0Eeh*~!_%*~>Y=Immf~bBOaE z=P2iW&T-CXoXOoyg z^`v@H1ymtbN)4a}QWexNY8*A5s-z}Slc{>DiHcG;P&CC*^Qi^Y9n_uFUDVywebh2) zIkl16L~W)Xp&q3kqaLT8pq`|jrM6PfQ9Jk#^B>_q%72po6#rTNR{nPW4*pL5F8*Hr zKK?=etNcU!H~DY#-{HT{|A2pjf0BQS|0(}0|8xEY{+Il3_}}t>yyS!92kYf(3#b1q%g>1a}DT z6x<`YSFlvDOz?nUm7q<~E?6(vAlNK;MDT>*Nx>Guvx04c?ShvCI|X|Ldj$ss2L*2k z4hfD3-WD7cye~K|I3f5%a7u7Sa8__$a6xcU@QvUH!H6hp<3cC@dBB7WNbN7Y-H<5e^d$ z7mgN=5mpMX6V?bL!dl@JVZE?H7!@`PX9`<|bA|JS^Mwn9w+I&sZx`MnTr9jtxJ0;A zxKj9laJ8^axK6lUxJkHK__**1;WNT5!smtCgf9wT67Cl65$+cr5WX&aLwHztMEIWY zsPLHZxbS1)C&JUhGs1Ji^CD8j5phL45hdb_1R|kGBod1xB85mVGKh>KnH~qAj9lMQ?}>iQW{wB|0oRB6?f& zj_6&{d!nPFW1>@{Peosd&WXMieJA=}^phA9Be7m=5F5oNv00oVwur4_n>bZ$7rVtF zaaf!!&JkZL?kVmi?jtS}SBWQxtHm|qh%|+y4~sX7H;Ffk9}zzx-YR}h{JeOZ_+{~K@gDIp@p179@k#MV;*Z6j zh);<>6@Ml^E&f7$QT(I$CkZA&5?msX2qkujL*kUUByNdE;+6O$en~(Ql%z}YI08w& zq^G2pq>rRb(pS`877$~sh2cJ8YS0Dnj}$4v!q2bT{1&5TQXm=P_js}SaOf# zUdc+y1CnPXTO`j)wo0CpJTKWM*)G{3c|r1`A=(&^G$rMF3Mm);@0Q+k*5Zs}s_J<=u8RniBg z4@oyjAC_*E?vlPN-7VcC-7DQEeMP!odO&(m`l|F0{+;w)>3h=S(i76t(lgSt(yyf# zWqg@HCX|U}VwprHmC0msnL?(NX=N!gi_9r=$wIQQEKQat%a;w24V9J4DrCcC!(}66 zBW0sxqh(`cm9mMlNwR6Odf9Z@4B1RstBjG&m#vVklszC@C3{fzkZiTAP1Y`3BU>wb zSoXN=3E8uYE8Rad? zh042?i-f%r~;~>szg<)>aFUd zDpU1U^;7j%4NwhK4N{e>MytlC#;PW$s#Q}}b*gEq7S(jsovOQ3cdHhw?or*Vx=(e# zYKdy8YMJT*)f&}W)h5+u)zhkHR9jTfs$NvRqw6=;Q8kyfmgXr)@2R;4v+P1;ngUF+8dv_Wl1o1@Lu4$=$Hz*AJaar zeMP%pdq8_o`>OUe?d#e%w1>2BYTwenqdlhmM0-kmPJ3Q^LHoV-2c1MG)yZ^nokFM7 zsdQ?cMyJ*3bS9l$=g|3deqE+6OP8(7(Os+SsT-jisT-vmtsA2os~e{qudCEur>oLM zbalFEx~Q&MH%B*DH&1ti?iSrb-D+K%u3fiAw^p}Kw_dkF_polGZjn`ZN)P1GP337UZU6Nwfe9= zO`opM&}Zti^x66xeXc%FpRezsFV>gn`|11ZEA+$k!}TNdmHO-SGxe?dS^C-fIr_Q! zdHNglw4Tw=*WawaLw~RSKK%pwRr&|@>-8J-FX?yccj;f&@7C|p@73?qzoOr-KcIhI z|F-@E{fGKf`cL(r=}+sw)PH5*87KqaATS6GB7@inPItM zg<+-P0mCZ8gNBC;s|{-nn+;DIo-%ARY&YyM>@n;$95}Q!<1@xB#%GONjn5gMH*Pb&XxwXj-S~#_knxQ1tnqW>7shkO^TrFtFO6RrzcyYp zesBEMgqsMH&?GX6O=^?I6f%WPX{K~jhAGpOWy&_?m~u^drfW<^rZQ7s(@;~nslqhY zG|tpwnr@n5nrUh^%`(k4%`we2%`@F#T41`>bhl}-X}M{IX{Bk6X{~98=>^k^rk6}R zO}k7ln|7P_nD(0XnGTxXGQDRyYWm3ZvFQ`jDbuH>^QH@Cj+txbnJF{hEHDerBD2^m zF-y%#v%zdM+svtEpV@B?n1kkQbB=kSd60Rqd5C$ax!hb~9%deH9$_A79&4^P*P5r8 zo6J#jvw4nruK9lR67y2?GV^lt3iC?y1Ljrc2h9(e*O)h%pD;gZe%`#zyxqLpyvKah z{J!}E^M~eR=HuoQ=9A`+%%7Uina`Uqn7=fCW&Y9pllkWqaf&2Gnj%Y)rzldCDXJ88 ziay1f;z{wQ_)-c}ic*SGN>WNwdZ+YBDNE^_(l4cd%HWg{DdSScr%X(llrlM`G3EM{ zMJczY+?H~C${i_prrecscgo_Fds6OAS(@@-%G#85DUYT+mhyPY)|BT`-b{Hb<#5W8 zl($pfNqINry_BOV@27l_aw6rkl+!8aQ!b=@pYlV>k10Q;{A@uM++wg8EhdZEl47w~ ztQMOk)nd0eEFMePl5NScTx;oR>1F9-DYH~rCRnO1HI|5FqGgh0vZdBC#WK~>V3}^2 zW0`BY$#S#hPRm`E4VH&38!ekGn=Ox69<@AXdED}ZmX)9x$Z(U%$(R!2hX6voi z#nz?PW!BZ!Hfy_elXbIow{?$ouXUgG73+TM0qa5QtJc@7uUp@;9<`pZp0u8^p0$2% zy=eW$Ca?)@BAeJIu}N(*o7|?bDQzm7&StS$Z7!SJ7Ph6?(rx*+ZnmMea$ALMm~FUi zgl(j4lx?(ajBTv#I@=`MWLvGR!PaP-X=}C3vdy~^&e+b{KDT{gJ7+s@``Y%S?I+vs zwm(vNsZ=UIRgkJkRi^q=1F6B(P--|eEj2wgBQ-NMD>XYcKebnCL2B>RKB0Ga_a8XJ*oRs52e17`flop)RU=aQqS5kJF??;!cN*bcCMXgr|f*Y zz%H???MA!F?yx)UF1y+0Wa*vw!apJ0uRNL*|e>6b_|BvX7n~t{}haE>8 zZ#&*`yz6++an$j?>xRfrH%j7b)Pjf#kJpcz;)2|s_Qk^>#jFkhg?ToAGkhpeeC+&^@Z!4 z>%8lN>wDJ^Zi!p!mbv9_gVo}>-M=b+?nnycecBS`&##K_Xzh$ z_bB&h_ZatB_c-@>ccuF}ca3|h`+9eidzO2)dye}?_f76q?g!luxmUZ}-0ki)?zQf9 z?)B~s?#=F}+)ulocW-mQ?B4C(wqdG`hPm+r6JU%M~5 zzjy!Y!99dW=n;9u9<@i~33+zo8ukm9poMC9pWA8E%#P%HH*#JkkH%)8vX!n@M@fOnPmLGMG}HQr6$&E6-yPkFa_w|jSZU-0hr z?(=@&{m^^Nd)#}%d(!)n_hauT-qYR--tWCXcz^UseKMcir|>C#Dxcb?@o9ZJpWbKo zIeb2!-6TkBirTkqT8d)T+p_o(j~-!|WN-)`R?-(KJAzBhcQeP?`U zeV_Zj@SXFW_g(OP>HEs}weLIMzx>FL`vrcXU*uQ$)&8JAG8K45vfHt5D=mY72j6h}}E07(?3FHRy0{MY%f$o8xfzrUhz@Wh3 zz~n$}U`k+Wpe`^iP#?Sw}I~h-v`A(Nl+S; z1?53SP#IJO)j>^A8#D$}gTA0Y7zh>zOM<1r-oZY>vS8m}zhM91fZ)L3(BP{!3Dt^gEs{i1@8_n3oZ|?2tE~jI`~X*OYqs?*5Gr&=Y!jV z+k-oTJA2wcszI__(||o@T=h0!HdCfg5QRCAu7ZV2|~h~BJ@erTS7Bb53iHE)urMqNi^Gzz zG%O3t!-}vntO~2cny@yk3p>Kjuq*5id&1tZFYFJehr5Tb3HJzJ8}1n{3-=8V2#*Vo z4_Ah-3s;3B;mP6J@U(C=JR>|Sd`tMY@a^Hd!;8cBhnIv`40F`C)YToq#Fzw=VlqsL zX+{hz4^54Rh(NK%+JkF3+85J6qMu^<>X`*6<5ksWyK{U8k(j?8>^}##SPUh(<1fF$({{Z zD(2gO88H)P#!@f~X2onYhvw2enxgr%fEI4R?3e>{VlJrS!JM>+7SlZ#Gy>}A=pM9h zJPW?IzNTSDX;am-NTuxB%loUSno!hG-`vztR~KojEGaC>E6UHw45k(3=LfSgvrB`8 zIcb@}f}+y=+>*5PqLQM5N|~zzBD5~7Y8p`$9bOx)olqAUQQJJZytaN)T?9%hWuD7> zisMi@uzYAF+T74o1=VA*)8eY;s!Ev!suol?L-4hO6rE9%=`Z!#&`>v_s;Mm5Yo$zg zsVs)kWks6Vv(p0BoQ$~v>+JOG^o)QtFE3;6+$4Rou%4K26PAtTV7XWxmXCGAx?|U1 zJ+NzO2`!~%w47GZN?Jv$X$`I21Qag73b7)r7%Ra_f$Dv*G9a^_et>SL*U{_ghk@kJ z(pza?rA!7$l}~P%F|cZS?W8Iga{N`tV?k2{2F}(htB*E9pt+$b{z^F@GOeMhwRclh z-wyw6hHWD3CThlyw?C{#ij7t>)ED@4?)QNb-k!bCtdKP#& z1i_oxW|z?GfEn+i1HD)m;{aw!O>F`-ev)bZKBO| z3T>gS8?fuJDr^E)jn!ZgY$9!=Q)xfllP;&Pqgz?($jc*jFy=^2M~4t$@7>hU(iks* zczm={W*%AHP!kCO7X50QLmgE^WzlF$1j>znQC{<=zeb5l!ob4wGf z7t>!riBbNqA#`+-B--`Zbj-IFYr>*fGuA@eX$S43U2Cx!*i0bSEZR+bfJ|PNIH`Z$ zWsE!>W4HZXr37-$zpHcE82^G&@ebp}{C89FZ^-m_Gj$ld5xWVy8M|e4T%Oj0oEjPb z%1*L!VEKTSW>#Pn*Mf*>sIO{jT?5q@VvEKOEWh+_DC|qzMFTNj*yjU~RUj15oEyte^xe zU=!)u%mihuOe$)a*4Pw@0umsDtEa|xhA6vJu!YgWRu;85wuu)*Tk4x@+1*2NdB-vS zxN=y~D?2PzOz@_$ayKJCFJR5h%$qy+aBMq$2HUcl?iQc*t=MzpJLb2bsi_L4b}RNg zwg|S{*kioOc5KIL`kHu?7qORy4J0Wd}JN62; zpDv__vMWk|eM_XNb#N8C1p+Cfmo~j|6Jx|3T-6Nk>yw~f#}2cL^$qM0_9pfgT|^ht zC3NXp>EJKKy8?w^6G}hNYUhmhA1nsO`sbzmsCYtD;mn` zL2N^!&=3}jB35S@6GMpI@*3)asc=sFJ&0W0U&l^Rde-Zb_tfZPMgqB zS6e+aGBMH=sjrR$tC$Ey?_wWeA7h_jr?5{!Tlow-4GBSKvCpwDMpe~UPi|m2XH=|* zib&J6QPWt6MOD$rXm+91#E>2xD~@4C52pK3G)51ihrA8Y&SMv_FR`xx-ZAVVaCT%S z>><^)&Be9R#=5Fj5F!A5B+zae%QO|uk(tf(Kxp3oFf{%a`wshl6evv5ST%Y8Fx9lG z`YPDbN*kIgCc~CglVF4&v7cf&R*9t^hr0&*5&Ici1S>oK9A|)kVZX+gSO;x}uykby z*N**$E&8j%t0QQALwzLH4?+m9l%-rg2eE!SO;bA}*be_qt-%StLR=&SzCt`iAwCk& z74$HAI6Y!55+N~?AQ3&19!-ydPv9$6eEG(dq{3EqjYIkw(62vmRmV=qz6KT?Rv+i$ zD=X{bFd{X>$~qS%@zEeHrdhq39u=qTLS$%XfDN6MVT0LhyrGfA+KF*IT}h80B&X;J$xJX`5X-7zvgTFq*&gBzl-#2V_yMH6~O8MKK$E^~0ja;?ek z4y5ID>s8#R|Df{WqsLW6YNuV_JagXsn-<-E_kGJAILxE?qKd|<=En#rmpjZF20<`?{o+>~=1_3H7Z)t37Xkz7x6{eAusaIlfSf@7_ueSg6TMo$( zU|<%lOR-pOsaK$ICG24_l!li#v@}&mDvBDKB8MGL*VT{q9V_(Z5v}$5to}}2b$S>c zjln-0427>6bowpt0qFGXbs3pfTUIAI)o-IR@^Efm{#Eyo^R)+h=-zYPH9f4h zYyVvj1A!l+GS1pGL zQPT;~__%PhmQ0+;rs*D@IBD`#!_8IT0C!6EnyGc2vFp^s;rfQgs|K0A&;THtdaj9H z0rGIm^chzTC3gr1ptR0iH*2=lHm4IdU734$|Eg9{W@Nm>H_*)0cj2vsE*6N^+~~7* z>frFrw=BGRak4NKpxkO~zpbt_kUQ?Y>#9-dzQ6)N7K_&0b8lxcNMu8gTl;%$PJ^cFI-P-oCDV&00H__|M*}{ju2B z_VpX=y_#0XzT0~(d^q-{Z6hGGY3`cMk38B5qfQT_V7p@64bqmkk73{J`{$m?ICD18jGsXB-D&$RU&MbWWQ3aV5V=GzqJ-!}3?oKEmh&9qCdhBTomfsh2zksqi37wN#9`tj z@hR~m$%Ra16=@_rWG;CPIS6u)Cy{kzBRQA6mAs2=C!Zv@kuQoc6#C`09Y+1p;oOyeiUG}rmL)9DVtDP z(cHUeczRCp@QO=)fRiI5=hEY4UB+z1+(dVk!^N8%6Klc# zNGfU}l*2k}ZbxY-9c7?Ql!dav_N}5P(A9Je9ib;~K)IL`<%5;$MAx7m^dzurC&OPfIi|b)l~gW0dt^0yZ%VHl}t}G(|vPvcc=PA)54Rc5TYK2#Z_6 z4ymnXO)@|}W>bPovBSD8Y#kOer=(CdX;a5LU_D+P`er8t3L_IiVd>~DUR`~eMVgx) zu%>5cfJvGpQ*Ttp>a%_5+BVdep2F(0Y>&gM>cG=f5M@Cms}4kiF<%=RL{Du)L+CoX z^G=(rH4Kfyd~2}%XapJwM(8xUo_!dD#==7beLYLpuEMC3I7mXOLN%;iyB}3U(?<9L zcI{C30SH}`#AKT(Xxg8*Nmgh=%^l-yp`-MuWWh`{t7CMt>1NuOESQIAwqPV(--Z~v z#;XmwH=_?!kOufOPb7KY9T3tw&4HQjlKD z(F(MZo<+~5=g@QMdGrnIL7+VdR=5X&Q--E#1}t$My%Jazh{4()z@ybulkN>rz+>|l zce2EMViirSVh(&3TQs0kYl{necQ8?c2jf;%3>^4F2G!TKg8!o)SiZ2Xp?Ye}QPRoX zV`e)})GPxo28RHvwkM#;@FW!;K~G`6b?8y_7)}qgSwFVm(PQ#5?hKrOcUpUr@&y(XDLv^VWnTyAmtfV_*X?n;>*fEKkhL5t@8 zRW0CRC2cA!54{48y`&=` z(!2)kV?8}_hzGDOZRj9Rh0n{d#?B+N@?;O4j!ewWjC(93|- z9nRKH^a_>Cj8wO575cA=tFc29Y-hVyXbr9`{?`WrAN@m z=o1**DXa~BHu_SZ!(!ObcZ2tFFm(65j~zju(f7iFTRbxExv{1v%XY@f7P4i@SKr58En#1Q zll+<*HjrVB#`(kw(%E{sB6e-u{qQ{crJeQtDR1~A{$G3?zoFmb!K6-fy@YUQH$pr5 zgB=sQvs_jEQ5h5Sax?R*C#L<0(=sQwV~4;AoC9JGC+SsfIG28qU7a>qX-$KhSdUy& zq^1bm5tATtQ!*1aGIl+b6-Q%Jj0>ZIywSENr<6>W^kZQXlZ7>09pS@!#LwKgX754!JdEK#gLZT>ZyGqb&UyWg)4Cl zY$3P`SJP|gwe75W5K{_RsT6Yyvx2dIq-tuUCN38tj5l&sV{{UX8tC z+E%iU6x_xN@vd2yCY1kCKcu8-@M$u0}cnu!GC*qUv$@Fvd^Yk`)JH3N`fqs#GiQY-?qF<(W(|hQ> z^gg!v6nrXn1Pq6IcIU#chi_4MZo#MHGk{ZGp^w1Yf17>>5Yy4`!MCIEe2zhd3>qHa zujTO#DALq1Zy+h+qaV;x*IWx;w^+&GrrK%Xc?4s(p#_2~8FB4yK-J9JX|=N=>}Frp zR2yxmk8RtmvY23;1SoLNjK1_0x=3zomk1r}CLtA@C$p2lGGV-&RkGkAiEBJYYb}mU ztO6Vdvqy)ctlrvL2t~&y(PJYl>_%*FjE^GOY3!tNP3KmXGGBabS2HG9g-KY6z;05d zQ3C!6{9;(gQI;lH6Xa5Pb1Uo6^!zO$Yoi@QNOI1t`0ebnyN%x8hTlOS_`7Ad7~9g0 z--F*vAEe*BwB(lHD_H(riZ8>L)34I6(XX$;R|4~_qTc`}IrN_{xltXf#olX9=ase& z-`J%m2;bw6&~HIchm-34<+Ez9nEsLaNvu{OyX;*|^Q7O6ZDC+eKR4#GvUVJHxyxT9DZCxu5m$#hDL42_ z_)dHmdI#T)R?(l)AJAt(=Xjr{D`nvhq26h)i>nu*4!H~4emtBVmx-^Slk4#P_yPPN z{wn?&{ULpvK1qK}pX$&$@I$fP`&fMUmIiA<#Iea8u|Q$B#1@ag9jkPLtu!K`gCuwV zoA3`nS(r|LL@$={lJ!rpsto-JtGRU21e4{bV(>m?;dLti06&X=j(>rl!_Q+<`~vW>^C-kC;(B;p%e4A|Ez>5jVL3&l zz9y!eU;a{FJsDzykdM$bw5onm1m+Va6O{c}V4|cRT>j7mUd7w?2S-30+$c6G3jIuL z1i;DuE)@fpTmiVDnm#R4(Pv~L8dD~;oIfgM4HH2F?G_G)S@9JOSGNG-Q9!9CoYXp_ z;Yqd4;j-$6`YBaS!D&_1;X&miW6yo7n!?iov4*B_Os9%}Cc+k-A3FR?ajyIs|AjSx zhF4TT)GpakQe|F){|o<>)ujHa0z~Ga>6OhO)`S0!|3P4**?3A^-=x2wK@*+)zdN`~ zftlFg2!bHT0Dei;zMbH}lDq6hY$*^tFeeC#KHnju2qB>W1C$UEVnRYl!SN-hFVJ7o zU(sLF7wK=-6G}n_zAz=Bg-z~T`a1^M>2DcSz;0=swi$U`IzuK7QOwA9tG`_Ev=M;jV}Fm1FMb_dpmh=NFp zC#VsrgbREPgq?5@PWpTL2l~e~gd0ka&_BUy>dgvj1t0=`j6~N7Lr#|53ZXD2%)sf9 zaK|Ly#K{y!C)2UzY3vI$?b*i7H`%URht>sg&)fvmh`g@wud! zceu&u=?o$n#G!v-P%49L48j>??IeAPBBD4heX%19!sve`#Bc97Y5Jm*YlwbCe_{ar zEBzb&dxsE3mkGh7h`US#CSDOEV^Z&rE>iCZeioL}m-t0uJa(2o%^+~U#5uc)faJPA zTYK$9HM?N{tmp_4feD+4oh2sY7ui(C36KB)J5Z=8QU^kAdIYW;K?Hp|-osR)4pJ;Y zinbF|S%~_^mI)B`Pvkv9ZOB56NA8jw*g$~SXcN&$Tu(F+QKFe>A*K^Eh?ztygSZUh zF^FOipFsi!2^l0}keERd21z#&vsuFea}qZYG{L~X3os{xWHCzv@)%VNGBU`-rZk%4 zTB9Kzk}QJt5??u?Xe{IldJR~zT?=9D41oP>S`~y&}* z9?NkA1FS0)NQ3~@w1d5%j=d|CSe!a02to}LCq^Tn%65emk7mbfvHs@28d5<^GbDCE zM_otE#-~dg>f$?AS8C0Gyh3(|ikqgyVs>TU!yq}mG|tcWgFAv)LM&x}8Khv4GX6;~ zg(KOLB-w5q@i3-oC)N`i7^G#8 zuASIOY+{g}K?Zu%7CtJaUm-Y>eWjCG zG4VhG*MNBF`FCw%%bM&)c8~ktJFP+x&DB%e$!pkk%{u417P5h(gc4U7FHPdmlPrep zFR~X|Ko*ik41)iQ8C1fc(zRp>S&CMXeHhf6LH!}HfhuU zlx20tQ86o(t(@#_5Lv z&{-8QiEJfVmGtP56Bsmr_Qm8Q838{6Igy;ipn(ho+mg;Zatc|0rF~B}U{3OS2I6v{ zEDWYcbx_aVYd#g*Es~v0CuenOJR9?na~U+0)-kA@9(9SF_Fl}Jom$T)Zv<4y1q>S2 z1{!uuyOx8uGulv>2syIzF=kL>q`s_va2>dI50kfIQt~$Pc2@DK0p)j)oO@&EG&e5K z^FO_a?xajc@dZMW7_!mi3O2h;%jSid%qBL?%MMvv?r{UlFFOMQSX9(DvmPKhoX3b4 z#7|{Jn&5N`Yq78{G^kb<1v6wgXo6*B#gK$q1}>pm)-oPgURvA4=I=!t8z4B+1d3!4 zo7EcE@ns!QkFky(9IYdc_lAA=f*OPlxNGtT>KR@218W z4y;{LGZS)#G+qxWIh{w#YR=IQeO+xzyvl%)?i z4jfbr$CV_s5c(|6PRlAxE6oe0m6oK#k*Un=U>@`rEGf=RFDfoA%`ZtS7&|*NEe(>% z({u7O=CXsV7*-rRq{9Np%uLHnFDQWHO4$Xa!L01OtYBe!RyKST7MGM}6_ylbWsRMk zk(~nvg3`0H(qaHck139w?_mKHq^ITN7G@O&^D}Y^f@#@s{HZ8EBR^PNoST=MU09Nq zTaY<+c6v@83m`2!ZSLFGRb@_q^VO`?kYva>p)VhF;@nkA=NeskU*EYxoIhfXX)Q=- z4am?xKg<^IU zu8f6n$~^pDxPo#iz8oC5uiGIyu*Jia3Kg<*|M1QmPXZe@=dKV51!w*LChB?}9xddCUfOs5RuBf&4@QM;>Q^APDcDbBmRI9A7jMFSv5pe2tliL)fp^`tkgqq;7h{}jhL35-QKNzfNlC=mREOe{SRA;2L&MZK)(NZl-$03_^T!)h%DVkse+jF4U_(9Y znJsUH;MugxP3*Kzjbqs~mqo{~w9!YF75?W|e2-3Dbe^2hC0s5A;Sx9}$Cn##AN$N4 z3?~5~=OU4;-vvL`hDz3{lm-5-XV&r>3P%}|(~;y6NRedq__xTzH02^vI~oI)ACDmf;m}v1#r%} zv^1EPo}C*^&o0d=$|_CE&dtlZ9MahYBv?;Z;8dEK4`M&7G?<@XoEyw4EiMY?6=fC# z(=!W-3)73TvP&~FE{Aj>0jZ@6q~i44yiCv;g2kEHSpcapGniLWk`^o}$j`{m&n_y> z&CX5|_-pbTR-wPhpc!q%M%EsJMWatH=HzrF<02hv_eb()w%Jb%YHcHbVbH9)#wvH1#GPJk2S zgg9YN8srFPK$dV8C!3SQ$%Sm;d`>q`cg{7O9c&_V{?%AngB zbSH!EW)OHf?_=25<&)2Eq0^gfo;=&Z*!G;|%AF;Ed#q;=nHW6oZ~+&~psh!Jroz zw39)vFz5h--eAyS2Ep=umqAAv1TMLc81yNFzF^RK27Sq(uNm|WgT7tyisRHIu(_pDHtnCmrn;)>N+fC%NB}E0{xe9_ zR7EF8YOchiK7q$=l`{4K-ain)o!l@DqGp|^B$~kDj!N0}{|pwao4&fL@k&HyCJ?#n z?|7rU7LwRvv22KEPi~nIu8oJZ|0m(>KcfanNC;#x2(k|UDF%&3ucXBM1QPdF%4YrL zl>9d-QP8)txE2UnRaaRA@z18JD>1qyfzkbyvZlYpD7n@BS8@&Dh-3{Uophni?Fmel zR?4FP3?`GBs%qGj?=Gk;PN1^9Qa1aaLFM1h(~<;AEB`Uk1{vcOEi4eqyCg%to0^q#G z0psOq20a5|Q_efFe2p!CZ|;su+RuX_t0tan!hw@6@rc>dq-}SC^KlpOr()pY4y~BQ z%sJhq(HEQxY@>4=Fr1!e&^8vQuVRh1|K~V;*9H7foPTuz|62_F3kjUK*p-doBr5O9 zMqGZZ(M!ojqArbOTu3!++EYSAzLlZwA-P4Ro2WP;9>TC+91@%Y0>Xb1%(T z9s|eF;ylXj&d$j-40^Tmob=)ra4l?v{dESt79;)tht@!B9_EXWBo79|k?ArZ0k=1| z4}%Ud=uKEg+|MSt$?*jg2 z?jjcaEnM(F9cR!97W{27@F)Ls@OO6se;;=#3;upCc(Oib&?hYT%E|@j~7%uqE&U9V`k8vN5FM`h*bT+mK{{Nt|!fKd2eb2a( zi;10x`wVw0%S4xND%|H|6g`(@q8(l61a}K`X#`>xnCL>X(f%%tUgI9>(&(*Nqpy;U z-tN-qDEGrIjexJ9r;Eu(A9ZQ;Dfdj5MlcJ|=-XtY^IaN!&HWY{b!M&aV~xH~Hu|Yc zqhGm@wbz+?JQQp6W1;eDY)ol?cu#{6k(oHjEdF z-9DAz3Z9aug~WQEil^pj81yTHKoR(T4Y84@=NV$d`-8y|yExbjz$yp#FDtL8EGaIl z7&Nr9yrh3gQAOFHftCGAAUC#ag_4nj3m~T^S;5)`!tk>4vcmo)Ljep6Beu$TR`hZk z&&J>weQW%MBX*l!GJ+nza4#c06H*j1G9Xr;9Epb)geVfv%k%O4ya0m}49;P29)t7O z@b%VA+zA+BxUom_#v$HeO((`k2bKzTV4uqnz zFGHC{Co?_0swOuh(g~ej33MQO^FKi+V`6UB#G2gdF6dDl>^Uy+@g4-9rCI@Lg$ ziFr9`Nv`X|D~D`eUKy`1uOF{JZvbx~ZxC-VZwPNFgNqnk%-|9Rmom7F!Q~9DU~naa zs~B9piB}QN=H-p#je>(LPTp9|$>5qqHZQJYa5H4y^M>r?=5 z3J7c7R0h{3l6iUcY%(tcS)=gFp2q;C7Cs;&JZ>lQT6i-cm6tc2!S!vtnG6ou{IQ&k ze{&vyH-~paER~lBp=&LJ8$prbF|1_8P4uWMQhDXLzT>u~WWTrYZjGh&@)ogay*Qio z|CjBPZSLl+WSMd??;hU0y!&|f^Oo?I@|N+I^Hwl8NY+#aw==kd!GYmi4DM!d4}*Id z9GX0kV9M15&4UB+JV>NvaDS31!G16@cqYr0S^vkC{|j9C6w8%QGk74$mCpiK^0s0} z*k1+@0#~vha8kveoa+~PJ6XPbiNV8dyj={Qc9nd&m$x7Iinotg&*166n(e#;kQ#tz z0Bd&TOMjirknHeH-jO&%g2MzDGMi<{12Klq=+ZFR=6&9$EJJ?4`;d2xcbs>EcarxJ z?_=I4yi*LG%iwtop3mUj7`!`!U&G+QUe_{sPX_O`iT7E8AwN$@$qOt)vS$(Dhrx?G zq-5Fu@#FsjKmLp5$6pz|Fv*X906#*i`4RS)!HZaagb(0HU1F*!xM>vlk)jy9q>U0V zcbloj@AozPTU({Y0Xd${J(DFHab5%;sh=~u`^oL&ou zF<2*XVNq56boTFZTwXbeZNrsoNMFXgrO<>sidS zWrdgBL3nwusYh&by;1j5OX4r=y=vo$ z$;qlKs5Ur=PpzaLpjJ^2QV&t98N89fuV?Tk29Gj$GlRFRr`oACn3GyZt>=M!0rhhR zyYT_xXS34AH+pnK!?e;W_K$0fDS{LLxUGpzEC%23fU4@^$n;vccd06QUknVGP4R@A z`5PMhN2W*W5))Dk6X6&X`_lqt#T5-5V~o={dGquD_JFaLEi7Pf>xZ=C$feHhJ-?0* zZuIQzY&gJ>k(VF844(p>rk#44dWOMU8GIJKbacU}mSD7B@cQzc(L<&e1qb8@TXQER zY4SX^tuy&v;AgPOan00=)JxP(Y8Uk~wVT>Q?WOinuTcA`1Jpt4Rq8eBb?Oc35cMYY z7Im09LcLABL%mDAM;)c!r#_%Qq>fR?sT0&m>Lco7>J#b|^(plkb(%UuouxjfzM#%g z=cxcQNZ|6Js zPQHup=6m>FzK`$c2lzpLh#%&s@xezim%(pfaE8GbF!)Uj4jjCQ!GUk@VDP&bd@+OH z%i#Aj_)-R6&fqHvz>n8B=zfVh$r1taDh0RxITXAu+yMBl2J>GRe-?!V9Hy*qi| z&p!9eh+wn5)8F}3bys&)#qUtD11few#crth8@O`dIN$`}Ou)&&slZu)vjOJ-&Iz0w zI4^L1;DW$~fvW;823!KTByefqYJl4pxcz}^4O|=G+5&elaP5HW09+^F4h60YaNU6G z0bDQO4hQZ?;Q9b}G;qfPcRX+>0(UZSrvi66aAyE_7I3w|4FGNsVkEbf50Vd-50Tr+ z?d1+~N4b;SSw2)gOzt9gmAlE^Ce2#psJW?Jd zkCw;CW99SYaq@V1f;>?^U!EjSmM@SmlrNGmmM@W~$d}4fWss-Im&w!R8S+edmVCK9 zTb?7&m9LPml;_D;$ydwQ$k)o($=Ay_$n)g|@{RIM^3C!s@~!f1^6l~+@||*4UMSxs zFOnC_OMn{!+{M6M4`{-;$ADW8+?T*@2VMa@kIEkc{4u}}0)7(kvw*)1`1^r>5%>>* z-v)vSgdhm5LFf&_Ss+XR;c^ge1z{BkFM{v^2wOpvK&%4s01$hE*bl_fAWj2Zq8C?z z_&kX3gZK@Ie}btJOc^kB2Gj9i8V06|z;rd37J=zuFuexo|C@GzWC1A%QfrWUfOINI zqd>Y0qy-?|3)15ty#mt5AZ-I#0XYKrhRD4@J{{yyAOpxZfSd#QNs!+H`8$yR2E_?V z3Y1Qu^abT?P$q$LB`CLovI>-ELD>Y#51^KV>IHRQP`iP8DySntoeJs#Q11ox2~anJ z`Yot`gV_n@8Zfs5b6+qI0P{pJ&j#~tc?Md(*D%miYVFT51Kn*bF0$&mb;cVRjM}tq zbzrMDtp>P1oJ94J@B_vT(W)zr7&N|>wq!}a-})5F<%P#MTX$=H z1g6xaJUl%P?=}<*Yz)yhV^arO4X?KhDX%iV8zy3E(*0v~eXXC+r?q}Ep|zIKUjGB_ zm#s$C@6v-tm!{R)AKdff-hbeb2?JW@VdGd+ZiNOObC0^me9VbB9NHGW{O9|K@nxnr zwvCd-egB6|i;X^CEuFvqd}+^p{^NbZ=+Vqt`&9OLn<8aXqdme@$YT&jExD8SYb|$9 z-mpJw^y~7Ld{Xot>Aljb6y=ZIOGc08)Y^yb@k#yfj`?`4UWERsCukd;>d?u1Ag>!A ze?_f*+8#f?snNkBmZTcmK%v7v=G-CL@8mz2jYiMr)!H9tJ^POZvG&Q{KQ4SCN<^ipg8J)VbCEu`rIz>$9cStZgv~X{*Y4yiXQH-7~ zYHUAxb6Q*U)M(A6&;lqnqiak4BUw5)e+*qlcb5J~-D#WO9lz0?T&?{f_Tv4=&dBi- zai8{u^d2BgXex){;U}Pj>00?LKC5{zFa}om$b7&UrmkO~1^u14_o| z(W?K5!Z!I2Xn&(S_t)AlWfV4r>rkw*{AYTfr)mcp-Fl#jVcN4tQ~yu)r@8_oCbt?p zsQ#LR($47Anp*q37JF7&_9i?5I|Nr{jM)ul5I>QALk~ZU8J9nzosC{T)RG3F-g~GQ zs5n|LHJZIdy4;uIX_bWkMhLM$bC?OhgSA{a-yl9bG>(!@}lQIU?cxQ#f!D} zk?a9Cg{i8q{Q0w7Do2#x2P6GK#mg-@5BO(d(i_+3aY+J?f}+cv-!mg2LdB~sIqSu$ z-s3S>h5pp&U;f=IBSAvN>$Ub7O*v*oOIV$M(SU{-NfRpGthL|KVx7|w@2yon$J5S6 z1y%hC>c6Z1*5O!6Z2X7;qq~osI4<9c8fg|PHZ-5~GU3nvU?a6c#ap%Zxh?j*x(&vC z0a|PbH|*15!M@u2TKC)eZ-J3(q2isEbbjia%)Hrfp2akhFH~%*wLi+9-hXT#ieG#_ zdUnheK5!leMs|makM^Ev zf6;D&u21<47#9Qm&v8W|)izWV>7M&T|n%utM9DNhQF zToe`G>;)Q?Cj>@zii+=Q?KAfV8uD2+QdLy^(30+CJ@>!P1Ic@4M(T=+pIUOJUa$wC zFV+yse_BQ^i;69cC5rpsXTy7*nfyEcmiLs5gccQBTXLDDp7o>k3~jGx{zKYeDDkf? zX_V_sgYIE#z5*4L&KHSyjjnBP$!T4EM@F}-4R|si7(M%=);_VtRN|irXZ~aQ)aVQz z3*PgN@1|Z8sQ;K6ctBqnefsl1q^b_G{KxgZ(Y3!?QbQY>lII!3EqbrGvReD;dnD?A z*Q)xvgYw_|-;58eXujvXv2;w8{bL!k78~I=8e5-HM(Q|kGgYEes`Qk zcdRYBMwcg3nC^SjfYE~+SU^;LM(6DR(X%=v|5=5N?o_sou7wR^UkqW45OMTR#3qmJ%-7 zl8$q|;q0x28}bqBWgr%B$%j?nnXl)89l2?N@7mm_3;m>0jeVo%AsrN~xLlc+Tm_23^)c#usY!9~ppu z&8YHV7;g0KfX33;{_hwzy4qE+C089~^y0uK-Xhj$;NhQ@5p8H`<8uAUraI2()ItB1 zsMhmy^2ThE(Xm7RqwO3dZ230vVxvdxTXJ4r&-0>HN~*k<-zzYB)v+a=n|i9RTWWm^ zKt5VCjh=P>4;Q-jU>)WfT|2BL#VX&G(9bYxznA~mt~UDCwIyAz`hC;;l=m{;VDzc` zf29&94#)iV4Lq!yjgIx)>vzQDJKSAPd?C~(7o8xGtE;LZW=T;N6mHww7X zz>UeNJM^@J>TYSF`gd8A*BR_7O&dC;6N zr?fnn<|O68T#0`QV2RKzq5B^AK1#=M$0{DK7eu$au+q$khN)N?v6;B z+nYO>JDNM0JDU$RA7<`i?rO&DT9*Jf1-MIrn+hBNHx0PUfSV574B%$w%sq4@&4-(h zFdvCX_8}x^F(l^#cQtU=5R%uHkZcAdPbVb%0e3k=@+?BKzqyt!;AR6iN54;9;3(f| zkFx;~ZG1GfOU8-cqCxSN5y z1-M(6ny)C!5SQkw&DY@lI^b@b>LVtB%L2EM{&^RreGKTCrl=mZUh=xtc-%@nhz>wt z&7HzO#KhxAj~G1yGnLfZV-5Z>{Z&22;E5qTI)OXI8in+vDF-@K+e!wNzLvNT!9e@D{-$T1*znB3l%TYB2-%IB@HLdjhy8fkRNA z2JRW)o(1kX;GWM}tU8&NN}WuLhsb<^k@<2RnQxTHYHGTm&b53n4FWLhxI=qp)ETi{+Tj!a8COGm`Y(w@k~>Sx}CmQFkX1w zF`s>0H%m{AMoSNk#y62h3+6OM8eiWdjYnBdCK~%#`dW^*9Ai1wa-8LO%L$efEhhoD z0XY0(Zvpo#B+-bI zxDOePW06Lz^`iYCh58SxFk+cxxqwKV3>-GQ5V%i@Byoxbh{Q{Y#7{L6r;*|O3=MDr zQjYSujKs?=b9EBuXe54tM%yw?GuodOG-GY9vD}RQnB`i_b(ZTbH(2Id7FceypaX`w z{xxu@>)!(R9dO?R_XBW0F16fZ_+v*{?kr1M76SJZV-KeXTge~8I$b4yY)J1hBM0L- zJI#DqmJ>GU>io>GxsOEbe#>gQfJ57bIzxAqu}kc{{a`jak6PC0Bl@^DqQBCJKBaP-XwZfXd2QMU6$PKrHfdW35;lvlVO6 z<*XK~)oQcatqyCY)oFEE-Bu6qD)46DEx=oWw*hYl-T{0i@J`@eIjc_x(HgRbt&y^% zHA*158Hm_b>_QdF4IeF$*z_b?TOoZ%+@HN2i1N^?g@0YUI)rTHgd7OJWsM ze9-!q^<9GUZG!Sh4a!XfyOr-tUp_~Sbwo@1^!szj|2XA;7??c714>jjJ(V^EskEVg)z1(~n-!_F*~&K31^gLgz43-jss*9(zbmx8f`TijRSGf#1^AP z6aMTy(P%rs)(L5}wXq#&Yim2mcChUbTRU5OTL&8o<6z*206!G?VZaXuegyF60Dms< zBY_{4vvt;Kv~|^KwDlw!M>86+K$E_>%ug)Q*bFqDKs2I6jA1mMf;8@N(ZqI^t(Hja z5Bzyq8+v2oiX?HcZ5Sc7#5NQ$1b#dUoNa_Aa1#oUvTtV~j<%hrgE&?L@%+YGu{M)1 zLGwOKZIf*m*egUEvX1oSS~ke@>-6Q8lD;&9zPw7P zyaxPr43#$tmGx-ta9I}k>&e>PpjkT$8|qEA_eo>k1Aal)wi);vi`1BpZJHCc#73*K zz~4k1{3}7g|f!Mw@!oDB-zzgk{=s;eq0r>(>2khgu z>A%fV1p3fX7+( zdf+$Y>{l5;UdK(fK8HXqARsp~Am7n|>`6dwE&Y1A1o%&Z{|xxg zf&T*dFM@P7cm z1Nfc5<99*da(B*wu{Qc~RO>)Ga0e#ve;GguWei9`C;{2@KspXVARX<1|Jwl4(Gh`c zXgb3Nx|^d1qUh)jLV4EF6NHK)Q9Q!Y2cdEtiPl;m8W%eH;!?7}BaH-$Bw>4u)r5IV{OiG3?&xNbe!er@2GX0?HJ$~=osV}>=*)q1cD5L0)h&H z83YRmRuF6;*gk63 zjlW*M*G1bLmpkSVjk7^;XB~4v@DxeoRgPxn@Xk0@yrWlQxIvOb)yjSdkD%{&Xa=-;+CQj%z8S7PRrK9(jo$C$l z8JmR33;W`p`0?5{D#x=#<8vUS8I3P$G?s1T7NFx;?nK9tZvU|OhGRXk_$CN7S;qzt z_9>FZcO38OEMkBRS=^VP+N`m-Ujr<<7+0S-KG#{qje1B>tHzqKHs3maB^JMPeDC$Ip%}j$a&G9ayvd01(=Ma3Bb6K{yD6gF!e1gmxgb2cbjG@teWo4#!T%F0|IW ziN%hL#X~_rgU|zKF#=9yN-$2qa$n<{a3eyciZE89z3ODZSczxK7FF6UHFSZ{8Mh_t zck~+{G)BA9Tj@t2D}5jwmaPnc(4{yaD`pW3v*Mhmg%)jr|R*P20-Dkj=`2Di5waq_SOQ`^pZL9V{ z&35I<#O5g=oWR(`!)1#q`&FJn7YHYUaFTwfvt*s@EGk<$uyQcrIS7PPvXw(XIJHPT zM^ui~@jO?<^E85Mw1(&Dg?M)R*-_q)AvU3Ml8)v18kT1^){?ckr1EmYa!Tc;l~XIB za$4nOmD4L{RL-oN1wwxiYC$*~gaIH71OdOvU=Z+|3Y2 zaE9eb5YB@NG~FPKD`D9TSl&Tc-U-48hUHy^<)X^Pbb)XV2 zC6fZmm3U$aCpu#bsAheAp>hMU`C{cul`mJmQu%7-Yn888zESyR<$4e%f`GC&353ZY zTmZs_AY25(#UNY)!jv33v^eEPCg0Uv%gW8f=B12HsB1{#Y1zu(LAb0)EO%A@rHkcmO)RIQm*_0hoXZ&nSmAP!L6%c+N*aw$ zlSbpL#+tDqI4}_~gxEh3O zK)5#N4CpjEBRY-FIMH|=qw$718gDMq*z`0y4?r57==xu8(C9n}X>8~?CL8EZ&O?z! zXJ-)RXPt+Eu%I{=o!yr>jK<rhxC?|uAfQoLl5-9) zSR7)oID%Nbo3VIL9g8bUEH(p+lZZvMSW6j;7a@y#+`Z+T=A2F>UIs!g>zo0?y+x8Z z+j)gf;#`fyWoT@j+OBB3!gl5;LKKwRcr z?p#rpbgm*0A7vmu0m8E&P#{|<1+trA>%Vgyk%&+EF-GFkNTTx@=d*Ny@HhzT^gGRJ zF0@y%0e{8$8X@^A2v266uY>SZkw|WEzKw7>HBz_RlA} z9z0cZARXl^*hhcl{8Z=j6OB)bYdi5wFXHq}!C%4JeC^yye17Bn*7=?Dd*=_%ADurr ze|Bzh;%DQM!pk7M0s?-S*FeB8^9BgGytN*L4LRpFgU{a$q1;7$vbeVJcAZeZUlPiu z7fP3mc)Ao2SXkR-K|C!r*5~M=)gU|ypxx`%CtWU=2g!7~L3k(Y@`CVgab&uJF3d!P zVQm*4lEP-2Q1)E7GUNy0y#lNp96L?wO1d%{jjpstsMF{=OsCP+ooM`; zspa=|G;S%;*bFotM>HM}!Z(Ikx=unGT_?Lvp$mj>LHJI;<6PTjKZFhUSuWaq?dlK0 z4_Oy3qx@JTk%L|O=4+R>`C9mi(9$+v3qKbUS$-?~xX~_s_q9vgeJ%XbSTojUl4}|f zIoWlA>q6H>u8UolxTd%+bxm~v2-`sT6$G4;Z3p3Z5dHvR2M9Ys*agC$IoD+dk+Zm| zuGwWt*IXiUw?U*>M*Dt5jA?@?mXK@)ByS=lZwBEnhU9I8p+z4ByZVfn3hU zda>(n!f^?RQ+`KD{VeJcX_76K_c8IWEOL%8*XfDD&_Yz81dBOpHq(ZzuLih%su z^$lGhxIiL|@j0OyOE$F$ectzq$S(B)1ci0rDnYI|#{OgGegY zMAvxUYNWf&&1q!1D>O1AL?&i&Kr->5^}i-aMqk~syAltoxD~hRHoGlutJ~(byAi!8 zh%pf3ASOVp1`(l4ftX(EcIxLC++N&nl5__^%ot}F#QkU=J%YIZ-VsUMi;}ImlSq*p zpI?nZk-G*da_{5bmo57qcQG_+*5QM zFVS%9fjZ-!sOd~$sF|@i-F+3YIKw^DJAoc>WH;4%35g;B3 z;!z;>0kJQLM}v4w&V9AP;`O!}?)j)WHxi4-G8XY@@ns;MO2Ttm3C3oCaS6eAH;BhE z7;~gu_qx8O3&i6!^GA2ou4*>g_q!h;AXkHUV%Gg2h$j_i0o@O~A0x7sxF4lit9UXA z-8xO^PAL?+(Z4z>%5a8yZC-P4A|_vVzu|t~yJPXABAl8D2Z{q+E2ZA^V#KAfDdj^vq8v6JtF*$@WIjl|}N0yLm1|)wb zB)5P#lp(o|^s#}n>ujKRx@jl2dl!hqv+ms>jwlXCPq|0miS3~Y0*L3J(0N2n=*}&~ zvHU3G<2}S?jT;A_4EYsk|J3=!b4lJJ+u{DoIidh_uuMwG}YtTXwUXwM#!uO$MBl0=L!(7Et1EpJ=YPB*AS1_ zX*^y}z9a3&E+ETcos{V6)8{nyGubEK>bXNR*`C`qlTDFjkG7p#yuRRXU~LwARuP*^ zJa>DRdhYS$JokE*d6s)tcvgaVGl;i^k;WZ$x1@R#eac$<2oCl+D^yB&4TP7V*mh^JOCW{)2>p*-4DsXlK;~$lXQkmCF7gY2B@p1i*x*0YI@rJ!s2&Wg_vnR4%TrGRDI5@r4-ZYZs zO%j|>5uDx(!HF5g8-SDlHqkYcw-)4W?Zwp93%NDkHX51FA(`HcMkXG?ZkSAOdv6aU z)7!z@(c8(}*?Xw>FmD%cS8q2jdLb`>h_B^KAifOZDz0DNL%bMe z%X)``_*T|C9K^Sa#B!u}3}HEnu*Bo-h~-#vFW+s*y>yh9v$x=UFQ%_18YgQszK8y$ zmv+x$%RSO~sTVhAFZE9Kf_IwtGVgTn4DU=YI+L40`~bucLHr2Bk3swd#7{x|Y^is) zzT|8Wh+gF9#*(v_Kib)k zll1#P%JQN2V^S7;Ik#uM_;UVUq_TYB{hE~JOH!6UG-dgQlx0VQ$|A62l-{4bzvw`2 z(SY1VK%z5-%Ce&XNTx==`znaWKfF7Qm_Wnd}? zQw5kfF!5j#z$E5;=yB1H&%{mj$@otdX*8J(8chnt{Y^IXz)bcMj!loF&yP6z0$`F1 z9DQNL(HAM(NEeu7oE^{&{jcH1So@Mb^rN!A6qwYkF9RlXaX9++^R*_fmiSsBi(s;# z|K!6uAPT%c#%j>^i4*xeCMM=ni8atz6($xP1Ox5Wb8!y8|(w8`YzLvoTed}Mve4cKpJVP zE?}9pneDrtkeuV2>$}2trEi|^D&N(Rab z0n>pw-wlRF-lSV>-))3sTc(i*GmCBNSR%3+B=TM&av7KoVnnVak8aNk&Av6hhls|t zU^*o0LwRdgB#n>zp40{M2~8l|6I8gj8KLS>0F|RcWL&-Ads%1kC5^>SjWuI!-t=uI z7T5bW_%{09^1bbQ$M>#plkYv>`(Q$8I}A)+z|<8?-N4ixOg+HV6HL9p)H~<mY9Rre9K^xFnBFEst9X#%*9ag2A|*HNV3;> zLvcKSjrCvtGQtrZus&HoI$(W^!_hDJwL@)7{CKDh&E(N&cKwQGua7CjQDNzj{5F53 zhNIu1;doqQ&5SPkef|XE==b{r{-8hP5BnqjDu2`;^T)w-0+>z&(@9`D8BC{u=~OVC z2By=&)DKK&W&Y*<75U`EdWfIge?Kjd2Pe*|H~#UC)uWV0EJ zBI9fZr8^}hqA*;)T4FwH4a89(sj z3K34N{U2#4&Lx4vEZFEdUeN%G2iWZltgrpw=`en)!FW|;4OyEl{#^v)FaE9mZT?^V zzxlWOfA|04-{Id0CVYLa1rttat_Ks&)8>O|0hn$C(@kKyIp_aVSH?h@K933T1mi7C z8E>nb$6)E`k}x)PQlvm7vKVlJ=~jcqfQN)}&-0i-I6#5604}-Qo()97bVqSC2C4%T zXycXyQW}kSqQV7gG-1p(K;vM8t3azj8;!-l0UC>UHP(!^X&2~@EC$*KIs`ffIt4lh z4hfy)E4!So229tG25V0s)(>%jB`n4SdFQ($@; zOwZ&3c-)PC0#_N*cpc$Ln+`Om@%cJwe5FKVGtihN8W)1;IYuL#^Pp55NG;?r18@djLiV!Hw5FiV0w?i_ybAf zk5U<3V0xc+#AtUEM^@-O@M~Z@0r?x4KF9`s2h)c|0=X-oCp-#h36D%4Az48!;gRX% z06vtXb=zq#^lPV+~mwTQGn~2JJydurlZjx`OVYC+H3Og6ODz0j4j( z^c9%C2GciS!tehbn7#+o4`BK+7Yyo12CIV6V5}?|Oc0VkF(kKu3BUMuLh|<#l1-0f zuni&^JP=H*Mt1OEMAG_frFKybMa&PU-RpwZ!Op?M5Xc}7$uHR;E+%g+4#;4SU~kP@ z2YYGOdK+gSEl4g9CyC!GzPAU10hXOuNDK7nuGAd<&&=kSajpa>2m{nZwOTU=pZga3qo` z@dlX^o>{=s>#LDWNiC7t3}jwNWL^Z4V2EXK3X(}aq~=GG3u*X~Y@}xdXAze(K{927 zmxCk~$>kNnt8^|g@sSrKnW(ykxRjJaE>)J0JvcvjlMdsJ1fyhbtQqU#9YHKOyEJ%b zFdJMLyeqgUxHz~ZcsEE^kZd5?L2`gp36c{e7f9}kLjxMg7Qk_hHn4p+4I4d^nrX)8%RG+2ZFEAEJ6wtj(>T8 zjpds`3bX~+2R8&a2Hy(49egMFZg5lZz2N&Gg+K~}gj7_46a^^;QXHfNNYx-Eb3r4} z7W_n?5dm4vKaD({GmW77z%~Lp-8AI6b&JH2Y}QDqys@}3(`R#9SqVT zAhiRjJxCpLp@gn5p|s9oXkTKnqoFcVXEr;PsJ3+}qS3?=jZg<w+2=I!@EL zu7w&`@fPFiGQVc5kd1Ytuh8f>^8#ogEqw8W}dQsUJvZfOIBEXMxloq*{>925CSpWE^b^Js4UO!lP{=I@%@;WGoH_X#_~;khwm$ z1Y3P!AM8j0{!g)x^NL0u$-rM|3?}(gx(??H-a=I8+se0p+(~OUg!f| z8aHdwIE=W$U>mxB!wa}_c#cVQJ;<1rvI@qbFGJtxWPYuwnuvJ)(xP`Td zn>4MlhOAAyFh$(L?ZX|y9mAc%ox_KQ4-0n*cMW#~X*x(VK*Fi@ERb+&JsYGsAk75{ z#sA7&xQFgUh7Z>bcbFn>(mduwUR`InZzvJj3`A1EEsS>TDn=v)+{kEa^_i#!HCGI7*}OI)ZAfMq}aOaz{DKmk^#9rmfiAn(!n| z9_KgKjIlT+Jeyd&G(0s7;c4N^!qdYu!ZX9O!U*4uAl(Gg%^=+Z(ybuf2GZ>y-2oE5 zec4=ijxLYkc?OHu5{tC$K$~1Is$=n<5{u2i;+@1I8lbxvi;Iv&)56L#=z@y2v};hi z*V*mxz2W6V<1&yIXTvK%T2h?d4&NVsP^a+$jmEnPtF;=9OAGC`;|oUCW8o)s8rNww z<{E3p+B_G29hdFG&xcdOa_|Nd}@L%D- zBW02D2nGSxf%F7OPlEImNKb?G3`oy{^xV=2Uw>IPqJs4Nzm{cREDi6!PR~YgOHww1 z%j+)~!y5^Zl`{SZJRZ6>{$HmIkyxZ!8_ftF;E90r5{_mBHy)v9UKks9R9t6_W@O*U zA!s`y`$hJTw2HKj91v*}IWW>Ta!>@9zFq|h-`m$gdIO|4L0S*e29R*d@D@mK=OXQN z+Y#xc+m1*VvK{X*+p($6c6?Z}9ZhdLB1aP;$AI)MBjk7@WY61sBd10Bq2-9+EdIT0 z1ZVMBT)dc^u#wuxK;$ZNHZ4HVq;Fwl5G~Ap(BQ&s`PYoA5fQE2+M39@8jciDj||cl zWdN_^2m}1WeJGfO*Hlg0u^yKSA1^i#%u0_)_HM$SY;Z$ZJI7Uj~hGImjZ&c(fa2sU(ffAdQ;| z#}7ba#mOTdBaV?z$~Mvkav4tX=tiE=jcl;Lj(kfzegkqvHu4?FT#@SdQ$$M=uq1*6 zdO_w1tZf9AEEMv%cxR%kow;Fi*+=h;?AF=*lh~By#{LSUO%+#VMK-JWDxpfOGF3@c za+Ol0R++0TAgdsoLB?NLLAHTx2iXB~CCE;YUAZco&SsTUSIR0cvMIY6o0x1Uj86v9 z43*GqdNivj4|i1xWRIbgRg{Oj(OTtI2UKCYrEFCjkbT*zwjiU<6=S!n+Er1ufU5SW zl(Lq~y{Z%1ZMorG?&VHKR=2928jV#wG#bNbx2rml-In*5!oBLKs*{PvK2?3Ij;=bU z>e#B|s*bNZq3Xn{lR&NlISO(Nk^I4K;uZFaTLh=FdE1HpEORY!rkE6s>vYlm#w-G#J_4nqRe`>c*;@s%{4PK#=kMISAx~K|TcJ zb|AM0xdX@@LGF~Ry467OP6Ne7gkoog;$d|tV!86YW4`+Tr+p?>_Y;b%K|YkBxCT*l zePgMii)vh8RVwXX=R#IJUWIE@*{XFQcga>g2{Oj!ixS3Xt6m^se2#>%8@Z5GFQN-6 zcW=;zjIj#8Rj*gA*J*rHqp>HN=_=d1Zj4x(`<$j37pcWc6E1PLfUkRK$7@=+04j0zy1n2nl1#vpq!EJoERCF+iviN%wN z#i)&p^eGKbt}#quDYKT@qVA|qV=?O0SUe4tF>2F{bYYfy)+Q3IK^CJ`(P%UljYkvF z>S!{Wil(C(ko$pr2FPcEd=|+4L9PY)Y>)?lJP_nTxhUonpr2?foyF*Z#3CjWpdXNj z*0ER$?l;5aI@%RkjCKQgh{0mCC$Tu6TR<00tIM7Gy-pdUeWFJbji@KXvQg9%49yos z;|bA|39BVh++Bi`nGq;)(Ni^vJEuV692G2&LG;XMtxjWqjYf*-@39%9aY%G5(Ks|Z zEIK?oB6?2r+~~;YsOaeE7?4MUjQ6o1p9k_dkjH~O0py7wpAYh+T=YDH#)$@v7Z8ms zqAy=qM#>WgApClTu zVA?pZj>hXsG&a4Rj$#&pZ1fF~uVmV|;s3DH??pEgi|>PcRW|wo$X6H1;wRD1brwI< zSiFWL?n_M>aXY}jw$nMvRmRnK(I0gdf6!RGzOiPk&9>-Y#Nw~f-=f>2zeoRw?uhP; z?uz~y-3{`5kQab_Bgi*_d^5+w}E^+$amzTf9ov9xL_1_XD4GOV)0JK;$3t& z4EJiI$zEE5vFTxqVb1Ps%mZ@PfHCGr7-IqFJi0)}g7M4sJMMK#8lxSH#S#c)3>QZh zWn;KFvbZ=PW0}~#NLH+d9LFW(IL7v)NzC01PGS^xCM|hPZ*g+bQ_aKn5{WOm6 zF5sATu~V!!0vYQZJ2ZA!tV^tGtXr&mtVgV8tQW}lg1ii5{9Y?SUJ3FlknaQeevok{ z_dqUoxE}e9^{K>XfIuEgKt5|Br^$;NPX=+PpPJTFGI+_)vN@tQ_HMr@t0vGsTX zTMl#G$6XZDYq`a=T5j?ajWuIkoF1cEZm}7$nXy^1%VV=+b7FI2SH!N2;d}NJ$WMd( z49L%d{2a*7gZu)>FM|9M$S>z&MlHA4^}4-|Q7t$56{eA|)!FL}B_f-FNGjzPyBp+J z8Ie@V4f8Q=q>B_)6>@V)513Yq8g3Z^Yh=t&eSpZH&DYdmCi@ z|2rVR3-TtA-vb%lj?EyW+wmdDALU~28uof~FdF+1FYb>A;=y<*9*##q{vPBXK>iVA{O&)4yai-jaoP&0 zzcDEPs1wNDB_^Am$@n42WV{{7+YKh;m{<~bC&xR}g{Rv<{$0PL$v&11cK0}j?6UD5 zAn(Y=dx5;ONGOkt_tl~7qd`dt?&HU32K&zfC>`a8vX474eu~Z`E?6Q?e>K*OwK+3B zjCedN-alR&KRZ4kJ}^EgJ~%!kJ`|KPP|8860EGjE2Sory1jPi31d5!C57$L9K2kT> z@v+FGq8L0XX2zr9DDl_~JYp7sZ2VGCRL0{psYzqpO zQa_$p>`-E{=~+yu$YR0_%7F%p2^+F#T5DZN7gX#Id>{Q@Hmmgsu0zQxSoGLcEpQW3W%v5&@O$Hv;T zHf<6eagTrEz(m``L5YJCha}o1+9x`I(is#)>M&5cfYKF|ZlH7rrN`1lCw-+yx6ujw zy`K4d{FNj3j#$iIbc7>8JGc|afYOU0L_4?>CnQe9>ts-RgL1fb#}xOD^0(|=?1!__ zIU~_uAJMb45j_e$u*BKqxG8-Ki5R?+H5-zkm|J3KVpw8$VnpJc#JP!)iBXBsi7}uY z4GMPUSWu1w<#16n@{5t-! ze@SebL2M}Kmbe_0(-F-b5lYO zxh1ran{p;eg%)yC&ME}U!YXeh?n>w(x5Q$N$J)l4F&LL6))I`%6Dtxc6RQ&UCGJnG zPCSr!FtG-d0iX;7We_NXK^X!H&Jl)zG8~ikvi?xhb^wK!b5K zDC0qyKrl`$!PpEiQp_#!1}GyLj1+TAY;>JW7bv5s#E z#D}1aEfUC26JMaxB|gJ2hl06ky$cgxVwgi2hhkR<=&_5{xPvd*GfDs zfL_`8q?KQ4S~;%ZZ(wb`3fP>`MHZ*q!(*@pm;&RVRaT0Vo%OauFyO zgK`NdQ$WEP(o|3&SB>cf=%-ptJYFr~KNVtg8e?;Y#^xMib8d;vrf0L-hiq1(8NAG3 zvpR%q1~!>L3T&#z#ND4@3PQRo(~-@LG1}GD)hT4N8V71-wi=!8S;etgy>E3ZB5O(Y z{+eHQIg(X{5LMI%L&dtGiWqukKOZ zv$|Jx?`rf9=7Dk*C|84W4Jg-wf{K4VC^syvKC-?;R*gn|{=Xcun@SGZzYbkipF#AT z3CaRSPc70@eYX2vxDh-3%&_Wn^uZjV4d%@>m?Jd`ZYiXId!IEsuliz? znCfxWISp>>rP?qGXFEJzr zbZ5JI21(4_Ok(b-TM#Q%k#C0Gc-7YtBlwCfWsEF9Mj9O9D+qb+y+gHx=wO6mKzF!COJ`Ko~1mry$kjo2zWHdfh z{S49gaP=eAk5)fc{do1d>L;q7tbVHcX;AJ1<$h3BgYp0<4}ya3*;-H@0_9;)9?4Zd zYtZ3r19^hf;6HVRi3O!a!EcZB*mmDDJ5l4o&)81P+kD#MNnP>u97?>ZQG*O}sZW8ABSAaZuhgv@waN-4>V|T9Q0i^Ss`|`DU`cwjzeb=KsASw(n?z z#pI#Mt{RKUE*gvPHr9-_>76{DSUfy=MDobwQOQ2ZzR9DL$0UzUqD%E2DDQ)Uuipot zdwoce2BGEVjl&`YM^FhI~^TpWdTd_+d>+- z93yLb5)*LavTSmuM&tL5HDhhAOx{Q|&P!gEygGSJ^4jEe$?KChBd*Eh?k3gOt%8WJCRE@^PZ^F;I48lj}gikbF@zKAqIIFfB>q7A6ce z>_&r|d_gm~e-+Zm-_Jho)#MvGjjt1pYFT5=Sev(#pAe1jB;QSLO1_tTKe;*iLGr`o zN6C*ttpJq+l?PP-RRq-pssySGssgH-OMYt5_$4L`xL zl#;R_S}7GhM-@*ic^9Uvc*ae2qC^%FdCV=23U3DjH$tGqpMaSGy-9SwkOs43V8&(q03lU)Hki(J6dd_32Pl^t? zrTT)J%%+Y3HB}^zC#3X4ZYk}Mn@T0?Q`#XnHB$hUqkK8z>dcgW$StKEa#QzdtQl)F zBsG>;9GV)I8lD=FIwy5*YGi6uYIJH0sQZDsKd7xhZ4K%Hptb?^Kv3I)dJw1w=Tb(% zErkKM)TFXxiUMxxA&kWinm`^#0@kL=>oMq!bmp? z%uZ#4eO>AX;_-S=J7!a;qMeH5@#Yk5VM^UX^4M9E$J(B;$j?$=5|N)1kytwl z4fa>K)T5rz;8Ks&FVXctJ?dunGRl5RX<3ohq;RPRP3$QomS2$*s$$yve@)O?o8QwF zMCKo<9jTqEU8z4)yHkIq{!W*r%RxO2)YC!j2kIH1o(bw%p!Nr~7Syvr9gs_NI+_Vs_W5)e$@F^7+65vWySP)o z*O8g7PE*J&jl(n~n@)pTWcK;=zG*$=mexXUDrKKfYautaf$a0#CyA~holJwV^dV_I z@|M;jZ|b>?wP$U*q>n-_(_Pcu(%sWN(mm6?(!JA%r;kXZGL8auG^l9J$AWqusN+B# z59$O^CxUu@F5SoA@>qS&oj#GcoW!`ipw6M3Qo^zsu*Ab|+4MkACmVv99)eizvE+Dq zWO_6qi6eSpHjN{CQE_6K9-ls+jPR25M4E4_7ZXyGHL1I#K8YCSPG71i zwOJb@AMO7y>VZC z16yXS`zE^XXIO8xoh$u9`emKXmozr#6Pr(HNEaSRNpPo-%>*t`IMMa zOfVD5gfo#$RVJE=fw~OT<)E$rbtR~)K)nyt`$1g|>I0xYn9C&eeKQ%O!dqrvqH&F} zcSe1v&SpPe63V6*%1j5OG1C#$wT4h;4ke+)<3_HNao(*RHxjkeSY|k=PlEass856X45-h7`W&dwgZcufFM|3~E_04< zwKJo+sdU66Gmcn%nJMF|+OBIl;-RiD!PpEiQi-<=`cVz>fH*+Pycm=4hWi#khy4gYgYq$H^?vmbu?7gi-pEfpu%<4jsnZ zH5fNE){M1ToLNOMF3H@TS(>>glgr$jS(aIzS&>08d<)dKL460*cR}3*>U*G~?cNM3 zt{;4u%iL$c_+aAk44!+-JWMct#9+jbH_m*%A{g<+dTDulLK82KXQ;$m24&%62IDIT zW9C&{kvx@FBtM}Q$&9`txr`0=#?0HqBaZ85*$j^B=SA}Peg@Z#h{q2!9={-!`&bjl zFAI5`a*?B)#k4bDX7t)_nXfe@ziF%`>*Y_G9fai1nJt-LGFvm-GQVbi%WTj5p7{gR z??C+?)E_|o5!9bR{Tb9PpyJ}_R#3O)GCK_<|H}LwKc*~ML$%%1Um23WgNg_A|0E=L zmym3FeXOC{ZZ!^2e>0G*q1tXWZkvrRP`6W!675dQ6Q`4%Zji#10xL$;&`>)2@v%a>g z>5gdDw6Ez<)3K&gP3M|JYYwaFQq#4j8<@+$Tn^?6Fmqt$!7PAT1hWau5}4&&O%EN- z8l%Qr4K4+NSuxNw*PU87J4$3W1DU52nf<`bPOaBqCZxt{qtpzp8A?zN0kb7rGYrf{ zo?5Rtw+0uD7S@c!DUBI-EqE8!jKSEA+1^m>#=eNR)RTEq(-i;!6hTo$OlOy&D8|fLmF7g0YFLm0w z^a@K2U7%h`>oeNDZW>baQ_cUw-hD?!b+vsT-vbuZa}>nhKtPbG6vc`KLB$>sR74R0 z6{QK-8(Y!Xja{Qru|=`R8jTt?u~+Phy%+4Um-joA#M~x%?q{t#_w)XdmGwyi%$)t( z*L9sU0}PP;%{SM_S-q^vlQ7q;KS`o^eLe*RTyop_N^5Dp!n}5UE>PV%oRO(5kewsE<_7z5Jp=^A*M?_X@-J zlcz|<-+YB>^3N6KKYxYM@~7cawOqs-RY| zb(V@>s=(WJx<95S~v6KUE@D`ytCw+bm}wTUjP63mM2Z=7G%padjow{E%lk&peQ!{|w~c zFpyo$0~s!r+#grhc4Z*7-HIGHlS+G;XKMDp`F2O{Bak*$8*d)TIH`0<)%KD~$iF#~ zy|r0Srj}@VGR0$FNAqOyXQg>E)#6xaTn*GqHotgce zU@d=ZL@Loa4}VH*?pKwS#DC`TZ?7e_CDBH+Qb~X!mE& z;=Zg|OyU7s%kwav$N%Y%sB4dE&zooQnD)3fU3)@%QhQ2!T6;!&R(nn=eWcP?D*dF= zUn&EnGEgdmq%v44L!>e^O?x5d;&_=~Vl|zM<8|{aCg(m{4>MmJd7&j2$1ndG#=l`0 z`6ZL7+NV;Hxx@Gi!&tJUy3Q=?buv$~|NYxIzSDj%kK=o(3{Ta5luF9KH;y_>T|V<% zEz#x8x-^d98mF_$x-^db{L+|rVa_<}RGoF!IO_O}mdEN*e|5Lq`;^dCWE^!Rb)|Hr zb!BvAb>(#Bbrp1WI(w;%k;+)9jFZZEsZ5Z{M5%lwl}S?JsyQW1=a4;)I_K<5qmEZ$ zONG}WnE#Q=^j|NHv;UdK|NJ!Ssxytc8d8~-GmX01Orup}=O4|a1+Tl~FOZx6{p&R9 z8tD9(MxC!zW~AyGN@eE1IgL$pyk6Tpjm@&Aah7?kT4qh-*PlN@MfbX|1ex(HpQuB(oR<+)OsCzbh9;dAl@QduaKMN(NT z6)xG|rs<+`rZL7cS@Vskq~mqiQZfI!{H$qQ&c!jAOQlrS{40#@t_ys~f8`f6q8THSZLb-MMs4Z4lGO*)>1?3N0* zzAlw#Qniq(tyCSQ>M7L*$=VZ^k)nuYS8>O(yKY;ukQz&=tPiyw+BGUVvZl#o3QUYl zNHm4_PDqMM>>id7Ve*X&?;R5vo0Mqk7L{c3508uO5td+x2@5y13}~12c9XCKQ=iD# zh`0okf0KZqMy7@dVKI??;}Ux2yq*2tfVkcX;gO~m{4R~e><=`Ei;hb$zio{9G}f-1 zSQ|sFC;iuA1tj&4j!f(x8OcVo@@Bmw!2FJY$mqy$zD?IUtgo^Ar$P7T1l|09UccYP zI+PP@OQ?14|62VT#3e*#7w-2pI-V2ehfwR3|5}(&W~_BsL{wOGqXhoL5dS{g>6~oa zL#+q?Uu0{P5Z62Y_p^T?C(@7qAI|>oPSPtmL3f2(C;!)K*DS2R`RbH)ezuN_OUini z0%rfMJKc5NL-T|A4c$%ME!}P19o=2sJ>7lX16`(6ev-=1QrRPwy;9jHmHkpVAeDns zIV6?CX}U+*59S&r=c(mO^Mm=3><9DYcE3KeJoe9H`G5YgT%VW6a(zCj9L;$w*B9Wi z{7+wgt+&?OW3PG4SML2swG z*H_d#=pFS=QaLG=Q&KrCl`~Q~D-}L5J};FEQpu3Y#WcNh?r;>H;LMLR>5b;$$ay^r z!(slOg!!kLlq>&C$KNm=e43G}r@FZ>XVLTHpMNnOjr2{jr^7#MIE@F z^4jE1#~1n#^K`V<2k6`A1NA}rw)%GZ_WEFb2dUhU%1x=y#%soayweW^T< zN@kkAWA1chUpn-W=IMC&*`?$0Kg01i3`e4QIFh9DDEHFQ_b-QIh(7C2OK;RCXAQ>_ z^KcB$8jh!*4~OM~+~F9dH-9x(KUzOVKUP0ZKVCmUKT-dcev+QAOFWm#FH(6Sm6uX^ zC6(7wc_Wp#Qh6tp_i6g6|1um|U(NmSufw5=e}?047!LCnbM<^N_hasGn7^3&=Z`BJ z^qaG<9GlF;p=ub8V*EJZ_cHIJ&xRv+GPdjYnQq3<_E2$QcYC)+MlB$xXKae{aMJMQw@t~5P&QT&g9cT2iW|q*_|4Wu#hGs^z3wKFyHx z>tS=BksA1Jxm0sri}TwvQq}&S@%Yb=hr#^IVGT4S_mwyX^Dl?}(<_I;(UA3m!;OYY zS;JA0;V@*q;85j{Nc_vsFxyzH&lwJb!BCyyFc=LcgPXzK;9>AIR54UFcp0im)k&)K z+gYkEQmric=Dezvs!pnUsT$G@HF7T=+0Qu)_07X!{Pp6I^P3b^w||D?Zy1i2=HX~1 zRa4Hj!w~S7!x3!gn04hagk%keyLmW5v#uN-pASdAqPfEnVTdyiN2H;vp_`$*A|Nb_)fDb>2U!!hPBhhvg~-@eboieXCDaMU*s$Mme>@cDc=EH~v2$85tA^Ki^D zd}Ekvm}i)8NHr`lEHo@KES9RTRQ;sdP^yij+E}XoQf(sDrc!Mt)#ho2Z~tXD_&Y^X zZSmP~wEAZ_{)XY$W*(01Qf-+#96SGVIQAJ1W)H`Ktl{{=JRFC!hNJc8!(p{1cR11w zr-XKa;e_F&RNF{3Xo2Ch;fz$@VS|fuYuM|H&`mWqo?4 zZqvH}IBU>0_XZ<~s$AnrJX%H6^&o|=iv%goC+b*M>(LVb=xd(AHI{p3~F2>5A9#zMc z#>jKU_~aQUjV6nS7I#Duqnpv)kYV&}pP2RiET&DW2~y<~%|NLRa;*Q8mFI|VopN7g zXY?}G6xxNxYR2kDo?s+OHA$+y7aD6>Tr%=$X`ke4Qtiv`vZp*Kd(!^AbDs=&$vjBSc`HU^5F zVrOuRfZR1hS_HHXi|rQKAg*_8Qaj!s8QU$1(H)pBQp5;jTVp$J>>nEu*^hH;fw8?9 z{mI+ex9MOE3AHZ&yEF4&Pu+#aj>b-6^#63TP-|P?pf>+{=iIG!Hg+*@m9uY1s*$sA zsQHX?_@rRJKl^_@9|FP>!b7e9tg^XBk21z`sWbL4_B2KtIbVlKb+}Yhq&i}eG0qro z>}6ygMoN|EFQcS7)x7o}U5#?DF2B3}WnErE|L|g$d;8C>Mt^+szqmI3?=HMK<;aQY zAKNu9_mcc)g~}eQf#$IqB-PQMo;*X1$wq19d+6h&I##MXhHk z(^#>msurN+6&dB*w1RO15ULgOOiVyRA(D)*cr)tOSACDpH`I$Nr9mWqAG zrN(8(G~;sP3gb${$K=*h{YI*Dr8-Zl3#7VGs*8BoF^}cH_W)6)0S`Yu9-h@3HuS8{ z#k+=&M^$&9tc!QnhkQT((Es|eBkMp7K0gqT9a$gp`|}Ug|NKM$<|Ab82z+nc^81Q! zGj9L%VPL0b*8<}%<8GPR%{oJ|kbtG(TeH zzT=Sb@bBMo%$RPzIvtnl;#A`asV*_M!X^9alyk7(9&~?ww9UG*MkfAxg%%m+E41Z0 zF2K1foip+)VN#9frMfiLm?71)-#t+^<~~DQ7HXZ*&(P2OlTFhOAnQDL!3|8lh42lP@5RDYK09;xn?>OS+iRe~nh4^N8f6P47zb!2>8LQQSj4OV)-9`$`tVK0VJEQN+|V&$yO0 zmM6Q!M@JSmE?^0RsRjs;14R61OjT-y63~1A? zL!eV^@95|gYT+W*Hbr?Ro3kCKaP#MOJk712#MPh+Lz$Rt!Fg%fKA?Aacw}TmWWx~Dv)B3UNT0+mk!)p-YH%;R&}ec?E|6R>xzIun&nn4EvYK2x z*_Nlz+4nZ*`t^Q1A!rfMppAK*hLK_Bt3mGb20KJUF{WvDB+w_Wwp^6*G#HJ1&;{`!h!9+>~}M!sQ5+{opxk7T}4){9pE$6L0EGCyzN z^{(lrE?mpPO%dknLK5%I`YOQmF5ai4dM4{LUsG38H%7&L>;tt?ZcAn z-K*7ftCszU(1XtfgbkOR+)vp}v8H&Q(3#(tYT^qF7jiyhHzkP;*|)5jeb0Vk!~Eo& z|L4=LG|PIX!G;qB+)T*@3Y&(Rh8HMiML#U0ddd8?OiMm5<_|OS*m+H=H>9Pjw8&)5 z-(Jyd8k6(2#LNFjFMa*=C6cCzIbp7bS`Yc#zp!b_d3p68K3V;=L{oE8T@SS$^j}N$ z=?gb=U$ps2+h*ltx*2Lc{J)l|wfQq4^ONW7C-zyf+9X8sVstJARwxYzn1Ab~J8GgX zzCaK{&`F4LMpQw4_@fOvpfkE40#WFRSj1xnR$(g+;1G`B7}9YPr*RgyaToWIiN|<~ z=XilvLX^*s#^{AP*pBn~MTiQ8Q5J6C_itAqYXvV<2Yaee8+A|*KJZ0*u!jmA!4WZeTwZ*iQv&RUr<;Fbzw=+7;MCh08+Nv9?`B@Q3E@8h~TlQ9nCsV@GZ5sEu7$ zbVm%xDs}=nD$WMCt+*PSL7ys~!Zpy7iqzl12DT`Ul3;cmIF3Vk*nt{2 zIHD3<;0hm54~K@JcMeU^3@y+Kt3A0BZ~=F~+&MnN6EJg*?Ah@R-U;DU z3eNCEZBRQWX32^DIk7*d=4gp85P(3mMLfvlM17se!XKj)PG^vTU+__gN(De&D^&nB ztE7VgM!11_uEac7V!xG`)kbnGi08!A!W619RcRT)427 z3v0R1e;4ZF(hk93FD{`7!ywQ@mjzgaB|^AqLA~9`<`#}|pf_$GxKybq0vk{}_u?oC zX40MY-MO#39@NmC8oESs;5Z&+_b|a7 z4bTb!U@so*#e=!qWnIkPlX1@1A7#ECXupNzFYu7d_d#Cz(B|p(p$HWZ$0b+p`gxpcz`? z3$P#0&Y;eok?4*dhz5J|WFMX*F$&Cw=XgxS9DIYhn2(j%f*-IQ?9Y?)&hsbi!3mrK z=YS{Yp63Nz#ARH?J0Yr+fE${E+Ey8WK^P5sRb@J6;%l&e71pl8OjcngtFV5R)mRJa zTV(?d;};>Sx`KUIjYoeBK{AGcbEoPgEXFEq1-Yvp1U;!rPpZo*r!s8$?hPy-Fo z80?`My{i_8E{H%^bVqOW1^cTu5Y(m`=WI3BthNE$aTgDTs9qY5s0n7GI>)WfajP>E z)tQOv%tUpLRh=4D{}R-{`dEwyy{}I0>K}!up+z;+Mjh0HA2?4SiRbvDuU^d8A zV?Gvwn%5v>ji15(Yn%e}QR6%^a0yTGmZv8cVD@X~gB1#*Br3oj4se1F2AJRuPt->X zgdquoF$VO#<`hiB43MoR*=jDpBG9{<>p`z-9>8&&06A-tvnKg!Ucoioz%9HMq83?e z6@eQ(Pz7FKW@=IMTGXpn9n^yle9;i}xK8rO5 z$mmTEy}6w?S-ihM00I$(1dzv@Jl^E-CXY93d$XoDHT9;Z-qh5antD@HZ))nzI^NXO zo0@v>#7R&?@7s6|`s__kZ!*-;fV_1ILP23z!vXA}4z;U8?dr4yGghY$`hj}XVgGd| zgSG1{#|o^(YEX+h2XF{Sz`0i^9b~DS4@JOvSGOE0z#gnw*9p$>L{(G+b*$SIod0!$ z5rR(W3VK$Tp4FvBb*WKZYE*X=s8QWiZqb1?ka4>4Lla2UVf0n{3{&mH2~L| zdY!>>>y5@(u-AGMLEY<7_j+@Ls86lxmxMc*x%#cq9lbCJLy(O7pzf4W_~eBR*t<`8 z*r6hfs0DA-MSYOP#}AFr2ITUg20k6o5oGk~f(XQ6IA-BntiuVM!Zk2+KIHJp#3Q`G zE4;xwd=R36EvS71_R@g$8~CCj8iQGEFapa!?HZf|$7=9e2w!U8TN>2Rm;Ly%A7A?D z>jEtd;5feippU-I(Gp)E03irRB)WmMe0!oF27p@nQcK^l7!Ug3I|*|!9}BPuYq1?a zVmE%q5!}FCFzu!94f;Ec*(*8DwD6W*u?a`;mhf6h&R z>f#@Sc8EkbM4>18VIT&BI{8y4|5=!gxgf9qO6&qX^rt@l2SIK8kK-h$k^gyI#1)X= zpZxxBKz;nFPZJHOQIq^A00o6%4Fj4X9+R;V8A3E=-%Z(X(>myY2#~#L4@86dHXQ7zg&ybPnc$dN*B+Z}Ahz-IQ5tN?)6r*SU%txQ)9Yd$YVK2o+>(Rve{J7UiKw zRWt`RZbqhNgD@KGq1iOd1a)ji9hc_ zK&_f9VEyJLQ5xk?0rsFa&8bau>d<@!7J;>zFT)D3R`a#kf*qib&FN$Fy`Xo^FMz%^ zzYOZo{0{CT6OZu}Z-r=)2R5JvEy{olEy&QK5}3gjS{PtL4fvoXs7;GNv_mjLK%ZMs zs}>_LUWh>U7RYe}D}wt6dchk_&=H*xj;@G8G~$qe-sp$1FdyqHa6Ji}4rU;54w!*J zW*~4es7>H@u(VMxRT%*HBEyCC`$vjuYG#^f8#e1b0R_A|Wvb^dOiX1WyLF4yIm{FIp{DAoEIGyfjk}3 zuo7!Ptvl?%V?4tPyv93xJ`Eqhj@Tq zgmgs|qQTsTB!IaMVQxbPf^#>7`h}$6ON;?^455x8>>-3%4w(gJIb^+E0^az`~oOSA^_9~BSQ zk78D$#()||O#rou;&@RDu>{OU)GDmSI{X0UBZ?YC?FKc7I)$^i0D2vD9k*~th#q;s zetMKe1=zy@Wb9D|)ld_4L7jW}fxJChApn7B3+AQ=_3aUjI3%Gj24E0IU=-L(5BAc7 zS?@6i^FVESP@5j#g3LV*;V9B^5;yTd2wEq4S|T3`fIjschOtNk`|rtpdNQNY`B4n? zBDx&tMYI!KpoJdHPBe2B&Hkcm!ynB+AEN0)G<%C?Z_%9*4$h0{?qJ<$<|CT^L^B`J zDMG|(P!J`-dNHgQLmgvSFNXDE3^1W7+M^31(GAoshI1%}W5#gI7>*e;5~D$_V(5F! z415i07Bd&iu?FlphI1ljE4G8a$56uNF31~~A7qNFfQoPgnc_S^ALHm_TrJc=J%oTv zaoy1qF&Khm3&3HP{4h+!RM5wG`WQbC3$Pg9f?mec%lHl01nLsMAM`PvKE|KK8JtH3 zZsHE^;Q?ObgAl#wV=wyHs{jVvoHxW2+DeoCj_D$I-nz{X99Ig*oA{Q0_Hp61gJ^EMO?-!ArkYVFxY!yF_Z)~NMvpj zo#6^SOmGMLPh@Tq8-V>M?gYnAJO+-Rcv^_0Rv<@GD7qjLtd~UnlOEy;o(s`C76b7W zreHc|VGhXOo4)s6jHOtPRoIO^*oOl+1p3}P9rV68>-Ro~3t*qU-w4sCG`vBcKEtsL zhe4jcg-{vnt#1`nLk&>pzSOsG3$UNQ0ie!(+adzpz%2J=mixwoS?)U#WbaEK`_jk0 z%xm8jSdH(n9^~&!{=Q`HOE3Cf#SPqsInN_J1@-A?32RgW8T;vA1X=r$wI5mg)dYL% zM^E}S0CUifIp|0I`?24CVIXfm^7bQdzi7mv7ZO43`;o67z3caj5dEoD|GEgrFtC^Y z+p!nayFYd7Pxk(2LH7P+?|%z-aUYpr5B=ZaqYwiuz>E#BLP5BI>;tIrfZAZK0lsL2 zCTIro59ox>puPjB?SS6shr!@lF<>}GU@FKsU?aZA57>cS_!-Q}fP*-K<2VVj4xrWp z9^x^m_W<@jfb(Gh^D=jPwOvW_K#Mjt_pRgZ?z*>XIJ?IS1BLmcW5cvna z6@tTw!Q>pA4~0+|Hn4>QOrXYtsqtWHJh(YpApk*Wj}VY~a2NE&01UzqQ18Lid+Ii34h96p^ErP*XL&-ff64ZQX4^Zo&ZicSGHvEX) z*aPZ5^dOk=q11cmMO+agnffG0gIP@O2YQ)IeUjN{GBru2Cdr&n$x|>L^fP%qPUD^s zk{(HGlmvT|>`k&a$vGjlFu)BSXoheM1#==fwqzfYPRnVXQff zSsg~Nhm&JCIfnDT;p7-jj^X4Oeh%i3U&b{s6T_K_;ba<4rr~57PNv~6@dob&KU)P$ zmYM?gi!UxP!N@Fxd3w(h#V75}2t(1=F zjBs>C6rvG_1TYIJ%t8vYkV3sun1vJqr+kSq7!P`uG6mDY{G~8|DfBL70TzQ=rYy%Q ztOYZZLO)ZsU>knKZtMZGnL@2osB=m>PT?#r;1aIl25#dXGVvJCK%Y}y;~hQy?fNid@$%EKOxLX70&Bl-A9K0cCUeM^D6}7n0By127oL7>lxT6ZHp(eah4-L=|{%D4lXpKO$LkDz17$VROJrIrl7>FT| zLX2t*?l-C}g3%Eda0mCmOpRiuMlZz%Y{C|76JiXR#?ad_}x#pF`m7Q=Q!ip%Xo5) ze~H&%zQ=zQV!}_LUlUH?G|mYzk$p{Mt|oH7iQI1@HJEqEW{EaCOg9uRZ$(aK#eAoXYwBG#~~r6d;xkgr88J>N>@Ap z>r8oz4?;}UfZj|U1?n($JiZcQT0xXVX)rI-n3rkiL2aiogVQ+9G-hym90q~jPN%oi zQ-qkoF=vo{hBa)#+|A&aGrqw*EWlzRX1ah`o9TrbsEr>${+XN)GdUk-Qr}tBa~A8& z>V+iq#d{&XCgax%il8W_A{Er>YwGm%G9hN`!LeskquF&(ANz0$XTY9jUld{v@1N5G ztq_19@Uc1UcMkiV!+z(m-)}hPHyg1TTd`e;xg2|LV>Cf?aE!S-a0u*SE_;}JQiyr& zK@aA2M^D6pW6paAdNH56&Ci2zn1$Jx3-*-S030`!*-T}|Qrm%ArBbU@YL&`5sjRag z6w%<=3#iuu>b2mF5DW9802ENKg@?iZ7G~fwt_iV-Y>N`XJT77$7Y!6*F_{(@hBfHr zVtTolbrxR&*QLeRaZ89LthHnak}(`3!M?s_&2O3IZ#l-dHef&BF2_o&!8#$9a^I!g zcPaN>%6*q|-(~c68S}TSG|IsaOR)i)um#(MNUMXUpzdkZCym~vod&tmZsHE^3$Z)` zth1c`E$@T=cq_yTE3noI73^`vbSwn(xq|gpkaeXSyipfE@B?eFJb*(uigY1XeSuEk zd|MR`>bdFxUW2t(eGp~}r;UGD?-yM71Q>-r-&4(5475ZLF2NOVU}ycA+1>uk&idcRS@SNI0= zz&aaQXOj!6zza1{8@q7~)N<1)oE2hoNAy56;y_I{zYyYkOXLOh_`VR>-}lt<`&pO+ z*4p9-_OitTRZ$&j*o5!#1K8JA_PVtRnxQ3HgWGKV346dfww1mA&=wJ(uRlbAOxr4h zV{fa5n&4R5xZgHvwCw~=Hp8n z*`BhXUVF4KfZpt(4|}Nbo_#n7=4&sx_fn(1oe&1r+ItJn@C#ULFXz)f*4W1y`&eTi zYwTl<{nTi`GgxQ84n`~i+4obU{hP5>hyxYD#}1I;fG3#41AP3zF3`UNdvQRBgDubj z%;CY#2nV%1NWTt}=OD9q@U;+!=-VOscIZot0htbc6ymUg!mt6gJv)X4 z3if#{8e~0|f{_>n`f!Xs9Ah?)O~EwG1lfpHBXC@~3NIfEzsFh3W`I7j#1p#2^8^(GS!CEB@3y}2$Sx=Ng8I*$^9N+{O zxS}DLi4$ZwK`l+x&SJp5y*d<9-WQ{*-!Td*PYW}Vhrfh>4}&G_HcR{ z7J#0eUJ7b=dKK2-FwWyLuED$(xlhxx(~t2~h%?OA8Sx=p% zc!T#s&x63$)O~2!T9}BNeQ9{*n|Bzgri^|7f#{{sC5R}GsvDn z_6%kv!v>t687081WH2ik^eTg_8D!0<2Wp%_jWe2}IXG7{qA&pD&*0q57>FgsT|g6vnweueB;Vi1o+^akg}74~pt3Ye`c z%+?jMUZG!CmS7o{V+;0z>{keXs7K|CF|9) zsDO%agfqx~mGk9lBXkAl=+zZC26}jnK3%JUb|CY$A&?;ZHL_o$=GVx6jqKOH0d>B% z0L;ua_Hb<-HsX8yfF0P0OCbBT$9M+wT5s_|i0c|yg8bKugUr|MVSop!qB^`$4-Mdl zHV8u>^v56!#W0M(D2&AfOu|%9lqY z*1Qn~YH)*n-be?1xLFv?_)ThevpnoToo_N5H>;o;YJ&VX>!KN2qBR0Rt#1aSFR1fP zX8h(ju+B{~-<*N3F$c`YO|swIiXTD7n|p8&M{pb`z|7oyB*d*e;C#GQ5Gt%;ixMb} zav<+52axj?Id9cQ9Z>6A4bTw&Xo?nS1+w3Y!vs*nTPN{Kh}-n;wh!pb?PM?`x0#FE z)crPfzfJbrn?Uy4WWP=J+xu|{3TJR07jYS6zeDyrw{S;@yLmy*yN$t`cd6Um^*D={LfoSt_dG%E?=d6y zsNp?dG)EBHqXRmjGuXqu2=qb{`eFbEV;$#GNB(

cTBw8iAoKl32tg>q5Dw~npL*Z# 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%0A1IWy{_za$0NJnvmDl)!+aL9 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
P>yRH7bo$8JUo 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 BQkDP! diff --git a/IJSVGExample/IJSVGExample.xcodeproj/xcuserdata/curtishard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/IJSVGExample/IJSVGExample.xcodeproj/xcuserdata/curtishard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index c8984e0..f75caf2 100644 --- a/IJSVGExample/IJSVGExample.xcodeproj/xcuserdata/curtishard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/IJSVGExample/IJSVGExample.xcodeproj/xcuserdata/curtishard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -14,8 +14,8 @@ filePath = "../Framework/IJSVG/IJSVG/Source/Layers/IJSVGGradientLayer.m" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "102" - endingLineNumber = "102" + startingLineNumber = "93" + endingLineNumber = "93" landmarkName = "-drawInContext:" landmarkType = "7"> diff --git a/IJSVGExample/IJSVGExample/SVGExampleView1.m b/IJSVGExample/IJSVGExample/SVGExampleView1.m index 6787b84..89637bc 100644 --- a/IJSVGExample/IJSVGExample/SVGExampleView1.m +++ b/IJSVGExample/IJSVGExample/SVGExampleView1.m @@ -12,7 +12,7 @@ - (IJSVG *)svg { - return [[IJSVG svgNamed:@"heart"] retain]; + return [IJSVG svgNamed:@"heart"]; } @end diff --git a/IJSVGExample/IJSVGExample/SVGExampleView2.m b/IJSVGExample/IJSVGExample/SVGExampleView2.m index 07d2eda..46e83b9 100644 --- a/IJSVGExample/IJSVGExample/SVGExampleView2.m +++ b/IJSVGExample/IJSVGExample/SVGExampleView2.m @@ -12,7 +12,7 @@ - (IJSVG *)svg { - return [[IJSVG svgNamed:@"linecap"] retain]; + return [IJSVG svgNamed:@"linecap"]; } @end diff --git a/IJSVGExample/IJSVGExample/SVGExampleView3.m b/IJSVGExample/IJSVGExample/SVGExampleView3.m index e98178d..6a1cb55 100644 --- a/IJSVGExample/IJSVGExample/SVGExampleView3.m +++ b/IJSVGExample/IJSVGExample/SVGExampleView3.m @@ -12,7 +12,7 @@ - (IJSVG *)svg { - return [[IJSVG svgNamed:@"products"] retain]; + return [IJSVG svgNamed:@"products"]; } @end diff --git a/IJSVGExample/IJSVGExample/SVGExampleView4.m b/IJSVGExample/IJSVGExample/SVGExampleView4.m index bf971cd..da10bd7 100644 --- a/IJSVGExample/IJSVGExample/SVGExampleView4.m +++ b/IJSVGExample/IJSVGExample/SVGExampleView4.m @@ -12,7 +12,7 @@ - (IJSVG *)svg { - return [[IJSVG svgNamed:@"clipped"] retain]; + return [IJSVG svgNamed:@"clipped"]; } @end diff --git a/IJSVGExample/IJSVGExample/SVGExampleView5.m b/IJSVGExample/IJSVGExample/SVGExampleView5.m index 6c2e130..be20e79 100644 --- a/IJSVGExample/IJSVGExample/SVGExampleView5.m +++ b/IJSVGExample/IJSVGExample/SVGExampleView5.m @@ -12,7 +12,7 @@ - (IJSVG *)svg { - return [[IJSVG svgNamed:@"dashed"] retain]; + return [IJSVG svgNamed:@"dashed"]; } @end diff --git a/IJSVGExample/IJSVGExample/SVGExampleView6.m b/IJSVGExample/IJSVGExample/SVGExampleView6.m index d257467..bf419bc 100644 --- a/IJSVGExample/IJSVGExample/SVGExampleView6.m +++ b/IJSVGExample/IJSVGExample/SVGExampleView6.m @@ -12,7 +12,7 @@ - (IJSVG *)svg { - return [[IJSVG svgNamed:@"css"] retain]; + return [IJSVG svgNamed:@"css"]; } @end diff --git a/IJSVGExample/IJSVGExample/SVGView.m b/IJSVGExample/IJSVGExample/SVGView.m index b55f1cb..6f72ed0 100644 --- a/IJSVGExample/IJSVGExample/SVGView.m +++ b/IJSVGExample/IJSVGExample/SVGView.m @@ -10,19 +10,15 @@ @implementation SVGView -- (void)dealloc -{ - [svg release], svg = nil; - [super dealloc]; -} - - (id)initWithFrame:(NSRect)frameRect { if( ( self = [super initWithFrame:frameRect] ) != nil ) { - svg = [self svg].retain; + svg = [self svg]; svg.renderQuality = kIJSVGRenderQualityFullResolution; + + __weak SVGView* weakSelf = self; svg.renderingBackingScaleHelper = ^{ - return self.window.backingScaleFactor; + return weakSelf.window.backingScaleFactor; }; } return self;