[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# CocoaPods\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control\n#\n#Pods/\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 kongcup\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "README.md",
    "content": "# ZMConfuse\nZMConfuse 是一个命令行脚本。用于对使用Objective-C为开发语言的应用进行代码混淆。混淆的内容包括文件名、类名、协议名、函数名。\n混淆实际是对上述内容的关键字提取之后进行md5加密，使得工程的可读性降低，已达到增加应用安全性的目的。\n\n欢迎联系交流\nEmail:zm53373581@163.com\nQQGroup:175070221\n\n混淆效果图：\n![image](https://github.com/kongcup/ZMConfuse/raw/master/confuse.png)\n"
  },
  {
    "path": "resCustom.txt",
    "content": ""
  },
  {
    "path": "reskeys.txt",
    "content": "A\nABAddressBook\nABAddressFormatting\nABGroup\nABMultiValue\nABNewPersonViewController\nABNewPersonViewControllerDelegate\nABPeoplePickerNavigationController\nABPeoplePickerNavigationControllerDelegate\nABPerson\nABPersonViewController\nABPersonViewControllerDelegate\nABRecord\nABRecordWithAddressBook\nABSource\nABUnknownPersonViewController\nABUnknownPersonViewControllerDelegate\nACAccount\nACAccountCredential\nACAccountStore\nACAccountType\nACError\nADBannerView\nADBannerViewDelegate\nADBannerView_Deprecated\nADClient\nADInterstitialAd\nADInterstitialAdDelegate\nALAsset\nALAssetRepresentation\nALAssetsFilter\nALAssetsGroup\nALAssetsLibrary\nAMSymbol\nAPI\nASIdentifierManager\nAUComponent\nAUGraph\nAVAnimation\nAVAsset\nAVAssetExportSession\nAVAssetImageGenerator\nAVAssetReader\nAVAssetReaderAudioMixOutput\nAVAssetReaderOutput\nAVAssetReaderOutputMetadataAdaptor\nAVAssetReaderSampleReferenceOutput\nAVAssetReaderTrackOutput\nAVAssetReaderVideoCompositionOutput\nAVAssetResourceLoader\nAVAssetResourceLoaderDelegate\nAVAssetResourceLoadingContentInformationRequest\nAVAssetResourceLoadingDataRequest\nAVAssetResourceLoadingRequest\nAVAssetResourceRenewalRequest\nAVAssetTrack\nAVAssetTrackGroup\nAVAssetTrackSegment\nAVAssetWriter\nAVAssetWriterInput\nAVAssetWriterInputGroup\nAVAssetWriterInputMetadataAdaptor\nAVAssetWriterInputPassDescription\nAVAssetWriterInputPixelBufferAdaptor\nAVAsynchronousKeyValueLoading\nAVAsynchronousVideoCompositionRequest\nAVAudio3DMixing\nAVAudioBuffer\nAVAudioChannelLayout\nAVAudioEngine\nAVAudioEnvironmentDistanceAttenuationParameters\nAVAudioEnvironmentNode\nAVAudioEnvironmentReverbParameters\nAVAudioFile\nAVAudioFormat\nAVAudioIONode\nAVAudioInputNode\nAVAudioMix\nAVAudioMixInputParameters\nAVAudioMixerNode\nAVAudioMixing\nAVAudioNode\nAVAudioOutputNode\nAVAudioPCMBuffer\nAVAudioPlayer\nAVAudioPlayerDelegate\nAVAudioPlayerNode\nAVAudioProcessingSettings\nAVAudioRecorder\nAVAudioRecorderDelegate\nAVAudioSession\nAVAudioSessionChannelDescription\nAVAudioSessionDataSourceDescription\nAVAudioSessionDelegate\nAVAudioSessionPortDescription\nAVAudioSessionRouteDescription\nAVAudioSettings\nAVAudioStereoMixing\nAVAudioTime\nAVAudioTypes\nAVAudioUnit\nAVAudioUnitDelay\nAVAudioUnitDistortion\nAVAudioUnitEQ\nAVAudioUnitEQFilterParameters\nAVAudioUnitEffect\nAVAudioUnitGenerator\nAVAudioUnitMIDIInstrument\nAVAudioUnitReverb\nAVAudioUnitSampler\nAVAudioUnitTimeEffect\nAVAudioUnitTimePitch\nAVAudioUnitVarispeed\nAVBase\nAVCaptureAudioChannel\nAVCaptureAudioDataOutput\nAVCaptureAudioDataOutputSampleBufferDelegate\nAVCaptureAudioFileOutput\nAVCaptureAudioPreviewOutput\nAVCaptureAutoExposureBracketedStillImageSettings\nAVCaptureBracketedStillImageSettings\nAVCaptureConnection\nAVCaptureDevice\nAVCaptureDeviceFormat\nAVCaptureDeviceInput\nAVCaptureDeviceInputSource\nAVCaptureFileOutput\nAVCaptureFileOutputDelegate\nAVCaptureFileOutputRecordingDelegate\nAVCaptureInput\nAVCaptureInputPort\nAVCaptureManualExposureBracketedStillImageSettings\nAVCaptureMetadataOutput\nAVCaptureMetadataOutputObjectsDelegate\nAVCaptureMovieFileOutput\nAVCaptureOutput\nAVCaptureScreenInput\nAVCaptureSession\nAVCaptureStillImageOutput\nAVCaptureVideoDataOutput\nAVCaptureVideoDataOutputSampleBufferDelegate\nAVCaptureVideoPreviewLayer\nAVComposition\nAVCompositionTrack\nAVCompositionTrackSegment\nAVError\nAVFoundation\nAVFrameRateRange\nAVKit\nAVKitDefines\nAVMIDIPlayer\nAVMediaFormat\nAVMediaSelectionGroup\nAVMediaSelectionOption\nAVMetadataFaceObject\nAVMetadataFormat\nAVMetadataIdentifiers\nAVMetadataItem\nAVMetadataItemFilter\nAVMetadataMachineReadableCodeObject\nAVMetadataObject\nAVMutableAudioMix\nAVMutableAudioMixInputParameters\nAVMutableComposition\nAVMutableCompositionTrack\nAVMutableMetadataItem\nAVMutableTimedMetadataGroup\nAVMutableVideoComposition\nAVMutableVideoCompositionInstruction\nAVMutableVideoCompositionLayerInstruction\nAVOutputSettingsAssistant\nAVPlayer\nAVPlayerItem\nAVPlayerItemAccessLog\nAVPlayerItemAccessLogEvent\nAVPlayerItemErrorLog\nAVPlayerItemErrorLogEvent\nAVPlayerItemLegibleOutput\nAVPlayerItemLegibleOutputPushDelegate\nAVPlayerItemMetadataOutput\nAVPlayerItemMetadataOutputPushDelegate\nAVPlayerItemOutput\nAVPlayerItemOutputPullDelegate\nAVPlayerItemOutputPushDelegate\nAVPlayerItemTrack\nAVPlayerItemVideoOutput\nAVPlayerLayer\nAVPlayerMediaSelectionCriteria\nAVPlayerViewController\nAVPlayerViewController_iAdPreroll\nAVQueuePlayer\nAVSampleBufferDisplayLayer\nAVSpeechSynthesis\nAVSpeechSynthesisVoice\nAVSpeechSynthesizer\nAVSpeechSynthesizerDelegate\nAVSpeechUtterance\nAVSynchronizedLayer\nAVTextStyleRule\nAVTime\nAVTimedMetadataGroup\nAVURLAsset\nAVUtilities\nAVVideoCompositing\nAVVideoComposition\nAVVideoCompositionCoreAnimationTool\nAVVideoCompositionInstruction\nAVVideoCompositionLayerInstruction\nAVVideoCompositionRenderContext\nAVVideoCompositionValidationHandling\nAVVideoSettings\nAccelerate\nAccounts\nAccountsDefines\nAdSupport\nAddressBook\nAddressBookDefines\nAddressBookUI\nAlpha\nAppDelegate\nAppIcon\nAssetsLibrary\nAudioBufferList\nAudioChannelLayout\nAudioCodecs\nAudioComponent\nAudioConverter\nAudioFile\nAudioFileStream\nAudioFormat\nAudioOutputUnit\nAudioQueue\nAudioServices\nAudioSession\nAudioStreamBasicDescription\nAudioToolbox\nAudioUnit\nAudioUnitParameters\nAudioUnitProperties\nBase\nBasicImageTypes\nCAAction\nCAAnimation\nCAAnimationGroup\nCABTMIDICentralViewController\nCABTMIDILocalPeripheralViewController\nCABase\nCABasicAnimation\nCADisplayLink\nCAEAGLLayer\nCAEmitterBehavior\nCAEmitterCell\nCAEmitterLayer\nCAFFile\nCAGradientLayer\nCAInterAppAudioSwitcherView\nCAInterAppAudioTransportView\nCAKeyframeAnimation\nCALayer\nCAMediaTiming\nCAMediaTimingFunction\nCAMetalDrawable\nCAMetalLayer\nCAPropertyAnimation\nCAReplicatorLayer\nCAScrollLayer\nCAShapeLayer\nCATextLayer\nCATiledLayer\nCATransaction\nCATransform3D\nCATransform3DValue\nCATransformLayer\nCATransition\nCAValueFunction\nCBATTRequest\nCBAdvertisementData\nCBAttribute\nCBCentral\nCBCentralManager\nCBCentralManagerConstants\nCBCentralManagerDelegate\nCBCharacteristic\nCBDefines\nCBDescriptor\nCBError\nCBPeer\nCBPeripheral\nCBPeripheralDelegate\nCBPeripheralManager\nCBPeripheralManagerConstants\nCBPeripheralManagerDelegate\nCBService\nCBUUID\nCFArray\nCFAttributedString\nCFAvailability\nCFBag\nCFBase\nCFBinaryHeap\nCFBitVector\nCFBundle\nCFByteOrder\nCFCalendar\nCFCharacterSet\nCFData\nCFDate\nCFDateFormatter\nCFDictionary\nCFError\nCFFTPStream\nCFFileDescriptor\nCFFileSecurity\nCFHTTPAuthentication\nCFHTTPMessage\nCFHTTPStream\nCFHost\nCFLocale\nCFMachPort\nCFMessagePort\nCFNetDiagnostics\nCFNetServices\nCFNetwork\nCFNetworkDefs\nCFNetworkErrors\nCFNotificationCenter\nCFNumber\nCFNumberFormatter\nCFPlugIn\nCFPlugInCOM\nCFPreferences\nCFPropertyList\nCFProxySupport\nCFRunLoop\nCFSet\nCFSocket\nCFSocketStream\nCFStream\nCFString\nCFStringEncodingExt\nCFStringTokenizer\nCFTimeZone\nCFTree\nCFURL\nCFURLAccess\nCFURLEnumerator\nCFUUID\nCFUtilities\nCGAffineTransform\nCGAffineTransformValue\nCGBase\nCGBitmapContext\nCGColor\nCGColorRef\nCGColorSpace\nCGContext\nCGDataConsumer\nCGDataProvider\nCGError\nCGFloat\nCGFont\nCGFunction\nCGGeometry\nCGGradient\nCGImage\nCGImageDestination\nCGImageMetadata\nCGImageProperties\nCGImageSource\nCGImageWithOptions\nCGLayer\nCGPDFArray\nCGPDFContentStream\nCGPDFContext\nCGPDFDictionary\nCGPDFDocument\nCGPDFObject\nCGPDFOperatorTable\nCGPDFPage\nCGPDFScanner\nCGPDFStream\nCGPDFString\nCGPath\nCGPattern\nCGPointValue\nCGRectValue\nCGShading\nCGSizeValue\nCGVectorValue\nCIColor\nCIColorKernel\nCIContext\nCIDetector\nCIFaceFeature\nCIFeature\nCIFilter\nCIFilterConstructor\nCIImage\nCIKernel\nCIQRCodeFeature\nCIRectangleFeature\nCIVector\nCIWarpKernel\nCKAsset\nCKContainer\nCKDatabase\nCKDatabaseOperation\nCKDefines\nCKDiscoverAllContactsOperation\nCKDiscoverUserInfosOperation\nCKDiscoveredUserInfo\nCKError\nCKFetchNotificationChangesOperation\nCKFetchRecordChangesOperation\nCKFetchRecordZonesOperation\nCKFetchRecordsOperation\nCKFetchSubscriptionsOperation\nCKLocationSortDescriptor\nCKMarkNotificationsReadOperation\nCKModifyBadgeOperation\nCKModifyRecordZonesOperation\nCKModifyRecordsOperation\nCKModifySubscriptionsOperation\nCKNotification\nCKNotificationID\nCKNotificationInfo\nCKOperation\nCKQuery\nCKQueryCursor\nCKQueryNotification\nCKQueryOperation\nCKRecord\nCKRecordID\nCKRecordValue\nCKRecordZone\nCKRecordZoneID\nCKRecordZoneNotification\nCKReference\nCKServerChangeToken\nCKSubscription\nCLAvailability\nCLBeacon\nCLBeaconRegion\nCLCircularRegion\nCLError\nCLErrorDomain\nCLFloor\nCLGeocoder\nCLHeading\nCLLocation\nCLLocationManager\nCLLocationManager+CLVisitExtensions\nCLLocationManagerDelegate\nCLPlacemark\nCLRegion\nCLVisit\nCMAccelerometer\nCMAccelerometerData\nCMAltimeter\nCMAltitude\nCMAltitudeData\nCMAttachment\nCMAttitude\nCMAudioClock\nCMAudioFormatDescriptionRef\nCMAvailability\nCMBase\nCMBlockBuffer\nCMBufferQueue\nCMClockRef\nCMDeviceMotion\nCMError\nCMErrorDomain\nCMFormatDescription\nCMFormatDescriptionBridge\nCMFormatDescriptionRef\nCMGyro\nCMGyroData\nCMLogItem\nCMMagnetometer\nCMMagnetometerData\nCMMemoryPool\nCMMetadata\nCMMotionActivity\nCMMotionActivityManager\nCMMotionManager\nCMPedometer\nCMPedometerData\nCMSampleBuffer\nCMSimpleQueue\nCMStepCounter\nCMSync\nCMTextMarkup\nCMTime\nCMTimeMappingValue\nCMTimeRange\nCMTimeRangeValue\nCMTimeValue\nCMTimebaseRef\nCMVideoFormatDescriptionRef\nCTCall\nCTCallCenter\nCTCarrier\nCTDefines\nCTFont\nCTFontCollection\nCTFontDescriptor\nCTFontManager\nCTFontManagerErrors\nCTFontTraits\nCTFrame\nCTFramesetter\nCTGlyphInfo\nCTLine\nCTParagraphStyle\nCTRubyAnnotation\nCTRun\nCTRunDelegate\nCTStringAttributes\nCTSubscriber\nCTSubscriberInfo\nCTTelephonyNetworkInfo\nCTTextTab\nCTTypesetter\nCVBase\nCVBuffer\nCVHostTime\nCVImageBuffer\nCVMetalTexture\nCVMetalTextureCache\nCVOpenGLESTexture\nCVOpenGLESTextureCache\nCVPixelBuffer\nCVPixelBufferPool\nCVPixelFormatDescription\nCVReturn\nCaptiveNetwork\nCipherSuite\nCloudKit\nContents\nConversion\nConvolution\nCoreAnimation\nCoreAudio\nCoreAudioKit\nCoreAudioTypes\nCoreAuthentication\nCoreBluetooth\nCoreData\nCoreDataDefines\nCoreDataErrors\nCoreFoundation\nCoreGraphics\nCoreImage\nCoreImageDefines\nCoreLocation\nCoreMIDI\nCoreMedia\nCoreMotion\nCoreTelephony\nCoreTelephonyDefines\nCoreText\nCoreVideo\nCurrent\nDHCPClientPreferences\nDNSSearchDomainMatch\nDNSServerAddressMatch\nEAAccessory\nEAAccessoryDelegate\nEAAccessoryManager\nEAGL\nEAGLContext\nEAGLDrawable\nEAGLSharegroup\nEASession\nEAWiFiUnconfiguredAccessory\nEAWiFiUnconfiguredAccessoryBrowser\nEAWiFiUnconfiguredAccessoryBrowserDelegate\nEKAlarm\nEKCalendar\nEKCalendarChooser\nEKCalendarChooserDelegate\nEKCalendarItem\nEKError\nEKEvent\nEKEventEditViewController\nEKEventEditViewDelegate\nEKEventStore\nEKEventViewController\nEKEventViewDelegate\nEKObject\nEKParticipant\nEKRecurrenceDayOfWeek\nEKRecurrenceEnd\nEKRecurrenceRule\nEKReminder\nEKSource\nEKStructuredLocation\nEKTypes\nES1\nES2\nES3\nEventKit\nEventKitDefines\nEventKitUI\nEventKitUIDefines\nExtendedAudioFile\nExternalAccessory\nExternalAccessoryDefines\nFoundation\nFoundationErrors\nFrameworks\nGCController\nGCControllerAxisInput\nGCControllerButtonInput\nGCControllerDirectionPad\nGCControllerElement\nGCExtendedGamepad\nGCExtendedGamepadSnapshot\nGCGamepad\nGCGamepadSnapshot\nGCMotion\nGET\nGKAchievement\nGKAchievementChallenge\nGKAchievementDescription\nGKAchievementViewController\nGKAchievementViewControllerDelegate\nGKChallenge\nGKChallengeEventHandler\nGKChallengeEventHandlerDelegate\nGKChallengeListener\nGKDefines\nGKError\nGKEventListener\nGKFriendRequestComposeViewController\nGKFriendRequestComposeViewControllerDelegate\nGKGameCenterControllerDelegate\nGKGameCenterViewController\nGKInvite\nGKInviteEventListener\nGKLeaderboard\nGKLeaderboardSet\nGKLeaderboardViewController\nGKLeaderboardViewControllerDelegate\nGKLocalPlayer\nGKLocalPlayerListener\nGKMatch\nGKMatchDelegate\nGKMatchRequest\nGKMatchmaker\nGKMatchmakerViewController\nGKMatchmakerViewControllerDelegate\nGKNotificationBanner\nGKPeerPickerController\nGKPeerPickerControllerDelegate\nGKPlayer\nGKPublicConstants\nGKPublicProtocols\nGKSavedGame\nGKSavedGameListener\nGKScore\nGKScoreChallenge\nGKSession\nGKSessionDelegate\nGKSessionError\nGKTurnBasedEventHandler\nGKTurnBasedEventHandlerDelegate\nGKTurnBasedEventListener\nGKTurnBasedExchange\nGKTurnBasedExchangeReply\nGKTurnBasedMatch\nGKTurnBasedMatchmakerViewController\nGKTurnBasedMatchmakerViewControllerDelegate\nGKTurnBasedParticipant\nGKVoiceChat\nGKVoiceChatClient\nGKVoiceChatService\nGLEngine\nGLKBaseEffect\nGLKEffectProperty\nGLKEffectPropertyFog\nGLKEffectPropertyLight\nGLKEffectPropertyMaterial\nGLKEffectPropertyTexture\nGLKEffectPropertyTransform\nGLKEffects\nGLKMath\nGLKMathTypes\nGLKMathUtils\nGLKMatrix3\nGLKMatrix4\nGLKMatrixStack\nGLKNamedEffect\nGLKQuaternion\nGLKReflectionMapEffect\nGLKSkyboxEffect\nGLKTextureInfo\nGLKTextureLoader\nGLKVector2\nGLKVector3\nGLKVector4\nGLKView\nGLKViewController\nGLKViewControllerDelegate\nGLKViewDelegate\nGLKit\nGLKitBase\nGSS\nGameController\nGameKit\nGeometry\nHEAD\nHKAnchoredObjectQuery\nHKBiologicalSexObject\nHKBloodTypeObject\nHKCategorySample\nHKCategoryType\nHKCharacteristicType\nHKCorrelation\nHKCorrelationQuery\nHKCorrelationType\nHKDefines\nHKHealthStore\nHKMetadata\nHKObject\nHKObjectType\nHKObserverQuery\nHKQuantity\nHKQuantitySample\nHKQuantityType\nHKQuery\nHKSample\nHKSampleQuery\nHKSampleType\nHKSource\nHKSourceQuery\nHKStatistics\nHKStatisticsCollection\nHKStatisticsCollectionQuery\nHKStatisticsQuery\nHKTypeIdentifiers\nHKUnit\nHKWorkout\nHKWorkoutEvent\nHKWorkoutType\nHMAccessory\nHMAccessoryBrowser\nHMAccessoryBrowserDelegate\nHMAccessoryDelegate\nHMAction\nHMActionSet\nHMCharacteristic\nHMCharacteristicDefines\nHMCharacteristicMetadata\nHMCharacteristicWriteAction\nHMDefines\nHMError\nHMHome\nHMHomeDelegate\nHMHomeManager\nHMHomeManagerDelegate\nHMRoom\nHMService\nHMServiceGroup\nHMTimerTrigger\nHMTrigger\nHMUser\nHMZone\nHTTPAdditionalHeaders\nHTTPBody\nHTTPBodyStream\nHTTPCookieAcceptPolicy\nHTTPCookieStorage\nHTTPMaximumConnectionsPerHost\nHTTPMethod\nHTTPOnly\nHTTPShouldHandleCookies\nHTTPShouldSetCookies\nHTTPShouldUsePipelining\nHeaders\nHealthKit\nHistogram\nHomeKit\nIKESecurityAssociationParameters\nIOBufferDuration\nIOKit\nISO\nISOCountryCodes\nISOCurrencyCodes\nISOLanguageCodes\nISOcountryCode\nImageIO\nImageIOBase\nImages\nInfo\nJSBase\nJSContext\nJSContextRef\nJSExport\nJSGlobalContextRef\nJSManagedValue\nJSONObjectWithData\nJSONObjectWithStream\nJSObjectRef\nJSStringRef\nJSStringRefCF\nJSValue\nJSValueRef\nJSVirtualMachine\nJavaScript\nJavaScriptCore\nLAContext\nLAError\nLAPublicDefines\nLaunchScreen\nLibraries\nLinearAlgebra\nLocalAuthentication\nM4V\nMAAudibleMedia\nMACaptionAppearance\nMADefinitions\nMCAdvertiserAssistant\nMCAdvertiserAssistantDelegate\nMCBrowserViewController\nMCBrowserViewControllerDelegate\nMCError\nMCNearbyServiceAdvertiser\nMCNearbyServiceAdvertiserDelegate\nMCNearbyServiceBrowser\nMCNearbyServiceBrowserDelegate\nMCPeerID\nMCSession\nMCSessionDelegate\nMFMailComposeViewController\nMFMailComposeViewControllerDelegate\nMFMessageComposeViewController\nMFMessageComposeViewControllerDelegate\nMIDIDriver\nMIDINetworkConnection\nMIDINetworkHost\nMIDINetworkSession\nMIDIServices\nMIDISetup\nMIDIThruConnection\nMIMEType\nMKAnnotation\nMKAnnotationView\nMKCircle\nMKCircleRenderer\nMKCircleView\nMKCoordinateSpanValue\nMKCoordinateValue\nMKDirections\nMKDirectionsRequest\nMKDirectionsResponse\nMKDirectionsTypes\nMKDistanceFormatter\nMKETAResponse\nMKFoundation\nMKGeodesicPolyline\nMKGeometry\nMKLocalSearch\nMKLocalSearchRequest\nMKLocalSearchResponse\nMKMapCamera\nMKMapItem\nMKMapSnapshot\nMKMapSnapshotOptions\nMKMapSnapshotter\nMKMapView\nMKMapViewDelegate\nMKMultiPoint\nMKOverlay\nMKOverlayPathRenderer\nMKOverlayPathView\nMKOverlayRenderer\nMKOverlayView\nMKPinAnnotationView\nMKPlacemark\nMKPointAnnotation\nMKPolygon\nMKPolygonRenderer\nMKPolygonView\nMKPolyline\nMKPolylineRenderer\nMKPolylineView\nMKReverseGeocoder\nMKReverseGeocoderDelegate\nMKRoute\nMKRouteStep\nMKShape\nMKTileOverlay\nMKTileOverlayRenderer\nMKTypes\nMKUserLocation\nMKUserTrackingBarButtonItem\nMOV\nMP3\nMP4\nMPChangePlaybackRateCommand\nMPChangePlaybackRateCommandEvent\nMPContentItem\nMPFeedbackCommand\nMPFeedbackCommandEvent\nMPMediaEntity\nMPMediaItem\nMPMediaItemCollection\nMPMediaLibrary\nMPMediaPickerController\nMPMediaPickerControllerDelegate\nMPMediaPlayback\nMPMediaPlaylist\nMPMediaQuery\nMPMediaQuerySection\nMPMoviePlayerController\nMPMoviePlayerController_iAdPreroll\nMPMoviePlayerViewController\nMPMusicPlayerController\nMPNowPlayingInfoCenter\nMPPlayableContentDataSource\nMPPlayableContentDelegate\nMPPlayableContentManager\nMPPlayableContentManagerContext\nMPRatingCommand\nMPRatingCommandEvent\nMPRemoteCommand\nMPRemoteCommandCenter\nMPRemoteCommandEvent\nMPSeekCommandEvent\nMPSkipIntervalCommand\nMPSkipIntervalCommandEvent\nMPVolumeSettings\nMPVolumeView\nMTAudioProcessingTap\nMTAudioProcessingTapRef\nMTLArgument\nMTLArrayType\nMTLBlitCommandEncoder\nMTLBuffer\nMTLCommandBuffer\nMTLCommandEncoder\nMTLCommandQueue\nMTLCompileOptions\nMTLComputeCommandEncoder\nMTLComputePipeline\nMTLComputePipelineReflection\nMTLComputePipelineState\nMTLDefines\nMTLDepthStencil\nMTLDepthStencilDescriptor\nMTLDepthStencilState\nMTLDevice\nMTLDrawable\nMTLFunction\nMTLLibrary\nMTLParallelRenderCommandEncoder\nMTLPixelFormat\nMTLRenderCommandEncoder\nMTLRenderPass\nMTLRenderPassAttachmentDescriptor\nMTLRenderPassColorAttachmentDescriptor\nMTLRenderPassColorAttachmentDescriptorArray\nMTLRenderPassDepthAttachmentDescriptor\nMTLRenderPassDescriptor\nMTLRenderPassStencilAttachmentDescriptor\nMTLRenderPipeline\nMTLRenderPipelineColorAttachmentDescriptor\nMTLRenderPipelineColorAttachmentDescriptorArray\nMTLRenderPipelineDescriptor\nMTLRenderPipelineReflection\nMTLRenderPipelineState\nMTLResource\nMTLSampler\nMTLSamplerDescriptor\nMTLSamplerState\nMTLStencilDescriptor\nMTLStructMember\nMTLStructType\nMTLTexture\nMTLTextureDescriptor\nMTLTypes\nMTLVertexAttribute\nMTLVertexAttributeDescriptor\nMTLVertexAttributeDescriptorArray\nMTLVertexBufferLayoutDescriptor\nMTLVertexBufferLayoutDescriptorArray\nMTLVertexDescriptor\nMain\nMapKit\nMediaAccessibility\nMediaPlayer\nMediaPlayerDefines\nMediaToolbox\nMessageUI\nMetal\nMobileCoreServices\nMorphology\nMultipeerConnectivity\nMusicDevice\nMusicPlayer\nNCWidgetController\nNCWidgetProviding\nNEEvaluateConnectionRule\nNEOnDemandRule\nNEOnDemandRuleConnect\nNEOnDemandRuleDisconnect\nNEOnDemandRuleEvaluateConnection\nNEOnDemandRuleIgnore\nNEVPNConnection\nNEVPNIKEv2SecurityAssociationParameters\nNEVPNManager\nNEVPNProtocol\nNEVPNProtocolIKEv2\nNEVPNProtocolIPSec\nNKAssetDownload\nNKIssue\nNKLibrary\nNKNSURLConnectionAdditions\nNSArray\nNSAssertionHandler\nNSAsynchronousFetchRequest\nNSAsynchronousFetchResult\nNSAtomicStore\nNSAtomicStoreCacheNode\nNSAttributeDescription\nNSAttributedString\nNSAutoreleasePool\nNSBatchUpdateRequest\nNSBatchUpdateResult\nNSBlockOperation\nNSBundle\nNSByteCountFormatter\nNSByteOrder\nNSCache\nNSCacheDelegate\nNSCachedURLResponse\nNSCalendar\nNSCharacterSet\nNSCoder\nNSCoding\nNSComparisonPredicate\nNSCompoundPredicate\nNSCondition\nNSConditionLock\nNSConstantString\nNSCopying\nNSCountedSet\nNSData\nNSDataDetector\nNSDate\nNSDateComponents\nNSDateComponentsFormatter\nNSDateFormatter\nNSDateIntervalFormatter\nNSDecimal\nNSDecimalNumber\nNSDecimalNumberBehaviors\nNSDecimalNumberHandler\nNSDictionary\nNSDirectoryEnumerator\nNSDiscardableContent\nNSEnergyFormatter\nNSEntityDescription\nNSEntityMapping\nNSEntityMigrationPolicy\nNSEnumerator\nNSError\nNSEvent\nNSException\nNSExpression\nNSExpressionDescription\nNSExtensionContext\nNSExtensionItem\nNSExtensionRequestHandling\nNSFastEnumeration\nNSFetchRequest\nNSFetchRequestExpression\nNSFetchedPropertyDescription\nNSFetchedResultsController\nNSFetchedResultsControllerDelegate\nNSFetchedResultsSectionInfo\nNSFileAccessIntent\nNSFileCoordinator\nNSFileCoordinatorReadingWithoutChanges\nNSFileCoordinatorWritingForDeleting\nNSFileCoordinatorWritingForMerging\nNSFileCoordinatorWritingForReplacing\nNSFileHandle\nNSFileManager\nNSFileManagerDelegate\nNSFilePresenter\nNSFileProviderExtension\nNSFileSecurity\nNSFileVersion\nNSFileWrapper\nNSFormatter\nNSHTTPCookie\nNSHTTPCookieStorage\nNSHTTPURLResponse\nNSHashTable\nNSIncrementalStore\nNSIncrementalStoreNode\nNSIndexPath\nNSIndexSet\nNSInputStream\nNSInvocation\nNSInvocationOperation\nNSItemProvider\nNSJSONSerialization\nNSKeyValueCoding\nNSKeyValueObserving\nNSKeyedArchiver\nNSKeyedArchiverDelegate\nNSKeyedUnarchiver\nNSKeyedUnarchiverDelegate\nNSLayoutConstraint\nNSLayoutManager\nNSLayoutManagerDelegate\nNSLengthFormatter\nNSLinguisticTagger\nNSLocale\nNSLock\nNSLocking\nNSMachPort\nNSMachPortDelegate\nNSManagedObject\nNSManagedObjectContext\nNSManagedObjectID\nNSManagedObjectModel\nNSMapTable\nNSMappingModel\nNSMassFormatter\nNSMergeConflict\nNSMergePolicy\nNSMessagePort\nNSMetadata\nNSMetadataAttributes\nNSMetadataItem\nNSMetadataQuery\nNSMetadataQueryAttributeValueTuple\nNSMetadataQueryDelegate\nNSMetadataQueryResultGroup\nNSMethodSignature\nNSMigrationManager\nNSMutableArray\nNSMutableAttributedString\nNSMutableCharacterSet\nNSMutableCopying\nNSMutableData\nNSMutableDictionary\nNSMutableIndexSet\nNSMutableOrderedSet\nNSMutableSet\nNSMutableString\nNSMutableURLRequest\nNSNetService\nNSNetServiceBrowser\nNSNetServiceBrowserDelegate\nNSNetServiceDelegate\nNSNetServices\nNSNotification\nNSNotificationCenter\nNSNotificationQueue\nNSNull\nNSNumber\nNSNumberFormatter\nNSObjCRuntime\nNSObject\nNSOperation\nNSOperationQueue\nNSOrderedSet\nNSOrthography\nNSOutputStream\nNSParagraphStyle\nNSPathUtilities\nNSPersistentStore\nNSPersistentStoreAsynchronousResult\nNSPersistentStoreCoordinator\nNSPersistentStoreRequest\nNSPersistentStoreResult\nNSPipe\nNSPointerArray\nNSPointerFunctions\nNSPort\nNSPortDelegate\nNSPredicate\nNSProcessInfo\nNSProgress\nNSPropertyDescription\nNSPropertyList\nNSPropertyListSerialization\nNSPropertyMapping\nNSProxy\nNSPurgeableData\nNSRange\nNSRecursiveLock\nNSRegularExpression\nNSRelationshipDescription\nNSRunLoop\nNSSaveChangesRequest\nNSScanner\nNSSecureCoding\nNSSet\nNSShadow\nNSSimpleCString\nNSSocketPort\nNSSortDescriptor\nNSStream\nNSStreamDelegate\nNSString\nNSStringDrawing\nNSStringEncoding\nNSText\nNSTextAttachment\nNSTextAttachmentContainer\nNSTextCheckingResult\nNSTextContainer\nNSTextLayoutOrientationProvider\nNSTextStorage\nNSTextStorageDelegate\nNSThread\nNSTimeZone\nNSTimer\nNSURL\nNSURLAuthenticationChallenge\nNSURLAuthenticationChallengeSender\nNSURLCache\nNSURLComponents\nNSURLConnection\nNSURLConnectionDataDelegate\nNSURLConnectionDelegate\nNSURLConnectionDownloadDelegate\nNSURLCredential\nNSURLCredentialStorage\nNSURLError\nNSURLProtectionSpace\nNSURLProtocol\nNSURLProtocolClient\nNSURLQueryItem\nNSURLRequest\nNSURLResponse\nNSURLSession\nNSURLSessionConfiguration\nNSURLSessionDataDelegate\nNSURLSessionDataTask\nNSURLSessionDelegate\nNSURLSessionDownloadDelegate\nNSURLSessionDownloadTask\nNSURLSessionTask\nNSURLSessionTaskDelegate\nNSURLSessionUploadTask\nNSUUID\nNSUbiquitousKeyValueStore\nNSUndoManager\nNSUserActivity\nNSUserActivityDelegate\nNSUserDefaults\nNSValue\nNSValueTransformer\nNSXMLParser\nNSXMLParserDelegate\nNSZone\nNS_AVAILABLE\nNS_DEPRECATED\nNS_DEPRECATED_IOS\nNS_DEPRECATED_MAC\nNS_RETURNS_INNER_POINTER\nNetworkExtension\nNewsstandKit\nNotificationCenter\nOpenAL\nOpenGLES\nPATCH\nPHAdjustmentData\nPHAsset\nPHAssetChangeRequest\nPHAssetCollectionChangeRequest\nPHChange\nPHCollection\nPHCollectionListChangeRequest\nPHContentEditingController\nPHContentEditingInput\nPHContentEditingOutput\nPHFetchOptions\nPHFetchResult\nPHImageManager\nPHObject\nPHPhotoLibrary\nPKAddPassesViewController\nPKAddPassesViewControllerDelegate\nPKDefines\nPKError\nPKObject\nPKPass\nPKPassLibrary\nPKPayment\nPKPaymentAuthorizationViewController\nPKPaymentAuthorizationViewControllerDelegate\nPKPaymentButton\nPKPaymentPass\nPKPaymentRequest\nPKPaymentSummaryItem\nPKPaymentToken\nPKPushCredentials\nPKPushPayload\nPKPushRegistry\nPKPushRegistryDelegate\nPKShippingMethod\nPMSymbol\nPUT\nPassKit\nPhotos\nPhotosTypes\nPhotosUI\nPushKit\nQLBase\nQLPreviewController\nQLPreviewControllerDataSource\nQLPreviewControllerDelegate\nQLPreviewItem\nQuartzCore\nQuickLook\nRSSI\nResources\nSCDynamicStore\nSCDynamicStoreCopyDHCPInfo\nSCDynamicStoreCopySpecific\nSCDynamicStoreKey\nSCENEKIT_AVAILABLE\nSCNAction\nSCNActionable\nSCNAnimatable\nSCNAnimation\nSCNAnimationEvent\nSCNBase\nSCNBoundingVolume\nSCNBox\nSCNCamera\nSCNCapsule\nSCNCone\nSCNConstraint\nSCNCylinder\nSCNFloor\nSCNGeometry\nSCNGeometryElement\nSCNGeometrySource\nSCNHitTestResult\nSCNIKConstraint\nSCNJavascript\nSCNLevelOfDetail\nSCNLight\nSCNLookAtConstraint\nSCNMaterial\nSCNMaterialProperty\nSCNMatrix4Value\nSCNMorpher\nSCNNode\nSCNNodeRendererDelegate\nSCNParametricGeometry\nSCNParticlePropertyController\nSCNParticleSystem\nSCNPhysicsBallSocketJoint\nSCNPhysicsBehavior\nSCNPhysicsBody\nSCNPhysicsContact\nSCNPhysicsContactDelegate\nSCNPhysicsField\nSCNPhysicsHingeJoint\nSCNPhysicsShape\nSCNPhysicsSliderJoint\nSCNPhysicsVehicle\nSCNPhysicsVehicleWheel\nSCNPhysicsWorld\nSCNPlane\nSCNProgram\nSCNProgramDelegate\nSCNPyramid\nSCNRenderer\nSCNScene\nSCNSceneExportDelegate\nSCNSceneRenderer\nSCNSceneRendererDelegate\nSCNSceneSource\nSCNShadable\nSCNShape\nSCNSkinner\nSCNSphere\nSCNTechnique\nSCNTechniqueSupport\nSCNText\nSCNTorus\nSCNTransaction\nSCNTransformConstraint\nSCNTube\nSCNVector3Value\nSCNVector4Value\nSCNView\nSCNetwork\nSCNetworkConfiguration\nSCNetworkConnection\nSCNetworkReachability\nSCPreferences\nSCPreferencesPath\nSCPreferencesSetSpecific\nSCSchemaDefinitions\nSFNTLayoutTypes\nSFNTTypes\nSK3DNode\nSKAction\nSKConstraint\nSKCropNode\nSKDownload\nSKEffectNode\nSKEmitterNode\nSKError\nSKFieldNode\nSKKeyframeSequence\nSKLabelNode\nSKLightNode\nSKMutableTexture\nSKNode\nSKPayment\nSKPaymentQueue\nSKPaymentTransaction\nSKPaymentTransactionObserver\nSKPhysicsBody\nSKPhysicsContact\nSKPhysicsJoint\nSKPhysicsWorld\nSKProduct\nSKProductsRequest\nSKProductsRequestDelegate\nSKReachConstraints\nSKReceiptRefreshRequest\nSKRegion\nSKRequest\nSKRequestDelegate\nSKScene\nSKShader\nSKShapeNode\nSKSpriteNode\nSKStoreProductViewController\nSKStoreProductViewControllerDelegate\nSKTexture\nSKTextureAtlas\nSKTransition\nSKUniform\nSKVideoNode\nSKView\nSLComposeServiceViewController\nSLComposeSheetConfigurationItem\nSLComposeViewController\nSLRequest\nSLServiceTypes\nSSIDMatch\nSSLPinningMode\nSSReadingList\nSafariServices\nSceneKit\nSceneKitTypes\nSceneKit_simd\nSecAccessControl\nSecBase\nSecCertificate\nSecIdentity\nSecImportExport\nSecItem\nSecKey\nSecPolicy\nSecRandom\nSecSharedCredential\nSecTrust\nSecureTransport\nSecurity\nSharedUtils\nSocial\nSocialDefines\nSpriteKit\nSpriteKitBase\nStoreKit\nStoreKitDefines\nSupport\nSystemConfiguration\nTLSMaximumSupportedProtocol\nTLSMinimumSupportedProtocol\nTWRequest\nTWTweetComposeViewController\nTXTRecordData\nThe\nTransform\nTwitter\nUIAcceleration\nUIAccelerometer\nUIAccelerometerDelegate\nUIAccessibility\nUIAccessibilityAdditions\nUIAccessibilityConstants\nUIAccessibilityCustomAction\nUIAccessibilityElement\nUIAccessibilityIdentification\nUIAccessibilityReadingContent\nUIAccessibilityZoom\nUIActionSheet\nUIActionSheetDelegate\nUIActivity\nUIActivityIndicatorView\nUIActivityItemProvider\nUIActivityItemSource\nUIActivityViewController\nUIAdaptivePresentationControllerDelegate\nUIAlert\nUIAlertController\nUIAlertView\nUIAlertViewDelegate\nUIAlertViewDelegate>\nUIAppearance\nUIAppearanceContainer\nUIApplication\nUIApplicationDelegate\nUIAttachmentBehavior\nUIBarButtonItem\nUIBarCommon\nUIBarItem\nUIBarPositioning\nUIBarPositioningDelegate\nUIBezierPath\nUIButton\nUICollectionView\nUICollectionViewCell\nUICollectionViewController\nUICollectionViewDataSource\nUICollectionViewDelegate\nUICollectionViewDelegateFlowLayout\nUICollectionViewFlowLayout\nUICollectionViewLayout\nUICollectionViewTransitionLayout\nUICollisionBehavior\nUICollisionBehaviorDelegate\nUIColor\nUIContentContainer\nUIControl\nUICoordinateSpace\nUID\nUIDataDetectors\nUIDataSourceModelAssociation\nUIDatePicker\nUIDelegate\nUIDevice\nUIDocument\nUIDocumentInteractionController\nUIDocumentInteractionControllerDelegate\nUIDocumentMenuDelegate\nUIDocumentMenuViewController\nUIDocumentPickerDelegate\nUIDocumentPickerExtensionViewController\nUIDocumentPickerViewController\nUIDynamicAnimator\nUIDynamicAnimatorDelegate\nUIDynamicBehavior\nUIDynamicItem\nUIDynamicItemBehavior\nUIEdgeInsetsValue\nUIEvent\nUIFont\nUIFontDescriptor\nUIGeometry\nUIGestureRecognizer\nUIGestureRecognizerDelegate\nUIGestureRecognizerSubclass\nUIGraphics\nUIGravityBehavior\nUIGuidedAccessRestrictions\nUIImage\nUIImageAsset\nUIImagePickerController\nUIImagePickerControllerDelegate\nUIImageView\nUIInputView\nUIInputViewAudioFeedback\nUIInputViewController\nUIInterface\nUIKeyInput\nUIKit\nUIKitDefines\nUILabel\nUILayoutSupport\nUILexicon\nUILocalNotification\nUILocalizedIndexedCollation\nUILongPressGestureRecognizer\nUIManagedDocument\nUIMenuController\nUIMotionEffect\nUIMutableUserNotificationAction\nUIMutableUserNotificationCategory\nUINavigationBar\nUINavigationBarDelegate\nUINavigationController\nUINavigationControllerDelegate\nUINib\nUINibDeclarations\nUINibLoading\nUIObjectRestoration\nUIOffsetValue\nUIPageControl\nUIPageViewController\nUIPageViewControllerDataSource\nUIPageViewControllerDelegate\nUIPanGestureRecognizer\nUIPasteboard\nUIPickerView\nUIPickerViewAccessibilityDelegate\nUIPickerViewDataSource\nUIPickerViewDelegate\nUIPinchGestureRecognizer\nUIPopoverBackgroundView\nUIPopoverBackgroundViewMethods\nUIPopoverController\nUIPopoverControllerDelegate\nUIPopoverPresentationController\nUIPopoverPresentationControllerDelegate\nUIPopoverSupport\nUIPresentationController\nUIPrintError\nUIPrintFormatter\nUIPrintInfo\nUIPrintInteractionController\nUIPrintInteractionControllerDelegate\nUIPrintPageRenderer\nUIPrintPaper\nUIPrinter\nUIPrinterPickerController\nUIPrinterPickerControllerDelegate\nUIProgressView\nUIPushBehavior\nUIReferenceLibraryViewController\nUIRefreshControl\nUIResponder\nUIRotationGestureRecognizer\nUIScreen\nUIScreenEdgePanGestureRecognizer\nUIScreenMode\nUIScrollView\nUIScrollViewAccessibilityDelegate\nUIScrollViewDelegate\nUISearchBar\nUISearchBarDelegate\nUISearchController\nUISearchControllerDelegate\nUISearchDisplayController\nUISearchDisplayDelegate\nUISearchResultsUpdating\nUISegmentedControl\nUISlider\nUISnapBehavior\nUISplitViewController\nUISplitViewControllerDelegate\nUIStateRestoration\nUIStateRestoring\nUIStepper\nUIStoryboard\nUIStoryboardPopoverSegue\nUIStoryboardSegue\nUIStringDrawing\nUISwipeGestureRecognizer\nUISwitch\nUITabBar\nUITabBarController\nUITabBarControllerDelegate\nUITabBarDelegate\nUITabBarItem\nUITableView\nUITableViewCell\nUITableViewController\nUITableViewDataSource\nUITableViewDelegate\nUITableViewHeaderFooterView\nUITapGestureRecognizer\nUITextChecker\nUITextDocumentProxy\nUITextField\nUITextFieldDelegate\nUITextInput\nUITextInputDelegate\nUITextInputTokenizer\nUITextInputTraits\nUITextSelecting\nUITextView\nUITextViewDelegate\nUIToolbar\nUIToolbarDelegate\nUITouch\nUITraitCollection\nUITraitEnvironment\nUIUserNotificationAction\nUIUserNotificationCategory\nUIUserNotificationSettings\nUIVibrancyEffect\nUIVideoEditorController\nUIVideoEditorControllerDelegate\nUIView\nUIViewController\nUIViewControllerAnimatedTransitioning\nUIViewControllerContextTransitioning\nUIViewControllerInteractiveTransitioning\nUIViewControllerRestoration\nUIViewControllerTransitionCoordinator\nUIViewControllerTransitionCoordinatorContext\nUIViewControllerTransitioning\nUIViewControllerTransitioningDelegate\nUIViewControlleriAdAdditions\nUIVisualEffectView\nUIWebView\nUIWebViewDelegate\nUIWindow\nURI\nURIRepresentation\nURL\nURLAssetWithURL\nURLByAppendingPathComponent\nURLByAppendingPathExtension\nURLByDeletingLastPathComponent\nURLByDeletingPathExtension\nURLByResolvingAliasFileAtURL\nURLByResolvingBookmarkData\nURLByResolvingSymlinksInPath\nURLByStandardizingPath\nURLCache\nURLCredentialStorage\nURLForAuxiliaryExecutable\nURLForDirectory\nURLForItemWithPersistentIdentifier\nURLForKey\nURLForPersistentStore\nURLForPublishingUbiquitousItemAtURL\nURLForResource\nURLForTilePath\nURLForUbiquityContainerIdentifier\nURLFragmentAllowedCharacterSet\nURLHandleUsingCache\nURLHostAllowedCharacterSet\nURLPasswordAllowedCharacterSet\nURLPathAllowedCharacterSet\nURLProtocol\nURLProtocolDidFinishLoading\nURLQueryAllowedCharacterSet\nURLRelativeToURL\nURLRequest\nURLResourceDidCancelLoading\nURLResourceDidFinishLoading\nURLSession\nURLSessionDidFinishEventsForBackgroundURLSession\nURLTemplate\nURLUserAllowedCharacterSet\nURLWithString\nURLs\nURLsForDirectory\nURLsForResourcesWithExtension\nUTCoreTypes\nUTI\nUTType\nUUID\nUUIDString\nUUIDWithCFUUID\nUUIDWithData\nUUIDWithNSUUID\nUUIDWithString\nUserInterfaceState\nVTBase\nVTCompressionProperties\nVTCompressionSession\nVTDecompressionProperties\nVTDecompressionSession\nVTErrors\nVTFrameSilo\nVTMultiPassStorage\nVTSession\nVTVideoEncoderList\nVersions\nVideoToolbox\nViewController\nW\nWKAccessibilityImageRegion\nWKBackForwardList\nWKBackForwardListItem\nWKDefines\nWKError\nWKFoundation\nWKFrameInfo\nWKInterfaceButton\nWKInterfaceController\nWKInterfaceDate\nWKInterfaceDevice\nWKInterfaceGroup\nWKInterfaceImage\nWKInterfaceLabel\nWKInterfaceMap\nWKInterfaceObject\nWKInterfaceSeparator\nWKInterfaceSlider\nWKInterfaceSwitch\nWKInterfaceTable\nWKInterfaceTimer\nWKNavigation\nWKNavigationAction\nWKNavigationDelegate\nWKNavigationResponse\nWKPreferences\nWKProcessPool\nWKScriptMessage\nWKScriptMessageHandler\nWKUIDelegate\nWKUserContentController\nWKUserNotificationInterfaceController\nWKUserScript\nWKWebView\nWKWebViewConfiguration\nWKWindowFeatures\nWatchKit\nWebKit\nWebKitAvailability\nWebKitLegacy\nX\nY\nZ\na\nabbreviation\nabbreviationDictionary\nabbreviationForDate\nabortParsing\nabsoluteDate\nabsolutePath\nabsoluteString\nabsoluteURL\nabstract\nacceleration\naccelerometer\naccelerometerActive\naccelerometerAvailable\naccelerometerData\naccelerometerUpdateInterval\nacceptCallID\nacceptConnectionFromPeer\nacceptConnectionInBackgroundAndNotify\nacceptConnectionInBackgroundAndNotifyForModes\nacceptInputForMode\nacceptInviteWithCompletionHandler\naccess\naccessGranted\naccessInstanceVariablesDirectly\naccessLog\naccessibilityActivate\naccessibilityActivationPoint\naccessibilityContainer\naccessibilityContentForLineNumber\naccessibilityCustomActions\naccessibilityDecrement\naccessibilityElementAtIndex\naccessibilityElementCount\naccessibilityElementDidBecomeFocused\naccessibilityElementDidLoseFocus\naccessibilityElementIsFocused\naccessibilityElements\naccessibilityElementsHidden\naccessibilityFrame\naccessibilityFrameForLineNumber\naccessibilityHint\naccessibilityIdentifier\naccessibilityIncrement\naccessibilityLabel\naccessibilityLanguage\naccessibilityLineNumberForPoint\naccessibilityNavigationStyle\naccessibilityPageContent\naccessibilityPath\naccessibilityPerformEscape\naccessibilityPerformMagicTap\naccessibilityScroll\naccessibilityScrollStatusForScrollView\naccessibilityTraits\naccessibilityValue\naccessibilityViewIsModal\naccessories\naccessory\naccessoryAction\naccessoryBrowser\naccessoryDidDisconnect\naccessoryDidUpdateName\naccessoryDidUpdateReachability\naccessoryDidUpdateServices\naccessoryType\naccessoryView\naccommodatePresentedItemDeletionWithCompletionHandler\naccommodatePresentedSubitemDeletionAtURL\naccount\naccountDescription\naccountStatusWithCompletionHandler\naccountType\naccountTypeDescription\naccountTypeWithAccountTypeIdentifier\naccountWithIdentifier\naccounts\naccountsWithAccountType\naccuracy\nachievedDescription\nachievement\nachievementDelegate\nachievementViewControllerDidFinish\nacquireFunction\naction\nactionAtItemEnd\nactionForKey\nactionForLayer\nactionInProgress\nactionSets\nactionSheet\nactionSheetCancel\nactionSheetStyle\nactionWithTitle\nactions\nactionsForContext\nactionsForTarget\nactivateConstraints\nactivatePaymentPass\nactivationMode\nactivationState\nactive\nactiveExchanges\nactiveFormat\nactiveInputModes\nactiveInputSource\nactiveProcessorCount\nactiveVideoMaxFrameDuration\nactiveVideoMinFrameDuration\nactiveVideoStabilizationMode\nactivityCategory\nactivityDidFinish\nactivityImage\nactivityIndicatorViewStyle\nactivityTitle\nactivityType\nactivityViewController\nactivityViewControllerPlaceholderItem\nactualScaleFactor\nactualTrackingAdjustment\nactually\nadType\nadaptive\nadaptivePresentationStyle\nadaptivePresentationStyleForPresentationController\nadaptivePresentationStyleForTraitCollection\naddAccessory\naddAction\naddActionSet\naddActionSetWithName\naddAlarm\naddAngularVelocity\naddAnimation\naddAnnotation\naddAnnotations\naddArcWithCenter\naddAsset\naddAssetWithRequest\naddAssets\naddAssetsGroupAlbumWithName\naddAttachmentData\naddAttachmentURL\naddAttribute\naddAttributes\naddBehavior\naddBoundaryTimeObserverForTimes\naddBoundaryWithIdentifier\naddButtonWithTitle\naddCacheNodes\naddCachedImage\naddCachedImageWithData\naddCharactersInRange\naddCharactersInString\naddChild\naddChildBehavior\naddChildCollections\naddChildNode\naddChildViewController\naddClientToSegments\naddClip\naddCompletedHandler\naddConnection\naddConstraint\naddConstraints\naddContact\naddCurveToPoint\naddDependency\naddEntriesFromDictionary\naddExecutionBlock\naddFilePresenter\naddFileWithPath\naddFileWrapper\naddFilterPredicate\naddGestureRecognizer\naddHomeWithName\naddImage\naddIndex\naddIndexes\naddIndexesInRange\naddInput\naddInputGroup\naddInputWithNoConnections\naddIssueWithName\naddItem\naddItems\naddJoint\naddKeyframeValue\naddKeyframeWithRelativeStartTime\naddLayoutManager\naddLineToPoint\naddLinearVelocity\naddManagedReference\naddMenuItemWithImage\naddMenuItemWithImageNamed\naddMenuItemWithItemIcon\naddModifierForProperties\naddMotionEffect\naddMultiPartData\naddMultipartData\naddMutableTrackWithMediaType\naddObject\naddObjects\naddObjectsFromArray\naddObserver\naddObserverForName\naddOperation\naddOperationWithBlock\naddOperations\naddOptionWithTitle\naddOutput\naddOutputWithNoConnections\naddOverlay\naddOverlays\naddParticleSystem\naddPasses\naddPassesViewControllerDidFinish\naddPayment\naddPeriodicTimeObserverForInterval\naddPersistentStoreWithType\naddPlayersToMatch\naddPointer\naddPort\naddPrintFormatter\naddQuadCurveToPoint\naddReadingListItemWithURL\naddRecipientPlayers\naddRecipientsWithEmailAddresses\naddRecipientsWithPlayerIDs\naddRecurrenceRule\naddRegularFileWithContents\naddRoom\naddRoomWithName\naddSamples\naddScheduledHandler\naddScriptMessageHandler\naddService\naddServiceGroupWithName\naddSublayer\naddSubscriberForFileURL\naddSubview\naddSuiteNamed\naddSymbolicLinkWithDestination\naddTarget\naddTargetWithHandler\naddTextContainer\naddTextFieldWithConfigurationHandler\naddTimeInterval\naddTimer\naddToRunLoop\naddTrackAssociationWithTrackOfInput\naddTransactionObserver\naddTrigger\naddURL\naddUniform\naddUserInfoEntriesFromDictionary\naddUserScript\naddUserWithCompletionHandler\naddValue\naddVersionOfItemAtURL\naddZoneWithName\nadditionalContentForURL\nadditive\naddress\naddressBook\naddressCheckingResultWithRange\naddressComponents\naddressDictionary\naddresses\nadjustTextPositionByCharacterOffset\nadjustingExposure\nadjustingFocus\nadjustingWhiteBalance\nadjustmentData\nadjustsFontSizeToFitWidth\nadjustsImageWhenDisabled\nadjustsImageWhenHighlighted\nadjustsLetterSpacingToFitWidth\nadministrativeArea\nadvanceIntervalForDelegateInvocation\nadvanceSimulationTime\nadvanceToNextInputMode\nadvanceToNextItem\nadvertiser\nadvertiserAssistantDidDismissInvitation\nadvertiserAssistantWillPresentInvitation\nadvertisingIdentifier\nadvertisingSection\nadvertisingTrackingEnabled\nadvisoryNotices\naffectedByGravity\naffectedByPhysicsFields\naffectedStores\naffineTransform\naggregationStyle\nairPlayVideoActive\nal\nalarmWithAbsoluteDate\nalarmWithRelativeOffset\nalarms\nalbumArtist\nalbumArtistPersistentID\nalbumPersistentID\nalbumTitle\nalbumTrackCount\nalbumTrackNumber\nalbumsQuery\nalc\nalertAction\nalertActionLocalizationKey\nalertBody\nalertControllerWithTitle\nalertLaunchImage\nalertLocalizationArgs\nalertLocalizationKey\nalertTitle\nalertView\nalertViewCancel\nalertViewShouldEnableFirstOtherButton\nalertViewStyle\nalias\nalignment\nalignmentMode\nalignmentRectForFrame\nalignmentRectInsets\nallAssets\nallBehaviors\nallBundles\nallContactedBodies\nallControlEvents\nallCredentials\nallDay\nallExportPresets\nallFrameworks\nallHTTPHeaderFields\nallHeaderFields\nallKeys\nallKeysForObject\nallLanguages\nallMetadata\nallObjects\nallPhotos\nallScripts\nallTargets\nallTokens\nallTouches\nallValues\nallVideos\nalloc\nallocWithZone\nallowDeferredLocationUpdatesUntilTraveled\nallowEvaluation\nallowableMovement\nallowedClasses\nallowedEntityTypes\nallowedExternalEntityURLs\nallowedUnits\nallows\nallowsActions\nallowsAddingToAddressBook\nallowsAirPlay\nallowsAirPlayVideo\nallowsBackForwardNavigationGestures\nallowsCachingHighQualityImages\nallowsCalendarPreview\nallowsCameraControl\nallowsCellularAccess\nallowsContentModifications\nallowsEdgeAntialiasing\nallowsEditing\nallowsEditingTextAttributes\nallowsEmptySelection\nallowsExternalBinaryDataStorage\nallowsExternalPlayback\nallowsFloats\nallowsFractionalUnits\nallowsGroupOpacity\nallowsImageEditing\nallowsInlineMediaPlayback\nallowsKeyedCoding\nallowsMagnification\nallowsMultipleSelection\nallowsMultipleSelectionDuringEditing\nallowsNaturalLanguage\nallowsNonContiguousLayout\nallowsNonnumericFormatting\nallowsPickingMultipleItems\nallowsResizing\nallowsResting\nallowsReverseTransformation\nallowsRotation\nallowsSelection\nallowsSelectionDuringEditing\nallowsTransparency\nallowsVOIP\nallowsWeakReference\nalpha\nalphaBlendOperation\nalphaRange\nalphaSpeed\nalphaState\nalphaToCoverageEnabled\nalphaToOneEnabled\nalphanumericCharacterSet\nalternateName\nalternativeInterpretations\nalternativeStrings\naltitude\nalwaysBounceHorizontal\nalwaysBounceVertical\nalwaysCopiesSampleData\nalwaysDiscardsLateVideoFrames\nalwaysShowsDecimalSeparator\nambient\nambientColor\namount\nanalog\nanchorA\nanchorB\nanchorDate\nanchorPoint\nanchorPointZ\nandPredicateWithSubpredicates\nangle\nangularDamping\nangularResistance\nangularVelocity\nangularVelocityFactor\nangularVelocityForItem\nanimateAlongsideTransition\nanimateAlongsideTransitionInView\nanimateKeyframesWithDuration\nanimateTransition\nanimateWithDuration\nanimateWithTextures\nanimatedImageNamed\nanimatedImageWithImages\nanimatedResizableImageNamed\nanimatesDrop\nanimation\nanimationControllerForDismissedController\nanimationControllerForPresentedController\nanimationDidStart\nanimationDidStop\nanimationDuration\nanimationEnded\nanimationEventWithKeyTime\nanimationEvents\nanimationForKey\nanimationImages\nanimationKeys\nanimationRepeatCount\nanimationSpeed\nanimationTimingFunction\nanimationTool\nanimationWithKeyPath\nanimations\nannotation\nannotationVisibleRect\nannotations\nannotationsInMapRect\nantialiased\nantialiasingMode\nanyObject\naperture\napertureMode\nappStoreReceiptURL\nappearance\nappearanceForTraitCollection\nappearanceWhenContainedIn\nappendAttributedString\nappendBytes\nappendData\nappendFormat\nappendPath\nappendPixelBuffer\nappendSampleBuffer\nappendString\nappendTimedMetadataGroup\napplicableRenderingAlgorithms\napplication\napplicationData\napplicationDidBecomeActive\napplicationDidEnterBackground\napplicationDidFinishLaunching\napplicationDidReceiveMemoryWarning\napplicationFinishedRestoringState\napplicationFrame\napplicationIconBadgeNumber\napplicationMusicPlayer\napplicationProtectedDataDidBecomeAvailable\napplicationProtectedDataWillBecomeUnavailable\napplicationSignificantTimeChange\napplicationState\napplicationSupportsShakeToEdit\napplicationUsername\napplicationWillEnterForeground\napplicationWillResignActive\napplicationWillTerminate\nappliesMediaSelectionCriteriaAutomatically\nappliesPreferredTrackTransform\napply\napplyAngularImpulse\napplyBrakingForce\napplyEngineForce\napplyFillPropertiesToContext\napplyForce\napplyImpulse\napplyLayoutAttributes\napplyStrokePropertiesToContext\napplyTorque\napplyTransform\napplyWithExtent\napportionsSegmentWidthsByContent\napproximateLocation\narchiveRootObject\narchivedDataWithRootObject\narchiver\narchiverDidFinish\narchiverWillFinish\nareAnimationsEnabled\narea\nareasOfInterest\narguments\nargumentsRetained\narithmetic\narray\narrayByAddingObject\narrayByAddingObjectsFromArray\narrayForKey\narrayLength\narrayType\narrayWithArray\narrayWithCapacity\narrayWithContentsOfFile\narrayWithContentsOfURL\narrayWithObject\narrayWithObjects\narrivalDate\narrowBase\narrowDirection\narrowHeight\narrowOffset\nartist\nartistPersistentID\nartistsQuery\nartwork\nascender\nascending\naspectRatioThumbnail\nasset\nassetCollectionSubtype\nassetCollectionType\nassetContentChanged\nassetForURL\nassetImageGeneratorWithAsset\nassetReaderAudioMixOutputWithAudioTracks\nassetReaderOutputMetadataAdaptorWithAssetReaderTrackOutput\nassetReaderSampleReferenceOutputWithTrack\nassetReaderTrackOutput\nassetReaderTrackOutputWithTrack\nassetReaderVideoCompositionOutputWithVideoTracks\nassetReaderWithAsset\nassetTrack\nassetURL\nassetWithURL\nassetWriterInput\nassetWriterInputGroupWithInputs\nassetWriterInputMetadataAdaptorWithAssetWriterInput\nassetWriterInputPixelBufferAdaptorWithAssetWriterInput\nassetWriterInputWithMediaType\nassetWriterWithURL\nassignAccessory\nassignObject\nassociateSourceInstance\nassociatedMediaSelectionOptionInMediaSelectionGroup\nassociatedServiceType\nassociatedTracksOfType\nasynchronous\natEnd\natlasNamed\natlasWithDictionary\natmosphereUnit\natomic\nattachNode\nattachedBehaviorType\nattachedToDevice\nattachmentBoundsForTextContainer\nattachmentSizeForGlyphAtIndex\nattachments\nattemptRecoveryFromError\nattemptRotationToDeviceOrientation\nattendees\nattenuationEndDistance\nattenuationFalloffExponent\nattenuationStartDistance\nattitude\nattitudeReferenceFrame\nattribute\nattributeForKey\nattributeIndex\nattributeMappings\nattributeType\nattributeValueClassName\nattributedContentText\nattributedPlaceholder\nattributedStringForNil\nattributedStringForNotANumber\nattributedStringForObjectValue\nattributedStringForZero\nattributedStringWithAttachment\nattributedSubstringFromRange\nattributedText\nattributedTitle\nattributedTitleForState\nattributes\nattributesAtIndex\nattributesByName\nattributesOfFileSystemForPath\nattributesOfItemAtPath\naudioChannels\naudioComponentDescription\naudioMix\naudioMixInputParameters\naudioMixInputParametersWithTrack\naudioOutputDeviceUniqueID\naudioPlayerBeginInterruption\naudioPlayerDecodeErrorDidOccur\naudioPlayerDidFinishPlaying\naudioPlayerEndInterruption\naudioRecorderBeginInterruption\naudioRecorderDidFinishRecording\naudioRecorderEncodeErrorDidOccur\naudioRecorderEndInterruption\naudioSettings\naudioTimePitchAlgorithm\naudioTimeStamp\naudioTracks\naudioUnit\naudiobooksQuery\naudiovisualMIMETypes\naudiovisualTypes\nauthenticateHandler\nauthenticateWithCompletionHandler\nauthenticated\nauthenticationMethod\nauthenticationRequired\nauthenticationToken\nauthorizationStatus\nauthorizationStatusForEntityType\nauthorizationStatusForMediaType\nauthorizationStatusForType\nautoAdjustmentFilters\nautoAdjustmentFiltersWithOptions\nautoCompletionViewController\nautoContentAccessingProxy\nautoExposureSettingsWithExposureTargetBias\nautoFocusRangeRestriction\nautoFocusRangeRestrictionSupported\nautoFocusSystem\nautocapitalizationType\nautocorrectionType\nautoenablesDefaultLighting\nautomaticTerminationSupportEnabled\nautomaticallyAdjustsMirroring\nautomaticallyAdjustsScrollViewInsets\nautomaticallyAdjustsVideoHDREnabled\nautomaticallyAdjustsVideoMirroring\nautomaticallyAdjustsZRange\nautomaticallyConfiguresApplicationAudioSession\nautomaticallyEnablesLowLightBoostWhenAvailable\nautomaticallyEnablesStillImageStabilizationWhenAvailable\nautomaticallyForwardAppearanceAndRotationMethodsToChildViewControllers\nautomaticallyLoadedAssetKeys\nautomaticallyNotifiesObserversForKey\nautomotive\nautorepeat\nautoresizesSubviews\nautoresizingMask\nautoreverses\nautosaveWithCompletionHandler\nautoupdatingCurrentCalendar\nautoupdatingCurrentLocale\navAsset\navailability\navailable\navailableAttitudeReferenceFrames\navailableCaptureModesForCameraDevice\navailableChapterLocales\navailableData\navailableImageDataCVPixelFormatTypes\navailableImageDataCodecTypes\navailableInputs\navailableLanguages\navailableLocaleIdentifiers\navailableMediaCharacteristicsWithMediaSelectionOptions\navailableMediaTypes\navailableMediaTypesForSourceType\navailableMetadataFormats\navailableMetadataObjectTypes\navailableModes\navailableOutputFileTypes\navailableOutputSettingsPresets\navailableStringEncodings\navailableTagSchemesForLanguage\navailableTrackAssociationTypes\navailableVideoCVPixelFormatTypes\navailableVideoCodecTypes\naveragePowerForChannel\naveragePowerLevel\naverageQuantity\naverageQuantityForSource\navoid\nawakeAfterUsingCoder\nawakeFromFetch\nawakeFromInsert\nawakeFromNib\nawakeFromSnapshotEvents\nawakeWithContext\naxisA\naxisB\naxle\nbackBarButtonItem\nbackButtonBackgroundImageForState\nbackButtonBackgroundVerticalPositionAdjustmentForBarMetrics\nbackButtonTitlePositionAdjustmentForBarMetrics\nbackFaceStencil\nbackForwardList\nbackIndicatorImage\nbackIndicatorTransitionMaskImage\nbackItem\nbackList\nbackground\nbackgroundColor\nbackgroundEffect\nbackgroundFilters\nbackgroundImage\nbackgroundImageForBarMetrics\nbackgroundImageForBarPosition\nbackgroundImageForState\nbackgroundImageForToolbarPosition\nbackgroundRectForBounds\nbackgroundRefreshStatus\nbackgroundSessionConfiguration\nbackgroundSessionConfigurationWithIdentifier\nbackgroundTimeRemaining\nbackgroundVerticalPositionAdjustmentForBarMetrics\nbackgroundView\nbadge\nbadgeValue\nbands\nbandwidth\nbannerLoaded\nbannerView\nbannerViewActionDidFinish\nbannerViewActionInProgress\nbannerViewActionShouldBegin\nbannerViewDidLoadAd\nbannerViewWillLoadAd\nbarButtonItem\nbarHideOnSwipeGestureRecognizer\nbarHideOnTapGestureRecognizer\nbarPosition\nbarStyle\nbarTintColor\nbase\nbase64EncodedDataWithOptions\nbase64EncodedStringWithOptions\nbase64Encoding\nbaseGeometry\nbaseGeometryBindTransform\nbaseURL\nbaseWritingDirection\nbaseWritingDirectionForPosition\nbaselineAdjustment\nbatchUpdateRequestWithEntityName\nbatteryLevel\nbatteryMonitoringEnabled\nbatteryState\nbeatsPerMinute\nbecomeCurrent\nbecomeCurrentPage\nbecomeCurrentWithPendingUnitCount\nbecomeFirstResponder\nbecomeKeyWindow\nbegin\nbeginActivityWithOptions\nbeginAnimations\nbeginAppearanceTransition\nbeginBackgroundTaskWithExpirationHandler\nbeginBackgroundTaskWithName\nbeginConfiguration\nbeginContentAccess\nbeginCustomizingItems\nbeginEditing\nbeginEntityMapping\nbeginGeneratingDeviceOrientationNotifications\nbeginGeneratingLibraryChangeNotifications\nbeginGeneratingPlaybackNotifications\nbeginIgnoringInteractionEvents\nbeginInterruption\nbeginLoadingChildItemsAtIndexPath\nbeginReceivingRemoteControlEvents\nbeginRefreshing\nbeginRequestWithExtensionContext\nbeginSeekingBackward\nbeginSeekingForward\nbeginTime\nbeginTrackingWithTouch\nbeginUndoGrouping\nbeginUpdates\nbeginningOfDocument\nbehaviorTypes\nbehaviorWithType\nbehaviors\nbestPaperForPageSize\nbezierPath\nbezierPathByReversingPath\nbezierPathWithArcCenter\nbezierPathWithCGPath\nbezierPathWithOvalInRect\nbezierPathWithRect\nbezierPathWithRoundedRect\nbiasValues\nbillingAddress\nbindDrawable\nbiologicalSex\nbiologicalSexWithError\nbirthDirection\nbirthLocation\nbirthRate\nbirthRateVariation\nbirthdayPersonID\nbitmapRepresentation\nbits\nblackColor\nblackPassEnabled\nblendMode\nblendingEnabled\nblitCommandEncoder\nblockOperationWithBlock\nblocked\nbloodType\nbloodTypeWithError\nblue\nblueColor\nblueRange\nblueSpeed\nbody\nbodyA\nbodyAlongRayStart\nbodyAtPoint\nbodyB\nbodyInRect\nbodyWithBodies\nbodyWithCircleOfRadius\nbodyWithEdgeChainFromPath\nbodyWithEdgeFromPoint\nbodyWithEdgeLoopFromPath\nbodyWithEdgeLoopFromRect\nbodyWithPolygonFromPath\nbodyWithRectangleOfSize\nbodyWithTexture\nbodyWithType\nboldSystemFontOfSize\nboneIndices\nboneInverseBindTransforms\nboneWeights\nbones\nbookmarkCommand\nbookmarkDataWithContentsOfURL\nbookmarkDataWithOptions\nbookmarkTime\nboolForKey\nboolValue\nborderColor\nborderRectForBounds\nborderStyle\nborderWidth\nbottomLayoutGuide\nbottomLeft\nbottomRadius\nbottomRight\nbounces\nbouncesZoom\nboundaryIdentifiers\nboundaryWithIdentifier\nboundingMapRect\nboundingRectForGlyphRange\nboundingRectWithSize\nboundingRegion\nbounds\nboxWithWidth\nbridged\nbrightness\nbringSubviewToFront\nbroadcast\nbrownColor\nbrowser\nbrowserViewController\nbrowserViewControllerDidFinish\nbrowserViewControllerWasCancelled\nbufferAlignment\nbufferDataSize\nbufferDataType\nbufferIndex\nbufferStructType\nbuild\nbuiltInPlugInsPath\nbuiltInPlugInsURL\nbundleForClass\nbundleIdentifier\nbundlePath\nbundleURL\nbundleWithIdentifier\nbundleWithPath\nbundleWithURL\nburstIdentifier\nburstSelectionTypes\nbuttonA\nbuttonB\nbuttonFontSize\nbuttonNumber\nbuttonTitleAtIndex\nbuttonType\nbuttonWithType\nbuttonX\nbuttonY\nbyValue\nbypass\nbyteRangeAccessSupported\nbytesPerComponent\nbytesPerIndex\ncString\ncStringLength\ncStringUsingEncoding\ncache\ncacheName\ncacheNodeForObjectID\ncacheNodes\ncachePolicy\ncachedImages\ncachedResponse\ncachedResponseForRequest\ncachedSnapshot\ncalculateAccumulatedFrame\ncalculateDirectionsWithCompletionHandler\ncalculateETAWithCompletionHandler\ncalculating\ncalculationMode\ncalendar\ncalendarChooserDidCancel\ncalendarChooserDidFinish\ncalendarChooserSelectionDidChange\ncalendarForEntityType\ncalendarIdentifier\ncalendarItemExternalIdentifier\ncalendarItemIdentifier\ncalendarItemWithIdentifier\ncalendarItemsWithExternalIdentifier\ncalendarWithEventStore\ncalendarWithIdentifier\ncalendars\ncalendarsForEntityType\ncallEventHandler\ncallID\ncallStackReturnAddresses\ncallStackSymbols\ncallState\ncallWithArguments\ncalloutOffset\ncalorieUnit\ncamera\ncameraCaptureMode\ncameraDevice\ncameraFlashMode\ncameraLookingAtCenterCoordinate\ncameraOverlayView\ncameraViewTransform\ncanAddConnection\ncanAddInput\ncanAddInputGroup\ncanAddOutput\ncanAddPasses\ncanAddTrackAssociationWithTrackOfInput\ncanApplyOutputSettings\ncanBeConvertedToEncoding\ncanBePreventedByGestureRecognizer\ncanBecomeFirstResponder\ncanCancelContentTouches\ncanContainAssets\ncanContainCollections\ncanDisplayBannerAds\ncanDrawMapRect\ncanEditVideoAtPath\ncanEvaluatePolicy\ncanFilterByProperty\ncanGoBack\ncanGoForward\ncanHandleAdjustmentData\ncanHandleRequest\ncanInitWithRequest\ncanInitWithTask\ncanInsertItem\ncanMakePayments\ncanMakePaymentsUsingNetworks\ncanOpenURL\ncanPerformAction\ncanPerformEditOperation\ncanPerformMultiplePasses\ncanPerformMultiplePassesOverSourceMediaData\ncanPerformUnwindSegueAction\ncanPerformWithActivityItems\ncanPlayFastForward\ncanPlayFastReverse\ncanPlayReverse\ncanPlaySlowForward\ncanPlaySlowReverse\ncanPreventGestureRecognizer\ncanPreviewItem\ncanPrintData\ncanPrintURL\ncanProvideSampleCursors\ncanRedo\ncanReplaceMapContent\ncanResignFirstResponder\ncanSendAttachments\ncanSendMail\ncanSendSubject\ncanSendText\ncanSendTweet\ncanSetSessionPreset\ncanShowCallout\ncanShowMIMEType\ncanStepBackward\ncanStepForward\ncanUndo\ncancel\ncancelAction\ncancelAllCGImageGeneration\ncancelAllLocalNotifications\ncancelAllOperations\ncancelAllPendingVideoCompositionRequests\ncancelAllThumbnailImageRequests\ncancelAuthenticationChallenge\ncancelBannerViewAction\ncancelButtonIndex\ncancelByProducingResumeData\ncancelConnectPeer\ncancelConnectToPeer\ncancelContentEditing\ncancelContentEditingInputRequest\ncancelDownloads\ncancelEditing\ncancelExport\ncancelFetchRequest\ncancelGeocode\ncancelImageRequest\ncancelInteractiveTransition\ncancelInviteToPlayer\ncancelLoading\ncancelLocalNotification\ncancelMigrationWithError\ncancelPendingInviteToPlayer\ncancelPendingPrerolls\ncancelPendingSeeks\ncancelPerformSelector\ncancelPerformSelectorsWithTarget\ncancelPeripheralConnection\ncancelPreroll\ncancelPreviousPerformRequestsWithTarget\ncancelReading\ncancelRequestWithError\ncancelTrackingWithEvent\ncancelVideoZoomRamp\ncancelWithLocalizableMessageKey\ncancelWriting\ncancellable\ncancellationHandler\ncancelled\ncancelsTouchesInView\ncanonicalLanguageIdentifierFromString\ncanonicalLocaleIdentifierFromString\ncanonicalRequestForRequest\ncapHeight\ncapInsets\ncapRadius\ncapSegmentCount\ncapabilities\ncapitalizedLetterCharacterSet\ncapitalizedString\ncapitalizedStringWithLocale\ncapsuleWithCapRadius\ncaptureDevicePointOfInterestForPoint\ncaptureOutput\ncaptureOutputShouldProvideSampleAccurateRecordingStart\ncaptureStillImageAsynchronouslyFromConnection\ncaptureStillImageBracketAsynchronouslyFromConnection\ncapturesCursor\ncapturesMouseClicks\ncapturingStillImage\ncaretRectForPosition\ncarrierName\ncarrierToken\ncaseInsensitiveCompare\ncaseSensitive\ncastsShadow\ncategories\ncategory\ncategoryBitMask\ncategoryOptions\ncategorySampleWithType\ncategoryType\ncategoryTypeForIdentifier\ncblas\ncellForItemAtIndexPath\ncellForRowAtIndexPath\ncenter\ncenterCoordinate\ncenterOffset\ncenterRect\ncentimeterOfWaterUnit\ncentral\ncentralManager\ncentralManagerDidUpdateState\ncertificateType\ncertificates\ncflag\nchainRootNode\nchallengeComposeControllerWithMessage\nchallengeComposeControllerWithPlayers\nchallengeEventHandler\nchamferMode\nchamferProfile\nchamferRadius\nchamferSegmentCount\nchangeCount\nchangeCountTokenForSaveOperation\nchangeCurrentDirectoryPath\nchangeDetailsForFetchResult\nchangeDetailsForObject\nchangeDetailsFromFetchResult\nchangeFileAttributes\nchangeInLength\nchangePlaybackRateCommand\nchangeRequestForAsset\nchangeRequestForAssetCollection\nchangeRequestForCollectionList\nchangedIndexes\nchangedKeys\nchangedObjects\nchangedValues\nchangedValuesForCurrentEvent\nchannelAssignments\nchannelCount\nchannelLabel\nchannelName\nchannelNumber\nchannels\nchapterMetadataGroupsBestMatchingPreferredLanguages\nchapterMetadataGroupsWithTitleLocale\nchar\ncharValue\ncharacterAtIndex\ncharacterDirectionForLanguage\ncharacterIndexForGlyphAtIndex\ncharacterIndexForPoint\ncharacterIsMember\ncharacterOffsetOfPosition\ncharacterRangeAtPoint\ncharacterRangeByExtendingPosition\ncharacterRangeForGlyphRange\ncharacterSetWithBitmapRepresentation\ncharacterSetWithCharactersInString\ncharacterSetWithContentsOfFile\ncharacterSetWithRange\ncharacteristic\ncharacteristicType\ncharacteristicTypeForIdentifier\ncharacteristics\ncharactersRemaining\ncharactersToBeSkipped\ncharge\nchassisBody\ncheckPromisedItemIsReachableAndReturnError\ncheckResourceIsReachableAndReturnError\ncheckingTypes\nchildBehaviors\nchildItemsDisplayPlaybackProgressAtIndexPath\nchildNodeWithName\nchildNodes\nchildNodesPassingTest\nchildSecurityAssociationParameters\nchildViewControllerForStatusBarHidden\nchildViewControllerForStatusBarStyle\nchildViewControllers\nchildren\nchooseBestHostPlayerWithCompletionHandler\nchooseBestHostingPlayerWithCompletionHandler\nchromaticityValuesForDeviceWhiteBalanceGains\ncircle\ncircleWithCenterCoordinate\ncircleWithMapRect\nclapack\nclass\nclassFallbacksForKeyedArchiver\nclassForClassName\nclassForCoder\nclassForKeyedArchiver\nclassForKeyedUnarchiver\nclassNameForClass\nclassNamed\nclearAllForces\nclearAllMenuItems\nclearButtonMode\nclearButtonRectForBounds\nclearCaches\nclearColor\nclearDepth\nclearKeepAliveTimeout\nclearStencil\nclearTextInputContextIdentifier\nclearsContextBeforeDrawing\nclearsOnBeginEditing\nclearsOnInsertion\nclearsSelectionOnViewWillAppear\nclient\nclientChangeTokenData\nclipsToBounds\nclone\nclose\ncloseFile\nclosePath\ncloseWithCompletionHandler\nclosedCaptionDisplayEnabled\nclosestPositionToPoint\ncloudItem\ncode\ncollapseSecondaryViewController\ncollapsed\ncollapsesLargestUnit\ncollection\ncollectionListSubtype\ncollectionListType\ncollectionSections\ncollectionView\ncollectionViewContentSize\ncollectionViewLayout\ncollectionWithItems\ncollections\ncolliderNodes\ncollisionBehavior\ncollisionBitMask\ncollisionDelegate\ncollisionImpulse\ncollisionMode\ncolor\ncolorAttachments\ncolorBlendFactor\ncolorMaterialEnabled\ncolorSpace\ncolorWithAlphaComponent\ncolorWithCGColor\ncolorWithCIColor\ncolorWithHue\ncolorWithPatternImage\ncolorWithRed\ncolorWithString\ncolorWithWhite\ncolorizeWithColor\ncolorizeWithColorBlendFactor\ncolors\ncolumnNumber\ncolumnTerminatorsForLocale\ncommand\ncommandBuffer\ncommandBufferWithUnretainedReferences\ncommandQueue\ncomment\ncommentURL\ncomments\ncommit\ncommitAnimations\ncommitConfiguration\ncommittedValuesForKeys\ncommonFormat\ncommonISOCurrencyCodes\ncommonKey\ncommonMetadata\ncommonPrefixWithString\ncompact\ncomparator\ncompare\ncompareDate\ncompareObject\ncomparePosition\ncompareStartDateWithEvent\ncomparisonPredicateModifier\ncomparisonType\ncompatibleTrackForCompositionTrack\ncompatibleWithSavedPhotosAlbum\ncompilation\ncompilationsQuery\ncompletePathIntoString\ncompleteRequestReturningItems\ncompleteStateRestoration\ncompleteTransition\ncompleted\ncompletedExchanges\ncompletedUnitCount\ncompletionBlock\ncompletionCurve\ncompletionDate\ncompletionHandler\ncompletionSpeed\ncompletionVelocity\ncompletionWithItemsHandler\ncompletionsForPartialWordRange\ncomponent\ncomponents\ncomponentsFromLocaleIdentifier\ncomponentsInTimeZone\ncomponentsJoinedByString\ncomponentsPerVector\ncomponentsSeparatedByCharactersInSet\ncomponentsSeparatedByString\ncomponentsToDisplayForPath\ncomponentsWithString\ncomponentsWithURL\ncomposable\ncomposeViewControllerForServiceType\ncomposeViewDelegate\ncomposer\ncomposerPersistentID\ncomposersQuery\ncompositingFilter\ncomposition\ncompositionTime\ncompositionTrackSegmentWithTimeRange\ncompositionTrackSegmentWithURL\ncompoundIndexes\ncompoundPredicateType\ncomputeCommandEncoder\nconcurrencyType\nconcurrent\ncondition\nconeWithTopRadius\nconfidence\nconfig\nconfiguration\nconfigurationItems\nconfigurationName\nconfigurations\nconfigureAccessory\nconfigureAsServer\nconfigurePersistentStoreCoordinatorForURL\nconflict\nconnect\nconnectPeer\nconnectPeripheral\nconnectToPeer\nconnected\nconnectedAccessories\nconnectedPeers\nconnection\nconnectionDidFinishDownloading\nconnectionDidFinishLoading\nconnectionDidResumeDownloading\nconnectionID\nconnectionPolicy\nconnectionPosition\nconnectionProxyDictionary\nconnectionRules\nconnectionShouldUseCredentialStorage\nconnectionTypesMask\nconnectionWithHost\nconnectionWithInputPort\nconnectionWithInputPorts\nconnectionWithMediaType\nconnectionWithRequest\nconnections\nconst\nconstant\nconstantAttenuation\nconstantAttenuationlinearAttenuationquadraticAttenuation\nconstantColor\nconstantValue\nconstraintWithItem\nconstraints\nconstraintsAffectingLayoutForAxis\nconstraintsWithVisualFormat\nconstructWithArguments\ncontactDelegate\ncontactNormal\ncontactPoint\ncontactPrinter\ncontactTestBetweenBody\ncontactTestBitMask\ncontactTestWithBody\ncontacts\ncontainer\ncontainerFrame\ncontainerIdentifier\ncontainerURLForSecurityApplicationGroupIdentifier\ncontainerView\ncontainerViewDidLayoutSubviews\ncontainerViewWillLayoutSubviews\ncontainerWithIdentifier\ncontainsCoordinate\ncontainsEnd\ncontainsIndex\ncontainsIndexes\ncontainsIndexesInRange\ncontainsMipmaps\ncontainsObject\ncontainsPass\ncontainsPasteboardTypes\ncontainsPoint\ncontainsStart\ncontainsString\ncontainsTraitsInCollection\ncontainsTweening\ncontainsValueForKey\ncontentCompressionResistancePriorityForAxis\ncontentEdgeInsets\ncontentEditingOutput\ncontentFrame\ncontentHorizontalAlignment\ncontentHuggingPriorityForAxis\ncontentIdentifier\ncontentInformationRequest\ncontentInset\ncontentInsets\ncontentItemAtIndexPath\ncontentLimitsEnabled\ncontentMode\ncontentOffset\ncontentOffsetAdjustment\ncontentOffsetForSegmentAtIndex\ncontentOverlayView\ncontentPositionAdjustmentForSegmentType\ncontentRectForBounds\ncontentScaleFactor\ncontentSize\ncontentSizeAdjustment\ncontentSizeForViewInPopover\ncontentStretch\ncontentText\ncontentType\ncontentURL\ncontentVersion\ncontentVerticalAlignment\ncontentView\ncontentViewController\ncontentViewInsets\ncontentWidth\ncontents\ncontentsAreFlipped\ncontentsAtPath\ncontentsCenter\ncontentsEqualAtPath\ncontentsForType\ncontentsGravity\ncontentsOfDirectoryAtPath\ncontentsOfDirectoryAtURL\ncontentsRect\ncontentsScale\ncontentsTransform\ncontext\ncontextExpression\ncontextForSegueWithIdentifier\ncontextShouldIgnoreUnmodeledPropertyChanges\ncontextWithCGContext\ncontextWithCGLContext\ncontextWithEAGLContext\ncontextWithJSGlobalContextRef\ncontextWithOptions\ncontextsForSegueWithIdentifier\ncontinueSpeaking\ncontinueTrackingWithTouch\ncontinueWithoutCredentialForAuthenticationChallenge\ncontinuityValues\ncontinuous\ncontrolCharacterSet\ncontrolStyle\ncontroller\ncontrollerDidChangeContent\ncontrollerPausedHandler\ncontrollerWillChangeContent\ncontrollerWithAnimation\ncontrollers\nconvertCoordinate\nconvertPoint\nconvertPointFromView\nconvertPointToView\nconvertPosition\nconvertRect\nconvertRegion\nconvertTime\nconvertTransform\nconvexSweepTestWithShape\ncookieAcceptPolicy\ncookieWithProperties\ncookies\ncookiesForURL\ncookiesWithResponseHeaderFields\ncoordinate\ncoordinateAccessWithIntents\ncoordinateReadingItemAtURL\ncoordinateSpace\ncoordinateWritingItemAtURL\ncopy\ncopyCGImageAtTime\ncopyFormatDescription\ncopyFromBuffer\ncopyFromTexture\ncopyItemAtPath\ncopyItemAtURL\ncopyNextSampleBuffer\ncopyPath\ncopyPixelBufferForItemTime\ncopyWithZone\ncornerRadius\ncornerSegmentCount\ncorners\ncorrectionCheckingResultWithRange\ncorrelationType\ncorrelationTypeForIdentifier\ncorrelationWithType\ncount\ncountByEnumeratingWithState\ncountDownDuration\ncountForFetchRequest\ncountForObject\ncountLimit\ncountOfAssetsWithMediaType\ncountOfBytesExpectedToReceive\ncountOfBytesExpectedToSend\ncountOfBytesReceived\ncountOfBytesSent\ncountOfIndexesInRange\ncountOnlyRequest\ncountStyle\ncountUnit\ncountry\ncountryCode\ncourse\ncpuCacheMode\ncreateCGImage\ncreateCGLayerWithSize\ncreateDestinationInstancesForSourceInstance\ncreateDirectoryAtPath\ncreateDirectoryAtURL\ncreateFileAtPath\ncreatePath\ncreateRelationshipsForDestinationInstance\ncreateSymbolicLinkAtPath\ncreateSymbolicLinkAtURL\ncreationDate\ncreationRequestForAssetCollectionWithTitle\ncreationRequestForAssetFromImage\ncreationRequestForAssetFromImageAtFileURL\ncreationRequestForAssetFromVideoAtFileURL\ncreationRequestForCollectionListWithTitle\ncreatorUserRecordID\ncredential\ncredentialForTrust\ncredentialWithIdentity\ncredentialWithUser\ncredentialsForProtectionSpace\ncropRect\ncrossFadeWithDuration\ncubeMapWithContentsOfFile\ncubeMapWithContentsOfFiles\ncubeMapWithContentsOfURL\ncullMode\ncumulative\ncurrencyCode\ncurrencyDecimalSeparator\ncurrencyGroupingSeparator\ncurrencySymbol\ncurrentArguments\ncurrentAttributedTitle\ncurrentBackgroundImage\ncurrentCalendar\ncurrentCallee\ncurrentCalls\ncurrentCollation\ncurrentContentSizeIdentifier\ncurrentContext\ncurrentDate\ncurrentDevice\ncurrentDirectoryPath\ncurrentDiskUsage\ncurrentEntityMapping\ncurrentHandler\ncurrentHardwareInputNumberOfChannels\ncurrentHardwareOutputNumberOfChannels\ncurrentHardwareSampleRate\ncurrentImage\ncurrentInputMode\ncurrentItem\ncurrentLanguageCode\ncurrentLayout\ncurrentLocale\ncurrentMaximumTrackImage\ncurrentMemoryUsage\ncurrentMinimumTrackImage\ncurrentMode\ncurrentPage\ncurrentPageIndicatorTintColor\ncurrentParticipant\ncurrentPassDescription\ncurrentPlaybackRate\ncurrentPlaybackTime\ncurrentPoint\ncurrentPosition\ncurrentPreviewItem\ncurrentPreviewItemIndex\ncurrentProgress\ncurrentQueue\ncurrentRadioAccessTechnology\ncurrentRequest\ncurrentRoute\ncurrentRunLoop\ncurrentThis\ncurrentThread\ncurrentThumbImage\ncurrentTime\ncurrentTimeLabelFont\ncurrentTitle\ncurrentTitleColor\ncurrentTitleShadowColor\ncurrentUserNotificationSettings\ncurrentVersionOfItemAtURL\ncurrentVideoFrameRate\ncurrentlyReadingIssue\ncursor\ncustomActionWithDuration\ncustomFieldWithEvaluationBlock\ncustomSelector\ncustomVideoCompositor\ncustomVideoCompositorClass\ncustomView\ncustomizableViewControllers\ncut\ncyanColor\ncycling\ncylinderWithRadius\ndamping\ndampingFactor\ndarkGrayColor\ndarkTextColor\ndashCheckingResultWithRange\ndata\ndataDetectorTypes\ndataDetectorWithTypes\ndataForKey\ndataForPasteboardType\ndataFromPropertyList\ndataFromRange\ndataFromTXTRecordDictionary\ndataOffset\ndataRequest\ndataSource\ndataSourceID\ndataSourceName\ndataSources\ndataStride\ndataTaskWithHTTPGetRequest\ndataTaskWithRequest\ndataTaskWithURL\ndataType\ndataUsingEncoding\ndataValue\ndataWithBytes\ndataWithBytesNoCopy\ndataWithCapacity\ndataWithContentsOfFile\ndataWithContentsOfMappedFile\ndataWithContentsOfURL\ndataWithData\ndataWithJSONObject\ndataWithLength\ndataWithPropertyList\ndatabase\ndate\ndateByAddingComponents\ndateByAddingTimeInterval\ndateByAddingUnit\ndateBySettingHour\ndateBySettingUnit\ndateCheckingResultWithRange\ndateFormat\ndateFormatFromTemplate\ndateFormatTemplate\ndateFromComponents\ndateFromString\ndateOfBirthWithError\ndatePickerMode\ndateStyle\ndateTemplate\ndateValue\ndateWithEra\ndateWithTimeInterval\ndateWithTimeIntervalSince1970\ndateWithTimeIntervalSinceNow\ndateWithTimeIntervalSinceReferenceDate\nday\ndayOfTheWeek\ndayOfWeek\ndayUnit\ndaylightSavingTime\ndaylightSavingTimeOffset\ndaylightSavingTimeOffsetForDate\ndaysOfTheMonth\ndaysOfTheWeek\ndaysOfTheYear\ndeactivateConstraints\ndeadPeerDetectionRate\ndealloc\ndebugDescription\ndebugLabel\ndecelerating\ndecelerationRate\ndecimalDigitCharacterSet\ndecimalNumberByAdding\ndecimalNumberByDividingBy\ndecimalNumberByMultiplyingBy\ndecimalNumberByMultiplyingByPowerOf10\ndecimalNumberByRaisingToPower\ndecimalNumberByRoundingAccordingToBehavior\ndecimalNumberBySubtracting\ndecimalNumberHandlerWithRoundingMode\ndecimalNumberWithDecimal\ndecimalNumberWithMantissa\ndecimalNumberWithString\ndecimalSeparator\ndecimalValue\ndecline\ndeclineInviteWithCompletionHandler\ndecodeArrayOfObjCType\ndecodeBoolForKey\ndecodeBytesWithReturnedLength\ndecodeCGAffineTransformForKey\ndecodeCGPointForKey\ndecodeCGRectForKey\ndecodeCGSizeForKey\ndecodeCGVectorForKey\ndecodeCMTimeForKey\ndecodeCMTimeMappingForKey\ndecodeCMTimeRangeForKey\ndecodeDataObject\ndecodeDoubleForKey\ndecodeFloatForKey\ndecodeInt32ForKey\ndecodeInt64ForKey\ndecodeIntForKey\ndecodeIntegerForKey\ndecodeNXObject\ndecodeObject\ndecodeObjectForKey\ndecodeObjectOfClass\ndecodeObjectOfClasses\ndecodePropertyList\ndecodePropertyListForKey\ndecodeRestorableStateWithCoder\ndecodeUIEdgeInsetsForKey\ndecodeUIOffsetForKey\ndecodeValueOfObjCType\ndecodeValuesOfObjCTypes\ndecomposableCharacterSet\ndecomposedStringWithCanonicalMapping\ndecomposedStringWithCompatibilityMapping\ndecreaseSize\ndecrementImageForState\ndefault\ndefaultActionForKey\ndefaultBehavior\ndefaultCStringEncoding\ndefaultCalendarForNewEvents\ndefaultCalendarForNewReminders\ndefaultCenter\ndefaultContainer\ndefaultCredentialForProtectionSpace\ndefaultDate\ndefaultDecimalNumberHandler\ndefaultDeviceWithMediaType\ndefaultFormatterBehavior\ndefaultInput\ndefaultInvitationMessage\ndefaultManager\ndefaultMediaLibrary\ndefaultNumberOfPlayers\ndefaultOption\ndefaultParagraphStyle\ndefaultQueue\ndefaultReadingList\ndefaultRecordZone\ndefaultRepresentation\ndefaultSession\ndefaultSessionConfiguration\ndefaultSource\ndefaultStore\ndefaultTabInterval\ndefaultTextAttributes\ndefaultTimeZone\ndefaultValue\ndefaultValueForKey\ndefaultVoiceChatService\ndefaultWritingDirectionForLanguage\ndefaults\ndeferredLocationUpdatesAvailable\ndefersCurrentPageDisplay\ndefineProperty\ndefinesPresentationContext\ndefinition\ndegreeCelsiusUnit\ndegreeFahrenheitUnit\ndelayTime\ndelaysContentTouches\ndelaysTouchesBegan\ndelaysTouchesEnded\ndelegate\ndelegateQueue\ndelete\ndeleteAssetCollections\ndeleteAssets\ndeleteBackward\ndeleteCacheWithName\ndeleteCharactersInRange\ndeleteCollectionLists\ndeleteCookie\ndeleteDrawable\ndeleteItemsAtIndexPaths\ndeleteObject\ndeleteProperty\ndeleteRecordWithID\ndeleteRecordZoneWithID\ndeleteRecording\ndeleteRowsAtIndexPaths\ndeleteRule\ndeleteSavedGamesWithName\ndeleteSections\ndeleteSubscriptionWithID\ndeleted\ndeletedObjects\ndeliveryMode\ndensity\ndenyCallID\ndenyConnectionFromPeer\ndepartureDate\ndependencies\ndepth\ndepthAttachment\ndepthAttachmentPixelFormat\ndepthCompareFunction\ndepthFailureOperation\ndepthPlane\ndepthStencilPassOperation\ndepthWriteEnabled\ndequeueNotificationsMatching\ndequeueReusableAnnotationViewWithIdentifier\ndequeueReusableCellWithIdentifier\ndequeueReusableCellWithReuseIdentifier\ndequeueReusableHeaderFooterViewWithIdentifier\ndequeueReusableSupplementaryViewOfKind\ndescender\ndescription\ndescriptionFunction\ndescriptionInStringsFileFormat\ndescriptionWithLocale\ndescriptors\ndeselectAnnotation\ndeselectItemAtIndexPath\ndeselectRowAtIndexPath\ndesiredAccuracy\ndesiredKeys\ndesiredPushTypes\ndestination\ndestinationAlphaBlendFactor\ndestinationContext\ndestinationEndpoint\ndestinationEntity\ndestinationEntityForEntityMapping\ndestinationEntityName\ndestinationEntityVersionHash\ndestinationInstancesForEntityMappingNamed\ndestinationModel\ndestinationOfSymbolicLinkAtPath\ndestinationRGBBlendFactor\ndestinationViewController\ndestructive\ndestructiveButtonIndex\ndetachNewThreadSelector\ndetachNode\ndetail\ndetailTextForGuidedAccessRestrictionWithIdentifier\ndetailTextLabel\ndetectConflictsForObject\ndetectorOfType\ndetectsPhoneNumbers\ndetermineAppInstallationAttributionWithCompletionHandler\ndetermineCompatibilityOfExportPreset\ndetermineCompatibleFileTypesWithCompletionHandler\ndevelopmentLocalization\ndevice\ndeviceAccountIdentifier\ndeviceAccountNumberSuffix\ndeviceCurrentTime\ndeviceInputWithDevice\ndeviceMotion\ndeviceMotionActive\ndeviceMotionAvailable\ndeviceMotionUpdateInterval\ndeviceName\ndeviceWhiteBalanceGains\ndeviceWhiteBalanceGainsForChromaticityValues\ndeviceWhiteBalanceGainsForTemperatureAndTintValues\ndeviceWithUniqueID\ndevices\ndevicesWithMediaType\ndictationRecognitionFailed\ndictationRecordingDidEnd\ndictionary\ndictionaryForKey\ndictionaryFromTXTRecordData\ndictionaryHasDefinitionForTerm\ndictionaryPayload\ndictionaryRepresentation\ndictionaryWithCapacity\ndictionaryWithContentsOfFile\ndictionaryWithContentsOfURL\ndictionaryWithDictionary\ndictionaryWithObject\ndictionaryWithObjects\ndictionaryWithObjectsAndKeys\ndictionaryWithSharedKeySet\ndictionaryWithValuesForKeys\ndidAccessValueForKey\ndidAddSubview\ndidAddToPersistentStoreCoordinator\ndidAnimateFirstHalfOfRotationToInterfaceOrientation\ndidApplyConstraints\ndidApplyConstraintsForScene\ndidBeginContact\ndidChange\ndidChangeSize\ndidChangeValueForKey\ndidDeactivate\ndidDismissSearchController\ndidEndContact\ndidEvaluateActions\ndidEvaluateActionsForScene\ndidFinishUpdate\ndidFinishUpdateForScene\ndidMoveToParentViewController\ndidMoveToSuperview\ndidMoveToURL\ndidMoveToView\ndidMoveToWindow\ndidPresentActionSheet\ndidPresentAlertView\ndidPresentSearchController\ndidReceiveLocalNotification\ndidReceiveMemoryWarning\ndidReceiveRemoteNotification\ndidRotateFromInterfaceOrientation\ndidSave\ndidSelectCancel\ndidSelectPost\ndidSimulatePhysics\ndidSimulatePhysicsForScene\ndidTransitionFromLayout\ndidTransitionToState\ndidTurnIntoFault\ndiffieHellmanGroup\ndiffuse\ndiffuseColor\ndimensions\ndimsBackgroundDuringPresentation\ndirection\ndirectionalLockEnabled\ndirectory\ndirectoryAttributes\ndirectoryContentsAtPath\ndirectoryForTemporaryFiles\ndisableActions\ndisableAllBackgroundDeliveryWithCompletion\ndisableAutomaticTermination\ndisableBackgroundDeliveryForType\ndisableEditing\ndisableSharedPhotoStreamsSupport\ndisableSuddenTermination\ndisableUndoRegistration\ndisableUpdates\ndisableUserAttachments\ndisabledBackground\ndisablesAutomaticKeyboardDismissal\ndisallowDeferredLocationUpdates\ndiscCount\ndiscNumber\ndiscardContentIfPossible\ndiscardable\ndisconnect\ndisconnectFromAllPeers\ndisconnectNodeInput\ndisconnectNodeOutput\ndisconnectOnSleep\ndisconnectPeerFromAllPeers\ndisconnectTimeout\ndiscoverAllContactUserInfosWithCompletionHandler\ndiscoverAllContactsCompletionBlock\ndiscoverCharacteristics\ndiscoverDescriptorsForCharacteristic\ndiscoverIncludedServices\ndiscoverServices\ndiscoverUserInfoWithEmailAddress\ndiscoverUserInfoWithUserRecordID\ndiscoverUserInfosCompletionBlock\ndiscoveredAccessories\ndiscoveryInfo\ndiscretionary\ndiskCapacity\ndislikeCommand\ndismiss\ndismissAnimated\ndismissController\ndismissGrantingAccessToURL\ndismissHeadingCalibrationDisplay\ndismissKeyboard\ndismissMenuAnimated\ndismissModalViewControllerAnimated\ndismissMoviePlayerViewControllerAnimated\ndismissPopoverAnimated\ndismissPreviewAnimated\ndismissTextInputController\ndismissViewControllerAnimated\ndismissWithClickedButtonIndex\ndismissalTransitionDidEnd\ndismissalTransitionWillBegin\ndispatchThreadgroups\ndisplay\ndisplayIfNeeded\ndisplayLayer\ndisplayLinkWithTarget\ndisplayLocation\ndisplayMode\ndisplayModeButtonItem\ndisplayName\ndisplayNameAtPath\ndisplayNameForKey\ndisplayNameForPeer\ndisplayNameWithLocale\ndisplayScale\ndisplaySizeImage\ndisplayedPerson\ndisplayedProperties\ndisplayingBannerAd\ndisplaysSearchBarInNavigationBar\ndistance\ndistanceAttenuationModel\ndistanceAttenuationParameters\ndistanceFilter\ndistanceFromLocation\ndistanceFromString\ndistantFuture\ndistantPast\ndistinguishedNames\ndividerImageForLeftSegmentState\ndocumentContextAfterInput\ndocumentContextBeforeInput\ndocumentInteractionController\ndocumentInteractionControllerDidDismissOpenInMenu\ndocumentInteractionControllerDidDismissOptionsMenu\ndocumentInteractionControllerDidEndPreview\ndocumentInteractionControllerRectForPreview\ndocumentInteractionControllerViewControllerForPreview\ndocumentInteractionControllerViewForPreview\ndocumentInteractionControllerWillBeginPreview\ndocumentInteractionControllerWillPresentOpenInMenu\ndocumentInteractionControllerWillPresentOptionsMenu\ndocumentMenu\ndocumentMenuWasCancelled\ndocumentPicker\ndocumentPickerMode\ndocumentPickerWasCancelled\ndocumentState\ndocumentStorageURL\ndocumentText\ndoesRelativeDateFormatting\ndomain\ndominantLanguage\ndominantLanguageForScript\ndominantScript\ndoorsCloseHorizontalWithDuration\ndoorsCloseVerticalWithDuration\ndoorsOpenHorizontalWithDuration\ndoorsOpenVerticalWithDuration\ndoorwayWithDuration\ndoubleForKey\ndoubleSided\ndoubleValue\ndoubleValueForUnit\ndown\ndownloadContentLengths\ndownloadContentVersion\ndownloadOverdue\ndownloadState\ndownloadTaskWithRequest\ndownloadTaskWithResumeData\ndownloadTaskWithURL\ndownloadWithDelegate\ndownloadable\ndownloadingAssets\ndownloads\ndpad\ndragField\ndragState\ndraggable\ndragging\ndrain\ndraw\ndrawAsPatternInRect\ndrawAtPoint\ndrawBackgroundForGlyphRange\ndrawContentForPageAtIndex\ndrawFooterForPageAtIndex\ndrawGlyphsForGlyphRange\ndrawHeaderForPageAtIndex\ndrawImage\ndrawInContext\ndrawInRect\ndrawIndexedPrimitives\ndrawLayer\ndrawMapRect\ndrawPageAtIndex\ndrawPlaceholderInRect\ndrawPrimitives\ndrawPrintFormatter\ndrawRect\ndrawStrikethroughForGlyphRange\ndrawTextInRect\ndrawUnderlineForGlyphRange\ndrawViewHierarchyInRect\ndrawWithRect\ndrawableColorFormat\ndrawableDepthFormat\ndrawableHeight\ndrawableMultisample\ndrawableProperties\ndrawableSize\ndrawableStencilFormat\ndrawableWidth\ndrawsAsynchronously\ndrawsOutsideLineFragmentForGlyphAtIndex\ndueDateComponents\nduplex\nduration\ndurationWatched\ndynamic\ndynamicAnimator\ndynamicAnimatorDidPause\ndynamicAnimatorWillResume\ndynamicBody\neaglContext\nearlierDate\nedgeAntialiasingMask\nedgeCreasesElement\nedgeCreasesSource\nedgeWidths\nedges\nedgesForExtendedLayout\neditAction\neditButtonItem\neditViewDelegate\neditable\nedited\neditedMask\neditedRange\nediting\neditingAccessoryType\neditingAccessoryView\neditingRectForBounds\neditingStringForObjectValue\neditingStyle\neffect\neffectForBlurEffect\neffectWithStyle\nelapsedTime\nelasticity\nelectricField\nelementArrayType\nelementStructType\nelementType\nemailAddresses\nemission\nemissionAngle\nemissionAngleRange\nemissionDuration\nemissionDurationVariation\nemissionLatitude\nemissionLongitude\nemissionRange\nemissiveColor\nemitterCell\nemitterCells\nemitterDepth\nemitterMode\nemitterPosition\nemitterShape\nemitterSize\nemitterZPosition\nemittingDirection\nempty\nemptyImage\nenable\nenableAutomaticTermination\nenableBackgroundDeliveryForType\nenableEditing\nenableInputClicksWhenVisible\nenableNotification\nenablePostProcessing\nenableRate\nenableSetNeedsDisplay\nenableSuddenTermination\nenableUndoRegistration\nenableUpdates\nenabled\nenabledRemoteNotificationTypes\nenablesReturnKeyAutomatically\nenablesVideoStabilizationWhenAvailable\nencodeArrayOfObjCType\nencodeBool\nencodeBycopyObject\nencodeByrefObject\nencodeBytes\nencodeCGAffineTransform\nencodeCGPoint\nencodeCGRect\nencodeCGSize\nencodeCGVector\nencodeCMTime\nencodeCMTimeMapping\nencodeCMTimeRange\nencodeConditionalObject\nencodeDataObject\nencodeDouble\nencodeFloat\nencodeInt\nencodeInt32\nencodeInt64\nencodeInteger\nencodeNXObject\nencodeObject\nencodePropertyList\nencodeRestorableStateWithCoder\nencodeRootObject\nencodeSystemFieldsWithCoder\nencodeUIEdgeInsets\nencodeUIOffset\nencodeValueOfObjCType\nencodeValuesOfObjCTypes\nencodeWithCoder\nencryptionAlgorithm\nencryptionPreference\nend\nendActivity\nendAppearanceTransition\nendBackgroundTask\nendContentAccess\nendCustomizingAnimated\nendDate\nendEditing\nendEncoding\nendEntityMapping\nendGeneratingDeviceOrientationNotifications\nendGeneratingLibraryChangeNotifications\nendGeneratingPlaybackNotifications\nendIgnoringInteractionEvents\nendInstanceCreationForEntityMapping\nendInterruption\nendInterruptionWithFlags\nendMatchInTurnWithMatchData\nendOfDocument\nendPlaybackTime\nendPoint\nendProgress\nendReceivingRemoteControlEvents\nendRefreshing\nendRelationshipCreationForEntityMapping\nendSeeking\nendSessionAtSourceTime\nendTrackingWithTouch\nendTurnWithNextParticipant\nendTurnWithNextParticipants\nendUndoGrouping\nendUpdates\nendpointAvailable\nenergyFormatterUnitFromUnit\nenforcedContentItemsCount\nenforcedContentTreeDepth\nengine\nenqueue\nenqueueNotification\nenqueueSampleBuffer\nensureAttributesAreFixedInRange\nensureGlyphsForCharacterRange\nensureGlyphsForGlyphRange\nensureLayoutForBoundingRect\nensureLayoutForCharacterRange\nensureLayoutForGlyphRange\nensureLayoutForTextContainer\nentities\nentitiesByName\nentitiesForConfiguration\nentity\nentityForName\nentityMappings\nentityMappingsByName\nentityMigrationPolicyClassName\nentityName\nentityVersionHashesByName\nentries\nentriesPassingTest\nentryWithIdentifier\nenumerateAssetsAtIndexes\nenumerateAssetsUsingBlock\nenumerateAssetsWithOptions\nenumerateAttribute\nenumerateAttributesInRange\nenumerateBodiesAlongRayStart\nenumerateBodiesAtPoint\nenumerateBodiesInRect\nenumerateByteRangesUsingBlock\nenumerateChildNodesUsingBlock\nenumerateChildNodesWithName\nenumerateDatesStartingAfterDate\nenumerateEnclosingRectsForGlyphRange\nenumerateEventsMatchingPredicate\nenumerateGroupsWithTypes\nenumerateIndexesInRange\nenumerateIndexesUsingBlock\nenumerateIndexesWithOptions\nenumerateKeysAndObjectsUsingBlock\nenumerateKeysAndObjectsWithOptions\nenumerateLineFragmentsForGlyphRange\nenumerateLinesUsingBlock\nenumerateLinguisticTagsInRange\nenumerateMatchesInString\nenumerateMovesWithBlock\nenumerateObjectsAtIndexes\nenumerateObjectsUsingBlock\nenumerateObjectsWithOptions\nenumerateRangesInRange\nenumerateRangesUsingBlock\nenumerateRangesWithOptions\nenumerateResultsUsingBlock\nenumerateResultsWithOptions\nenumerateStatisticsFromDate\nenumerateSubstringsInRange\nenumerateTagsInRange\nenumerateValuesForProperties\nenumeratorAtPath\nenumeratorAtURL\nenvMode\nenvironment\nephemeralSessionConfiguration\nera\neraSymbols\nerror\nerrorComment\nerrorDomain\nerrorLog\nerrorStatusCode\nerrorWithDomain\nescapedPatternForString\nescapedTemplateForString\nestimatedAssetCount\nestimatedDataRate\nestimatedItemSize\nestimatedProgress\nestimatedResultCount\nestimatedRowHeight\nestimatedSectionFooterHeight\nestimatedSectionHeaderHeight\neulerAngles\nevaluateJavaScript\nevaluatePolicy\nevaluateScript\nevaluateWithObject\nevent\neventEditViewController\neventEditViewControllerDefaultCalendarForNewEvents\neventIdentifier\neventStore\neventStoreIdentifier\neventViewController\neventWithEventStore\neventWithIdentifier\nevents\neventsMatchingPredicate\nevictUbiquitousItemAtURL\nevictsObjectsWithDiscardedContent\nexception\nexceptionDuringOperation\nexceptionHandler\nexceptionWithName\nexchangeDataMaximumSize\nexchangeID\nexchangeMaxInitiatedExchangesPerPlayer\nexchangeObjectAtIndex\nexchangeOverlay\nexchangeOverlayAtIndex\nexchangeSubviewAtIndex\nexchanges\nexcludedActivityTypes\nexclusionPaths\nexclusive\nexclusiveTouch\nexecutableArchitectures\nexecutablePath\nexecutableURL\nexecuteActionSet\nexecuteFetchRequest\nexecuteQuery\nexecuteRequest\nexecuting\nexecutionBlocks\nexerciseAmbiguityInLayout\nexistingObjectWithID\nexit\nexpectedPlayerCount\nexpectedTravelTime\nexpectsMediaDataInRealTime\nexpiresDate\nexponentSymbol\nexportAsynchronouslyWithCompletionHandler\nexportPresetsCompatibleWithAsset\nexportSessionWithAsset\nexportable\nexposureDuration\nexposureMode\nexposurePointOfInterest\nexposurePointOfInterestSupported\nexposureTargetBias\nexposureTargetOffset\nexpression\nexpressionBlock\nexpressionForAggregate\nexpressionForAnyKey\nexpressionForBlock\nexpressionForConstantValue\nexpressionForEvaluatedObject\nexpressionForFetch\nexpressionForFunction\nexpressionForIntersectSet\nexpressionForKeyPath\nexpressionForMinusSet\nexpressionForSubquery\nexpressionForUnionSet\nexpressionForVariable\nexpressionResultType\nexpressionType\nexpressionValueWithObject\nexpressionWithFormat\nextendStateRestoration\nextendedGamepad\nextendedLanguageTag\nextendedLayoutIncludesOpaqueBars\nextendedLogData\nextendedLogDataStringEncoding\nextensionContext\nextent\nexternalEntityResolvingPolicy\nexternalPlaybackActive\nexternalPlaybackVideoGravity\nextraAttributes\nextraLineFragmentRect\nextraLineFragmentTextContainer\nextraLineFragmentUsedRect\nextrapolateTimeFromAnchor\nextrusionDepth\nfaceAngle\nfaceID\nfaceIndex\nfadeAlphaBy\nfadeAlphaTo\nfadeDuration\nfadeInDuration\nfadeInWithDuration\nfadeOpacityBy\nfadeOpacityTo\nfadeOutDuration\nfadeOutWithDuration\nfadeWithColor\nfadeWithDuration\nfailureResponse\nfalloff\nfalloffBy\nfalloffExponent\nfalloffTo\nfamilyName\nfamilyNames\nfastMathEnabled\nfastestEncoding\nfault\nfaultingState\nfavorite\nfeaturesInImage\nfeedback\nfetchAllRecordZonesOperation\nfetchAllRecordZonesWithCompletionHandler\nfetchAllSubscriptionsOperation\nfetchAllSubscriptionsWithCompletionHandler\nfetchAssetCollectionsContainingAsset\nfetchAssetCollectionsWithALAssetGroupURLs\nfetchAssetCollectionsWithLocalIdentifiers\nfetchAssetCollectionsWithType\nfetchAssetsInAssetCollection\nfetchAssetsWithALAssetURLs\nfetchAssetsWithBurstIdentifier\nfetchAssetsWithLocalIdentifiers\nfetchAssetsWithMediaType\nfetchAssetsWithOptions\nfetchBatchSize\nfetchCollectionListsContainingCollection\nfetchCollectionListsWithLocalIdentifiers\nfetchCollectionListsWithType\nfetchCollectionsInCollectionList\nfetchCurrentUserRecordOperation\nfetchKeyAssetsInAssetCollection\nfetchLimit\nfetchMomentListsWithSubtype\nfetchMomentsInMomentList\nfetchMomentsWithOptions\nfetchNotificationChangesCompletionBlock\nfetchOffset\nfetchRecordChangesCompletionBlock\nfetchRecordWithID\nfetchRecordZoneWithID\nfetchRecordZonesCompletionBlock\nfetchRecordsCompletionBlock\nfetchRemindersMatchingPredicate\nfetchRequest\nfetchRequestFromTemplateWithName\nfetchRequestTemplateForName\nfetchRequestTemplatesByName\nfetchRequestWithEntityName\nfetchResultAfterChanges\nfetchResultBeforeChanges\nfetchSavedGamesWithCompletionHandler\nfetchSubscriptionCompletionBlock\nfetchSubscriptionWithID\nfetchTopLevelUserCollectionsWithOptions\nfetchUserRecordIDWithCompletionHandler\nfetchedObjects\nfieldBitMask\nfileAttributes\nfileAttributesAtPath\nfileAttributesToWriteToURL\nfileCreationDate\nfileDescriptor\nfileExistsAtPath\nfileExtensionHidden\nfileFormat\nfileGroupOwnerAccountID\nfileGroupOwnerAccountName\nfileHFSCreatorCode\nfileHFSTypeCode\nfileHandleForReading\nfileHandleForReadingAtPath\nfileHandleForReadingFromURL\nfileHandleForUpdatingAtPath\nfileHandleForUpdatingURL\nfileHandleForWriting\nfileHandleForWritingAtPath\nfileHandleForWritingToURL\nfileHandleWithNullDevice\nfileHandleWithStandardError\nfileHandleWithStandardInput\nfileHandleWithStandardOutput\nfileIsAppendOnly\nfileIsImmutable\nfileManager\nfileModificationDate\nfileNameExtensionForType\nfileOwnerAccountID\nfileOwnerAccountName\nfilePathURL\nfilePosixPermissions\nfilePresenters\nfileReferenceURL\nfileSize\nfileSystemAttributesAtPath\nfileSystemFileNumber\nfileSystemNumber\nfileSystemRepresentationWithPath\nfileType\nfileURL\nfileURLWithFileSystemRepresentation\nfileURLWithPath\nfileURLWithPathComponents\nfileWrapper\nfileWrapperFromRange\nfileWrappers\nfilename\nfiles\nfill\nfillBackgroundRectArray\nfillBuffer\nfillColor\nfillMode\nfillPath\nfillRule\nfillShader\nfillTexture\nfillWithBlendMode\nfilter\nfilterArrayFromSerializedXMP\nfilterNamesInCategories\nfilterNamesInCategory\nfilterParameters\nfilterPredicates\nfilterType\nfilterUsingPredicate\nfilterWithName\nfilteredArrayUsingPredicate\nfilteredOrderedSetUsingPredicate\nfilteredSetUsingPredicate\nfilteringMode\nfilters\nfinalFrameForViewController\nfinalLayoutAttributesForDisappearingDecorationElementOfKind\nfinalLayoutAttributesForDisappearingItemAtIndexPath\nfinalLayoutAttributesForDisappearingSupplementaryElementOfKind\nfinalResult\nfinalize\nfinalizeAnimatedBoundsChange\nfinalizeCollectionViewUpdates\nfinalizeLayoutTransition\nfindMatchForRequest\nfindPlayersForHostedMatchRequest\nfindPlayersForHostedRequest\nfinishCancelledRequest\nfinishContentEditingWithCompletionHandler\nfinishDecoding\nfinishEncoding\nfinishInteractiveTransition\nfinishLoading\nfinishLoadingWithError\nfinishLoadingWithResponse\nfinishMatchmakingForMatch\nfinishTasksAndInvalidate\nfinishTransaction\nfinishWithComposedVideoFrame\nfinishWithError\nfinishWriting\nfinishWritingWithCompletionHandler\nfinished\nfinishedHandlingError\nfinishedSelectedImage\nfinishedUnselectedImage\nfire\nfireDate\nfirmwareRevision\nfirstAttribute\nfirstDayOfTheWeek\nfirstIndex\nfirstItem\nfirstLineHeadIndent\nfirstMatchInString\nfirstMaterial\nfirstName\nfirstObject\nfirstObjectCommonWithArray\nfirstOtherButtonIndex\nfirstRectForRange\nfirstUnlaidCharacterIndex\nfirstUnlaidGlyphIndex\nfirstWeekday\nfixAttributesInRange\nfixedCoordinateSpace\nfixesAttributesLazily\nflashActive\nflashAvailable\nflashMode\nflashScrollIndicators\nflatness\nflattenedClone\nflipHorizontalWithDuration\nflipVerticalWithDuration\nfloatComponents\nfloatForKey\nfloatMatrix2Value\nfloatMatrix3Value\nfloatMatrix4Value\nfloatValue\nfloatVector2Value\nfloatVector3Value\nfloatVector4Value\nfloor\nfloorsAscended\nfloorsDescended\nfluidOunceImperialUnit\nfluidOunceUSUnit\nflush\nflushAndRemoveImage\nflushWithCompletionHandler\nfocalBlurRadius\nfocalDistance\nfocalSize\nfocusMode\nfocusPointOfInterest\nfocusPointOfInterestSupported\nfog\nfogColor\nfogDensityExponent\nfogEndDistance\nfogStartDistance\nfollowPath\nfont\nfontAttributes\nfontColor\nfontDescriptor\nfontDescriptorByAddingAttributes\nfontDescriptorWithFace\nfontDescriptorWithFamily\nfontDescriptorWithFontAttributes\nfontDescriptorWithMatrix\nfontDescriptorWithName\nfontDescriptorWithSize\nfontDescriptorWithSymbolicTraits\nfontName\nfontNamesForFamilyName\nfontSize\nfontWithDescriptor\nfontWithName\nfontWithSize\nfootUnit\nfooterHeight\nfooterReferenceSize\nfooterViewForSection\nforFoodEnergyUse\nforMainFrame\nforMainFrameOnly\nforPersonHeightUse\nforPersonMassUse\nforegroundColor\nformIntersectionWithCharacterSet\nformUnionWithCharacterSet\nformat\nformatDescription\nformatDescriptions\nformatIdentifier\nformatVersion\nformatWidth\nformats\nformattedValue\nformatterBehavior\nformattingContext\nforwardInvocation\nforwardItem\nforwardList\nforwardPlaybackEndTime\nfractionCompleted\nfractionOfDistanceThroughGlyphForPoint\nfragment\nfragmentArguments\nfragmentFunction\nfragmentShader\nframe\nframeCapacity\nframeDuration\nframeForAlignmentRect\nframeForDictationResultPlaceholder\nframeInfo\nframeInterval\nframeLength\nframeOfPresentedViewInContainerView\nframePosition\nframebufferOnly\nframesDisplayed\nframesPerSecond\nfrequency\nfresnelExponent\nfriction\nfrictionSlip\nfrictionTorque\nfriendRequestComposeViewControllerDidFinish\nfriends\nfromValue\nfrontFaceStencil\nfullResolutionImage\nfullScreenImage\nfullSizeImageOrientation\nfullSizeImageURL\nfullscreen\nfunction\nfunctionName\nfunctionNames\nfunctionType\nfunctionWithControlPoints\nfunctionWithName\ngain\ngameCenterDelegate\ngameCenterViewControllerDidFinish\ngamepad\ngapBetweenPages\ngathering\ngeneralPasteboard\ngenerateCGImagesAsynchronouslyForTimes\ngenerateIdentityVerificationSignatureWithCompletionHandler\ngenerateMipmapsForTexture\ngeneratesCalendarDates\ngeneratesDecimalNumbers\ngeneratesDeviceOrientationNotifications\ngenre\ngenrePersistentID\ngenresQuery\ngeoLocation\ngeocodeAddressDictionary\ngeocodeAddressString\ngeocoding\ngeodesic\ngeometry\ngeometryElementAtIndex\ngeometryElementCount\ngeometryElementWithData\ngeometryFlipped\ngeometryIndex\ngeometrySourceWithData\ngeometrySourceWithNormals\ngeometrySourceWithTextureCoordinates\ngeometrySourceWithVertices\ngeometrySourcesForSemantic\ngeometryWithSources\ngestureRecognizer\ngestureRecognizerShouldBegin\ngestureRecognizers\ngetArgument\ngetArgumentTypeAtIndex\ngetBoundStreamsWithBufferSize\ngetBoundingBoxMin\ngetBoundingSphereCenter\ngetBuffer\ngetBytes\ngetCFRunLoop\ngetCString\ngetCachedResponseForDataTask\ngetCharacters\ngetContinuationStreamsWithCompletionHandler\ngetControlPointAtIndex\ngetCookiesForTask\ngetCoordinates\ngetCredentialsForProtectionSpace\ngetCropRectangleRampForTime\ngetDefaultCredentialForProtectionSpace\ngetDistanceFrom\ngetEra\ngetFileSystemRepresentation\ngetFirstUnlaidCharacterIndex\ngetGlyphsInRange\ngetHour\ngetHue\ngetIndexes\ngetInputStream\ngetKeyframeTimeForIndex\ngetKeyframeValueForIndex\ngetLineDash\ngetLineFragmentInsertionPointsForCharacterAtIndex\ngetLineStart\ngetNonlocalVersionsOfItemAtURL\ngetObjectValue\ngetObjects\ngetOpacityRampForTime\ngetParagraphStart\ngetPromisedItemResourceValue\ngetRed\ngetRelationship\ngetResourceValue\ngetReturnValue\ngetStreamsToHost\ngetStreamsToHostWithName\ngetTasksWithCompletionHandler\ngetTransformRampForTime\ngetUUIDBytes\ngetValue\ngetVolumeRampForTime\ngetWhite\ngimbalLockEnabled\ngl\nglext\nglkView\nglkViewController\nglkViewControllerUpdate\nglobalGain\nglobalObject\nglobalTuning\ngloballyUniqueString\nglowWidth\ngltypes\nglyphAtIndex\nglyphIndexForCharacterAtIndex\nglyphIndexForPoint\nglyphRangeForBoundingRect\nglyphRangeForBoundingRectWithoutAdditionalLayout\nglyphRangeForCharacterRange\nglyphRangeForTextContainer\ngoBack\ngoForward\ngoToBackForwardListItem\ngobo\ngramUnit\ngramUnitWithMetricPrefix\ngrammarCheckingResultWithRange\ngrammarDetails\ngravity\ngravityDirection\ngrayColor\ngrayWorldDeviceWhiteBalanceGains\ngreen\ngreenColor\ngreenRange\ngreenSpeed\ngregorianStartDate\ngroup\ngroupForURL\ngroupIdentifier\ngroupTableViewBackgroundColor\ngroupedResults\ngroupingAttributes\ngroupingLevel\ngroupingSeparator\ngroupingSize\ngroupingType\ngroupsByEvent\ngssapi\ngssapi_apple\ngssapi_krb5\ngssapi_oid\ngssapi_protos\ngssapi_spnego\nguessesForWordRange\nguidedAccessRestrictionIdentifiers\nguidedAccessRestrictionWithIdentifier\ngyroActive\ngyroAvailable\ngyroData\ngyroUpdateInterval\nhalfExtent\nhandleActionWithIdentifier\nhandleBindingOfSymbol\nhandleError\nhandleEvent\nhandleFailureInFunction\nhandleFailureInMethod\nhandleInviteFromGameCenter\nhandleMachMessage\nhandleMatchEnded\nhandlePortMessage\nhandleQueryWithUnboundKey\nhandleTakeValue\nhandleTurnEventForMatch\nhandleUnbindingOfSymbol\nhandleUserActivity\nhardwareRevision\nhasAction\nhasActions\nhasAlarms\nhasAmbiguousLayout\nhasAttendees\nhasBytesAvailable\nhasChanges\nhasFaceAngle\nhasFaultForRelationshipNamed\nhasFlash\nhasIncrementalChanges\nhasItemConformingToTypeIdentifier\nhasLearnedWord\nhasLeftEyePosition\nhasLocalContents\nhasMediaCharacteristic\nhasMediaType\nhasMemberInPlane\nhasMouthPosition\nhasMoves\nhasNewPixelBufferForItemTime\nhasNonContiguousLayout\nhasNotes\nhasOnlySecureContent\nhasPassword\nhasPrefix\nhasProperty\nhasProtectedContent\nhasRecurrenceRules\nhasRightEyePosition\nhasRollAngle\nhasSameAddressAs\nhasSmile\nhasSpaceAvailable\nhasSuffix\nhasText\nhasThousandSeparators\nhasThumbnail\nhasTorch\nhasTrackingFrameCount\nhasTrackingID\nhasUnsavedChanges\nhasYawAngle\nhash\nhashFunction\nhashTableWithOptions\nhashTableWithWeakObjects\nhavingPredicate\nheadIndent\nheaderHeight\nheaderReferenceSize\nheaderViewForSection\nheading\nheadingAccuracy\nheadingAvailable\nheadingFilter\nheadingOrientation\nheight\nheightSegmentCount\nheightTracksTextView\nhelpAnchor\nhidden\nhide\nhidesAccessoryWhenEditing\nhidesBackButton\nhidesBarsOnSwipe\nhidesBarsOnTap\nhidesBarsWhenKeyboardAppears\nhidesBarsWhenVerticallyCompact\nhidesBottomBarWhenPushed\nhidesForSinglePage\nhidesNavigationBarDuringPresentation\nhidesWhenStopped\nhighQualityRendering\nhighResolutionStillImageDimensions\nhighResolutionStillImageOutputEnabled\nhighlighted\nhighlightedAnimationImages\nhighlightedImage\nhighlightedTextColor\nhitTest\nhitTestWithSegmentFromPoint\nhome\nhomeDidUpdateName\nhomeManager\nhomeManagerDidUpdateHomes\nhomeManagerDidUpdatePrimaryHome\nhomes\nhorizontalAccuracy\nhorizontalAlignmentMode\nhorizontalSizeClass\nhost\nhostName\nhostTime\nhostTimeForSeconds\nhostTimeValid\nhostWithName\nhosted\nhour\nhourUnit\nhyphenationFactor\niAd\niPodMusicPlayer\nicon\nicons\nidGLKViewControllerDelegate>\nidGLKViewDelegate>\nidentifier\nidentifierForKey\nidentifierForNewStoreAtURL\nidentifierForVendor\nidentifiersForBridgedAccessories\nidentifiersOfEntriesWithClass\nidentifyWithCompletionHandler\nidentity\nidentityData\nidentityDataPassword\nidentityReference\nidleDuration\nidleDurationVariation\nidleTimerDisabled\nidx\nignoreSnapshotOnNextApplicationLaunch\nignoreTouch\nignoreWord\nignoredWords\nignoresSiblingOrder\nillegalCharacterSet\nimage\nimageAsset\nimageByApplyingFilter\nimageByApplyingOrientation\nimageByApplyingTransform\nimageByClampingToExtent\nimageByCompositingOverImage\nimageByCroppingToRect\nimageCropRect\nimageEdgeInsets\nimageForBounds\nimageForSearchBarIcon\nimageForSegmentAtIndex\nimageForState\nimageInsets\nimageNamed\nimageOrientation\nimagePickerController\nimagePickerControllerDidCancel\nimageRectForContentRect\nimageSequenceAnimationMode\nimageSequenceColumnCount\nimageSequenceFrameRate\nimageSequenceFrameRateVariation\nimageSequenceInitialFrame\nimageSequenceInitialFrameVariation\nimageSequenceRowCount\nimageTransformForOrientation\nimageView\nimageWithAlignmentRectInsets\nimageWithBitmapData\nimageWithCGImage\nimageWithCGLayer\nimageWithCIImage\nimageWithCVImageBuffer\nimageWithCVPixelBuffer\nimageWithColor\nimageWithContentsOfFile\nimageWithContentsOfURL\nimageWithData\nimageWithIOSurface\nimageWithRenderingMode\nimageWithSize\nimageWithTexture\nimageWithTraitCollection\nimages\nimmutable\ninParentHierarchy\ninPort\ninUseByAnotherApplication\ninchUnit\nincludeAllBurstAssets\nincludeHiddenAssets\nincludedServices\nincludesActualByteCount\nincludesApproximationPhrase\nincludesCount\nincludesPeerToPeer\nincludesPendingChanges\nincludesPropertyValues\nincludesSubentities\nincludesTimeRemainingPhrase\nincludesUnit\nincompleteAchievementImage\nincreaseLengthBy\nincreaseSize\nincrementImageForState\nindentationLevel\nindentationWidth\nindeterminate\nindex\nindexAtPosition\nindexGreaterThanIndex\nindexGreaterThanOrEqualToIndex\nindexInRange\nindexLessThanIndex\nindexLessThanOrEqualToIndex\nindexOfAccessibilityElement\nindexOfNowPlayingItem\nindexOfObject\nindexOfObjectAtIndexes\nindexOfObjectIdenticalTo\nindexOfObjectPassingTest\nindexOfObjectWithOptions\nindexOfResult\nindexPassingTest\nindexPath\nindexPathAfterUpdate\nindexPathBeforeUpdate\nindexPathByAddingIndex\nindexPathByRemovingLastIndex\nindexPathForCell\nindexPathForElementWithModelIdentifier\nindexPathForItem\nindexPathForItemAtPoint\nindexPathForObject\nindexPathForRow\nindexPathForRowAtPoint\nindexPathForSelectedRow\nindexPathWithIndex\nindexPathWithIndexes\nindexPathsForRowsInRect\nindexPathsForSelectedItems\nindexPathsForSelectedRows\nindexPathsForVisibleItems\nindexPathsForVisibleRows\nindexPathsToDeleteForDecorationViewOfKind\nindexPathsToDeleteForSupplementaryViewOfKind\nindexPathsToInsertForDecorationViewOfKind\nindexPathsToInsertForSupplementaryViewOfKind\nindexSet\nindexSetWithIndex\nindexSetWithIndexesInRange\nindexTitle\nindexWithOptions\nindexed\nindexedBySpotlight\nindexesInRange\nindexesOfObjectsAtIndexes\nindexesOfObjectsPassingTest\nindexesOfObjectsWithOptions\nindexesPassingTest\nindexesWithOptions\nindicatedBitrate\nindicatorStyle\ninferredMappingModelForSourceModel\ninfiniteRegion\ninfluenceFactor\ninfoDictionary\ninit\ninitByResolvingBookmarkData\ninitCircularRegionWithCenter\ninitDirectoryWithFileWrappers\ninitFileURLWithFileSystemRepresentation\ninitFileURLWithPath\ninitForReading\ninitForReadingWithData\ninitForWriting\ninitForWritingWithMutableData\ninitRecurrenceWithFrequency\ninitRegularFileWithContents\ninitRemoteWithProtocolFamily\ninitRemoteWithTCPPort\ninitStandardFormatWithSampleRate\ninitSymbolicLinkWithDestination\ninitSymbolicLinkWithDestinationURL\ninitToBuffer\ninitToFileAtPath\ninitToMemory\ninitWithAPI\ninitWithAVPlayer\ninitWithAccessibilityContainer\ninitWithAccessory\ninitWithAccountType\ninitWithActivityIndicatorStyle\ninitWithActivityItems\ninitWithActivityType\ninitWithAdType\ninitWithAnnotation\ninitWithArray\ninitWithAsset\ninitWithAssetReaderTrackOutput\ninitWithAssetWriterInput\ninitWithAttributedString\ninitWithAttributedText\ninitWithAudioComponentDescription\ninitWithAudioTimeStamp\ninitWithAudioTracks\ninitWithAuthenticationChallenge\ninitWithBadgeValue\ninitWithBarButtonSystemItem\ninitWithBase64EncodedData\ninitWithBase64EncodedString\ninitWithBase64Encoding\ninitWithBitmapData\ninitWithBool\ninitWithBrowser\ninitWithBytes\ninitWithBytesNoCopy\ninitWithCGAffineTransform\ninitWithCGColor\ninitWithCGImage\ninitWithCGLayer\ninitWithCGPoint\ninitWithCGRect\ninitWithCIColor\ninitWithCIImage\ninitWithCString\ninitWithCStringNoCopy\ninitWithCVImageBuffer\ninitWithCVPixelBuffer\ninitWithCalendarIdentifier\ninitWithCapacity\ninitWithCategory\ninitWithCenter\ninitWithChar\ninitWithCharacteristic\ninitWithCharacters\ninitWithCharactersNoCopy\ninitWithCircle\ninitWithCoder\ninitWithCollectionViewLayout\ninitWithColor\ninitWithCommonFormat\ninitWithConcurrencyType\ninitWithCondition\ninitWithContentEditingInput\ninitWithContentURL\ninitWithContentViewController\ninitWithContentsOfFile\ninitWithContentsOfMappedFile\ninitWithContentsOfURL\ninitWithControlPoints\ninitWithController\ninitWithCoordinate\ninitWithCurrentLayout\ninitWithCursor\ninitWithCustomView\ninitWithData\ninitWithDateFormat\ninitWithDayOfTheWeek\ninitWithDecimal\ninitWithDelegate\ninitWithDevice\ninitWithDictionary\ninitWithDisplayID\ninitWithDisplayName\ninitWithDocumentTypes\ninitWithDomain\ninitWithDominantScript\ninitWithDouble\ninitWithEffect\ninitWithEmailAddresses\ninitWithEntity\ninitWithEntityName\ninitWithExpressionType\ninitWithFetchRequest\ninitWithFileAtPath\ninitWithFileDescriptor\ninitWithFilePresenter\ninitWithFileURL\ninitWithFilterPredicates\ninitWithFireDate\ninitWithFloat\ninitWithFontAttributes\ninitWithFontNamed\ninitWithFormat\ninitWithFormatIdentifier\ninitWithFrame\ninitWithHost\ninitWithHostTime\ninitWithHue\ninitWithIOSurface\ninitWithIdentifier\ninitWithIdentifiers\ninitWithIdentity\ninitWithImage\ninitWithImageNamed\ninitWithIndex\ninitWithIndexSet\ninitWithIndexes\ninitWithIndexesInRange\ninitWithInputPort\ninitWithInputPorts\ninitWithInputs\ninitWithInsertedObjects\ninitWithInt\ninitWithInteger\ninitWithInvite\ninitWithInvocation\ninitWithItem\ninitWithItems\ninitWithKey\ninitWithKeyOptions\ninitWithKeyPath\ninitWithKeyPointerFunctions\ninitWithKeyframeValues\ninitWithLatitude\ninitWithLayer\ninitWithLayout\ninitWithLayoutTag\ninitWithLeaderboardIdentifier\ninitWithLeftExpression\ninitWithLength\ninitWithLocaleIdentifier\ninitWithLong\ninitWithLongLong\ninitWithLowerAngleLimit\ninitWithLowerLimit\ninitWithMachPort\ninitWithManagedObjectModel\ninitWithMantissa\ninitWithMapView\ninitWithMarkupText\ninitWithMatchDomains\ninitWithMatchRequest\ninitWithMediaSubtypesForNativeRepresentation\ninitWithMediaType\ninitWithMediaTypes\ninitWithMemoryCapacity\ninitWithMergeType\ninitWithName\ninitWithNavigationBarClass\ninitWithNibName\ninitWithNotificationCenter\ninitWithNotificationIDsToMarkRead\ninitWithNumberOfBands\ninitWithOAuth2Token\ninitWithOAuthToken\ninitWithObject\ninitWithObjectID\ninitWithObjects\ninitWithObjectsAndKeys\ninitWithOptions\ninitWithOrderedSet\ninitWithOverlay\ninitWithPCMFormat\ninitWithParent\ninitWithPass\ninitWithPasses\ninitWithPath\ninitWithPattern\ninitWithPatternImage\ninitWithPaymentRequest\ninitWithPeer\ninitWithPersistentStoreCoordinator\ninitWithPixelBufferAttributes\ninitWithPlaceholderForCreatedAsset\ninitWithPlaceholderItem\ninitWithPlacemark\ninitWithPlayerIDs\ninitWithPlayerItem\ninitWithPlayers\ninitWithPointerFunctions\ninitWithPolygon\ninitWithPolyline\ninitWithPreferredLanguages\ninitWithPresentedViewController\ninitWithPreviousServerChangeToken\ninitWithProductIdentifiers\ninitWithProgressViewStyle\ninitWithProperties\ninitWithProtectionSpace\ninitWithProtocolFamily\ninitWithProximityUUID\ninitWithProxyHost\ninitWithQuantityType\ninitWithQuery\ninitWithQueue\ninitWithRadius\ninitWithReceiptProperties\ninitWithRecord\ninitWithRecordID\ninitWithRecordIDs\ninitWithRecordName\ninitWithRecordType\ninitWithRecordZoneID\ninitWithRecordZoneIDs\ninitWithRecordZonesToSave\ninitWithRecordsToSave\ninitWithRed\ninitWithReferenceView\ninitWithRequest\ninitWithResponse\ninitWithReuseIdentifier\ninitWithRootViewController\ninitWithRoundingMode\ninitWithSampleBuffer\ninitWithSampleTime\ninitWithSampleType\ninitWithScheme\ninitWithSearchBar\ninitWithSearchResultsController\ninitWithSelectionStyle\ninitWithSerializedRepresentation\ninitWithServiceType\ninitWithSession\ninitWithSessionID\ninitWithSessionWithNoConnection\ninitWithSet\ninitWithSettings\ninitWithShareContext\ninitWithSharegroup\ninitWithShort\ninitWithSize\ninitWithSnapshotData\ninitWithSource\ninitWithSourceModel\ninitWithStream\ninitWithStreamDescription\ninitWithString\ninitWithStyle\ninitWithSubscriptionIDs\ninitWithSubscriptionsToSave\ninitWithSuiteName\ninitWithTCPPort\ninitWithTabBarSystemItem\ninitWithTagSchemes\ninitWithTarget\ninitWithTask\ninitWithTerm\ninitWithText\ninitWithTextAlignment\ninitWithTextInput\ninitWithTextMarkupAttributes\ninitWithTexture\ninitWithTileOverlay\ninitWithTimeInterval\ninitWithTimeIntervalSince1970\ninitWithTimeIntervalSinceNow\ninitWithTimeIntervalSinceReferenceDate\ninitWithTimeRange\ninitWithTitle\ninitWithTrack\ninitWithTransitionStyle\ninitWithTrust\ninitWithType\ninitWithTypes\ninitWithURL\ninitWithURLTemplate\ninitWithUTF8String\ninitWithUUIDBytes\ninitWithUUIDString\ninitWithUnsignedChar\ninitWithUnsignedInt\ninitWithUnsignedInteger\ninitWithUnsignedLong\ninitWithUnsignedLongLong\ninitWithUnsignedShort\ninitWithUser\ninitWithValue\ninitWithValues\ninitWithVideoFileNamed\ninitWithVideoTracks\ninitWithVideoURL\ninitWithViewportSize\ninitWithVirtualMachine\ninitWithWhite\ninitWithX\ninitWithZoneID\ninitWithZoneName\ninitialFrameForViewController\ninitialLayoutAttributesForAppearingDecorationElementOfKind\ninitialLayoutAttributesForAppearingItemAtIndexPath\ninitialLayoutAttributesForAppearingSupplementaryElementOfKind\ninitialPlaybackTime\ninitialResultsHandler\ninitialURL\ninitiallyInteractive\ninjectionTime\ninlandWater\ninnerRadius\ninput\ninputAccessoryView\ninputAccessoryViewController\ninputAvailable\ninputBias\ninputDataSource\ninputDataSources\ninputDelegate\ninputFormatForBus\ninputGain\ninputGainSettable\ninputGroups\ninputImageMaximumSize\ninputIsAvailable\ninputIsAvailableChanged\ninputItems\ninputKeys\ninputLatency\ninputMeterLevel\ninputMeteringEnabled\ninputMode\ninputNode\ninputNumberOfChannels\ninputOrigin\ninputParameters\ninputPorts\ninputProperty\ninputScale\ninputSourceID\ninputSources\ninputStream\ninputStreamWithData\ninputStreamWithFileAtPath\ninputStreamWithURL\ninputView\ninputViewController\ninputViewStyle\ninputs\ninsertAssets\ninsertAttributedString\ninsertChild\ninsertChildCollections\ninsertChildNode\ninsertDebugCaptureBoundary\ninsertDebugSignpost\ninsertDictationResult\ninsertDictationResultPlaceholder\ninsertEmptyTimeRange\ninsertItem\ninsertItemsAtIndexPaths\ninsertMaterial\ninsertNewObjectForEntityForName\ninsertObject\ninsertObjects\ninsertOverlay\ninsertPointer\ninsertRowsAtIndexPaths\ninsertRowsAtIndexes\ninsertSections\ninsertSegmentWithImage\ninsertSegmentWithTitle\ninsertString\ninsertSublayer\ninsertSubview\ninsertText\ninsertTextContainer\ninsertTimeRange\ninsertTimeRanges\ninserted\ninsertedIndexes\ninsertedObjects\ninstallTapOnBus\ninstanceAlphaOffset\ninstanceBlueOffset\ninstanceColor\ninstanceCount\ninstanceDelay\ninstanceGreenOffset\ninstanceRedOffset\ninstanceTransform\ninstantiateInitialViewController\ninstantiateViewControllerWithIdentifier\ninstantiateWithOwner\ninstructions\nint\nintValue\nintegerForKey\nintegerValue\nintegrityAlgorithm\nintensity\ninteractionControllerForDismissal\ninteractionControllerForPresentation\ninteractionControllerWithURL\ninteractivePopGestureRecognizer\ninterfaceOrientation\ninterfaceProperty\ninterfaceTypeMatch\ninteriorPolygons\ninterleaved\ninternationalCurrencySymbol\ninterpolationMode\ninterrupted\nintersectHashTable\nintersectOrderedSet\nintersectSet\nintersectsHashTable\nintersectsIndexesInRange\nintersectsMapRect\nintersectsNode\nintersectsOrderedSet\nintersectsSet\ninterstitialAd\ninterstitialAdActionDidFinish\ninterstitialAdActionShouldBegin\ninterstitialAdDidLoad\ninterstitialAdDidUnload\ninterstitialAdWillLoad\ninterstitialPresentationPolicy\ninterval\nintervalComponents\nintrinsicContentSize\ninvalidProductIdentifiers\ninvalidate\ninvalidateAndCancel\ninvalidateAttributesInRange\ninvalidateDataSourceCounts\ninvalidateDecorationElementsOfKind\ninvalidateDisplayForCharacterRange\ninvalidateDisplayForGlyphRange\ninvalidateEverything\ninvalidateFlowLayoutAttributes\ninvalidateFlowLayoutDelegateMetrics\ninvalidateGlyphsForCharacterRange\ninvalidateIntrinsicContentSize\ninvalidateItemsAtIndexPaths\ninvalidateLayout\ninvalidateLayoutForCharacterRange\ninvalidateLayoutWithContext\ninvalidatePath\ninvalidateSupplementaryElementsOfKind\ninvalidateUserActivity\ninvalidatedDecorationIndexPaths\ninvalidatedItemIndexPaths\ninvalidatedSupplementaryIndexPaths\ninvalidationContextClass\ninvalidationContextForBoundsChange\ninvalidationContextForPreferredLayoutAttributes\ninverseKinematicsConstraintWithChainRootNode\ninverseRegion\ninverseRelationship\ninvert\ninvertedSet\ninviteHandler\ninviteMessage\ninvitePeer\ninviteeResponseHandler\ninviter\ninvocation\ninvocationWithMethodSignature\ninvoke\ninvokeMethod\ninvokeWithTarget\nis\nisAccessibilityElement\nisActive\nisActivityAvailable\nisAdvertising\nisAlphaToCoverageEnabled\nisAlphaToOneEnabled\nisAnalog\nisAnimated\nisAnimating\nisAnimationForKeyPaused\nisAntialiased\nisAtEnd\nisAttachedToDevice\nisAvailableForServiceType\nisBeingDismissed\nisBeingPresented\nisBlendingEnabled\nisBoolean\nisBroadcasted\nisCameraDeviceAvailable\nisCancelled\nisCloudItem\nisCompatibleWithUnit\nisCompilation\nisConfiguration\nisConnected\nisContainer\nisContentDiscarded\nisContentValid\nisCurrentLocation\nisCurrentUser\nisCustomizing\nisDate\nisDateInToday\nisDateInTomorrow\nisDateInWeekend\nisDateInYesterday\nisDaylightSavingTimeForDate\nisDeletableFileAtPath\nisDescendantOfView\nisDetached\nisDirectionsRequestURL\nisDistanceAvailable\nisDynamic\nisEnabled\nisEnabledForSegmentAtIndex\nisEqual\nisEqualFunction\nisEqualToArray\nisEqualToAttributedString\nisEqualToData\nisEqualToDate\nisEqualToDictionary\nisEqualToHashTable\nisEqualToIndexSet\nisEqualToNode\nisEqualToNumber\nisEqualToObject\nisEqualToOrderedSet\nisEqualToSet\nisEqualToString\nisEqualToTimeZone\nisEqualToValue\nisEqualWithTypeCoercionToObject\nisExclusive\nisExecutableFileAtPath\nisExposureModeSupported\nisFileReferenceURL\nisFinished\nisFirstResponder\nisFlashAvailableForCameraDevice\nisFlashModeSupported\nisFloorCountingAvailable\nisFocusModeSupported\nisForFoodEnergyUse\nisForPersonHeightUse\nisForPersonMassUse\nisFramebufferOnly\nisFriend\nisHealthDataAvailable\nisHidden\nisHiddenassignreadonlyNS_NONATOMIC_IOSONLY\nisIgnoringInteractionEvents\nisInstanceOf\nisInteractive\nisKindOfEntity\nisMainThread\nisMonitoringAvailableForClass\nisMovingFromParentViewController\nisMovingToParentViewController\nisMultiThreaded\nisNegative\nisNetworkAccessAllowed\nisNew\nisNodeInsideFrustum\nisNotifying\nisNull\nisNumber\nisObject\nisOneway\nisOperatingSystemAtLeastVersion\nisPartialStringValid\nisPassLibraryAvailable\nisPaused\nisPaymentPassActivationAvailable\nisPlayable\nisPlayableExtendedMIMEType\nisPosition\nisPreparedToPlay\nisPressed\nisPrimary\nisPrintingAvailable\nisProxy\nisPruned\nisPublicDatabase\nisRangingAvailable\nisRasterizationEnabled\nisReadableFileAtPath\nisReadyForDisplay\nisRegisteredForRemoteNotifications\nisRelativeAltitudeAvailable\nisReplayableassignreadonly\nisResting\nisRunning\nisShowingAppNames\nisSourceTypeAvailable\nisStepCountingAvailable\nisString\nisSubsetOfHashTable\nisSubsetOfOrderedSet\nisSubsetOfSet\nisSupersetOfSet\nisSupportedAttachmentUTI\nisTorchModeSupported\nisUbiquitousItemAtURL\nisUndefined\nisValidDateInCalendar\nisValidForAsset\nisValidGlyphIndex\nisValidJSONObject\nisVertical\nisVideoStabilizationModeSupported\nisViewLoaded\nisVoIPAllowed\nisWhiteBalanceModeSupported\nisWritableFileAtPath\nisoCountryCode\nissue\nissueChallengeToPlayers\nissueDate\nissueWithName\nissues\nissuingPlayer\nissuingPlayerID\nitalicSystemFontOfSize\nitem\nitemAtIndex\nitemAtURL\nitemChangedAtURL\nitemPositioning\nitemSections\nitemSetWithPasteboardTypes\nitemSize\nitemSpacing\nitemTimeForCVTimeStamp\nitemTimeForHostTime\nitemTimeForMachAbsoluteTime\nitemWidth\nitems\nitemsInRect\njavaEnabled\njavaScriptActionWithScript\njavaScriptCanOpenWindowsAutomatically\njavaScriptEnabled\njitteringEnabled\njobName\njointWithBody\njointWithBodyA\njoints\njouleUnit\njouleUnitWithMetricPrefix\njpegStillImageNSDataRepresentation\nkelvinUnit\nkernelWithString\nkernelsWithString\nkey\nkeyCommandWithInput\nkeyCommands\nkeyEnumerator\nkeyForFileWrapper\nkeyForIdentifier\nkeyPath\nkeyPathsAndRelativeValuesForViewerOffset\nkeyPathsForValuesAffectingValueForKey\nkeyPointerFunctions\nkeySpace\nkeySpaceForIdentifier\nkeyTimes\nkeyWindow\nkeyboardAppearance\nkeyboardDismissMode\nkeyboardDisplayRequiresUserAction\nkeyboardType\nkeysOfEntriesPassingTest\nkeysOfEntriesWithOptions\nkeysSortedByValueUsingComparator\nkeysSortedByValueUsingSelector\nkeysSortedByValueWithOptions\nkeyspace\nkilocalorieUnit\nkind\nkinematicBody\nknownTimeZoneNames\nlabel\nlabelColor\nlabelFontSize\nlabelNodeWithFontNamed\nlabelNodeWithText\nlandscapeImagePhone\nlandscapeImagePhoneInsets\nlanguage\nlanguageCode\nlanguageMap\nlanguagesForScript\nlastFireDate\nlastIndex\nlastModifiedDate\nlastModifiedUserRecordID\nlastName\nlastObject\nlastPathComponent\nlastPlayedDate\nlastRenderTime\nlastReportedDate\nlastTurnDate\nlaterDate\nlatitude\nlayer\nlayerClass\nlayerInstructions\nlayerWithSession\nlayerWithSessionWithNoConnection\nlayoutAttributesClass\nlayoutAttributesForCellAtIndexPath\nlayoutAttributesForCellWithIndexPath\nlayoutAttributesForDecorationViewOfKind\nlayoutAttributesForElementsInRect\nlayoutAttributesForItemAtIndexPath\nlayoutAttributesForSupplementaryElementOfKind\nlayoutAttributesForSupplementaryViewOfKind\nlayoutIfNeeded\nlayoutManager\nlayoutManagerDidInvalidateLayout\nlayoutManagers\nlayoutMargins\nlayoutMarginsDidChange\nlayoutOrientation\nlayoutSublayers\nlayoutSublayersOfLayer\nlayoutSubviews\nlayoutTag\nlayoutWithLayout\nlayoutWithLayoutTag\nlayouts\nleaderboardCategory\nleaderboardDelegate\nleaderboardIdentifier\nleaderboardTimeScope\nleaderboardViewControllerDidFinish\nleading\nleapMonth\nlearnWord\nleft\nleftBarButtonItem\nleftBarButtonItems\nleftCalloutAccessoryView\nleftCalloutOffset\nleftCapWidth\nleftExpression\nleftEyeClosed\nleftEyePosition\nleftItemsSupplementBackButton\nleftShoulder\nleftThumbstick\nleftTrigger\nleftView\nleftViewMode\nleftViewRectForBounds\nlegibleOutput\nlength\nlengthFormatterUnitFromUnit\nlengthOfBytesUsingEncoding\nlengthSegmentCount\nlenient\nlensAperture\nlensPosition\nletterCharacterSet\nlevel\nlevelOfDetailWithGeometry\nlevelsOfDetail\nlevelsOfDetailBias\nlevelsOfUndo\nlibAVFAudio\nlibAudioDSP\nlibBLAS\nlibCGCorePDF\nlibCGFreetype\nlibCGInterfaces\nlibCGVolute\nlibCGXType\nlibCLRendererStubs\nlibCMSBuiltin\nlibCMaps\nlibCVMSPluginSupport\nlibCoreFSCache\nlibCoreVMClient\nlibFontStreams\nlibGFXShared\nlibGLImage\nlibGLProgrammability\nlibGLVMPlugin\nlibJBIG2\nlibLAPACK\nlibLLVMContainer\nlibLinearAlgebra\nlibPDFRIP\nlibRIP\nlibvDSP\nlibvMisc\nlifetime\nlifetimeMinutes\nlifetimeRange\nlight\nlight0\nlight0light1light2\nlightColor\nlightGrayColor\nlightModelAmbientColor\nlightModelTwoSided\nlightTextColor\nlightingBitMask\nlightingEnabled\nlightingModelName\nlightingType\nlikeCommand\nlimit\nlimitDateForMode\nlimits\nlineBreakMode\nlineCap\nlineCapStyle\nlineDashPattern\nlineDashPhase\nlineDirectionForLanguage\nlineFragmentPadding\nlineFragmentRectForGlyphAtIndex\nlineFragmentRectForProposedRect\nlineFragmentUsedRectForGlyphAtIndex\nlineHeight\nlineHeightMultiple\nlineJoin\nlineJoinStyle\nlineLength\nlineNumber\nlineRangeForRange\nlineSpacing\nlineWidth\nlinearDamping\nlinearGravityField\nlinearGravityFieldWithVector\nlinearVelocityForItem\nlinear_systems\nlinguisticTagsInRange\nlinkCheckingResultWithRange\nlinkItemAtPath\nlinkItemAtURL\nlinkPath\nlinkTextAttributes\nlinkedDevices\nlistenerAngularOrientation\nlistenerPosition\nlistenerVectorOrientation\nlitPerPixel\nliterUnit\nliterUnitWithMetricPrefix\nload\nloadAchievementDescriptionsWithCompletionHandler\nloadAchievementsWithCompletionHandler\nloadAction\nloadAndReturnError\nloadAudioFilesAtURLs\nloadAudioUnitPresetAtURL\nloadCategoriesWithCompletionHandler\nloadData\nloadDataWithCompletionHandler\nloadDefaultLeaderboardCategoryIDWithCompletionHandler\nloadDefaultLeaderboardIdentifierWithCompletionHandler\nloadFactoryPreset\nloadFactoryReverbPreset\nloadFriendPlayersWithCompletionHandler\nloadFriendsWithCompletionHandler\nloadFromContents\nloadFromPreferencesWithCompletionHandler\nloadHTMLString\nloadImageWithCompletionHandler\nloadInstrumentAtURL\nloadItemForTypeIdentifier\nloadLeaderboardSetsWithCompletionHandler\nloadLeaderboardsWithCompletionHandler\nloadMatchDataWithCompletionHandler\nloadMatchWithID\nloadMatchesWithCompletionHandler\nloadMetadata\nloadNibNamed\nloadPhotoForSize\nloadPlayersForIdentifiers\nloadPreviewImageWithOptions\nloadPreviewView\nloadProductWithParameters\nloadReceivedChallengesWithCompletionHandler\nloadRequest\nloadResourceDataNotifyingClient\nloadScoresWithCompletionHandler\nloadSoundBankInstrumentAtURL\nloadState\nloadTileAtPath\nloadValuesAsynchronouslyForKeys\nloadView\nloaded\nloadedTimeRanges\nloading\nlocal\nlocalCoordinates\nlocalIdentifier\nlocalName\nlocalNormal\nlocalPlayer\nlocalPlayerDidCompleteChallenge\nlocalPlayerDidReceiveChallenge\nlocalPlayerDidSelectChallenge\nlocalPlayerScore\nlocalTimeZone\nlocale\nlocaleIdentifier\nlocaleIdentifierFromComponents\nlocaleIdentifierFromWindowsLocaleCode\nlocaleWithLocaleIdentifier\nlocality\nlocalizationDictionary\nlocalizations\nlocalizedAdditionalDescription\nlocalizedCaseInsensitiveCompare\nlocalizedCaseInsensitiveContainsString\nlocalizedCompare\nlocalizedDescription\nlocalizedDescriptionForFilterName\nlocalizedFailureReason\nlocalizedFallbackTitle\nlocalizedInfoDictionary\nlocalizedLocationNames\nlocalizedModel\nlocalizedName\nlocalizedNameForCategory\nlocalizedNameForFilterName\nlocalizedNameOfSavingComputer\nlocalizedNameOfStringEncoding\nlocalizedRecoveryOptions\nlocalizedRecoverySuggestion\nlocalizedReferenceDocumentationForFilterName\nlocalizedScannerWithString\nlocalizedShortTitle\nlocalizedStandardCompare\nlocalizedStringForKey\nlocalizedStringForStatusCode\nlocalizedStringFromDate\nlocalizedStringFromDateComponents\nlocalizedStringFromNumber\nlocalizedStringWithFormat\nlocalizedTitle\nlocalizedValueForFieldKey\nlocalizesFormat\nlocation\nlocationForGlyphAtIndex\nlocationInNode\nlocationInView\nlocationManager\nlocationManagerDidPauseLocationUpdates\nlocationManagerDidResumeLocationUpdates\nlocationManagerShouldDisplayHeadingCalibration\nlocationOfTouch\nlocationServicesEnabled\nlocationWithTitle\nlocations\nlock\nlockBeforeDate\nlockForConfiguration\nlockWhenCondition\nlockedObjects\nlocksAmbientWithDiffuse\nlodMaxClamp\nlodMinClamp\nlong\nlongCharacterIsMember\nlongEraSymbols\nlongLongForKey\nlongValue\nlongitude\nlookAtConstraintWithTarget\nlookupAdConversionDetails\nloops\nlossyCString\nlowLightBoostEnabled\nlowLightBoostSupported\nlowPassCutoff\nlowerAngleLimit\nlowerDistanceLimit\nlowerLimit\nlowercaseLetterCharacterSet\nlowercaseString\nlowercaseStringWithLocale\nlyrics\nm4v\nmacAddress\nmachPort\nmagFilter\nmagentaColor\nmagneticField\nmagneticHeading\nmagnetometerActive\nmagnetometerAvailable\nmagnetometerData\nmagnetometerUpdateInterval\nmagnification\nmagnificationFilter\nmagnitude\nmailComposeController\nmailComposeDelegate\nmain\nmainBundle\nmainDocumentURL\nmainFrame\nmainMixerNode\nmainQueue\nmainRunLoop\nmainScreen\nmainThread\nmajor\nmajorRadius\nmajorRadiusTolerance\nmakeAndModel\nmakeKeyAndVisible\nmakeKeyWindow\nmakeObjectsPerformSelector\nmakeSampleCursorAtFirstSampleInDecodeOrder\nmakeSampleCursorAtLastSampleInDecodeOrder\nmakeSampleCursorWithPresentationTimeStamp\nmakeTextWritingDirectionLeftToRight\nmakeTextWritingDirectionRightToLeft\nmanagedObjectClassName\nmanagedObjectContext\nmanagedObjectContextDidRegisterObjectsWithIDs\nmanagedObjectContextDidUnregisterObjectsWithIDs\nmanagedObjectIDForURIRepresentation\nmanagedObjectModel\nmanagedValueWithValue\nmanager\nmanualExposureSettingsWithExposureDuration\nmanufacturer\nmanufacturerDescription\nmanufacturerName\nmapItemForCurrentLocation\nmapItems\nmapPointForPoint\nmapRect\nmapRectForRect\nmapRectThatFits\nmapTableWithKeyOptions\nmapTableWithStrongToStrongObjects\nmapTableWithStrongToWeakObjects\nmapTableWithWeakToStrongObjects\nmapTableWithWeakToWeakObjects\nmapType\nmapView\nmapViewDidFailLoadingMap\nmapViewDidFinishLoadingMap\nmapViewDidFinishRenderingMap\nmapViewDidStopLocatingUser\nmapViewWillStartLoadingMap\nmapViewWillStartLocatingUser\nmapViewWillStartRenderingMap\nmappingChannel\nmappingModel\nmappingModelFromBundles\nmappingType\nmarkAsFinished\nmarkConfigurationAsFinal\nmarkCurrentPassAsFinished\nmarkNotificationsReadCompletionBlock\nmarkedTextRange\nmarkedTextStyle\nmarksOutputTrackAsEnabled\nmarkupText\nmask\nmaskNode\nmaskView\nmasksToBounds\nmass\nmassFormatterUnitFromUnit\nmasterGain\nmatch\nmatchData\nmatchDataMaximumSize\nmatchDomains\nmatchForInvite\nmatchID\nmatchOutcome\nmatchRequest\nmatchesContentsOfURL\nmatchesInString\nmatchingFontDescriptorsWithMandatoryKeys\nmatchmakerDelegate\nmatchmakerViewController\nmatchmakerViewControllerWasCancelled\nmaterial\nmaterialPropertyWithContents\nmaterialWithName\nmaterials\nmatrix\nmaxAllowedRotationAngleForJoint\nmaxAnisotropy\nmaxBiometryFailures\nmaxBracketedCaptureStillImageCount\nmaxConcurrentOperationCount\nmaxCount\nmaxDuration\nmaxExposureDuration\nmaxExposureTargetBias\nmaxFrameDuration\nmaxFrameRate\nmaxISO\nmaxLength\nmaxNumberOfRecipients\nmaxPlayers\nmaxPlayersAllowedForMatchOfType\nmaxRange\nmaxRecordedDuration\nmaxRecordedFileSize\nmaxTotalThreadsPerThreadgroup\nmaxWhiteBalanceGain\nmaximum\nmaximumAngularLimit\nmaximumContentHeight\nmaximumContentWidth\nmaximumDate\nmaximumDecimalNumber\nmaximumDistance\nmaximumFractionDigits\nmaximumInputNumberOfChannels\nmaximumIntegerDigits\nmaximumLengthOfBytesUsingEncoding\nmaximumLineHeight\nmaximumLinearLimit\nmaximumNumberOfLines\nmaximumNumberOfPeers\nmaximumNumberOfTouches\nmaximumOutputNumberOfChannels\nmaximumPoints\nmaximumPrimaryColumnWidth\nmaximumQuantity\nmaximumQuantityForSource\nmaximumRangeOfUnit\nmaximumRating\nmaximumRegionMonitoringDistance\nmaximumRelativeValue\nmaximumSignificantDigits\nmaximumSize\nmaximumSuspensionForce\nmaximumSuspensionTravel\nmaximumTrackImageForState\nmaximumTrackTintColor\nmaximumUnitCount\nmaximumUpdateValueLength\nmaximumValue\nmaximumValueImage\nmaximumValueImageRectForBounds\nmaximumVolumeSliderImageForState\nmaximumZ\nmaximumZoomScale\nmediaPicker\nmediaPickerDidCancel\nmediaPlaybackAllowsAirPlay\nmediaPlaybackRequiresUserAction\nmediaRequestsWWAN\nmediaSelectionCriteriaForMediaCharacteristic\nmediaSelectionGroupForMediaCharacteristic\nmediaSelectionOptionWithPropertyList\nmediaSelectionOptionsFromArray\nmediaSubTypes\nmediaSubtypes\nmediaTimeScale\nmediaType\nmediaTypes\nmember\nmemberByName\nmembers\nmemoryCapacity\nmenuBarVisibility\nmenuFrame\nmenuItems\nmenuVisible\nmerchantCapabilities\nmerchantIdentifier\nmergeChangesFromContextDidSaveNotification\nmergePolicy\nmergeType\nmergedModelFromBundles\nmessage\nmessageComposeDelegate\nmessageComposeViewController\nmessageString\nmetadata\nmetadataForFormat\nmetadataForPersistentStore\nmetadataForPersistentStoreOfType\nmetadataForPersistentStoreWithURL\nmetadataItem\nmetadataItemFilter\nmetadataItemFilterForSharing\nmetadataItemsFromArray\nmetadataObjectTypes\nmetadataObjectsCallbackQueue\nmetadataObjectsDelegate\nmetadataOutput\nmetadataOutputRectOfInterestForRect\nmetadataQuery\nmeterUnit\nmeterUnitWithMetricPrefix\nmeteringEnabled\nmethodReturnLength\nmethodSignature\nmethodSignatureForSelector\nmicrophoneMuted\nmigratePersistentStore\nmigrateStoreFromURL\nmigrationManagerClass\nmigrationProgress\nmileUnit\nmillimeterOfMercuryUnit\nminCount\nminExposureDuration\nminExposureTargetBias\nminFilter\nminFrameDuration\nminFrameRate\nminFreeDiskSpaceLimit\nminISO\nminPlayers\nminificationFilter\nminificationFilterBias\nminificationFiltermagnificationFilter\nminimum\nminimumAngularLimit\nminimumDate\nminimumDaysInFirstWeek\nminimumDecimalNumber\nminimumDistance\nminimumFontSize\nminimumFractionDigits\nminimumIntegerDigits\nminimumInteritemSpacing\nminimumLineHeight\nminimumLineSpacing\nminimumLinearLimit\nminimumNumberOfPeers\nminimumNumberOfTouches\nminimumPressDuration\nminimumPrimaryColumnWidth\nminimumQuantity\nminimumQuantityForSource\nminimumRadius\nminimumRangeOfUnit\nminimumRating\nminimumRelativeValue\nminimumScaleFactor\nminimumSignificantDigits\nminimumTrackImageForState\nminimumTrackTintColor\nminimumTrackingAdjustment\nminimumValue\nminimumValueImage\nminimumValueImageRectForBounds\nminimumVolumeSliderImageForState\nminimumZ\nminimumZoomScale\nminor\nminusHashTable\nminusOrderedSet\nminusSet\nminusSign\nminute\nminuteInterval\nminuteUnit\nmipFilter\nmipmapLevelCount\nmirrored\nmirroredScreen\nmirroringSupported\nmiterLimit\nmobileCountryCode\nmobileNetworkCode\nmodalInPopover\nmodalPresentationCapturesStatusBarAppearance\nmodalPresentationStyle\nmodalTransitionStyle\nmodalViewController\nmode\nmodel\nmodelByMergingModels\nmodelConfiguration\nmodelID\nmodelIdentifierForElementAtIndexPath\nmodelLayer\nmodelNumber\nmodelTransform\nmodelviewMatrix\nmodelviewMatrixprojectionMatrix\nmodificationDate\nmodifierFlags\nmodifyBadgeCompletionBlock\nmodifyPixelDataWithBlock\nmodifyRecordZonesCompletionBlock\nmodifyRecordsCompletionBlock\nmodifySubscriptionsCompletionBlock\nmodule\nmoleUnitWithMetricPrefix\nmoleUnitWithMolarMass\nmomentary\nmonitoredRegions\nmonth\nmonthSymbols\nmonthsOfTheYear\nmoreComing\nmoreNavigationController\nmorpher\nmotion\nmotionBegan\nmotionCancelled\nmotionEffects\nmotionEnded\nmotorMaximumForce\nmotorMaximumTorque\nmotorTargetAngularVelocity\nmotorTargetLinearVelocity\nmountedVolumeURLsIncludingResourceValuesForKeys\nmouthPosition\nmov\nmoveAssetsAtIndexes\nmoveBy\nmoveByX\nmoveChildCollectionsAtIndexes\nmoveInWithDirection\nmoveItemAtIndexPath\nmoveItemAtPath\nmoveItemAtURL\nmoveObjectsAtIndexes\nmovePath\nmoveRowAtIndexPath\nmoveSection\nmoveTo\nmoveToPoint\nmoveToX\nmoveToY\nmovieFragmentInterval\nmovieMediaTypes\nmoviePlayer\nmovieSourceType\nmovieTimeScale\nmp3\nmp4\nmultiThreaded\nmultipleSelectionBackgroundView\nmultipleTouchEnabled\nmultiplier\nmultiply\nmultiplyByInverseOfAttitude\nmultitaskingSupported\nmusicSequence\nmutableArrayValueForKey\nmutableArrayValueForKeyPath\nmutableAudioBufferList\nmutableBytes\nmutableCopyWithZone\nmutableOrderedSetValueForKey\nmutableOrderedSetValueForKeyPath\nmutableSetValueForKey\nmutableSetValueForKeyPath\nmutableString\nmutableTextureWithSize\nmutableTrackCompatibleWithTrack\nmuted\nmyPeerID\nname\nnameForInputBus\nnameForOutputBus\nnanosecond\nnativeBounds\nnativeScale\nnaturalLanguageQuery\nnaturalSize\nnaturalTimeScale\nnavigationBar\nnavigationBarHidden\nnavigationController\nnavigationControllerPreferredInterfaceOrientationForPresentation\nnavigationControllerSupportedInterfaceOrientations\nnavigationDelegate\nnavigationItem\nnavigationOrientation\nnavigationType\nnearbyConnectionDataForPeer\nneedsDisplay\nneedsDisplayForKey\nneedsDisplayOnBoundsChange\nneedsLayout\nneedsSave\nneedsToBeUpdatedFromPath\nneedsUpdateConstraints\nnegative\nnegativeFormat\nnegativeInfinitySymbol\nnegativePrefix\nnegativeSuffix\nnetService\nnetServiceBrowser\nnetServiceBrowserDidStopSearch\nnetServiceBrowserWillSearch\nnetServiceDidPublish\nnetServiceDidResolveAddress\nnetServiceDidStop\nnetServiceDomain\nnetServiceName\nnetServiceWillPublish\nnetServiceWillResolve\nnetworkAccessAllowed\nnetworkActivityIndicatorVisible\nnetworkName\nnetworkPort\nnetworkServiceType\nnewBufferWithBytes\nnewBufferWithBytesNoCopy\nnewBufferWithLength\nnewCacheNodeForManagedObject\nnewCommandQueue\nnewCommandQueueWithMaxCommandBufferCount\nnewComputePipelineStateWithFunction\nnewDefaultLibrary\nnewDepthStencilStateWithDescriptor\nnewDrawable\nnewFunctionWithName\nnewLibraryWithData\nnewLibraryWithFile\nnewLibraryWithSource\nnewObjectIDForEntity\nnewPersonViewController\nnewPersonViewDelegate\nnewPixelBuffer\nnewReferenceObjectForManagedObject\nnewRenderPipelineStateWithDescriptor\nnewSamplerStateWithDescriptor\nnewTextureViewWithPixelFormat\nnewTextureWithDescriptor\nnewValueForRelationship\nnewValuesForObjectWithID\nnewVersionNumber\nnewlineCharacterSet\nnewsstandAssetDownload\nnextAvailableInputBus\nnextDateAfterDate\nnextDaylightSavingTimeTransition\nnextDaylightSavingTimeTransitionAfterDate\nnextDrawable\nnextFrameTime\nnextLayout\nnextObject\nnextResponder\nnextRoadName\nnextTimedMetadataGroup\nnextTrackCommand\nnextWeekendStartDate\nnibBundle\nnibName\nnibWithData\nnibWithNibName\nnilSymbol\nnode\nnodeA\nnodeAtPoint\nnodeB\nnodeTimeForPlayerTime\nnodeWithFileNamed\nnodeWithGeometry\nnodeWithViewportSize\nnodesAtPoint\nnoiseFieldWithSmoothness\nnominalFrameRate\nnonBaseCharacterSet\nnonretainedObjectValue\nnormal\nnormalMatrix\nnormalTexture\nnormalizedCoordinates\nnormalizedCropRect\nnorms\nnotANumber\nnotANumberSymbol\nnotPredicateWithSubpredicate\nnotShownAttributeForGlyphAtIndex\nnotes\nnotice\nnotificationBatchingInterval\nnotificationCenterVibrancyEffect\nnotificationChangedBlock\nnotificationEnabled\nnotificationFromRemoteNotificationDictionary\nnotificationID\nnotificationIDs\nnotificationInfo\nnotificationType\nnotificationWithName\nnotifyEntryStateOnDisplay\nnotifyOnEntry\nnotifyOnExit\nnotifyWhenInteractionEndsUsingBlock\nnowPlayingInfo\nnowPlayingItem\nnull\nnumParticlesToEmit\nnumberFormatter\nnumberFromString\nnumberOfArguments\nnumberOfAssets\nnumberOfButtons\nnumberOfBytesTransferred\nnumberOfCaptureGroups\nnumberOfChannels\nnumberOfChildItemsAtIndexPath\nnumberOfComponents\nnumberOfComponentsInPickerView\nnumberOfDroppedVideoFrames\nnumberOfGlyphs\nnumberOfInputs\nnumberOfItems\nnumberOfItemsInSection\nnumberOfLines\nnumberOfLoops\nnumberOfMatchesInString\nnumberOfMediaRequests\nnumberOfObjects\nnumberOfOutputs\nnumberOfPages\nnumberOfPreviewItemsInPreviewController\nnumberOfRanges\nnumberOfRows\nnumberOfRowsInComponent\nnumberOfRowsInSection\nnumberOfSections\nnumberOfSectionsInCollectionView\nnumberOfSectionsInTableView\nnumberOfSegments\nnumberOfSegmentsDownloaded\nnumberOfServerAddressChanges\nnumberOfStalls\nnumberOfSteps\nnumberOfTapsRequired\nnumberOfTouches\nnumberOfTouchesRequired\nnumberStyle\nnumberValue\nnumberWithBool\nnumberWithChar\nnumberWithDouble\nnumberWithFloat\nnumberWithInt\nnumberWithInteger\nnumberWithLong\nnumberWithLongLong\nnumberWithShort\nnumberWithUnsignedChar\nnumberWithUnsignedInt\nnumberWithUnsignedInteger\nnumberWithUnsignedLong\nnumberWithUnsignedLongLong\nnumberWithUnsignedShort\noalMacOSX_OALExtensions\noalStaticBufferExtension\noauthToken\nobject\nobjectAfterChanges\nobjectAtIndex\nobjectAtIndexPath\nobjectAtIndexedSubscript\nobjectBeforeChanges\nobjectEnumerator\nobjectForInfoDictionaryKey\nobjectForKey\nobjectForKeyedSubscript\nobjectID\nobjectIDForEntity\nobjectIsForcedForKey\nobjectRegisteredForID\nobjectRestorationClass\nobjectSnapshot\nobjectWasDeleted\nobjectWithID\nobjectWithRestorationIdentifierPath\nobjectZone\nobjects\nobjectsAtIndexes\nobjectsForKeys\nobjectsForType\nobjectsPassingTest\nobjectsWithOptions\nobservationInfo\nobserveValueForKeyPath\nobservedBitrate\nobservedBitrateStandardDeviation\nobservedMaxBitrate\nobservedMinBitrate\nobstruction\nobtainPermanentIDsForObjects\nocclusion\noccurrenceCount\nocean\noffImage\noffset\noffsetFromPosition\nold\noldVersionNumber\non\nonDemandEnabled\nonDemandRules\nonImage\nonResp\nonTintColor\none\nopacity\nopaque\nopen\nopenInMapsWithLaunchOptions\nopenMapsWithItems\nopenParentApplication\nopenPaymentSetup\nopenURL\nopenWithCompletionHandler\noperand\noperatingSystem\noperatingSystemName\noperatingSystemVersion\noperatingSystemVersionString\noperationCount\noperationError\noperationQueue\noperations\noptional\noptions\norPredicateWithSubpredicates\norangeColor\nordered\norderedSet\norderedSetWithArray\norderedSetWithCapacity\norderedSetWithObject\norderedSetWithObjects\norderedSetWithOrderedSet\norderedSetWithSet\nordinalityOfUnit\norganizationName\norganizer\norientToNode\norientToPoint\norientation\norientationMode\norientationSupported\noriginalAsset\noriginalContentView\noriginalRequest\noriginalTransaction\noriginalURL\northographicScale\northography\northographyAtIndex\northographyCheckingResultWithRange\northographyWithDominantScript\notherAudioPlaying\notherVersionsOfItemAtURL\nounceUnit\nouterRadius\noutput\noutputDataSource\noutputDataSources\noutputDeviceUniqueID\noutputFileType\noutputFileURL\noutputFormat\noutputFormatForBus\noutputImage\noutputImageMaximumSize\noutputKeys\noutputLatency\noutputMediaDataWillChange\noutputMeterLevel\noutputMeteringEnabled\noutputNode\noutputNumberOfChannels\noutputObscuredDueToInsufficientExternalProtection\noutputSequenceWasFlushed\noutputSettings\noutputSettingsAssistantWithPreset\noutputSettingsForConnection\noutputStream\noutputStreamToBuffer\noutputStreamToFileAtPath\noutputStreamToMemory\noutputStreamWithURL\noutputType\noutputURL\noutputVolume\noutputs\noverlap\noverlay\noverlaySKScene\noverlays\noverlaysInLevel\noverrideOutputAudioPort\noverrideTraitCollection\noverrideTraitCollectionForChildViewController\noverscanCompensation\nownerName\nowningPortUID\npaddingCharacter\npaddingPosition\npageCount\npageIndicatorTintColor\npageLength\npageViewController\npageViewControllerPreferredInterfaceOrientationForPresentation\npageViewControllerSupportedInterfaceOrientations\npaginationBreakingMode\npaginationMode\npagingEnabled\npan\npanGestureRecognizer\npaperRect\npaperSize\nparagraphRangeForRange\nparagraphSpacing\nparagraphSpacingBefore\nparallelRenderCommandEncoderWithDescriptor\nparameterString\nparameters\nparent\nparentContext\nparentGroup\nparentNode\nparentViewController\nparse\nparser\nparserDidEndDocument\nparserDidStartDocument\nparserError\npartialStringValidationEnabled\nparticipantID\nparticipantQuitInTurnWithOutcome\nparticipantQuitOutOfTurnWithOutcome\nparticipantRole\nparticipantStatus\nparticipantType\nparticipants\nparticleAction\nparticleAlpha\nparticleAlphaRange\nparticleAlphaSequence\nparticleAlphaSpeed\nparticleAngle\nparticleAngleVariation\nparticleAngularVelocity\nparticleAngularVelocityVariation\nparticleBirthRate\nparticleBlendMode\nparticleBounce\nparticleBounceVariation\nparticleCharge\nparticleChargeVariation\nparticleColor\nparticleColorAlphaRange\nparticleColorAlphaSpeed\nparticleColorBlendFactor\nparticleColorBlendFactorRange\nparticleColorBlendFactorSequence\nparticleColorBlendFactorSpeed\nparticleColorBlueRange\nparticleColorBlueSpeed\nparticleColorGreenRange\nparticleColorGreenSpeed\nparticleColorRedRange\nparticleColorRedSpeed\nparticleColorSequence\nparticleColorVariation\nparticleDiesOnCollision\nparticleFriction\nparticleFrictionVariation\nparticleImage\nparticleLifeSpan\nparticleLifeSpanVariation\nparticleLifetime\nparticleLifetimeRange\nparticleMass\nparticleMassVariation\nparticlePosition\nparticlePositionRange\nparticleRotation\nparticleRotationRange\nparticleRotationSpeed\nparticleScale\nparticleScaleRange\nparticleScaleSequence\nparticleScaleSpeed\nparticleSize\nparticleSizeVariation\nparticleSpeed\nparticleSpeedRange\nparticleSystem\nparticleSystemNamed\nparticleSystems\nparticleTexture\nparticleVelocity\nparticleVelocityVariation\nparticleZPosition\nparticleZPositionRange\nparticleZPositionSpeed\npascalUnit\npascalUnitWithMetricPrefix\npassType\npassTypeIdentifier\npassURL\npassWithPassTypeIdentifier\npasses\npassesOfType\npassthroughTrackID\npassthroughViews\npassword\npasswordReference\npaste\npasteboardTypes\npasteboardTypesForItemSet\npasteboardWithName\npasteboardWithUniqueName\npath\npathComponents\npathContentOfSymbolicLinkAtPath\npathExtension\npathForAuxiliaryExecutable\npathForResource\npathWithComponents\npathsForResourcesOfType\npathsMatchingExtensions\npattern\npausable\npause\npauseAnimationForKey\npauseButtonColor\npauseCommand\npauseDownloads\npauseOnWillResignActive\npauseRecording\npauseSpeakingAtBoundary\npaused\npausesIncomingScene\npausesLocationUpdatesAutomatically\npausesOutgoingScene\npausingHandler\npayment\npaymentAuthorizationViewController\npaymentAuthorizationViewControllerDidFinish\npaymentAuthorizationViewControllerWillAuthorizePayment\npaymentData\npaymentInstrumentName\npaymentNetwork\npaymentPass\npaymentQueue\npaymentQueueRestoreCompletedTransactionsFinished\npaymentSummaryItems\npaymentWithProduct\npaymentWithProductIdentifier\npeakHoldLevel\npeakPowerForChannel\npeerID\npeerPickerController\npeerPickerControllerDidCancel\npeersWithConnectionState\npenetrationDistance\npeoplePickerDelegate\npeoplePickerNavigationController\npeoplePickerNavigationControllerDidCancel\nperMillSymbol\nperPageContentInsets\nperRecordCompletionBlock\nperRecordProgressBlock\npercentComplete\npercentEncodedFragment\npercentEncodedHost\npercentEncodedPassword\npercentEncodedPath\npercentEncodedQuery\npercentEncodedUser\npercentSymbol\npercentUnit\nperform\nperformActivity\nperformActivityWithOptions\nperformAsynchronousFileAccessUsingBlock\nperformBatchUpdates\nperformBlock\nperformBlockAndWait\nperformChanges\nperformChangesAndWait\nperformCustomValidationForEntityMapping\nperformDefaultHandlingForAuthenticationChallenge\nperformExpiringActivityWithReason\nperformFetch\nperformQuery\nperformRequestWithHandler\nperformSegueWithIdentifier\nperformSelector\nperformSelectorInBackground\nperformSelectorOnMainThread\nperformSystemAnimation\nperformWithoutAnimation\nperformsMultiPassEncodingIfSupported\nperipheral\nperipheralDataWithMeasuredPower\nperipheralDidInvalidateServices\nperipheralDidUpdateName\nperipheralDidUpdateRSSI\nperipheralManager\nperipheralManagerDidStartAdvertising\nperipheralManagerDidUpdateState\nperipheralManagerIsReadyToUpdateSubscribers\npermissions\npermittedArrowDirections\npersistedSnapshot\npersistence\npersistent\npersistentDomainForName\npersistentDomainNames\npersistentID\npersistentIDPropertyForGroupingType\npersistentIdentifier\npersistentIdentifierForItemAtURL\npersistentStore\npersistentStoreCoordinator\npersistentStoreForURL\npersistentStoreName\npersistentStoreOptions\npersistentStoreTypeForFileType\npersistentStores\npersonViewController\npersonViewDelegate\nphase\nphoneNumber\nphoneNumberCheckingResultWithRange\nphotoLibraryDidChange\nphysicsBody\nphysicsField\nphysicsShape\nphysicsWorld\npickerView\npinColor\npinchGestureRecognizer\npinned\npintImperialUnit\npintUSUnit\npipe\npipeRadius\npipeSegmentCount\npitch\npitchEnabled\npitchMultiplier\npivot\npixelAspectRatio\npixelBufferPool\npixelFormat\npixelHeight\npixelWidth\nplaceholder\nplaceholderCompletedAchievementImage\nplaceholderForCreatedAsset\nplaceholderForCreatedAssetCollection\nplaceholderForCreatedCollectionList\nplaceholderItem\nplaceholderRectForBounds\nplaceholderURLForURL\nplacemark\nplaneWithWidth\nplay\nplayAtTime\nplayButtonColor\nplayCommand\nplayCount\nplayInputClick\nplayPrerollAdWithCompletionHandler\nplaySoundFileNamed\nplayable\nplayableContentManager\nplayableDuration\nplayableMediaSelectionOptionsFromArray\nplaybackBufferEmpty\nplaybackBufferFull\nplaybackDuration\nplaybackLikelyToKeepUp\nplaybackProgress\nplaybackRate\nplaybackSessionID\nplaybackStartDate\nplaybackStartOffset\nplaybackState\nplaybackType\nplayer\nplayerAttributes\nplayerGroup\nplayerID\nplayerIDs\nplayerIndex\nplayerItem\nplayerItemWithAsset\nplayerItemWithURL\nplayerLayerWithPlayer\nplayerScope\nplayerStateUpdateHandler\nplayerTimeForNodeTime\nplayerVoiceChatStateDidChangeHandler\nplayerWithPlayerItem\nplayerWithURL\nplayers\nplayersToInvite\nplaying\nplaylistAttributes\nplaylistsQuery\nplugInsEnabled\nplusSign\npodcastPersistentID\npodcastTitle\npodcastsQuery\npointCount\npointForCaptureDevicePointOfInterest\npointForCoordinate\npointForMapPoint\npointInside\npointOfView\npointSize\npointerArrayWithOptions\npointerArrayWithPointerFunctions\npointerAtIndex\npointerFunctions\npointerFunctionsWithOptions\npointerValue\npointers\npoints\npolygon\npolygonWithCoordinates\npolygonWithPoints\npolyline\npolylineWithCoordinates\npolylineWithPoints\npopConfigurationViewController\npopController\npopDebugGroup\npopNavigationItemAnimated\npopToRootController\npopToRootViewControllerAnimated\npopToViewController\npopViewControllerAnimated\npopoverArrowDirection\npopoverBackgroundViewClass\npopoverContentSize\npopoverController\npopoverControllerDidDismissPopover\npopoverControllerShouldDismissPopover\npopoverLayoutMargins\npopoverPresentationController\npopoverPresentationControllerDidDismissPopover\npopoverPresentationControllerShouldDismissPopover\npopoverVisible\nport\nportList\nportName\nportType\nportWithMachPort\nports\nposeAsClass\nposition\npositionAdjustmentForSearchBarIcon\npositionForBar\npositionFromPosition\npositionWithinRange\npositionX\npositionY\npositiveFormat\npositiveInfinitySymbol\npositivePrefix\npositiveSuffix\npossibleTagsAtIndex\npossibleTitles\npostNotification\npostNotificationName\npostUtteranceDelay\npostalCode\nposterImage\npostscriptName\npoundUnit\npreGain\npreUtteranceDelay\nprecomposedStringWithCanonicalMapping\nprecomposedStringWithCompatibilityMapping\npredicate\npredicateForCategorySamplesWithOperatorType\npredicateForCompletedRemindersWithCompletionDateStarting\npredicateForEnablingPerson\npredicateForEventsWithStartDate\npredicateForIncompleteRemindersWithDueDateStarting\npredicateForObjectWithUUID\npredicateForObjectsFromSource\npredicateForObjectsFromSources\npredicateForObjectsFromWorkout\npredicateForObjectsWithMetadataKey\npredicateForObjectsWithNoCorrelation\npredicateForObjectsWithUUIDs\npredicateForQuantitySamplesWithOperatorType\npredicateForRemindersInCalendars\npredicateForSamplesWithStartDate\npredicateForSelectionOfPerson\npredicateForSelectionOfProperty\npredicateForWorkoutsWithOperatorType\npredicateForWorkoutsWithWorkoutActivityType\npredicateFormat\npredicateFromMetadataQueryString\npredicateOperatorType\npredicateWithBlock\npredicateWithFormat\npredicateWithLeftExpression\npredicateWithSubstitutionVariables\npredicateWithValue\npreferences\npreferredContentSize\npreferredContentSizeCategory\npreferredContentSizeDidChangeForChildContentContainer\npreferredDataSource\npreferredDisplayMode\npreferredFilename\npreferredFontDescriptorWithTextStyle\npreferredFontForTextStyle\npreferredFrameSize\npreferredFramesPerSecond\npreferredHardwareSampleRate\npreferredIOBufferDuration\npreferredInput\npreferredInputNumberOfChannels\npreferredInterfaceOrientationForPresentation\npreferredIntervals\npreferredLanguages\npreferredLayoutAttributesFittingAttributes\npreferredLocalizations\npreferredLocalizationsFromArray\npreferredMaxLayoutWidth\npreferredMediaCharacteristics\npreferredMediaChunkAlignment\npreferredMediaChunkDuration\npreferredMode\npreferredOutputNumberOfChannels\npreferredPeakBitRate\npreferredPolarPattern\npreferredPrimaryColumnWidthFraction\npreferredRate\npreferredSampleRate\npreferredStatusBarStyle\npreferredStatusBarUpdateAnimation\npreferredStyle\npreferredTransform\npreferredUnitsForQuantityTypes\npreferredVideoStabilizationMode\npreferredVolume\nprefersStatusBarHidden\npreflightAndReturnError\npreloadTextureAtlases\npreloadTextures\npreloadWithCompletionHandler\nprepare\nprepareForAnimatedBoundsChange\nprepareForCollectionViewUpdates\nprepareForDeletion\nprepareForDrawingPages\nprepareForInterfaceBuilder\nprepareForPopoverPresentation\nprepareForPresentationInMode\nprepareForReadingItemsAtURLs\nprepareForReuse\nprepareForSegue\nprepareForTransitionFromLayout\nprepareForTransitionToLayout\nprepareInterstitialAds\nprepareLayout\nprepareObject\nprepareObjects\npreparePrerollAds\nprepareToCaptureStillImageBracketFromConnection\nprepareToDraw\nprepareToPlay\nprepareToRecord\nprepareWithActivityItems\nprepareWithFrameCount\nprepareWithInvocationTarget\npreparedURLRequest\npreprocessorMacros\nprerollAtRate\npresent\npresentAnimated\npresentAtTime\npresentControllerWithName\npresentControllerWithNames\npresentDrawable\npresentFromBarButtonItem\npresentFromRect\npresentFromViewController\npresentInView\npresentLocalNotificationNow\npresentModalViewController\npresentMoviePlayerViewControllerAnimated\npresentOpenInMenuFromBarButtonItem\npresentOpenInMenuFromRect\npresentOptionsMenuFromBarButtonItem\npresentOptionsMenuFromRect\npresentPopoverFromBarButtonItem\npresentPopoverFromRect\npresentPreviewAnimated\npresentRenderbuffer\npresentScene\npresentSearchController\npresentTextInputControllerWithSuggestions\npresentViewController\npresentationAnimationDidFinish\npresentationController\npresentationControllerForPresentedViewController\npresentationCountForPageViewController\npresentationIndexForPageViewController\npresentationLatency\npresentationLayer\npresentationNode\npresentationSize\npresentationStyle\npresentationTransitionDidEnd\npresentationTransitionWillBegin\npresentedItemDidChange\npresentedItemDidGainVersion\npresentedItemDidLoseVersion\npresentedItemDidMoveToURL\npresentedItemDidResolveConflictVersion\npresentedItemOperationQueue\npresentedItemURL\npresentedSubitemAtURL\npresentedSubitemDidAppearAtURL\npresentedSubitemDidChangeAtURL\npresentedView\npresentedViewController\npresentingFullScreenAd\npresentingViewController\npresentsWithGesture\npresentsWithTransaction\npreservesDepth\npreservesSuperviewLayoutMargins\npresetName\npressed\npressedChangedHandler\npressure\nprevents\npreviewController\npreviewControllerDidDismiss\npreviewControllerWillDismiss\npreviewImageHandler\npreviewItemTitle\npreviewItemURL\npreviousFailureCount\npreviousLocationInNode\npreviousLocationInView\npreviousServerChangeToken\npreviousTrackCommand\nprice\npriceLocale\nprimary\nprimaryAccountIdentifier\nprimaryAccountNumberSuffix\nprimaryColumnWidth\nprimaryHome\nprimaryLanguage\nprimaryPresentedItemURL\nprimaryViewControllerForCollapsingSplitViewController\nprimaryViewControllerForExpandingSplitViewController\nprimitiveCount\nprimitiveType\nprimitiveValueForKey\nprincipalClass\nprintFormatter\nprintFormatters\nprintFormattersForPageAtIndex\nprintInfo\nprintInfoWithDictionary\nprintInteractionController\nprintInteractionControllerDidDismissPrinterOptions\nprintInteractionControllerDidFinishJob\nprintInteractionControllerDidPresentPrinterOptions\nprintInteractionControllerParentViewController\nprintInteractionControllerWillDismissPrinterOptions\nprintInteractionControllerWillPresentPrinterOptions\nprintInteractionControllerWillStartJob\nprintPageRenderer\nprintPaper\nprintRect\nprintToPrinter\nprintableRect\nprintableUTIs\nprinter\nprinterID\nprinterPickerController\nprinterPickerControllerDidDismiss\nprinterPickerControllerDidPresent\nprinterPickerControllerDidSelectPrinter\nprinterPickerControllerParentViewController\nprinterPickerControllerWillDismiss\nprinterPickerControllerWillPresent\nprinterPickerControllerWithInitiallySelectedPrinter\nprinterWithURL\nprintingItem\nprintingItems\npriority\nprivateCloudDatabase\nprivateFrameworksPath\nprivateFrameworksURL\nprobeURL\nprocessEditing\nprocessEditingForTextStorage\nprocessIdentifier\nprocessInfo\nprocessName\nprocessPendingChanges\nprocessPool\nprocessingFormat\nprocessorCount\nproductIdentifier\nproductViewControllerDidFinish\nproducts\nproductsRequest\nprogram\nprogramIsOpaque\nprogress\nprogressHandler\nprogressImage\nprogressTintColor\nprogressViewStyle\nprogressWithTotalUnitCount\nproject\nprojectPoint\nprojectionTransform\npromisedItemResourceValuesForKeys\nprompt\npropagatesDeletesAtEndOfEvent\nproperties\npropertiesByName\npropertiesToFetch\npropertiesToGroupBy\npropertiesToUpdate\nproperty\npropertyCache\npropertyControllers\npropertyForGlyphAtIndex\npropertyForKey\npropertyList\npropertyListForTextStyleRules\npropertyListFromData\npropertyListFromStringsFileFormat\npropertyListWithData\npropertyListWithStream\nproposedCredential\nprotectedDataAvailable\nprotectionSpace\nprotocol\nprotocolClasses\nprotocolFamily\nprotocolSpecificInformation\nprotocolString\nprotocolStrings\nprovidePlaceholderAtURL\nproviderIdentifier\nprovidesPreciseDurationAndTiming\nprovidesPresentationContextTransitionStyle\nprovince\nproximity\nproximityMonitoringEnabled\nproximitySensingEnabled\nproximityState\nproximityUUID\nproxyType\npublicCloudDatabase\npublicID\npublish\npublishWithOptions\npunctuationCharacterSet\npurpleColor\npurpose\npurposeIdentifier\npushConfigurationViewController\npushControllerWithName\npushDebugGroup\npushDirection\npushNavigationItem\npushRegistry\npushTokenForType\npushViewController\npushWithDirection\npyramidWithWidth\nqualityOfService\nquantity\nquantitySampleWithType\nquantityType\nquantityTypeForIdentifier\nquantityWithUnit\nquarter\nquarterSymbols\nquaternion\nquery\nqueryActivityStartingFromDate\nqueryActivityWithCompletionHandler\nqueryCompletionBlock\nqueryItemWithName\nqueryItems\nqueryNotificationReason\nqueryPedometerDataFromDate\nqueryPlayerGroupActivity\nqueryStepCountStartingFrom\nquerying\nqueuePlayerWithItems\nqueuePriority\nquoteCheckingResultWithRange\nrAddressMode\nradialGravityField\nradialSegmentCount\nradius\nraise\nrampToVideoZoomFactor\nrampingVideoZoom\nrange\nrangeAtIndex\nrangeEnclosingPosition\nrangeOfCharacterFromSet\nrangeOfComposedCharacterSequenceAtIndex\nrangeOfComposedCharacterSequencesForRange\nrangeOfData\nrangeOfFirstMatchInString\nrangeOfMisspelledWordInString\nrangeOfNominallySpacedGlyphsContainingIndex\nrangeOfString\nrangeOfUnit\nrangeOfWeekendStartDate\nrangeValue\nrangeWithConstantValue\nrangeWithLowerLimit\nrangeWithNoLimits\nrangeWithUpperLimit\nrangeWithValue\nrangedRegions\nrank\nrasterizationEnabled\nrasterizationScale\nrate\nrating\nratingCommand\nrayTestWithSegmentFromPoint\nreachConstraints\nreachTo\nreachToNode\nreachable\nreactionForce\nreactionTorque\nread\nreadAdditionalContentFromURL\nreadDataOfLength\nreadDataToEndOfFile\nreadFromData\nreadFromFileURL\nreadFromURL\nreadInBackgroundAndNotify\nreadInBackgroundAndNotifyForModes\nreadIntoBuffer\nreadMask\nreadOnly\nreadRSSI\nreadToEndOfFileInBackgroundAndNotify\nreadToEndOfFileInBackgroundAndNotifyForModes\nreadValueForCharacteristic\nreadValueForDescriptor\nreadValueWithCompletionHandler\nreadabilityHandler\nreadable\nreadingIntentWithURL\nreadsFromDepthBuffer\nready\nreadyForDisplay\nreadyForMoreMediaData\nrealm\nreason\nreceiptProperties\nreceivedData\nreceivedRealTimeData\nreceivesCredentialSecurely\nreceivingPlayer\nreceivingPlayerID\nrecipient\nrecipientResponseHandler\nrecipients\nreciprocalUnit\nreclaimResources\nrecommendedAudioSettingsForAssetWriterWithOutputFileType\nrecommendedVideoSettingsForAssetWriterWithOutputFileType\nrecord\nrecordAtTime\nrecordButtonColor\nrecordChangeTag\nrecordChangedBlock\nrecordFetchedBlock\nrecordFields\nrecordForDuration\nrecordID\nrecordIDs\nrecordIDsToDelete\nrecordName\nrecordPermission\nrecordType\nrecordWithIDWasDeletedBlock\nrecordZoneID\nrecordZoneIDs\nrecordZoneIDsToDelete\nrecordZonesToSave\nrecordedDuration\nrecordedFileSize\nrecording\nrecordingPaused\nrecordsToSave\nrecoveryAttempter\nrect\nrectForFooterInSection\nrectForHeaderInSection\nrectForMapRect\nrectForMetadataOutputRectOfInterest\nrectForPageAtIndex\nrectForRowAtIndexPath\nrectForSection\nrectOfInterest\nrecurrence\nrecurrenceCalendar\nrecurrenceEnd\nrecurrenceEndWithEndDate\nrecurrenceEndWithOccurrenceCount\nrecurrenceRules\nred\nredColor\nredRange\nredSpeed\nredirect\nredo\nredoActionIsDiscardable\nredoActionName\nredoMenuItemTitle\nredoMenuTitleForUndoActionName\nredoing\nreferenceAction\nreferenceDistance\nreferenceNode\nreferenceObjectForObjectID\nreferenceRestrictions\nreferenceView\nreflectionFalloffEnd\nreflectionFalloffStart\nreflectionResolutionScaleFactor\nreflective\nreflectivity\nrefresh\nrefreshControl\nrefreshCurrentPreviewItem\nrefreshObject\nrefreshSourcesIfNecessary\nrefreshing\nregion\nregionByDifferenceFromRegion\nregionByIntersectionWithRegion\nregionByUnionWithRegion\nregionMonitoringAvailable\nregionMonitoringEnabled\nregionOfInterestForImage\nregionThatFits\nregionTriggersOnce\nregisterChangeObserver\nregisterClass\nregisterDefaults\nregisterFilterName\nregisterForLocalNotifications\nregisterForRemoteNotificationTypes\nregisterForRemoteNotifications\nregisterImage\nregisterItemForTypeIdentifier\nregisterListener\nregisterNib\nregisterObjectForStateRestoration\nregisterStoreClass\nregisterUndoWithTarget\nregisterUserNotificationSettings\nregisteredObjects\nregisteredStoreTypes\nregisteredTypeIdentifiers\nregularExpression\nregularExpressionCheckingResultWithRanges\nregularExpressionWithPattern\nregularFile\nregularFileContents\nrejectProtectionSpaceAndContinueWithChallenge\nrelation\nrelationshipKeyPathsForPrefetching\nrelationshipMappings\nrelationshipsByName\nrelationshipsWithDestinationEntity\nrelativeAltitude\nrelativeLocation\nrelativeOffset\nrelativePath\nrelativeString\nreleaseDate\nrelevantDate\nrelinquishFunction\nrelinquishPresentedItemToReader\nrelinquishPresentedItemToWriter\nreload\nreloadAllComponents\nreloadComponent\nreloadConfigurationItems\nreloadData\nreloadFromOrigin\nreloadInputViews\nreloadItemsAtIndexPaths\nreloadRootControllersWithNames\nreloadRowsAtIndexPaths\nreloadSectionIndexTitles\nreloadSections\nrematchWithCompletionHandler\nreminderWithEventStore\nremoteControlReceivedWithEvent\nremoteIdentifier\nremoteParticipantVolume\nremotePlayerDidCompleteChallenge\nremoveAccessory\nremoveAccount\nremoveAction\nremoveActionForKey\nremoveActionSet\nremoveAlarm\nremoveAllActions\nremoveAllActionsWithTarget\nremoveAllAnimations\nremoveAllAnnotations\nremoveAllBehaviors\nremoveAllBoundaries\nremoveAllCachedImages\nremoveAllCachedResourceValues\nremoveAllCachedResponses\nremoveAllChildren\nremoveAllImages\nremoveAllIndexes\nremoveAllItems\nremoveAllJoints\nremoveAllModifiers\nremoveAllObjects\nremoveAllParticleSystems\nremoveAllPoints\nremoveAllSegments\nremoveAllServices\nremoveAllURLs\nremoveAllUserScripts\nremoveAndReturnError\nremoveAnimationForKey\nremoveAnnotation\nremoveAnnotations\nremoveAssets\nremoveAssetsAtIndexes\nremoveAttribute\nremoveBehavior\nremoveBoundaryWithIdentifier\nremoveCachedImageWithName\nremoveCachedResourceValueForKey\nremoveCachedResponseForDataTask\nremoveCachedResponseForRequest\nremoveCachedResponsesSinceDate\nremoveCalendar\nremoveCharactersInRange\nremoveCharactersInString\nremoveChildBehavior\nremoveChildCollections\nremoveChildCollectionsAtIndexes\nremoveChildrenInArray\nremoveConnection\nremoveConstraint\nremoveConstraints\nremoveContact\nremoveCookiesSinceDate\nremoveCredential\nremoveDependency\nremoveDictationResultPlaceholder\nremoveEvent\nremoveFileAtPath\nremoveFilePresenter\nremoveFileWrapper\nremoveFilterPredicate\nremoveFromParent\nremoveFromParentNode\nremoveFromParentViewController\nremoveFromPreferencesWithCompletionHandler\nremoveFromPrintPageRenderer\nremoveFromRunLoop\nremoveFromSuperlayer\nremoveFromSuperview\nremoveGestureRecognizer\nremoveHome\nremoveIndex\nremoveIndexes\nremoveIndexesInRange\nremoveInput\nremoveIssue\nremoveItem\nremoveItemAtPath\nremoveItemAtURL\nremoveJoint\nremoveKeyframeAtIndex\nremoveLastKeyframe\nremoveLastObject\nremoveLayoutManager\nremoveManagedReference\nremoveMaterialAtIndex\nremoveModifiersOfStage\nremoveMotionEffect\nremoveObject\nremoveObjectAtIndex\nremoveObjectForKey\nremoveObjectIdenticalTo\nremoveObjectsAtIndexes\nremoveObjectsForKeys\nremoveObjectsFromIndices\nremoveObjectsInArray\nremoveObjectsInRange\nremoveObserver\nremoveOtherVersionsOfItemAtURL\nremoveOutput\nremoveOverlay\nremoveOverlays\nremoveParticleSystem\nremovePass\nremovePasteboardWithName\nremovePersistentDomainForName\nremovePersistentStore\nremovePointerAtIndex\nremovePort\nremovePropertyForKey\nremoveRecurrenceRule\nremoveReminder\nremoveRoom\nremoveRowsAtIndexes\nremoveScriptMessageHandlerForName\nremoveSegmentAtIndex\nremoveService\nremoveServiceGroup\nremoveSubscriber\nremoveSuiteNamed\nremoveTapOnBus\nremoveTarget\nremoveTextContainerAtIndex\nremoveTimeObserver\nremoveTimeRange\nremoveTrack\nremoveTransactionObserver\nremoveTrigger\nremoveUbiquitousContentAndPersistentStoreAtURL\nremoveUniformNamed\nremoveUser\nremoveVolatileDomainForName\nremoveWithCompletionHandler\nremoveZone\nremovedIndexes\nremovedObjects\nremovedOnCompletion\nremovesDuplicateFrames\nrenamingIdentifier\nrender\nrenderAtTime\nrenderCommandEncoder\nrenderCommandEncoderWithDescriptor\nrenderContext\nrenderContextChanged\nrenderInContext\nrenderMode\nrenderNode\nrenderPassDescriptor\nrenderScale\nrenderSize\nrenderTransform\nrenderbufferStorage\nrenderedContentURL\nrenderer\nrendererDelegate\nrendererForOverlay\nrendererWithContext\nrenderingAlgorithm\nrenderingMode\nrenderingOrder\nrenewCredentialsForAccount\nrenewalDate\nrepeatAction\nrepeatActionForever\nrepeatCalendar\nrepeatCount\nrepeatDuration\nrepeatInterval\nrepeatMode\nreplaceAssetsAtIndexes\nreplaceBytesInRange\nreplaceCharactersInRange\nreplaceChildCollectionsAtIndexes\nreplaceChildNode\nreplaceCurrentItemWithPlayerItem\nreplaceItemAtURL\nreplaceMatchesInString\nreplaceMaterialAtIndex\nreplaceObjectAtIndex\nreplaceObjectsAtIndexes\nreplaceObjectsInRange\nreplaceOccurrencesOfString\nreplacePassWithPass\nreplacePointerAtIndex\nreplaceRange\nreplaceRegion\nreplaceSublayer\nreplacementCheckingResultWithRange\nreplacementObjectForCoder\nreplacementObjectForKeyedArchiver\nreplacementString\nreplacementStringForResult\nreplayable\nreplies\nreplyDate\nreplyWithLocalizableMessageKey\nreportAchievementWithCompletionHandler\nreportAchievements\nreportScoreWithCompletionHandler\nreportScores\nrepresentationForUTI\nrepresentativeItem\nrepresentedElementCategory\nrepresentedElementKind\nrepresentsBurst\nrequest\nrequestAVAssetForVideo\nrequestAccessForMediaType\nrequestAccessToAccountsWithType\nrequestAccessToEntityType\nrequestAlwaysAuthorization\nrequestApplicationPermission\nrequestAuthorization\nrequestAuthorizationToShareTypes\nrequestCachePolicy\nrequestContentEditingInputWithOptions\nrequestData\nrequestDidFinish\nrequestExportSessionForVideo\nrequestExpression\nrequestForServiceType\nrequestHeaderFieldsWithCookies\nrequestImageDataForAsset\nrequestImageForAsset\nrequestInterstitialAdPresentation\nrequestIsCacheEquivalent\nrequestMediaDataWhenReadyOnQueue\nrequestMethod\nrequestNotificationOfMediaDataChangeWithAdvanceInterval\nrequestPlayerItemForVideo\nrequestRecordPermission\nrequestStateForRegion\nrequestSupplementaryLexiconWithCompletion\nrequestThumbnailImagesAtTimes\nrequestType\nrequestWhenInUseAuthorization\nrequestWithURL\nrequestedLength\nrequestedTimeToleranceAfter\nrequestedTimeToleranceBefore\nrequestsAlternateRoutes\nrequireGestureRecognizerToFail\nrequiredBillingAddressFields\nrequiredContentSizeIdentifiers\nrequiredPixelBufferAttributesForRenderContext\nrequiredShippingAddressFields\nrequiredSourceTrackIDs\nrequiresConstraintBasedLayout\nrequiresFrameReordering\nrequiresSecureCoding\nreservedSpaceLength\nreset\nresetAchievementsWithCompletionHandler\nresetBytesInRange\nresetForReadingTimeRanges\nresetSimulation\nresetStandardUserDefaults\nresetSystemTimeZone\nresetTransform\nresetWithCompletionHandler\nresignCurrent\nresignFirstResponder\nresignKeyWindow\nresistance\nresizableImageWithCapInsets\nresizableSnapshotViewFromRect\nresizeByWidth\nresizeMode\nresizeToHeight\nresizeToWidth\nresizingMode\nresolve\nresolveConflictingSavedGames\nresolveConflicts\nresolveDepthPlane\nresolveLevel\nresolveSlice\nresolveTexture\nresolveWithTimeout\nresolved\nresourceDataUsingCache\nresourceLoader\nresourceOptions\nresourcePath\nresourceSpecifier\nresourceURL\nresourceValuesForKeys\nrespondToEachPassDescriptionOnQueue\nrespondToRequest\nrespondWithData\nrespondsToSelector\nresponse\nresting\nrestitution\nrestorationClass\nrestorationIdentifier\nrestorationParent\nrestoreCompletedTransactions\nrestoreCompletedTransactionsWithApplicationUsername\nrestoreUserActivityState\nresult\nresultAtIndex\nresultByAdjustingRangesWithOffset\nresultCount\nresultType\nresults\nresultsLimit\nresume\nresumeAnimationForKey\nresumeDownloads\nresumeOnDidBecomeActive\nresumeRecording\nretain\nretainArguments\nretainWeakReference\nretainedReferences\nretainsRegisteredObjects\nretrieveConnectedPeripherals\nretrieveConnectedPeripheralsWithServices\nretrievePeripherals\nretrievePeripheralsWithIdentifiers\nreturnKeyType\nreturnsDistinctResults\nreturnsObjectsAsFaults\nreuseIdentifier\nrevealWithDirection\nreverbBlend\nreverbParameters\nreverseGeocodeLocation\nreverseGeocoder\nreverseObjectEnumerator\nreversePlaybackEndTime\nreverseTransformedValue\nreversedAction\nreversedOrderedSet\nreversedSortDescriptor\nreversesTitleShadowWhenHighlighted\nrevertAssetContentToOriginal\nrevertToContentsOfURL\nrewindButtonColor\nrgbBlendOperation\nright\nrightBarButtonItem\nrightBarButtonItems\nrightCalloutAccessoryView\nrightCalloutOffset\nrightExpression\nrightEyeClosed\nrightEyePosition\nrightShoulder\nrightThumbstick\nrightTrigger\nrightView\nrightViewMode\nrightViewRectForBounds\nringRadius\nringSegmentCount\nroll\nrollAngle\nrollback\nrollingFriction\nrolloffFactor\nroom\nroomForEntireHome\nrooms\nrootNode\nrootResource\nrootViewController\nrotateByAngle\nrotateByX\nrotateEnabled\nrotateToAngle\nrotateToAxisAngle\nrotateToX\nrotatingFooterView\nrotatingHeaderView\nrotation\nrotationMatrix\nrotationMode\nrotationRate\nrotationSpeed\nroundingBehavior\nroundingIncrement\nroundingMode\nrouteButtonImageForState\nrouteButtonRectForBounds\nroutes\nrow\nrowActionWithStyle\nrowControllerAtIndex\nrowHeight\nrowSizeForComponent\nrssi\nrun\nrunAction\nrunActionForKey\nrunBlock\nrunLoopModes\nrunMode\nrunUntilDate\nrunning\nsAddressMode\nsampleAtTime\nsampleBufferCallbackQueue\nsampleBufferDelegate\nsampleCount\nsampleFieldsAt\nsamplePredicates\nsamplePresentationTimeForTrackTime\nsampleRate\nsampleReferenceBaseURL\nsampleTime\nsampleTimeValid\nsampleType\nsave\nsaveAccount\nsaveCalendar\nsaveCurrentTurnWithMatchData\nsaveEvent\nsaveGameData\nsaveMergedMatchData\nsaveObject\nsaveObjects\nsavePolicy\nsavePresentedItemChangesWithCompletionHandler\nsaveRecord\nsaveRecordZone\nsaveReminder\nsaveSnapshot\nsaveSubscription\nsaveToPreferencesWithCompletionHandler\nsaveToURL\nsavingFileType\nscale\nscaleBy\nscaleFactor\nscaleMode\nscaleRange\nscaleSpeed\nscaleTimeRange\nscaleTo\nscaleXBy\nscaleXTo\nscaleYTo\nscalesPageToFit\nscalingMode\nscanCharactersFromSet\nscanDecimal\nscanDouble\nscanFloat\nscanForPeripheralsWithServices\nscanHexDouble\nscanHexFloat\nscanHexInt\nscanHexLongLong\nscanInt\nscanInteger\nscanLocation\nscanLongLong\nscanString\nscanUnsignedLongLong\nscanUpToCharactersFromSet\nscanUpToString\nscannerWithString\nscene\nsceneNamed\nsceneSourceWithData\nsceneSourceWithURL\nsceneTime\nsceneWithOptions\nsceneWithSize\nsceneWithURL\nscheduleBuffer\nscheduleFile\nscheduleInRunLoop\nscheduleLocalNotification\nscheduleSegment\nscheduledLocalNotifications\nscheduledTimerWithTimeInterval\nscheme\nscnScene\nscope\nscopeBarBackgroundImage\nscopeBarButtonBackgroundImageForState\nscopeBarButtonDividerImageForLeftSegmentState\nscopeBarButtonTitleTextAttributesForState\nscopeButtonTitles\nscore\nscores\nscreen\nscreenBounds\nscreenScale\nscreenSpaceRadius\nscreens\nscrollDirection\nscrollEnabled\nscrollIndicatorInsets\nscrollMode\nscrollPoint\nscrollRangeToVisible\nscrollRectToVisible\nscrollToItemAtIndexPath\nscrollToNearestSelectedRowAtScrollPosition\nscrollToPoint\nscrollToRect\nscrollToRowAtIndex\nscrollToRowAtIndexPath\nscrollView\nscrollViewDidEndDecelerating\nscrollViewDidEndDragging\nscrollViewDidEndScrollingAnimation\nscrollViewDidEndZooming\nscrollViewDidScroll\nscrollViewDidScrollToTop\nscrollViewDidZoom\nscrollViewShouldScrollToTop\nscrollViewTexturedBackgroundColor\nscrollViewWillBeginDecelerating\nscrollViewWillBeginDragging\nscrollViewWillBeginZooming\nscrollViewWillEndDragging\nscrollsToTop\nsearchBar\nsearchBarBookmarkButtonClicked\nsearchBarCancelButtonClicked\nsearchBarResultsListButtonClicked\nsearchBarSearchButtonClicked\nsearchBarShouldBeginEditing\nsearchBarShouldEndEditing\nsearchBarStyle\nsearchBarTextDidBeginEditing\nsearchBarTextDidEndEditing\nsearchContentsController\nsearchDisplayController\nsearchDisplayControllerDidBeginSearch\nsearchDisplayControllerDidEndSearch\nsearchDisplayControllerWillBeginSearch\nsearchDisplayControllerWillEndSearch\nsearchFieldBackgroundImageForState\nsearchFieldBackgroundPositionAdjustment\nsearchForAllDomains\nsearchForBrowsableDomains\nsearchForRegistrationDomains\nsearchForServicesOfType\nsearchItems\nsearchResultsButtonSelected\nsearchResultsController\nsearchResultsDataSource\nsearchResultsDelegate\nsearchResultsTableView\nsearchResultsTitle\nsearchResultsUpdater\nsearchScopes\nsearchTextPositionAdjustment\nsearching\nsecond\nsecondAttribute\nsecondItem\nsecondUnit\nsecondUnitWithMetricPrefix\nsecondaryAudioShouldBeSilencedHint\nsecondaryGroupingSize\nsecondsForHostTime\nsecondsFromGMT\nsecondsFromGMTForDate\nsection\nsectionFooterHeight\nsectionForObject\nsectionForSectionIndexTitle\nsectionForSectionIndexTitleAtIndex\nsectionHeaderHeight\nsectionIndexBackgroundColor\nsectionIndexColor\nsectionIndexMinimumDisplayRowCount\nsectionIndexTitleForSectionName\nsectionIndexTitles\nsectionIndexTitlesForTableView\nsectionIndexTrackingBackgroundColor\nsectionInset\nsectionNameKeyPath\nsectionTitles\nsections\nsecure\nsecureTextEntry\nsecurityIdentity\nseed\nseedItems\nseekBackwardCommand\nseekForwardCommand\nseekToDate\nseekToEndOfFile\nseekToFileOffset\nseekToTime\nseekableTimeRanges\nseekingWaitsForVideoCompositionRendering\nsegmentCount\nsegmentForTrackTime\nsegmentedControlStyle\nsegments\nsegmentsDownloadedDuration\nsegueForUnwindingToViewController\nsegueWithIdentifier\nselect\nselectAll\nselectAnnotation\nselectChallengeablePlayerIDs\nselectChallengeablePlayers\nselectItemAtIndexPath\nselectMediaOption\nselectMediaOptionAutomaticallyInMediaSelectionGroup\nselectRow\nselectRowAtIndexPath\nselectable\nselected\nselectedAnnotations\nselectedBackgroundView\nselectedCalendars\nselectedDataSource\nselectedImage\nselectedImageTintColor\nselectedIndex\nselectedItem\nselectedMediaOptionInMediaSelectionGroup\nselectedPolarPattern\nselectedPrinter\nselectedRange\nselectedRowInComponent\nselectedScopeButtonIndex\nselectedSegmentIndex\nselectedTextColor\nselectedTextRange\nselectedViewController\nselectionAffinity\nselectionDidChange\nselectionGranularity\nselectionIndicatorImage\nselectionRectsForRange\nselectionStyle\nselectionWillChange\nselector\nselfContained\nsemantic\nsemanticForSymbol\nsendAction\nsendActionsForControlEvents\nsendAsynchronousRequest\nsendBeforeDate\nsendController\nsendData\nsendDataToAllPeers\nsendDataToAllPlayers\nsendDate\nsendEvent\nsendExchangeToParticipants\nsendMIDIEvent\nsendMIDISysExEvent\nsendPitchBend\nsendPressure\nsendPressureForKey\nsendProgramChange\nsendReminderToParticipants\nsendResourceAtURL\nsendSubviewToBack\nsendSynchronousRequest\nsender\nsentenceRangeForRange\nseparateSecondaryViewControllerForSplitViewController\nseparatorColor\nseparatorEffect\nseparatorInset\nseparatorStyle\nsequence\nserialNumber\nserializedRepresentation\nserializedXMPFromFilters\nserverAddress\nserverCertificateCommonName\nserverCertificateIssuerCommonName\nserverTrust\nservice\nserviceGroups\nserviceType\nservices\nservicesWithTypes\nsession\nsessionDescription\nsessionID\nsessionMode\nsessionOnly\nsessionPreset\nsessionSendsLaunchEvents\nsessionWithConfiguration\nset\nsetAbbreviationDictionary\nsetAccessibilityHint\nsetAccessibilityImageRegions\nsetAccessibilityLabel\nsetAccessibilityTraits\nsetAccessibilityValue\nsetActionIsDiscardable\nsetActionName\nsetActions\nsetActive\nsetAffineTransform\nsetAlpha\nsetAngle\nsetAnimationBeginsFromCurrentState\nsetAnimationCurve\nsetAnimationDelay\nsetAnimationDelegate\nsetAnimationDidStopSelector\nsetAnimationDuration\nsetAnimationRepeatAutoreverses\nsetAnimationRepeatCount\nsetAnimationStartDate\nsetAnimationTimingFunction\nsetAnimationTransition\nsetAnimationWillStartSelector\nsetAnimationsEnabled\nsetArgument\nsetArray\nsetAssetsFilter\nsetAttachmentSize\nsetAttribute\nsetAttributedString\nsetAttributedText\nsetAttributedTitle\nsetAttributes\nsetAuthorization\nsetBackButtonBackgroundImage\nsetBackButtonBackgroundVerticalPositionAdjustment\nsetBackButtonTitlePositionAdjustment\nsetBackgroundColor\nsetBackgroundImage\nsetBackgroundImageData\nsetBackgroundImageNamed\nsetBackgroundVerticalPositionAdjustment\nsetBaseWritingDirection\nsetBccRecipients\nsetBlendColorRed\nsetBool\nsetBoundingBoxMin\nsetBuffer\nsetBufferOffset\nsetBuffers\nsetByAddingObject\nsetByAddingObjectsFromArray\nsetByAddingObjectsFromSet\nsetBytes\nsetCalendar\nsetCamera\nsetCategory\nsetCcRecipients\nsetCenterCoordinate\nsetClass\nsetClassName\nsetCollectionViewLayout\nsetColor\nsetCompletionBlock\nsetComputePipelineState\nsetContentCompressionResistancePriority\nsetContentHuggingPriority\nsetContentOffset\nsetContentPositionAdjustment\nsetContentViewController\nsetCookie\nsetCookies\nsetCoordinate\nsetCornerRadius\nsetCredential\nsetCropRectangle\nsetCropRectangleRampFromStartCropRectangle\nsetCullMode\nsetCurrentContext\nsetData\nsetDataReceiveHandler\nsetDate\nsetDecrementImage\nsetDefaultBehavior\nsetDefaultCredential\nsetDefaultFormatterBehavior\nsetDefaultLeaderboard\nsetDefaultLeaderboardCategoryID\nsetDefaultLeaderboardIdentifier\nsetDefaultTimeZone\nsetDefaults\nsetDelegate\nsetDelegateQueue\nsetDepthBias\nsetDepthStencilState\nsetDesiredConnectionLatency\nsetDestination\nsetDictionary\nsetDisableActions\nsetDividerImage\nsetDouble\nsetDragState\nsetDrawsOutsideLineFragment\nsetEditing\nsetEnabled\nsetEntities\nsetExposureModeCustomWithDuration\nsetExposureTargetBias\nsetExtraLineFragmentRect\nsetFetchRequestTemplate\nsetFill\nsetFinishedSelectedImage\nsetFloat\nsetFocusModeLockedWithLensPosition\nsetFragmentBuffer\nsetFragmentBufferOffset\nsetFragmentBuffers\nsetFragmentBytes\nsetFragmentSamplerState\nsetFragmentSamplerStates\nsetFragmentTexture\nsetFragmentTextures\nsetFrontFacingWinding\nsetFullscreen\nsetGlyphs\nsetHTTPShouldHandleCookies\nsetHasContent\nsetHeight\nsetHidden\nsetHidesBackButton\nsetHighlighted\nsetHighlightedItemForProperty\nsetHostedPlayer\nsetHostedPlayerReady\nsetIgnoredWords\nsetImage\nsetImageData\nsetImageNamed\nsetIncrementImage\nsetInitialText\nsetInputDataSource\nsetInputGain\nsetInteger\nsetIsAccessibilityElement\nsetItems\nsetKeepAliveTimeout\nsetKeyframeTime\nsetKeyframeValue\nsetKeys\nsetLeftBarButtonItem\nsetLeftBarButtonItems\nsetLineDash\nsetLineFragmentRect\nsetLocalizableMessageWithKey\nsetLocalizedDateFormatFromTemplate\nsetLocation\nsetLongLong\nsetMagnification\nsetMarkedText\nsetMaxAllowedRotationAngle\nsetMaximumTrackImage\nsetMaximumVolumeSliderImage\nsetMediaSelectionCriteria\nsetMenuVisible\nsetMessage\nsetMessageBody\nsetMetadata\nsetMetadataObjectsDelegate\nsetMinimumBackgroundFetchInterval\nsetMinimumTrackImage\nsetMinimumVolumeSliderImage\nsetMode\nsetMute\nsetNavigationBarHidden\nsetNeedsDisplay\nsetNeedsDisplayInMapRect\nsetNeedsDisplayInRect\nsetNeedsLayout\nsetNeedsStatusBarAppearanceUpdate\nsetNeedsUpdateConstraints\nsetNewsstandIconImage\nsetNilValueForKey\nsetNotShownAttribute\nsetNotifyValue\nsetNumberOfRows\nsetNumberOfSteps\nsetObject\nsetObjectZone\nsetOn\nsetOpacity\nsetOpacityRampFromStartOpacity\nsetOrthography\nsetOutputAudioUnit\nsetOutputDataSource\nsetOutputSettings\nsetOverrideTraitCollection\nsetPersistentDomain\nsetPlayer\nsetPopoverContentSize\nsetPositionAdjustment\nsetPositions\nsetPreferredDataSource\nsetPreferredHardwareSampleRate\nsetPreferredIOBufferDuration\nsetPreferredInput\nsetPreferredInputNumberOfChannels\nsetPreferredOutputNumberOfChannels\nsetPreferredPolarPattern\nsetPreferredSampleRate\nsetPrimitiveValue\nsetProgress\nsetProjectionTransform\nsetProperty\nsetProtocolSpecificInformation\nsetPurgeableState\nsetQueueWithItemCollection\nsetQueueWithQuery\nsetRate\nsetRegion\nsetRenderPipelineState\nsetRepresentation\nsetRequiresSecureCoding\nsetResourceData\nsetResourceValue\nsetResourceValues\nsetResponseSerializer\nsetReturnValue\nsetRightBarButtonItem\nsetRightBarButtonItems\nsetRouteButtonImage\nsetRowTypes\nsetSampleBufferDelegate\nsetSamplerState\nsetSamplerStates\nsetScale\nsetScissorRect\nsetScopeBarButtonBackgroundImage\nsetScopeBarButtonDividerImage\nsetScopeBarButtonTitleTextAttributes\nsetSearchFieldBackgroundImage\nsetSelected\nsetSemantic\nsetSessionWithNoConnection\nsetSet\nsetShadowImage\nsetSharedURLCache\nsetShowsCancelButton\nsetSource\nsetStatusBarHidden\nsetStatusBarOrientation\nsetStatusBarStyle\nsetSteeringAngle\nsetStencilReferenceValue\nsetString\nsetStroke\nsetSubject\nsetTXTRecordData\nsetTargetOffsetFromCenter\nsetTargetRect\nsetTemporaryResourceValue\nsetText\nsetTextColor\nsetTextContainer\nsetTexture\nsetTextures\nsetThreadPriority\nsetThreadgroupMemoryLength\nsetThumbImage\nsetTimeZone\nsetTimeoutInterval\nsetTintColor\nsetTitle\nsetTitleColor\nsetTitlePositionAdjustment\nsetTitleShadowColor\nsetTitleTextAttributes\nsetTitleVerticalPositionAdjustment\nsetToRecipients\nsetToolbarHidden\nsetToolbarItems\nsetTorchModeOnWithLevel\nsetTransform\nsetTransformRampFromStartTransform\nsetTranslatesAutoresizingMaskIntoConstraints\nsetTranslatesReferenceBoundsIntoBoundaryWithInsets\nsetTranslation\nsetTransportControlsPlaybackMode\nsetTriangleFillMode\nsetURL\nsetUbiquitous\nsetUp\nsetUserInfoObject\nsetUserTrackingMode\nsetValidationPredicates\nsetValue\nsetValueTransformer\nsetValuesForKeysWithDictionary\nsetVersion\nsetVertexBuffer\nsetVertexBufferOffset\nsetVertexBuffers\nsetVertexBytes\nsetVertexSamplerState\nsetVertexSamplerStates\nsetVertexTexture\nsetVertexTextures\nsetVideoAtPath\nsetViewControllers\nsetViewport\nsetVisibilityResultMode\nsetVisibleMapRect\nsetVolatileDomain\nsetVolume\nsetVolumeRampFromStartVolume\nsetVolumeThumbImage\nsetWeek\nsetWeight\nsetWhiteBalanceModeLockedWithDeviceWhiteBalanceGains\nsetWidth\nsetWithArray\nsetWithCapacity\nsetWithObject\nsetWithObjects\nsetWithSet\nsetZoomScale\nsettings\nsettingsForTypes\nshader\nshaderModifiers\nshaderWithFileNamed\nshaderWithSource\nshadowBias\nshadowBlurRadius\nshadowCastBitMask\nshadowColor\nshadowImage\nshadowImageForToolbarPosition\nshadowMapSize\nshadowMode\nshadowOffset\nshadowOpacity\nshadowPath\nshadowRadius\nshadowSampleCount\nshadowedBitMask\nshapeNodeWithCircleOfRadius\nshapeNodeWithEllipseInRect\nshapeNodeWithEllipseOfSize\nshapeNodeWithPath\nshapeNodeWithPoints\nshapeNodeWithRect\nshapeNodeWithRectOfSize\nshapeNodeWithSplinePoints\nshapeWithGeometry\nshapeWithNode\nshapeWithPath\nshapeWithShapes\nsharedAccelerometer\nsharedAccessoryManager\nsharedApplication\nsharedClient\nsharedCommandCenter\nsharedContainerIdentifier\nsharedContentManager\nsharedCredentialStorage\nsharedFrameworksPath\nsharedFrameworksURL\nsharedHTTPCookieStorage\nsharedInstance\nsharedKeySetForKeys\nsharedLibrary\nsharedManager\nsharedMatchmaker\nsharedMenuController\nsharedPhotoLibrary\nsharedPrintController\nsharedSecretReference\nsharedSession\nsharedSupportPath\nsharedSupportURL\nsharedTurnBasedEventHandler\nsharedURLCache\nsharegroup\nshiftIndexesStartingAtIndex\nshininess\nshippingAddress\nshippingMethod\nshippingMethods\nshippingType\nshort\nshortMonthSymbols\nshortQuarterSymbols\nshortStandaloneMonthSymbols\nshortStandaloneQuarterSymbols\nshortStandaloneWeekdaySymbols\nshortValue\nshortWeekdaySymbols\nshouldArchiveValueForKey\nshouldAutomaticallyForwardAppearanceMethods\nshouldAutomaticallyForwardRotationMethods\nshouldAutoplay\nshouldAutorotate\nshouldAutorotateToInterfaceOrientation\nshouldBadge\nshouldBeArchived\nshouldBeRequiredToFailByGestureRecognizer\nshouldCenterFilter\nshouldChangeTextInRange\nshouldCullNonVisibleNodes\nshouldEnableEffects\nshouldEnableLimits\nshouldGroupAccessibilityChildren\nshouldIndentWhileEditing\nshouldInvalidateLayoutForBoundsChange\nshouldInvalidateLayoutForPreferredLayoutAttributes\nshouldOptimizeForNetworkUse\nshouldPerformSegueWithIdentifier\nshouldPresentInFullscreen\nshouldPresentInterstitialAd\nshouldProcessNamespaces\nshouldRasterize\nshouldRefreshRefetchedObjects\nshouldRemovePresentersView\nshouldReportNamespacePrefixes\nshouldRequireFailureOfGestureRecognizer\nshouldResolveExternalEntities\nshouldSendContentAvailable\nshouldSetDefaultLeaderboard\nshouldShowBannerForLocallyCompletedChallenge\nshouldShowBannerForLocallyReceivedChallenge\nshouldShowBannerForRemotelyCompletedChallenge\nshouldShowCancelConfirmation\nshouldShowLinkedPeople\nshow\nshowAnnotations\nshowBannerWithTitle\nshowBluetoothAccessoryPickerWithNameFilter\nshowCGGlyphs\nshowDetailViewController\nshowExistingMatches\nshowFromBarButtonItem\nshowFromRect\nshowFromTabBar\nshowFromToolbar\nshowInView\nshowViewController\nshowingAppNames\nshowingDeleteConfirmation\nshowsBookmarkButton\nshowsBuildings\nshowsCameraControls\nshowsCancelButton\nshowsCloudItems\nshowsCompass\nshowsCompletionBanner\nshowsControlCharacters\nshowsDeviceMovementDisplay\nshowsDoneButton\nshowsDrawCount\nshowsFPS\nshowsFields\nshowsHorizontalScrollIndicator\nshowsInvisibleCharacters\nshowsNodeCount\nshowsNumberOfCopies\nshowsPageRange\nshowsPaperSelectionForLoadedPapers\nshowsPhysics\nshowsPlaybackControls\nshowsPointsOfInterest\nshowsQuadCount\nshowsReorderControl\nshowsRouteButton\nshowsScale\nshowsScopeBar\nshowsSearchResultsButton\nshowsSelectionIndicator\nshowsStatistics\nshowsTouchWhenHighlighted\nshowsUserLocation\nshowsVerticalScrollIndicator\nshowsVolumeSlider\nshowsZoomControls\nshuffleMode\nsiemenUnit\nsiemenUnitWithMetricPrefix\nsignal\nsignatureWithObjCTypes\nsignedURLRequest\nsignificantLocationChangeMonitoringAvailable\nsimulatesAskToBuyInSandbox\nsize\nsizeForChildContentContainer\nsizeForNumberOfPages\nsizeFromBannerContentSizeIdentifier\nsizeFunction\nsizeThatFits\nsizeToFit\nsizeWithAttributes\nsizeWithFont\nskeleton\nskinner\nskinnerWithBaseGeometry\nskipBackwardCommand\nskipCount\nskipDescendants\nskipDescendents\nskipForwardCommand\nskipToBeginning\nskipToNextItem\nskipToPreviousItem\nsleepForTimeInterval\nsleepUntilDate\nslice\nsmallSystemFontSize\nsmallestEncoding\nsmoothAutoFocusEnabled\nsmoothAutoFocusSupported\nsmoothness\nsnapshot\nsnapshotData\nsnapshotViewAfterScreenUpdates\nsocket\nsocketType\nsongsQuery\nsortDescriptorWithKey\nsortDescriptors\nsortRange\nsortUsingComparator\nsortUsingDescriptors\nsortUsingFunction\nsortUsingSelector\nsortWithOptions\nsortedArrayFromArray\nsortedArrayHint\nsortedArrayUsingComparator\nsortedArrayUsingDescriptors\nsortedArrayUsingFunction\nsortedArrayUsingSelector\nsortedArrayWithOptions\nsortedCookiesUsingDescriptors\nsortingMode\nsoundName\nsource\nsourceAlphaBlendFactor\nsourceContext\nsourceEndpoint\nsourceEntityForEntityMapping\nsourceEntityName\nsourceEntityVersionHash\nsourceExpression\nsourceFrame\nsourceFrameByTrackID\nsourceIdentifier\nsourceInstancesForEntityMappingNamed\nsourceModel\nsourceObject\nsourcePixelBufferAttributes\nsourceRGBBlendFactor\nsourceRect\nsourceTimeRanges\nsourceTrackID\nsourceTrackIDs\nsourceType\nsourceURL\nsourceVideoAverageFrameDuration\nsourceVideoMinFrameDuration\nsourceView\nsourceViewController\nsourceWithIdentifier\nsources\nspeakUtterance\nspeaking\nspecular\nspecularColor\nspeechString\nspeechSynthesizer\nspeechUtteranceWithString\nspeechVoices\nspeed\nspeedBy\nspeedFactor\nspeedInKilometersPerHour\nspeedTo\nspellCheckingResultWithRange\nspellCheckingType\nsphereWithRadius\nspin\nspinRange\nspineLocation\nsplat\nsplitViewController\nsplitViewControllerPreferredInterfaceOrientationForPresentation\nsplitViewControllerSupportedInterfaceOrientations\nspotCutoff\nspotDirection\nspotExponent\nspotInnerAngle\nspotOuterAngle\nspreadingAngle\nspringField\nspriteNodeWithColor\nspriteNodeWithImageNamed\nspriteNodeWithTexture\nssid\nstackSize\nstalenessInterval\nstandaloneMonthSymbols\nstandaloneQuarterSymbols\nstandaloneWeekdaySymbols\nstandard\nstandardUserDefaults\nstandardizedURL\nstart\nstartAccelerometerUpdates\nstartAccelerometerUpdatesToQueue\nstartAccessingSecurityScopedResource\nstartActivityUpdatesToQueue\nstartAdvertising\nstartAdvertisingPeer\nstartAndReturnError\nstartAnimating\nstartAnimatingWithImagesInRange\nstartBrowsingForNearbyPlayersWithHandler\nstartBrowsingForNearbyPlayersWithReachableHandler\nstartBrowsingForPeers\nstartCachingImagesForAssets\nstartContentEditingWithInput\nstartDate\nstartDateComponents\nstartDeviceMotionUpdates\nstartDeviceMotionUpdatesToQueue\nstartDeviceMotionUpdatesUsingReferenceFrame\nstartDownloadingUbiquitousItemAtURL\nstartDownloads\nstartGyroUpdates\nstartGyroUpdatesToQueue\nstartInteractiveTransition\nstartInteractiveTransitionToCollectionViewLayout\nstartLoading\nstartMagnetometerUpdates\nstartMagnetometerUpdatesToQueue\nstartMonitoring\nstartMonitoringForRegion\nstartMonitoringSignificantLocationChanges\nstartMonitoringVisits\nstartNote\nstartOfDayForDate\nstartPage\nstartPedometerUpdatesFromDate\nstartPoint\nstartProgress\nstartProvidingItemAtURL\nstartQuery\nstartRangingBeaconsInRegion\nstartReading\nstartRecordingToOutputFileURL\nstartRelativeAltitudeUpdatesToQueue\nstartRunning\nstartSearchingForNewAccessories\nstartSearchingForUnconfiguredAccessoriesMatchingPredicate\nstartSessionAtSourceTime\nstartStepCountingUpdatesToQueue\nstartStreamWithName\nstartUpdatingHeading\nstartUpdatingLocation\nstartVPNTunnelAndReturnError\nstartVideoCapture\nstartVideoCompositionRequest\nstartVoiceChatWithParticipantID\nstartWirelessControllerDiscoveryWithCompletionHandler\nstartWithCompletionHandler\nstartWithQueue\nstartWriting\nstarted\nstartupTime\nstate\nstaticBody\nstationary\nstatistics\nstatisticsForDate\nstatisticsUpdateHandler\nstatus\nstatusBarFrame\nstatusBarHidden\nstatusBarOrientation\nstatusBarOrientationAnimationDuration\nstatusBarStyle\nstatusBarVisibility\nstatusCode\nstatusForApplicationPermission\nstatusOfValueForKey\nsteeringAxis\nstencilAttachment\nstencilAttachmentPixelFormat\nstencilCompareFunction\nstencilFailureOperation\nstepByCount\nstepFunction\nstepRate\nstepValue\nsteps\nstereoPan\nstillImageStabilizationActive\nstillImageStabilizationSupported\nstoneUnit\nstop\nstopAccelerometerUpdates\nstopAccessingSecurityScopedResource\nstopActivityUpdates\nstopAdvertising\nstopAdvertisingPeer\nstopAnimating\nstopBrowsingForNearbyPlayers\nstopBrowsingForPeers\nstopCachingImagesForAllAssets\nstopCachingImagesForAssets\nstopCommand\nstopDeviceMotionUpdates\nstopGyroUpdates\nstopLoading\nstopMagnetometerUpdates\nstopMonitoring\nstopMonitoringForRegion\nstopMonitoringSignificantLocationChanges\nstopMonitoringVisits\nstopNote\nstopPedometerUpdates\nstopProvidingItemAtURL\nstopQuery\nstopRangingBeaconsInRegion\nstopRecording\nstopRelativeAltitudeUpdates\nstopRequestingMediaData\nstopRunning\nstopScan\nstopSearchingForNewAccessories\nstopSearchingForUnconfiguredAccessories\nstopSpeakingAtBoundary\nstopStepCountingUpdates\nstopUpdatingHeading\nstopUpdatingLocation\nstopVPNTunnel\nstopVideoCapture\nstopVoiceChatWithParticipantID\nstopWirelessControllerDiscovery\nstopped\nstoragePolicy\nstoreAction\nstoreCachedResponse\nstoreCookies\nstoredInExternalRecord\nstoredValueForKey\nstoryboard\nstoryboardWithName\nstream\nstreamError\nstreamStatus\nstreamingContentKeyRequestDataForApp\nstrength\nstrengthBy\nstrengthTo\nstretchFactor\nstretchableImageWithLeftCapWidth\nstride\nstrikethroughGlyphRange\nstring\nstringArrayForKey\nstringByAbbreviatingWithTildeInPath\nstringByAddingPercentEncodingWithAllowedCharacters\nstringByAddingPercentEscapesUsingEncoding\nstringByAppendingFormat\nstringByAppendingPathComponent\nstringByAppendingPathExtension\nstringByAppendingString\nstringByDeletingLastPathComponent\nstringByDeletingPathExtension\nstringByEvaluatingJavaScriptFromString\nstringByExpandingTildeInPath\nstringByFoldingWithOptions\nstringByPaddingToLength\nstringByRemovingPercentEncoding\nstringByReplacingCharactersInRange\nstringByReplacingMatchesInString\nstringByReplacingOccurrencesOfString\nstringByReplacingPercentEscapesUsingEncoding\nstringByResolvingSymlinksInPath\nstringByStandardizingPath\nstringByTrimmingCharactersInSet\nstringEditedInRange\nstringEncodingForData\nstringForKey\nstringForObjectValue\nstringFromByteCount\nstringFromDate\nstringFromDateComponents\nstringFromDistance\nstringFromJoules\nstringFromKilograms\nstringFromMeters\nstringFromNumber\nstringFromTimeInterval\nstringFromValue\nstringRepresentation\nstringValue\nstringWithCString\nstringWithCapacity\nstringWithCharacters\nstringWithContentsOfFile\nstringWithContentsOfURL\nstringWithFileSystemRepresentation\nstringWithFormat\nstringWithString\nstringWithUTF8String\nstrings\nstringsByAppendingPaths\nstroke\nstrokeColor\nstrokeEnd\nstrokePath\nstrokeShader\nstrokeStart\nstrokeTexture\nstrokeWithBlendMode\nstrongObjectsPointerArray\nstrongToStrongObjectsMapTable\nstrongToWeakObjectsMapTable\nstructType\nstructuredLocation\nstyle\nsubAdministrativeArea\nsubLocality\nsubThoroughfare\nsubarrayWithRange\nsubdataWithRange\nsubdivisionLevel\nsubentities\nsubentitiesByName\nsubgroups\nsubject\nsubjectAreaChangeMonitoringEnabled\nsublayerTransform\nsublayers\nsubpathsAtPath\nsubpathsOfDirectoryAtPath\nsubpredicates\nsubscribed\nsubscribedCentrals\nsubscriber\nsubscriberCellularProvider\nsubscriberCellularProviderDidUpdateNotifier\nsubscriptionID\nsubscriptionIDs\nsubscriptionIDsToDelete\nsubscriptionOptions\nsubscriptionType\nsubscriptionsToSave\nsubstringFromIndex\nsubstringToIndex\nsubstringWithRange\nsubtitle\nsubtype\nsubviews\nsuggestedFilename\nsumQuantity\nsumQuantityForSource\nsummaryItemWithLabel\nsuperentity\nsuperlayer\nsuperview\nsupportedEventAvailabilities\nsupportedFileTypes\nsupportedInterfaceOrientations\nsupportedInterfaceOrientationsForWindow\nsupportedJobTypes\nsupportedNetworks\nsupportedPlaybackRates\nsupportedPolarPatterns\nsupportsAVCaptureSessionPreset\nsupportsColor\nsupportsContinuationStreams\nsupportsDuplex\nsupportsFeatureSet\nsupportsRandomAccess\nsupportsSecureCoding\nsupportsURL\nsupportsVideoFieldMode\nsupportsVideoMaxFrameDuration\nsupportsVideoMinFrameDuration\nsupportsVideoMirroring\nsupportsVideoOrientation\nsupportsVideoStabilization\nsuppressesIncrementalRendering\nsuppressesPlayerRendering\nsuspend\nsuspended\nsuspensionCompression\nsuspensionDamping\nsuspensionRestLength\nsuspensionStiffness\nswitchBitrate\nsymbolCharacterSet\nsymbolicLink\nsymbolicLinkDestination\nsymbolicLinkDestinationURL\nsymbolicTraits\nsynchronize\nsynchronizeFile\nsynchronizedLayerWithPlayerItem\nsynchronous\nsystemFontOfSize\nsystemFontSize\nsystemID\nsystemLayoutFittingSizeDidChangeForChildContentContainer\nsystemLayoutSizeFittingSize\nsystemLocale\nsystemMusicPlayer\nsystemName\nsystemSpawnedOnCollision\nsystemSpawnedOnDying\nsystemSpawnedOnLiving\nsystemTimeZone\nsystemUptime\nsystemVersion\ntAddressMode\ntabBar\ntabBarController\ntabBarControllerPreferredInterfaceOrientationForPresentation\ntabBarControllerSupportedInterfaceOrientations\ntabBarItem\ntabStops\ntable\ntableFooterView\ntableHeaderView\ntableView\ntag\ntagAtIndex\ntagSchemes\ntagsInRange\ntailIndent\ntakePicture\ntakeStoredValue\ntakeValue\ntakeValuesFromDictionary\ntapCount\ntapHandler\ntarget\ntargetContentOffsetForProposedContentOffset\ntargetDisplayModeForActionInSplitViewController\ntargetForAction\ntargetFrame\ntargetNode\ntargetOffsetFromCenterForItem\ntargetPosition\ntargetTransform\ntargetValue\ntargetViewControllerForAction\ntargets\ntask\ntaskDescription\ntaskIdentifier\ntearDown\ntechnique\ntechniqueBySequencingTechniques\ntechniqueWithDictionary\ntemperatureAndTintValuesForDeviceWhiteBalanceGains\ntemporaryDirectoryURLForNewVersionOfItemAtURL\ntemporaryID\ntensionValues\ntestExample\ntestPerformanceExample\ntext\ntextAlignment\ntextAttributesForNegativeInfinity\ntextAttributesForNegativeValues\ntextAttributesForNil\ntextAttributesForNotANumber\ntextAttributesForPositiveInfinity\ntextAttributesForPositiveValues\ntextAttributesForZero\ntextColor\ntextContainer\ntextContainerChangedGeometry\ntextContainerForGlyphAtIndex\ntextContainerInset\ntextContainers\ntextDidChange\ntextDocumentProxy\ntextEncodingName\ntextField\ntextFieldAtIndex\ntextFieldDidBeginEditing\ntextFieldDidEndEditing\ntextFieldShouldBeginEditing\ntextFieldShouldClear\ntextFieldShouldEndEditing\ntextFieldShouldReturn\ntextFields\ntextForGuidedAccessRestrictionWithIdentifier\ntextInRange\ntextInputContextIdentifier\ntextInputMode\ntextInputView\ntextLabel\ntextMarkupAttributes\ntextRangeFromPosition\ntextRectForBounds\ntextSelector\ntextStorage\ntextStyleRuleWithTextMarkupAttributes\ntextStyleRules\ntextStyleRulesFromPropertyList\ntextStylingAtPosition\ntextStylingResolution\ntextView\ntextViewDidBeginEditing\ntextViewDidChange\ntextViewDidChangeSelection\ntextViewDidEndEditing\ntextViewShouldBeginEditing\ntextViewShouldEndEditing\ntextWillChange\ntextWithString\ntexture\ntexture2DDescriptorWithPixelFormat\ntexture2d0\ntexture2d0texture2d1\ntextureByApplyingCIFilter\ntextureByGeneratingNormalMap\ntextureByGeneratingNormalMapWithSmoothness\ntextureCoordinatesWithMappingChannel\ntextureCubeDescriptorWithPixelFormat\ntextureCubeMap\ntextureDataType\ntextureFromNode\ntextureNamed\ntextureNames\ntextureNoiseWithSmoothness\ntextureOrder\ntextureOrigin\ntextureRect\ntextureType\ntextureValue\ntextureVectorNoiseWithSmoothness\ntextureWithCGImage\ntextureWithContentsOfData\ntextureWithContentsOfFile\ntextureWithContentsOfURL\ntextureWithData\ntextureWithImage\ntextureWithImageNamed\ntextureWithRect\nthe\nthoroughfare\nthousandSeparator\nthreadDictionary\nthreadExecutionWidth\nthreadPriority\nthreadgroupMemoryAlignment\nthreadgroupMemoryDataSize\nthumbImageForState\nthumbRectForBounds\nthumbTintColor\nthumbnail\nthumbnailImageAtTime\ntileSize\ntime\ntimeInterval\ntimeIntervalSince1970\ntimeIntervalSinceDate\ntimeIntervalSinceNow\ntimeIntervalSinceReferenceDate\ntimeMapping\ntimeOffset\ntimeRange\ntimeRemaining\ntimeScope\ntimeSinceFirstResume\ntimeSinceLastDraw\ntimeSinceLastResume\ntimeSinceLastUpdate\ntimeStep\ntimeStyle\ntimeWithAudioTimeStamp\ntimeWithHostTime\ntimeWithSampleTime\ntimeZone\ntimeZoneDataVersion\ntimeZoneForSecondsFromGMT\ntimeZoneWithAbbreviation\ntimeZoneWithName\ntimedMetadata\ntimeoutDate\ntimeoutInterval\ntimeoutIntervalForRequest\ntimeoutIntervalForResource\ntimerWithTimeInterval\ntimestamp\ntimingFunction\ntimingFunctions\ntimingMode\ntintAdjustmentMode\ntintColor\ntintColorDidChange\ntitle\ntitleColorForState\ntitleEdgeInsets\ntitleForSegmentAtIndex\ntitleForState\ntitleLabel\ntitlePositionAdjustment\ntitlePositionAdjustmentForBarMetrics\ntitlePropertyForGroupingType\ntitleRectForContentRect\ntitleShadowColorForState\ntitleShadowOffset\ntitleTextAttributes\ntitleTextAttributesForState\ntitleVerticalPositionAdjustmentForBarMetrics\ntitleView\ntoArray\ntoBool\ntoDate\ntoDictionary\ntoDouble\ntoInt32\ntoMany\ntoNumber\ntoObject\ntoObjectOfClass\ntoPoint\ntoRange\ntoRect\ntoSize\ntoString\ntoUInt32\ntoValue\ntoggleBoldface\ntoggleItalics\ntogglePlayPauseCommand\ntoggleUnderline\ntoken\ntokenizer\ntolerance\ntoolbar\ntoolbarHidden\ntoolbarItems\ntoolbarsVisibility\ntopCapHeight\ntopItem\ntopLayoutGuide\ntopLeft\ntopRadius\ntopRight\ntopViewController\ntorchActive\ntorchAvailable\ntorchLevel\ntorchMode\ntorusWithRingRadius\ntotalBounds\ntotalCostLimit\ntotalDistance\ntotalEnergyBurned\ntotalUnitCount\ntouchInside\ntouchesBegan\ntouchesCancelled\ntouchesEnded\ntouchesForGestureRecognizer\ntouchesForView\ntouchesForWindow\ntouchesMoved\ntouchesShouldBegin\ntouchesShouldCancelInContentView\ntrack\ntrackGroups\ntrackID\ntrackIDs\ntrackImage\ntrackRectForBounds\ntrackTintColor\ntrackWithTrackID\ntracking\ntrackingFrameCount\ntrackingID\ntracks\ntracksWithMediaCharacteristic\ntracksWithMediaType\ntraitCollection\ntraitCollectionDidChange\ntraitCollectionWithDisplayScale\ntraitCollectionWithHorizontalSizeClass\ntraitCollectionWithTraitsFromCollections\ntraitCollectionWithUserInterfaceIdiom\ntraitCollectionWithVerticalSizeClass\ntransaction\ntransactionDate\ntransactionIdentifier\ntransactionReceipt\ntransactionState\ntransactions\ntransferDuration\ntransform\ntransform3D\ntransformConstraintInWorldSpace\ntransformedMetadataObjectForMetadataObject\ntransformedValue\ntransformedValueClass\ntransient\ntransientAssetCollectionWithAssetFetchResult\ntransientAssetCollectionWithAssets\ntransientCollectionListWithCollections\ntransientCollectionListWithCollectionsFetchResult\ntransitInformationCheckingResultWithRange\ntransitionCoordinator\ntransitionDuration\ntransitionFromView\ntransitionFromViewController\ntransitionProgress\ntransitionStyle\ntransitionWasCancelled\ntransitionWithCIFilter\ntransitionWithView\ntransitioningDelegate\ntranslatesAutoresizingMaskIntoConstraints\ntranslatesReferenceBoundsIntoBoundary\ntranslationInView\ntranslucent\ntransparency\ntransparencyMode\ntransparent\ntransportControlsPlaybackMode\ntransportControlsSpeed\ntransportControlsSupported\ntransportType\ntrashItemAtURL\ntriggers\ntrueHeading\ntruncateFileAtOffset\ntruncatedGlyphRangeInLineFragmentForGlyphAtIndex\ntruncationMode\ntryLock\ntryLockWhenCondition\nttl\ntubeWithInnerRadius\nturbulenceFieldWithSmoothness\nturnBasedMatchmakerDelegate\nturnBasedMatchmakerViewController\nturnBasedMatchmakerViewControllerWasCancelled\nturnIcon\ntwoDigitStartDate\ntype\ntypes\ntypingAttributes\nubiquityIdentityToken\nuint8_t\nunableToSetNilForKey\nunachievedDescription\nuname\nunarchiveObjectWithData\nunarchiveObjectWithFile\nunarchiver\nunarchiverDidFinish\nunarchiverWillFinish\nunblockAccessory\nunconfiguredAccessories\nunderPageBackgroundColor\nunderage\nunderlineGlyphRange\nunderlyingQueue\nundo\nundoActionIsDiscardable\nundoActionName\nundoManager\nundoMenuItemTitle\nundoMenuTitleForUndoActionName\nundoNestedGroup\nundoRegistrationEnabled\nundoing\nunhide\nuniformNamed\nuniformType\nuniformTypeIdentifier\nuniformWithName\nuniforms\nunionHashTable\nunionOrderedSet\nunionSet\nuniqueID\nunitDividedByUnit\nunitFromEnergyFormatterUnit\nunitFromLengthFormatterUnit\nunitFromMassFormatterUnit\nunitFromString\nunitMultipliedByUnit\nunitRaisedToPower\nunitString\nunitStringFromJoules\nunitStringFromKilograms\nunitStringFromMeters\nunitStringFromValue\nunitStyle\nunits\nunitsStyle\nunknown\nunknownPersonViewController\nunknownPersonViewDelegate\nunlearnWord\nunload\nunlock\nunlockForConfiguration\nunlockWithCondition\nunmarkText\nunprojectPoint\nunpublish\nunregisterAllListeners\nunregisterChangeObserver\nunregisterClass\nunregisterForLocalNotifications\nunregisterForRemoteNotifications\nunregisterImageWithTraitCollection\nunregisterListener\nunresolvedConflictVersionsOfItemAtURL\nunscheduleFromRunLoop\nunsignedIntegerValue\nunusedTrackID\nup\nupdate\nupdateAction\nupdateAssociatedServiceType\nupdateAuthorizationData\nupdateCacheNode\nupdateChangeCount\nupdateChangeCountWithToken\nupdateCollisionPairs\nupdateConstraints\nupdateConstraintsIfNeeded\nupdateCurrentPageDisplay\nupdateFireDate\nupdateFromPath\nupdateInteractiveTransition\nupdateInterval\nupdateItemUsingCurrentState\nupdateMeters\nupdateName\nupdatePrimaryHome\nupdateRecurrence\nupdateSearchResultsForSearchController\nupdateTargetValue\nupdateTimeZone\nupdateUserActivity\nupdateUserActivityState\nupdateValue\nupdateViewConstraints\nupdateWithValues\nupdated\nupdatedObjects\nupdating\nuploadTaskWithRequest\nuploadTaskWithStreamedRequest\nupperAngleLimit\nupperDistanceLimit\nupperLimit\nuppercaseLetterCharacterSet\nuppercaseString\nuppercaseStringWithLocale\nurl\nuseApplicationAudioSession\nuseConstantColor\nuseCredential\nuseDNSServers\nuseExtendedAuthentication\nuseLayoutToLayoutNavigationTransitions\nuseStoredAccessor\nusedRectForTextContainer\nuser\nuserAcceleration\nuserActivity\nuserActivityWasContinued\nuserActivityWillSave\nuserContentController\nuserData\nuserFullName\nuserGrouping\nuserInfo\nuserInput\nuserInteractionEnabled\nuserInteractionNoLongerPermittedForError\nuserInterfaceIdiom\nuserInterfaceLayoutDirection\nuserLocation\nuserLocationVisible\nuserRecordID\nuserRecordIDs\nuserScripts\nuserTrackingMode\nusername\nusers\nusesAirPlayVideoWhileAirPlayScreenIsActive\nusesApplicationAudioSession\nusesBackgroundSession\nusesEllipsoidalExtent\nusesEvenOddFillRule\nusesExternalPlaybackWhileExternalScreenIsActive\nusesFontLeading\nusesGroupingSeparator\nusesMipmaps\nusesOrthographicProjection\nusesPreciseCollisionDetection\nusesSceneTimeBase\nusesSignificantDigits\nusesStoreSpecificMigrationManager\nusesStrongWriteBarrier\nusesWeakReadAndWriteBarriers\nvBasicOps\nvBigNum\nvDSP\nvDSP_translate\nvForce\nvImage\nvImage_CVUtilities\nvImage_Types\nvImage_Utilities\nvalid\nvalidDate\nvalidTypes\nvalidateContent\nvalidateForDelete\nvalidateForInsert\nvalidateForUpdate\nvalidateTrackSegments\nvalidateValue\nvalidationPredicates\nvalidationWarnings\nvalue\nvalueAtIndex\nvalueChangedHandler\nvalueExpression\nvalueForAnimatedKey\nvalueForAttribute\nvalueForComponent\nvalueForHTTPHeaderField\nvalueForKey\nvalueForKeyPath\nvalueForPasteboardType\nvalueForProperty\nvalueForPropertyDescription\nvalueForUndefinedKey\nvalueFunction\nvalueListAttributes\nvalueLists\nvalueOfAttribute\nvaluePending\nvaluePointerFunctions\nvalueTransformerForName\nvalueTransformerName\nvalueTransformerNames\nvalueWithBool\nvalueWithBytes\nvalueWithCATransform3D\nvalueWithCGAffineTransform\nvalueWithCGPoint\nvalueWithCGRect\nvalueWithCGSize\nvalueWithCGVector\nvalueWithCMTime\nvalueWithCMTimeMapping\nvalueWithCMTimeRange\nvalueWithDouble\nvalueWithInt32\nvalueWithJSValueRef\nvalueWithMKCoordinate\nvalueWithMKCoordinateSpan\nvalueWithNewArrayInContext\nvalueWithNewErrorFromMessage\nvalueWithNewObjectInContext\nvalueWithNewRegularExpressionFromPattern\nvalueWithNonretainedObject\nvalueWithNullInContext\nvalueWithObject\nvalueWithPoint\nvalueWithPointer\nvalueWithRange\nvalueWithRect\nvalueWithSCNMatrix4\nvalueWithSCNVector3\nvalueWithSCNVector4\nvalueWithSize\nvalueWithUIEdgeInsets\nvalueWithUIOffset\nvalueWithUInt32\nvalueWithUndefinedInContext\nvalues\nvaluesForAttributes\nvaluesForKeys\nvaluesForPasteboardType\nvariable\nvecLib\nvecLibTypes\nvector\nvectorCount\nvectorOps\nvectorWithCGAffineTransform\nvectorWithCGPoint\nvectorWithCGRect\nvectorWithString\nvectorWithValues\nvectorWithX\nvehicleWithChassisBody\nvelocity\nvelocityFactor\nvelocityFieldWithTexture\nvelocityFieldWithVector\nvelocityInView\nvelocityRange\nvendorName\nversion\nversionForClassName\nversionHash\nversionHashModifier\nversionIdentifiers\nversionOfItemAtURL\nvertexArguments\nvertexAttributes\nvertexDescriptor\nvertexFunction\nvertexShader\nverticalAccuracy\nverticalAlignmentMode\nverticalSizeClass\nveryShortMonthSymbols\nveryShortStandaloneMonthSymbols\nveryShortStandaloneWeekdaySymbols\nveryShortWeekdaySymbols\nvfp\nvideoAtPathIsCompatibleWithSavedPhotosAlbum\nvideoBinned\nvideoBounds\nvideoComposition\nvideoCompositionCoreAnimationToolWithAdditionalLayer\nvideoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer\nvideoCompositionCoreAnimationToolWithPostProcessingAsVideoLayers\nvideoCompositionInstruction\nvideoCompositionLayerInstruction\nvideoCompositionLayerInstructionWithAssetTrack\nvideoCompositionWithPropertiesOfAsset\nvideoEditorController\nvideoEditorControllerDidCancel\nvideoFieldMode\nvideoFieldOfView\nvideoGravity\nvideoHDREnabled\nvideoHDRSupported\nvideoMaxFrameDuration\nvideoMaxScaleAndCropFactor\nvideoMaxZoomFactor\nvideoMaximumDuration\nvideoMinFrameDuration\nvideoMirrored\nvideoNodeWithAVPlayer\nvideoNodeWithVideoFileNamed\nvideoNodeWithVideoURL\nvideoOrientation\nvideoPath\nvideoPreviewLayer\nvideoQuality\nvideoRect\nvideoScaleAndCropFactor\nvideoSettings\nvideoStabilizationEnabled\nvideoStabilizationSupported\nvideoSupportedFrameRateRanges\nvideoTracks\nvideoZoomFactor\nvideoZoomFactorUpscaleThreshold\nview\nviewControllerForKey\nviewControllerForUnwindSegueAction\nviewControllerWithRestorationIdentifierPath\nviewControllers\nviewDidAppear\nviewDidDisappear\nviewDidLayoutSubviews\nviewDidLoad\nviewDidUnload\nviewFlipsideBackgroundColor\nviewForAnnotation\nviewForBaselineLayout\nviewForKey\nviewForOverlay\nviewForRow\nviewForZoomingInScrollView\nviewPrintFormatter\nviewState\nviewWillAppear\nviewWillDisappear\nviewWillLayoutSubviews\nviewWillTransitionToSize\nviewWillUnload\nviewWithTag\nviewportSize\nvirtualMachine\nvisibilityResultBuffer\nvisible\nvisibleCells\nvisibleMapRect\nvisibleRect\nvisibleViewController\nvoice\nvoiceChatService\nvoiceChatWithName\nvoiceWithLanguage\nvoid\nvolatileDomainForName\nvolatileDomainNames\nvolume\nvolumeSliderRectForBounds\nvolumeThumbImageForState\nvolumeThumbRectForBounds\nvolumeWarningSliderImage\nvortexField\nwait\nwaitForDataInBackgroundAndNotify\nwaitForDataInBackgroundAndNotifyForModes\nwaitForDuration\nwaitUntilAllOperationsAreFinished\nwaitUntilCompleted\nwaitUntilDate\nwaitUntilFinished\nwaitUntilScheduled\nwalking\nwantsDefaultContentAppearance\nwantsFullScreenLayout\nwantsIncrementalChangeDetails\nwantsSoftwareDimming\nwarmupDuration\nweakObjectsHashTable\nweakObjectsPointerArray\nweakToStrongObjectsMapTable\nweakToWeakObjectsMapTable\nwebServiceURL\nwebView\nwebViewDidFinishLoad\nwebViewDidStartLoad\nwebpageURL\nweek\nweekNumber\nweekOfMonth\nweekOfYear\nweekday\nweekdayOrdinal\nweekdaySymbols\nweeksOfTheYear\nweightForTargetAtIndex\nwetDryMix\nwheelWithNode\nwheels\nwhiteBalanceMode\nwhiteColor\nwhitespaceAndNewlineCharacterSet\nwhitespaceCharacterSet\nwidgetController\nwidgetMarginInsetsForProposedMarginInsets\nwidgetPerformUpdateWithCompletionHandler\nwidth\nwidthForSegmentAtIndex\nwidthSegmentCount\nwidthTracksTextView\nwillAccessValueForKey\nwillActivate\nwillAnimateFirstHalfOfRotationToInterfaceOrientation\nwillAnimateRotationToInterfaceOrientation\nwillAnimateSecondHalfOfRotationFromInterfaceOrientation\nwillChange\nwillChangeValueForKey\nwillDismissSearchController\nwillMoveFromView\nwillMoveToAnimator\nwillMoveToParentViewController\nwillMoveToSuperview\nwillMoveToWindow\nwillPresentActionSheet\nwillPresentAlertView\nwillPresentSearchController\nwillRemoveCacheNodes\nwillRemoveFromPersistentStoreCoordinator\nwillRemoveSubview\nwillRotateToInterfaceOrientation\nwillSave\nwillTransitionFromLayout\nwillTransitionToState\nwillTransitionToTraitCollection\nwillTurnIntoFault\nwindow\nwindowLevel\nwindows\nwindowsLocaleCodeFromLocaleIdentifier\nwirelessRouteActive\nwirelessRoutesAvailable\nworkoutActivityType\nworkoutEventWithType\nworkoutEvents\nworkoutType\nworkoutWithActivityType\nworldCoordinates\nworldNormal\nworldSpaceDistance\nworldTransform\nwrapS\nwrapT\nwrapped\nwraps\nwrite\nwriteAdditionalContent\nwriteBookmarkData\nwriteContents\nwriteData\nwriteFromBuffer\nwriteImageDataToSavedPhotosAlbum\nwriteImageToSavedPhotosAlbum\nwriteJSONObject\nwriteMask\nwriteModifiedImageDataToSavedPhotosAlbum\nwriteModifiedVideoAtPathToSavedPhotosAlbum\nwritePlaceholderAtURL\nwritePropertyList\nwriteToFile\nwriteToURL\nwriteValue\nwriteVideoAtPathToSavedPhotosAlbum\nwriteabilityHandler\nwritesToDepthBuffer\nwritingDirection\nwritingIntentWithURL\nx\nxAcceleration\nxAxis\nxFov\nxHeight\nxScale\nxSize\nxSizeySizezSize\nxcschememanagement\ny\nyAcceleration\nyAxis\nyFov\nyScale\nyaw\nyawAngle\nyear\nyearForWeekOfYear\nyellowColor\nz\nzAcceleration\nzFar\nzIndex\nzNear\nzPosition\nzRotation\nzero\nzeroFormattingBehavior\nzeroPadsFractionDigits\nzeroSymbol\nzoneID\nzoneName\nzones\nzoomBouncing\nzoomEnabled\nzoomScale\nzoomToRect\nzooming\n"
  },
  {
    "path": "shakefun/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 kongcup\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "shakefun/README.md",
    "content": "# shakefun\n在ios设备中，采集hao123上的搞笑图片或gif，然后通过摇动设备来更换显示的内容。又好玩，又锻炼身体！呵呵\n\n本工程主要使用AFNetworking来访问网络，下载资源；使用SVProgressHUD来显示进度和用户提示。\n\n本工程主要目的在于学习～"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFHTTPRequestOperation.h",
    "content": "// AFHTTPRequestOperation.h\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import \"AFURLConnectionOperation.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n/**\n `AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request.\n */\n@interface AFHTTPRequestOperation : AFURLConnectionOperation\n\n///------------------------------------------------\n/// @name Getting HTTP URL Connection Information\n///------------------------------------------------\n\n/**\n The last HTTP response received by the operation's connection.\n */\n@property (readonly, nonatomic, strong, nullable) NSHTTPURLResponse *response;\n\n/**\n Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an AFHTTPResponse serializer, which uses the raw data as its response object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed.\n\n @warning `responseSerializer` must not be `nil`. Setting a response serializer will clear out any cached value\n */\n@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * responseSerializer;\n\n/**\n An object constructed by the `responseSerializer` from the response and response data. Returns `nil` unless the operation `isFinished`, has a `response`, and has `responseData` with non-zero content length. If an error occurs during serialization, `nil` will be returned, and the `error` property will be populated with the serialization error.\n */\n@property (readonly, nonatomic, strong, nullable) id responseObject;\n\n///-----------------------------------------------------------\n/// @name Setting Completion Block Success / Failure Callbacks\n///-----------------------------------------------------------\n\n/**\n Sets the `completionBlock` property with a block that executes either the specified success or failure block, depending on the state of the request on completion. If `error` returns a value, which can be caused by an unacceptable status code or content type, then `failure` is executed. Otherwise, `success` is executed.\n\n This method should be overridden in subclasses in order to specify the response object passed into the success block.\n\n @param success The block to be executed on the completion of a successful request. This block has no return value and takes two arguments: the receiver operation and the object constructed from the response data of the request.\n @param failure The block to be executed on the completion of an unsuccessful request. This block has no return value and takes two arguments: the receiver operation and the error that occurred during the request.\n */\n- (void)setCompletionBlockWithSuccess:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                              failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFHTTPRequestOperation.m",
    "content": "// AFHTTPRequestOperation.m\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import \"AFHTTPRequestOperation.h\"\n\nstatic dispatch_queue_t http_request_operation_processing_queue() {\n    static dispatch_queue_t af_http_request_operation_processing_queue;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        af_http_request_operation_processing_queue = dispatch_queue_create(\"com.alamofire.networking.http-request.processing\", DISPATCH_QUEUE_CONCURRENT);\n    });\n\n    return af_http_request_operation_processing_queue;\n}\n\nstatic dispatch_group_t http_request_operation_completion_group() {\n    static dispatch_group_t af_http_request_operation_completion_group;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        af_http_request_operation_completion_group = dispatch_group_create();\n    });\n\n    return af_http_request_operation_completion_group;\n}\n\n#pragma mark -\n\n@interface AFURLConnectionOperation ()\n@property (readwrite, nonatomic, strong) NSURLRequest *request;\n@property (readwrite, nonatomic, strong) NSURLResponse *response;\n@end\n\n@interface AFHTTPRequestOperation ()\n@property (readwrite, nonatomic, strong) NSHTTPURLResponse *response;\n@property (readwrite, nonatomic, strong) id responseObject;\n@property (readwrite, nonatomic, strong) NSError *responseSerializationError;\n@property (readwrite, nonatomic, strong) NSRecursiveLock *lock;\n@end\n\n@implementation AFHTTPRequestOperation\n@dynamic response;\n@dynamic lock;\n\n- (instancetype)initWithRequest:(NSURLRequest *)urlRequest {\n    self = [super initWithRequest:urlRequest];\n    if (!self) {\n        return nil;\n    }\n\n    self.responseSerializer = [AFHTTPResponseSerializer serializer];\n\n    return self;\n}\n\n- (void)setResponseSerializer:(AFHTTPResponseSerializer <AFURLResponseSerialization> *)responseSerializer {\n    NSParameterAssert(responseSerializer);\n\n    [self.lock lock];\n    _responseSerializer = responseSerializer;\n    self.responseObject = nil;\n    self.responseSerializationError = nil;\n    [self.lock unlock];\n}\n\n- (id)responseObject {\n    [self.lock lock];\n    if (!_responseObject && [self isFinished] && !self.error) {\n        NSError *error = nil;\n        self.responseObject = [self.responseSerializer responseObjectForResponse:self.response data:self.responseData error:&error];\n        if (error) {\n            self.responseSerializationError = error;\n        }\n    }\n    [self.lock unlock];\n\n    return _responseObject;\n}\n\n- (NSError *)error {\n    if (_responseSerializationError) {\n        return _responseSerializationError;\n    } else {\n        return [super error];\n    }\n}\n\n#pragma mark - AFHTTPRequestOperation\n\n- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                              failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    // completionBlock is manually nilled out in AFURLConnectionOperation to break the retain cycle.\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-retain-cycles\"\n#pragma clang diagnostic ignored \"-Wgnu\"\n    self.completionBlock = ^{\n        if (self.completionGroup) {\n            dispatch_group_enter(self.completionGroup);\n        }\n\n        dispatch_async(http_request_operation_processing_queue(), ^{\n            if (self.error) {\n                if (failure) {\n                    dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{\n                        failure(self, self.error);\n                    });\n                }\n            } else {\n                id responseObject = self.responseObject;\n                if (self.error) {\n                    if (failure) {\n                        dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{\n                            failure(self, self.error);\n                        });\n                    }\n                } else {\n                    if (success) {\n                        dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{\n                            success(self, responseObject);\n                        });\n                    }\n                }\n            }\n\n            if (self.completionGroup) {\n                dispatch_group_leave(self.completionGroup);\n            }\n        });\n    };\n#pragma clang diagnostic pop\n}\n\n#pragma mark - AFURLRequestOperation\n\n- (void)pause {\n    [super pause];\n\n    u_int64_t offset = 0;\n    if ([self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey]) {\n        offset = [(NSNumber *)[self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey] unsignedLongLongValue];\n    } else {\n        offset = [(NSData *)[self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey] length];\n    }\n\n    NSMutableURLRequest *mutableURLRequest = [self.request mutableCopy];\n    if ([self.response respondsToSelector:@selector(allHeaderFields)] && [[self.response allHeaderFields] valueForKey:@\"ETag\"]) {\n        [mutableURLRequest setValue:[[self.response allHeaderFields] valueForKey:@\"ETag\"] forHTTPHeaderField:@\"If-Range\"];\n    }\n    [mutableURLRequest setValue:[NSString stringWithFormat:@\"bytes=%llu-\", offset] forHTTPHeaderField:@\"Range\"];\n    self.request = mutableURLRequest;\n}\n\n#pragma mark - NSSecureCoding\n\n+ (BOOL)supportsSecureCoding {\n    return YES;\n}\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [super initWithCoder:decoder];\n    if (!self) {\n        return nil;\n    }\n\n    self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [super encodeWithCoder:coder];\n\n    [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFHTTPRequestOperation *operation = [super copyWithZone:zone];\n\n    operation.responseSerializer = [self.responseSerializer copyWithZone:zone];\n    operation.completionQueue = self.completionQueue;\n    operation.completionGroup = self.completionGroup;\n\n    return operation;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFHTTPRequestOperationManager.h",
    "content": "// AFHTTPRequestOperationManager.h\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import <SystemConfiguration/SystemConfiguration.h>\n#import <Availability.h>\n\n#if __IPHONE_OS_VERSION_MIN_REQUIRED\n#import <MobileCoreServices/MobileCoreServices.h>\n#else\n#import <CoreServices/CoreServices.h>\n#endif\n\n#import \"AFHTTPRequestOperation.h\"\n#import \"AFURLResponseSerialization.h\"\n#import \"AFURLRequestSerialization.h\"\n#import \"AFSecurityPolicy.h\"\n#import \"AFNetworkReachabilityManager.h\"\n\n#ifndef NS_DESIGNATED_INITIALIZER\n#if __has_attribute(objc_designated_initializer)\n#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))\n#else\n#define NS_DESIGNATED_INITIALIZER\n#endif\n#endif\n\nNS_ASSUME_NONNULL_BEGIN\n\n/**\n `AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management.\n\n ## Subclassing Notes\n\n Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application.\n\n For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect.\n\n ## Methods to Override\n\n To change the behavior of all request operation construction for an `AFHTTPRequestOperationManager` subclass, override `HTTPRequestOperationWithRequest:success:failure`.\n\n ## Serialization\n\n Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to `<AFURLRequestSerialization>`.\n\n Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `<AFURLResponseSerialization>`\n\n ## URL Construction Using Relative Paths\n\n For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`.\n\n Below are a few examples of how `baseURL` and relative paths interact:\n\n    NSURL *baseURL = [NSURL URLWithString:@\"http://example.com/v1/\"];\n    [NSURL URLWithString:@\"foo\" relativeToURL:baseURL];                  // http://example.com/v1/foo\n    [NSURL URLWithString:@\"foo?bar=baz\" relativeToURL:baseURL];          // http://example.com/v1/foo?bar=baz\n    [NSURL URLWithString:@\"/foo\" relativeToURL:baseURL];                 // http://example.com/foo\n    [NSURL URLWithString:@\"foo/\" relativeToURL:baseURL];                 // http://example.com/v1/foo\n    [NSURL URLWithString:@\"/foo/\" relativeToURL:baseURL];                // http://example.com/foo/\n    [NSURL URLWithString:@\"http://example2.com/\" relativeToURL:baseURL]; // http://example2.com/\n\n Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash.\n\n ## Network Reachability Monitoring\n\n Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details.\n\n ## NSSecureCoding & NSCopying Caveats\n\n `AFHTTPRequestOperationManager` conforms to the `NSSecureCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. There are a few minor caveats to keep in mind, however:\n\n - Archives and copies of HTTP clients will be initialized with an empty operation queue.\n - NSSecureCoding cannot serialize / deserialize block properties, so an archive of an HTTP client will not include any reachability callback block that may be set.\n */\n@interface AFHTTPRequestOperationManager : NSObject <NSSecureCoding, NSCopying>\n\n/**\n The URL used to monitor reachability, and construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods.\n */\n@property (readonly, nonatomic, strong, nullable) NSURL *baseURL;\n\n/**\n Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies.\n\n @warning `requestSerializer` must not be `nil`.\n */\n@property (nonatomic, strong) AFHTTPRequestSerializer <AFURLRequestSerialization> * requestSerializer;\n\n/**\n Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to a JSON serializer, which serializes data from responses with a `application/json` MIME type, and falls back to the raw data object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed.\n\n @warning `responseSerializer` must not be `nil`.\n */\n@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * responseSerializer;\n\n/**\n The operation queue on which request operations are scheduled and run.\n */\n@property (nonatomic, strong) NSOperationQueue *operationQueue;\n\n///-------------------------------\n/// @name Managing URL Credentials\n///-------------------------------\n\n/**\n Whether request operations should consult the credential storage for authenticating the connection. `YES` by default.\n\n @see AFURLConnectionOperation -shouldUseCredentialStorage\n */\n@property (nonatomic, assign) BOOL shouldUseCredentialStorage;\n\n/**\n The credential used by request operations for authentication challenges.\n\n @see AFURLConnectionOperation -credential\n */\n@property (nonatomic, strong, nullable) NSURLCredential *credential;\n\n///-------------------------------\n/// @name Managing Security Policy\n///-------------------------------\n\n/**\n The security policy used by created request operations to evaluate server trust for secure connections. `AFHTTPRequestOperationManager` uses the `defaultPolicy` unless otherwise specified.\n */\n@property (nonatomic, strong) AFSecurityPolicy *securityPolicy;\n\n///------------------------------------\n/// @name Managing Network Reachability\n///------------------------------------\n\n/**\n The network reachability manager. `AFHTTPRequestOperationManager` uses the `sharedManager` by default.\n */\n@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager;\n\n///-------------------------------\n/// @name Managing Callback Queues\n///-------------------------------\n\n/**\n The dispatch queue for the `completionBlock` of request operations. If `NULL` (default), the main queue is used.\n */\n#if OS_OBJECT_HAVE_OBJC_SUPPORT\n@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue;\n#else\n@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue;\n#endif\n\n/**\n The dispatch group for the `completionBlock` of request operations. If `NULL` (default), a private dispatch group is used.\n */\n#if OS_OBJECT_HAVE_OBJC_SUPPORT\n@property (nonatomic, strong, nullable) dispatch_group_t completionGroup;\n#else\n@property (nonatomic, assign, nullable) dispatch_group_t completionGroup;\n#endif\n\n///---------------------------------------------\n/// @name Creating and Initializing HTTP Clients\n///---------------------------------------------\n\n/**\n Creates and returns an `AFHTTPRequestOperationManager` object.\n */\n+ (instancetype)manager;\n\n/**\n Initializes an `AFHTTPRequestOperationManager` object with the specified base URL.\n\n This is the designated initializer.\n\n @param url The base URL for the HTTP client.\n\n @return The newly-initialized HTTP client\n */\n- (instancetype)initWithBaseURL:(nullable NSURL *)url NS_DESIGNATED_INITIALIZER;\n\n///---------------------------------------\n/// @name Managing HTTP Request Operations\n///---------------------------------------\n\n/**\n Creates an `AFHTTPRequestOperation`, and sets the response serializers to that of the HTTP client.\n\n @param request The request object to be loaded asynchronously during execution of the operation.\n @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the created request operation and the object created from the response data of request.\n @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes two arguments:, the created request operation and the `NSError` object describing the network or parsing error that occurred.\n */\n- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request\n                                                    success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                                                    failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;\n\n///---------------------------\n/// @name Making HTTP Requests\n///---------------------------\n\n/**\n Creates and runs an `AFHTTPRequestOperation` with a `GET` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer.\n @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred.\n\n @see -HTTPRequestOperationWithRequest:success:failure:\n */\n- (nullable AFHTTPRequestOperation *)GET:(NSString *)URLString\n                     parameters:(nullable id)parameters\n                        success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                        failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;\n\n/**\n Creates and runs an `AFHTTPRequestOperation` with a `HEAD` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes a single arguments: the request operation.\n @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred.\n\n @see -HTTPRequestOperationWithRequest:success:failure:\n */\n- (nullable AFHTTPRequestOperation *)HEAD:(NSString *)URLString\n                      parameters:(nullable id)parameters\n                         success:(nullable void (^)(AFHTTPRequestOperation *operation))success\n                         failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;\n\n/**\n Creates and runs an `AFHTTPRequestOperation` with a `POST` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer.\n @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred.\n\n @see -HTTPRequestOperationWithRequest:success:failure:\n */\n- (nullable AFHTTPRequestOperation *)POST:(NSString *)URLString\n                      parameters:(nullable id)parameters\n                         success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                         failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;\n\n/**\n Creates and runs an `AFHTTPRequestOperation` with a multipart `POST` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol.\n @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer.\n @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred.\n\n @see -HTTPRequestOperationWithRequest:success:failure:\n */\n- (nullable AFHTTPRequestOperation *)POST:(NSString *)URLString\n                      parameters:(nullable id)parameters\n       constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block\n                         success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                         failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;\n\n/**\n Creates and runs an `AFHTTPRequestOperation` with a `PUT` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer.\n @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred.\n\n @see -HTTPRequestOperationWithRequest:success:failure:\n */\n- (nullable AFHTTPRequestOperation *)PUT:(NSString *)URLString\n                     parameters:(nullable id)parameters\n                        success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                        failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;\n\n/**\n Creates and runs an `AFHTTPRequestOperation` with a `PATCH` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer.\n @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred.\n\n @see -HTTPRequestOperationWithRequest:success:failure:\n */\n- (nullable AFHTTPRequestOperation *)PATCH:(NSString *)URLString\n                       parameters:(nullable id)parameters\n                          success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                          failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;\n\n/**\n Creates and runs an `AFHTTPRequestOperation` with a `DELETE` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer.\n @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred.\n\n @see -HTTPRequestOperationWithRequest:success:failure:\n */\n- (nullable AFHTTPRequestOperation *)DELETE:(NSString *)URLString\n                        parameters:(nullable id)parameters\n                           success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                           failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFHTTPRequestOperationManager.m",
    "content": "// AFHTTPRequestOperationManager.m\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n\n#import \"AFHTTPRequestOperationManager.h\"\n#import \"AFHTTPRequestOperation.h\"\n\n#import <Availability.h>\n#import <Security/Security.h>\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n#import <UIKit/UIKit.h>\n#endif\n\n@interface AFHTTPRequestOperationManager ()\n@property (readwrite, nonatomic, strong) NSURL *baseURL;\n@end\n\n@implementation AFHTTPRequestOperationManager\n\n+ (instancetype)manager {\n    return [[self alloc] initWithBaseURL:nil];\n}\n\n- (instancetype)init {\n    return [self initWithBaseURL:nil];\n}\n\n- (instancetype)initWithBaseURL:(NSURL *)url {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected\n    if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@\"/\"]) {\n        url = [url URLByAppendingPathComponent:@\"\"];\n    }\n\n    self.baseURL = url;\n\n    self.requestSerializer = [AFHTTPRequestSerializer serializer];\n    self.responseSerializer = [AFJSONResponseSerializer serializer];\n\n    self.securityPolicy = [AFSecurityPolicy defaultPolicy];\n\n    self.reachabilityManager = [AFNetworkReachabilityManager sharedManager];\n\n    self.operationQueue = [[NSOperationQueue alloc] init];\n\n    self.shouldUseCredentialStorage = YES;\n\n    return self;\n}\n\n#pragma mark -\n\n#ifdef _SYSTEMCONFIGURATION_H\n#endif\n\n- (void)setRequestSerializer:(AFHTTPRequestSerializer <AFURLRequestSerialization> *)requestSerializer {\n    NSParameterAssert(requestSerializer);\n\n    _requestSerializer = requestSerializer;\n}\n\n- (void)setResponseSerializer:(AFHTTPResponseSerializer <AFURLResponseSerialization> *)responseSerializer {\n    NSParameterAssert(responseSerializer);\n\n    _responseSerializer = responseSerializer;\n}\n\n#pragma mark -\n\n- (AFHTTPRequestOperation *)HTTPRequestOperationWithHTTPMethod:(NSString *)method\n                                                     URLString:(NSString *)URLString\n                                                    parameters:(id)parameters\n                                                       success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                                                       failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    NSError *serializationError = nil;\n    NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError];\n    if (serializationError) {\n        if (failure) {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n            dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{\n                failure(nil, serializationError);\n            });\n#pragma clang diagnostic pop\n        }\n\n        return nil;\n    }\n\n    return [self HTTPRequestOperationWithRequest:request success:success failure:failure];\n}\n\n- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request\n                                                    success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                                                    failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];\n    operation.responseSerializer = self.responseSerializer;\n    operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage;\n    operation.credential = self.credential;\n    operation.securityPolicy = self.securityPolicy;\n\n    [operation setCompletionBlockWithSuccess:success failure:failure];\n    operation.completionQueue = self.completionQueue;\n    operation.completionGroup = self.completionGroup;\n\n    return operation;\n}\n\n#pragma mark -\n\n- (AFHTTPRequestOperation *)GET:(NSString *)URLString\n                     parameters:(id)parameters\n                        success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@\"GET\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [self.operationQueue addOperation:operation];\n\n    return operation;\n}\n\n- (AFHTTPRequestOperation *)HEAD:(NSString *)URLString\n                      parameters:(id)parameters\n                         success:(void (^)(AFHTTPRequestOperation *operation))success\n                         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@\"HEAD\" URLString:URLString parameters:parameters success:^(AFHTTPRequestOperation *requestOperation, __unused id responseObject) {\n        if (success) {\n            success(requestOperation);\n        }\n    } failure:failure];\n\n    [self.operationQueue addOperation:operation];\n\n    return operation;\n}\n\n- (AFHTTPRequestOperation *)POST:(NSString *)URLString\n                      parameters:(id)parameters\n                         success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@\"POST\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [self.operationQueue addOperation:operation];\n\n    return operation;\n}\n\n- (AFHTTPRequestOperation *)POST:(NSString *)URLString\n                      parameters:(id)parameters\n       constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block\n                         success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    NSError *serializationError = nil;\n    NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@\"POST\" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError];\n    if (serializationError) {\n        if (failure) {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n            dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{\n                failure(nil, serializationError);\n            });\n#pragma clang diagnostic pop\n        }\n\n        return nil;\n    }\n\n    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];\n\n    [self.operationQueue addOperation:operation];\n\n    return operation;\n}\n\n- (AFHTTPRequestOperation *)PUT:(NSString *)URLString\n                     parameters:(id)parameters\n                        success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@\"PUT\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [self.operationQueue addOperation:operation];\n\n    return operation;\n}\n\n- (AFHTTPRequestOperation *)PATCH:(NSString *)URLString\n                       parameters:(id)parameters\n                          success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                          failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@\"PATCH\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [self.operationQueue addOperation:operation];\n\n    return operation;\n}\n\n- (AFHTTPRequestOperation *)DELETE:(NSString *)URLString\n                        parameters:(id)parameters\n                           success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success\n                           failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure\n{\n    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@\"DELETE\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [self.operationQueue addOperation:operation];\n\n    return operation;\n}\n\n#pragma mark - NSObject\n\n- (NSString *)description {\n    return [NSString stringWithFormat:@\"<%@: %p, baseURL: %@, operationQueue: %@>\", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.operationQueue];\n}\n\n#pragma mark - NSSecureCoding\n\n+ (BOOL)supportsSecureCoding {\n    return YES;\n}\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    NSURL *baseURL = [decoder decodeObjectForKey:NSStringFromSelector(@selector(baseURL))];\n\n    self = [self initWithBaseURL:baseURL];\n    if (!self) {\n        return nil;\n    }\n\n    self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))];\n    self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))];\n    [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))];\n    [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFHTTPRequestOperationManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL];\n\n    HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone];\n    HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone];\n\n    return HTTPClient;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFHTTPSessionManager.h",
    "content": "// AFHTTPSessionManager.h\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import <SystemConfiguration/SystemConfiguration.h>\n#import <Availability.h>\n\n#if __IPHONE_OS_VERSION_MIN_REQUIRED\n#import <MobileCoreServices/MobileCoreServices.h>\n#else\n#import <CoreServices/CoreServices.h>\n#endif\n\n#import \"AFURLSessionManager.h\"\n\n#ifndef NS_DESIGNATED_INITIALIZER\n#if __has_attribute(objc_designated_initializer)\n#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))\n#else\n#define NS_DESIGNATED_INITIALIZER\n#endif\n#endif\n\n/**\n `AFHTTPSessionManager` is a subclass of `AFURLSessionManager` with convenience methods for making HTTP requests. When a `baseURL` is provided, requests made with the `GET` / `POST` / et al. convenience methods can be made with relative paths.\n\n ## Subclassing Notes\n\n Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application.\n\n For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect.\n\n ## Methods to Override\n\n To change the behavior of all data task operation construction, which is also used in the `GET` / `POST` / et al. convenience methods, override `dataTaskWithRequest:completionHandler:`.\n\n ## Serialization\n\n Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to `<AFURLRequestSerialization>`.\n\n Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `<AFURLResponseSerialization>`\n\n ## URL Construction Using Relative Paths\n\n For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`.\n\n Below are a few examples of how `baseURL` and relative paths interact:\n\n    NSURL *baseURL = [NSURL URLWithString:@\"http://example.com/v1/\"];\n    [NSURL URLWithString:@\"foo\" relativeToURL:baseURL];                  // http://example.com/v1/foo\n    [NSURL URLWithString:@\"foo?bar=baz\" relativeToURL:baseURL];          // http://example.com/v1/foo?bar=baz\n    [NSURL URLWithString:@\"/foo\" relativeToURL:baseURL];                 // http://example.com/foo\n    [NSURL URLWithString:@\"foo/\" relativeToURL:baseURL];                 // http://example.com/v1/foo\n    [NSURL URLWithString:@\"/foo/\" relativeToURL:baseURL];                // http://example.com/foo/\n    [NSURL URLWithString:@\"http://example2.com/\" relativeToURL:baseURL]; // http://example2.com/\n\n Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash.\n\n @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance.\n */\n\n#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090)\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface AFHTTPSessionManager : AFURLSessionManager <NSSecureCoding, NSCopying>\n\n/**\n The URL used to construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods.\n */\n@property (readonly, nonatomic, strong, nullable) NSURL *baseURL;\n\n/**\n Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies.\n\n @warning `requestSerializer` must not be `nil`.\n */\n@property (nonatomic, strong) AFHTTPRequestSerializer <AFURLRequestSerialization> * requestSerializer;\n\n/**\n Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`.\n\n @warning `responseSerializer` must not be `nil`.\n */\n@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * responseSerializer;\n\n///---------------------\n/// @name Initialization\n///---------------------\n\n/**\n Creates and returns an `AFHTTPSessionManager` object.\n */\n+ (instancetype)manager;\n\n/**\n Initializes an `AFHTTPSessionManager` object with the specified base URL.\n\n @param url The base URL for the HTTP client.\n\n @return The newly-initialized HTTP client\n */\n- (instancetype)initWithBaseURL:(nullable NSURL *)url;\n\n/**\n Initializes an `AFHTTPSessionManager` object with the specified base URL.\n\n This is the designated initializer.\n\n @param url The base URL for the HTTP client.\n @param configuration The configuration used to create the managed session.\n\n @return The newly-initialized HTTP client\n */\n- (instancetype)initWithBaseURL:(nullable NSURL *)url\n           sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER;\n\n///---------------------------\n/// @name Making HTTP Requests\n///---------------------------\n\n/**\n Creates and runs an `NSURLSessionDataTask` with a `GET` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer.\n @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred.\n\n @see -dataTaskWithRequest:completionHandler:\n */\n- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString\n                   parameters:(nullable id)parameters\n                      success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success\n                      failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;\n\n/**\n Creates and runs an `NSURLSessionDataTask` with a `HEAD` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the task finishes successfully. This block has no return value and takes a single arguments: the data task.\n @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred.\n\n @see -dataTaskWithRequest:completionHandler:\n */\n- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString\n                    parameters:(nullable id)parameters\n                       success:(nullable void (^)(NSURLSessionDataTask *task))success\n                       failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;\n\n/**\n Creates and runs an `NSURLSessionDataTask` with a `POST` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer.\n @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred.\n\n @see -dataTaskWithRequest:completionHandler:\n */\n- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString\n                    parameters:(nullable id)parameters\n                       success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success\n                       failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;\n\n/**\n Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol.\n @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer.\n @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred.\n\n @see -dataTaskWithRequest:completionHandler:\n */\n- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString\n                    parameters:(nullable id)parameters\n     constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block\n                       success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success\n                       failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;\n\n/**\n Creates and runs an `NSURLSessionDataTask` with a `PUT` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer.\n @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred.\n\n @see -dataTaskWithRequest:completionHandler:\n */\n- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString\n                   parameters:(nullable id)parameters\n                      success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success\n                      failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;\n\n/**\n Creates and runs an `NSURLSessionDataTask` with a `PATCH` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer.\n @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred.\n\n @see -dataTaskWithRequest:completionHandler:\n */\n- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString\n                     parameters:(nullable id)parameters\n                        success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success\n                        failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;\n\n/**\n Creates and runs an `NSURLSessionDataTask` with a `DELETE` request.\n\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded according to the client request serializer.\n @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer.\n @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred.\n\n @see -dataTaskWithRequest:completionHandler:\n */\n- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString\n                      parameters:(nullable id)parameters\n                         success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success\n                         failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;\n\n@end\n\nNS_ASSUME_NONNULL_END\n\n#endif\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFHTTPSessionManager.m",
    "content": "// AFHTTPSessionManager.m\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import \"AFHTTPSessionManager.h\"\n\n#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090)\n\n#import \"AFURLRequestSerialization.h\"\n#import \"AFURLResponseSerialization.h\"\n\n#import <Availability.h>\n#import <Security/Security.h>\n\n#ifdef _SYSTEMCONFIGURATION_H\n#import <netinet/in.h>\n#import <netinet6/in6.h>\n#import <arpa/inet.h>\n#import <ifaddrs.h>\n#import <netdb.h>\n#endif\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n#import <UIKit/UIKit.h>\n#endif\n\n@interface AFHTTPSessionManager ()\n@property (readwrite, nonatomic, strong) NSURL *baseURL;\n@end\n\n@implementation AFHTTPSessionManager\n@dynamic responseSerializer;\n\n+ (instancetype)manager {\n    return [[[self class] alloc] initWithBaseURL:nil];\n}\n\n- (instancetype)init {\n    return [self initWithBaseURL:nil];\n}\n\n- (instancetype)initWithBaseURL:(NSURL *)url {\n    return [self initWithBaseURL:url sessionConfiguration:nil];\n}\n\n- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration {\n    return [self initWithBaseURL:nil sessionConfiguration:configuration];\n}\n\n- (instancetype)initWithBaseURL:(NSURL *)url\n           sessionConfiguration:(NSURLSessionConfiguration *)configuration\n{\n    self = [super initWithSessionConfiguration:configuration];\n    if (!self) {\n        return nil;\n    }\n\n    // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected\n    if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@\"/\"]) {\n        url = [url URLByAppendingPathComponent:@\"\"];\n    }\n\n    self.baseURL = url;\n\n    self.requestSerializer = [AFHTTPRequestSerializer serializer];\n    self.responseSerializer = [AFJSONResponseSerializer serializer];\n\n    return self;\n}\n\n#pragma mark -\n\n#ifdef _SYSTEMCONFIGURATION_H\n#endif\n\n- (void)setRequestSerializer:(AFHTTPRequestSerializer <AFURLRequestSerialization> *)requestSerializer {\n    NSParameterAssert(requestSerializer);\n\n    _requestSerializer = requestSerializer;\n}\n\n- (void)setResponseSerializer:(AFHTTPResponseSerializer <AFURLResponseSerialization> *)responseSerializer {\n    NSParameterAssert(responseSerializer);\n\n    [super setResponseSerializer:responseSerializer];\n}\n\n#pragma mark -\n\n- (NSURLSessionDataTask *)GET:(NSString *)URLString\n                   parameters:(id)parameters\n                      success:(void (^)(NSURLSessionDataTask *task, id responseObject))success\n                      failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure\n{\n    NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@\"GET\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [dataTask resume];\n\n    return dataTask;\n}\n\n- (NSURLSessionDataTask *)HEAD:(NSString *)URLString\n                    parameters:(id)parameters\n                       success:(void (^)(NSURLSessionDataTask *task))success\n                       failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure\n{\n    NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@\"HEAD\" URLString:URLString parameters:parameters success:^(NSURLSessionDataTask *task, __unused id responseObject) {\n        if (success) {\n            success(task);\n        }\n    } failure:failure];\n\n    [dataTask resume];\n\n    return dataTask;\n}\n\n- (NSURLSessionDataTask *)POST:(NSString *)URLString\n                    parameters:(id)parameters\n                       success:(void (^)(NSURLSessionDataTask *task, id responseObject))success\n                       failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure\n{\n    NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@\"POST\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [dataTask resume];\n\n    return dataTask;\n}\n\n- (NSURLSessionDataTask *)POST:(NSString *)URLString\n                    parameters:(id)parameters\n     constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block\n                       success:(void (^)(NSURLSessionDataTask *task, id responseObject))success\n                       failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure\n{\n    NSError *serializationError = nil;\n    NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@\"POST\" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError];\n    if (serializationError) {\n        if (failure) {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n            dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{\n                failure(nil, serializationError);\n            });\n#pragma clang diagnostic pop\n        }\n\n        return nil;\n    }\n\n    __block NSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {\n        if (error) {\n            if (failure) {\n                failure(task, error);\n            }\n        } else {\n            if (success) {\n                success(task, responseObject);\n            }\n        }\n    }];\n\n    [task resume];\n\n    return task;\n}\n\n- (NSURLSessionDataTask *)PUT:(NSString *)URLString\n                   parameters:(id)parameters\n                      success:(void (^)(NSURLSessionDataTask *task, id responseObject))success\n                      failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure\n{\n    NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@\"PUT\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [dataTask resume];\n\n    return dataTask;\n}\n\n- (NSURLSessionDataTask *)PATCH:(NSString *)URLString\n                     parameters:(id)parameters\n                        success:(void (^)(NSURLSessionDataTask *task, id responseObject))success\n                        failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure\n{\n    NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@\"PATCH\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [dataTask resume];\n\n    return dataTask;\n}\n\n- (NSURLSessionDataTask *)DELETE:(NSString *)URLString\n                      parameters:(id)parameters\n                         success:(void (^)(NSURLSessionDataTask *task, id responseObject))success\n                         failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure\n{\n    NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@\"DELETE\" URLString:URLString parameters:parameters success:success failure:failure];\n\n    [dataTask resume];\n\n    return dataTask;\n}\n\n- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method\n                                       URLString:(NSString *)URLString\n                                      parameters:(id)parameters\n                                         success:(void (^)(NSURLSessionDataTask *, id))success\n                                         failure:(void (^)(NSURLSessionDataTask *, NSError *))failure\n{\n    NSError *serializationError = nil;\n    NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError];\n    if (serializationError) {\n        if (failure) {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n            dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{\n                failure(nil, serializationError);\n            });\n#pragma clang diagnostic pop\n        }\n\n        return nil;\n    }\n\n    __block NSURLSessionDataTask *dataTask = nil;\n    dataTask = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {\n        if (error) {\n            if (failure) {\n                failure(dataTask, error);\n            }\n        } else {\n            if (success) {\n                success(dataTask, responseObject);\n            }\n        }\n    }];\n\n    return dataTask;\n}\n\n#pragma mark - NSObject\n\n- (NSString *)description {\n    return [NSString stringWithFormat:@\"<%@: %p, baseURL: %@, session: %@, operationQueue: %@>\", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.session, self.operationQueue];\n}\n\n#pragma mark - NSSecureCoding\n\n+ (BOOL)supportsSecureCoding {\n    return YES;\n}\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    NSURL *baseURL = [decoder decodeObjectOfClass:[NSURL class] forKey:NSStringFromSelector(@selector(baseURL))];\n    NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@\"sessionConfiguration\"];\n    if (!configuration) {\n        NSString *configurationIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@\"identifier\"];\n        if (configurationIdentifier) {\n#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1100)\n            configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationIdentifier];\n#else\n            configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:configurationIdentifier];\n#endif\n        }\n    }\n\n    self = [self initWithBaseURL:baseURL sessionConfiguration:configuration];\n    if (!self) {\n        return nil;\n    }\n\n    self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))];\n    self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [super encodeWithCoder:coder];\n\n    [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))];\n    if ([self.session.configuration conformsToProtocol:@protocol(NSCoding)]) {\n        [coder encodeObject:self.session.configuration forKey:@\"sessionConfiguration\"];\n    } else {\n        [coder encodeObject:self.session.configuration.identifier forKey:@\"identifier\"];\n    }\n    [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))];\n    [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFHTTPSessionManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL sessionConfiguration:self.session.configuration];\n\n    HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone];\n    HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone];\n\n    return HTTPClient;\n}\n\n@end\n\n#endif\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFNetworkReachabilityManager.h",
    "content": "// AFNetworkReachabilityManager.h\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import <SystemConfiguration/SystemConfiguration.h>\n\n#ifndef NS_DESIGNATED_INITIALIZER\n#if __has_attribute(objc_designated_initializer)\n#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))\n#else\n#define NS_DESIGNATED_INITIALIZER\n#endif\n#endif\n\ntypedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {\n    AFNetworkReachabilityStatusUnknown          = -1,\n    AFNetworkReachabilityStatusNotReachable     = 0,\n    AFNetworkReachabilityStatusReachableViaWWAN = 1,\n    AFNetworkReachabilityStatusReachableViaWiFi = 2,\n};\n\nNS_ASSUME_NONNULL_BEGIN\n\n/**\n `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces.\n\n Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability.\n\n See Apple's Reachability Sample Code (https://developer.apple.com/library/ios/samplecode/reachability/)\n\n @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined.\n */\n@interface AFNetworkReachabilityManager : NSObject\n\n/**\n The current network reachability status.\n */\n@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;\n\n/**\n Whether or not the network is currently reachable.\n */\n@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable;\n\n/**\n Whether or not the network is currently reachable via WWAN.\n */\n@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN;\n\n/**\n Whether or not the network is currently reachable via WiFi.\n */\n@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi;\n\n///---------------------\n/// @name Initialization\n///---------------------\n\n/**\n Returns the shared network reachability manager.\n */\n+ (instancetype)sharedManager;\n\n/**\n Creates and returns a network reachability manager for the specified domain.\n\n @param domain The domain used to evaluate network reachability.\n\n @return An initialized network reachability manager, actively monitoring the specified domain.\n */\n+ (instancetype)managerForDomain:(NSString *)domain;\n\n/**\n Creates and returns a network reachability manager for the socket address.\n\n @param address The socket address (`sockaddr_in`) used to evaluate network reachability.\n\n @return An initialized network reachability manager, actively monitoring the specified socket address.\n */\n+ (instancetype)managerForAddress:(const void *)address;\n\n/**\n Initializes an instance of a network reachability manager from the specified reachability object.\n\n @param reachability The reachability object to monitor.\n\n @return An initialized network reachability manager, actively monitoring the specified reachability.\n */\n- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER;\n\n///--------------------------------------------------\n/// @name Starting & Stopping Reachability Monitoring\n///--------------------------------------------------\n\n/**\n Starts monitoring for changes in network reachability status.\n */\n- (void)startMonitoring;\n\n/**\n Stops monitoring for changes in network reachability status.\n */\n- (void)stopMonitoring;\n\n///-------------------------------------------------\n/// @name Getting Localized Reachability Description\n///-------------------------------------------------\n\n/**\n Returns a localized string representation of the current network reachability status.\n */\n- (NSString *)localizedNetworkReachabilityStatusString;\n\n///---------------------------------------------------\n/// @name Setting Network Reachability Change Callback\n///---------------------------------------------------\n\n/**\n Sets a callback to be executed when the network availability of the `baseURL` host changes.\n\n @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`.\n */\n- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block;\n\n@end\n\n///----------------\n/// @name Constants\n///----------------\n\n/**\n ## Network Reachability\n\n The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses.\n\n enum {\n AFNetworkReachabilityStatusUnknown,\n AFNetworkReachabilityStatusNotReachable,\n AFNetworkReachabilityStatusReachableViaWWAN,\n AFNetworkReachabilityStatusReachableViaWiFi,\n }\n\n `AFNetworkReachabilityStatusUnknown`\n The `baseURL` host reachability is not known.\n\n `AFNetworkReachabilityStatusNotReachable`\n The `baseURL` host cannot be reached.\n\n `AFNetworkReachabilityStatusReachableViaWWAN`\n The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS.\n\n `AFNetworkReachabilityStatusReachableViaWiFi`\n The `baseURL` host can be reached via a Wi-Fi connection.\n\n ### Keys for Notification UserInfo Dictionary\n\n Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification.\n\n `AFNetworkingReachabilityNotificationStatusItem`\n A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification.\n The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status.\n */\n\n///--------------------\n/// @name Notifications\n///--------------------\n\n/**\n Posted when network reachability changes.\n This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability.\n\n @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's \"Link Binary With Library\" build phase, and add `#import <SystemConfiguration/SystemConfiguration.h>` to the header prefix of the project (`Prefix.pch`).\n */\nextern NSString * const AFNetworkingReachabilityDidChangeNotification;\nextern NSString * const AFNetworkingReachabilityNotificationStatusItem;\n\n///--------------------\n/// @name Functions\n///--------------------\n\n/**\n Returns a localized string representation of an `AFNetworkReachabilityStatus` value.\n */\nextern NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status);\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFNetworkReachabilityManager.m",
    "content": "// AFNetworkReachabilityManager.m\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import \"AFNetworkReachabilityManager.h\"\n\n#import <netinet/in.h>\n#import <netinet6/in6.h>\n#import <arpa/inet.h>\n#import <ifaddrs.h>\n#import <netdb.h>\n\nNSString * const AFNetworkingReachabilityDidChangeNotification = @\"com.alamofire.networking.reachability.change\";\nNSString * const AFNetworkingReachabilityNotificationStatusItem = @\"AFNetworkingReachabilityNotificationStatusItem\";\n\ntypedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status);\n\ntypedef NS_ENUM(NSUInteger, AFNetworkReachabilityAssociation) {\n    AFNetworkReachabilityForAddress = 1,\n    AFNetworkReachabilityForAddressPair = 2,\n    AFNetworkReachabilityForName = 3,\n};\n\nNSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) {\n    switch (status) {\n        case AFNetworkReachabilityStatusNotReachable:\n            return NSLocalizedStringFromTable(@\"Not Reachable\", @\"AFNetworking\", nil);\n        case AFNetworkReachabilityStatusReachableViaWWAN:\n            return NSLocalizedStringFromTable(@\"Reachable via WWAN\", @\"AFNetworking\", nil);\n        case AFNetworkReachabilityStatusReachableViaWiFi:\n            return NSLocalizedStringFromTable(@\"Reachable via WiFi\", @\"AFNetworking\", nil);\n        case AFNetworkReachabilityStatusUnknown:\n        default:\n            return NSLocalizedStringFromTable(@\"Unknown\", @\"AFNetworking\", nil);\n    }\n}\n\nstatic AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetworkReachabilityFlags flags) {\n    BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0);\n    BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0);\n    BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0));\n    BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0);\n    BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction));\n\n    AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusUnknown;\n    if (isNetworkReachable == NO) {\n        status = AFNetworkReachabilityStatusNotReachable;\n    }\n#if\tTARGET_OS_IPHONE\n    else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) {\n        status = AFNetworkReachabilityStatusReachableViaWWAN;\n    }\n#endif\n    else {\n        status = AFNetworkReachabilityStatusReachableViaWiFi;\n    }\n\n    return status;\n}\n\nstatic void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) {\n    AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags);\n    AFNetworkReachabilityStatusBlock block = (__bridge AFNetworkReachabilityStatusBlock)info;\n    if (block) {\n        block(status);\n    }\n\n\n    dispatch_async(dispatch_get_main_queue(), ^{\n        NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n        NSDictionary *userInfo = @{ AFNetworkingReachabilityNotificationStatusItem: @(status) };\n        [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:userInfo];\n    });\n\n}\n\nstatic const void * AFNetworkReachabilityRetainCallback(const void *info) {\n    return Block_copy(info);\n}\n\nstatic void AFNetworkReachabilityReleaseCallback(const void *info) {\n    if (info) {\n        Block_release(info);\n    }\n}\n\n@interface AFNetworkReachabilityManager ()\n@property (readwrite, nonatomic, strong) id networkReachability;\n@property (readwrite, nonatomic, assign) AFNetworkReachabilityAssociation networkReachabilityAssociation;\n@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;\n@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock;\n@end\n\n@implementation AFNetworkReachabilityManager\n\n+ (instancetype)sharedManager {\n    static AFNetworkReachabilityManager *_sharedManager = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        struct sockaddr_in address;\n        bzero(&address, sizeof(address));\n        address.sin_len = sizeof(address);\n        address.sin_family = AF_INET;\n\n        _sharedManager = [self managerForAddress:&address];\n    });\n\n    return _sharedManager;\n}\n\n+ (instancetype)managerForDomain:(NSString *)domain {\n    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]);\n\n    AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability];\n    manager.networkReachabilityAssociation = AFNetworkReachabilityForName;\n\n    return manager;\n}\n\n+ (instancetype)managerForAddress:(const void *)address {\n    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address);\n\n    AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability];\n    manager.networkReachabilityAssociation = AFNetworkReachabilityForAddress;\n\n    return manager;\n}\n\n- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.networkReachability = CFBridgingRelease(reachability);\n    self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown;\n\n    return self;\n}\n\n- (instancetype)init NS_UNAVAILABLE\n{\n    return nil;\n}\n\n- (void)dealloc {\n    [self stopMonitoring];\n}\n\n#pragma mark -\n\n- (BOOL)isReachable {\n    return [self isReachableViaWWAN] || [self isReachableViaWiFi];\n}\n\n- (BOOL)isReachableViaWWAN {\n    return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN;\n}\n\n- (BOOL)isReachableViaWiFi {\n    return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi;\n}\n\n#pragma mark -\n\n- (void)startMonitoring {\n    [self stopMonitoring];\n\n    if (!self.networkReachability) {\n        return;\n    }\n\n    __weak __typeof(self)weakSelf = self;\n    AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) {\n        __strong __typeof(weakSelf)strongSelf = weakSelf;\n\n        strongSelf.networkReachabilityStatus = status;\n        if (strongSelf.networkReachabilityStatusBlock) {\n            strongSelf.networkReachabilityStatusBlock(status);\n        }\n\n    };\n\n    id networkReachability = self.networkReachability;\n    SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL};\n    SCNetworkReachabilitySetCallback((__bridge SCNetworkReachabilityRef)networkReachability, AFNetworkReachabilityCallback, &context);\n    SCNetworkReachabilityScheduleWithRunLoop((__bridge SCNetworkReachabilityRef)networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);\n\n    switch (self.networkReachabilityAssociation) {\n        case AFNetworkReachabilityForName:\n            break;\n        case AFNetworkReachabilityForAddress:\n        case AFNetworkReachabilityForAddressPair:\n        default: {\n            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{\n                SCNetworkReachabilityFlags flags;\n                SCNetworkReachabilityGetFlags((__bridge SCNetworkReachabilityRef)networkReachability, &flags);\n                AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags);\n                dispatch_async(dispatch_get_main_queue(), ^{\n                    callback(status);\n\n                    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n                    [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:@{ AFNetworkingReachabilityNotificationStatusItem: @(status) }];\n\n\n                });\n            });\n        }\n            break;\n    }\n}\n\n- (void)stopMonitoring {\n    if (!self.networkReachability) {\n        return;\n    }\n\n    SCNetworkReachabilityUnscheduleFromRunLoop((__bridge SCNetworkReachabilityRef)self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);\n}\n\n#pragma mark -\n\n- (NSString *)localizedNetworkReachabilityStatusString {\n    return AFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus);\n}\n\n#pragma mark -\n\n- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block {\n    self.networkReachabilityStatusBlock = block;\n}\n\n#pragma mark - NSKeyValueObserving\n\n+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {\n    if ([key isEqualToString:@\"reachable\"] || [key isEqualToString:@\"reachableViaWWAN\"] || [key isEqualToString:@\"reachableViaWiFi\"]) {\n        return [NSSet setWithObject:@\"networkReachabilityStatus\"];\n    }\n\n    return [super keyPathsForValuesAffectingValueForKey:key];\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFNetworking.h",
    "content": "// AFNetworking.h\n//\n// Copyright (c) 2013 AFNetworking (http://afnetworking.com/)\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import <Availability.h>\n\n#ifndef _AFNETWORKING_\n    #define _AFNETWORKING_\n\n    #import \"AFURLRequestSerialization.h\"\n    #import \"AFURLResponseSerialization.h\"\n    #import \"AFSecurityPolicy.h\"\n    #import \"AFNetworkReachabilityManager.h\"\n\n    #import \"AFURLConnectionOperation.h\"\n    #import \"AFHTTPRequestOperation.h\"\n    #import \"AFHTTPRequestOperationManager.h\"\n\n#if ( ( defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || \\\n      ( defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 ) )\n    #import \"AFURLSessionManager.h\"\n    #import \"AFHTTPSessionManager.h\"\n#endif\n\n#endif /* _AFNETWORKING_ */\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFSecurityPolicy.h",
    "content": "// AFSecurityPolicy.h\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import <Security/Security.h>\n\ntypedef NS_ENUM(NSUInteger, AFSSLPinningMode) {\n    AFSSLPinningModeNone,\n    AFSSLPinningModePublicKey,\n    AFSSLPinningModeCertificate,\n};\n\n/**\n `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections.\n\n Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled.\n */\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface AFSecurityPolicy : NSObject\n\n/**\n The criteria by which server trust should be evaluated against the pinned SSL certificates. Defaults to `AFSSLPinningModeNone`.\n */\n@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode;\n\n/**\n The certificates used to evaluate server trust according to the SSL pinning mode. By default, this property is set to any (`.cer`) certificates included in the app bundle. Note that if you create an array with duplicate certificates, the duplicate certificates will be removed. Note that if pinning is enabled, `evaluateServerTrust:forDomain:` will return true if any pinned certificate matches.\n */\n@property (nonatomic, strong, nullable) NSArray *pinnedCertificates;\n\n/**\n Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`.\n */\n@property (nonatomic, assign) BOOL allowInvalidCertificates;\n\n/**\n Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`.\n */\n@property (nonatomic, assign) BOOL validatesDomainName;\n\n///-----------------------------------------\n/// @name Getting Specific Security Policies\n///-----------------------------------------\n\n/**\n Returns the shared default security policy, which does not allow invalid certificates, validates domain name, and does not validate against pinned certificates or public keys.\n\n @return The default security policy.\n */\n+ (instancetype)defaultPolicy;\n\n///---------------------\n/// @name Initialization\n///---------------------\n\n/**\n Creates and returns a security policy with the specified pinning mode.\n\n @param pinningMode The SSL pinning mode.\n\n @return A new security policy.\n */\n+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode;\n\n///------------------------------\n/// @name Evaluating Server Trust\n///------------------------------\n\n/**\n Whether or not the specified server trust should be accepted, based on the security policy.\n\n This method should be used when responding to an authentication challenge from a server.\n\n @param serverTrust The X.509 certificate trust of the server.\n\n @return Whether or not to trust the server.\n\n @warning This method has been deprecated in favor of `-evaluateServerTrust:forDomain:`.\n */\n- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust DEPRECATED_ATTRIBUTE;\n\n/**\n Whether or not the specified server trust should be accepted, based on the security policy.\n\n This method should be used when responding to an authentication challenge from a server.\n\n @param serverTrust The X.509 certificate trust of the server.\n @param domain The domain of serverTrust. If `nil`, the domain will not be validated.\n\n @return Whether or not to trust the server.\n */\n- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust\n                  forDomain:(nullable NSString *)domain;\n\n@end\n\nNS_ASSUME_NONNULL_END\n\n///----------------\n/// @name Constants\n///----------------\n\n/**\n ## SSL Pinning Modes\n\n The following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes.\n\n enum {\n AFSSLPinningModeNone,\n AFSSLPinningModePublicKey,\n AFSSLPinningModeCertificate,\n }\n\n `AFSSLPinningModeNone`\n Do not used pinned certificates to validate servers.\n\n `AFSSLPinningModePublicKey`\n Validate host certificates against public keys of pinned certificates.\n\n `AFSSLPinningModeCertificate`\n Validate host certificates against pinned certificates.\n*/\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFSecurityPolicy.m",
    "content": "// AFSecurityPolicy.m\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import \"AFSecurityPolicy.h\"\n\n#import <AssertMacros.h>\n\n#if !defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\nstatic NSData * AFSecKeyGetData(SecKeyRef key) {\n    CFDataRef data = NULL;\n\n    __Require_noErr_Quiet(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out);\n\n    return (__bridge_transfer NSData *)data;\n\n_out:\n    if (data) {\n        CFRelease(data);\n    }\n\n    return nil;\n}\n#endif\n\nstatic BOOL AFSecKeyIsEqualToKey(SecKeyRef key1, SecKeyRef key2) {\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n    return [(__bridge id)key1 isEqual:(__bridge id)key2];\n#else\n    return [AFSecKeyGetData(key1) isEqual:AFSecKeyGetData(key2)];\n#endif\n}\n\nstatic id AFPublicKeyForCertificate(NSData *certificate) {\n    id allowedPublicKey = nil;\n    SecCertificateRef allowedCertificate;\n    SecCertificateRef allowedCertificates[1];\n    CFArrayRef tempCertificates = nil;\n    SecPolicyRef policy = nil;\n    SecTrustRef allowedTrust = nil;\n    SecTrustResultType result;\n\n    allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificate);\n    __Require_Quiet(allowedCertificate != NULL, _out);\n\n    allowedCertificates[0] = allowedCertificate;\n    tempCertificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL);\n\n    policy = SecPolicyCreateBasicX509();\n    __Require_noErr_Quiet(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out);\n    __Require_noErr_Quiet(SecTrustEvaluate(allowedTrust, &result), _out);\n\n    allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust);\n\n_out:\n    if (allowedTrust) {\n        CFRelease(allowedTrust);\n    }\n\n    if (policy) {\n        CFRelease(policy);\n    }\n\n    if (tempCertificates) {\n        CFRelease(tempCertificates);\n    }\n\n    if (allowedCertificate) {\n        CFRelease(allowedCertificate);\n    }\n\n    return allowedPublicKey;\n}\n\nstatic BOOL AFServerTrustIsValid(SecTrustRef serverTrust) {\n    BOOL isValid = NO;\n    SecTrustResultType result;\n    __Require_noErr_Quiet(SecTrustEvaluate(serverTrust, &result), _out);\n\n    isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed);\n\n_out:\n    return isValid;\n}\n\nstatic NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) {\n    CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust);\n    NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount];\n\n    for (CFIndex i = 0; i < certificateCount; i++) {\n        SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i);\n        [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)];\n    }\n\n    return [NSArray arrayWithArray:trustChain];\n}\n\nstatic NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) {\n    SecPolicyRef policy = SecPolicyCreateBasicX509();\n    CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust);\n    NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount];\n    for (CFIndex i = 0; i < certificateCount; i++) {\n        SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i);\n\n        SecCertificateRef someCertificates[] = {certificate};\n        CFArrayRef certificates = CFArrayCreate(NULL, (const void **)someCertificates, 1, NULL);\n\n        SecTrustRef trust;\n        __Require_noErr_Quiet(SecTrustCreateWithCertificates(certificates, policy, &trust), _out);\n\n        SecTrustResultType result;\n        __Require_noErr_Quiet(SecTrustEvaluate(trust, &result), _out);\n\n        [trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)];\n\n    _out:\n        if (trust) {\n            CFRelease(trust);\n        }\n\n        if (certificates) {\n            CFRelease(certificates);\n        }\n\n        continue;\n    }\n    CFRelease(policy);\n\n    return [NSArray arrayWithArray:trustChain];\n}\n\n#pragma mark -\n\n@interface AFSecurityPolicy()\n@property (readwrite, nonatomic, assign) AFSSLPinningMode SSLPinningMode;\n@property (readwrite, nonatomic, strong) NSArray *pinnedPublicKeys;\n@end\n\n@implementation AFSecurityPolicy\n\n+ (NSArray *)defaultPinnedCertificates {\n    static NSArray *_defaultPinnedCertificates = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        NSBundle *bundle = [NSBundle bundleForClass:[self class]];\n        NSArray *paths = [bundle pathsForResourcesOfType:@\"cer\" inDirectory:@\".\"];\n\n        NSMutableArray *certificates = [NSMutableArray arrayWithCapacity:[paths count]];\n        for (NSString *path in paths) {\n            NSData *certificateData = [NSData dataWithContentsOfFile:path];\n            [certificates addObject:certificateData];\n        }\n\n        _defaultPinnedCertificates = [[NSArray alloc] initWithArray:certificates];\n    });\n\n    return _defaultPinnedCertificates;\n}\n\n+ (instancetype)defaultPolicy {\n    AFSecurityPolicy *securityPolicy = [[self alloc] init];\n    securityPolicy.SSLPinningMode = AFSSLPinningModeNone;\n\n    return securityPolicy;\n}\n\n+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode {\n    AFSecurityPolicy *securityPolicy = [[self alloc] init];\n    securityPolicy.SSLPinningMode = pinningMode;\n\n    [securityPolicy setPinnedCertificates:[self defaultPinnedCertificates]];\n\n    return securityPolicy;\n}\n\n- (id)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.validatesDomainName = YES;\n\n    return self;\n}\n\n- (void)setPinnedCertificates:(NSArray *)pinnedCertificates {\n    _pinnedCertificates = [[NSOrderedSet orderedSetWithArray:pinnedCertificates] array];\n\n    if (self.pinnedCertificates) {\n        NSMutableArray *mutablePinnedPublicKeys = [NSMutableArray arrayWithCapacity:[self.pinnedCertificates count]];\n        for (NSData *certificate in self.pinnedCertificates) {\n            id publicKey = AFPublicKeyForCertificate(certificate);\n            if (!publicKey) {\n                continue;\n            }\n            [mutablePinnedPublicKeys addObject:publicKey];\n        }\n        self.pinnedPublicKeys = [NSArray arrayWithArray:mutablePinnedPublicKeys];\n    } else {\n        self.pinnedPublicKeys = nil;\n    }\n}\n\n#pragma mark -\n\n- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust {\n    return [self evaluateServerTrust:serverTrust forDomain:nil];\n}\n\n- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust\n                  forDomain:(NSString *)domain\n{\n    if (domain && self.allowInvalidCertificates && self.validatesDomainName && (self.SSLPinningMode == AFSSLPinningModeNone || [self.pinnedCertificates count] == 0)) {\n        // https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/OverridingSSLChainValidationCorrectly.html\n        //  According to the docs, you should only trust your provided certs for evaluation.\n        //  Pinned certificates are added to the trust. Without pinned certificates,\n        //  there is nothing to evaluate against.\n        //\n        //  From Apple Docs:\n        //          \"Do not implicitly trust self-signed certificates as anchors (kSecTrustOptionImplicitAnchors).\n        //           Instead, add your own (self-signed) CA certificate to the list of trusted anchors.\"\n        NSLog(@\"In order to validate a domain name for self signed certificates, you MUST use pinning.\");\n        return NO;\n    }\n\n    NSMutableArray *policies = [NSMutableArray array];\n    if (self.validatesDomainName) {\n        [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)];\n    } else {\n        [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()];\n    }\n\n    SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies);\n\n    if (self.SSLPinningMode == AFSSLPinningModeNone) {\n        if (self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust)){\n            return YES;\n        } else {\n            return NO;\n        }\n    } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) {\n        return NO;\n    }\n\n    NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust);\n    switch (self.SSLPinningMode) {\n        case AFSSLPinningModeNone:\n        default:\n            return NO;\n        case AFSSLPinningModeCertificate: {\n            NSMutableArray *pinnedCertificates = [NSMutableArray array];\n            for (NSData *certificateData in self.pinnedCertificates) {\n                [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)];\n            }\n            SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates);\n\n            if (!AFServerTrustIsValid(serverTrust)) {\n                return NO;\n            }\n\n            NSUInteger trustedCertificateCount = 0;\n            for (NSData *trustChainCertificate in serverCertificates) {\n                if ([self.pinnedCertificates containsObject:trustChainCertificate]) {\n                    trustedCertificateCount++;\n                }\n            }\n            return trustedCertificateCount > 0;\n        }\n        case AFSSLPinningModePublicKey: {\n            NSUInteger trustedPublicKeyCount = 0;\n            NSArray *publicKeys = AFPublicKeyTrustChainForServerTrust(serverTrust);\n\n            for (id trustChainPublicKey in publicKeys) {\n                for (id pinnedPublicKey in self.pinnedPublicKeys) {\n                    if (AFSecKeyIsEqualToKey((__bridge SecKeyRef)trustChainPublicKey, (__bridge SecKeyRef)pinnedPublicKey)) {\n                        trustedPublicKeyCount += 1;\n                    }\n                }\n            }\n            return trustedPublicKeyCount > 0;\n        }\n    }\n    \n    return NO;\n}\n\n#pragma mark - NSKeyValueObserving\n\n+ (NSSet *)keyPathsForValuesAffectingPinnedPublicKeys {\n    return [NSSet setWithObject:@\"pinnedCertificates\"];\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFURLConnectionOperation.h",
    "content": "// AFURLConnectionOperation.h\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n\n#import <Availability.h>\n#import \"AFURLRequestSerialization.h\"\n#import \"AFURLResponseSerialization.h\"\n#import \"AFSecurityPolicy.h\"\n\n#ifndef NS_DESIGNATED_INITIALIZER\n#if __has_attribute(objc_designated_initializer)\n#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))\n#else\n#define NS_DESIGNATED_INITIALIZER\n#endif\n#endif\n\n/**\n `AFURLConnectionOperation` is a subclass of `NSOperation` that implements `NSURLConnection` delegate methods.\n\n ## Subclassing Notes\n\n This is the base class of all network request operations. You may wish to create your own subclass in order to implement additional `NSURLConnection` delegate methods (see \"`NSURLConnection` Delegate Methods\" below), or to provide additional properties and/or class constructors.\n\n If you are creating a subclass that communicates over the HTTP or HTTPS protocols, you may want to consider subclassing `AFHTTPRequestOperation` instead, as it supports specifying acceptable content types or status codes.\n\n ## NSURLConnection Delegate Methods\n\n `AFURLConnectionOperation` implements the following `NSURLConnection` delegate methods:\n\n - `connection:didReceiveResponse:`\n - `connection:didReceiveData:`\n - `connectionDidFinishLoading:`\n - `connection:didFailWithError:`\n - `connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:`\n - `connection:willCacheResponse:`\n - `connectionShouldUseCredentialStorage:`\n - `connection:needNewBodyStream:`\n - `connection:willSendRequestForAuthenticationChallenge:`\n\n If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first.\n\n ## Callbacks and Completion Blocks\n\n The built-in `completionBlock` provided by `NSOperation` allows for custom behavior to be executed after the request finishes. It is a common pattern for class constructors in subclasses to take callback block parameters, and execute them conditionally in the body of its `completionBlock`. Make sure to handle cancelled operations appropriately when setting a `completionBlock` (i.e. returning early before parsing response data). See the implementation of any of the `AFHTTPRequestOperation` subclasses for an example of this.\n\n Subclasses are strongly discouraged from overriding `setCompletionBlock:`, as `AFURLConnectionOperation`'s implementation includes a workaround to mitigate retain cycles, and what Apple rather ominously refers to as [\"The Deallocation Problem\"](http://developer.apple.com/library/ios/#technotes/tn2109/).\n\n ## SSL Pinning\n\n Relying on the CA trust model to validate SSL certificates exposes your app to security vulnerabilities, such as man-in-the-middle attacks. For applications that connect to known servers, SSL certificate pinning provides an increased level of security, by checking server certificate validity against those specified in the app bundle.\n\n SSL with certificate pinning is strongly recommended for any application that transmits sensitive information to an external webservice.\n\n Connections will be validated on all matching certificates with a `.cer` extension in the bundle root.\n\n ## NSCoding & NSCopying Conformance\n\n `AFURLConnectionOperation` conforms to the `NSCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. However, because of the intrinsic limitations of capturing the exact state of an operation at a particular moment, there are some important caveats to keep in mind:\n\n ### NSCoding Caveats\n\n - Encoded operations do not include any block or stream properties. Be sure to set `completionBlock`, `outputStream`, and any callback blocks as necessary when using `-initWithCoder:` or `NSKeyedUnarchiver`.\n - Operations are paused on `encodeWithCoder:`. If the operation was encoded while paused or still executing, its archived state will return `YES` for `isReady`. Otherwise, the state of an operation when encoding will remain unchanged.\n\n ### NSCopying Caveats\n\n - `-copy` and `-copyWithZone:` return a new operation with the `NSURLRequest` of the original. So rather than an exact copy of the operation at that particular instant, the copying mechanism returns a completely new instance, which can be useful for retrying operations.\n - A copy of an operation will not include the `outputStream` of the original.\n - Operation copies do not include `completionBlock`, as it often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ operation when copied.\n */\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface AFURLConnectionOperation : NSOperation <NSURLConnectionDelegate, NSURLConnectionDataDelegate, NSSecureCoding, NSCopying>\n\n///-------------------------------\n/// @name Accessing Run Loop Modes\n///-------------------------------\n\n/**\n The run loop modes in which the operation will run on the network thread. By default, this is a single-member set containing `NSRunLoopCommonModes`.\n */\n@property (nonatomic, strong) NSSet *runLoopModes;\n\n///-----------------------------------------\n/// @name Getting URL Connection Information\n///-----------------------------------------\n\n/**\n The request used by the operation's connection.\n */\n@property (readonly, nonatomic, strong) NSURLRequest *request;\n\n/**\n The last response received by the operation's connection.\n */\n@property (readonly, nonatomic, strong, nullable) NSURLResponse *response;\n\n/**\n The error, if any, that occurred in the lifecycle of the request.\n */\n@property (readonly, nonatomic, strong, nullable) NSError *error;\n\n///----------------------------\n/// @name Getting Response Data\n///----------------------------\n\n/**\n The data received during the request.\n */\n@property (readonly, nonatomic, strong, nullable) NSData *responseData;\n\n/**\n The string representation of the response data.\n */\n@property (readonly, nonatomic, copy, nullable) NSString *responseString;\n\n/**\n The string encoding of the response.\n\n If the response does not specify a valid string encoding, `responseStringEncoding` will return `NSUTF8StringEncoding`.\n */\n@property (readonly, nonatomic, assign) NSStringEncoding responseStringEncoding;\n\n///-------------------------------\n/// @name Managing URL Credentials\n///-------------------------------\n\n/**\n Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default.\n\n This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`.\n */\n@property (nonatomic, assign) BOOL shouldUseCredentialStorage;\n\n/**\n The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`.\n\n This will be overridden by any shared credentials that exist for the username or password of the request URL, if present.\n */\n@property (nonatomic, strong, nullable) NSURLCredential *credential;\n\n///-------------------------------\n/// @name Managing Security Policy\n///-------------------------------\n\n/**\n The security policy used to evaluate server trust for secure connections.\n */\n@property (nonatomic, strong) AFSecurityPolicy *securityPolicy;\n\n///------------------------\n/// @name Accessing Streams\n///------------------------\n\n/**\n The input stream used to read data to be sent during the request.\n\n This property acts as a proxy to the `HTTPBodyStream` property of `request`.\n */\n@property (nonatomic, strong) NSInputStream *inputStream;\n\n/**\n The output stream that is used to write data received until the request is finished.\n\n By default, data is accumulated into a buffer that is stored into `responseData` upon completion of the request, with the intermediary `outputStream` property set to `nil`. When `outputStream` is set, the data will not be accumulated into an internal buffer, and as a result, the `responseData` property of the completed request will be `nil`. The output stream will be scheduled in the network thread runloop upon being set.\n */\n@property (nonatomic, strong, nullable) NSOutputStream *outputStream;\n\n///---------------------------------\n/// @name Managing Callback Queues\n///---------------------------------\n\n/**\n The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used.\n */\n#if OS_OBJECT_HAVE_OBJC_SUPPORT\n@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue;\n#else\n@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue;\n#endif\n\n/**\n The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used.\n */\n#if OS_OBJECT_HAVE_OBJC_SUPPORT\n@property (nonatomic, strong, nullable) dispatch_group_t completionGroup;\n#else\n@property (nonatomic, assign, nullable) dispatch_group_t completionGroup;\n#endif\n\n///---------------------------------------------\n/// @name Managing Request Operation Information\n///---------------------------------------------\n\n/**\n The user info dictionary for the receiver.\n */\n@property (nonatomic, strong) NSDictionary *userInfo;\n// FIXME: It doesn't seem that this userInfo is used anywhere in the implementation.\n\n///------------------------------------------------------\n/// @name Initializing an AFURLConnectionOperation Object\n///------------------------------------------------------\n\n/**\n Initializes and returns a newly allocated operation object with a url connection configured with the specified url request.\n\n This is the designated initializer.\n\n @param urlRequest The request object to be used by the operation connection.\n */\n- (instancetype)initWithRequest:(NSURLRequest *)urlRequest NS_DESIGNATED_INITIALIZER;\n\n///----------------------------------\n/// @name Pausing / Resuming Requests\n///----------------------------------\n\n/**\n Pauses the execution of the request operation.\n\n A paused operation returns `NO` for `-isReady`, `-isExecuting`, and `-isFinished`. As such, it will remain in an `NSOperationQueue` until it is either cancelled or resumed. Pausing a finished, cancelled, or paused operation has no effect.\n */\n- (void)pause;\n\n/**\n Whether the request operation is currently paused.\n\n @return `YES` if the operation is currently paused, otherwise `NO`.\n */\n- (BOOL)isPaused;\n\n/**\n Resumes the execution of the paused request operation.\n\n Pause/Resume behavior varies depending on the underlying implementation for the operation class. In its base implementation, resuming a paused requests restarts the original request. However, since HTTP defines a specification for how to request a specific content range, `AFHTTPRequestOperation` will resume downloading the request from where it left off, instead of restarting the original request.\n */\n- (void)resume;\n\n///----------------------------------------------\n/// @name Configuring Backgrounding Task Behavior\n///----------------------------------------------\n\n/**\n Specifies that the operation should continue execution after the app has entered the background, and the expiration handler for that background task.\n\n @param handler A handler to be called shortly before the application’s remaining background time reaches 0. The handler is wrapped in a block that cancels the operation, and cleans up and marks the end of execution, unlike the `handler` parameter in `UIApplication -beginBackgroundTaskWithExpirationHandler:`, which expects this to be done in the handler itself. The handler is called synchronously on the main thread, thus blocking the application’s suspension momentarily while the application is notified.\n  */\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(nullable void (^)(void))handler NS_EXTENSION_UNAVAILABLE_IOS(\"Not available in app extensions.\");\n#endif\n\n///---------------------------------\n/// @name Setting Progress Callbacks\n///---------------------------------\n\n/**\n Sets a callback to be called when an undetermined number of bytes have been uploaded to the server.\n\n @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes three arguments: the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread.\n */\n- (void)setUploadProgressBlock:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block;\n\n/**\n Sets a callback to be called when an undetermined number of bytes have been downloaded from the server.\n\n @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread.\n */\n- (void)setDownloadProgressBlock:(nullable void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block;\n\n///-------------------------------------------------\n/// @name Setting NSURLConnection Delegate Callbacks\n///-------------------------------------------------\n\n/**\n Sets a block to be executed when the connection will authenticate a challenge in order to download its request, as handled by the `NSURLConnectionDelegate` method `connection:willSendRequestForAuthenticationChallenge:`.\n\n @param block A block object to be executed when the connection will authenticate a challenge in order to download its request. The block has no return type and takes two arguments: the URL connection object, and the challenge that must be authenticated. This block must invoke one of the challenge-responder methods (NSURLAuthenticationChallengeSender protocol).\n\n If `allowsInvalidSSLCertificate` is set to YES, `connection:willSendRequestForAuthenticationChallenge:` will attempt to have the challenge sender use credentials with invalid SSL certificates.\n */\n- (void)setWillSendRequestForAuthenticationChallengeBlock:(nullable void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block;\n\n/**\n Sets a block to be executed when the server redirects the request from one URL to another URL, or when the request URL changed by the `NSURLProtocol` subclass handling the request in order to standardize its format, as handled by the `NSURLConnectionDataDelegate` method `connection:willSendRequest:redirectResponse:`.\n\n @param block A block object to be executed when the request URL was changed. The block returns an `NSURLRequest` object, the URL request to redirect, and takes three arguments: the URL connection object, the the proposed redirected request, and the URL response that caused the redirect.\n */\n- (void)setRedirectResponseBlock:(nullable NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block;\n\n\n/**\n Sets a block to be executed to modify the response a connection will cache, if any, as handled by the `NSURLConnectionDelegate` method `connection:willCacheResponse:`.\n\n @param block A block object to be executed to determine what response a connection will cache, if any. The block returns an `NSCachedURLResponse` object, the cached response to store in memory or `nil` to prevent the response from being cached, and takes two arguments: the URL connection object, and the cached response provided for the request.\n */\n- (void)setCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block;\n\n///\n\n/**\n\n */\n+ (NSArray *)batchOfRequestOperations:(nullable NSArray *)operations\n                        progressBlock:(nullable void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock\n                      completionBlock:(nullable void (^)(NSArray *operations))completionBlock;\n\n@end\n\n///--------------------\n/// @name Notifications\n///--------------------\n\n/**\n Posted when an operation begins executing.\n */\nextern NSString * const AFNetworkingOperationDidStartNotification;\n\n/**\n Posted when an operation finishes.\n */\nextern NSString * const AFNetworkingOperationDidFinishNotification;\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFURLConnectionOperation.m",
    "content": "// AFURLConnectionOperation.m\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import \"AFURLConnectionOperation.h\"\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n#import <UIKit/UIKit.h>\n#endif\n\n#if !__has_feature(objc_arc)\n#error AFNetworking must be built with ARC.\n// You can turn on ARC for only AFNetworking files by adding -fobjc-arc to the build phase for each of its files.\n#endif\n\ntypedef NS_ENUM(NSInteger, AFOperationState) {\n    AFOperationPausedState      = -1,\n    AFOperationReadyState       = 1,\n    AFOperationExecutingState   = 2,\n    AFOperationFinishedState    = 3,\n};\n\nstatic dispatch_group_t url_request_operation_completion_group() {\n    static dispatch_group_t af_url_request_operation_completion_group;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        af_url_request_operation_completion_group = dispatch_group_create();\n    });\n\n    return af_url_request_operation_completion_group;\n}\n\nstatic dispatch_queue_t url_request_operation_completion_queue() {\n    static dispatch_queue_t af_url_request_operation_completion_queue;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        af_url_request_operation_completion_queue = dispatch_queue_create(\"com.alamofire.networking.operation.queue\", DISPATCH_QUEUE_CONCURRENT );\n    });\n\n    return af_url_request_operation_completion_queue;\n}\n\nstatic NSString * const kAFNetworkingLockName = @\"com.alamofire.networking.operation.lock\";\n\nNSString * const AFNetworkingOperationDidStartNotification = @\"com.alamofire.networking.operation.start\";\nNSString * const AFNetworkingOperationDidFinishNotification = @\"com.alamofire.networking.operation.finish\";\n\ntypedef void (^AFURLConnectionOperationProgressBlock)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected);\ntypedef void (^AFURLConnectionOperationAuthenticationChallengeBlock)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge);\ntypedef NSCachedURLResponse * (^AFURLConnectionOperationCacheResponseBlock)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse);\ntypedef NSURLRequest * (^AFURLConnectionOperationRedirectResponseBlock)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse);\ntypedef void (^AFURLConnectionOperationBackgroundTaskCleanupBlock)();\n\nstatic inline NSString * AFKeyPathFromOperationState(AFOperationState state) {\n    switch (state) {\n        case AFOperationReadyState:\n            return @\"isReady\";\n        case AFOperationExecutingState:\n            return @\"isExecuting\";\n        case AFOperationFinishedState:\n            return @\"isFinished\";\n        case AFOperationPausedState:\n            return @\"isPaused\";\n        default: {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wunreachable-code\"\n            return @\"state\";\n#pragma clang diagnostic pop\n        }\n    }\n}\n\nstatic inline BOOL AFStateTransitionIsValid(AFOperationState fromState, AFOperationState toState, BOOL isCancelled) {\n    switch (fromState) {\n        case AFOperationReadyState:\n            switch (toState) {\n                case AFOperationPausedState:\n                case AFOperationExecutingState:\n                    return YES;\n                case AFOperationFinishedState:\n                    return isCancelled;\n                default:\n                    return NO;\n            }\n        case AFOperationExecutingState:\n            switch (toState) {\n                case AFOperationPausedState:\n                case AFOperationFinishedState:\n                    return YES;\n                default:\n                    return NO;\n            }\n        case AFOperationFinishedState:\n            return NO;\n        case AFOperationPausedState:\n            return toState == AFOperationReadyState;\n        default: {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wunreachable-code\"\n            switch (toState) {\n                case AFOperationPausedState:\n                case AFOperationReadyState:\n                case AFOperationExecutingState:\n                case AFOperationFinishedState:\n                    return YES;\n                default:\n                    return NO;\n            }\n        }\n#pragma clang diagnostic pop\n    }\n}\n\n@interface AFURLConnectionOperation ()\n@property (readwrite, nonatomic, assign) AFOperationState state;\n@property (readwrite, nonatomic, strong) NSRecursiveLock *lock;\n@property (readwrite, nonatomic, strong) NSURLConnection *connection;\n@property (readwrite, nonatomic, strong) NSURLRequest *request;\n@property (readwrite, nonatomic, strong) NSURLResponse *response;\n@property (readwrite, nonatomic, strong) NSError *error;\n@property (readwrite, nonatomic, strong) NSData *responseData;\n@property (readwrite, nonatomic, copy) NSString *responseString;\n@property (readwrite, nonatomic, assign) NSStringEncoding responseStringEncoding;\n@property (readwrite, nonatomic, assign) long long totalBytesRead;\n@property (readwrite, nonatomic, copy) AFURLConnectionOperationBackgroundTaskCleanupBlock backgroundTaskCleanup;\n@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock uploadProgress;\n@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock downloadProgress;\n@property (readwrite, nonatomic, copy) AFURLConnectionOperationAuthenticationChallengeBlock authenticationChallenge;\n@property (readwrite, nonatomic, copy) AFURLConnectionOperationCacheResponseBlock cacheResponse;\n@property (readwrite, nonatomic, copy) AFURLConnectionOperationRedirectResponseBlock redirectResponse;\n\n- (void)operationDidStart;\n- (void)finish;\n- (void)cancelConnection;\n@end\n\n@implementation AFURLConnectionOperation\n@synthesize outputStream = _outputStream;\n\n+ (void)networkRequestThreadEntryPoint:(id)__unused object {\n    @autoreleasepool {\n        [[NSThread currentThread] setName:@\"AFNetworking\"];\n\n        NSRunLoop *runLoop = [NSRunLoop currentRunLoop];\n        [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];\n        [runLoop run];\n    }\n}\n\n+ (NSThread *)networkRequestThread {\n    static NSThread *_networkRequestThread = nil;\n    static dispatch_once_t oncePredicate;\n    dispatch_once(&oncePredicate, ^{\n        _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil];\n        [_networkRequestThread start];\n    });\n\n    return _networkRequestThread;\n}\n\n- (instancetype)initWithRequest:(NSURLRequest *)urlRequest {\n    NSParameterAssert(urlRequest);\n\n    self = [super init];\n    if (!self) {\n\t\treturn nil;\n    }\n\n    _state = AFOperationReadyState;\n\n    self.lock = [[NSRecursiveLock alloc] init];\n    self.lock.name = kAFNetworkingLockName;\n\n    self.runLoopModes = [NSSet setWithObject:NSRunLoopCommonModes];\n\n    self.request = urlRequest;\n\n    self.shouldUseCredentialStorage = YES;\n\n    self.securityPolicy = [AFSecurityPolicy defaultPolicy];\n\n    return self;\n}\n\n- (instancetype)init NS_UNAVAILABLE\n{\n    return nil;\n}\n\n- (void)dealloc {\n    if (_outputStream) {\n        [_outputStream close];\n        _outputStream = nil;\n    }\n    \n    if (_backgroundTaskCleanup) {\n        _backgroundTaskCleanup();\n    }\n}\n\n#pragma mark -\n\n- (void)setResponseData:(NSData *)responseData {\n    [self.lock lock];\n    if (!responseData) {\n        _responseData = nil;\n    } else {\n        _responseData = [NSData dataWithBytes:responseData.bytes length:responseData.length];\n    }\n    [self.lock unlock];\n}\n\n- (NSString *)responseString {\n    [self.lock lock];\n    if (!_responseString && self.response && self.responseData) {\n        self.responseString = [[NSString alloc] initWithData:self.responseData encoding:self.responseStringEncoding];\n    }\n    [self.lock unlock];\n\n    return _responseString;\n}\n\n- (NSStringEncoding)responseStringEncoding {\n    [self.lock lock];\n    if (!_responseStringEncoding && self.response) {\n        NSStringEncoding stringEncoding = NSUTF8StringEncoding;\n        if (self.response.textEncodingName) {\n            CFStringEncoding IANAEncoding = CFStringConvertIANACharSetNameToEncoding((__bridge CFStringRef)self.response.textEncodingName);\n            if (IANAEncoding != kCFStringEncodingInvalidId) {\n                stringEncoding = CFStringConvertEncodingToNSStringEncoding(IANAEncoding);\n            }\n        }\n\n        self.responseStringEncoding = stringEncoding;\n    }\n    [self.lock unlock];\n\n    return _responseStringEncoding;\n}\n\n- (NSInputStream *)inputStream {\n    return self.request.HTTPBodyStream;\n}\n\n- (void)setInputStream:(NSInputStream *)inputStream {\n    NSMutableURLRequest *mutableRequest = [self.request mutableCopy];\n    mutableRequest.HTTPBodyStream = inputStream;\n    self.request = mutableRequest;\n}\n\n- (NSOutputStream *)outputStream {\n    if (!_outputStream) {\n        self.outputStream = [NSOutputStream outputStreamToMemory];\n    }\n\n    return _outputStream;\n}\n\n- (void)setOutputStream:(NSOutputStream *)outputStream {\n    [self.lock lock];\n    if (outputStream != _outputStream) {\n        if (_outputStream) {\n            [_outputStream close];\n        }\n\n        _outputStream = outputStream;\n    }\n    [self.lock unlock];\n}\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler {\n    [self.lock lock];\n    if (!self.backgroundTaskCleanup) {\n        UIApplication *application = [UIApplication sharedApplication];\n        UIBackgroundTaskIdentifier __block backgroundTaskIdentifier = UIBackgroundTaskInvalid;\n        __weak __typeof(self)weakSelf = self;\n        \n        self.backgroundTaskCleanup = ^(){\n            if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) {\n                [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskIdentifier];\n                backgroundTaskIdentifier = UIBackgroundTaskInvalid;\n            }\n        };\n        \n        backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{\n            __strong __typeof(weakSelf)strongSelf = weakSelf;\n\n            if (handler) {\n                handler();\n            }\n\n            if (strongSelf) {\n                [strongSelf cancel];\n                strongSelf.backgroundTaskCleanup();\n            }\n        }];\n    }\n    [self.lock unlock];\n}\n#endif\n\n#pragma mark -\n\n- (void)setState:(AFOperationState)state {\n    if (!AFStateTransitionIsValid(self.state, state, [self isCancelled])) {\n        return;\n    }\n\n    [self.lock lock];\n    NSString *oldStateKey = AFKeyPathFromOperationState(self.state);\n    NSString *newStateKey = AFKeyPathFromOperationState(state);\n\n    [self willChangeValueForKey:newStateKey];\n    [self willChangeValueForKey:oldStateKey];\n    _state = state;\n    [self didChangeValueForKey:oldStateKey];\n    [self didChangeValueForKey:newStateKey];\n    [self.lock unlock];\n}\n\n- (void)pause {\n    if ([self isPaused] || [self isFinished] || [self isCancelled]) {\n        return;\n    }\n\n    [self.lock lock];\n    if ([self isExecuting]) {\n        [self performSelector:@selector(operationDidPause) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]];\n\n        dispatch_async(dispatch_get_main_queue(), ^{\n            NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n            [notificationCenter postNotificationName:AFNetworkingOperationDidFinishNotification object:self];\n        });\n    }\n\n    self.state = AFOperationPausedState;\n    [self.lock unlock];\n}\n\n- (void)operationDidPause {\n    [self.lock lock];\n    [self.connection cancel];\n    [self.lock unlock];\n}\n\n- (BOOL)isPaused {\n    return self.state == AFOperationPausedState;\n}\n\n- (void)resume {\n    if (![self isPaused]) {\n        return;\n    }\n\n    [self.lock lock];\n    self.state = AFOperationReadyState;\n\n    [self start];\n    [self.lock unlock];\n}\n\n#pragma mark -\n\n- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block {\n    self.uploadProgress = block;\n}\n\n- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block {\n    self.downloadProgress = block;\n}\n\n- (void)setWillSendRequestForAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block {\n    self.authenticationChallenge = block;\n}\n\n- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block {\n    self.cacheResponse = block;\n}\n\n- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block {\n    self.redirectResponse = block;\n}\n\n#pragma mark - NSOperation\n\n- (void)setCompletionBlock:(void (^)(void))block {\n    [self.lock lock];\n    if (!block) {\n        [super setCompletionBlock:nil];\n    } else {\n        __weak __typeof(self)weakSelf = self;\n        [super setCompletionBlock:^ {\n            __strong __typeof(weakSelf)strongSelf = weakSelf;\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n            dispatch_group_t group = strongSelf.completionGroup ?: url_request_operation_completion_group();\n            dispatch_queue_t queue = strongSelf.completionQueue ?: dispatch_get_main_queue();\n#pragma clang diagnostic pop\n\n            dispatch_group_async(group, queue, ^{\n                block();\n            });\n\n            dispatch_group_notify(group, url_request_operation_completion_queue(), ^{\n                [strongSelf setCompletionBlock:nil];\n            });\n        }];\n    }\n    [self.lock unlock];\n}\n\n- (BOOL)isReady {\n    return self.state == AFOperationReadyState && [super isReady];\n}\n\n- (BOOL)isExecuting {\n    return self.state == AFOperationExecutingState;\n}\n\n- (BOOL)isFinished {\n    return self.state == AFOperationFinishedState;\n}\n\n- (BOOL)isConcurrent {\n    return YES;\n}\n\n- (void)start {\n    [self.lock lock];\n    if ([self isCancelled]) {\n        [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]];\n    } else if ([self isReady]) {\n        self.state = AFOperationExecutingState;\n\n        [self performSelector:@selector(operationDidStart) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]];\n    }\n    [self.lock unlock];\n}\n\n- (void)operationDidStart {\n    [self.lock lock];\n    if (![self isCancelled]) {\n        self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO];\n\n        NSRunLoop *runLoop = [NSRunLoop currentRunLoop];\n        for (NSString *runLoopMode in self.runLoopModes) {\n            [self.connection scheduleInRunLoop:runLoop forMode:runLoopMode];\n            [self.outputStream scheduleInRunLoop:runLoop forMode:runLoopMode];\n        }\n\n        [self.outputStream open];\n        [self.connection start];\n    }\n    [self.lock unlock];\n\n    dispatch_async(dispatch_get_main_queue(), ^{\n        [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidStartNotification object:self];\n    });\n}\n\n- (void)finish {\n    [self.lock lock];\n    self.state = AFOperationFinishedState;\n    [self.lock unlock];\n\n    dispatch_async(dispatch_get_main_queue(), ^{\n        [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidFinishNotification object:self];\n    });\n}\n\n- (void)cancel {\n    [self.lock lock];\n    if (![self isFinished] && ![self isCancelled]) {\n        [super cancel];\n\n        if ([self isExecuting]) {\n            [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]];\n        }\n    }\n    [self.lock unlock];\n}\n\n- (void)cancelConnection {\n    NSDictionary *userInfo = nil;\n    if ([self.request URL]) {\n        userInfo = @{NSURLErrorFailingURLErrorKey : [self.request URL]};\n    }\n    NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled userInfo:userInfo];\n\n    if (![self isFinished]) {\n        if (self.connection) {\n            [self.connection cancel];\n            [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:error];\n        } else {\n            // Accommodate race condition where `self.connection` has not yet been set before cancellation\n            self.error = error;\n            [self finish];\n        }\n    }\n}\n\n#pragma mark -\n\n+ (NSArray *)batchOfRequestOperations:(NSArray *)operations\n                        progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock\n                      completionBlock:(void (^)(NSArray *operations))completionBlock\n{\n    if (!operations || [operations count] == 0) {\n        return @[[NSBlockOperation blockOperationWithBlock:^{\n            dispatch_async(dispatch_get_main_queue(), ^{\n                if (completionBlock) {\n                    completionBlock(@[]);\n                }\n            });\n        }]];\n    }\n\n    __block dispatch_group_t group = dispatch_group_create();\n    NSBlockOperation *batchedOperation = [NSBlockOperation blockOperationWithBlock:^{\n        dispatch_group_notify(group, dispatch_get_main_queue(), ^{\n            if (completionBlock) {\n                completionBlock(operations);\n            }\n        });\n    }];\n\n    for (AFURLConnectionOperation *operation in operations) {\n        operation.completionGroup = group;\n        void (^originalCompletionBlock)(void) = [operation.completionBlock copy];\n        __weak __typeof(operation)weakOperation = operation;\n        operation.completionBlock = ^{\n            __strong __typeof(weakOperation)strongOperation = weakOperation;\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n            dispatch_queue_t queue = strongOperation.completionQueue ?: dispatch_get_main_queue();\n#pragma clang diagnostic pop\n            dispatch_group_async(group, queue, ^{\n                if (originalCompletionBlock) {\n                    originalCompletionBlock();\n                }\n\n                NSUInteger numberOfFinishedOperations = [[operations indexesOfObjectsPassingTest:^BOOL(id op, NSUInteger __unused idx,  BOOL __unused *stop) {\n                    return [op isFinished];\n                }] count];\n\n                if (progressBlock) {\n                    progressBlock(numberOfFinishedOperations, [operations count]);\n                }\n\n                dispatch_group_leave(group);\n            });\n        };\n\n        dispatch_group_enter(group);\n        [batchedOperation addDependency:operation];\n    }\n\n    return [operations arrayByAddingObject:batchedOperation];\n}\n\n#pragma mark - NSObject\n\n- (NSString *)description {\n    [self.lock lock];\n    NSString *description = [NSString stringWithFormat:@\"<%@: %p, state: %@, cancelled: %@ request: %@, response: %@>\", NSStringFromClass([self class]), self, AFKeyPathFromOperationState(self.state), ([self isCancelled] ? @\"YES\" : @\"NO\"), self.request, self.response];\n    [self.lock unlock];\n    return description;\n}\n\n#pragma mark - NSURLConnectionDelegate\n\n- (void)connection:(NSURLConnection *)connection\nwillSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge\n{\n    if (self.authenticationChallenge) {\n        self.authenticationChallenge(connection, challenge);\n        return;\n    }\n\n    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {\n        if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) {\n            NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];\n            [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];\n        } else {\n            [[challenge sender] cancelAuthenticationChallenge:challenge];\n        }\n    } else {\n        if ([challenge previousFailureCount] == 0) {\n            if (self.credential) {\n                [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge];\n            } else {\n                [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];\n            }\n        } else {\n            [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];\n        }\n    }\n}\n\n- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection {\n    return self.shouldUseCredentialStorage;\n}\n\n- (NSURLRequest *)connection:(NSURLConnection *)connection\n             willSendRequest:(NSURLRequest *)request\n            redirectResponse:(NSURLResponse *)redirectResponse\n{\n    if (self.redirectResponse) {\n        return self.redirectResponse(connection, request, redirectResponse);\n    } else {\n        return request;\n    }\n}\n\n- (void)connection:(NSURLConnection __unused *)connection\n   didSendBodyData:(NSInteger)bytesWritten\n totalBytesWritten:(NSInteger)totalBytesWritten\ntotalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite\n{\n    dispatch_async(dispatch_get_main_queue(), ^{\n        if (self.uploadProgress) {\n            self.uploadProgress((NSUInteger)bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);\n        }\n    });\n}\n\n- (void)connection:(NSURLConnection __unused *)connection\ndidReceiveResponse:(NSURLResponse *)response\n{\n    self.response = response;\n}\n\n- (void)connection:(NSURLConnection __unused *)connection\n    didReceiveData:(NSData *)data\n{\n    NSUInteger length = [data length];\n    while (YES) {\n        NSInteger totalNumberOfBytesWritten = 0;\n        if ([self.outputStream hasSpaceAvailable]) {\n            const uint8_t *dataBuffer = (uint8_t *)[data bytes];\n\n            NSInteger numberOfBytesWritten = 0;\n            while (totalNumberOfBytesWritten < (NSInteger)length) {\n                numberOfBytesWritten = [self.outputStream write:&dataBuffer[(NSUInteger)totalNumberOfBytesWritten] maxLength:(length - (NSUInteger)totalNumberOfBytesWritten)];\n                if (numberOfBytesWritten == -1) {\n                    break;\n                }\n\n                totalNumberOfBytesWritten += numberOfBytesWritten;\n            }\n\n            break;\n        }\n\n        if (self.outputStream.streamError) {\n            [self.connection cancel];\n            [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:self.outputStream.streamError];\n            return;\n        }\n    }\n\n    dispatch_async(dispatch_get_main_queue(), ^{\n        self.totalBytesRead += (long long)length;\n\n        if (self.downloadProgress) {\n            self.downloadProgress(length, self.totalBytesRead, self.response.expectedContentLength);\n        }\n    });\n}\n\n- (void)connectionDidFinishLoading:(NSURLConnection __unused *)connection {\n    self.responseData = [self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];\n\n    [self.outputStream close];\n    if (self.responseData) {\n       self.outputStream = nil;\n    }\n\n    self.connection = nil;\n\n    [self finish];\n}\n\n- (void)connection:(NSURLConnection __unused *)connection\n  didFailWithError:(NSError *)error\n{\n    self.error = error;\n\n    [self.outputStream close];\n    if (self.responseData) {\n        self.outputStream = nil;\n    }\n\n    self.connection = nil;\n\n    [self finish];\n}\n\n- (NSCachedURLResponse *)connection:(NSURLConnection *)connection\n                  willCacheResponse:(NSCachedURLResponse *)cachedResponse\n{\n    if (self.cacheResponse) {\n        return self.cacheResponse(connection, cachedResponse);\n    } else {\n        if ([self isCancelled]) {\n            return nil;\n        }\n\n        return cachedResponse;\n    }\n}\n\n#pragma mark - NSSecureCoding\n\n+ (BOOL)supportsSecureCoding {\n    return YES;\n}\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    NSURLRequest *request = [decoder decodeObjectOfClass:[NSURLRequest class] forKey:NSStringFromSelector(@selector(request))];\n\n    self = [self initWithRequest:request];\n    if (!self) {\n        return nil;\n    }\n\n    self.state = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(state))] integerValue];\n    self.response = [decoder decodeObjectOfClass:[NSHTTPURLResponse class] forKey:NSStringFromSelector(@selector(response))];\n    self.error = [decoder decodeObjectOfClass:[NSError class] forKey:NSStringFromSelector(@selector(error))];\n    self.responseData = [decoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(responseData))];\n    self.totalBytesRead = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(totalBytesRead))] longLongValue];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [self pause];\n\n    [coder encodeObject:self.request forKey:NSStringFromSelector(@selector(request))];\n\n    switch (self.state) {\n        case AFOperationExecutingState:\n        case AFOperationPausedState:\n            [coder encodeInteger:AFOperationReadyState forKey:NSStringFromSelector(@selector(state))];\n            break;\n        default:\n            [coder encodeInteger:self.state forKey:NSStringFromSelector(@selector(state))];\n            break;\n    }\n\n    [coder encodeObject:self.response forKey:NSStringFromSelector(@selector(response))];\n    [coder encodeObject:self.error forKey:NSStringFromSelector(@selector(error))];\n    [coder encodeObject:self.responseData forKey:NSStringFromSelector(@selector(responseData))];\n    [coder encodeInt64:self.totalBytesRead forKey:NSStringFromSelector(@selector(totalBytesRead))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFURLConnectionOperation *operation = [(AFURLConnectionOperation *)[[self class] allocWithZone:zone] initWithRequest:self.request];\n\n    operation.uploadProgress = self.uploadProgress;\n    operation.downloadProgress = self.downloadProgress;\n    operation.authenticationChallenge = self.authenticationChallenge;\n    operation.cacheResponse = self.cacheResponse;\n    operation.redirectResponse = self.redirectResponse;\n    operation.completionQueue = self.completionQueue;\n    operation.completionGroup = self.completionGroup;\n\n    return operation;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFURLRequestSerialization.h",
    "content": "// AFURLRequestSerialization.h\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n#import <UIKit/UIKit.h>\n#endif\n\nNS_ASSUME_NONNULL_BEGIN\n\n/**\n The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary.\n\n For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`.\n */\n@protocol AFURLRequestSerialization <NSObject, NSSecureCoding, NSCopying>\n\n/**\n Returns a request with the specified parameters encoded into a copy of the original request.\n\n @param request The original request.\n @param parameters The parameters to be encoded.\n @param error The error that occurred while attempting to encode the request parameters.\n\n @return A serialized request.\n */\n- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request\n                               withParameters:(nullable id)parameters\n                                        error:(NSError * __nullable __autoreleasing *)error;\n\n@end\n\n#pragma mark -\n\n/**\n\n */\ntypedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) {\n    AFHTTPRequestQueryStringDefaultStyle = 0,\n};\n\n@protocol AFMultipartFormData;\n\n/**\n `AFHTTPRequestSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation.\n\n Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPRequestSerializer` in order to ensure consistent default behavior.\n */\n@interface AFHTTPRequestSerializer : NSObject <AFURLRequestSerialization>\n\n/**\n The string encoding used to serialize parameters. `NSUTF8StringEncoding` by default.\n */\n@property (nonatomic, assign) NSStringEncoding stringEncoding;\n\n/**\n Whether created requests can use the device’s cellular radio (if present). `YES` by default.\n\n @see NSMutableURLRequest -setAllowsCellularAccess:\n */\n@property (nonatomic, assign) BOOL allowsCellularAccess;\n\n/**\n The cache policy of created requests. `NSURLRequestUseProtocolCachePolicy` by default.\n\n @see NSMutableURLRequest -setCachePolicy:\n */\n@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy;\n\n/**\n Whether created requests should use the default cookie handling. `YES` by default.\n\n @see NSMutableURLRequest -setHTTPShouldHandleCookies:\n */\n@property (nonatomic, assign) BOOL HTTPShouldHandleCookies;\n\n/**\n Whether created requests can continue transmitting data before receiving a response from an earlier transmission. `NO` by default\n\n @see NSMutableURLRequest -setHTTPShouldUsePipelining:\n */\n@property (nonatomic, assign) BOOL HTTPShouldUsePipelining;\n\n/**\n The network service type for created requests. `NSURLNetworkServiceTypeDefault` by default.\n\n @see NSMutableURLRequest -setNetworkServiceType:\n */\n@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType;\n\n/**\n The timeout interval, in seconds, for created requests. The default timeout interval is 60 seconds.\n\n @see NSMutableURLRequest -setTimeoutInterval:\n */\n@property (nonatomic, assign) NSTimeInterval timeoutInterval;\n\n///---------------------------------------\n/// @name Configuring HTTP Request Headers\n///---------------------------------------\n\n/**\n Default HTTP header field values to be applied to serialized requests. By default, these include the following:\n\n - `Accept-Language` with the contents of `NSLocale +preferredLanguages`\n - `User-Agent` with the contents of various bundle identifiers and OS designations\n\n @discussion To add or remove default request headers, use `setValue:forHTTPHeaderField:`.\n */\n@property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders;\n\n/**\n Creates and returns a serializer with default configuration.\n */\n+ (instancetype)serializer;\n\n/**\n Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header.\n\n @param field The HTTP header to set a default value for\n @param value The value set as default for the specified header, or `nil`\n */\n- (void)setValue:(nullable NSString *)value\nforHTTPHeaderField:(NSString *)field;\n\n/**\n Returns the value for the HTTP headers set in the request serializer.\n\n @param field The HTTP header to retrieve the default value for\n\n @return The value set as default for the specified header, or `nil`\n */\n- (nullable NSString *)valueForHTTPHeaderField:(NSString *)field;\n\n/**\n Sets the \"Authorization\" HTTP header set in request objects made by the HTTP client to a basic authentication value with Base64-encoded username and password. This overwrites any existing value for this header.\n\n @param username The HTTP basic auth username\n @param password The HTTP basic auth password\n */\n- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username\n                                       password:(NSString *)password;\n\n/**\n @deprecated This method has been deprecated. Use -setValue:forHTTPHeaderField: instead.\n */\n- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token DEPRECATED_ATTRIBUTE;\n\n\n/**\n Clears any existing value for the \"Authorization\" HTTP header.\n */\n- (void)clearAuthorizationHeader;\n\n///-------------------------------------------------------\n/// @name Configuring Query String Parameter Serialization\n///-------------------------------------------------------\n\n/**\n HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default.\n */\n@property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI;\n\n/**\n Set the method of query string serialization according to one of the pre-defined styles.\n\n @param style The serialization style.\n\n @see AFHTTPRequestQueryStringSerializationStyle\n */\n- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style;\n\n/**\n Set the a custom method of query string serialization according to the specified block.\n\n @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request.\n */\n- (void)setQueryStringSerializationWithBlock:(nullable NSString * (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block;\n\n///-------------------------------\n/// @name Creating Request Objects\n///-------------------------------\n\n/**\n @deprecated This method has been deprecated. Use -requestWithMethod:URLString:parameters:error: instead.\n */\n- (NSMutableURLRequest *)requestWithMethod:(NSString *)method\n                                 URLString:(NSString *)URLString\n                                parameters:(id)parameters DEPRECATED_ATTRIBUTE;\n\n/**\n Creates an `NSMutableURLRequest` object with the specified HTTP method and URL string.\n\n If the HTTP method is `GET`, `HEAD`, or `DELETE`, the parameters will be used to construct a url-encoded query string that is appended to the request's URL. Otherwise, the parameters will be encoded according to the value of the `parameterEncoding` property, and set as the request body.\n\n @param method The HTTP method for the request, such as `GET`, `POST`, `PUT`, or `DELETE`. This parameter must not be `nil`.\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be either set as a query string for `GET` requests, or the request HTTP body.\n @param error The error that occurred while constructing the request.\n\n @return An `NSMutableURLRequest` object.\n */\n- (NSMutableURLRequest *)requestWithMethod:(NSString *)method\n                                 URLString:(NSString *)URLString\n                                parameters:(nullable id)parameters\n                                     error:(NSError * __nullable __autoreleasing *)error;\n\n/**\n @deprecated This method has been deprecated. Use -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error: instead.\n */\n- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method\n                                              URLString:(NSString *)URLString\n                                             parameters:(NSDictionary *)parameters\n                              constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block DEPRECATED_ATTRIBUTE;\n\n/**\n Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2\n\n Multipart form requests are automatically streamed, reading files directly from disk along with in-memory data in a single HTTP body. The resulting `NSMutableURLRequest` object has an `HTTPBodyStream` property, so refrain from setting `HTTPBodyStream` or `HTTPBody` on this request object, as it will clear out the multipart form body stream.\n\n @param method The HTTP method for the request. This parameter must not be `GET` or `HEAD`, or `nil`.\n @param URLString The URL string used to create the request URL.\n @param parameters The parameters to be encoded and set in the request HTTP body.\n @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol.\n @param error The error that occurred while constructing the request.\n\n @return An `NSMutableURLRequest` object\n */\n- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method\n                                              URLString:(NSString *)URLString\n                                             parameters:(nullable NSDictionary *)parameters\n                              constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block\n                                                  error:(NSError * __nullable __autoreleasing *)error;\n\n/**\n Creates an `NSMutableURLRequest` by removing the `HTTPBodyStream` from a request, and asynchronously writing its contents into the specified file, invoking the completion handler when finished.\n\n @param request The multipart form request. The `HTTPBodyStream` property of `request` must not be `nil`.\n @param fileURL The file URL to write multipart form contents to.\n @param handler A handler block to execute.\n\n @discussion There is a bug in `NSURLSessionTask` that causes requests to not send a `Content-Length` header when streaming contents from an HTTP body, which is notably problematic when interacting with the Amazon S3 webservice. As a workaround, this method takes a request constructed with `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:`, or any other request with an `HTTPBodyStream`, writes the contents to the specified file and returns a copy of the original request with the `HTTPBodyStream` property set to `nil`. From here, the file can either be passed to `AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`, or have its contents read into an `NSData` that's assigned to the `HTTPBody` property of the request.\n\n @see https://github.com/AFNetworking/AFNetworking/issues/1398\n */\n- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request\n                             writingStreamContentsToFile:(NSURL *)fileURL\n                                       completionHandler:(nullable void (^)(NSError *error))handler;\n\n@end\n\n#pragma mark -\n\n/**\n The `AFMultipartFormData` protocol defines the methods supported by the parameter in the block argument of `AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:`.\n */\n@protocol AFMultipartFormData\n\n/**\n Appends the HTTP header `Content-Disposition: file; filename=#{generated filename}; name=#{name}\"` and `Content-Type: #{generated mimeType}`, followed by the encoded file data and the multipart form boundary.\n\n The filename and MIME type for this data in the form will be automatically generated, using the last path component of the `fileURL` and system associated MIME type for the `fileURL` extension, respectively.\n\n @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`.\n @param name The name to be associated with the specified data. This parameter must not be `nil`.\n @param error If an error occurs, upon return contains an `NSError` object that describes the problem.\n\n @return `YES` if the file data was successfully appended, otherwise `NO`.\n */\n- (BOOL)appendPartWithFileURL:(NSURL *)fileURL\n                         name:(NSString *)name\n                        error:(NSError * __nullable __autoreleasing *)error;\n\n/**\n Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}\"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary.\n\n @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`.\n @param name The name to be associated with the specified data. This parameter must not be `nil`.\n @param fileName The file name to be used in the `Content-Disposition` header. This parameter must not be `nil`.\n @param mimeType The declared MIME type of the file data. This parameter must not be `nil`.\n @param error If an error occurs, upon return contains an `NSError` object that describes the problem.\n\n @return `YES` if the file data was successfully appended otherwise `NO`.\n */\n- (BOOL)appendPartWithFileURL:(NSURL *)fileURL\n                         name:(NSString *)name\n                     fileName:(NSString *)fileName\n                     mimeType:(NSString *)mimeType\n                        error:(NSError * __nullable __autoreleasing *)error;\n\n/**\n Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}\"` and `Content-Type: #{mimeType}`, followed by the data from the input stream and the multipart form boundary.\n\n @param inputStream The input stream to be appended to the form data\n @param name The name to be associated with the specified input stream. This parameter must not be `nil`.\n @param fileName The filename to be associated with the specified input stream. This parameter must not be `nil`.\n @param length The length of the specified input stream in bytes.\n @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`.\n */\n- (void)appendPartWithInputStream:(nullable NSInputStream *)inputStream\n                             name:(NSString *)name\n                         fileName:(NSString *)fileName\n                           length:(int64_t)length\n                         mimeType:(NSString *)mimeType;\n\n/**\n Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}\"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary.\n\n @param data The data to be encoded and appended to the form data.\n @param name The name to be associated with the specified data. This parameter must not be `nil`.\n @param fileName The filename to be associated with the specified data. This parameter must not be `nil`.\n @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`.\n */\n- (void)appendPartWithFileData:(NSData *)data\n                          name:(NSString *)name\n                      fileName:(NSString *)fileName\n                      mimeType:(NSString *)mimeType;\n\n/**\n Appends the HTTP headers `Content-Disposition: form-data; name=#{name}\"`, followed by the encoded data and the multipart form boundary.\n\n @param data The data to be encoded and appended to the form data.\n @param name The name to be associated with the specified data. This parameter must not be `nil`.\n */\n\n- (void)appendPartWithFormData:(NSData *)data\n                          name:(NSString *)name;\n\n\n/**\n Appends HTTP headers, followed by the encoded data and the multipart form boundary.\n\n @param headers The HTTP headers to be appended to the form data.\n @param body The data to be encoded and appended to the form data. This parameter must not be `nil`.\n */\n- (void)appendPartWithHeaders:(nullable NSDictionary *)headers\n                         body:(NSData *)body;\n\n/**\n Throttles request bandwidth by limiting the packet size and adding a delay for each chunk read from the upload stream.\n\n When uploading over a 3G or EDGE connection, requests may fail with \"request body stream exhausted\". Setting a maximum packet size and delay according to the recommended values (`kAFUploadStream3GSuggestedPacketSize` and `kAFUploadStream3GSuggestedDelay`) lowers the risk of the input stream exceeding its allocated bandwidth. Unfortunately, there is no definite way to distinguish between a 3G, EDGE, or LTE connection over `NSURLConnection`. As such, it is not recommended that you throttle bandwidth based solely on network reachability. Instead, you should consider checking for the \"request body stream exhausted\" in a failure block, and then retrying the request with throttled bandwidth.\n\n @param numberOfBytes Maximum packet size, in number of bytes. The default packet size for an input stream is 16kb.\n @param delay Duration of delay each time a packet is read. By default, no delay is set.\n */\n- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes\n                                  delay:(NSTimeInterval)delay;\n\n@end\n\n#pragma mark -\n\n/**\n `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`.\n */\n@interface AFJSONRequestSerializer : AFHTTPRequestSerializer\n\n/**\n Options for writing the request JSON data from Foundation objects. For possible values, see the `NSJSONSerialization` documentation section \"NSJSONWritingOptions\". `0` by default.\n */\n@property (nonatomic, assign) NSJSONWritingOptions writingOptions;\n\n/**\n Creates and returns a JSON serializer with specified reading and writing options.\n\n @param writingOptions The specified JSON writing options.\n */\n+ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions;\n\n@end\n\n#pragma mark -\n\n/**\n `AFPropertyListRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSPropertyListSerializer`, setting the `Content-Type` of the encoded request to `application/x-plist`.\n */\n@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer\n\n/**\n The property list format. Possible values are described in \"NSPropertyListFormat\".\n */\n@property (nonatomic, assign) NSPropertyListFormat format;\n\n/**\n @warning The `writeOptions` property is currently unused.\n */\n@property (nonatomic, assign) NSPropertyListWriteOptions writeOptions;\n\n/**\n Creates and returns a property list serializer with a specified format, read options, and write options.\n\n @param format The property list format.\n @param writeOptions The property list write options.\n\n @warning The `writeOptions` property is currently unused.\n */\n+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format\n                        writeOptions:(NSPropertyListWriteOptions)writeOptions;\n\n@end\n\n#pragma mark -\n\n///----------------\n/// @name Constants\n///----------------\n\n/**\n ## Error Domains\n\n The following error domain is predefined.\n\n - `NSString * const AFURLRequestSerializationErrorDomain`\n\n ### Constants\n\n `AFURLRequestSerializationErrorDomain`\n AFURLRequestSerializer errors. Error codes for `AFURLRequestSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`.\n */\nextern NSString * const AFURLRequestSerializationErrorDomain;\n\n/**\n ## User info dictionary keys\n\n These keys may exist in the user info dictionary, in addition to those defined for NSError.\n\n - `NSString * const AFNetworkingOperationFailingURLRequestErrorKey`\n\n ### Constants\n\n `AFNetworkingOperationFailingURLRequestErrorKey`\n The corresponding value is an `NSURLRequest` containing the request of the operation associated with an error. This key is only present in the `AFURLRequestSerializationErrorDomain`.\n */\nextern NSString * const AFNetworkingOperationFailingURLRequestErrorKey;\n\n/**\n ## Throttling Bandwidth for HTTP Request Input Streams\n\n @see -throttleBandwidthWithPacketSize:delay:\n\n ### Constants\n\n `kAFUploadStream3GSuggestedPacketSize`\n Maximum packet size, in number of bytes. Equal to 16kb.\n\n `kAFUploadStream3GSuggestedDelay`\n Duration of delay each time a packet is read. Equal to 0.2 seconds.\n */\nextern NSUInteger const kAFUploadStream3GSuggestedPacketSize;\nextern NSTimeInterval const kAFUploadStream3GSuggestedDelay;\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFURLRequestSerialization.m",
    "content": "// AFURLRequestSerialization.m\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import \"AFURLRequestSerialization.h\"\n\n#if __IPHONE_OS_VERSION_MIN_REQUIRED\n#import <MobileCoreServices/MobileCoreServices.h>\n#else\n#import <CoreServices/CoreServices.h>\n#endif\n\nNSString * const AFURLRequestSerializationErrorDomain = @\"com.alamofire.error.serialization.request\";\nNSString * const AFNetworkingOperationFailingURLRequestErrorKey = @\"com.alamofire.serialization.request.error.response\";\n\ntypedef NSString * (^AFQueryStringSerializationBlock)(NSURLRequest *request, id parameters, NSError *__autoreleasing *error);\n\nstatic NSString * AFBase64EncodedStringFromString(NSString *string) {\n    NSData *data = [NSData dataWithBytes:[string UTF8String] length:[string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];\n    NSUInteger length = [data length];\n    NSMutableData *mutableData = [NSMutableData dataWithLength:((length + 2) / 3) * 4];\n\n    uint8_t *input = (uint8_t *)[data bytes];\n    uint8_t *output = (uint8_t *)[mutableData mutableBytes];\n\n    for (NSUInteger i = 0; i < length; i += 3) {\n        NSUInteger value = 0;\n        for (NSUInteger j = i; j < (i + 3); j++) {\n            value <<= 8;\n            if (j < length) {\n                value |= (0xFF & input[j]);\n            }\n        }\n\n        static uint8_t const kAFBase64EncodingTable[] = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n        NSUInteger idx = (i / 3) * 4;\n        output[idx + 0] = kAFBase64EncodingTable[(value >> 18) & 0x3F];\n        output[idx + 1] = kAFBase64EncodingTable[(value >> 12) & 0x3F];\n        output[idx + 2] = (i + 1) < length ? kAFBase64EncodingTable[(value >> 6)  & 0x3F] : '=';\n        output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0)  & 0x3F] : '=';\n    }\n\n    return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding];\n}\n\nstatic NSString * const kAFCharactersToBeEscapedInQueryString = @\":/?&=;+!@#$()',*\";\n\nstatic NSString * AFPercentEscapedQueryStringKeyFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {\n    static NSString * const kAFCharactersToLeaveUnescapedInQueryStringPairKey = @\"[].\";\n\n\treturn (__bridge_transfer  NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, (__bridge CFStringRef)kAFCharactersToLeaveUnescapedInQueryStringPairKey, (__bridge CFStringRef)kAFCharactersToBeEscapedInQueryString, CFStringConvertNSStringEncodingToEncoding(encoding));\n}\n\nstatic NSString * AFPercentEscapedQueryStringValueFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {\n\treturn (__bridge_transfer  NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, (__bridge CFStringRef)kAFCharactersToBeEscapedInQueryString, CFStringConvertNSStringEncodingToEncoding(encoding));\n}\n\n#pragma mark -\n\n@interface AFQueryStringPair : NSObject\n@property (readwrite, nonatomic, strong) id field;\n@property (readwrite, nonatomic, strong) id value;\n\n- (id)initWithField:(id)field value:(id)value;\n\n- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding;\n@end\n\n@implementation AFQueryStringPair\n\n- (id)initWithField:(id)field value:(id)value {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.field = field;\n    self.value = value;\n\n    return self;\n}\n\n- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding {\n    if (!self.value || [self.value isEqual:[NSNull null]]) {\n        return AFPercentEscapedQueryStringKeyFromStringWithEncoding([self.field description], stringEncoding);\n    } else {\n        return [NSString stringWithFormat:@\"%@=%@\", AFPercentEscapedQueryStringKeyFromStringWithEncoding([self.field description], stringEncoding), AFPercentEscapedQueryStringValueFromStringWithEncoding([self.value description], stringEncoding)];\n    }\n}\n\n@end\n\n#pragma mark -\n\nextern NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary);\nextern NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value);\n\nstatic NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *parameters, NSStringEncoding stringEncoding) {\n    NSMutableArray *mutablePairs = [NSMutableArray array];\n    for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) {\n        [mutablePairs addObject:[pair URLEncodedStringValueWithEncoding:stringEncoding]];\n    }\n\n    return [mutablePairs componentsJoinedByString:@\"&\"];\n}\n\nNSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary) {\n    return AFQueryStringPairsFromKeyAndValue(nil, dictionary);\n}\n\nNSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value) {\n    NSMutableArray *mutableQueryStringComponents = [NSMutableArray array];\n\n    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@\"description\" ascending:YES selector:@selector(compare:)];\n\n    if ([value isKindOfClass:[NSDictionary class]]) {\n        NSDictionary *dictionary = value;\n        // Sort dictionary keys to ensure consistent ordering in query string, which is important when deserializing potentially ambiguous sequences, such as an array of dictionaries\n        for (id nestedKey in [dictionary.allKeys sortedArrayUsingDescriptors:@[ sortDescriptor ]]) {\n            id nestedValue = dictionary[nestedKey];\n            if (nestedValue) {\n                [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue((key ? [NSString stringWithFormat:@\"%@[%@]\", key, nestedKey] : nestedKey), nestedValue)];\n            }\n        }\n    } else if ([value isKindOfClass:[NSArray class]]) {\n        NSArray *array = value;\n        for (id nestedValue in array) {\n            [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@\"%@[]\", key], nestedValue)];\n        }\n    } else if ([value isKindOfClass:[NSSet class]]) {\n        NSSet *set = value;\n        for (id obj in [set sortedArrayUsingDescriptors:@[ sortDescriptor ]]) {\n            [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue(key, obj)];\n        }\n    } else {\n        [mutableQueryStringComponents addObject:[[AFQueryStringPair alloc] initWithField:key value:value]];\n    }\n\n    return mutableQueryStringComponents;\n}\n\n#pragma mark -\n\n@interface AFStreamingMultipartFormData : NSObject <AFMultipartFormData>\n- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest\n                    stringEncoding:(NSStringEncoding)encoding;\n\n- (NSMutableURLRequest *)requestByFinalizingMultipartFormData;\n@end\n\n#pragma mark -\n\nstatic NSArray * AFHTTPRequestSerializerObservedKeyPaths() {\n    static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        _AFHTTPRequestSerializerObservedKeyPaths = @[NSStringFromSelector(@selector(allowsCellularAccess)), NSStringFromSelector(@selector(cachePolicy)), NSStringFromSelector(@selector(HTTPShouldHandleCookies)), NSStringFromSelector(@selector(HTTPShouldUsePipelining)), NSStringFromSelector(@selector(networkServiceType)), NSStringFromSelector(@selector(timeoutInterval))];\n    });\n\n    return _AFHTTPRequestSerializerObservedKeyPaths;\n}\n\nstatic void *AFHTTPRequestSerializerObserverContext = &AFHTTPRequestSerializerObserverContext;\n\n@interface AFHTTPRequestSerializer ()\n@property (readwrite, nonatomic, strong) NSMutableSet *mutableObservedChangedKeyPaths;\n@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableHTTPRequestHeaders;\n@property (readwrite, nonatomic, assign) AFHTTPRequestQueryStringSerializationStyle queryStringSerializationStyle;\n@property (readwrite, nonatomic, copy) AFQueryStringSerializationBlock queryStringSerialization;\n@end\n\n@implementation AFHTTPRequestSerializer\n\n+ (instancetype)serializer {\n    return [[self alloc] init];\n}\n\n- (instancetype)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.stringEncoding = NSUTF8StringEncoding;\n\n    self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary];\n\n    // Accept-Language HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4\n    NSMutableArray *acceptLanguagesComponents = [NSMutableArray array];\n    [[NSLocale preferredLanguages] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n        float q = 1.0f - (idx * 0.1f);\n        [acceptLanguagesComponents addObject:[NSString stringWithFormat:@\"%@;q=%0.1g\", obj, q]];\n        *stop = q <= 0.5f;\n    }];\n    [self setValue:[acceptLanguagesComponents componentsJoinedByString:@\", \"] forHTTPHeaderField:@\"Accept-Language\"];\n\n    NSString *userAgent = nil;\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n    // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43\n    userAgent = [NSString stringWithFormat:@\"%@/%@ (%@; iOS %@; Scale/%0.2f)\", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@\"CFBundleShortVersionString\"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]];\n#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED)\n    userAgent = [NSString stringWithFormat:@\"%@/%@ (Mac OS X %@)\", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@\"CFBundleShortVersionString\"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]];\n#endif\n#pragma clang diagnostic pop\n    if (userAgent) {\n        if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) {\n            NSMutableString *mutableUserAgent = [userAgent mutableCopy];\n            if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@\"Any-Latin; Latin-ASCII; [:^ASCII:] Remove\", false)) {\n                userAgent = mutableUserAgent;\n            }\n        }\n        [self setValue:userAgent forHTTPHeaderField:@\"User-Agent\"];\n    }\n\n    // HTTP Method Definitions; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html\n    self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@\"GET\", @\"HEAD\", @\"DELETE\", nil];\n\n    self.mutableObservedChangedKeyPaths = [NSMutableSet set];\n    for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) {\n        if ([self respondsToSelector:NSSelectorFromString(keyPath)]) {\n            [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:AFHTTPRequestSerializerObserverContext];\n        }\n    }\n\n    return self;\n}\n\n- (void)dealloc {\n    for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) {\n        if ([self respondsToSelector:NSSelectorFromString(keyPath)]) {\n            [self removeObserver:self forKeyPath:keyPath context:AFHTTPRequestSerializerObserverContext];\n        }\n    }\n}\n\n#pragma mark -\n\n// Workarounds for crashing behavior using Key-Value Observing with XCTest\n// See https://github.com/AFNetworking/AFNetworking/issues/2523\n\n- (void)setAllowsCellularAccess:(BOOL)allowsCellularAccess {\n    [self willChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))];\n    _allowsCellularAccess = allowsCellularAccess;\n    [self didChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))];\n}\n\n- (void)setCachePolicy:(NSURLRequestCachePolicy)cachePolicy {\n    [self willChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))];\n    _cachePolicy = cachePolicy;\n    [self didChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))];\n}\n\n- (void)setHTTPShouldHandleCookies:(BOOL)HTTPShouldHandleCookies {\n    [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))];\n    _HTTPShouldHandleCookies = HTTPShouldHandleCookies;\n    [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))];\n}\n\n- (void)setHTTPShouldUsePipelining:(BOOL)HTTPShouldUsePipelining {\n    [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))];\n    _HTTPShouldUsePipelining = HTTPShouldUsePipelining;\n    [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))];\n}\n\n- (void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType {\n    [self willChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))];\n    _networkServiceType = networkServiceType;\n    [self didChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))];\n}\n\n- (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval {\n    [self willChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))];\n    _timeoutInterval = timeoutInterval;\n    [self didChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))];\n}\n\n#pragma mark -\n\n- (NSDictionary *)HTTPRequestHeaders {\n    return [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders];\n}\n\n- (void)setValue:(NSString *)value\nforHTTPHeaderField:(NSString *)field\n{\n\t[self.mutableHTTPRequestHeaders setValue:value forKey:field];\n}\n\n- (NSString *)valueForHTTPHeaderField:(NSString *)field {\n    return [self.mutableHTTPRequestHeaders valueForKey:field];\n}\n\n- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username\n                                       password:(NSString *)password\n{\n\tNSString *basicAuthCredentials = [NSString stringWithFormat:@\"%@:%@\", username, password];\n    [self setValue:[NSString stringWithFormat:@\"Basic %@\", AFBase64EncodedStringFromString(basicAuthCredentials)] forHTTPHeaderField:@\"Authorization\"];\n}\n\n- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token {\n    [self setValue:[NSString stringWithFormat:@\"Token token=\\\"%@\\\"\", token] forHTTPHeaderField:@\"Authorization\"];\n}\n\n- (void)clearAuthorizationHeader {\n\t[self.mutableHTTPRequestHeaders removeObjectForKey:@\"Authorization\"];\n}\n\n#pragma mark -\n\n- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style {\n    self.queryStringSerializationStyle = style;\n    self.queryStringSerialization = nil;\n}\n\n- (void)setQueryStringSerializationWithBlock:(NSString *(^)(NSURLRequest *, id, NSError *__autoreleasing *))block {\n    self.queryStringSerialization = block;\n}\n\n#pragma mark -\n\n- (NSMutableURLRequest *)requestWithMethod:(NSString *)method\n                                 URLString:(NSString *)URLString\n                                parameters:(id)parameters\n{\n    return [self requestWithMethod:method URLString:URLString parameters:parameters error:nil];\n}\n\n- (NSMutableURLRequest *)requestWithMethod:(NSString *)method\n                                 URLString:(NSString *)URLString\n                                parameters:(id)parameters\n                                     error:(NSError *__autoreleasing *)error\n{\n    NSParameterAssert(method);\n    NSParameterAssert(URLString);\n\n    NSURL *url = [NSURL URLWithString:URLString];\n\n    NSParameterAssert(url);\n\n    NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url];\n    mutableRequest.HTTPMethod = method;\n\n    for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) {\n        if ([self.mutableObservedChangedKeyPaths containsObject:keyPath]) {\n            [mutableRequest setValue:[self valueForKeyPath:keyPath] forKey:keyPath];\n        }\n    }\n\n    mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy];\n\n\treturn mutableRequest;\n}\n\n- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method\n                                              URLString:(NSString *)URLString\n                                             parameters:(NSDictionary *)parameters\n                              constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block\n{\n    return [self multipartFormRequestWithMethod:method URLString:URLString parameters:parameters constructingBodyWithBlock:block error:nil];\n}\n\n- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method\n                                              URLString:(NSString *)URLString\n                                             parameters:(NSDictionary *)parameters\n                              constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block\n                                                  error:(NSError *__autoreleasing *)error\n{\n    NSParameterAssert(method);\n    NSParameterAssert(![method isEqualToString:@\"GET\"] && ![method isEqualToString:@\"HEAD\"]);\n\n    NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error];\n\n    __block AFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding];\n\n    if (parameters) {\n        for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) {\n            NSData *data = nil;\n            if ([pair.value isKindOfClass:[NSData class]]) {\n                data = pair.value;\n            } else if ([pair.value isEqual:[NSNull null]]) {\n                data = [NSData data];\n            } else {\n                data = [[pair.value description] dataUsingEncoding:self.stringEncoding];\n            }\n\n            if (data) {\n                [formData appendPartWithFormData:data name:[pair.field description]];\n            }\n        }\n    }\n\n    if (block) {\n        block(formData);\n    }\n\n    return [formData requestByFinalizingMultipartFormData];\n}\n\n- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request\n                             writingStreamContentsToFile:(NSURL *)fileURL\n                                       completionHandler:(void (^)(NSError *error))handler\n{\n    NSParameterAssert(request.HTTPBodyStream);\n    NSParameterAssert([fileURL isFileURL]);\n\n    NSInputStream *inputStream = request.HTTPBodyStream;\n    NSOutputStream *outputStream = [[NSOutputStream alloc] initWithURL:fileURL append:NO];\n    __block NSError *error = nil;\n\n    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n        [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];\n        [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];\n\n        [inputStream open];\n        [outputStream open];\n\n        while ([inputStream hasBytesAvailable] && [outputStream hasSpaceAvailable]) {\n            uint8_t buffer[1024];\n\n            NSInteger bytesRead = [inputStream read:buffer maxLength:1024];\n            if (inputStream.streamError || bytesRead < 0) {\n                error = inputStream.streamError;\n                break;\n            }\n\n            NSInteger bytesWritten = [outputStream write:buffer maxLength:(NSUInteger)bytesRead];\n            if (outputStream.streamError || bytesWritten < 0) {\n                error = outputStream.streamError;\n                break;\n            }\n\n            if (bytesRead == 0 && bytesWritten == 0) {\n                break;\n            }\n        }\n\n        [outputStream close];\n        [inputStream close];\n\n        if (handler) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                handler(error);\n            });\n        }\n    });\n\n    NSMutableURLRequest *mutableRequest = [request mutableCopy];\n    mutableRequest.HTTPBodyStream = nil;\n\n    return mutableRequest;\n}\n\n#pragma mark - AFURLRequestSerialization\n\n- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request\n                               withParameters:(id)parameters\n                                        error:(NSError *__autoreleasing *)error\n{\n    NSParameterAssert(request);\n\n    NSMutableURLRequest *mutableRequest = [request mutableCopy];\n\n    [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {\n        if (![request valueForHTTPHeaderField:field]) {\n            [mutableRequest setValue:value forHTTPHeaderField:field];\n        }\n    }];\n\n    if (parameters) {\n        NSString *query = nil;\n        if (self.queryStringSerialization) {\n            NSError *serializationError;\n            query = self.queryStringSerialization(request, parameters, &serializationError);\n\n            if (serializationError) {\n                if (error) {\n                    *error = serializationError;\n                }\n\n                return nil;\n            }\n        } else {\n            switch (self.queryStringSerializationStyle) {\n                case AFHTTPRequestQueryStringDefaultStyle:\n                    query = AFQueryStringFromParametersWithEncoding(parameters, self.stringEncoding);\n                    break;\n            }\n        }\n\n        if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) {\n            mutableRequest.URL = [NSURL URLWithString:[[mutableRequest.URL absoluteString] stringByAppendingFormat:mutableRequest.URL.query ? @\"&%@\" : @\"?%@\", query]];\n        } else {\n            if (![mutableRequest valueForHTTPHeaderField:@\"Content-Type\"]) {\n                [mutableRequest setValue:@\"application/x-www-form-urlencoded\" forHTTPHeaderField:@\"Content-Type\"];\n            }\n            [mutableRequest setHTTPBody:[query dataUsingEncoding:self.stringEncoding]];\n        }\n    }\n\n    return mutableRequest;\n}\n\n#pragma mark - NSKeyValueObserving\n\n+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {\n    if ([AFHTTPRequestSerializerObservedKeyPaths() containsObject:key]) {\n        return NO;\n    }\n\n    return [super automaticallyNotifiesObserversForKey:key];\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath\n                      ofObject:(__unused id)object\n                        change:(NSDictionary *)change\n                       context:(void *)context\n{\n    if (context == AFHTTPRequestSerializerObserverContext) {\n        if ([change[NSKeyValueChangeNewKey] isEqual:[NSNull null]]) {\n            [self.mutableObservedChangedKeyPaths removeObject:keyPath];\n        } else {\n            [self.mutableObservedChangedKeyPaths addObject:keyPath];\n        }\n    }\n}\n\n#pragma mark - NSSecureCoding\n\n+ (BOOL)supportsSecureCoding {\n    return YES;\n}\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [self init];\n    if (!self) {\n        return nil;\n    }\n\n    self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy];\n    self.queryStringSerializationStyle = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [coder encodeObject:self.mutableHTTPRequestHeaders forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))];\n    [coder encodeInteger:self.queryStringSerializationStyle forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFHTTPRequestSerializer *serializer = [[[self class] allocWithZone:zone] init];\n    serializer.mutableHTTPRequestHeaders = [self.mutableHTTPRequestHeaders mutableCopyWithZone:zone];\n    serializer.queryStringSerializationStyle = self.queryStringSerializationStyle;\n    serializer.queryStringSerialization = self.queryStringSerialization;\n\n    return serializer;\n}\n\n@end\n\n#pragma mark -\n\nstatic NSString * AFCreateMultipartFormBoundary() {\n    return [NSString stringWithFormat:@\"Boundary+%08X%08X\", arc4random(), arc4random()];\n}\n\nstatic NSString * const kAFMultipartFormCRLF = @\"\\r\\n\";\n\nstatic inline NSString * AFMultipartFormInitialBoundary(NSString *boundary) {\n    return [NSString stringWithFormat:@\"--%@%@\", boundary, kAFMultipartFormCRLF];\n}\n\nstatic inline NSString * AFMultipartFormEncapsulationBoundary(NSString *boundary) {\n    return [NSString stringWithFormat:@\"%@--%@%@\", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF];\n}\n\nstatic inline NSString * AFMultipartFormFinalBoundary(NSString *boundary) {\n    return [NSString stringWithFormat:@\"%@--%@--%@\", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF];\n}\n\nstatic inline NSString * AFContentTypeForPathExtension(NSString *extension) {\n#ifdef __UTTYPE__\n    NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, NULL);\n    NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType);\n    if (!contentType) {\n        return @\"application/octet-stream\";\n    } else {\n        return contentType;\n    }\n#else\n#pragma unused (extension)\n    return @\"application/octet-stream\";\n#endif\n}\n\nNSUInteger const kAFUploadStream3GSuggestedPacketSize = 1024 * 16;\nNSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2;\n\n@interface AFHTTPBodyPart : NSObject\n@property (nonatomic, assign) NSStringEncoding stringEncoding;\n@property (nonatomic, strong) NSDictionary *headers;\n@property (nonatomic, copy) NSString *boundary;\n@property (nonatomic, strong) id body;\n@property (nonatomic, assign) unsigned long long bodyContentLength;\n@property (nonatomic, strong) NSInputStream *inputStream;\n\n@property (nonatomic, assign) BOOL hasInitialBoundary;\n@property (nonatomic, assign) BOOL hasFinalBoundary;\n\n@property (readonly, nonatomic, assign, getter = hasBytesAvailable) BOOL bytesAvailable;\n@property (readonly, nonatomic, assign) unsigned long long contentLength;\n\n- (NSInteger)read:(uint8_t *)buffer\n        maxLength:(NSUInteger)length;\n@end\n\n@interface AFMultipartBodyStream : NSInputStream <NSStreamDelegate>\n@property (nonatomic, assign) NSUInteger numberOfBytesInPacket;\n@property (nonatomic, assign) NSTimeInterval delay;\n@property (nonatomic, strong) NSInputStream *inputStream;\n@property (readonly, nonatomic, assign) unsigned long long contentLength;\n@property (readonly, nonatomic, assign, getter = isEmpty) BOOL empty;\n\n- (id)initWithStringEncoding:(NSStringEncoding)encoding;\n- (void)setInitialAndFinalBoundaries;\n- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart;\n@end\n\n#pragma mark -\n\n@interface AFStreamingMultipartFormData ()\n@property (readwrite, nonatomic, copy) NSMutableURLRequest *request;\n@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding;\n@property (readwrite, nonatomic, copy) NSString *boundary;\n@property (readwrite, nonatomic, strong) AFMultipartBodyStream *bodyStream;\n@end\n\n@implementation AFStreamingMultipartFormData\n\n- (id)initWithURLRequest:(NSMutableURLRequest *)urlRequest\n          stringEncoding:(NSStringEncoding)encoding\n{\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.request = urlRequest;\n    self.stringEncoding = encoding;\n    self.boundary = AFCreateMultipartFormBoundary();\n    self.bodyStream = [[AFMultipartBodyStream alloc] initWithStringEncoding:encoding];\n\n    return self;\n}\n\n- (BOOL)appendPartWithFileURL:(NSURL *)fileURL\n                         name:(NSString *)name\n                        error:(NSError * __autoreleasing *)error\n{\n    NSParameterAssert(fileURL);\n    NSParameterAssert(name);\n\n    NSString *fileName = [fileURL lastPathComponent];\n    NSString *mimeType = AFContentTypeForPathExtension([fileURL pathExtension]);\n\n    return [self appendPartWithFileURL:fileURL name:name fileName:fileName mimeType:mimeType error:error];\n}\n\n- (BOOL)appendPartWithFileURL:(NSURL *)fileURL\n                         name:(NSString *)name\n                     fileName:(NSString *)fileName\n                     mimeType:(NSString *)mimeType\n                        error:(NSError * __autoreleasing *)error\n{\n    NSParameterAssert(fileURL);\n    NSParameterAssert(name);\n    NSParameterAssert(fileName);\n    NSParameterAssert(mimeType);\n\n    if (![fileURL isFileURL]) {\n        NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@\"Expected URL to be a file URL\", @\"AFNetworking\", nil)};\n        if (error) {\n            *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo];\n        }\n\n        return NO;\n    } else if ([fileURL checkResourceIsReachableAndReturnError:error] == NO) {\n        NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@\"File URL not reachable.\", @\"AFNetworking\", nil)};\n        if (error) {\n            *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo];\n        }\n\n        return NO;\n    }\n\n    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:error];\n    if (!fileAttributes) {\n        return NO;\n    }\n\n    NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary];\n    [mutableHeaders setValue:[NSString stringWithFormat:@\"form-data; name=\\\"%@\\\"; filename=\\\"%@\\\"\", name, fileName] forKey:@\"Content-Disposition\"];\n    [mutableHeaders setValue:mimeType forKey:@\"Content-Type\"];\n\n    AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init];\n    bodyPart.stringEncoding = self.stringEncoding;\n    bodyPart.headers = mutableHeaders;\n    bodyPart.boundary = self.boundary;\n    bodyPart.body = fileURL;\n    bodyPart.bodyContentLength = [fileAttributes[NSFileSize] unsignedLongLongValue];\n    [self.bodyStream appendHTTPBodyPart:bodyPart];\n\n    return YES;\n}\n\n- (void)appendPartWithInputStream:(NSInputStream *)inputStream\n                             name:(NSString *)name\n                         fileName:(NSString *)fileName\n                           length:(int64_t)length\n                         mimeType:(NSString *)mimeType\n{\n    NSParameterAssert(name);\n    NSParameterAssert(fileName);\n    NSParameterAssert(mimeType);\n\n    NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary];\n    [mutableHeaders setValue:[NSString stringWithFormat:@\"form-data; name=\\\"%@\\\"; filename=\\\"%@\\\"\", name, fileName] forKey:@\"Content-Disposition\"];\n    [mutableHeaders setValue:mimeType forKey:@\"Content-Type\"];\n\n    AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init];\n    bodyPart.stringEncoding = self.stringEncoding;\n    bodyPart.headers = mutableHeaders;\n    bodyPart.boundary = self.boundary;\n    bodyPart.body = inputStream;\n\n    bodyPart.bodyContentLength = (unsigned long long)length;\n\n    [self.bodyStream appendHTTPBodyPart:bodyPart];\n}\n\n- (void)appendPartWithFileData:(NSData *)data\n                          name:(NSString *)name\n                      fileName:(NSString *)fileName\n                      mimeType:(NSString *)mimeType\n{\n    NSParameterAssert(name);\n    NSParameterAssert(fileName);\n    NSParameterAssert(mimeType);\n\n    NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary];\n    [mutableHeaders setValue:[NSString stringWithFormat:@\"form-data; name=\\\"%@\\\"; filename=\\\"%@\\\"\", name, fileName] forKey:@\"Content-Disposition\"];\n    [mutableHeaders setValue:mimeType forKey:@\"Content-Type\"];\n\n    [self appendPartWithHeaders:mutableHeaders body:data];\n}\n\n- (void)appendPartWithFormData:(NSData *)data\n                          name:(NSString *)name\n{\n    NSParameterAssert(name);\n\n    NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary];\n    [mutableHeaders setValue:[NSString stringWithFormat:@\"form-data; name=\\\"%@\\\"\", name] forKey:@\"Content-Disposition\"];\n\n    [self appendPartWithHeaders:mutableHeaders body:data];\n}\n\n- (void)appendPartWithHeaders:(NSDictionary *)headers\n                         body:(NSData *)body\n{\n    NSParameterAssert(body);\n\n    AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init];\n    bodyPart.stringEncoding = self.stringEncoding;\n    bodyPart.headers = headers;\n    bodyPart.boundary = self.boundary;\n    bodyPart.bodyContentLength = [body length];\n    bodyPart.body = body;\n\n    [self.bodyStream appendHTTPBodyPart:bodyPart];\n}\n\n- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes\n                                  delay:(NSTimeInterval)delay\n{\n    self.bodyStream.numberOfBytesInPacket = numberOfBytes;\n    self.bodyStream.delay = delay;\n}\n\n- (NSMutableURLRequest *)requestByFinalizingMultipartFormData {\n    if ([self.bodyStream isEmpty]) {\n        return self.request;\n    }\n\n    // Reset the initial and final boundaries to ensure correct Content-Length\n    [self.bodyStream setInitialAndFinalBoundaries];\n    [self.request setHTTPBodyStream:self.bodyStream];\n\n    [self.request setValue:[NSString stringWithFormat:@\"multipart/form-data; boundary=%@\", self.boundary] forHTTPHeaderField:@\"Content-Type\"];\n    [self.request setValue:[NSString stringWithFormat:@\"%llu\", [self.bodyStream contentLength]] forHTTPHeaderField:@\"Content-Length\"];\n\n    return self.request;\n}\n\n@end\n\n#pragma mark -\n\n@interface NSStream ()\n@property (readwrite) NSStreamStatus streamStatus;\n@property (readwrite, copy) NSError *streamError;\n@end\n\n@interface AFMultipartBodyStream () <NSCopying>\n@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding;\n@property (readwrite, nonatomic, strong) NSMutableArray *HTTPBodyParts;\n@property (readwrite, nonatomic, strong) NSEnumerator *HTTPBodyPartEnumerator;\n@property (readwrite, nonatomic, strong) AFHTTPBodyPart *currentHTTPBodyPart;\n@property (readwrite, nonatomic, strong) NSOutputStream *outputStream;\n@property (readwrite, nonatomic, strong) NSMutableData *buffer;\n@end\n\n@implementation AFMultipartBodyStream\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wimplicit-atomic-properties\"\n#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1100)\n@synthesize delegate;\n#endif\n@synthesize streamStatus;\n@synthesize streamError;\n#pragma clang diagnostic pop\n\n- (id)initWithStringEncoding:(NSStringEncoding)encoding {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.stringEncoding = encoding;\n    self.HTTPBodyParts = [NSMutableArray array];\n    self.numberOfBytesInPacket = NSIntegerMax;\n\n    return self;\n}\n\n- (void)setInitialAndFinalBoundaries {\n    if ([self.HTTPBodyParts count] > 0) {\n        for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) {\n            bodyPart.hasInitialBoundary = NO;\n            bodyPart.hasFinalBoundary = NO;\n        }\n\n        [[self.HTTPBodyParts firstObject] setHasInitialBoundary:YES];\n        [[self.HTTPBodyParts lastObject] setHasFinalBoundary:YES];\n    }\n}\n\n- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart {\n    [self.HTTPBodyParts addObject:bodyPart];\n}\n\n- (BOOL)isEmpty {\n    return [self.HTTPBodyParts count] == 0;\n}\n\n#pragma mark - NSInputStream\n\n- (NSInteger)read:(uint8_t *)buffer\n        maxLength:(NSUInteger)length\n{\n    if ([self streamStatus] == NSStreamStatusClosed) {\n        return 0;\n    }\n\n    NSInteger totalNumberOfBytesRead = 0;\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n    while ((NSUInteger)totalNumberOfBytesRead < MIN(length, self.numberOfBytesInPacket)) {\n        if (!self.currentHTTPBodyPart || ![self.currentHTTPBodyPart hasBytesAvailable]) {\n            if (!(self.currentHTTPBodyPart = [self.HTTPBodyPartEnumerator nextObject])) {\n                break;\n            }\n        } else {\n            NSUInteger maxLength = length - (NSUInteger)totalNumberOfBytesRead;\n            NSInteger numberOfBytesRead = [self.currentHTTPBodyPart read:&buffer[totalNumberOfBytesRead] maxLength:maxLength];\n            if (numberOfBytesRead == -1) {\n                self.streamError = self.currentHTTPBodyPart.inputStream.streamError;\n                break;\n            } else {\n                totalNumberOfBytesRead += numberOfBytesRead;\n\n                if (self.delay > 0.0f) {\n                    [NSThread sleepForTimeInterval:self.delay];\n                }\n            }\n        }\n    }\n#pragma clang diagnostic pop\n\n    return totalNumberOfBytesRead;\n}\n\n- (BOOL)getBuffer:(__unused uint8_t **)buffer\n           length:(__unused NSUInteger *)len\n{\n    return NO;\n}\n\n- (BOOL)hasBytesAvailable {\n    return [self streamStatus] == NSStreamStatusOpen;\n}\n\n#pragma mark - NSStream\n\n- (void)open {\n    if (self.streamStatus == NSStreamStatusOpen) {\n        return;\n    }\n\n    self.streamStatus = NSStreamStatusOpen;\n\n    [self setInitialAndFinalBoundaries];\n    self.HTTPBodyPartEnumerator = [self.HTTPBodyParts objectEnumerator];\n}\n\n- (void)close {\n    self.streamStatus = NSStreamStatusClosed;\n}\n\n- (id)propertyForKey:(__unused NSString *)key {\n    return nil;\n}\n\n- (BOOL)setProperty:(__unused id)property\n             forKey:(__unused NSString *)key\n{\n    return NO;\n}\n\n- (void)scheduleInRunLoop:(__unused NSRunLoop *)aRunLoop\n                  forMode:(__unused NSString *)mode\n{}\n\n- (void)removeFromRunLoop:(__unused NSRunLoop *)aRunLoop\n                  forMode:(__unused NSString *)mode\n{}\n\n- (unsigned long long)contentLength {\n    unsigned long long length = 0;\n    for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) {\n        length += [bodyPart contentLength];\n    }\n\n    return length;\n}\n\n#pragma mark - Undocumented CFReadStream Bridged Methods\n\n- (void)_scheduleInCFRunLoop:(__unused CFRunLoopRef)aRunLoop\n                     forMode:(__unused CFStringRef)aMode\n{}\n\n- (void)_unscheduleFromCFRunLoop:(__unused CFRunLoopRef)aRunLoop\n                         forMode:(__unused CFStringRef)aMode\n{}\n\n- (BOOL)_setCFClientFlags:(__unused CFOptionFlags)inFlags\n                 callback:(__unused CFReadStreamClientCallBack)inCallback\n                  context:(__unused CFStreamClientContext *)inContext {\n    return NO;\n}\n\n#pragma mark - NSCopying\n\n-(id)copyWithZone:(NSZone *)zone {\n    AFMultipartBodyStream *bodyStreamCopy = [[[self class] allocWithZone:zone] initWithStringEncoding:self.stringEncoding];\n\n    for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) {\n        [bodyStreamCopy appendHTTPBodyPart:[bodyPart copy]];\n    }\n\n    [bodyStreamCopy setInitialAndFinalBoundaries];\n\n    return bodyStreamCopy;\n}\n\n@end\n\n#pragma mark -\n\ntypedef enum {\n    AFEncapsulationBoundaryPhase = 1,\n    AFHeaderPhase                = 2,\n    AFBodyPhase                  = 3,\n    AFFinalBoundaryPhase         = 4,\n} AFHTTPBodyPartReadPhase;\n\n@interface AFHTTPBodyPart () <NSCopying> {\n    AFHTTPBodyPartReadPhase _phase;\n    NSInputStream *_inputStream;\n    unsigned long long _phaseReadOffset;\n}\n\n- (BOOL)transitionToNextPhase;\n- (NSInteger)readData:(NSData *)data\n           intoBuffer:(uint8_t *)buffer\n            maxLength:(NSUInteger)length;\n@end\n\n@implementation AFHTTPBodyPart\n\n- (id)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    [self transitionToNextPhase];\n\n    return self;\n}\n\n- (void)dealloc {\n    if (_inputStream) {\n        [_inputStream close];\n        _inputStream = nil;\n    }\n}\n\n- (NSInputStream *)inputStream {\n    if (!_inputStream) {\n        if ([self.body isKindOfClass:[NSData class]]) {\n            _inputStream = [NSInputStream inputStreamWithData:self.body];\n        } else if ([self.body isKindOfClass:[NSURL class]]) {\n            _inputStream = [NSInputStream inputStreamWithURL:self.body];\n        } else if ([self.body isKindOfClass:[NSInputStream class]]) {\n            _inputStream = self.body;\n        } else {\n            _inputStream = [NSInputStream inputStreamWithData:[NSData data]];\n        }\n    }\n\n    return _inputStream;\n}\n\n- (NSString *)stringForHeaders {\n    NSMutableString *headerString = [NSMutableString string];\n    for (NSString *field in [self.headers allKeys]) {\n        [headerString appendString:[NSString stringWithFormat:@\"%@: %@%@\", field, [self.headers valueForKey:field], kAFMultipartFormCRLF]];\n    }\n    [headerString appendString:kAFMultipartFormCRLF];\n\n    return [NSString stringWithString:headerString];\n}\n\n- (unsigned long long)contentLength {\n    unsigned long long length = 0;\n\n    NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding];\n    length += [encapsulationBoundaryData length];\n\n    NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding];\n    length += [headersData length];\n\n    length += _bodyContentLength;\n\n    NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]);\n    length += [closingBoundaryData length];\n\n    return length;\n}\n\n- (BOOL)hasBytesAvailable {\n    // Allows `read:maxLength:` to be called again if `AFMultipartFormFinalBoundary` doesn't fit into the available buffer\n    if (_phase == AFFinalBoundaryPhase) {\n        return YES;\n    }\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wcovered-switch-default\"\n    switch (self.inputStream.streamStatus) {\n        case NSStreamStatusNotOpen:\n        case NSStreamStatusOpening:\n        case NSStreamStatusOpen:\n        case NSStreamStatusReading:\n        case NSStreamStatusWriting:\n            return YES;\n        case NSStreamStatusAtEnd:\n        case NSStreamStatusClosed:\n        case NSStreamStatusError:\n        default:\n            return NO;\n    }\n#pragma clang diagnostic pop\n}\n\n- (NSInteger)read:(uint8_t *)buffer\n        maxLength:(NSUInteger)length\n{\n    NSInteger totalNumberOfBytesRead = 0;\n\n    if (_phase == AFEncapsulationBoundaryPhase) {\n        NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding];\n        totalNumberOfBytesRead += [self readData:encapsulationBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)];\n    }\n\n    if (_phase == AFHeaderPhase) {\n        NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding];\n        totalNumberOfBytesRead += [self readData:headersData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)];\n    }\n\n    if (_phase == AFBodyPhase) {\n        NSInteger numberOfBytesRead = 0;\n\n        numberOfBytesRead = [self.inputStream read:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)];\n        if (numberOfBytesRead == -1) {\n            return -1;\n        } else {\n            totalNumberOfBytesRead += numberOfBytesRead;\n\n            if ([self.inputStream streamStatus] >= NSStreamStatusAtEnd) {\n                [self transitionToNextPhase];\n            }\n        }\n    }\n\n    if (_phase == AFFinalBoundaryPhase) {\n        NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]);\n        totalNumberOfBytesRead += [self readData:closingBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)];\n    }\n\n    return totalNumberOfBytesRead;\n}\n\n- (NSInteger)readData:(NSData *)data\n           intoBuffer:(uint8_t *)buffer\n            maxLength:(NSUInteger)length\n{\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n    NSRange range = NSMakeRange((NSUInteger)_phaseReadOffset, MIN([data length] - ((NSUInteger)_phaseReadOffset), length));\n    [data getBytes:buffer range:range];\n#pragma clang diagnostic pop\n\n    _phaseReadOffset += range.length;\n\n    if (((NSUInteger)_phaseReadOffset) >= [data length]) {\n        [self transitionToNextPhase];\n    }\n\n    return (NSInteger)range.length;\n}\n\n- (BOOL)transitionToNextPhase {\n    if (![[NSThread currentThread] isMainThread]) {\n        dispatch_sync(dispatch_get_main_queue(), ^{\n            [self transitionToNextPhase];\n        });\n        return YES;\n    }\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wcovered-switch-default\"\n    switch (_phase) {\n        case AFEncapsulationBoundaryPhase:\n            _phase = AFHeaderPhase;\n            break;\n        case AFHeaderPhase:\n            [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];\n            [self.inputStream open];\n            _phase = AFBodyPhase;\n            break;\n        case AFBodyPhase:\n            [self.inputStream close];\n            _phase = AFFinalBoundaryPhase;\n            break;\n        case AFFinalBoundaryPhase:\n        default:\n            _phase = AFEncapsulationBoundaryPhase;\n            break;\n    }\n    _phaseReadOffset = 0;\n#pragma clang diagnostic pop\n\n    return YES;\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFHTTPBodyPart *bodyPart = [[[self class] allocWithZone:zone] init];\n\n    bodyPart.stringEncoding = self.stringEncoding;\n    bodyPart.headers = self.headers;\n    bodyPart.bodyContentLength = self.bodyContentLength;\n    bodyPart.body = self.body;\n    bodyPart.boundary = self.boundary;\n\n    return bodyPart;\n}\n\n@end\n\n#pragma mark -\n\n@implementation AFJSONRequestSerializer\n\n+ (instancetype)serializer {\n    return [self serializerWithWritingOptions:(NSJSONWritingOptions)0];\n}\n\n+ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions\n{\n    AFJSONRequestSerializer *serializer = [[self alloc] init];\n    serializer.writingOptions = writingOptions;\n\n    return serializer;\n}\n\n#pragma mark - AFURLRequestSerialization\n\n- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request\n                               withParameters:(id)parameters\n                                        error:(NSError *__autoreleasing *)error\n{\n    NSParameterAssert(request);\n\n    if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) {\n        return [super requestBySerializingRequest:request withParameters:parameters error:error];\n    }\n\n    NSMutableURLRequest *mutableRequest = [request mutableCopy];\n\n    [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {\n        if (![request valueForHTTPHeaderField:field]) {\n            [mutableRequest setValue:value forHTTPHeaderField:field];\n        }\n    }];\n\n    if (parameters) {\n        if (![mutableRequest valueForHTTPHeaderField:@\"Content-Type\"]) {\n            [mutableRequest setValue:@\"application/json\" forHTTPHeaderField:@\"Content-Type\"];\n        }\n\n        [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]];\n    }\n\n    return mutableRequest;\n}\n\n#pragma mark - NSSecureCoding\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [super initWithCoder:decoder];\n    if (!self) {\n        return nil;\n    }\n\n    self.writingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writingOptions))] unsignedIntegerValue];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [super encodeWithCoder:coder];\n\n    [coder encodeInteger:self.writingOptions forKey:NSStringFromSelector(@selector(writingOptions))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFJSONRequestSerializer *serializer = [super copyWithZone:zone];\n    serializer.writingOptions = self.writingOptions;\n\n    return serializer;\n}\n\n@end\n\n#pragma mark -\n\n@implementation AFPropertyListRequestSerializer\n\n+ (instancetype)serializer {\n    return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 writeOptions:0];\n}\n\n+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format\n                        writeOptions:(NSPropertyListWriteOptions)writeOptions\n{\n    AFPropertyListRequestSerializer *serializer = [[self alloc] init];\n    serializer.format = format;\n    serializer.writeOptions = writeOptions;\n\n    return serializer;\n}\n\n#pragma mark - AFURLRequestSerializer\n\n- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request\n                               withParameters:(id)parameters\n                                        error:(NSError *__autoreleasing *)error\n{\n    NSParameterAssert(request);\n\n    if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) {\n        return [super requestBySerializingRequest:request withParameters:parameters error:error];\n    }\n\n    NSMutableURLRequest *mutableRequest = [request mutableCopy];\n\n    [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {\n        if (![request valueForHTTPHeaderField:field]) {\n            [mutableRequest setValue:value forHTTPHeaderField:field];\n        }\n    }];\n\n    if (parameters) {\n        if (![mutableRequest valueForHTTPHeaderField:@\"Content-Type\"]) {\n            [mutableRequest setValue:@\"application/x-plist\" forHTTPHeaderField:@\"Content-Type\"];\n        }\n\n        [mutableRequest setHTTPBody:[NSPropertyListSerialization dataWithPropertyList:parameters format:self.format options:self.writeOptions error:error]];\n    }\n\n    return mutableRequest;\n}\n\n#pragma mark - NSSecureCoding\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [super initWithCoder:decoder];\n    if (!self) {\n        return nil;\n    }\n\n    self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue];\n    self.writeOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writeOptions))] unsignedIntegerValue];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [super encodeWithCoder:coder];\n\n    [coder encodeInteger:self.format forKey:NSStringFromSelector(@selector(format))];\n    [coder encodeObject:@(self.writeOptions) forKey:NSStringFromSelector(@selector(writeOptions))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFPropertyListRequestSerializer *serializer = [super copyWithZone:zone];\n    serializer.format = self.format;\n    serializer.writeOptions = self.writeOptions;\n\n    return serializer;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFURLResponseSerialization.h",
    "content": "// AFURLResponseSerialization.h\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n#import <CoreGraphics/CoreGraphics.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n/**\n The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data.\n\n For example, a JSON response serializer may check for an acceptable status code (`2XX` range) and content type (`application/json`), decoding a valid JSON response into an object.\n */\n@protocol AFURLResponseSerialization <NSObject, NSSecureCoding, NSCopying>\n\n/**\n The response object decoded from the data associated with a specified response.\n\n @param response The response to be processed.\n @param data The response data to be decoded.\n @param error The error that occurred while attempting to decode the response data.\n\n @return The object decoded from the specified response data.\n */\n- (nullable id)responseObjectForResponse:(nullable NSURLResponse *)response\n                           data:(nullable NSData *)data\n                          error:(NSError * __nullable __autoreleasing *)error;\n\n@end\n\n#pragma mark -\n\n/**\n `AFHTTPResponseSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation.\n\n Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPResponseSerializer` in order to ensure consistent default behavior.\n */\n@interface AFHTTPResponseSerializer : NSObject <AFURLResponseSerialization>\n\n- (instancetype)init;\n\n/**\n The string encoding used to serialize data received from the server, when no string encoding is specified by the response. `NSUTF8StringEncoding` by default.\n */\n@property (nonatomic, assign) NSStringEncoding stringEncoding;\n\n/**\n Creates and returns a serializer with default configuration.\n */\n+ (instancetype)serializer;\n\n///-----------------------------------------\n/// @name Configuring Response Serialization\n///-----------------------------------------\n\n/**\n The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation.\n\n See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\n */\n@property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes;\n\n/**\n The acceptable MIME types for responses. When non-`nil`, responses with a `Content-Type` with MIME types that do not intersect with the set will result in an error during validation.\n */\n@property (nonatomic, copy, nullable) NSSet *acceptableContentTypes;\n\n/**\n Validates the specified response and data.\n\n In its base implementation, this method checks for an acceptable status code and content type. Subclasses may wish to add other domain-specific checks.\n\n @param response The response to be validated.\n @param data The data associated with the response.\n @param error The error that occurred while attempting to validate the response.\n\n @return `YES` if the response is valid, otherwise `NO`.\n */\n- (BOOL)validateResponse:(nullable NSHTTPURLResponse *)response\n                    data:(nullable NSData *)data\n                   error:(NSError * __nullable __autoreleasing *)error;\n\n@end\n\n#pragma mark -\n\n\n/**\n `AFJSONResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes JSON responses.\n\n By default, `AFJSONResponseSerializer` accepts the following MIME types, which includes the official standard, `application/json`, as well as other commonly-used types:\n\n - `application/json`\n - `text/json`\n - `text/javascript`\n */\n@interface AFJSONResponseSerializer : AFHTTPResponseSerializer\n\n- (instancetype)init;\n\n/**\n Options for reading the response JSON data and creating the Foundation objects. For possible values, see the `NSJSONSerialization` documentation section \"NSJSONReadingOptions\". `0` by default.\n */\n@property (nonatomic, assign) NSJSONReadingOptions readingOptions;\n\n/**\n Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`.\n */\n@property (nonatomic, assign) BOOL removesKeysWithNullValues;\n\n/**\n Creates and returns a JSON serializer with specified reading and writing options.\n\n @param readingOptions The specified JSON reading options.\n */\n+ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions;\n\n@end\n\n#pragma mark -\n\n/**\n `AFXMLParserResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLParser` objects.\n\n By default, `AFXMLParserResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types:\n\n - `application/xml`\n - `text/xml`\n */\n@interface AFXMLParserResponseSerializer : AFHTTPResponseSerializer\n\n@end\n\n#pragma mark -\n\n#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED\n\n/**\n `AFXMLDocumentResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects.\n\n By default, `AFXMLDocumentResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types:\n\n - `application/xml`\n - `text/xml`\n */\n@interface AFXMLDocumentResponseSerializer : AFHTTPResponseSerializer\n\n- (instancetype)init;\n\n/**\n Input and output options specifically intended for `NSXMLDocument` objects. For possible values, see the `NSJSONSerialization` documentation section \"NSJSONReadingOptions\". `0` by default.\n */\n@property (nonatomic, assign) NSUInteger options;\n\n/**\n Creates and returns an XML document serializer with the specified options.\n\n @param mask The XML document options.\n */\n+ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask;\n\n@end\n\n#endif\n\n#pragma mark -\n\n/**\n `AFPropertyListResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects.\n\n By default, `AFPropertyListResponseSerializer` accepts the following MIME types:\n\n - `application/x-plist`\n */\n@interface AFPropertyListResponseSerializer : AFHTTPResponseSerializer\n\n- (instancetype)init;\n\n/**\n The property list format. Possible values are described in \"NSPropertyListFormat\".\n */\n@property (nonatomic, assign) NSPropertyListFormat format;\n\n/**\n The property list reading options. Possible values are described in \"NSPropertyListMutabilityOptions.\"\n */\n@property (nonatomic, assign) NSPropertyListReadOptions readOptions;\n\n/**\n Creates and returns a property list serializer with a specified format, read options, and write options.\n\n @param format The property list format.\n @param readOptions The property list reading options.\n */\n+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format\n                         readOptions:(NSPropertyListReadOptions)readOptions;\n\n@end\n\n#pragma mark -\n\n/**\n `AFImageResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes image responses.\n\n By default, `AFImageResponseSerializer` accepts the following MIME types, which correspond to the image formats supported by UIImage or NSImage:\n\n - `image/tiff`\n - `image/jpeg`\n - `image/gif`\n - `image/png`\n - `image/ico`\n - `image/x-icon`\n - `image/bmp`\n - `image/x-bmp`\n - `image/x-xbitmap`\n - `image/x-win-bitmap`\n */\n@interface AFImageResponseSerializer : AFHTTPResponseSerializer\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n/**\n The scale factor used when interpreting the image data to construct `responseImage`. Specifying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the size property. This is set to the value of scale of the main screen by default, which automatically scales images for retina displays, for instance.\n */\n@property (nonatomic, assign) CGFloat imageScale;\n\n/**\n Whether to automatically inflate response image data for compressed formats (such as PNG or JPEG). Enabling this can significantly improve drawing performance on iOS when used with `setCompletionBlockWithSuccess:failure:`, as it allows a bitmap representation to be constructed in the background rather than on the main thread. `YES` by default.\n */\n@property (nonatomic, assign) BOOL automaticallyInflatesResponseImage;\n#endif\n\n@end\n\n#pragma mark -\n\n/**\n `AFCompoundSerializer` is a subclass of `AFHTTPResponseSerializer` that delegates the response serialization to the first `AFHTTPResponseSerializer` object that returns an object for `responseObjectForResponse:data:error:`, falling back on the default behavior of `AFHTTPResponseSerializer`. This is useful for supporting multiple potential types and structures of server responses with a single serializer.\n */\n@interface AFCompoundResponseSerializer : AFHTTPResponseSerializer\n\n/**\n The component response serializers.\n */\n@property (readonly, nonatomic, copy) NSArray *responseSerializers;\n\n/**\n Creates and returns a compound serializer comprised of the specified response serializers.\n\n @warning Each response serializer specified must be a subclass of `AFHTTPResponseSerializer`, and response to `-validateResponse:data:error:`.\n */\n+ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers;\n\n@end\n\n///----------------\n/// @name Constants\n///----------------\n\n/**\n ## Error Domains\n\n The following error domain is predefined.\n\n - `NSString * const AFURLResponseSerializationErrorDomain`\n\n ### Constants\n\n `AFURLResponseSerializationErrorDomain`\n AFURLResponseSerializer errors. Error codes for `AFURLResponseSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`.\n */\nextern NSString * const AFURLResponseSerializationErrorDomain;\n\n/**\n ## User info dictionary keys\n\n These keys may exist in the user info dictionary, in addition to those defined for NSError.\n\n - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey`\n - `NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey`\n\n ### Constants\n\n `AFNetworkingOperationFailingURLResponseErrorKey`\n The corresponding value is an `NSURLResponse` containing the response of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`.\n\n `AFNetworkingOperationFailingURLResponseDataErrorKey`\n The corresponding value is an `NSData` containing the original data of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`.\n */\nextern NSString * const AFNetworkingOperationFailingURLResponseErrorKey;\n\nextern NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey;\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFURLResponseSerialization.m",
    "content": "// AFURLResponseSerialization.m\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import \"AFURLResponseSerialization.h\"\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n#import <UIKit/UIKit.h>\n#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED)\n#import <Cocoa/Cocoa.h>\n#endif\n\nNSString * const AFURLResponseSerializationErrorDomain = @\"com.alamofire.error.serialization.response\";\nNSString * const AFNetworkingOperationFailingURLResponseErrorKey = @\"com.alamofire.serialization.response.error.response\";\nNSString * const AFNetworkingOperationFailingURLResponseDataErrorKey = @\"com.alamofire.serialization.response.error.data\";\n\nstatic NSError * AFErrorWithUnderlyingError(NSError *error, NSError *underlyingError) {\n    if (!error) {\n        return underlyingError;\n    }\n\n    if (!underlyingError || error.userInfo[NSUnderlyingErrorKey]) {\n        return error;\n    }\n\n    NSMutableDictionary *mutableUserInfo = [error.userInfo mutableCopy];\n    mutableUserInfo[NSUnderlyingErrorKey] = underlyingError;\n\n    return [[NSError alloc] initWithDomain:error.domain code:error.code userInfo:mutableUserInfo];\n}\n\nstatic BOOL AFErrorOrUnderlyingErrorHasCodeInDomain(NSError *error, NSInteger code, NSString *domain) {\n    if ([error.domain isEqualToString:domain] && error.code == code) {\n        return YES;\n    } else if (error.userInfo[NSUnderlyingErrorKey]) {\n        return AFErrorOrUnderlyingErrorHasCodeInDomain(error.userInfo[NSUnderlyingErrorKey], code, domain);\n    }\n\n    return NO;\n}\n\nstatic id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) {\n    if ([JSONObject isKindOfClass:[NSArray class]]) {\n        NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]];\n        for (id value in (NSArray *)JSONObject) {\n            [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)];\n        }\n\n        return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray];\n    } else if ([JSONObject isKindOfClass:[NSDictionary class]]) {\n        NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject];\n        for (id <NSCopying> key in [(NSDictionary *)JSONObject allKeys]) {\n            id value = (NSDictionary *)JSONObject[key];\n            if (!value || [value isEqual:[NSNull null]]) {\n                [mutableDictionary removeObjectForKey:key];\n            } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) {\n                mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions);\n            }\n        }\n\n        return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary];\n    }\n\n    return JSONObject;\n}\n\n@implementation AFHTTPResponseSerializer\n\n+ (instancetype)serializer {\n    return [[self alloc] init];\n}\n\n- (instancetype)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.stringEncoding = NSUTF8StringEncoding;\n\n    self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)];\n    self.acceptableContentTypes = nil;\n\n    return self;\n}\n\n#pragma mark -\n\n- (BOOL)validateResponse:(NSHTTPURLResponse *)response\n                    data:(NSData *)data\n                   error:(NSError * __autoreleasing *)error\n{\n    BOOL responseIsValid = YES;\n    NSError *validationError = nil;\n\n    if (response && [response isKindOfClass:[NSHTTPURLResponse class]]) {\n        if (self.acceptableContentTypes && ![self.acceptableContentTypes containsObject:[response MIMEType]]) {\n            if ([data length] > 0 && [response URL]) {\n                NSMutableDictionary *mutableUserInfo = [@{\n                                                          NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@\"Request failed: unacceptable content-type: %@\", @\"AFNetworking\", nil), [response MIMEType]],\n                                                          NSURLErrorFailingURLErrorKey:[response URL],\n                                                          AFNetworkingOperationFailingURLResponseErrorKey: response,\n                                                        } mutableCopy];\n                if (data) {\n                    mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data;\n                }\n\n                validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:mutableUserInfo], validationError);\n            }\n\n            responseIsValid = NO;\n        }\n\n        if (self.acceptableStatusCodes && ![self.acceptableStatusCodes containsIndex:(NSUInteger)response.statusCode] && [response URL]) {\n            NSMutableDictionary *mutableUserInfo = [@{\n                                               NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@\"Request failed: %@ (%ld)\", @\"AFNetworking\", nil), [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], (long)response.statusCode],\n                                               NSURLErrorFailingURLErrorKey:[response URL],\n                                               AFNetworkingOperationFailingURLResponseErrorKey: response,\n                                       } mutableCopy];\n\n            if (data) {\n                mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data;\n            }\n\n            validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorBadServerResponse userInfo:mutableUserInfo], validationError);\n\n            responseIsValid = NO;\n        }\n    }\n\n    if (error && !responseIsValid) {\n        *error = validationError;\n    }\n\n    return responseIsValid;\n}\n\n#pragma mark - AFURLResponseSerialization\n\n- (id)responseObjectForResponse:(NSURLResponse *)response\n                           data:(NSData *)data\n                          error:(NSError *__autoreleasing *)error\n{\n    [self validateResponse:(NSHTTPURLResponse *)response data:data error:error];\n\n    return data;\n}\n\n#pragma mark - NSSecureCoding\n\n+ (BOOL)supportsSecureCoding {\n    return YES;\n}\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [self init];\n    if (!self) {\n        return nil;\n    }\n\n    self.acceptableStatusCodes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableStatusCodes))];\n    self.acceptableContentTypes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableContentTypes))];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [coder encodeObject:self.acceptableStatusCodes forKey:NSStringFromSelector(@selector(acceptableStatusCodes))];\n    [coder encodeObject:self.acceptableContentTypes forKey:NSStringFromSelector(@selector(acceptableContentTypes))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFHTTPResponseSerializer *serializer = [[[self class] allocWithZone:zone] init];\n    serializer.acceptableStatusCodes = [self.acceptableStatusCodes copyWithZone:zone];\n    serializer.acceptableContentTypes = [self.acceptableContentTypes copyWithZone:zone];\n\n    return serializer;\n}\n\n@end\n\n#pragma mark -\n\n@implementation AFJSONResponseSerializer\n\n+ (instancetype)serializer {\n    return [self serializerWithReadingOptions:(NSJSONReadingOptions)0];\n}\n\n+ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions {\n    AFJSONResponseSerializer *serializer = [[self alloc] init];\n    serializer.readingOptions = readingOptions;\n\n    return serializer;\n}\n\n- (instancetype)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.acceptableContentTypes = [NSSet setWithObjects:@\"application/json\", @\"text/json\", @\"text/javascript\", nil];\n\n    return self;\n}\n\n#pragma mark - AFURLResponseSerialization\n\n- (id)responseObjectForResponse:(NSURLResponse *)response\n                           data:(NSData *)data\n                          error:(NSError *__autoreleasing *)error\n{\n    if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) {\n        if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) {\n            return nil;\n        }\n    }\n\n    // Workaround for behavior of Rails to return a single space for `head :ok` (a workaround for a bug in Safari), which is not interpreted as valid input by NSJSONSerialization.\n    // See https://github.com/rails/rails/issues/1742\n    NSStringEncoding stringEncoding = self.stringEncoding;\n    if (response.textEncodingName) {\n        CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName);\n        if (encoding != kCFStringEncodingInvalidId) {\n            stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding);\n        }\n    }\n\n    id responseObject = nil;\n    NSError *serializationError = nil;\n    @autoreleasepool {\n        NSString *responseString = [[NSString alloc] initWithData:data encoding:stringEncoding];\n        if (responseString && ![responseString isEqualToString:@\" \"]) {\n            // Workaround for a bug in NSJSONSerialization when Unicode character escape codes are used instead of the actual character\n            // See http://stackoverflow.com/a/12843465/157142\n            data = [responseString dataUsingEncoding:NSUTF8StringEncoding];\n\n            if (data) {\n                if ([data length] > 0) {\n                    responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError];\n                } else {\n                    return nil;\n                }\n            } else {\n                NSDictionary *userInfo = @{\n                                           NSLocalizedDescriptionKey: NSLocalizedStringFromTable(@\"Data failed decoding as a UTF-8 string\", @\"AFNetworking\", nil),\n                                           NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@\"Could not decode string: %@\", @\"AFNetworking\", nil), responseString]\n                                           };\n\n                serializationError = [NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:userInfo];\n            }\n        }\n    }\n\n    if (self.removesKeysWithNullValues && responseObject) {\n        responseObject = AFJSONObjectByRemovingKeysWithNullValues(responseObject, self.readingOptions);\n    }\n\n    if (error) {\n        *error = AFErrorWithUnderlyingError(serializationError, *error);\n    }\n\n    return responseObject;\n}\n\n#pragma mark - NSSecureCoding\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [super initWithCoder:decoder];\n    if (!self) {\n        return nil;\n    }\n\n    self.readingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readingOptions))] unsignedIntegerValue];\n    self.removesKeysWithNullValues = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))] boolValue];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [super encodeWithCoder:coder];\n\n    [coder encodeObject:@(self.readingOptions) forKey:NSStringFromSelector(@selector(readingOptions))];\n    [coder encodeObject:@(self.removesKeysWithNullValues) forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFJSONResponseSerializer *serializer = [[[self class] allocWithZone:zone] init];\n    serializer.readingOptions = self.readingOptions;\n    serializer.removesKeysWithNullValues = self.removesKeysWithNullValues;\n\n    return serializer;\n}\n\n@end\n\n#pragma mark -\n\n@implementation AFXMLParserResponseSerializer\n\n+ (instancetype)serializer {\n    AFXMLParserResponseSerializer *serializer = [[self alloc] init];\n\n    return serializer;\n}\n\n- (instancetype)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@\"application/xml\", @\"text/xml\", nil];\n\n    return self;\n}\n\n#pragma mark - AFURLResponseSerialization\n\n- (id)responseObjectForResponse:(NSHTTPURLResponse *)response\n                           data:(NSData *)data\n                          error:(NSError *__autoreleasing *)error\n{\n    if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) {\n        if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) {\n            return nil;\n        }\n    }\n\n    return [[NSXMLParser alloc] initWithData:data];\n}\n\n@end\n\n#pragma mark -\n\n#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED\n\n@implementation AFXMLDocumentResponseSerializer\n\n+ (instancetype)serializer {\n    return [self serializerWithXMLDocumentOptions:0];\n}\n\n+ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask {\n    AFXMLDocumentResponseSerializer *serializer = [[self alloc] init];\n    serializer.options = mask;\n\n    return serializer;\n}\n\n- (instancetype)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@\"application/xml\", @\"text/xml\", nil];\n\n    return self;\n}\n\n#pragma mark - AFURLResponseSerialization\n\n- (id)responseObjectForResponse:(NSURLResponse *)response\n                           data:(NSData *)data\n                          error:(NSError *__autoreleasing *)error\n{\n    if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) {\n        if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) {\n            return nil;\n        }\n    }\n\n    NSError *serializationError = nil;\n    NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:self.options error:&serializationError];\n\n    if (error) {\n        *error = AFErrorWithUnderlyingError(serializationError, *error);\n    }\n\n    return document;\n}\n\n#pragma mark - NSSecureCoding\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [super initWithCoder:decoder];\n    if (!self) {\n        return nil;\n    }\n\n    self.options = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(options))] unsignedIntegerValue];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [super encodeWithCoder:coder];\n\n    [coder encodeObject:@(self.options) forKey:NSStringFromSelector(@selector(options))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFXMLDocumentResponseSerializer *serializer = [[[self class] allocWithZone:zone] init];\n    serializer.options = self.options;\n\n    return serializer;\n}\n\n@end\n\n#endif\n\n#pragma mark -\n\n@implementation AFPropertyListResponseSerializer\n\n+ (instancetype)serializer {\n    return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 readOptions:0];\n}\n\n+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format\n                         readOptions:(NSPropertyListReadOptions)readOptions\n{\n    AFPropertyListResponseSerializer *serializer = [[self alloc] init];\n    serializer.format = format;\n    serializer.readOptions = readOptions;\n\n    return serializer;\n}\n\n- (instancetype)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@\"application/x-plist\", nil];\n\n    return self;\n}\n\n#pragma mark - AFURLResponseSerialization\n\n- (id)responseObjectForResponse:(NSURLResponse *)response\n                           data:(NSData *)data\n                          error:(NSError *__autoreleasing *)error\n{\n    if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) {\n        if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) {\n            return nil;\n        }\n    }\n\n    id responseObject;\n    NSError *serializationError = nil;\n\n    if (data) {\n        responseObject = [NSPropertyListSerialization propertyListWithData:data options:self.readOptions format:NULL error:&serializationError];\n    }\n\n    if (error) {\n        *error = AFErrorWithUnderlyingError(serializationError, *error);\n    }\n\n    return responseObject;\n}\n\n#pragma mark - NSSecureCoding\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [super initWithCoder:decoder];\n    if (!self) {\n        return nil;\n    }\n\n    self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue];\n    self.readOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readOptions))] unsignedIntegerValue];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [super encodeWithCoder:coder];\n\n    [coder encodeObject:@(self.format) forKey:NSStringFromSelector(@selector(format))];\n    [coder encodeObject:@(self.readOptions) forKey:NSStringFromSelector(@selector(readOptions))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFPropertyListResponseSerializer *serializer = [[[self class] allocWithZone:zone] init];\n    serializer.format = self.format;\n    serializer.readOptions = self.readOptions;\n\n    return serializer;\n}\n\n@end\n\n#pragma mark -\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n#import <CoreGraphics/CoreGraphics.h>\n\n@interface UIImage (AFNetworkingSafeImageLoading)\n+ (UIImage *)af_safeImageWithData:(NSData *)data;\n@end\n\nstatic NSLock* imageLock = nil;\n\n@implementation UIImage (AFNetworkingSafeImageLoading)\n\n+ (UIImage *)af_safeImageWithData:(NSData *)data {\n    UIImage* image = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        imageLock = [[NSLock alloc] init];\n    });\n    \n    [imageLock lock];\n    image = [UIImage imageWithData:data];\n    [imageLock unlock];\n    return image;\n}\n\n@end\n\nstatic UIImage * AFImageWithDataAtScale(NSData *data, CGFloat scale) {\n    UIImage *image = [UIImage af_safeImageWithData:data];\n    if (image.images) {\n        return image;\n    }\n    \n    return [[UIImage alloc] initWithCGImage:[image CGImage] scale:scale orientation:image.imageOrientation];\n}\n\nstatic UIImage * AFInflatedImageFromResponseWithDataAtScale(NSHTTPURLResponse *response, NSData *data, CGFloat scale) {\n    if (!data || [data length] == 0) {\n        return nil;\n    }\n\n    CGImageRef imageRef = NULL;\n    CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);\n\n    if ([response.MIMEType isEqualToString:@\"image/png\"]) {\n        imageRef = CGImageCreateWithPNGDataProvider(dataProvider,  NULL, true, kCGRenderingIntentDefault);\n    } else if ([response.MIMEType isEqualToString:@\"image/jpeg\"]) {\n        imageRef = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault);\n\n        if (imageRef) {\n            CGColorSpaceRef imageColorSpace = CGImageGetColorSpace(imageRef);\n            CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(imageColorSpace);\n\n            // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so fall back to AFImageWithDataAtScale\n            if (imageColorSpaceModel == kCGColorSpaceModelCMYK) {\n                CGImageRelease(imageRef);\n                imageRef = NULL;\n            }\n        }\n    }\n\n    CGDataProviderRelease(dataProvider);\n\n    UIImage *image = AFImageWithDataAtScale(data, scale);\n    if (!imageRef) {\n        if (image.images || !image) {\n            return image;\n        }\n\n        imageRef = CGImageCreateCopy([image CGImage]);\n        if (!imageRef) {\n            return nil;\n        }\n    }\n\n    size_t width = CGImageGetWidth(imageRef);\n    size_t height = CGImageGetHeight(imageRef);\n    size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef);\n\n    if (width * height > 1024 * 1024 || bitsPerComponent > 8) {\n        CGImageRelease(imageRef);\n\n        return image;\n    }\n\n    // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate\n    size_t bytesPerRow = 0;\n    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();\n    CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace);\n    CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);\n\n    if (colorSpaceModel == kCGColorSpaceModelRGB) {\n        uint32_t alpha = (bitmapInfo & kCGBitmapAlphaInfoMask);\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wassign-enum\"\n        if (alpha == kCGImageAlphaNone) {\n            bitmapInfo &= ~kCGBitmapAlphaInfoMask;\n            bitmapInfo |= kCGImageAlphaNoneSkipFirst;\n        } else if (!(alpha == kCGImageAlphaNoneSkipFirst || alpha == kCGImageAlphaNoneSkipLast)) {\n            bitmapInfo &= ~kCGBitmapAlphaInfoMask;\n            bitmapInfo |= kCGImageAlphaPremultipliedFirst;\n        }\n#pragma clang diagnostic pop\n    }\n\n    CGContextRef context = CGBitmapContextCreate(NULL, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo);\n\n    CGColorSpaceRelease(colorSpace);\n\n    if (!context) {\n        CGImageRelease(imageRef);\n\n        return image;\n    }\n\n    CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), imageRef);\n    CGImageRef inflatedImageRef = CGBitmapContextCreateImage(context);\n\n    CGContextRelease(context);\n\n    UIImage *inflatedImage = [[UIImage alloc] initWithCGImage:inflatedImageRef scale:scale orientation:image.imageOrientation];\n\n    CGImageRelease(inflatedImageRef);\n    CGImageRelease(imageRef);\n\n    return inflatedImage;\n}\n#endif\n\n\n@implementation AFImageResponseSerializer\n\n- (instancetype)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@\"image/tiff\", @\"image/jpeg\", @\"image/gif\", @\"image/png\", @\"image/ico\", @\"image/x-icon\", @\"image/bmp\", @\"image/x-bmp\", @\"image/x-xbitmap\", @\"image/x-win-bitmap\", nil];\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n    self.imageScale = [[UIScreen mainScreen] scale];\n    self.automaticallyInflatesResponseImage = YES;\n#endif\n\n    return self;\n}\n\n#pragma mark - AFURLResponseSerializer\n\n- (id)responseObjectForResponse:(NSURLResponse *)response\n                           data:(NSData *)data\n                          error:(NSError *__autoreleasing *)error\n{\n    if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) {\n        if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) {\n            return nil;\n        }\n    }\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n    if (self.automaticallyInflatesResponseImage) {\n        return AFInflatedImageFromResponseWithDataAtScale((NSHTTPURLResponse *)response, data, self.imageScale);\n    } else {\n        return AFImageWithDataAtScale(data, self.imageScale);\n    }\n#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED)\n    // Ensure that the image is set to it's correct pixel width and height\n    NSBitmapImageRep *bitimage = [[NSBitmapImageRep alloc] initWithData:data];\n    NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize([bitimage pixelsWide], [bitimage pixelsHigh])];\n    [image addRepresentation:bitimage];\n\n    return image;\n#endif\n\n    return nil;\n}\n\n#pragma mark - NSSecureCoding\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [super initWithCoder:decoder];\n    if (!self) {\n        return nil;\n    }\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n    NSNumber *imageScale = [decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(imageScale))];\n#if CGFLOAT_IS_DOUBLE\n    self.imageScale = [imageScale doubleValue];\n#else\n    self.imageScale = [imageScale floatValue];\n#endif\n\n    self.automaticallyInflatesResponseImage = [decoder decodeBoolForKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))];\n#endif\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [super encodeWithCoder:coder];\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n    [coder encodeObject:@(self.imageScale) forKey:NSStringFromSelector(@selector(imageScale))];\n    [coder encodeBool:self.automaticallyInflatesResponseImage forKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))];\n#endif\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFImageResponseSerializer *serializer = [[[self class] allocWithZone:zone] init];\n\n#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n    serializer.imageScale = self.imageScale;\n    serializer.automaticallyInflatesResponseImage = self.automaticallyInflatesResponseImage;\n#endif\n\n    return serializer;\n}\n\n@end\n\n#pragma mark -\n\n@interface AFCompoundResponseSerializer ()\n@property (readwrite, nonatomic, copy) NSArray *responseSerializers;\n@end\n\n@implementation AFCompoundResponseSerializer\n\n+ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers {\n    AFCompoundResponseSerializer *serializer = [[self alloc] init];\n    serializer.responseSerializers = responseSerializers;\n\n    return serializer;\n}\n\n#pragma mark - AFURLResponseSerialization\n\n- (id)responseObjectForResponse:(NSURLResponse *)response\n                           data:(NSData *)data\n                          error:(NSError *__autoreleasing *)error\n{\n    for (id <AFURLResponseSerialization> serializer in self.responseSerializers) {\n        if (![serializer isKindOfClass:[AFHTTPResponseSerializer class]]) {\n            continue;\n        }\n\n        NSError *serializerError = nil;\n        id responseObject = [serializer responseObjectForResponse:response data:data error:&serializerError];\n        if (responseObject) {\n            if (error) {\n                *error = AFErrorWithUnderlyingError(serializerError, *error);\n            }\n\n            return responseObject;\n        }\n    }\n\n    return [super responseObjectForResponse:response data:data error:error];\n}\n\n#pragma mark - NSSecureCoding\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    self = [super initWithCoder:decoder];\n    if (!self) {\n        return nil;\n    }\n\n    self.responseSerializers = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(responseSerializers))];\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [super encodeWithCoder:coder];\n\n    [coder encodeObject:self.responseSerializers forKey:NSStringFromSelector(@selector(responseSerializers))];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    AFCompoundResponseSerializer *serializer = [[[self class] allocWithZone:zone] init];\n    serializer.responseSerializers = self.responseSerializers;\n\n    return serializer;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFURLSessionManager.h",
    "content": "// AFURLSessionManager.h\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import <Foundation/Foundation.h>\n\n#import \"AFURLResponseSerialization.h\"\n#import \"AFURLRequestSerialization.h\"\n#import \"AFSecurityPolicy.h\"\n#import \"AFNetworkReachabilityManager.h\"\n\n#ifndef NS_DESIGNATED_INITIALIZER\n#if __has_attribute(objc_designated_initializer)\n#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))\n#else\n#define NS_DESIGNATED_INITIALIZER\n#endif\n#endif\n\n/**\n `AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to `<NSURLSessionTaskDelegate>`, `<NSURLSessionDataDelegate>`, `<NSURLSessionDownloadDelegate>`, and `<NSURLSessionDelegate>`.\n\n ## Subclassing Notes\n\n This is the base class for `AFHTTPSessionManager`, which adds functionality specific to making HTTP requests. If you are looking to extend `AFURLSessionManager` specifically for HTTP, consider subclassing `AFHTTPSessionManager` instead.\n\n ## NSURLSession & NSURLSessionTask Delegate Methods\n\n `AFURLSessionManager` implements the following delegate methods:\n\n ### `NSURLSessionDelegate`\n\n - `URLSession:didBecomeInvalidWithError:`\n - `URLSession:didReceiveChallenge:completionHandler:`\n - `URLSessionDidFinishEventsForBackgroundURLSession:`\n\n ### `NSURLSessionTaskDelegate`\n\n - `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:`\n - `URLSession:task:didReceiveChallenge:completionHandler:`\n - `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`\n - `URLSession:task:didCompleteWithError:`\n\n ### `NSURLSessionDataDelegate`\n\n - `URLSession:dataTask:didReceiveResponse:completionHandler:`\n - `URLSession:dataTask:didBecomeDownloadTask:`\n - `URLSession:dataTask:didReceiveData:`\n - `URLSession:dataTask:willCacheResponse:completionHandler:`\n\n ### `NSURLSessionDownloadDelegate`\n\n - `URLSession:downloadTask:didFinishDownloadingToURL:`\n - `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:`\n - `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`\n\n If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first.\n\n ## Network Reachability Monitoring\n\n Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details.\n\n ## NSCoding Caveats\n\n - Encoded managers do not include any block properties. Be sure to set delegate callback blocks when using `-initWithCoder:` or `NSKeyedUnarchiver`.\n\n ## NSCopying Caveats\n\n - `-copy` and `-copyWithZone:` return a new manager with a new `NSURLSession` created from the configuration of the original.\n - Operation copies do not include any delegate callback blocks, as they often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ session manager when copied.\n\n @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance.\n */\n\nNS_ASSUME_NONNULL_BEGIN\n\n#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090)\n\n@interface AFURLSessionManager : NSObject <NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NSSecureCoding, NSCopying>\n\n/**\n The managed session.\n */\n@property (readonly, nonatomic, strong) NSURLSession *session;\n\n/**\n The operation queue on which delegate callbacks are run.\n */\n@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue;\n\n/**\n Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`.\n\n @warning `responseSerializer` must not be `nil`.\n */\n@property (nonatomic, strong) id <AFURLResponseSerialization> responseSerializer;\n\n///-------------------------------\n/// @name Managing Security Policy\n///-------------------------------\n\n/**\n The security policy used by created request operations to evaluate server trust for secure connections. `AFURLSessionManager` uses the `defaultPolicy` unless otherwise specified.\n */\n@property (nonatomic, strong) AFSecurityPolicy *securityPolicy;\n\n///--------------------------------------\n/// @name Monitoring Network Reachability\n///--------------------------------------\n\n/**\n The network reachability manager. `AFURLSessionManager` uses the `sharedManager` by default.\n */\n@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager;\n\n///----------------------------\n/// @name Getting Session Tasks\n///----------------------------\n\n/**\n The data, upload, and download tasks currently run by the managed session.\n */\n@property (readonly, nonatomic, strong) NSArray *tasks;\n\n/**\n The data tasks currently run by the managed session.\n */\n@property (readonly, nonatomic, strong) NSArray *dataTasks;\n\n/**\n The upload tasks currently run by the managed session.\n */\n@property (readonly, nonatomic, strong) NSArray *uploadTasks;\n\n/**\n The download tasks currently run by the managed session.\n */\n@property (readonly, nonatomic, strong) NSArray *downloadTasks;\n\n///-------------------------------\n/// @name Managing Callback Queues\n///-------------------------------\n\n/**\n The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used.\n */\n#if OS_OBJECT_HAVE_OBJC_SUPPORT\n@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue;\n#else\n@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue;\n#endif\n\n/**\n The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used.\n */\n#if OS_OBJECT_HAVE_OBJC_SUPPORT\n@property (nonatomic, strong, nullable) dispatch_group_t completionGroup;\n#else\n@property (nonatomic, assign, nullable) dispatch_group_t completionGroup;\n#endif\n\n///---------------------------------\n/// @name Working Around System Bugs\n///---------------------------------\n\n/**\n Whether to attempt to retry creation of upload tasks for background sessions when initial call returns `nil`. `NO` by default.\n\n @bug As of iOS 7.0, there is a bug where upload tasks created for background tasks are sometimes `nil`. As a workaround, if this property is `YES`, AFNetworking will follow Apple's recommendation to try creating the task again.\n\n @see https://github.com/AFNetworking/AFNetworking/issues/1675\n */\n@property (nonatomic, assign) BOOL attemptsToRecreateUploadTasksForBackgroundSessions;\n\n///---------------------\n/// @name Initialization\n///---------------------\n\n/**\n Creates and returns a manager for a session created with the specified configuration. This is the designated initializer.\n\n @param configuration The configuration used to create the managed session.\n\n @return A manager for a newly-created session.\n */\n- (instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER;\n\n/**\n Invalidates the managed session, optionally canceling pending tasks.\n\n @param cancelPendingTasks Whether or not to cancel pending tasks.\n */\n- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks;\n\n///-------------------------\n/// @name Running Data Tasks\n///-------------------------\n\n/**\n Creates an `NSURLSessionDataTask` with the specified request.\n\n @param request The HTTP request for the request.\n @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any.\n */\n- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request\n                            completionHandler:(nullable void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler;\n\n///---------------------------\n/// @name Running Upload Tasks\n///---------------------------\n\n/**\n Creates an `NSURLSessionUploadTask` with the specified request for a local file.\n\n @param request The HTTP request for the request.\n @param fileURL A URL to the local file to be uploaded.\n @param progress A progress object monitoring the current upload progress.\n @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any.\n\n @see `attemptsToRecreateUploadTasksForBackgroundSessions`\n */\n- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request\n                                         fromFile:(NSURL *)fileURL\n                                         progress:(NSProgress * __nullable __autoreleasing * __nullable)progress\n                                completionHandler:(nullable void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler;\n\n/**\n Creates an `NSURLSessionUploadTask` with the specified request for an HTTP body.\n\n @param request The HTTP request for the request.\n @param bodyData A data object containing the HTTP body to be uploaded.\n @param progress A progress object monitoring the current upload progress.\n @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any.\n */\n- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request\n                                         fromData:(nullable NSData *)bodyData\n                                         progress:(NSProgress * __nullable __autoreleasing * __nullable)progress\n                                completionHandler:(nullable void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler;\n\n/**\n Creates an `NSURLSessionUploadTask` with the specified streaming request.\n\n @param request The HTTP request for the request.\n @param progress A progress object monitoring the current upload progress.\n @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any.\n */\n- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request\n                                                 progress:(NSProgress * __nullable __autoreleasing * __nullable)progress\n                                        completionHandler:(nullable void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler;\n\n///-----------------------------\n/// @name Running Download Tasks\n///-----------------------------\n\n/**\n Creates an `NSURLSessionDownloadTask` with the specified request.\n\n @param request The HTTP request for the request.\n @param progress A progress object monitoring the current download progress.\n @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL.\n @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any.\n\n @warning If using a background `NSURLSessionConfiguration` on iOS, these blocks will be lost when the app is terminated. Background sessions may prefer to use `-setDownloadTaskDidFinishDownloadingBlock:` to specify the URL for saving the downloaded file, rather than the destination block of this method.\n */\n- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request\n                                             progress:(NSProgress * __nullable __autoreleasing * __nullable)progress\n                                          destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination\n                                    completionHandler:(nullable void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler;\n\n/**\n Creates an `NSURLSessionDownloadTask` with the specified resume data.\n\n @param resumeData The data used to resume downloading.\n @param progress A progress object monitoring the current download progress.\n @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL.\n @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any.\n */\n- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData\n                                                progress:(NSProgress * __nullable __autoreleasing * __nullable)progress\n                                             destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination\n                                       completionHandler:(nullable void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler;\n\n///---------------------------------\n/// @name Getting Progress for Tasks\n///---------------------------------\n\n/**\n Returns the upload progress of the specified task.\n\n @param uploadTask The session upload task. Must not be `nil`.\n\n @return An `NSProgress` object reporting the upload progress of a task, or `nil` if the progress is unavailable.\n */\n- (nullable NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask;\n\n/**\n Returns the download progress of the specified task.\n\n @param downloadTask The session download task. Must not be `nil`.\n\n @return An `NSProgress` object reporting the download progress of a task, or `nil` if the progress is unavailable.\n */\n- (nullable NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask;\n\n///-----------------------------------------\n/// @name Setting Session Delegate Callbacks\n///-----------------------------------------\n\n/**\n Sets a block to be executed when the managed session becomes invalid, as handled by the `NSURLSessionDelegate` method `URLSession:didBecomeInvalidWithError:`.\n\n @param block A block object to be executed when the managed session becomes invalid. The block has no return value, and takes two arguments: the session, and the error related to the cause of invalidation.\n */\n- (void)setSessionDidBecomeInvalidBlock:(nullable void (^)(NSURLSession *session, NSError *error))block;\n\n/**\n Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the `NSURLSessionDelegate` method `URLSession:didReceiveChallenge:completionHandler:`.\n\n @param block A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge.\n */\n- (void)setSessionDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __nullable __autoreleasing * __nullable credential))block;\n\n///--------------------------------------\n/// @name Setting Task Delegate Callbacks\n///--------------------------------------\n\n/**\n Sets a block to be executed when a task requires a new request body stream to send to the remote server, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:needNewBodyStream:`.\n\n @param block A block object to be executed when a task requires a new request body stream.\n */\n- (void)setTaskNeedNewBodyStreamBlock:(nullable NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block;\n\n/**\n Sets a block to be executed when an HTTP request is attempting to perform a redirection to a different URL, as handled by the `NSURLSessionTaskDelegate` method `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:`.\n\n @param block A block object to be executed when an HTTP request is attempting to perform a redirection to a different URL. The block returns the request to be made for the redirection, and takes four arguments: the session, the task, the redirection response, and the request corresponding to the redirection response.\n */\n- (void)setTaskWillPerformHTTPRedirectionBlock:(nullable NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block;\n\n/**\n Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didReceiveChallenge:completionHandler:`.\n\n @param block A block object to be executed when a session task has received a request specific authentication challenge. The block returns the disposition of the authentication challenge, and takes four arguments: the session, the task, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge.\n */\n- (void)setTaskDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __nullable __autoreleasing * __nullable credential))block;\n\n/**\n Sets a block to be executed periodically to track upload progress, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`.\n\n @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes five arguments: the session, the task, the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread.\n */\n- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block;\n\n/**\n Sets a block to be executed as the last message related to a specific task, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didCompleteWithError:`.\n\n @param block A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any error that occurred in the process of executing the task.\n */\n- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block;\n\n///-------------------------------------------\n/// @name Setting Data Task Delegate Callbacks\n///-------------------------------------------\n\n/**\n Sets a block to be executed when a data task has received a response, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveResponse:completionHandler:`.\n\n @param block A block object to be executed when a data task has received a response. The block returns the disposition of the session response, and takes three arguments: the session, the data task, and the received response.\n */\n- (void)setDataTaskDidReceiveResponseBlock:(nullable NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block;\n\n/**\n Sets a block to be executed when a data task has become a download task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didBecomeDownloadTask:`.\n\n @param block A block object to be executed when a data task has become a download task. The block has no return value, and takes three arguments: the session, the data task, and the download task it has become.\n */\n- (void)setDataTaskDidBecomeDownloadTaskBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block;\n\n/**\n Sets a block to be executed when a data task receives data, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveData:`.\n\n @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the session, the data task, and the data received. This block may be called multiple times, and will execute on the session manager operation queue.\n */\n- (void)setDataTaskDidReceiveDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block;\n\n/**\n Sets a block to be executed to determine the caching behavior of a data task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:willCacheResponse:completionHandler:`.\n\n @param block A block object to be executed to determine the caching behavior of a data task. The block returns the response to cache, and takes three arguments: the session, the data task, and the proposed cached URL response.\n */\n- (void)setDataTaskWillCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block;\n\n/**\n Sets a block to be executed once all messages enqueued for a session have been delivered, as handled by the `NSURLSessionDataDelegate` method `URLSessionDidFinishEventsForBackgroundURLSession:`.\n\n @param block A block object to be executed once all messages enqueued for a session have been delivered. The block has no return value and takes a single argument: the session.\n */\n- (void)setDidFinishEventsForBackgroundURLSessionBlock:(nullable void (^)(NSURLSession *session))block;\n\n///-----------------------------------------------\n/// @name Setting Download Task Delegate Callbacks\n///-----------------------------------------------\n\n/**\n Sets a block to be executed when a download task has completed a download, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didFinishDownloadingToURL:`.\n\n @param block A block object to be executed when a download task has completed. The block returns the URL the download should be moved to, and takes three arguments: the session, the download task, and the temporary location of the downloaded file. If the file manager encounters an error while attempting to move the temporary file to the destination, an `AFURLSessionDownloadTaskDidFailToMoveFileNotification` will be posted, with the download task as its object, and the user info of the error.\n */\n- (void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block;\n\n/**\n Sets a block to be executed periodically to track download progress, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:`.\n\n @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes five arguments: the session, the download task, the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the session manager operation queue.\n */\n- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block;\n\n/**\n Sets a block to be executed when a download task has been resumed, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`.\n\n @param block A block object to be executed when a download task has been resumed. The block has no return value and takes four arguments: the session, the download task, the file offset of the resumed download, and the total number of bytes expected to be downloaded.\n */\n- (void)setDownloadTaskDidResumeBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block;\n\n@end\n\n#endif\n\n///--------------------\n/// @name Notifications\n///--------------------\n\n/**\n Posted when a task begins executing.\n\n @deprecated Use `AFNetworkingTaskDidResumeNotification` instead.\n */\nextern NSString * const AFNetworkingTaskDidStartNotification DEPRECATED_ATTRIBUTE;\n\n/**\n Posted when a task resumes.\n */\nextern NSString * const AFNetworkingTaskDidResumeNotification;\n\n/**\n Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task.\n\n @deprecated Use `AFNetworkingTaskDidCompleteNotification` instead.\n */\nextern NSString * const AFNetworkingTaskDidFinishNotification DEPRECATED_ATTRIBUTE;\n\n/**\n Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task.\n */\nextern NSString * const AFNetworkingTaskDidCompleteNotification;\n\n/**\n Posted when a task suspends its execution.\n */\nextern NSString * const AFNetworkingTaskDidSuspendNotification;\n\n/**\n Posted when a session is invalidated.\n */\nextern NSString * const AFURLSessionDidInvalidateNotification;\n\n/**\n Posted when a session download task encountered an error when moving the temporary download file to a specified destination.\n */\nextern NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification;\n\n/**\n The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task.\n\n @deprecated Use `AFNetworkingTaskDidCompleteResponseDataKey` instead.\n */\nextern NSString * const AFNetworkingTaskDidFinishResponseDataKey DEPRECATED_ATTRIBUTE;\n\n/**\n The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task.\n */\nextern NSString * const AFNetworkingTaskDidCompleteResponseDataKey;\n\n/**\n The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized.\n\n @deprecated Use `AFNetworkingTaskDidCompleteSerializedResponseKey` instead.\n */\nextern NSString * const AFNetworkingTaskDidFinishSerializedResponseKey DEPRECATED_ATTRIBUTE;\n\n/**\n The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized.\n */\nextern NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey;\n\n/**\n The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer.\n\n @deprecated Use `AFNetworkingTaskDidCompleteResponseSerializerKey` instead.\n */\nextern NSString * const AFNetworkingTaskDidFinishResponseSerializerKey DEPRECATED_ATTRIBUTE;\n\n/**\n The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer.\n */\nextern NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey;\n\n/**\n The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk.\n\n @deprecated Use `AFNetworkingTaskDidCompleteAssetPathKey` instead.\n */\nextern NSString * const AFNetworkingTaskDidFinishAssetPathKey DEPRECATED_ATTRIBUTE;\n\n/**\n The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk.\n */\nextern NSString * const AFNetworkingTaskDidCompleteAssetPathKey;\n\n/**\n Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists.\n\n @deprecated Use `AFNetworkingTaskDidCompleteErrorKey` instead.\n */\nextern NSString * const AFNetworkingTaskDidFinishErrorKey DEPRECATED_ATTRIBUTE;\n\n/**\n Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists.\n */\nextern NSString * const AFNetworkingTaskDidCompleteErrorKey;\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "shakefun/shakefun/AFNetworking/AFURLSessionManager.m",
    "content": "// AFURLSessionManager.m\n// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n#import \"AFURLSessionManager.h\"\n#import <objc/runtime.h>\n\n#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090)\n\nstatic dispatch_queue_t url_session_manager_creation_queue() {\n    static dispatch_queue_t af_url_session_manager_creation_queue;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        af_url_session_manager_creation_queue = dispatch_queue_create(\"com.alamofire.networking.session.manager.creation\", DISPATCH_QUEUE_SERIAL);\n    });\n\n    return af_url_session_manager_creation_queue;\n}\n\nstatic dispatch_queue_t url_session_manager_processing_queue() {\n    static dispatch_queue_t af_url_session_manager_processing_queue;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        af_url_session_manager_processing_queue = dispatch_queue_create(\"com.alamofire.networking.session.manager.processing\", DISPATCH_QUEUE_CONCURRENT);\n    });\n\n    return af_url_session_manager_processing_queue;\n}\n\nstatic dispatch_group_t url_session_manager_completion_group() {\n    static dispatch_group_t af_url_session_manager_completion_group;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        af_url_session_manager_completion_group = dispatch_group_create();\n    });\n\n    return af_url_session_manager_completion_group;\n}\n\nNSString * const AFNetworkingTaskDidResumeNotification = @\"com.alamofire.networking.task.resume\";\nNSString * const AFNetworkingTaskDidCompleteNotification = @\"com.alamofire.networking.task.complete\";\nNSString * const AFNetworkingTaskDidSuspendNotification = @\"com.alamofire.networking.task.suspend\";\nNSString * const AFURLSessionDidInvalidateNotification = @\"com.alamofire.networking.session.invalidate\";\nNSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification = @\"com.alamofire.networking.session.download.file-manager-error\";\n\nNSString * const AFNetworkingTaskDidStartNotification = @\"com.alamofire.networking.task.resume\"; // Deprecated\nNSString * const AFNetworkingTaskDidFinishNotification = @\"com.alamofire.networking.task.complete\"; // Deprecated\n\nNSString * const AFNetworkingTaskDidCompleteSerializedResponseKey = @\"com.alamofire.networking.task.complete.serializedresponse\";\nNSString * const AFNetworkingTaskDidCompleteResponseSerializerKey = @\"com.alamofire.networking.task.complete.responseserializer\";\nNSString * const AFNetworkingTaskDidCompleteResponseDataKey = @\"com.alamofire.networking.complete.finish.responsedata\";\nNSString * const AFNetworkingTaskDidCompleteErrorKey = @\"com.alamofire.networking.task.complete.error\";\nNSString * const AFNetworkingTaskDidCompleteAssetPathKey = @\"com.alamofire.networking.task.complete.assetpath\";\n\nNSString * const AFNetworkingTaskDidFinishSerializedResponseKey = @\"com.alamofire.networking.task.complete.serializedresponse\"; // Deprecated\nNSString * const AFNetworkingTaskDidFinishResponseSerializerKey = @\"com.alamofire.networking.task.complete.responseserializer\"; // Deprecated\nNSString * const AFNetworkingTaskDidFinishResponseDataKey = @\"com.alamofire.networking.complete.finish.responsedata\"; // Deprecated\nNSString * const AFNetworkingTaskDidFinishErrorKey = @\"com.alamofire.networking.task.complete.error\"; // Deprecated\nNSString * const AFNetworkingTaskDidFinishAssetPathKey = @\"com.alamofire.networking.task.complete.assetpath\"; // Deprecated\n\nstatic NSString * const AFURLSessionManagerLockName = @\"com.alamofire.networking.session.manager.lock\";\n\nstatic NSUInteger const AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask = 3;\n\nstatic void * AFTaskStateChangedContext = &AFTaskStateChangedContext;\n\ntypedef void (^AFURLSessionDidBecomeInvalidBlock)(NSURLSession *session, NSError *error);\ntypedef NSURLSessionAuthChallengeDisposition (^AFURLSessionDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential);\n\ntypedef NSURLRequest * (^AFURLSessionTaskWillPerformHTTPRedirectionBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request);\ntypedef NSURLSessionAuthChallengeDisposition (^AFURLSessionTaskDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential);\ntypedef void (^AFURLSessionDidFinishEventsForBackgroundURLSessionBlock)(NSURLSession *session);\n\ntypedef NSInputStream * (^AFURLSessionTaskNeedNewBodyStreamBlock)(NSURLSession *session, NSURLSessionTask *task);\ntypedef void (^AFURLSessionTaskDidSendBodyDataBlock)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend);\ntypedef void (^AFURLSessionTaskDidCompleteBlock)(NSURLSession *session, NSURLSessionTask *task, NSError *error);\n\ntypedef NSURLSessionResponseDisposition (^AFURLSessionDataTaskDidReceiveResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response);\ntypedef void (^AFURLSessionDataTaskDidBecomeDownloadTaskBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask);\ntypedef void (^AFURLSessionDataTaskDidReceiveDataBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data);\ntypedef NSCachedURLResponse * (^AFURLSessionDataTaskWillCacheResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse);\n\ntypedef NSURL * (^AFURLSessionDownloadTaskDidFinishDownloadingBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location);\ntypedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite);\ntypedef void (^AFURLSessionDownloadTaskDidResumeBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes);\n\ntypedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id responseObject, NSError *error);\n\n#pragma mark -\n\n@interface AFURLSessionManagerTaskDelegate : NSObject <NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate>\n@property (nonatomic, weak) AFURLSessionManager *manager;\n@property (nonatomic, strong) NSMutableData *mutableData;\n@property (nonatomic, strong) NSProgress *progress;\n@property (nonatomic, copy) NSURL *downloadFileURL;\n@property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading;\n@property (nonatomic, copy) AFURLSessionTaskCompletionHandler completionHandler;\n@end\n\n@implementation AFURLSessionManagerTaskDelegate\n\n- (instancetype)init {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    self.mutableData = [NSMutableData data];\n\n    self.progress = [NSProgress progressWithTotalUnitCount:0];\n\n    return self;\n}\n\n#pragma mark - NSURLSessionTaskDelegate\n\n- (void)URLSession:(__unused NSURLSession *)session\n              task:(__unused NSURLSessionTask *)task\n   didSendBodyData:(__unused int64_t)bytesSent\n    totalBytesSent:(int64_t)totalBytesSent\ntotalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend\n{\n    self.progress.totalUnitCount = totalBytesExpectedToSend;\n    self.progress.completedUnitCount = totalBytesSent;\n}\n\n- (void)URLSession:(__unused NSURLSession *)session\n              task:(NSURLSessionTask *)task\ndidCompleteWithError:(NSError *)error\n{\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wgnu\"\n    __strong AFURLSessionManager *manager = self.manager;\n\n    __block id responseObject = nil;\n\n    __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];\n    userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer;\n\n    //Performance Improvement from #2672\n    NSData *data = nil;\n    if (self.mutableData) {\n        data = [self.mutableData copy];\n        //We no longer need the reference, so nil it out to gain back some memory.\n        self.mutableData = nil;\n    }\n\n    if (self.downloadFileURL) {\n        userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL;\n    } else if (data) {\n        userInfo[AFNetworkingTaskDidCompleteResponseDataKey] = data;\n    }\n\n    if (error) {\n        userInfo[AFNetworkingTaskDidCompleteErrorKey] = error;\n\n        dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{\n            if (self.completionHandler) {\n                self.completionHandler(task.response, responseObject, error);\n            }\n\n            dispatch_async(dispatch_get_main_queue(), ^{\n                [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo];\n            });\n        });\n    } else {\n        dispatch_async(url_session_manager_processing_queue(), ^{\n            NSError *serializationError = nil;\n            responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:data error:&serializationError];\n\n            if (self.downloadFileURL) {\n                responseObject = self.downloadFileURL;\n            }\n\n            if (responseObject) {\n                userInfo[AFNetworkingTaskDidCompleteSerializedResponseKey] = responseObject;\n            }\n\n            if (serializationError) {\n                userInfo[AFNetworkingTaskDidCompleteErrorKey] = serializationError;\n            }\n\n            dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{\n                if (self.completionHandler) {\n                    self.completionHandler(task.response, responseObject, serializationError);\n                }\n\n                dispatch_async(dispatch_get_main_queue(), ^{\n                    [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo];\n                });\n            });\n        });\n    }\n#pragma clang diagnostic pop\n}\n\n#pragma mark - NSURLSessionDataTaskDelegate\n\n- (void)URLSession:(__unused NSURLSession *)session\n          dataTask:(__unused NSURLSessionDataTask *)dataTask\n    didReceiveData:(NSData *)data\n{\n    [self.mutableData appendData:data];\n}\n\n#pragma mark - NSURLSessionDownloadTaskDelegate\n\n- (void)URLSession:(NSURLSession *)session\n      downloadTask:(NSURLSessionDownloadTask *)downloadTask\ndidFinishDownloadingToURL:(NSURL *)location\n{\n    NSError *fileManagerError = nil;\n    self.downloadFileURL = nil;\n\n    if (self.downloadTaskDidFinishDownloading) {\n        self.downloadFileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location);\n        if (self.downloadFileURL) {\n            [[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError];\n            if (fileManagerError) {\n                [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo];\n            }\n        }\n    }\n}\n\n- (void)URLSession:(__unused NSURLSession *)session\n      downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask\n      didWriteData:(__unused int64_t)bytesWritten\n totalBytesWritten:(int64_t)totalBytesWritten\ntotalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite\n{\n    self.progress.totalUnitCount = totalBytesExpectedToWrite;\n    self.progress.completedUnitCount = totalBytesWritten;\n}\n\n- (void)URLSession:(__unused NSURLSession *)session\n      downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask\n didResumeAtOffset:(int64_t)fileOffset\nexpectedTotalBytes:(int64_t)expectedTotalBytes {\n    self.progress.totalUnitCount = expectedTotalBytes;\n    self.progress.completedUnitCount = fileOffset;\n}\n\n@end\n\n#pragma mark -\n\n/**\n *  A workaround for issues related to key-value observing the `state` of an `NSURLSessionTask`.\n *\n *  See:\n *  - https://github.com/AFNetworking/AFNetworking/issues/1477\n *  - https://github.com/AFNetworking/AFNetworking/issues/2638\n *  - https://github.com/AFNetworking/AFNetworking/pull/2702\n */\n\nstatic inline void af_swizzleSelector(Class class, SEL originalSelector, SEL swizzledSelector) {\n    Method originalMethod = class_getInstanceMethod(class, originalSelector);\n    Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);\n    method_exchangeImplementations(originalMethod, swizzledMethod);\n}\n\nstatic inline BOOL af_addMethod(Class class, SEL selector, Method method) {\n    return class_addMethod(class, selector,  method_getImplementation(method),  method_getTypeEncoding(method));\n}\n\nstatic NSString * const AFNSURLSessionTaskDidResumeNotification  = @\"com.alamofire.networking.nsurlsessiontask.resume\";\nstatic NSString * const AFNSURLSessionTaskDidSuspendNotification = @\"com.alamofire.networking.nsurlsessiontask.suspend\";\n\n@interface _AFURLSessionTaskSwizzling : NSObject\n\n@end\n\n@implementation _AFURLSessionTaskSwizzling\n\n+ (void)load {\n    /**\n     WARNING: Trouble Ahead\n     https://github.com/AFNetworking/AFNetworking/pull/2702\n     */\n\n    if (NSClassFromString(@\"NSURLSessionTask\")) {\n        /**\n         iOS 7 and iOS 8 differ in NSURLSessionTask implementation, which makes the next bit of code a bit tricky.\n         Many Unit Tests have been built to validate as much of this behavior has possible.\n         Here is what we know:\n            - NSURLSessionTasks are implemented with class clusters, meaning the class you request from the API isn't actually the type of class you will get back.\n            - Simply referencing `[NSURLSessionTask class]` will not work. You need to ask an `NSURLSession` to actually create an object, and grab the class from there.\n            - On iOS 7, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `__NSCFURLSessionTask`.\n            - On iOS 8, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `NSURLSessionTask`.\n            - On iOS 7, `__NSCFLocalSessionTask` and `__NSCFURLSessionTask` are the only two classes that have their own implementations of `resume` and `suspend`, and `__NSCFLocalSessionTask` DOES NOT CALL SUPER. This means both classes need to be swizzled.\n            - On iOS 8, `NSURLSessionTask` is the only class that implements `resume` and `suspend`. This means this is the only class that needs to be swizzled.\n            - Because `NSURLSessionTask` is not involved in the class hierarchy for every version of iOS, its easier to add the swizzled methods to a dummy class and manage them there.\n        \n         Some Assumptions:\n            - No implementations of `resume` or `suspend` call super. If this were to change in a future version of iOS, we'd need to handle it.\n            - No background task classes override `resume` or `suspend`\n         \n         The current solution:\n            1) Grab an instance of `__NSCFLocalDataTask` by asking an instance of `NSURLSession` for a data task.\n            2) Grab a pointer to the original implementation of `af_resume`\n            3) Check to see if the current class has an implementation of resume. If so, continue to step 4.\n            4) Grab the super class of the current class.\n            5) Grab a pointer for the current class to the current implementation of `resume`.\n            6) Grab a pointer for the super class to the current implementation of `resume`.\n            7) If the current class implementation of `resume` is not equal to the super class implementation of `resume` AND the current implementation of `resume` is not equal to the original implementation of `af_resume`, THEN swizzle the methods\n            8) Set the current class to the super class, and repeat steps 3-8\n         */\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wnonnull\"\n        NSURLSessionDataTask *localDataTask = [[NSURLSession sessionWithConfiguration:nil] dataTaskWithURL:nil];\n#pragma clang diagnostic pop\n        IMP originalAFResumeIMP = method_getImplementation(class_getInstanceMethod([_AFURLSessionTaskSwizzling class], @selector(af_resume)));\n        Class currentClass = [localDataTask class];\n        \n        while (class_getInstanceMethod(currentClass, @selector(resume))) {\n            Class superClass = [currentClass superclass];\n            IMP classResumeIMP = method_getImplementation(class_getInstanceMethod(currentClass, @selector(resume)));\n            IMP superclassResumeIMP = method_getImplementation(class_getInstanceMethod(superClass, @selector(resume)));\n            if (classResumeIMP != superclassResumeIMP &&\n                originalAFResumeIMP != classResumeIMP) {\n                [self swizzleResumeAndSuspendMethodForClass:currentClass];\n            }\n            currentClass = [currentClass superclass];\n        }\n        \n        [localDataTask cancel];\n    }\n}\n\n+ (void)swizzleResumeAndSuspendMethodForClass:(Class)class {\n    Method afResumeMethod = class_getInstanceMethod(self, @selector(af_resume));\n    Method afSuspendMethod = class_getInstanceMethod(self, @selector(af_suspend));\n    \n    af_addMethod(class, @selector(af_resume), afResumeMethod);\n    af_addMethod(class, @selector(af_suspend), afSuspendMethod);\n    \n    af_swizzleSelector(class, @selector(resume), @selector(af_resume));\n    af_swizzleSelector(class, @selector(suspend), @selector(af_suspend));\n}\n\n- (NSURLSessionTaskState)state {\n    NSAssert(NO, @\"State method should never be called in the actual dummy class\");\n    return NSURLSessionTaskStateCanceling;\n}\n\n- (void)af_resume {\n    NSAssert([self respondsToSelector:@selector(state)], @\"Does not respond to state\");\n    NSURLSessionTaskState state = [self state];\n    [self af_resume];\n    \n    if (state != NSURLSessionTaskStateRunning) {\n        [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidResumeNotification object:self];\n    }\n}\n\n- (void)af_suspend {\n    NSAssert([self respondsToSelector:@selector(state)], @\"Does not respond to state\");\n    NSURLSessionTaskState state = [self state];\n    [self af_suspend];\n    \n    if (state != NSURLSessionTaskStateSuspended) {\n        [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidSuspendNotification object:self];\n    }\n}\n@end\n\n#pragma mark -\n\n@interface AFURLSessionManager ()\n@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration;\n@property (readwrite, nonatomic, strong) NSOperationQueue *operationQueue;\n@property (readwrite, nonatomic, strong) NSURLSession *session;\n@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableTaskDelegatesKeyedByTaskIdentifier;\n@property (readonly, nonatomic, copy) NSString *taskDescriptionForSessionTasks;\n@property (readwrite, nonatomic, strong) NSLock *lock;\n@property (readwrite, nonatomic, copy) AFURLSessionDidBecomeInvalidBlock sessionDidBecomeInvalid;\n@property (readwrite, nonatomic, copy) AFURLSessionDidReceiveAuthenticationChallengeBlock sessionDidReceiveAuthenticationChallenge;\n@property (readwrite, nonatomic, copy) AFURLSessionDidFinishEventsForBackgroundURLSessionBlock didFinishEventsForBackgroundURLSession;\n@property (readwrite, nonatomic, copy) AFURLSessionTaskWillPerformHTTPRedirectionBlock taskWillPerformHTTPRedirection;\n@property (readwrite, nonatomic, copy) AFURLSessionTaskDidReceiveAuthenticationChallengeBlock taskDidReceiveAuthenticationChallenge;\n@property (readwrite, nonatomic, copy) AFURLSessionTaskNeedNewBodyStreamBlock taskNeedNewBodyStream;\n@property (readwrite, nonatomic, copy) AFURLSessionTaskDidSendBodyDataBlock taskDidSendBodyData;\n@property (readwrite, nonatomic, copy) AFURLSessionTaskDidCompleteBlock taskDidComplete;\n@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveResponseBlock dataTaskDidReceiveResponse;\n@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidBecomeDownloadTaskBlock dataTaskDidBecomeDownloadTask;\n@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveDataBlock dataTaskDidReceiveData;\n@property (readwrite, nonatomic, copy) AFURLSessionDataTaskWillCacheResponseBlock dataTaskWillCacheResponse;\n@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading;\n@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidWriteDataBlock downloadTaskDidWriteData;\n@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidResumeBlock downloadTaskDidResume;\n@end\n\n@implementation AFURLSessionManager\n\n- (instancetype)init {\n    return [self initWithSessionConfiguration:nil];\n}\n\n- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration {\n    self = [super init];\n    if (!self) {\n        return nil;\n    }\n\n    if (!configuration) {\n        configuration = [NSURLSessionConfiguration defaultSessionConfiguration];\n    }\n\n    self.sessionConfiguration = configuration;\n\n    self.operationQueue = [[NSOperationQueue alloc] init];\n    self.operationQueue.maxConcurrentOperationCount = 1;\n\n    self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue];\n\n    self.responseSerializer = [AFJSONResponseSerializer serializer];\n\n    self.securityPolicy = [AFSecurityPolicy defaultPolicy];\n\n    self.reachabilityManager = [AFNetworkReachabilityManager sharedManager];\n\n    self.mutableTaskDelegatesKeyedByTaskIdentifier = [[NSMutableDictionary alloc] init];\n\n    self.lock = [[NSLock alloc] init];\n    self.lock.name = AFURLSessionManagerLockName;\n\n    [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {\n        for (NSURLSessionDataTask *task in dataTasks) {\n            [self addDelegateForDataTask:task completionHandler:nil];\n        }\n\n        for (NSURLSessionUploadTask *uploadTask in uploadTasks) {\n            [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil];\n        }\n\n        for (NSURLSessionDownloadTask *downloadTask in downloadTasks) {\n            [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil];\n        }\n    }];\n\n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidResume:) name:AFNSURLSessionTaskDidResumeNotification object:nil];\n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidSuspend:) name:AFNSURLSessionTaskDidSuspendNotification object:nil];\n\n    return self;\n}\n\n- (void)dealloc {\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n#pragma mark -\n\n- (NSString *)taskDescriptionForSessionTasks {\n    return [NSString stringWithFormat:@\"%p\", self];\n}\n\n- (void)taskDidResume:(NSNotification *)notification {\n    NSURLSessionTask *task = notification.object;\n    if ([task respondsToSelector:@selector(taskDescription)]) {\n        if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidResumeNotification object:task];\n            });\n        }\n    }\n}\n\n- (void)taskDidSuspend:(NSNotification *)notification {\n    NSURLSessionTask *task = notification.object;\n    if ([task respondsToSelector:@selector(taskDescription)]) {\n        if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidSuspendNotification object:task];\n            });\n        }\n    }\n}\n\n#pragma mark -\n\n- (AFURLSessionManagerTaskDelegate *)delegateForTask:(NSURLSessionTask *)task {\n    NSParameterAssert(task);\n\n    AFURLSessionManagerTaskDelegate *delegate = nil;\n    [self.lock lock];\n    delegate = self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)];\n    [self.lock unlock];\n\n    return delegate;\n}\n\n- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate\n            forTask:(NSURLSessionTask *)task\n{\n    NSParameterAssert(task);\n    NSParameterAssert(delegate);\n\n    [self.lock lock];\n    self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate;\n    [self.lock unlock];\n}\n\n- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask\n             completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler\n{\n    AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init];\n    delegate.manager = self;\n    delegate.completionHandler = completionHandler;\n\n    dataTask.taskDescription = self.taskDescriptionForSessionTasks;\n    [self setDelegate:delegate forTask:dataTask];\n}\n\n- (void)addDelegateForUploadTask:(NSURLSessionUploadTask *)uploadTask\n                        progress:(NSProgress * __autoreleasing *)progress\n               completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler\n{\n    AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init];\n    delegate.manager = self;\n    delegate.completionHandler = completionHandler;\n\n    int64_t totalUnitCount = uploadTask.countOfBytesExpectedToSend;\n    if(totalUnitCount == NSURLSessionTransferSizeUnknown) {\n        NSString *contentLength = [uploadTask.originalRequest valueForHTTPHeaderField:@\"Content-Length\"];\n        if(contentLength) {\n            totalUnitCount = (int64_t)[contentLength longLongValue];\n        }\n    }\n\n    if (delegate.progress) {\n        delegate.progress.totalUnitCount = totalUnitCount;\n    } else {\n        delegate.progress = [NSProgress progressWithTotalUnitCount:totalUnitCount];\n    }\n\n    delegate.progress.pausingHandler = ^{\n        [uploadTask suspend];\n    };\n    delegate.progress.cancellationHandler = ^{\n        [uploadTask cancel];\n    };\n\n    if (progress) {\n        *progress = delegate.progress;\n    }\n\n    uploadTask.taskDescription = self.taskDescriptionForSessionTasks;\n\n    [self setDelegate:delegate forTask:uploadTask];\n}\n\n- (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTask\n                          progress:(NSProgress * __autoreleasing *)progress\n                       destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination\n                 completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler\n{\n    AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init];\n    delegate.manager = self;\n    delegate.completionHandler = completionHandler;\n\n    if (destination) {\n        delegate.downloadTaskDidFinishDownloading = ^NSURL * (NSURLSession * __unused session, NSURLSessionDownloadTask *task, NSURL *location) {\n            return destination(location, task.response);\n        };\n    }\n\n    if (progress) {\n        *progress = delegate.progress;\n    }\n\n    downloadTask.taskDescription = self.taskDescriptionForSessionTasks;\n\n    [self setDelegate:delegate forTask:downloadTask];\n}\n\n- (void)removeDelegateForTask:(NSURLSessionTask *)task {\n    NSParameterAssert(task);\n\n    [self.lock lock];\n    [self.mutableTaskDelegatesKeyedByTaskIdentifier removeObjectForKey:@(task.taskIdentifier)];\n    [self.lock unlock];\n}\n\n- (void)removeAllDelegates {\n    [self.lock lock];\n    [self.mutableTaskDelegatesKeyedByTaskIdentifier removeAllObjects];\n    [self.lock unlock];\n}\n\n#pragma mark -\n\n- (NSArray *)tasksForKeyPath:(NSString *)keyPath {\n    __block NSArray *tasks = nil;\n    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);\n    [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {\n        if ([keyPath isEqualToString:NSStringFromSelector(@selector(dataTasks))]) {\n            tasks = dataTasks;\n        } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(uploadTasks))]) {\n            tasks = uploadTasks;\n        } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(downloadTasks))]) {\n            tasks = downloadTasks;\n        } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(tasks))]) {\n            tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@\"@unionOfArrays.self\"];\n        }\n\n        dispatch_semaphore_signal(semaphore);\n    }];\n\n    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);\n\n    return tasks;\n}\n\n- (NSArray *)tasks {\n    return [self tasksForKeyPath:NSStringFromSelector(_cmd)];\n}\n\n- (NSArray *)dataTasks {\n    return [self tasksForKeyPath:NSStringFromSelector(_cmd)];\n}\n\n- (NSArray *)uploadTasks {\n    return [self tasksForKeyPath:NSStringFromSelector(_cmd)];\n}\n\n- (NSArray *)downloadTasks {\n    return [self tasksForKeyPath:NSStringFromSelector(_cmd)];\n}\n\n#pragma mark -\n\n- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks {\n    dispatch_async(dispatch_get_main_queue(), ^{\n        if (cancelPendingTasks) {\n            [self.session invalidateAndCancel];\n        } else {\n            [self.session finishTasksAndInvalidate];\n        }\n    });\n}\n\n#pragma mark -\n\n- (void)setResponseSerializer:(id <AFURLResponseSerialization>)responseSerializer {\n    NSParameterAssert(responseSerializer);\n\n    _responseSerializer = responseSerializer;\n}\n\n#pragma mark -\n\n- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request\n                            completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler\n{\n    __block NSURLSessionDataTask *dataTask = nil;\n    dispatch_sync(url_session_manager_creation_queue(), ^{\n        dataTask = [self.session dataTaskWithRequest:request];\n    });\n\n    [self addDelegateForDataTask:dataTask completionHandler:completionHandler];\n\n    return dataTask;\n}\n\n#pragma mark -\n\n- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request\n                                         fromFile:(NSURL *)fileURL\n                                         progress:(NSProgress * __autoreleasing *)progress\n                                completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler\n{\n    __block NSURLSessionUploadTask *uploadTask = nil;\n    dispatch_sync(url_session_manager_creation_queue(), ^{\n        uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL];\n    });\n\n    if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) {\n        for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask; attempts++) {\n            uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL];\n        }\n    }\n\n    [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler];\n\n    return uploadTask;\n}\n\n- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request\n                                         fromData:(NSData *)bodyData\n                                         progress:(NSProgress * __autoreleasing *)progress\n                                completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler\n{\n    __block NSURLSessionUploadTask *uploadTask = nil;\n    dispatch_sync(url_session_manager_creation_queue(), ^{\n        uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData];\n    });\n\n    [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler];\n\n    return uploadTask;\n}\n\n- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request\n                                                 progress:(NSProgress * __autoreleasing *)progress\n                                        completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler\n{\n    __block NSURLSessionUploadTask *uploadTask = nil;\n    dispatch_sync(url_session_manager_creation_queue(), ^{\n        uploadTask = [self.session uploadTaskWithStreamedRequest:request];\n    });\n\n    [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler];\n\n    return uploadTask;\n}\n\n#pragma mark -\n\n- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request\n                                             progress:(NSProgress * __autoreleasing *)progress\n                                          destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination\n                                    completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler\n{\n    __block NSURLSessionDownloadTask *downloadTask = nil;\n    dispatch_sync(url_session_manager_creation_queue(), ^{\n        downloadTask = [self.session downloadTaskWithRequest:request];\n    });\n\n    [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler];\n\n    return downloadTask;\n}\n\n- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData\n                                                progress:(NSProgress * __autoreleasing *)progress\n                                             destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination\n                                       completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler\n{\n    __block NSURLSessionDownloadTask *downloadTask = nil;\n    dispatch_sync(url_session_manager_creation_queue(), ^{\n        downloadTask = [self.session downloadTaskWithResumeData:resumeData];\n    });\n\n    [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler];\n\n    return downloadTask;\n}\n\n#pragma mark -\n\n- (NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask {\n    return [[self delegateForTask:uploadTask] progress];\n}\n\n- (NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask {\n    return [[self delegateForTask:downloadTask] progress];\n}\n\n#pragma mark -\n\n- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block {\n    self.sessionDidBecomeInvalid = block;\n}\n\n- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block {\n    self.sessionDidReceiveAuthenticationChallenge = block;\n}\n\n- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block {\n    self.didFinishEventsForBackgroundURLSession = block;\n}\n\n#pragma mark -\n\n- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block {\n    self.taskNeedNewBodyStream = block;\n}\n\n- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block {\n    self.taskWillPerformHTTPRedirection = block;\n}\n\n- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block {\n    self.taskDidReceiveAuthenticationChallenge = block;\n}\n\n- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block {\n    self.taskDidSendBodyData = block;\n}\n\n- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block {\n    self.taskDidComplete = block;\n}\n\n#pragma mark -\n\n- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block {\n    self.dataTaskDidReceiveResponse = block;\n}\n\n- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block {\n    self.dataTaskDidBecomeDownloadTask = block;\n}\n\n- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block {\n    self.dataTaskDidReceiveData = block;\n}\n\n- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block {\n    self.dataTaskWillCacheResponse = block;\n}\n\n#pragma mark -\n\n- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block {\n    self.downloadTaskDidFinishDownloading = block;\n}\n\n- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block {\n    self.downloadTaskDidWriteData = block;\n}\n\n- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block {\n    self.downloadTaskDidResume = block;\n}\n\n#pragma mark - NSObject\n\n- (NSString *)description {\n    return [NSString stringWithFormat:@\"<%@: %p, session: %@, operationQueue: %@>\", NSStringFromClass([self class]), self, self.session, self.operationQueue];\n}\n\n- (BOOL)respondsToSelector:(SEL)selector {\n    if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) {\n        return self.taskWillPerformHTTPRedirection != nil;\n    } else if (selector == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) {\n        return self.dataTaskDidReceiveResponse != nil;\n    } else if (selector == @selector(URLSession:dataTask:willCacheResponse:completionHandler:)) {\n        return self.dataTaskWillCacheResponse != nil;\n    } else if (selector == @selector(URLSessionDidFinishEventsForBackgroundURLSession:)) {\n        return self.didFinishEventsForBackgroundURLSession != nil;\n    }\n\n    return [[self class] instancesRespondToSelector:selector];\n}\n\n#pragma mark - NSURLSessionDelegate\n\n- (void)URLSession:(NSURLSession *)session\ndidBecomeInvalidWithError:(NSError *)error\n{\n    if (self.sessionDidBecomeInvalid) {\n        self.sessionDidBecomeInvalid(session, error);\n    }\n\n    [self removeAllDelegates];\n    [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDidInvalidateNotification object:session];\n}\n\n- (void)URLSession:(NSURLSession *)session\ndidReceiveChallenge:(NSURLAuthenticationChallenge *)challenge\n completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler\n{\n    NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;\n    __block NSURLCredential *credential = nil;\n\n    if (self.sessionDidReceiveAuthenticationChallenge) {\n        disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential);\n    } else {\n        if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {\n            if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) {\n                credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];\n                if (credential) {\n                    disposition = NSURLSessionAuthChallengeUseCredential;\n                } else {\n                    disposition = NSURLSessionAuthChallengePerformDefaultHandling;\n                }\n            } else {\n                disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;\n            }\n        } else {\n            disposition = NSURLSessionAuthChallengePerformDefaultHandling;\n        }\n    }\n\n    if (completionHandler) {\n        completionHandler(disposition, credential);\n    }\n}\n\n#pragma mark - NSURLSessionTaskDelegate\n\n- (void)URLSession:(NSURLSession *)session\n              task:(NSURLSessionTask *)task\nwillPerformHTTPRedirection:(NSHTTPURLResponse *)response\n        newRequest:(NSURLRequest *)request\n completionHandler:(void (^)(NSURLRequest *))completionHandler\n{\n    NSURLRequest *redirectRequest = request;\n\n    if (self.taskWillPerformHTTPRedirection) {\n        redirectRequest = self.taskWillPerformHTTPRedirection(session, task, response, request);\n    }\n\n    if (completionHandler) {\n        completionHandler(redirectRequest);\n    }\n}\n\n- (void)URLSession:(NSURLSession *)session\n              task:(NSURLSessionTask *)task\ndidReceiveChallenge:(NSURLAuthenticationChallenge *)challenge\n completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler\n{\n    NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;\n    __block NSURLCredential *credential = nil;\n\n    if (self.taskDidReceiveAuthenticationChallenge) {\n        disposition = self.taskDidReceiveAuthenticationChallenge(session, task, challenge, &credential);\n    } else {\n        if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {\n            if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) {\n                disposition = NSURLSessionAuthChallengeUseCredential;\n                credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];\n            } else {\n                disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;\n            }\n        } else {\n            disposition = NSURLSessionAuthChallengePerformDefaultHandling;\n        }\n    }\n\n    if (completionHandler) {\n        completionHandler(disposition, credential);\n    }\n}\n\n- (void)URLSession:(NSURLSession *)session\n              task:(NSURLSessionTask *)task\n needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler\n{\n    NSInputStream *inputStream = nil;\n\n    if (self.taskNeedNewBodyStream) {\n        inputStream = self.taskNeedNewBodyStream(session, task);\n    } else if (task.originalRequest.HTTPBodyStream && [task.originalRequest.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) {\n        inputStream = [task.originalRequest.HTTPBodyStream copy];\n    }\n\n    if (completionHandler) {\n        completionHandler(inputStream);\n    }\n}\n\n- (void)URLSession:(NSURLSession *)session\n              task:(NSURLSessionTask *)task\n   didSendBodyData:(int64_t)bytesSent\n    totalBytesSent:(int64_t)totalBytesSent\ntotalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend\n{\n\n    int64_t totalUnitCount = totalBytesExpectedToSend;\n    if(totalUnitCount == NSURLSessionTransferSizeUnknown) {\n        NSString *contentLength = [task.originalRequest valueForHTTPHeaderField:@\"Content-Length\"];\n        if(contentLength) {\n            totalUnitCount = (int64_t) [contentLength longLongValue];\n        }\n    }\n\n    AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task];\n    [delegate URLSession:session task:task didSendBodyData:bytesSent totalBytesSent:totalBytesSent totalBytesExpectedToSend:totalUnitCount];\n\n    if (self.taskDidSendBodyData) {\n        self.taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalUnitCount);\n    }\n}\n\n- (void)URLSession:(NSURLSession *)session\n              task:(NSURLSessionTask *)task\ndidCompleteWithError:(NSError *)error\n{\n    AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task];\n\n    // delegate may be nil when completing a task in the background\n    if (delegate) {\n        [delegate URLSession:session task:task didCompleteWithError:error];\n\n        [self removeDelegateForTask:task];\n    }\n\n    if (self.taskDidComplete) {\n        self.taskDidComplete(session, task, error);\n    }\n\n}\n\n#pragma mark - NSURLSessionDataDelegate\n\n- (void)URLSession:(NSURLSession *)session\n          dataTask:(NSURLSessionDataTask *)dataTask\ndidReceiveResponse:(NSURLResponse *)response\n completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler\n{\n    NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow;\n\n    if (self.dataTaskDidReceiveResponse) {\n        disposition = self.dataTaskDidReceiveResponse(session, dataTask, response);\n    }\n\n    if (completionHandler) {\n        completionHandler(disposition);\n    }\n}\n\n- (void)URLSession:(NSURLSession *)session\n          dataTask:(NSURLSessionDataTask *)dataTask\ndidBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask\n{\n    AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask];\n    if (delegate) {\n        [self removeDelegateForTask:dataTask];\n        [self setDelegate:delegate forTask:downloadTask];\n    }\n\n    if (self.dataTaskDidBecomeDownloadTask) {\n        self.dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask);\n    }\n}\n\n- (void)URLSession:(NSURLSession *)session\n          dataTask:(NSURLSessionDataTask *)dataTask\n    didReceiveData:(NSData *)data\n{\n    AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask];\n    [delegate URLSession:session dataTask:dataTask didReceiveData:data];\n\n    if (self.dataTaskDidReceiveData) {\n        self.dataTaskDidReceiveData(session, dataTask, data);\n    }\n}\n\n- (void)URLSession:(NSURLSession *)session\n          dataTask:(NSURLSessionDataTask *)dataTask\n willCacheResponse:(NSCachedURLResponse *)proposedResponse\n completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler\n{\n    NSCachedURLResponse *cachedResponse = proposedResponse;\n\n    if (self.dataTaskWillCacheResponse) {\n        cachedResponse = self.dataTaskWillCacheResponse(session, dataTask, proposedResponse);\n    }\n\n    if (completionHandler) {\n        completionHandler(cachedResponse);\n    }\n}\n\n- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session {\n    if (self.didFinishEventsForBackgroundURLSession) {\n        dispatch_async(dispatch_get_main_queue(), ^{\n            self.didFinishEventsForBackgroundURLSession(session);\n        });\n    }\n}\n\n#pragma mark - NSURLSessionDownloadDelegate\n\n- (void)URLSession:(NSURLSession *)session\n      downloadTask:(NSURLSessionDownloadTask *)downloadTask\ndidFinishDownloadingToURL:(NSURL *)location\n{\n    AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask];\n    if (self.downloadTaskDidFinishDownloading) {\n        NSURL *fileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location);\n        if (fileURL) {\n            delegate.downloadFileURL = fileURL;\n            NSError *error = nil;\n            [[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error];\n            if (error) {\n                [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo];\n            }\n\n            return;\n        }\n    }\n\n    if (delegate) {\n        [delegate URLSession:session downloadTask:downloadTask didFinishDownloadingToURL:location];\n    }\n}\n\n- (void)URLSession:(NSURLSession *)session\n      downloadTask:(NSURLSessionDownloadTask *)downloadTask\n      didWriteData:(int64_t)bytesWritten\n totalBytesWritten:(int64_t)totalBytesWritten\ntotalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite\n{\n    AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask];\n    [delegate URLSession:session downloadTask:downloadTask didWriteData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite];\n\n    if (self.downloadTaskDidWriteData) {\n        self.downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);\n    }\n}\n\n- (void)URLSession:(NSURLSession *)session\n      downloadTask:(NSURLSessionDownloadTask *)downloadTask\n didResumeAtOffset:(int64_t)fileOffset\nexpectedTotalBytes:(int64_t)expectedTotalBytes\n{\n    AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask];\n    [delegate URLSession:session downloadTask:downloadTask didResumeAtOffset:fileOffset expectedTotalBytes:expectedTotalBytes];\n\n    if (self.downloadTaskDidResume) {\n        self.downloadTaskDidResume(session, downloadTask, fileOffset, expectedTotalBytes);\n    }\n}\n\n#pragma mark - NSSecureCoding\n\n+ (BOOL)supportsSecureCoding {\n    return YES;\n}\n\n- (id)initWithCoder:(NSCoder *)decoder {\n    NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@\"sessionConfiguration\"];\n\n    self = [self initWithSessionConfiguration:configuration];\n    if (!self) {\n        return nil;\n    }\n\n    return self;\n}\n\n- (void)encodeWithCoder:(NSCoder *)coder {\n    [coder encodeObject:self.session.configuration forKey:@\"sessionConfiguration\"];\n}\n\n#pragma mark - NSCopying\n\n- (id)copyWithZone:(NSZone *)zone {\n    return [[[self class] allocWithZone:zone] initWithSessionConfiguration:self.session.configuration];\n}\n\n@end\n\n#endif\n"
  },
  {
    "path": "shakefun/shakefun/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <CoreData/CoreData.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;\n@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;\n@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;\n\n- (void)saveContext;\n- (NSURL *)applicationDocumentsDirectory;\n\n\n@end\n\n"
  },
  {
    "path": "shakefun/shakefun/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n#import \"ViewController.h\"\n#import \"CoreData+MagicalRecord.h\"\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    // Override point for customization after application launch.\n    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\n    [MagicalRecord setupAutoMigratingCoreDataStack];\n    \n    ViewController *rootview = [[UIStoryboard storyboardWithName:@\"Main\" bundle:nil] instantiateViewControllerWithIdentifier:@\"ViewController\"];\n    UINavigationController *naviController = [[UINavigationController alloc] initWithRootViewController:rootview];\n    self.window.rootViewController = naviController;\n     [self.window makeKeyAndVisible];\n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    // Saves changes in the application's managed object context before the application terminates.\n    [self saveContext];\n}\n\n#pragma mark - Core Data stack\n\n@synthesize managedObjectContext = _managedObjectContext;\n@synthesize managedObjectModel = _managedObjectModel;\n@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;\n\n- (NSURL *)applicationDocumentsDirectory {\n    // The directory the application uses to store the Core Data store file. This code uses a directory named \"zm.shakefun\" in the application's documents directory.\n    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];\n}\n\n- (NSManagedObjectModel *)managedObjectModel {\n    // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.\n    if (_managedObjectModel != nil) {\n        return _managedObjectModel;\n    }\n    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@\"shakefun\" withExtension:@\"momd\"];\n    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];\n    return _managedObjectModel;\n}\n\n- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {\n    // The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it.\n    if (_persistentStoreCoordinator != nil) {\n        return _persistentStoreCoordinator;\n    }\n    \n    // Create the coordinator and store\n    \n    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];\n    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@\"shakefun.sqlite\"];\n    NSError *error = nil;\n    NSString *failureReason = @\"There was an error creating or loading the application's saved data.\";\n    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {\n        // Report any error we got.\n        NSMutableDictionary *dict = [NSMutableDictionary dictionary];\n        dict[NSLocalizedDescriptionKey] = @\"Failed to initialize the application's saved data\";\n        dict[NSLocalizedFailureReasonErrorKey] = failureReason;\n        dict[NSUnderlyingErrorKey] = error;\n        error = [NSError errorWithDomain:@\"YOUR_ERROR_DOMAIN\" code:9999 userInfo:dict];\n        // Replace this with code to handle the error appropriately.\n        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.\n        NSLog(@\"Unresolved error %@, %@\", error, [error userInfo]);\n        abort();\n    }\n    \n    return _persistentStoreCoordinator;\n}\n\n\n- (NSManagedObjectContext *)managedObjectContext {\n    // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)\n    if (_managedObjectContext != nil) {\n        return _managedObjectContext;\n    }\n    \n    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];\n    if (!coordinator) {\n        return nil;\n    }\n    _managedObjectContext = [[NSManagedObjectContext alloc] init];\n    [_managedObjectContext setPersistentStoreCoordinator:coordinator];\n    return _managedObjectContext;\n}\n\n#pragma mark - Core Data Saving support\n\n- (void)saveContext {\n    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;\n    if (managedObjectContext != nil) {\n        NSError *error = nil;\n        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {\n            // Replace this implementation with code to handle the error appropriately.\n            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.\n            NSLog(@\"Unresolved error %@, %@\", error, [error userInfo]);\n            abort();\n        }\n    }\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/Base.lproj/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6214\" systemVersion=\"14A314h\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6207\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"  Copyright (c) 2015年 zhangmin. All rights reserved.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"shakefun\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n                    <rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\"/>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "shakefun/shakefun/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"7706\" systemVersion=\"14F27\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"7703\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"ufC-wZ-h7g\">\n            <objects>\n                <viewController storyboardIdentifier=\"ViewController\" id=\"vXZ-lx-hvc\" customClass=\"ViewController\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"kh9-bI-dsS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" id=\"ynF-DJ-bSt\" userLabel=\"ViewTop\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"30\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" id=\"uWV-K9-UKX\" userLabel=\"ViewBottom\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"530\" width=\"320\" height=\"38\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\"/>\n                                <subviews>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"Klk-w9-yP4\" userLabel=\"Collect\">\n                                        <rect key=\"frame\" x=\"254\" y=\"4\" width=\"66\" height=\"30\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <state key=\"normal\" title=\"Collect\">\n                                            <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                        </state>\n                                        <connections>\n                                            <action selector=\"buttonCollectToggle:\" destination=\"vXZ-lx-hvc\" eventType=\"touchUpInside\" id=\"R6u-wf-dmu\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"4nf-1u-nFM\">\n                                        <rect key=\"frame\" x=\"137\" y=\"4\" width=\"46\" height=\"30\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <state key=\"normal\" title=\"Shake\">\n                                            <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                        </state>\n                                        <connections>\n                                            <action selector=\"buttonNextToggle:\" destination=\"vXZ-lx-hvc\" eventType=\"touchUpInside\" id=\"AHo-tQ-DjH\"/>\n                                        </connections>\n                                    </button>\n                                </subviews>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            </view>\n                            <webView contentMode=\"scaleToFill\" id=\"a0S-cW-yEW\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"30\" width=\"320\" height=\"500\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                <connections>\n                                    <outlet property=\"delegate\" destination=\"vXZ-lx-hvc\" id=\"73c-Z5-iap\"/>\n                                </connections>\n                            </webView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"webViewBrowser\" destination=\"a0S-cW-yEW\" id=\"cQC-Zs-K1Y\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"x5A-6p-PRh\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"161\" y=\"368\"/>\n        </scene>\n        <!--Collect View Controller-->\n        <scene sceneID=\"9na-55-40K\">\n            <objects>\n                <viewController storyboardIdentifier=\"CollectViewController\" id=\"00L-Le-gpr\" customClass=\"CollectViewController\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"b4O-wh-lzr\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" id=\"Usq-70-flj\" userLabel=\"ViewTop\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"64\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" id=\"dMu-kg-QfQ\" userLabel=\"ViewBody\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"320\" height=\"417\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                <subviews>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"dmz-Re-yIW\">\n                                        <rect key=\"frame\" x=\"195\" y=\"0.0\" width=\"46\" height=\"30\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <state key=\"normal\" title=\"start\">\n                                            <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                        </state>\n                                        <connections>\n                                            <action selector=\"buttonStartCollectToggle:\" destination=\"00L-Le-gpr\" eventType=\"touchUpInside\" id=\"2aj-XJ-zqQ\"/>\n                                        </connections>\n                                    </button>\n                                    <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" text=\"1\" borderStyle=\"roundedRect\" minimumFontSize=\"17\" id=\"7pq-ry-xBY\">\n                                        <rect key=\"frame\" x=\"26\" y=\"1\" width=\"97\" height=\"30\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                        <textInputTraits key=\"textInputTraits\"/>\n                                        <connections>\n                                            <outlet property=\"delegate\" destination=\"00L-Le-gpr\" id=\"iBa-zi-vd2\"/>\n                                        </connections>\n                                    </textField>\n                                </subviews>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            </view>\n                            <view contentMode=\"scaleToFill\" id=\"vBm-uf-BAd\" userLabel=\"ViewBottom\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"107\" width=\"320\" height=\"453\"/>\n                                <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                <subviews>\n                                    <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" id=\"jjr-A5-z0f\">\n                                        <rect key=\"frame\" x=\"4\" y=\"0.0\" width=\"312\" height=\"453\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                        <string key=\"text\">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                                        <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\"/>\n                                    </textView>\n                                </subviews>\n                                <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"textViewLogInfo\" destination=\"jjr-A5-z0f\" id=\"OIJ-dz-TRs\"/>\n                        <outlet property=\"textfieldPageNum\" destination=\"7pq-ry-xBY\" id=\"bqH-vz-b6v\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"jkl-TA-IWk\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"499\" y=\"368\"/>\n        </scene>\n    </scenes>\n    <simulatedMetricsContainer key=\"defaultSimulatedMetrics\">\n        <simulatedStatusBarMetrics key=\"statusBar\"/>\n        <simulatedOrientationMetrics key=\"orientation\"/>\n        <simulatedScreenMetrics key=\"destination\" type=\"retina4\"/>\n    </simulatedMetricsContainer>\n</document>\n"
  },
  {
    "path": "shakefun/shakefun/CollectViewController.h",
    "content": "//\n//  CollectViewController.h\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#ifndef shakefun_CollectViewController_h\n#define shakefun_CollectViewController_h\n#import <UIKit/UIKit.h>\n\n@interface CollectViewController : UIViewController <UITextFieldDelegate>\n{\n    \n}\n- (IBAction)buttonStartCollectToggle:(id)sender;\n@property (weak, nonatomic) IBOutlet UITextView *textViewLogInfo;\n@property (weak, nonatomic) IBOutlet UITextField *textfieldPageNum;\n\n@end\n#endif\n"
  },
  {
    "path": "shakefun/shakefun/CollectViewController.m",
    "content": "//\n//  CollectViewController.m\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"CollectViewController.h\"\n#import \"URLEntity.h\"\n#import \"ViewController.h\"\n#import \"AFNetworking.h\"\n\n@implementation CollectViewController \n{\n    \n}\n-(void)viewDidLoad\n{\n    [super viewDidLoad];\n    [self.navigationController setNavigationBarHidden:NO animated:YES];\n    self.textViewLogInfo.text = @\"\";\n}\n\n- (IBAction)buttonStartCollectToggle:(id)sender {\n    //http://www.hao123.com/gaoxiao?pn=2\n    \n    [self.view endEditing:YES];\n    \n    if (self.textfieldPageNum.text.length <= 0) {\n        return;\n    }\n    NSInteger page = [self.textfieldPageNum.text integerValue];\n    NSString *pageurl = [NSString stringWithFormat:@\"http://www.hao123.com/gaoxiao?pn=%ld\", (long)page];\n    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];\n    manager.responseSerializer = [AFHTTPResponseSerializer serializer];\n    \n    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@\"text/html\"];\n    //发送请求\n    [manager POST:pageurl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {\n        NSString *result = [[NSString alloc]initWithData:operation.responseData encoding:NSUTF8StringEncoding];\n        \n        NSArray *urls = [result componentsSeparatedFromString:@\"<img selector=\\\"pic\\\" img-src=\\\"\" toString:@\"\\\" src=\"];\n        int i = 1;\n        NSString *display = @\"\";\n        for (NSString *url in urls) {\n            display = [NSString stringWithFormat:@\"result %d:%@\", i++, url];\n            dispatch_async(dispatch_get_main_queue(),^{\n                self.textViewLogInfo.text = [self.textViewLogInfo.text stringByAppendingString:display];\n            });\n            \n            URLEntity *r = [URLEntity MR_findFirstByAttribute:@\"filename\" withValue:[url lastPathComponent]];;\n            if (!r) {\n                r = [URLEntity MR_createEntity];\n                r.filename = [url lastPathComponent];\n                r.fullurl = url;\n            }\n        }\n        [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];\n        \n        [[NSNotificationCenter defaultCenter] postNotificationName:@\"shakefun_reload_urls\" object:nil];\n        \n    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {\n        NSLog(@\"error:%@\", error);\n    }];\n    \n    \n\n}\n-(BOOL)textFieldShouldReturn:(UITextField *)textField\n{\n    [textField resignFirstResponder];\n    return YES;\n}\n\n@end"
  },
  {
    "path": "shakefun/shakefun/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "shakefun/shakefun/Images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "shakefun/shakefun/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>zm.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>NSMainNibFile</key>\n\t<string>LaunchScreen</string>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h",
    "content": "//\n//  MagicalImportFunctions.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n\nNSDate * adjustDateForDST(NSDate *date);\nNSDate * dateFromString(NSString *value, NSString *format);\nNSNumber * numberFromString(NSString *value);\nNSString * attributeNameFromString(NSString *value);\nNSString * primaryKeyNameFromString(NSString *value);\n\n#if TARGET_OS_IPHONE\n#import <UIKit/UIKit.h>\nUIColor * UIColorFromString(NSString *serializedColor);\n\n#else\n#import <AppKit/AppKit.h>\nNSColor * NSColorFromString(NSString *serializedColor);\n\n#endif\nextern id (*colorFromString)(NSString *);\n\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/MagicalImportFunctions.m",
    "content": "//\n//  MagicalImportFunctions.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalImportFunctions.h\"\n\n\n#pragma mark - Data import helper functions\n\nNSString * attributeNameFromString(NSString *value)\n{\n    NSString *firstCharacter = [[value substringToIndex:1] capitalizedString];\n    return [firstCharacter stringByAppendingString:[value substringFromIndex:1]];\n}\n\nNSString * primaryKeyNameFromString(NSString *value)\n{\n    NSString *firstCharacter = [[value substringToIndex:1] lowercaseString];\n    return [firstCharacter stringByAppendingFormat:@\"%@ID\", [value substringFromIndex:1]];\n}\n\nNSDate * adjustDateForDST(NSDate *date)\n{\n    NSTimeInterval dstOffset = [[NSTimeZone localTimeZone] daylightSavingTimeOffsetForDate:date];\n    NSDate *actualDate = [date dateByAddingTimeInterval:dstOffset];\n    \n    return actualDate;\n}\n\nNSDate * dateFromString(NSString *value, NSString *format)\n{\n    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];\n    [formatter setTimeZone:[NSTimeZone localTimeZone]];\n    [formatter setLocale:[NSLocale currentLocale]];\n    [formatter setDateFormat:format];\n    \n    NSDate *parsedDate = [formatter dateFromString:value];\n    \n    return parsedDate;\n}\n\nNSNumber * numberFromString(NSString *value) {\n    return [NSNumber numberWithDouble:[value doubleValue]];\n}\n\nNSInteger* newColorComponentsFromString(NSString *serializedColor);\nNSInteger* newColorComponentsFromString(NSString *serializedColor)\n{\n    NSScanner *colorScanner = [NSScanner scannerWithString:serializedColor];\n    NSString *colorType;\n    [colorScanner scanUpToString:@\"(\" intoString:&colorType];\n    \n    NSInteger *componentValues = malloc(4 * sizeof(NSInteger));\n    if ([colorType hasPrefix:@\"rgba\"])\n    {\n        NSCharacterSet *rgbaCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@\"(,)\"];\n        \n        NSInteger *componentValue = componentValues;\n        while (![colorScanner isAtEnd]) \n        {\n            [colorScanner scanCharactersFromSet:rgbaCharacterSet intoString:nil];\n            [colorScanner scanInteger:componentValue];\n            componentValue++;\n        }\n    }\n    //else if ([colorType hasPrefix:@\"hsba\"])\n    //else if ([colorType hasPrefix:@\"\"])\n    return componentValues;\n}\n\n#if TARGET_OS_IPHONE\n\nUIColor * UIColorFromString(NSString *serializedColor)\n{\n    NSInteger *componentValues = newColorComponentsFromString(serializedColor);\n    UIColor *color = [UIColor colorWithRed:(componentValues[0] / 255.0f)\n                                     green:(componentValues[1] / 255.0f)\n                                      blue:(componentValues[2] / 255.0f)\n                                     alpha:componentValues[3]];\n    \n    free(componentValues);\n    return color;\n}\nid (*colorFromString)(NSString *) = UIColorFromString;\n\n#else\n\nNSColor * NSColorFromString(NSString *serializedColor)\n{\n    NSInteger *componentValues = newColorComponentsFromString(serializedColor);\n    NSColor *color = [NSColor colorWithDeviceRed:(componentValues[0] / 255.0f)\n                                           green:(componentValues[1] / 255.0f)\n                                            blue:(componentValues[2] / 255.0f)\n                                           alpha:componentValues[3]];\n    free(componentValues);\n    return color;\n}\nid (*colorFromString)(NSString *) = NSColorFromString;\n\n\n#endif\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h",
    "content": "//\n//  NSAttributeDescription+MagicalDataImport.h\n//  Magical Record\n//\n//  Created by Saul Mora on 9/4/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n\n@interface NSAttributeDescription (MagicalRecord_DataImport)\n\n- (NSString *) MR_primaryKey;\n- (id) MR_valueForKeyPath:(NSString *)keyPath fromObjectData:(id)objectData;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m",
    "content": "//\n//  NSAttributeDescription+MagicalDataImport.m\n//  Magical Record\n//\n//  Created by Saul Mora on 9/4/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSAttributeDescription+MagicalDataImport.h\"\n#import \"NSManagedObject+MagicalDataImport.h\"\n#import \"MagicalImportFunctions.h\"\n\n@implementation NSAttributeDescription (MagicalRecord_DataImport)\n\n- (NSString *) MR_primaryKey;\n{\n    return nil;\n}\n\n- (id) MR_valueForKeyPath:(NSString *)keyPath fromObjectData:(id)objectData;\n{\n    id value = [objectData valueForKeyPath:keyPath];\n    \n    NSAttributeType attributeType = [self attributeType];\n    NSString *desiredAttributeType = [[self userInfo] valueForKey:kMagicalRecordImportAttributeValueClassNameKey];\n    if (desiredAttributeType) \n    {\n        if ([desiredAttributeType hasSuffix:@\"Color\"])\n        {\n            value = colorFromString(value);\n        }\n    }\n    else \n    {\n        if (attributeType == NSDateAttributeType)\n        {\n            if (![value isKindOfClass:[NSDate class]]) \n            {\n                NSString *dateFormat = [[self userInfo] valueForKey:kMagicalRecordImportCustomDateFormatKey];\n                value = dateFromString([value description], dateFormat ?: kMagicalRecordImportDefaultDateFormatString);\n            }\n            //            value = adjustDateForDST(value);\n        }\n        else if (attributeType == NSInteger16AttributeType ||\n                 attributeType == NSInteger32AttributeType ||\n                 attributeType == NSInteger64AttributeType ||\n                 attributeType == NSDecimalAttributeType ||\n                 attributeType == NSDoubleAttributeType ||\n                 attributeType == NSFloatAttributeType) {\n            if (![value isKindOfClass:[NSNumber class]] && value != [NSNull null]) {\n                value = numberFromString([value description]);\n            }\n        }\n    }\n    \n    return value == [NSNull null] ? nil : value;   \n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h",
    "content": "//\n//  NSEntityDescription+MagicalDataImport.h\n//  Magical Record\n//\n//  Created by Saul Mora on 9/5/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n\n@interface NSEntityDescription (MagicalRecord_DataImport)\n\n- (NSAttributeDescription *) MR_primaryAttributeToRelateBy;\n- (NSManagedObject *) MR_createInstanceInContext:(NSManagedObjectContext *)context;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m",
    "content": "//\n//  NSEntityDescription+MagicalDataImport.m\n//  Magical Record\n//\n//  Created by Saul Mora on 9/5/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"CoreData+MagicalRecord.h\"\n\n@implementation NSEntityDescription (MagicalRecord_DataImport)\n\n- (NSAttributeDescription *) MR_primaryAttributeToRelateBy;\n{\n    NSString *lookupKey = [[self userInfo] valueForKey:kMagicalRecordImportRelationshipLinkedByKey] ?: primaryKeyNameFromString([self name]);\n    NSDictionary *attributesByName = [self attributesByName];\n                                    \n    if ([attributesByName count] == 0) return nil;\n    \n    NSAttributeDescription *primaryAttribute = [attributesByName objectForKey:lookupKey];\n\n    return primaryAttribute;\n}\n\n- (NSManagedObject *) MR_createInstanceInContext:(NSManagedObjectContext *)context;\n{\n    Class relatedClass = NSClassFromString([self managedObjectClassName]);\n    NSManagedObject *newInstance = [relatedClass MR_createInContext:context];\n   \n    return newInstance;\n}\n\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h",
    "content": "//\n//  NSNumber+MagicalDataImport.h\n//  Magical Record\n//\n//  Created by Saul Mora on 9/4/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface NSNumber (MagicalRecord_DataImport)\n\n- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo;\n- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m",
    "content": "//\n//  NSNumber+MagicalDataImport.m\n//  Magical Record\n//\n//  Created by Saul Mora on 9/4/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSNumber+MagicalDataImport.h\"\n\n\n\n@implementation NSNumber (MagicalRecord_DataImport)\n\n- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo\n{\n    return self;\n}\n\n- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo\n{\n    return nil;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h",
    "content": "//\n//  NSDictionary+MagicalDataImport.h\n//  Magical Record\n//\n//  Created by Saul Mora on 9/4/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface NSObject (MagicalRecord_DataImport)\n\n- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo;\n- (id) MR_valueForAttribute:(NSAttributeDescription *)attributeInfo;\n\n- (NSString *) MR_lookupKeyForRelationship:(NSRelationshipDescription *)relationshipInfo;\n- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m",
    "content": "//\n//  NSDictionary+MagicalDataImport.m\n//  Magical Record\n//\n//  Created by Saul Mora on 9/4/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSObject+MagicalDataImport.h\"\n#import \"NSManagedObject+MagicalDataImport.h\"\n#import \"MagicalRecord.h\"\n#import \"CoreData+MagicalRecord.h\"\n\nNSUInteger const kMagicalRecordImportMaximumAttributeFailoverDepth = 10;\n\n\n@implementation NSObject (MagicalRecord_DataImport)\n\n//#warning If you implement valueForUndefinedKey: in any NSObject in your code, this may be the problem if something broke\n- (id) MR_valueForUndefinedKey:(NSString *)key\n{\n    return nil;\n}\n\n- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo;\n{\n    NSString *attributeName = [attributeInfo name];\n    NSString *lookupKey = [[attributeInfo userInfo] valueForKey:kMagicalRecordImportAttributeKeyMapKey] ?: attributeName;\n    \n    id value = [self valueForKeyPath:lookupKey];\n    \n    for (NSUInteger i = 1; i < kMagicalRecordImportMaximumAttributeFailoverDepth && value == nil; i++)\n    {\n        attributeName = [NSString stringWithFormat:@\"%@.%lu\", kMagicalRecordImportAttributeKeyMapKey, (unsigned long)i];\n        lookupKey = [[attributeInfo userInfo] valueForKey:attributeName];\n        if (lookupKey == nil) \n        {\n            return nil;\n        }\n        value = [self valueForKeyPath:lookupKey];\n    }\n    \n    return value != nil ? lookupKey : nil;\n}\n\n- (id) MR_valueForAttribute:(NSAttributeDescription *)attributeInfo\n{\n    NSString *lookupKey = [self MR_lookupKeyForAttribute:attributeInfo];\n    return lookupKey ? [self valueForKeyPath:lookupKey] : nil;\n}\n\n- (NSString *) MR_lookupKeyForRelationship:(NSRelationshipDescription *)relationshipInfo\n{\n    NSEntityDescription *destinationEntity = [relationshipInfo destinationEntity];\n    if (destinationEntity == nil) \n    {\n        MRLog(@\"Unable to find entity for type '%@'\", [self valueForKey:kMagicalRecordImportRelationshipTypeKey]);\n        return nil;\n    }\n    \n    NSString *primaryKeyName = [relationshipInfo MR_primaryKey];\n    \n    NSAttributeDescription *primaryKeyAttribute = [[destinationEntity attributesByName] valueForKey:primaryKeyName];\n    NSString *lookupKey = [[primaryKeyAttribute userInfo] valueForKey:kMagicalRecordImportAttributeKeyMapKey] ?: [primaryKeyAttribute name];\n    \n    return lookupKey;\n}\n\n- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo\n{\n    NSString *lookupKey = [self MR_lookupKeyForRelationship:relationshipInfo];\n    return lookupKey ? [self valueForKeyPath:lookupKey] : nil;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h",
    "content": "//\n//  NSRelationshipDescription+MagicalDataImport.h\n//  Magical Record\n//\n//  Created by Saul Mora on 9/4/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n\n@interface NSRelationshipDescription (MagicalRecord_DataImport)\n\n- (NSString *) MR_primaryKey;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m",
    "content": "//\n//  NSRelationshipDescription+MagicalDataImport.m\n//  Magical Record\n//\n//  Created by Saul Mora on 9/4/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSRelationshipDescription+MagicalDataImport.h\"\n#import \"NSManagedObject+MagicalDataImport.h\"\n#import \"MagicalImportFunctions.h\"\n#import \"MagicalRecord.h\"\n\n@implementation NSRelationshipDescription (MagicalRecord_DataImport)\n\n- (NSString *) MR_primaryKey;\n{\n    NSString *primaryKeyName = [[self userInfo] valueForKey:kMagicalRecordImportRelationshipLinkedByKey] ?: \n    primaryKeyNameFromString([[self destinationEntity] name]);\n    \n    return primaryKeyName;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h",
    "content": "//\n//  NSString+MagicalRecord_MagicalDataImport.h\n//  Magical Record\n//\n//  Created by Saul Mora on 12/10/11.\n//  Copyright (c) 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface NSString (MagicalRecord_DataImport)\n\n- (NSString *) MR_capitalizedFirstCharacterString;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m",
    "content": "//\n//  NSString+MagicalRecord_MagicalDataImport.m\n//  Magical Record\n//\n//  Created by Saul Mora on 12/10/11.\n//  Copyright (c) 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSString+MagicalDataImport.h\"\n\n\n@implementation NSString (MagicalRecord_DataImport)\n\n- (NSString *) MR_capitalizedFirstCharacterString;\n{\n    if ([self length] > 0)\n    {\n        NSString *firstChar = [[self substringToIndex:1] capitalizedString];\n        return [firstChar stringByAppendingString:[self substringFromIndex:1]];\n    }\n    return self;\n}\n\n- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo\n{\n    return self;\n}\n\n- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo\n{\n    return nil;\n}\n\n@end\n\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h",
    "content": "//\n//  NSManagedObject+MagicalAggregation.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n\n@interface NSManagedObject (MagicalAggregation)\n\n+ (NSNumber *) MR_numberOfEntities;\n+ (NSNumber *) MR_numberOfEntitiesWithContext:(NSManagedObjectContext *)context;\n+ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm;\n+ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n\n+ (NSUInteger) MR_countOfEntities;\n+ (NSUInteger) MR_countOfEntitiesWithContext:(NSManagedObjectContext *)context;\n+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter;\n+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter inContext:(NSManagedObjectContext *)context;\n\n+ (BOOL) MR_hasAtLeastOneEntity;\n+ (BOOL) MR_hasAtLeastOneEntityInContext:(NSManagedObjectContext *)context;\n\n+ (NSNumber *)MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context;\n+ (NSNumber *)MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate;\n\n- (id) MR_objectWithMinValueFor:(NSString *)property;\n- (id) MR_objectWithMinValueFor:(NSString *)property inContext:(NSManagedObjectContext *)context;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m",
    "content": "//\n//  NSManagedObject+MagicalAggregation.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSManagedObject+MagicalAggregation.h\"\n#import \"NSManagedObjectContext+MagicalRecord.h\"\n#import \"NSManagedObjectContext+MagicalThreading.h\"\n#import \"NSManagedObject+MagicalRequests.h\"\n#import \"NSManagedObject+MagicalRecord.h\"\n#import \"NSManagedObject+MagicalFinders.h\"\n#import \"MagicalRecord+ErrorHandling.h\"\n\n@implementation NSManagedObject (MagicalAggregation)\n\n#pragma mark -\n#pragma mark Number of Entities\n\n+ (NSNumber *) MR_numberOfEntitiesWithContext:(NSManagedObjectContext *)context\n{\n\treturn [NSNumber numberWithUnsignedInteger:[self MR_countOfEntitiesWithContext:context]];\n}\n\n+ (NSNumber *) MR_numberOfEntities\n{\n\treturn [self MR_numberOfEntitiesWithContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context\n{\n    \n\treturn [NSNumber numberWithUnsignedInteger:[self MR_countOfEntitiesWithPredicate:searchTerm inContext:context]];\n}\n\n+ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm;\n{\n\treturn [self MR_numberOfEntitiesWithPredicate:searchTerm\n                                        inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSUInteger) MR_countOfEntities;\n{\n    return [self MR_countOfEntitiesWithContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSUInteger) MR_countOfEntitiesWithContext:(NSManagedObjectContext *)context;\n{\n\tNSError *error = nil;\n\tNSUInteger count = [context countForFetchRequest:[self MR_createFetchRequestInContext:context] error:&error];\n\t[MagicalRecord handleErrors:error];\n\t\n    return count;\n}\n\n+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter;\n{\n    return [self MR_countOfEntitiesWithPredicate:searchFilter inContext:[NSManagedObjectContext MR_defaultContext]];\n}\n\n+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter inContext:(NSManagedObjectContext *)context;\n{\n\tNSError *error = nil;\n\tNSFetchRequest *request = [self MR_createFetchRequestInContext:context];\n\t[request setPredicate:searchFilter];\n\t\n\tNSUInteger count = [context countForFetchRequest:request error:&error];\n\t[MagicalRecord handleErrors:error];\n    \n    return count;\n}\n\n+ (BOOL) MR_hasAtLeastOneEntity\n{\n    return [self MR_hasAtLeastOneEntityInContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (BOOL) MR_hasAtLeastOneEntityInContext:(NSManagedObjectContext *)context\n{\n    return [[self MR_numberOfEntitiesWithContext:context] intValue] > 0;\n}\n\n- (NSNumber *) MR_maxValueFor:(NSString *)property\n{\n\tNSManagedObject *obj = [[self class] MR_findFirstByAttribute:property\n                                                       withValue:[NSString stringWithFormat:@\"max(%@)\", property]];\n\t\n\treturn [obj valueForKey:property];\n}\n\n- (id) MR_objectWithMinValueFor:(NSString *)property inContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [[self class] MR_createFetchRequestInContext:context];\n    \n\tNSPredicate *searchFor = [NSPredicate predicateWithFormat:@\"SELF = %@ AND %K = min(%@)\", self, property, property];\n\t[request setPredicate:searchFor];\n\t\n\treturn [[self class] MR_executeFetchRequestAndReturnFirstObject:request inContext:context];\n}\n\n- (id) MR_objectWithMinValueFor:(NSString *)property\n{\n\treturn [self MR_objectWithMinValueFor:property inContext:[self  managedObjectContext]];\n}\n\n+ (NSNumber *) MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context \n{\n    NSExpression *ex = [NSExpression expressionForFunction:function \n                                                 arguments:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:attributeName]]];\n    \n    NSExpressionDescription *ed = [[NSExpressionDescription alloc] init];\n    [ed setName:@\"result\"];\n    [ed setExpression:ex];\n    \n    // determine the type of attribute, required to set the expression return type    \n    NSAttributeDescription *attributeDescription = [[[self MR_entityDescription] attributesByName] objectForKey:attributeName];\n    [ed setExpressionResultType:[attributeDescription attributeType]];    \n    NSArray *properties = [NSArray arrayWithObject:ed];\n    \n    NSFetchRequest *request = [self MR_requestAllWithPredicate:predicate inContext:context];\n    [request setPropertiesToFetch:properties];\n    [request setResultType:NSDictionaryResultType];    \n    \n    NSDictionary *resultsDictionary = [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];\n    NSNumber *resultValue = [resultsDictionary objectForKey:@\"result\"];\n    \n    return resultValue;    \n}\n\n+ (NSNumber *) MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate \n{\n    return [self MR_aggregateOperation:function \n                           onAttribute:attributeName \n                         withPredicate:predicate\n                             inContext:[NSManagedObjectContext MR_defaultContext]];    \n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h",
    "content": "//\n//  NSManagedObject+JSONHelpers.h\n//\n//  Created by Saul Mora on 6/28/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n\nextern NSString * const kMagicalRecordImportCustomDateFormatKey;\nextern NSString * const kMagicalRecordImportDefaultDateFormatString;\nextern NSString * const kMagicalRecordImportAttributeKeyMapKey;\nextern NSString * const kMagicalRecordImportAttributeValueClassNameKey;\n\nextern NSString * const kMagicalRecordImportRelationshipMapKey;\nextern NSString * const kMagicalRecordImportRelationshipLinkedByKey;\nextern NSString * const kMagicalRecordImportRelationshipTypeKey;\n\n@interface NSManagedObject (MagicalRecord_DataImport)\n\n- (BOOL) MR_importValuesForKeysWithObject:(id)objectData;\n\n+ (id) MR_importFromObject:(id)data;\n+ (id) MR_importFromObject:(id)data inContext:(NSManagedObjectContext *)context;\n\n+ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData;\n+ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData inContext:(NSManagedObjectContext *)context;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m",
    "content": "//\n//  NSManagedObject+JSONHelpers.m\n//\n//  Created by Saul Mora on 6/28/11.\n//  Copyright 2011 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"CoreData+MagicalRecord.h\"\n#import <objc/runtime.h>\n\nvoid MR_swapMethodsFromClass(Class c, SEL orig, SEL new);\n\nNSString * const kMagicalRecordImportCustomDateFormatKey            = @\"dateFormat\";\nNSString * const kMagicalRecordImportDefaultDateFormatString        = @\"yyyy-MM-dd'T'HH:mm:ss'Z'\";\n\nNSString * const kMagicalRecordImportAttributeKeyMapKey             = @\"mappedKeyName\";\nNSString * const kMagicalRecordImportAttributeValueClassNameKey     = @\"attributeValueClassName\";\n\nNSString * const kMagicalRecordImportRelationshipMapKey             = @\"mappedKeyName\";\nNSString * const kMagicalRecordImportRelationshipLinkedByKey        = @\"relatedByAttribute\";\nNSString * const kMagicalRecordImportRelationshipTypeKey            = @\"type\";  //this needs to be revisited\n\nNSString * const kMagicalRecordImportAttributeUseDefaultValueWhenNotPresent = @\"useDefaultValueWhenNotPresent\";\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n\n@implementation NSManagedObject (MagicalRecord_DataImport)\n\n- (BOOL) MR_importValue:(id)value forKey:(NSString *)key\n{\n    NSString *selectorString = [NSString stringWithFormat:@\"import%@:\", [key MR_capitalizedFirstCharacterString]];\n    SEL selector = NSSelectorFromString(selectorString);\n    if ([self respondsToSelector:selector])\n    {\n        [self performSelector:selector withObject:value];\n        return YES;\n    }\n    return NO;\n}\n\n- (void) MR_setAttributes:(NSDictionary *)attributes forKeysWithObject:(id)objectData\n{    \n    for (NSString *attributeName in attributes) \n    {\n        NSAttributeDescription *attributeInfo = [attributes valueForKey:attributeName];\n        NSString *lookupKeyPath = [objectData MR_lookupKeyForAttribute:attributeInfo];\n        \n        if (lookupKeyPath) \n        {\n            id value = [attributeInfo MR_valueForKeyPath:lookupKeyPath fromObjectData:objectData];\n            if (![self MR_importValue:value forKey:attributeName])\n            {\n                [self setValue:value forKey:attributeName];\n            }\n        } \n        else \n        {\n            if ([[[attributeInfo userInfo] objectForKey:kMagicalRecordImportAttributeUseDefaultValueWhenNotPresent] boolValue]) \n            {\n                id value = [attributeInfo defaultValue];\n                if (![self MR_importValue:value forKey:attributeName])\n                {\n                    [self setValue:value forKey:attributeName];\n                }\n            }\n        }\n    }\n}\n\n- (NSManagedObject *) MR_findObjectForRelationship:(NSRelationshipDescription *)relationshipInfo withData:(id)singleRelatedObjectData\n{\n    NSEntityDescription *destinationEntity = [relationshipInfo destinationEntity];\n    NSManagedObject *objectForRelationship = nil;\n    id relatedValue = [singleRelatedObjectData MR_relatedValueForRelationship:relationshipInfo];\n\n    if (relatedValue) \n    {\n        NSManagedObjectContext *context = [self managedObjectContext];\n        Class managedObjectClass = NSClassFromString([destinationEntity managedObjectClassName]);\n        NSString *primaryKey = [relationshipInfo MR_primaryKey];\n        objectForRelationship = [managedObjectClass MR_findFirstByAttribute:primaryKey\n                                                               withValue:relatedValue\n                                                               inContext:context];\n    }\n\n    return objectForRelationship;\n}\n\n- (void) MR_addObject:(NSManagedObject *)relatedObject forRelationship:(NSRelationshipDescription *)relationshipInfo\n{\n    NSAssert2(relatedObject != nil, @\"Cannot add nil to %@ for attribute %@\", NSStringFromClass([self class]), [relationshipInfo name]);    \n    NSAssert2([relatedObject entity] == [relationshipInfo destinationEntity], @\"related object entity %@ not same as destination entity %@\", [relatedObject entity], [relationshipInfo destinationEntity]);\n\n    //add related object to set\n    NSString *addRelationMessageFormat = @\"set%@:\";\n    id relationshipSource = self;\n    if ([relationshipInfo isToMany]) \n    {\n        addRelationMessageFormat = @\"add%@Object:\";\n        if ([relationshipInfo respondsToSelector:@selector(isOrdered)] && [relationshipInfo isOrdered])\n        {\n            //Need to get the ordered set\n            NSString *selectorName = [[relationshipInfo name] stringByAppendingString:@\"Set\"];\n            relationshipSource = [self performSelector:NSSelectorFromString(selectorName)];\n            addRelationMessageFormat = @\"addObject:\";\n        }\n    }\n\n    NSString *addRelatedObjectToSetMessage = [NSString stringWithFormat:addRelationMessageFormat, attributeNameFromString([relationshipInfo name])];\n \n    SEL selector = NSSelectorFromString(addRelatedObjectToSetMessage);\n    \n    @try \n    {\n        [relationshipSource performSelector:selector withObject:relatedObject];        \n    }\n    @catch (NSException *exception) \n    {\n        MRLog(@\"Adding object for relationship failed: %@\\n\", relationshipInfo);\n        MRLog(@\"relatedObject.entity %@\", [relatedObject entity]);\n        MRLog(@\"relationshipInfo.destinationEntity %@\", [relationshipInfo destinationEntity]);\n        MRLog(@\"Add Relationship Selector: %@\", addRelatedObjectToSetMessage);   \n        MRLog(@\"perform selector error: %@\", exception);\n    }\n}\n\n- (void) MR_setRelationships:(NSDictionary *)relationships forKeysWithObject:(id)relationshipData withBlock:(void(^)(NSRelationshipDescription *,id))setRelationshipBlock\n{\n    for (NSString *relationshipName in relationships) \n    {\n        if ([self MR_importValue:relationshipData forKey:relationshipName]) \n        {\n            continue;\n        }\n        \n        NSRelationshipDescription *relationshipInfo = [relationships valueForKey:relationshipName];\n        \n        NSString *lookupKey = [[relationshipInfo userInfo] valueForKey:kMagicalRecordImportRelationshipMapKey] ?: relationshipName;\n        id relatedObjectData = [relationshipData valueForKeyPath:lookupKey];\n        \n        if (relatedObjectData == nil || [relatedObjectData isEqual:[NSNull null]]) \n        {\n            continue;\n        }\n        \n        SEL shouldImportSelector = NSSelectorFromString([NSString stringWithFormat:@\"shouldImport%@:\", [relationshipName MR_capitalizedFirstCharacterString]]);\n        BOOL implementsShouldImport = (BOOL)[self respondsToSelector:shouldImportSelector];\n        void (^establishRelationship)(NSRelationshipDescription *, id) = ^(NSRelationshipDescription *blockInfo, id blockData)\n        {\n            if (!(implementsShouldImport && !(BOOL)[self performSelector:shouldImportSelector withObject:relatedObjectData]))\n            {\n                setRelationshipBlock(blockInfo, blockData);\n            }\n        };\n        \n        if ([relationshipInfo isToMany] && [relatedObjectData isKindOfClass:[NSArray class]])\n        {\n            for (id singleRelatedObjectData in relatedObjectData) \n            {\n                establishRelationship(relationshipInfo, singleRelatedObjectData);\n            }\n        }\n        else\n        {\n            establishRelationship(relationshipInfo, relatedObjectData);\n        }\n    }\n}\n\n- (BOOL) MR_preImport:(id)objectData;\n{\n    if ([self respondsToSelector:@selector(shouldImport:)])\n    {\n        BOOL shouldImport = (BOOL)[self performSelector:@selector(shouldImport:) withObject:objectData];\n        if (!shouldImport) \n        {\n            return NO;\n        }\n    }   \n\n    if ([self respondsToSelector:@selector(willImport:)])\n    {\n        [self performSelector:@selector(willImport:) withObject:objectData];\n    }\n    MR_swapMethodsFromClass([objectData class], @selector(valueForUndefinedKey:), @selector(MR_valueForUndefinedKey:));\n    return YES;\n}\n\n- (BOOL) MR_postImport:(id)objectData;\n{\n    MR_swapMethodsFromClass([objectData class], @selector(valueForUndefinedKey:), @selector(MR_valueForUndefinedKey:));\n    if ([self respondsToSelector:@selector(didImport:)])\n    {\n        [self performSelector:@selector(didImport:) withObject:objectData];\n    }\n    return YES;\n}\n\n- (BOOL) MR_performDataImportFromObject:(id)objectData relationshipBlock:(void(^)(NSRelationshipDescription*, id))relationshipBlock;\n{\n    BOOL didStartimporting = [self MR_preImport:objectData];\n    if (!didStartimporting) return NO;\n    \n    NSDictionary *attributes = [[self entity] attributesByName];\n    [self MR_setAttributes:attributes forKeysWithObject:objectData];\n    \n    NSDictionary *relationships = [[self entity] relationshipsByName];\n    [self MR_setRelationships:relationships forKeysWithObject:objectData withBlock:relationshipBlock];\n    \n    return [self MR_postImport:objectData];  \n}\n\n- (BOOL) MR_importValuesForKeysWithObject:(id)objectData\n{\n    typeof(self) weakself = self;\n    return [self MR_performDataImportFromObject:objectData\n                              relationshipBlock:^(NSRelationshipDescription *relationshipInfo, id localObjectData) {\n        \n        NSManagedObject *relatedObject = [weakself MR_findObjectForRelationship:relationshipInfo withData:localObjectData];\n        \n        if (relatedObject == nil)\n        {\n            NSEntityDescription *entityDescription = [relationshipInfo destinationEntity];\n            relatedObject = [entityDescription MR_createInstanceInContext:[weakself managedObjectContext]];\n        }\n        [relatedObject MR_importValuesForKeysWithObject:localObjectData];\n        \n        [weakself MR_addObject:relatedObject forRelationship:relationshipInfo];\n    } ];\n}\n\n+ (id) MR_importFromObject:(id)objectData inContext:(NSManagedObjectContext *)context;\n{\n    NSAttributeDescription *primaryAttribute = [[self MR_entityDescription] MR_primaryAttributeToRelateBy];\n    \n    id value = [objectData MR_valueForAttribute:primaryAttribute];\n    \n    NSManagedObject *managedObject = [self MR_findFirstByAttribute:[primaryAttribute name] withValue:value inContext:context];\n    if (managedObject == nil) \n    {\n        managedObject = [self MR_createInContext:context];\n    }\n\n    [managedObject MR_importValuesForKeysWithObject:objectData];\n\n    return managedObject;\n}\n\n+ (id) MR_importFromObject:(id)objectData\n{\n    return [self MR_importFromObject:objectData inContext:[NSManagedObjectContext MR_defaultContext]];\n}\n\n+ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData\n{\n    return [self MR_importFromArray:listOfObjectData inContext:[NSManagedObjectContext MR_defaultContext]];\n}\n\n+ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData inContext:(NSManagedObjectContext *)context\n{\n    NSMutableArray *objectIDs = [NSMutableArray array];\n    \n    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) \n    {    \n        [listOfObjectData enumerateObjectsWithOptions:0 usingBlock:^(id obj, NSUInteger idx, BOOL *stop) \n        {\n            NSDictionary *objectData = (NSDictionary *)obj;\n\n            NSManagedObject *dataObject = [self MR_importFromObject:objectData inContext:localContext];\n\n            if ([context obtainPermanentIDsForObjects:[NSArray arrayWithObject:dataObject] error:nil])\n            {\n              [objectIDs addObject:[dataObject objectID]];\n            }\n        }];\n    }];\n    \n    return [self MR_findAllWithPredicate:[NSPredicate predicateWithFormat:@\"self IN %@\", objectIDs] inContext:context];\n}\n\n@end\n\n#pragma clang diagnostic pop\n\nvoid MR_swapMethodsFromClass(Class c, SEL orig, SEL new)\n{\n    Method origMethod = class_getInstanceMethod(c, orig);\n    Method newMethod = class_getInstanceMethod(c, new);\n    if (class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))\n    {\n        class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));\n    }\n    else\n    {\n        method_exchangeImplementations(origMethod, newMethod);\n    }\n}\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h",
    "content": "//\n//  NSManagedObject+MagicalFinders.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n\n@interface NSManagedObject (MagicalFinders)\n\n+ (NSArray *) MR_findAll;\n+ (NSArray *) MR_findAllInContext:(NSManagedObjectContext *)context;\n+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending;\n+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm;\n+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n\n+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm;\n+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n\n+ (id) MR_findFirst;\n+ (id) MR_findFirstInContext:(NSManagedObjectContext *)context;\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm;\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending;\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes;\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes inContext:(NSManagedObjectContext *)context;\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(id)attributes, ...;\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context andRetrieveAttributes:(id)attributes, ...;\n+ (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue;\n+ (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context;\n+ (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending;\n+ (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n\n+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue;\n+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context;\n+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending;\n+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n\n#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR\n\n+ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id<NSFetchedResultsControllerDelegate>)delegate;\n+ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context;\n\n+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id<NSFetchedResultsControllerDelegate>)delegate;\n+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context;\n\n+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending;\n+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n\n+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id<NSFetchedResultsControllerDelegate>)delegate;\n+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context;\n\n#endif\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m",
    "content": "    //\n//  NSManagedObject+MagicalFinders.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSManagedObject+MagicalFinders.h\"\n#import \"NSManagedObject+MagicalRequests.h\"\n#import \"NSManagedObject+MagicalRecord.h\"\n#import \"NSManagedObjectContext+MagicalThreading.h\"\n\n@implementation NSManagedObject (MagicalFinders)\n\n#pragma mark - Finding Data\n\n\n+ (NSArray *) MR_findAllInContext:(NSManagedObjectContext *)context\n{\n\treturn [self MR_executeFetchRequest:[self MR_requestAllInContext:context] inContext:context];\n}\n\n+ (NSArray *) MR_findAll\n{\n\treturn [self MR_findAllInContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm ascending:ascending inContext:context];\n\t\n\treturn [self MR_executeFetchRequest:request inContext:context];\n}\n\n+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending\n{\n\treturn [self MR_findAllSortedBy:sortTerm\n                          ascending:ascending \n                          inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm\n                                                ascending:ascending\n                                            withPredicate:searchTerm\n                                                inContext:context];\n\t\n\treturn [self MR_executeFetchRequest:request inContext:context];\n}\n\n+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm\n{\n\treturn [self MR_findAllSortedBy:sortTerm\n                          ascending:ascending\n                      withPredicate:searchTerm \n                          inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n\n+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [self MR_createFetchRequestInContext:context];\n\t[request setPredicate:searchTerm];\n\t\n\treturn [self MR_executeFetchRequest:request\n                              inContext:context];\n}\n\n+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm\n{\n\treturn [self MR_findAllWithPredicate:searchTerm\n                               inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (id) MR_findFirstInContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [self MR_createFetchRequestInContext:context];\n\t\n\treturn [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];\n}\n\n+ (id) MR_findFirst\n{\n\treturn [self MR_findFirstInContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context\n{\t\n\tNSFetchRequest *request = [self MR_requestFirstByAttribute:attribute withValue:searchValue inContext:context];\n    //    [request setPropertiesToFetch:[NSArray arrayWithObject:attribute]];\n    \n\treturn [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];\n}\n\n+ (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue\n{\n\treturn [self MR_findFirstByAttribute:attribute\n                               withValue:searchValue \n                               inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n{\n    NSFetchRequest *request = [self MR_requestAllSortedBy:attribute ascending:ascending inContext:context];\n    [request setFetchLimit:1];\n\n    return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];\n}\n\n+ (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending;\n{\n    return [self MR_findFirstOrderedByAttribute:attribute\n                                      ascending:ascending\n                                      inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm\n{\n    return [self MR_findFirstWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context\n{\n    NSFetchRequest *request = [self MR_requestFirstWithPredicate:searchTerm inContext:context];\n    \n    return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];\n}\n\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [self MR_requestAllSortedBy:property ascending:ascending withPredicate:searchterm inContext:context];\n    \n\treturn [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];\n}\n\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending\n{\n\treturn [self MR_findFirstWithPredicate:searchterm\n                                  sortedBy:property \n                                 ascending:ascending \n                                 inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes inContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [self MR_createFetchRequestInContext:context];\n\t[request setPredicate:searchTerm];\n\t[request setPropertiesToFetch:attributes];\n\t\n\treturn [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];\n}\n\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes\n{\n\treturn [self MR_findFirstWithPredicate:searchTerm\n                     andRetrieveAttributes:attributes \n                                 inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context andRetrieveAttributes:(id)attributes, ...\n{\n\tNSFetchRequest *request = [self MR_requestAllSortedBy:sortBy\n                                                ascending:ascending\n                                            withPredicate:searchTerm\n                                                inContext:context];\n\t[request setPropertiesToFetch:[self MR_propertiesNamed:attributes]];\n\t\n\treturn [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];\n}\n\n+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(id)attributes, ...\n{\n\treturn [self MR_findFirstWithPredicate:searchTerm\n                                  sortedBy:sortBy \n                                 ascending:ascending \n                                 inContext:[NSManagedObjectContext MR_contextForCurrentThread]\n                     andRetrieveAttributes:attributes];\n}\n\n+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context\n{\n    NSFetchRequest *request = [self MR_requestAllWhere:attribute isEqualTo:searchValue inContext:context];\n\t\n\treturn [self MR_executeFetchRequest:request inContext:context];\n}\n\n+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue\n{\n\treturn [self MR_findByAttribute:attribute\n                          withValue:searchValue \n                          inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context\n{\n\tNSPredicate *searchTerm = [NSPredicate predicateWithFormat:@\"%K = %@\", attribute, searchValue];\n\tNSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm ascending:ascending withPredicate:searchTerm inContext:context];\n\t\n\treturn [self MR_executeFetchRequest:request inContext:context];\n}\n\n+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending\n{\n\treturn [self MR_findByAttribute:attribute\n                          withValue:searchValue\n                         andOrderBy:sortTerm \n                          ascending:ascending \n                          inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n\n#pragma mark -\n#pragma mark NSFetchedResultsController helpers\n\n\n#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR\n\n+ (NSFetchedResultsController *) MR_fetchController:(NSFetchRequest *)request delegate:(id<NSFetchedResultsControllerDelegate>)delegate useFileCache:(BOOL)useFileCache groupedBy:(NSString *)groupKeyPath inContext:(NSManagedObjectContext *)context\n{\n    NSString *cacheName = useFileCache ? [NSString stringWithFormat:@\"MagicalRecord-Cache-%@\", NSStringFromClass([self class])] : nil;\n    \n\tNSFetchedResultsController *controller =\n    [[NSFetchedResultsController alloc] initWithFetchRequest:request\n                                        managedObjectContext:context\n                                          sectionNameKeyPath:groupKeyPath\n                                                   cacheName:cacheName];\n    controller.delegate = delegate;\n    \n    return controller;\n}\n\n+ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id<NSFetchedResultsControllerDelegate>)delegate;\n{\n    return [self MR_fetchAllWithDelegate:delegate inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context;\n{\n    NSFetchRequest *request = [self MR_requestAllInContext:context];\n    NSFetchedResultsController *controller = [self MR_fetchController:request delegate:delegate useFileCache:NO groupedBy:nil inContext:context];\n\n    [self MR_performFetch:controller];\n    return controller;\n}\n\n+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm \n                                                ascending:ascending \n                                            withPredicate:searchTerm\n                                                inContext:context];\n    \n    NSFetchedResultsController *controller = [self MR_fetchController:request \n                                                             delegate:delegate\n                                                         useFileCache:NO\n                                                            groupedBy:group\n                                                            inContext:context];\n    \n    [self MR_performFetch:controller];\n    return controller;\n}\n\n+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate\n{\n\treturn [self MR_fetchAllGroupedBy:group\n                        withPredicate:searchTerm\n                             sortedBy:sortTerm\n                            ascending:ascending\n                             delegate:delegate\n                            inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n{\n    return [self MR_fetchAllGroupedBy:group \n                        withPredicate:searchTerm\n                             sortedBy:sortTerm\n                            ascending:ascending\n                             delegate:nil\n                            inContext:context];\n}\n\n+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending \n{\n    return [self MR_fetchAllGroupedBy:group \n                        withPredicate:searchTerm\n                             sortedBy:sortTerm\n                            ascending:ascending\n                            inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n\n+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath inContext:(NSManagedObjectContext *)context\n{\n    NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm\n                                                ascending:ascending\n                                            withPredicate:searchTerm\n                                                inContext:context];\n    \n\tNSFetchedResultsController *controller = [self MR_fetchController:request \n                                                             delegate:nil\n                                                         useFileCache:NO\n                                                            groupedBy:groupingKeyPath\n                                                            inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n    \n    [self MR_performFetch:controller];\n    return controller;\n}\n\n+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath;\n{\n    return [self MR_fetchAllSortedBy:sortTerm\n                           ascending:ascending\n                       withPredicate:searchTerm\n                             groupBy:groupingKeyPath\n                           inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context\n{\n\tNSFetchedResultsController *controller = [self MR_fetchAllGroupedBy:groupingKeyPath \n                                                          withPredicate:searchTerm\n                                                               sortedBy:sortTerm \n                                                              ascending:ascending\n                                                               delegate:delegate\n                                                              inContext:context];\n\t\n\t[self MR_performFetch:controller];\n\treturn controller;\n}\n\n+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id<NSFetchedResultsControllerDelegate>)delegate\n{\n\treturn [self MR_fetchAllSortedBy:sortTerm \n                           ascending:ascending\n                       withPredicate:searchTerm \n                             groupBy:groupingKeyPath \n                            delegate:delegate\n                           inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n#endif\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h",
    "content": "//\n//\n//  Created by Saul Mora on 11/15/09.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n#import \"MagicalRecord.h\"\n\n#define kMagicalRecordDefaultBatchSize 20\n\n@interface NSManagedObject (MagicalRecord)\n\n+ (NSUInteger) MR_defaultBatchSize;\n+ (void) MR_setDefaultBatchSize:(NSUInteger)newBatchSize;\n\n+ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request;\n+ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context;\n+ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request;\n+ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context;\n\n#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR\n\n+ (void) MR_performFetch:(NSFetchedResultsController *)controller;\n\n#endif\n\n+ (NSEntityDescription *) MR_entityDescription;\n+ (NSEntityDescription *) MR_entityDescriptionInContext:(NSManagedObjectContext *)context;\n+ (NSArray *) MR_propertiesNamed:(NSArray *)properties;\n\n+ (id) MR_createEntity;\n+ (id) MR_createInContext:(NSManagedObjectContext *)context;\n- (BOOL) MR_deleteEntity;\n- (BOOL) MR_deleteInContext:(NSManagedObjectContext *)context;\n\n+ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate;\n+ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context;\n\n+ (BOOL) MR_truncateAll;\n+ (BOOL) MR_truncateAllInContext:(NSManagedObjectContext *)context;\n\n+ (NSArray *) MR_ascendingSortDescriptors:(NSArray *)attributesToSortBy;\n+ (NSArray *) MR_descendingSortDescriptors:(NSArray *)attributesToSortBy;\n\n- (id) MR_inContext:(NSManagedObjectContext *)otherContext;\n- (id) MR_inThreadContext;\n\n@end\n\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m",
    "content": "\n//  Created by Saul Mora on 11/15/09.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#import \"CoreData+MagicalRecord.h\"\n\nstatic NSUInteger defaultBatchSize = kMagicalRecordDefaultBatchSize;\n\n\n@implementation NSManagedObject (MagicalRecord)\n\n+ (void) MR_setDefaultBatchSize:(NSUInteger)newBatchSize\n{\n\t@synchronized(self)\n\t{\n\t\tdefaultBatchSize = newBatchSize;\n\t}\n}\n\n+ (NSUInteger) MR_defaultBatchSize\n{\n\treturn defaultBatchSize;\n}\n\n+ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context\n{\n    __block NSArray *results = nil;\n    [context performBlockAndWait:^{\n\n        NSError *error = nil;\n        \n        results = [context executeFetchRequest:request error:&error];\n        \n        if (results == nil) \n        {\n            [MagicalRecord handleErrors:error];\n        }\n\n    }];\n\treturn results;\t\n}\n\n+ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request\n{\n\treturn [self MR_executeFetchRequest:request inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context\n{\n\t[request setFetchLimit:1];\n\t\n\tNSArray *results = [self MR_executeFetchRequest:request inContext:context];\n\tif ([results count] == 0)\n\t{\n\t\treturn nil;\n\t}\n\treturn [results objectAtIndex:0];\n}\n\n+ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request\n{\n\treturn [self MR_executeFetchRequestAndReturnFirstObject:request inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n#if TARGET_OS_IPHONE\n\n+ (void) MR_performFetch:(NSFetchedResultsController *)controller\n{\n\tNSError *error = nil;\n\tif (![controller performFetch:&error])\n\t{\n\t\t[MagicalRecord handleErrors:error];\n\t}\n}\n\n#endif\n\n+ (NSString *) MR_entityName\n{\n    return NSStringFromClass(self);\n}\n\n+ (NSEntityDescription *) MR_entityDescriptionInContext:(NSManagedObjectContext *)context\n{\n    if ([self respondsToSelector:@selector(entityInManagedObjectContext:)]) \n    {\n        NSEntityDescription *entity = [self performSelector:@selector(entityInManagedObjectContext:) withObject:context];\n        return entity;\n    }\n    else\n    {\n        NSString *entityName = [self MR_entityName];\n        return [NSEntityDescription entityForName:entityName inManagedObjectContext:context];\n    }\n}\n\n+ (NSEntityDescription *) MR_entityDescription\n{\n\treturn [self MR_entityDescriptionInContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSArray *) MR_propertiesNamed:(NSArray *)properties\n{\n\tNSEntityDescription *description = [self MR_entityDescription];\n\tNSMutableArray *propertiesWanted = [NSMutableArray array];\n\t\n\tif (properties)\n\t{\n\t\tNSDictionary *propDict = [description propertiesByName];\n\t\t\n\t\tfor (NSString *propertyName in properties)\n\t\t{\n\t\t\tNSPropertyDescription *property = [propDict objectForKey:propertyName];\n\t\t\tif (property)\n\t\t\t{\n\t\t\t\t[propertiesWanted addObject:property];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tMRLog(@\"Property '%@' not found in %lx properties for %@\", propertyName, (unsigned long)[propDict count], NSStringFromClass(self));\n\t\t\t}\n\t\t}\n\t}\n\treturn propertiesWanted;\n}\n\n+ (NSArray *) MR_sortAscending:(BOOL)ascending attributes:(NSArray *)attributesToSortBy\n{\n\tNSMutableArray *attributes = [NSMutableArray array];\n    \n    for (NSString *attributeName in attributesToSortBy) \n    {\n        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:attributeName ascending:ascending];\n        [attributes addObject:sortDescriptor];\n    }\n    \n\treturn attributes;\n}\n\n+ (NSArray *) MR_ascendingSortDescriptors:(NSArray *)attributesToSortBy\n{\n\treturn [self MR_sortAscending:YES attributes:attributesToSortBy];\n}\n\n+ (NSArray *) MR_descendingSortDescriptors:(NSArray *)attributesToSortBy\n{\n\treturn [self MR_sortAscending:NO attributes:attributesToSortBy];\n}\n\n#pragma mark -\n\n+ (id) MR_createInContext:(NSManagedObjectContext *)context\n{\n    if ([self respondsToSelector:@selector(insertInManagedObjectContext:)]) \n    {\n        id entity = [self performSelector:@selector(insertInManagedObjectContext:) withObject:context];\n        return entity;\n    }\n    else\n    {\n        return [NSEntityDescription insertNewObjectForEntityForName:[self MR_entityName] inManagedObjectContext:context];\n    }\n}\n\n+ (id) MR_createEntity\n{\t\n\tNSManagedObject *newEntity = [self MR_createInContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n\n\treturn newEntity;\n}\n\n- (BOOL) MR_deleteInContext:(NSManagedObjectContext *)context\n{\n\t[context deleteObject:self];\n\treturn YES;\n}\n\n- (BOOL) MR_deleteEntity\n{\n\t[self MR_deleteInContext:[self managedObjectContext]];\n\treturn YES;\n}\n\n+ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context\n{\n    NSFetchRequest *request = [self MR_requestAllWithPredicate:predicate inContext:context];\n    [request setReturnsObjectsAsFaults:YES];\n\t[request setIncludesPropertyValues:NO];\n    \n\tNSArray *objectsToTruncate = [self MR_executeFetchRequest:request inContext:context];\n    \n\tfor (id objectToTruncate in objectsToTruncate) \n    {\n\t\t[objectToTruncate MR_deleteInContext:context];\n\t}\n    \n\treturn YES;\n}\n\n+ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate\n{\n    return [self MR_deleteAllMatchingPredicate:predicate inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (BOOL) MR_truncateAllInContext:(NSManagedObjectContext *)context\n{\n    NSArray *allEntities = [self MR_findAllInContext:context];\n    for (NSManagedObject *obj in allEntities)\n    {\n        [obj MR_deleteInContext:context];\n    }\n    return YES;\n}\n\n+ (BOOL) MR_truncateAll\n{\n    [self MR_truncateAllInContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n    return YES;\n}\n\n- (id) MR_inContext:(NSManagedObjectContext *)otherContext\n{\n    NSError *error = nil;\n    NSManagedObject *inContext = [otherContext existingObjectWithID:[self objectID] error:&error];\n    [MagicalRecord handleErrors:error];\n    \n    return inContext;\n}\n\n- (id) MR_inThreadContext\n{\n    NSManagedObject *weakSelf = self;\n    return [weakSelf MR_inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h",
    "content": "//\n//  NSManagedObject+MagicalRequests.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n\n@interface NSManagedObject (MagicalRequests)\n\n+ (NSFetchRequest *) MR_createFetchRequest;\n+ (NSFetchRequest *) MR_createFetchRequestInContext:(NSManagedObjectContext *)context;\n\n+ (NSFetchRequest *) MR_requestAll;\n+ (NSFetchRequest *) MR_requestAllInContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm;\n+ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value;\n+ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm;\n+ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue;\n+ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending;\n+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm;\n+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m",
    "content": "//\n//  NSManagedObject+MagicalRequests.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSManagedObject+MagicalRequests.h\"\n#import \"NSManagedObject+MagicalRecord.h\"\n#import \"NSManagedObjectContext+MagicalThreading.h\"\n\n@implementation NSManagedObject (MagicalRequests)\n\n\n+ (NSFetchRequest *)MR_createFetchRequestInContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [[NSFetchRequest alloc] init];\n\t[request setEntity:[self MR_entityDescriptionInContext:context]];\n    \n    return request;\n}\n\n+ (NSFetchRequest *) MR_createFetchRequest\n{\n\treturn [self MR_createFetchRequestInContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n\n+ (NSFetchRequest *) MR_requestAll\n{\n\treturn [self MR_createFetchRequestInContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSFetchRequest *) MR_requestAllInContext:(NSManagedObjectContext *)context\n{\n\treturn [self MR_createFetchRequestInContext:context];\n}\n\n+ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm;\n{\n    return [self MR_requestAllWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n{\n    NSFetchRequest *request = [self MR_createFetchRequestInContext:context];\n    [request setPredicate:searchTerm];\n    \n    return request;\n}\n\n+ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value\n{\n    return [self MR_requestAllWhere:property isEqualTo:value inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value inContext:(NSManagedObjectContext *)context\n{\n    NSFetchRequest *request = [self MR_createFetchRequestInContext:context];\n    [request setPredicate:[NSPredicate predicateWithFormat:@\"%K = %@\", property, value]];\n    \n    return request;\n}\n\n+ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm\n{\n    return [self MR_requestFirstWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context\n{\n    NSFetchRequest *request = [self MR_createFetchRequestInContext:context];\n    [request setPredicate:searchTerm];\n    [request setFetchLimit:1];\n    \n    return request;\n}\n\n+ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue;\n{\n    return [self MR_requestFirstByAttribute:attribute withValue:searchValue inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context;\n{\n    NSFetchRequest *request = [self MR_requestAllWhere:attribute isEqualTo:searchValue inContext:context]; \n    [request setFetchLimit:1];\n    \n    return request;\n}\n\n+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context\n{\n    return [self MR_requestAllSortedBy:sortTerm\n                             ascending:ascending\n                         withPredicate:nil\n                             inContext:context];\n}\n\n+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending\n{\n\treturn [self MR_requestAllSortedBy:sortTerm\n                             ascending:ascending\n                             inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n}\n\n+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context\n{\n\tNSFetchRequest *request = [self MR_requestAllInContext:context];\n\tif (searchTerm)\n    {\n        [request setPredicate:searchTerm];\n    }\n\t[request setFetchBatchSize:[self MR_defaultBatchSize]];\n\t\n    NSMutableArray* sortDescriptors = [[NSMutableArray alloc] init];\n    NSArray* sortKeys = [sortTerm componentsSeparatedByString:@\",\"];\n    for (NSString* sortKey in sortKeys) \n    {\n        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:ascending];\n        [sortDescriptors addObject:sortDescriptor];\n    }\n    \n\t[request setSortDescriptors:sortDescriptors];\n    \n\treturn request;\n}\n\n+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm;\n{\n\tNSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm\n                                                ascending:ascending\n                                            withPredicate:searchTerm \n                                                inContext:[NSManagedObjectContext MR_contextForCurrentThread]];\n\treturn request;\n}\n\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h",
    "content": "//\n//  NSManagedObjectContext+MagicalObserving.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/9/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n\n@interface NSManagedObjectContext (MagicalObserving)\n\n- (void) MR_observeContext:(NSManagedObjectContext *)otherContext;\n- (void) MR_stopObservingContext:(NSManagedObjectContext *)otherContext;\n- (void) MR_observeContextOnMainThread:(NSManagedObjectContext *)otherContext;\n\n- (void) MR_observeiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n- (void) MR_stopObservingiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m",
    "content": "//\n//  NSManagedObjectContext+MagicalObserving.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/9/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSManagedObjectContext+MagicalObserving.h\"\n#import \"NSManagedObjectContext+MagicalRecord.h\"\n#import \"MagicalRecord.h\"\n#import \"MagicalRecord+iCloud.h\"\n\nNSString * const kMagicalRecordDidMergeChangesFromiCloudNotification = @\"kMagicalRecordDidMergeChangesFromiCloudNotification\";\n\n\n@implementation NSManagedObjectContext (MagicalObserving)\n\n#pragma mark - Context Observation Helpers\n\n- (void) MR_observeContext:(NSManagedObjectContext *)otherContext\n{\n    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n\t[notificationCenter addObserver:self\n                           selector:@selector(MR_mergeChangesFromNotification:)\n                               name:NSManagedObjectContextDidSaveNotification\n                             object:otherContext];\n}\n\n- (void) MR_observeContextOnMainThread:(NSManagedObjectContext *)otherContext\n{\n    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n\t[notificationCenter addObserver:self\n                           selector:@selector(MR_mergeChangesOnMainThread:)\n                               name:NSManagedObjectContextDidSaveNotification\n                             object:otherContext];\n}\n\n- (void) MR_stopObservingContext:(NSManagedObjectContext *)otherContext\n{\n    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n\n\t[notificationCenter removeObserver:self\n                                  name:NSManagedObjectContextDidSaveNotification\n                                object:otherContext];\n}\n\n#pragma mark - Context iCloud Merge Helpers\n\n- (void) MR_mergeChangesFromiCloud:(NSNotification *)notification;\n{\n    [self performBlock:^{\n        \n        MRLog(@\"Merging changes From iCloud %@context%@\", \n              self == [NSManagedObjectContext MR_defaultContext] ? @\"*** DEFAULT *** \" : @\"\",\n              ([NSThread isMainThread] ? @\" *** on Main Thread ***\" : @\"\"));\n        \n        [self mergeChangesFromContextDidSaveNotification:notification];\n        \n        NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n\n        [notificationCenter postNotificationName:kMagicalRecordDidMergeChangesFromiCloudNotification\n                                          object:self\n                                        userInfo:[notification userInfo]];\n    }];\n}\n\n- (void) MR_mergeChangesFromNotification:(NSNotification *)notification;\n{\n\tMRLog(@\"Merging changes to %@context%@\", \n          self == [NSManagedObjectContext MR_defaultContext] ? @\"*** DEFAULT *** \" : @\"\",\n          ([NSThread isMainThread] ? @\" *** on Main Thread ***\" : @\"\"));\n    \n\t[self mergeChangesFromContextDidSaveNotification:notification];\n}\n\n- (void) MR_mergeChangesOnMainThread:(NSNotification *)notification;\n{\n\tif ([NSThread isMainThread])\n\t{\n\t\t[self MR_mergeChangesFromNotification:notification];\n\t}\n\telse\n\t{\n\t\t[self performSelectorOnMainThread:@selector(MR_mergeChangesFromNotification:) withObject:notification waitUntilDone:YES];\n\t}\n}\n\n- (void) MR_observeiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n{\n    if (![MagicalRecord isICloudEnabled]) return;\n    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n    [notificationCenter addObserver:self\n                           selector:@selector(MR_mergeChangesFromiCloud:)\n                               name:NSPersistentStoreDidImportUbiquitousContentChangesNotification\n                             object:coordinator];\n    \n}\n\n- (void) MR_stopObservingiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n{\n    if (![MagicalRecord isICloudEnabled]) return;\n    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n    [notificationCenter removeObserver:self\n                                  name:NSPersistentStoreDidImportUbiquitousContentChangesNotification\n                                object:coordinator];\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h",
    "content": "//\n//  NSManagedObjectContext+MagicalRecord.h\n//\n//  Created by Saul Mora on 11/23/09.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#import \"MagicalRecord.h\"\n\nextern NSString * const kMagicalRecordDidMergeChangesFromiCloudNotification;\n\n@interface NSManagedObjectContext (MagicalRecord)\n\n+ (void) MR_initializeDefaultContextWithCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n\n+ (NSManagedObjectContext *) MR_context NS_RETURNS_RETAINED;\n+ (NSManagedObjectContext *) MR_contextWithParent:(NSManagedObjectContext *)parentContext NS_RETURNS_RETAINED;\n+ (NSManagedObjectContext *) MR_newMainQueueContext NS_RETURNS_RETAINED;\n+ (NSManagedObjectContext *) MR_contextWithStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator NS_RETURNS_RETAINED;\n\n+ (void) MR_resetDefaultContext;\n+ (NSManagedObjectContext *) MR_rootSavingContext;\n+ (NSManagedObjectContext *) MR_defaultContext;\n\n- (NSString *) MR_description;\n- (NSString *) MR_parentChain;\n\n@property (nonatomic, copy, setter = MR_setWorkingName:) NSString *MR_workingName;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m",
    "content": "//\n//  NSManagedObjectContext+MagicalRecord.m\n//\n//  Created by Saul Mora on 11/23/09.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#import \"CoreData+MagicalRecord.h\"\n#import <objc/runtime.h>\n\nstatic NSManagedObjectContext *rootSavingContext = nil;\nstatic NSManagedObjectContext *defaultManagedObjectContext_ = nil;\nstatic id iCloudSetupNotificationObserver = nil;\n\nstatic NSString * const kMagicalRecordNSManagedObjectContextWorkingName = @\"kNSManagedObjectContextWorkingName\";\n\n@interface NSManagedObjectContext (MagicalRecordInternal)\n\n- (void) MR_mergeChangesFromNotification:(NSNotification *)notification;\n- (void) MR_mergeChangesOnMainThread:(NSNotification *)notification;\n+ (void) MR_setDefaultContext:(NSManagedObjectContext *)moc;\n+ (void) MR_setRootSavingContext:(NSManagedObjectContext *)context;\n\n@end\n\n\n@implementation NSManagedObjectContext (MagicalRecord)\n\n+ (void) MR_cleanUp;\n{\n    [self MR_setDefaultContext:nil];\n    [self MR_setRootSavingContext:nil];\n}\n\n- (NSString *) MR_description;\n{\n    NSString *contextLabel = [NSString stringWithFormat:@\"*** %@ ***\", [self MR_workingName]];\n    NSString *onMainThread = [NSThread isMainThread] ? @\"*** MAIN THREAD ***\" : @\"*** BACKGROUND THREAD ***\";\n\n    return [NSString stringWithFormat:@\"<%@ (%p): %@> on %@\", NSStringFromClass([self class]), self, contextLabel, onMainThread];\n}\n\n- (NSString *) MR_parentChain;\n{\n    NSMutableString *familyTree = [@\"\\n\" mutableCopy];\n    NSManagedObjectContext *currentContext = self;\n    do\n    {\n        [familyTree appendFormat:@\"- %@ (%p) %@\\n\", [currentContext MR_workingName], currentContext, (currentContext == self ? @\"(*)\" : @\"\")];\n    }\n    while ((currentContext = [currentContext parentContext]));\n\n    return [NSString stringWithString:familyTree];\n}\n\n+ (NSManagedObjectContext *) MR_defaultContext\n{\n\t@synchronized (self)\n\t{\n        NSAssert(defaultManagedObjectContext_ != nil, @\"Default Context is nil! Did you forget to initialize the Core Data Stack?\");\n        return defaultManagedObjectContext_;\n\t}\n}\n\n+ (void) MR_setDefaultContext:(NSManagedObjectContext *)moc\n{\n    if (defaultManagedObjectContext_)\n    {\n        [[NSNotificationCenter defaultCenter] removeObserver:defaultManagedObjectContext_];\n    }\n    \n    NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_defaultStoreCoordinator];\n    if (iCloudSetupNotificationObserver)\n    {\n        [[NSNotificationCenter defaultCenter] removeObserver:iCloudSetupNotificationObserver];\n        iCloudSetupNotificationObserver = nil;\n    }\n    \n    if ([MagicalRecord isICloudEnabled]) \n    {\n        [defaultManagedObjectContext_ MR_stopObservingiCloudChangesInCoordinator:coordinator];\n    }\n\n    defaultManagedObjectContext_ = moc;\n    [defaultManagedObjectContext_ MR_setWorkingName:@\"DEFAULT\"];\n    \n    if ((defaultManagedObjectContext_ != nil) && ([self MR_rootSavingContext] != nil)) {\n        [[NSNotificationCenter defaultCenter] addObserver:self\n                                                 selector:@selector(rootContextChanged:)\n                                                     name:NSManagedObjectContextDidSaveNotification\n                                                   object:[self MR_rootSavingContext]];\n    }\n    \n    [moc MR_obtainPermanentIDsBeforeSaving];\n    if ([MagicalRecord isICloudEnabled])\n    {\n        [defaultManagedObjectContext_ MR_observeiCloudChangesInCoordinator:coordinator];\n    }\n    else\n    {\n        // If icloud is NOT enabled at the time of this method being called, listen for it to be setup later, and THEN set up observing cloud changes\n        iCloudSetupNotificationObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kMagicalRecordPSCDidCompleteiCloudSetupNotification\n                                                                           object:nil\n                                                                            queue:[NSOperationQueue mainQueue]\n                                                                       usingBlock:^(NSNotification *note) {\n                                                                           [[NSManagedObjectContext MR_defaultContext] MR_observeiCloudChangesInCoordinator:coordinator];\n                                                                       }];        \n    }\n    MRLog(@\"Set Default Context: %@\", defaultManagedObjectContext_);\n}\n\n+ (void)rootContextChanged:(NSNotification *)notification {\n    if ([NSThread isMainThread] == NO) {\n        dispatch_async(dispatch_get_main_queue(), ^{\n            [self rootContextChanged:notification];\n        });\n        \n        return;\n    }\n    \n    [[self MR_defaultContext] mergeChangesFromContextDidSaveNotification:notification];\n}\n\n+ (NSManagedObjectContext *) MR_rootSavingContext;\n{\n    return rootSavingContext;\n}\n\n+ (void) MR_setRootSavingContext:(NSManagedObjectContext *)context;\n{\n    if (rootSavingContext)\n    {\n        [[NSNotificationCenter defaultCenter] removeObserver:rootSavingContext];\n    }\n    \n    rootSavingContext = context;\n    [context MR_obtainPermanentIDsBeforeSaving];\n    [rootSavingContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];\n    [rootSavingContext MR_setWorkingName:@\"BACKGROUND SAVING (ROOT)\"];\n    MRLog(@\"Set Root Saving Context: %@\", rootSavingContext);\n}\n\n+ (void) MR_initializeDefaultContextWithCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n{\n    if (defaultManagedObjectContext_ == nil)\n    {\n        NSManagedObjectContext *rootContext = [self MR_contextWithStoreCoordinator:coordinator];\n        [self MR_setRootSavingContext:rootContext];\n        \n        NSManagedObjectContext *defaultContext = [self MR_newMainQueueContext];\n        [self MR_setDefaultContext:defaultContext];\n        \n        [defaultContext setParentContext:rootContext];\n    }\n}\n\n+ (void) MR_resetDefaultContext\n{\n    void (^resetBlock)(void) = ^{\n        [[NSManagedObjectContext MR_defaultContext] reset];\n    };\n    \n    dispatch_async(dispatch_get_main_queue(), resetBlock);\n}\n\n+ (NSManagedObjectContext *) MR_contextWithoutParent;\n{\n    NSManagedObjectContext *context = [[self alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];\n    return context;\n}\n\n+ (NSManagedObjectContext *) MR_context;\n{\n    NSManagedObjectContext *context = [[self alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];\n    [context setParentContext:[self MR_defaultContext]];\n    return context;\n}\n\n+ (NSManagedObjectContext *) MR_contextWithParent:(NSManagedObjectContext *)parentContext;\n{\n    NSManagedObjectContext *context = [self MR_contextWithoutParent];\n    [context setParentContext:parentContext];\n    [context MR_obtainPermanentIDsBeforeSaving];\n    return context;\n}\n\n+ (NSManagedObjectContext *) MR_newMainQueueContext;\n{\n    NSManagedObjectContext *context = [[self alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];\n    MRLog(@\"Created Main Queue Context: %@\", context);\n    return context;    \n}\n\n+ (NSManagedObjectContext *) MR_contextWithStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n{\n\tNSManagedObjectContext *context = nil;\n    if (coordinator != nil)\n\t{\n        context = [self MR_contextWithoutParent];\n        [context performBlockAndWait:^{\n            [context setPersistentStoreCoordinator:coordinator];\n        }];\n        \n        MRLog(@\"-> Created Context %@\", [context MR_workingName]);\n    }\n    return context;\n}\n\n- (void) MR_obtainPermanentIDsBeforeSaving;\n{\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(MR_contextWillSave:)\n                                                 name:NSManagedObjectContextWillSaveNotification\n                                               object:self];\n    \n    \n}\n\n- (void) MR_contextWillSave:(NSNotification *)notification\n{\n    NSManagedObjectContext *context = [notification object];\n    NSSet *insertedObjects = [context insertedObjects];\n\n    if ([insertedObjects count])\n    {\n        MRLog(@\"Context %@ is about to save. Obtaining permanent IDs for new %lu inserted objects\", [context MR_workingName], (unsigned long)[insertedObjects count]);\n        NSError *error = nil;\n        BOOL success = [context obtainPermanentIDsForObjects:[insertedObjects allObjects] error:&error];\n        if (!success)\n        {\n            [MagicalRecord handleErrors:error];\n        }\n    }\n}\n\n- (void) MR_setWorkingName:(NSString *)workingName;\n{\n    [[self userInfo] setObject:workingName forKey:kMagicalRecordNSManagedObjectContextWorkingName];\n}\n\n- (NSString *) MR_workingName;\n{\n    NSString *workingName = [[self userInfo] objectForKey:kMagicalRecordNSManagedObjectContextWorkingName];\n    if (nil == workingName)\n    {\n        workingName = @\"UNNAMED\";\n    }\n    return workingName;\n}\n\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h",
    "content": "//\n//  NSManagedObjectContext+MagicalSaves.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/9/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n\ntypedef NS_OPTIONS(NSUInteger, MRSaveContextOptions) {\n    MRSaveParentContexts = 1,   ///< When saving, continue saving parent contexts until the changes are present in the persistent store\n    MRSaveSynchronously = 2     ///< Peform saves synchronously, blocking execution on the current thread until the save is complete\n};\n\ntypedef void (^MRSaveCompletionHandler)(BOOL success, NSError *error);\n\n@interface NSManagedObjectContext (MagicalSaves)\n\n/// \\brief      Asynchronously save changes in the current context and it's parent\n/// \\param       completion  Completion block that is called after the save has completed. The block is passed a success state as a `BOOL` and an `NSError` instance if an error occurs. Always called on the main queue.\n/// \\discussion Executes a save on the current context's dispatch queue asynchronously. This method only saves the current context, and the parent of the current context if one is set. The completion block will always be called on the main queue.\n- (void) MR_saveOnlySelfWithCompletion:(MRSaveCompletionHandler)completion;\n\n/// \\brief      Asynchronously save changes in the current context all the way back to the persistent store\n/// \\param       completion  Completion block that is called after the save has completed. The block is passed a success state as a `BOOL` and an `NSError` instance if an error occurs. Always called on the main queue.\n/// \\discussion Executes asynchronous saves on the current context, and any ancestors, until the changes have been persisted to the assigned persistent store. The completion block will always be called on the main queue.\n- (void) MR_saveToPersistentStoreWithCompletion:(MRSaveCompletionHandler)completion;\n\n/// \\brief      Synchronously save changes in the current context and it's parent\n/// \\discussion Executes a save on the current context's dispatch queue. This method only saves the current context, and the parent of the current context if one is set. The method will not return until the save is complete.\n- (void) MR_saveOnlySelfAndWait;\n\n/// \\brief      Synchronously save changes in the current context all the way back to the persistent store\n/// \\discussion Executes saves on the current context, and any ancestors, until the changes have been persisted to the assigned persistent store. The method will not return until the save is complete.\n- (void) MR_saveToPersistentStoreAndWait;\n\n/// \\brief       Save the current context with options\n/// \\param       mask        bitmasked options for the save process\n/// \\param       completion  Completion block that is called after the save has completed. The block is passed a success state as a `BOOL` and an `NSError` instance if an error occurs. Always called on the main queue.\n/// \\discussion  All other save methods are conveniences to this method.\n - (void) MR_saveWithOptions:(MRSaveContextOptions)mask completion:(MRSaveCompletionHandler)completion;\n\n\n/* DEPRECATION NOTICE:\n * The following methods are deprecated, but remain in place for backwards compatibility until the next major version (3.x)\n */\n\n/// \\brief      Synchronously save changes in the current context all the way back to the persistent store\n/// \\discussion Replaced by \\MR_saveToPersistentStoreAndWait\n/// \\deprecated\n- (void) MR_save __attribute__((deprecated));\n\n/// \\brief      Synchronously save changes in the current context all the way back to the persistent store\n/// \\param      errorCallback Block that is called if an error is encountered while saving. Always called on the main thread.\n/// \\deprecated\n- (void) MR_saveWithErrorCallback:(void(^)(NSError *error))errorCallback __attribute__((deprecated));\n\n/// \\brief      Asynchronously save changes in the current context and it's parent\n/// \\param      completion  Completion block that is called after the save has completed. Always called on the main queue.\n/// \\deprecated\n- (void) MR_saveInBackgroundCompletion:(void (^)(void))completion __attribute__((deprecated));\n\n/// \\brief      Asynchronously save changes in the current context and it's parent\n/// \\param      errorCallback Block that is called if an error is encountered while saving. Always called on the main thread.\n/// \\deprecated\n- (void) MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback __attribute__((deprecated));\n\n/// \\brief      Asynchronously save changes in the current context and it's parent\n/// \\param      errorCallback Block that is called if an error is encountered while saving. Always called on the main thread.\n/// \\param      completion  Completion block that is called after the save has completed. Always called on the main queue.\n/// \\deprecated\n- (void) MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion __attribute__((deprecated));\n\n/// \\brief      Asynchronously save changes in the current context all the way back to the persistent store\n/// \\discussion Replaced by \\MR_saveToPersistentStoreWithCompletion:\n/// \\deprecated\n- (void) MR_saveNestedContexts __attribute__((deprecated));\n\n/// \\brief      Asynchronously save changes in the current context all the way back to the persistent store\n/// \\param      errorCallback Block that is called if an error is encountered while saving. Always called on the main thread.\n/// \\discussion Replaced by \\MR_saveToPersistentStoreWithCompletion:\n/// \\deprecated\n- (void) MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback __attribute__((deprecated));\n\n/// \\brief      Asynchronously save changes in the current context all the way back to the persistent store\n/// \\param      errorCallback Block that is called if an error is encountered while saving. Always called on the main thread.\n/// \\param      completion  Completion block that is called after the save has completed. Always called on the main queue.\n/// \\discussion Replaced by \\MR_saveToPersistentStoreWithCompletion:\n/// \\deprecated\n- (void) MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion __attribute__((deprecated));\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m",
    "content": "//\n//  NSManagedObjectContext+MagicalSaves.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/9/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSManagedObjectContext+MagicalSaves.h\"\n#import \"MagicalRecord+ErrorHandling.h\"\n#import \"NSManagedObjectContext+MagicalRecord.h\"\n#import \"MagicalRecord.h\"\n\n@implementation NSManagedObjectContext (MagicalSaves)\n\n- (void)MR_saveOnlySelfWithCompletion:(MRSaveCompletionHandler)completion;\n{\n    [self MR_saveWithOptions:0 completion:completion];\n}\n\n- (void)MR_saveOnlySelfAndWait;\n{\n    [self MR_saveWithOptions:MRSaveSynchronously completion:nil];\n}\n\n- (void) MR_saveToPersistentStoreWithCompletion:(MRSaveCompletionHandler)completion;\n{\n    [self MR_saveWithOptions:MRSaveParentContexts completion:completion];\n}\n\n- (void) MR_saveToPersistentStoreAndWait;\n{\n    [self MR_saveWithOptions:MRSaveParentContexts | MRSaveSynchronously completion:nil];\n}\n\n- (void)MR_saveWithOptions:(MRSaveContextOptions)mask completion:(MRSaveCompletionHandler)completion;\n{\n    BOOL syncSave           = ((mask & MRSaveSynchronously) == MRSaveSynchronously);\n    BOOL saveParentContexts = ((mask & MRSaveParentContexts) == MRSaveParentContexts);\n\n    if (![self hasChanges]) {\n        MRLog(@\"NO CHANGES IN ** %@ ** CONTEXT - NOT SAVING\", [self MR_workingName]);\n\n        if (completion)\n        {\n            dispatch_async(dispatch_get_main_queue(), ^{\n                completion(NO, nil);\n            });\n        }\n        \n        return;\n    }\n\n    MRLog(@\"→ Saving %@\", [self MR_description]);\n    MRLog(@\"→ Save Parents? %@\", @(saveParentContexts));\n    MRLog(@\"→ Save Synchronously? %@\", @(syncSave));\n\n    id saveBlock = ^{\n        NSError *error = nil;\n        BOOL     saved = NO;\n\n        @try\n        {\n            saved = [self save:&error];\n        }\n        @catch(NSException *exception)\n        {\n            MRLog(@\"Unable to perform save: %@\", (id)[exception userInfo] ? : (id)[exception reason]);\n        }\n\n        @finally\n        {\n            if (!saved) {\n                [MagicalRecord handleErrors:error];\n\n                if (completion) {\n                    dispatch_async(dispatch_get_main_queue(), ^{\n                        completion(saved, error);\n                    });\n                }\n            } else {\n                // If we're the default context, save to disk too (the user expects it to persist)\n                BOOL isDefaultContext = (self == [[self class] MR_defaultContext]);\n                BOOL shouldSaveParentContext = ((YES == saveParentContexts) || isDefaultContext);\n                \n                if (shouldSaveParentContext && [self parentContext]) {\n                    [[self parentContext] MR_saveWithOptions:mask completion:completion];\n                }\n                // If we should not save the parent context, or there is not a parent context to save (root context), call the completion block\n                else {\n                    MRLog(@\"→ Finished saving: %@\", [self MR_description]);\n                    \n                    if (completion) {\n                        dispatch_async(dispatch_get_main_queue(), ^{\n                            completion(saved, error);\n                        });\n                    }\n                }\n            }\n        }\n    };\n\n    if (YES == syncSave) {\n        [self performBlockAndWait:saveBlock];\n    } else {\n        [self performBlock:saveBlock];\n    }\n}\n\n#pragma mark - Deprecated methods\n// These methods will be removed in MagicalRecord 3.0\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-implementations\"\n\n- (void)MR_save;\n{\n    [self MR_saveToPersistentStoreAndWait];\n}\n\n- (void)MR_saveWithErrorCallback:(void (^)(NSError *error))errorCallback;\n{\n    [self MR_saveWithOptions:MRSaveSynchronously|MRSaveParentContexts completion:^(BOOL success, NSError *error) {\n        if (!success) {\n            if (errorCallback) {\n                errorCallback(error);\n            }\n        }\n    }];\n}\n\n- (void)MR_saveInBackgroundCompletion:(void (^)(void))completion;\n{\n    [self MR_saveOnlySelfWithCompletion:^(BOOL success, NSError *error) {\n        if (success) {\n            if (completion) {\n                completion();\n            }\n        }\n    }];\n}\n\n- (void)MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback;\n{\n    [self MR_saveOnlySelfWithCompletion:^(BOOL success, NSError *error) {\n        if (!success) {\n            if (errorCallback) {\n                errorCallback(error);\n            }\n        }\n    }];\n}\n\n- (void)MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion;\n{\n    [self MR_saveOnlySelfWithCompletion:^(BOOL success, NSError *error) {\n        if (success) {\n            if (completion) {\n                completion();\n            }\n        } else {\n            if (errorCallback) {\n                errorCallback(error);\n            }\n        }\n    }];\n}\n\n- (void)MR_saveNestedContexts;\n{\n    [self MR_saveToPersistentStoreWithCompletion:nil];\n}\n\n- (void)MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback;\n{\n    [self MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {\n        if (!success) {\n            if (errorCallback) {\n                errorCallback(error);\n            }\n        }\n    }];\n}\n\n- (void)MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion;\n{\n    [self MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {\n        if (success) {\n            if (completion) {\n                completion();\n            }\n        } else {\n            if (errorCallback) {\n                errorCallback(error);\n            }\n        }\n    }];\n}\n\n#pragma clang diagnostic pop // ignored \"-Wdeprecated-implementations\"\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h",
    "content": "//\n//  NSManagedObjectContext+MagicalThreading.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/9/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import <CoreData/CoreData.h>\n\n@interface NSManagedObjectContext (MagicalThreading)\n\n+ (NSManagedObjectContext *) MR_contextForCurrentThread;\n+ (void) MR_resetContextForCurrentThread;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m",
    "content": "//\n//  NSManagedObjectContext+MagicalThreading.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/9/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"NSManagedObjectContext+MagicalThreading.h\"\n#import \"NSManagedObject+MagicalRecord.h\"\n#import \"NSManagedObjectContext+MagicalRecord.h\"\n\nstatic NSString const * kMagicalRecordManagedObjectContextKey = @\"MagicalRecord_NSManagedObjectContextForThreadKey\";\n\n@implementation NSManagedObjectContext (MagicalThreading)\n\n+ (void)MR_resetContextForCurrentThread\n{\n    [[NSManagedObjectContext MR_contextForCurrentThread] reset];\n}\n\n+ (NSManagedObjectContext *) MR_contextForCurrentThread;\n{\n\tif ([NSThread isMainThread])\n\t{\n\t\treturn [self MR_defaultContext];\n\t}\n\telse\n\t{\n\t\tNSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary];\n\t\tNSManagedObjectContext *threadContext = [threadDict objectForKey:kMagicalRecordManagedObjectContextKey];\n\t\tif (threadContext == nil)\n\t\t{\n\t\t\tthreadContext = [self MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];\n\t\t\t[threadDict setObject:threadContext forKey:kMagicalRecordManagedObjectContextKey];\n\t\t}\n\t\treturn threadContext;\n\t}\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h",
    "content": "//\n//  NSManagedObjectModel+MagicalRecord.h\n//\n//  Created by Saul Mora on 3/11/10.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"MagicalRecord.h\"\n\n\n@interface NSManagedObjectModel (MagicalRecord)\n\n+ (NSManagedObjectModel *) MR_defaultManagedObjectModel;\n\n+ (void) MR_setDefaultManagedObjectModel:(NSManagedObjectModel *)newDefaultModel;\n\n+ (NSManagedObjectModel *) MR_mergedObjectModelFromMainBundle;\n+ (NSManagedObjectModel *) MR_newManagedObjectModelNamed:(NSString *)modelFileName NS_RETURNS_RETAINED;\n+ (NSManagedObjectModel *) MR_managedObjectModelNamed:(NSString *)modelFileName;\n+ (NSManagedObjectModel *) MR_newModelNamed:(NSString *) modelName inBundleNamed:(NSString *) bundleName NS_RETURNS_RETAINED;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m",
    "content": "//\n//  NSManagedObjectModel+MagicalRecord.m\n//\n//  Created by Saul Mora on 3/11/10.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n//#import \"NSManagedObjectModel+MagicalRecord.h\"\n#import \"CoreData+MagicalRecord.h\"\n\n\nstatic NSManagedObjectModel *defaultManagedObjectModel_ = nil;\n\n@implementation NSManagedObjectModel (MagicalRecord)\n\n+ (NSManagedObjectModel *) MR_defaultManagedObjectModel\n{\n\tif (defaultManagedObjectModel_ == nil && [MagicalRecord shouldAutoCreateManagedObjectModel])\n\t{\n        [self MR_setDefaultManagedObjectModel:[self MR_mergedObjectModelFromMainBundle]];\n\t}\n\treturn defaultManagedObjectModel_;\n}\n\n+ (void) MR_setDefaultManagedObjectModel:(NSManagedObjectModel *)newDefaultModel\n{\n\tdefaultManagedObjectModel_ = newDefaultModel;\n}\n\n+ (NSManagedObjectModel *) MR_mergedObjectModelFromMainBundle;\n{\n    return [self mergedModelFromBundles:nil];\n}\n\n+ (NSManagedObjectModel *) MR_newModelNamed:(NSString *) modelName inBundleNamed:(NSString *) bundleName\n{\n    NSString *path = [[NSBundle mainBundle] pathForResource:[modelName stringByDeletingPathExtension] \n                                                     ofType:[modelName pathExtension] \n                                                inDirectory:bundleName];\n    NSURL *modelUrl = [NSURL fileURLWithPath:path];\n    \n    NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl];\n    \n    return mom;\n}\n\n+ (NSManagedObjectModel *) MR_newManagedObjectModelNamed:(NSString *)modelFileName\n{\n\tNSString *path = [[NSBundle mainBundle] pathForResource:[modelFileName stringByDeletingPathExtension] \n                                                     ofType:[modelFileName pathExtension]];\n\tNSURL *momURL = [NSURL fileURLWithPath:path];\n\t\n\tNSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];\n\treturn model;\n}\n\n+ (NSManagedObjectModel *) MR_managedObjectModelNamed:(NSString *)modelFileName\n{\n    NSManagedObjectModel *model = [self MR_newManagedObjectModelNamed:modelFileName];\n\treturn model;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h",
    "content": "//\n//  NSPersistentStore+MagicalRecord.h\n//\n//  Created by Saul Mora on 3/11/10.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#import \"MagicalRecord.h\"\n\n// option to autodelete store if it already exists\n\nextern NSString * const kMagicalRecordDefaultStoreFileName;\n\n\n@interface NSPersistentStore (MagicalRecord)\n\n+ (NSURL *) MR_defaultLocalStoreUrl;\n\n+ (NSPersistentStore *) MR_defaultPersistentStore;\n+ (void) MR_setDefaultPersistentStore:(NSPersistentStore *) store;\n\n+ (NSURL *) MR_urlForStoreName:(NSString *)storeFileName;\n+ (NSURL *) MR_cloudURLForUbiqutiousContainer:(NSString *)bucketName;\n\n@end\n\n\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m",
    "content": "//\n//  NSPersistentStore+MagicalRecord.m\n//\n//  Created by Saul Mora on 3/11/10.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n//#import \"NSPersistentStore+MagicalRecord.h\"\n#import \"CoreData+MagicalRecord.h\"\n\nNSString * const kMagicalRecordDefaultStoreFileName = @\"CoreDataStore.sqlite\";\n\nstatic NSPersistentStore *defaultPersistentStore_ = nil;\n\n\n@implementation NSPersistentStore (MagicalRecord)\n\n+ (NSPersistentStore *) MR_defaultPersistentStore\n{\n\treturn defaultPersistentStore_;\n}\n\n+ (void) MR_setDefaultPersistentStore:(NSPersistentStore *) store\n{\n\tdefaultPersistentStore_ = store;\n}\n\n+ (NSString *) MR_directory:(int) type\n{    \n    return [NSSearchPathForDirectoriesInDomains(type, NSUserDomainMask, YES) lastObject];\n}\n\n+ (NSString *)MR_applicationDocumentsDirectory \n{\n\treturn [self MR_directory:NSDocumentDirectory];\n}\n\n+ (NSString *)MR_applicationStorageDirectory\n{\n    NSString *applicationName = [[[NSBundle mainBundle] infoDictionary] valueForKey:(NSString *)kCFBundleNameKey];\n    return [[self MR_directory:NSApplicationSupportDirectory] stringByAppendingPathComponent:applicationName];\n}\n\n+ (NSURL *) MR_urlForStoreName:(NSString *)storeFileName\n{\n\tNSArray *paths = [NSArray arrayWithObjects:[self MR_applicationDocumentsDirectory], [self MR_applicationStorageDirectory], nil];\n    NSFileManager *fm = [[NSFileManager alloc] init];\n    \n    for (NSString *path in paths) \n    {\n        NSString *filepath = [path stringByAppendingPathComponent:storeFileName];\n        if ([fm fileExistsAtPath:filepath])\n        {\n            return [NSURL fileURLWithPath:filepath];\n        }\n    }\n\n    //set default url\n    return [NSURL fileURLWithPath:[[self MR_applicationStorageDirectory] stringByAppendingPathComponent:storeFileName]];\n}\n\n+ (NSURL *) MR_cloudURLForUbiqutiousContainer:(NSString *)bucketName;\n{\n    NSFileManager *fileManager = [[NSFileManager alloc] init];\n    NSURL *cloudURL = nil;\n    if ([fileManager respondsToSelector:@selector(URLForUbiquityContainerIdentifier:)])\n    {\n        cloudURL = [fileManager URLForUbiquityContainerIdentifier:bucketName];\n    }\n\n    return cloudURL;\n}\n\n+ (NSURL *) MR_defaultLocalStoreUrl\n{\n    return [self MR_urlForStoreName:kMagicalRecordDefaultStoreFileName];\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h",
    "content": "//\n//  NSPersistentStoreCoordinator+MagicalRecord.h\n//\n//  Created by Saul Mora on 3/11/10.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#import \"MagicalRecord.h\"\n#import \"NSPersistentStore+MagicalRecord.h\"\n\nextern NSString * const kMagicalRecordPSCDidCompleteiCloudSetupNotification;\n\n@interface NSPersistentStoreCoordinator (MagicalRecord)\n\n+ (NSPersistentStoreCoordinator *) MR_defaultStoreCoordinator;\n+ (void) MR_setDefaultStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithInMemoryStore;\n\n+ (NSPersistentStoreCoordinator *) MR_newPersistentStoreCoordinator NS_RETURNS_RETAINED;\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(NSString *)storeFileName;\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *)storeFileName;\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithPersistentStore:(NSPersistentStore *)persistentStore;\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent;\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionHandler;\n\n- (NSPersistentStore *) MR_addInMemoryStore;\n- (NSPersistentStore *) MR_addAutoMigratingSqliteStoreNamed:(NSString *) storeFileName;\n- (NSPersistentStore *) MR_addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options;\n\n- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent;\n- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m",
    "content": "//\n//  NSPersistentStoreCoordinator+MagicalRecord.m\n//\n//  Created by Saul Mora on 3/11/10.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#import \"CoreData+MagicalRecord.h\"\n\nstatic NSPersistentStoreCoordinator *defaultCoordinator_ = nil;\nNSString * const kMagicalRecordPSCDidCompleteiCloudSetupNotification = @\"kMagicalRecordPSCDidCompleteiCloudSetupNotification\";\n\n@interface NSDictionary (MagicalRecordMerging)\n\n- (NSMutableDictionary*) MR_dictionaryByMergingDictionary:(NSDictionary*)d; \n\n@end \n\n@interface MagicalRecord (iCloudPrivate)\n\n+ (void) setICloudEnabled:(BOOL)enabled;\n\n@end\n\n@implementation NSPersistentStoreCoordinator (MagicalRecord)\n\n+ (NSPersistentStoreCoordinator *) MR_defaultStoreCoordinator\n{\n    if (defaultCoordinator_ == nil && [MagicalRecord shouldAutoCreateDefaultPersistentStoreCoordinator])\n    {\n        [self MR_setDefaultStoreCoordinator:[self MR_newPersistentStoreCoordinator]];\n    }\n\treturn defaultCoordinator_;\n}\n\n+ (void) MR_setDefaultStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator\n{\n\tdefaultCoordinator_ = coordinator;\n    \n    if (defaultCoordinator_ != nil)\n    {\n        NSArray *persistentStores = [defaultCoordinator_ persistentStores];\n        \n        if ([persistentStores count] && [NSPersistentStore MR_defaultPersistentStore] == nil)\n        {\n            [NSPersistentStore MR_setDefaultPersistentStore:[persistentStores objectAtIndex:0]];\n        }\n    }\n}\n\n- (void) MR_createPathToStoreFileIfNeccessary:(NSURL *)urlForStore\n{\n    NSFileManager *fileManager = [NSFileManager defaultManager];\n    NSURL *pathToStore = [urlForStore URLByDeletingLastPathComponent];\n    \n    NSError *error = nil;\n    BOOL pathWasCreated = [fileManager createDirectoryAtPath:[pathToStore path] withIntermediateDirectories:YES attributes:nil error:&error];\n\n    if (!pathWasCreated) \n    {\n        [MagicalRecord handleErrors:error];\n    }\n}\n\n- (NSPersistentStore *) MR_addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options\n{\n    NSURL *url = [storeFileName isKindOfClass:[NSURL class]] ? storeFileName : [NSPersistentStore MR_urlForStoreName:storeFileName];\n    NSError *error = nil;\n    \n    [self MR_createPathToStoreFileIfNeccessary:url];\n    \n    NSPersistentStore *store = [self addPersistentStoreWithType:NSSQLiteStoreType\n                                                  configuration:nil\n                                                            URL:url\n                                                        options:options\n                                                          error:&error];\n    \n    if (!store && [MagicalRecord shouldDeleteStoreOnModelMismatch])\n    {\n        BOOL isMigrationError = [error code] == NSPersistentStoreIncompatibleVersionHashError || [error code] == NSMigrationMissingSourceModelError;\n        if ([[error domain] isEqualToString:NSCocoaErrorDomain] && isMigrationError)\n        {\n            // Could not open the database, so... kill it!\n            [[NSFileManager defaultManager] removeItemAtURL:url error:nil];\n\n            MRLog(@\"Removed incompatible model version: %@\", [url lastPathComponent]);\n            \n            // Try one more time to create the store\n            store = [self addPersistentStoreWithType:NSSQLiteStoreType\n                                       configuration:nil\n                                                 URL:url\n                                             options:options\n                                               error:&error];\n            if (store)\n            {\n                // If we successfully added a store, remove the error that was initially created\n                error = nil;\n            }\n        }\n                \n        [MagicalRecord handleErrors:error];\n    }\n    return store;\n}\n\n\n#pragma mark - Public Instance Methods\n\n- (NSPersistentStore *) MR_addInMemoryStore\n{\n    NSError *error = nil;\n    NSPersistentStore *store = [self addPersistentStoreWithType:NSInMemoryStoreType\n                                                  configuration:nil \n                                                            URL:nil\n                                                        options:nil\n                                                          error:&error];\n    if (!store)\n    {\n        [MagicalRecord handleErrors:error];\n    }\n    return store;\n}\n\n+ (NSDictionary *) MR_autoMigrationOptions;\n{\n    // Adding the journalling mode recommended by apple\n    NSMutableDictionary *sqliteOptions = [NSMutableDictionary dictionary];\n    [sqliteOptions setObject:@\"WAL\" forKey:@\"journal_mode\"];\n    \n    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:\n                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,\n                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,\n                             sqliteOptions, NSSQLitePragmasOption,\n                             nil];\n    return options;\n}\n\n- (NSPersistentStore *) MR_addAutoMigratingSqliteStoreNamed:(NSString *) storeFileName;\n{\n    NSDictionary *options = [[self class] MR_autoMigrationOptions];\n    return [self MR_addSqliteStoreNamed:storeFileName withOptions:options];\n}\n\n\n#pragma mark - Public Class Methods\n\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *) storeFileName\n{\n    NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel];\n    NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];\n    \n    [coordinator MR_addAutoMigratingSqliteStoreNamed:storeFileName];\n    \n    //HACK: lame solution to fix automigration error \"Migration failed after first pass\"\n    if ([[coordinator persistentStores] count] == 0) \n    {\n        [coordinator performSelector:@selector(MR_addAutoMigratingSqliteStoreNamed:) withObject:storeFileName afterDelay:0.5];\n    }\n\n    return coordinator;\n}\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithInMemoryStore\n{\n\tNSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel];\n\tNSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];\n\n    [coordinator MR_addInMemoryStore];\n\n    return coordinator;\n}\n\n+ (NSPersistentStoreCoordinator *) MR_newPersistentStoreCoordinator\n{\n\tNSPersistentStoreCoordinator *coordinator = [self MR_coordinatorWithSqliteStoreNamed:[MagicalRecord defaultStoreName]];\n\n    return coordinator;\n}\n\n- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent;\n{\n    [self MR_addiCloudContainerID:containerID \n                   contentNameKey:contentNameKey \n                  localStoreNamed:localStoreName\n          cloudStorePathComponent:subPathComponent\n                       completion:nil];\n}\n\n- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock;\n{\n    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n        \n        NSURL *cloudURL = [NSPersistentStore MR_cloudURLForUbiqutiousContainer:containerID];\n        if (subPathComponent) \n        {\n            cloudURL = [cloudURL URLByAppendingPathComponent:subPathComponent];\n        }\n\n        [MagicalRecord setICloudEnabled:cloudURL != nil];\n        \n        NSDictionary *options = [[self class] MR_autoMigrationOptions];\n        if (cloudURL)   //iCloud is available\n        {\n            NSDictionary *iCloudOptions = [NSDictionary dictionaryWithObjectsAndKeys:\n                                           contentNameKey, NSPersistentStoreUbiquitousContentNameKey,\n                                           cloudURL, NSPersistentStoreUbiquitousContentURLKey, nil];\n            options = [options MR_dictionaryByMergingDictionary:iCloudOptions];\n        }\n        else \n        {\n            MRLog(@\"iCloud is not enabled\");\n        }\n        \n        [self lock];\n        [self MR_addSqliteStoreNamed:localStoreName withOptions:options];\n        [self unlock];\n\n        dispatch_async(dispatch_get_main_queue(), ^{\n            if ([NSPersistentStore MR_defaultPersistentStore] == nil)\n            {\n                [NSPersistentStore MR_setDefaultPersistentStore:[[self persistentStores] objectAtIndex:0]];\n            }\n            if (completionBlock)\n            {\n                completionBlock();\n            }\n            NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];\n            [notificationCenter postNotificationName:kMagicalRecordPSCDidCompleteiCloudSetupNotification object:nil];\n        });\n    });   \n}\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID \n                                                        contentNameKey:(NSString *)contentNameKey\n                                                       localStoreNamed:(NSString *)localStoreName\n                                               cloudStorePathComponent:(NSString *)subPathComponent;\n{\n    return [self MR_coordinatorWithiCloudContainerID:containerID \n                                      contentNameKey:contentNameKey\n                                     localStoreNamed:localStoreName\n                             cloudStorePathComponent:subPathComponent\n                                          completion:nil];\n}\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID \n                                                        contentNameKey:(NSString *)contentNameKey\n                                                       localStoreNamed:(NSString *)localStoreName\n                                               cloudStorePathComponent:(NSString *)subPathComponent\n                                                            completion:(void(^)(void))completionHandler;\n{\n    NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel];\n    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];\n    \n    [psc MR_addiCloudContainerID:containerID \n                  contentNameKey:contentNameKey\n                 localStoreNamed:localStoreName\n         cloudStorePathComponent:subPathComponent\n                      completion:completionHandler];\n    \n    return psc;\n}\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithPersistentStore:(NSPersistentStore *)persistentStore;\n{\n    NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel];\n    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];\n    \n    [psc MR_addSqliteStoreNamed:[persistentStore URL] withOptions:nil];\n\n    return psc;\n}\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(NSString *)storeFileName withOptions:(NSDictionary *)options\n{\n    NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel];\n    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];\n    \n    [psc MR_addSqliteStoreNamed:storeFileName withOptions:options];\n    return psc;\n}\n\n+ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(NSString *)storeFileName\n{\n\treturn [self MR_coordinatorWithSqliteStoreNamed:storeFileName withOptions:nil];\n}\n\n@end\n\n\n@implementation NSDictionary (Merging) \n\n- (NSMutableDictionary *) MR_dictionaryByMergingDictionary:(NSDictionary *)d;\n{\n    NSMutableDictionary *mutDict = [self mutableCopy];\n    [mutDict addEntriesFromDictionary:d];\n    return mutDict; \n} \n\n@end \n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+Actions.h",
    "content": "//\n//  MagicalRecord+Actions.h\n//\n//  Created by Saul Mora on 2/24/11.\n//  Copyright 2011 Magical Panda Software. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"NSManagedObjectContext+MagicalRecord.h\"\n#import \"NSManagedObjectContext+MagicalSaves.h\"\n\n@interface MagicalRecord (Actions)\n\n/* For all background saving operations. These calls will be sent to a different thread/queue.\n */\n+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block;\n+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion;\n\n/* For saving on the current thread as the caller, only with a seperate context. Useful when you're managing your own threads/queues and need a serial call to create or change data\n */\n+ (void) saveWithBlockAndWait:(void(^)(NSManagedObjectContext *localContext))block;\n\n/*\n If you want to reuse the context on the current thread, use these methods.\n */\n+ (void) saveUsingCurrentThreadContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion;\n+ (void) saveUsingCurrentThreadContextWithBlockAndWait:(void (^)(NSManagedObjectContext *localContext))block;\n\n\n/* DEPRECATION NOTICE:\n * The following methods are deprecated, but remain in place for backwards compatibility until the next major version (3.x)\n */\n\n/* For all background saving operations. These calls will be sent to a different thread/queue.\n */\n+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block __attribute__((deprecated));\n+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(void(^)(void))completion __attribute__((deprecated));\n\n/*\n If you want to reuse the context on the current thread, use this method.\n */\n+ (void) saveInBackgroundUsingCurrentContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(void (^)(void))completion errorHandler:(void (^)(NSError *error))errorHandler __attribute__((deprecated));\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+Actions.m",
    "content": "//\n//  MagicalRecord+Actions.m\n//\n//  Created by Saul Mora on 2/24/11.\n//  Copyright 2011 Magical Panda Software. All rights reserved.\n//\n\n#import \"CoreData+MagicalRecord.h\"\n#import \"NSManagedObjectContext+MagicalRecord.h\"\n\n\n@implementation MagicalRecord (Actions)\n\n#pragma mark - Asynchronous saving\n\n+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block;\n{\n    [self saveWithBlock:block completion:nil];\n}\n\n+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion;\n{\n    NSManagedObjectContext *mainContext  = [NSManagedObjectContext MR_rootSavingContext];\n    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:mainContext];\n\n    [localContext performBlock:^{\n        if (block) {\n            block(localContext);\n        }\n\n        [localContext MR_saveWithOptions:MRSaveParentContexts completion:completion];\n    }];\n}\n\n+ (void) saveUsingCurrentThreadContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion;\n{\n    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];\n\n    [localContext performBlock:^{\n        if (block) {\n            block(localContext);\n        }\n\n        [localContext MR_saveWithOptions:MRSaveParentContexts completion:completion];\n    }];\n}\n\n\n#pragma mark - Synchronous saving\n\n+ (void) saveWithBlockAndWait:(void(^)(NSManagedObjectContext *localContext))block;\n{\n    NSManagedObjectContext *mainContext  = [NSManagedObjectContext MR_rootSavingContext];\n    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:mainContext];\n\n    [localContext performBlockAndWait:^{\n        if (block) {\n            block(localContext);\n        }\n\n        [localContext MR_saveWithOptions:MRSaveParentContexts|MRSaveSynchronously completion:nil];\n    }];\n}\n\n+ (void) saveUsingCurrentThreadContextWithBlockAndWait:(void (^)(NSManagedObjectContext *localContext))block;\n{\n    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];\n\n    [localContext performBlockAndWait:^{\n        if (block) {\n            block(localContext);\n        }\n\n        [localContext MR_saveWithOptions:MRSaveParentContexts|MRSaveSynchronously completion:nil];\n    }];\n}\n\n\n#pragma mark - Deprecated methods\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-implementations\"\n\n+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block\n{\n    [[self class] saveWithBlock:block completion:nil];\n}\n\n+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(void(^)(void))completion\n{\n    NSManagedObjectContext *mainContext  = [NSManagedObjectContext MR_defaultContext];\n    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:mainContext];\n\n    [localContext performBlock:^{\n        if (block)\n        {\n            block(localContext);\n        }\n\n        [localContext MR_saveToPersistentStoreAndWait];\n\n        if (completion)\n        {\n            completion();\n        }\n    }];\n}\n\n+ (void) saveInBackgroundUsingCurrentContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(void (^)(void))completion errorHandler:(void (^)(NSError *error))errorHandler;\n{\n    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];\n\n    [localContext performBlock:^{\n        if (block) {\n            block(localContext);\n        }\n\n        [localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {\n            if (success) {\n                if (completion) {\n                    completion();\n                }\n            }\n            else {\n                if (errorHandler) {\n                    errorHandler(error);\n                }\n            }\n        }];\n    }];\n}\n\n#pragma clang diagnostic pop // ignored \"-Wdeprecated-implementations\"\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+ErrorHandling.h",
    "content": "//\n//  MagicalRecord+ErrorHandling.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/6/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord.h\"\n\n@interface MagicalRecord (ErrorHandling)\n\n+ (void) handleErrors:(NSError *)error;\n- (void) handleErrors:(NSError *)error;\n\n+ (void) setErrorHandlerTarget:(id)target action:(SEL)action;\n+ (SEL) errorHandlerAction;\n+ (id) errorHandlerTarget;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+ErrorHandling.m",
    "content": "//\n//  MagicalRecord+ErrorHandling.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/6/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord+ErrorHandling.h\"\n\n\nstatic id errorHandlerTarget = nil;\nstatic SEL errorHandlerAction = nil;\n\n\n@implementation MagicalRecord (ErrorHandling)\n\n+ (void) cleanUpErrorHanding;\n{\n    errorHandlerTarget = nil;\n    errorHandlerAction = nil;\n}\n\n+ (void) defaultErrorHandler:(NSError *)error\n{\n    NSDictionary *userInfo = [error userInfo];\n    for (NSArray *detailedError in [userInfo allValues])\n    {\n        if ([detailedError isKindOfClass:[NSArray class]])\n        {\n            for (NSError *e in detailedError)\n            {\n                if ([e respondsToSelector:@selector(userInfo)])\n                {\n                    MRLog(@\"Error Details: %@\", [e userInfo]);\n                }\n                else\n                {\n                    MRLog(@\"Error Details: %@\", e);\n                }\n            }\n        }\n        else\n        {\n            MRLog(@\"Error: %@\", detailedError);\n        }\n    }\n    MRLog(@\"Error Message: %@\", [error localizedDescription]);\n    MRLog(@\"Error Domain: %@\", [error domain]);\n    MRLog(@\"Recovery Suggestion: %@\", [error localizedRecoverySuggestion]);\n}\n\n+ (void) handleErrors:(NSError *)error\n{\n\tif (error)\n\t{\n        // If a custom error handler is set, call that\n        if (errorHandlerTarget != nil && errorHandlerAction != nil) \n\t\t{\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n            [errorHandlerTarget performSelector:errorHandlerAction withObject:error];\n#pragma clang diagnostic pop\n        }\n\t\telse\n\t\t{\n\t        // Otherwise, fall back to the default error handling\n\t        [self defaultErrorHandler:error];\t\t\t\n\t\t}\n    }\n}\n\n+ (id) errorHandlerTarget\n{\n    return errorHandlerTarget;\n}\n\n+ (SEL) errorHandlerAction\n{\n    return errorHandlerAction;\n}\n\n+ (void) setErrorHandlerTarget:(id)target action:(SEL)action\n{\n    errorHandlerTarget = target;    /* Deliberately don't retain to avoid potential retain cycles */\n    errorHandlerAction = action;\n}\n\n- (void) handleErrors:(NSError *)error\n{\n\t[[self class] handleErrors:error];\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+Options.h",
    "content": "//\n//  MagicalRecord+Options.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/6/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord.h\"\n\n@interface MagicalRecord (Options)\n\n//global options\n// enable/disable logging\n// add logging provider\n// autocreate new PSC per Store\n// autoassign new instances to default store\n\n+ (BOOL) shouldAutoCreateManagedObjectModel;\n+ (void) setShouldAutoCreateManagedObjectModel:(BOOL)shouldAutoCreate;\n+ (BOOL) shouldAutoCreateDefaultPersistentStoreCoordinator;\n+ (void) setShouldAutoCreateDefaultPersistentStoreCoordinator:(BOOL)shouldAutoCreate;\n+ (void) setShouldDeleteStoreOnModelMismatch:(BOOL)shouldDeleteStoreOnModelMismatch;\n\n/*!\n @method shouldDeleteStoreOnModelMistmatch\n @abstract If true, when configuring the persistant store coordinator, and Magical Record encounters a store that does not match the model, it will attempt to remove it and re-create a new store.\n This is extremely useful during development where every model change could potentially require a delete/reinstall of the app.\n */\n+ (BOOL) shouldDeleteStoreOnModelMismatch;\n\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+Options.m",
    "content": "//\n//  MagicalRecord+Options.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/6/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord+Options.h\"\n\nstatic BOOL shouldAutoCreateManagedObjectModel_;\nstatic BOOL shouldAutoCreateDefaultPersistentStoreCoordinator_;\nstatic BOOL shouldDeleteStoreOnModelMismatch_;\n\n@implementation MagicalRecord (Options)\n\n#pragma mark - Options\n\n+ (BOOL) shouldAutoCreateManagedObjectModel;\n{\n    return shouldAutoCreateManagedObjectModel_;\n}\n\n+ (void) setShouldAutoCreateManagedObjectModel:(BOOL)shouldAutoCreate;\n{\n    shouldAutoCreateManagedObjectModel_ = shouldAutoCreate;\n}\n\n+ (BOOL) shouldAutoCreateDefaultPersistentStoreCoordinator;\n{\n    return shouldAutoCreateDefaultPersistentStoreCoordinator_;\n}\n\n+ (void) setShouldAutoCreateDefaultPersistentStoreCoordinator:(BOOL)shouldAutoCreate;\n{\n    shouldAutoCreateDefaultPersistentStoreCoordinator_ = shouldAutoCreate;\n}\n\n+ (BOOL) shouldDeleteStoreOnModelMismatch;\n{\n    return shouldDeleteStoreOnModelMismatch_;\n}\n\n+ (void) setShouldDeleteStoreOnModelMismatch:(BOOL)shouldDeleteStoreOnModelMismatch\n{\n    shouldDeleteStoreOnModelMismatch_ = shouldDeleteStoreOnModelMismatch;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+Setup.h",
    "content": "//\n//  MagicalRecord+Setup.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord.h\"\n\n@interface MagicalRecord (Setup)\n\n+ (void) setupCoreDataStack;\n+ (void) setupCoreDataStackWithInMemoryStore;\n+ (void) setupAutoMigratingCoreDataStack;\n\n+ (void) setupCoreDataStackWithStoreNamed:(NSString *)storeName;\n+ (void) setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(NSString *)storeName;\n\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+Setup.m",
    "content": "//\n//  MagicalRecord+Setup.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord+Setup.h\"\n#import \"NSManagedObject+MagicalRecord.h\"\n#import \"NSPersistentStoreCoordinator+MagicalRecord.h\"\n#import \"NSManagedObjectContext+MagicalRecord.h\"\n\n@implementation MagicalRecord (Setup)\n\n+ (void) setupCoreDataStack\n{\n    [self setupCoreDataStackWithStoreNamed:[self defaultStoreName]];\n}\n\n+ (void) setupAutoMigratingCoreDataStack\n{\n    [self setupCoreDataStackWithAutoMigratingSqliteStoreNamed:[self defaultStoreName]];\n}\n\n+ (void) setupCoreDataStackWithStoreNamed:(NSString *)storeName\n{\n    if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return;\n    \n\tNSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithSqliteStoreNamed:storeName];\n    [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator];\n\t\n    [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator];\n}\n\n+ (void) setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(NSString *)storeName\n{\n    if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return;\n    \n    NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithAutoMigratingSqliteStoreNamed:storeName];\n    [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator];\n    \n    [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator];\n}\n\n+ (void) setupCoreDataStackWithInMemoryStore;\n{\n    if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return;\n    \n\tNSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithInMemoryStore];\n\t[NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator];\n\t\n    [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator];\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+ShorthandSupport.h",
    "content": "//\n//  MagicalRecord+ShorthandSupport.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/6/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord.h\"\n\n@interface MagicalRecord (ShorthandSupport)\n\n#ifdef MR_SHORTHAND\n+ (void) swizzleShorthandMethods;\n#endif\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+ShorthandSupport.m",
    "content": "//\n//  MagicalRecord+ShorthandSupport.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/6/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord+ShorthandSupport.h\"\n#import <objc/runtime.h>\n\n\nstatic NSString * const kMagicalRecordCategoryPrefix = @\"MR_\";\n#ifdef MR_SHORTHAND\nstatic BOOL methodsHaveBeenSwizzled = NO;\n#endif\n\n\n//Dynamic shorthand method helpers\nBOOL addMagicalRecordShortHandMethodToPrefixedClassMethod(Class class, SEL selector);\nBOOL addMagicalRecordShorthandMethodToPrefixedInstanceMethod(Class klass, SEL originalSelector);\n\nvoid swizzleInstanceMethods(Class originalClass, SEL originalSelector, Class targetClass, SEL newSelector);\nvoid replaceSelectorForTargetWithSourceImpAndSwizzle(Class originalClass, SEL originalSelector, Class newClass, SEL newSelector);\n\n\n@implementation MagicalRecord (ShorthandSupport)\n\n#pragma mark - Support methods for shorthand methods\n\n#ifdef MR_SHORTHAND\n+ (BOOL) MR_resolveClassMethod:(SEL)originalSelector\n{\n    BOOL resolvedClassMethod = [self MR_resolveClassMethod:originalSelector];\n    if (!resolvedClassMethod) \n    {\n        resolvedClassMethod = addMagicalRecordShortHandMethodToPrefixedClassMethod(self, originalSelector);\n    }\n    return resolvedClassMethod;\n}\n\n+ (BOOL) MR_resolveInstanceMethod:(SEL)originalSelector\n{\n    BOOL resolvedClassMethod = [self MR_resolveInstanceMethod:originalSelector];\n    if (!resolvedClassMethod) \n    {\n        resolvedClassMethod = addMagicalRecordShorthandMethodToPrefixedInstanceMethod(self, originalSelector);\n    }\n    return resolvedClassMethod;\n}\n\n//In order to add support for non-prefixed AND prefixed methods, we need to swap the existing resolveClassMethod: and resolveInstanceMethod: implementations with the one in this class.\n+ (void) updateResolveMethodsForClass:(Class)klass\n{\n    replaceSelectorForTargetWithSourceImpAndSwizzle(self, @selector(MR_resolveClassMethod:), klass, @selector(resolveClassMethod:));\n    replaceSelectorForTargetWithSourceImpAndSwizzle(self, @selector(MR_resolveInstanceMethod:), klass, @selector(resolveInstanceMethod:));    \n}\n\n+ (void) swizzleShorthandMethods;\n{\n    if (methodsHaveBeenSwizzled) return;\n    \n    NSArray *classes = [NSArray arrayWithObjects:\n                        [NSManagedObject class],\n                        [NSManagedObjectContext class], \n                        [NSManagedObjectModel class], \n                        [NSPersistentStore class], \n                        [NSPersistentStoreCoordinator class], nil];\n    \n    [classes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n        Class klass = (Class)obj;\n        \n        [self updateResolveMethodsForClass:klass];\n    }];\n    methodsHaveBeenSwizzled = YES;\n}\n#endif\n\n@end\n\n#pragma mark - Support functions for runtime shorthand Method calling\n\nvoid replaceSelectorForTargetWithSourceImpAndSwizzle(Class sourceClass, SEL sourceSelector, Class targetClass, SEL targetSelector)\n{\n    Method sourceClassMethod = class_getClassMethod(sourceClass, sourceSelector);\n    Method targetClassMethod = class_getClassMethod(targetClass, targetSelector);\n    \n    Class targetMetaClass = objc_getMetaClass([NSStringFromClass(targetClass) cStringUsingEncoding:NSUTF8StringEncoding]);\n    \n    BOOL methodWasAdded = class_addMethod(targetMetaClass, sourceSelector,\n                                          method_getImplementation(targetClassMethod),\n                                          method_getTypeEncoding(targetClassMethod));\n    \n    if (methodWasAdded)\n    {\n        class_replaceMethod(targetMetaClass, targetSelector, \n                            method_getImplementation(sourceClassMethod), \n                            method_getTypeEncoding(sourceClassMethod));\n    }\n}\n\nBOOL addMagicalRecordShorthandMethodToPrefixedInstanceMethod(Class klass, SEL originalSelector)\n{\n    NSString *originalSelectorString = NSStringFromSelector(originalSelector);\n    if ([originalSelectorString hasPrefix:@\"_\"] || [originalSelectorString hasPrefix:@\"init\"]) return NO;\n    \n    if (![originalSelectorString hasPrefix:kMagicalRecordCategoryPrefix]) \n    {\n        NSString *prefixedSelector = [kMagicalRecordCategoryPrefix stringByAppendingString:originalSelectorString];\n        Method existingMethod = class_getInstanceMethod(klass, NSSelectorFromString(prefixedSelector));\n        \n        if (existingMethod) \n        {\n            BOOL methodWasAdded = class_addMethod(klass, \n                                                  originalSelector, \n                                                  method_getImplementation(existingMethod), \n                                                  method_getTypeEncoding(existingMethod));\n            \n            return methodWasAdded;\n        }\n    }\n    return NO;\n}\n\n\nBOOL addMagicalRecordShortHandMethodToPrefixedClassMethod(Class klass, SEL originalSelector)\n{\n    NSString *originalSelectorString = NSStringFromSelector(originalSelector);\n    if (![originalSelectorString hasPrefix:kMagicalRecordCategoryPrefix]) \n    {\n        NSString *prefixedSelector = [kMagicalRecordCategoryPrefix stringByAppendingString:originalSelectorString];\n        Method existingMethod = class_getClassMethod(klass, NSSelectorFromString(prefixedSelector));\n        \n        if (existingMethod) \n        {\n            Class metaClass = objc_getMetaClass([NSStringFromClass(klass) cStringUsingEncoding:NSUTF8StringEncoding]);\n            BOOL methodWasAdded = class_addMethod(metaClass, \n                                                  originalSelector, \n                                                  method_getImplementation(existingMethod), \n                                                  method_getTypeEncoding(existingMethod));\n            \n            return methodWasAdded;\n        }\n    }\n    return NO;\n}\n\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+iCloud.h",
    "content": "//\n//  MagicalRecord+iCloud.h\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord.h\"\n\n@interface MagicalRecord (iCloud)\n\n+ (BOOL) isICloudEnabled;\n\n+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)icloudBucket localStoreNamed:(NSString *)localStore;\n+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent;\n+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent completion:(void(^)(void))completion;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord+iCloud.m",
    "content": "//\n//  MagicalRecord+iCloud.m\n//  Magical Record\n//\n//  Created by Saul Mora on 3/7/12.\n//  Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.\n//\n\n#import \"MagicalRecord+iCloud.h\"\n#import \"NSPersistentStoreCoordinator+MagicalRecord.h\"\n#import \"NSManagedObjectContext+MagicalRecord.h\"\n\nstatic BOOL _iCloudEnabled = NO;\n\n@implementation MagicalRecord (iCloud)\n\n#pragma mark - iCloud Methods\n\n+ (BOOL) isICloudEnabled;\n{\n    return _iCloudEnabled;\n}\n\n+ (void) setICloudEnabled:(BOOL)enabled;\n{\n    @synchronized(self)\n    {\n        _iCloudEnabled = enabled;\n    }\n}\n\n+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)icloudBucket localStoreNamed:(NSString *)localStore;\n{\n    NSString *contentNameKey = [[[NSBundle mainBundle] infoDictionary] objectForKey:(id)kCFBundleIdentifierKey];\n    [self setupCoreDataStackWithiCloudContainer:icloudBucket\n                                 contentNameKey:contentNameKey\n                                localStoreNamed:localStore\n                        cloudStorePathComponent:nil];\n}\n\n+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent;\n{\n    [self setupCoreDataStackWithiCloudContainer:containerID \n                                 contentNameKey:contentNameKey\n                                localStoreNamed:localStoreName\n                        cloudStorePathComponent:pathSubcomponent\n                                     completion:nil];\n}\n\n+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent completion:(void(^)(void))completion;\n{\n    NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithiCloudContainerID:containerID\n                                                                                                   contentNameKey:contentNameKey \n                                                                                                  localStoreNamed:localStoreName \n                                                                                          cloudStorePathComponent:pathSubcomponent\n                                                                                                       completion:completion];\n    [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator];\n    [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator];\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord.h",
    "content": "//\n//  MagicalRecord.h\n//\n//  Created by Saul Mora on 3/11/10.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#if TARGET_OS_IPHONE == 0\n#define MAC_PLATFORM_ONLY YES\n#endif\n\n// enable to use caches for the fetchedResultsControllers (iOS only)\n// #define STORE_USE_CACHE\n\n#ifndef MR_ENABLE_ACTIVE_RECORD_LOGGING\n/*\n    #ifdef DEBUG\n        #define MR_ENABLE_ACTIVE_RECORD_LOGGING 1\n    #else\n        #define MR_ENABLE_ACTIVE_RECORD_LOGGING 0\n    #endif\n */\n\n//Micle Mark Debug\n\n#define MR_ENABLE_ACTIVE_RECORD_LOGGING 0\n\n#endif\n\n#if MR_ENABLE_ACTIVE_RECORD_LOGGING != 0\n      // First, check if we can use Cocoalumberjack for logging\n    #ifdef LOG_VERBOSE\n//        extern int ddLogLevel;\n        #define MRLog(...)  DDLogVerbose(__VA_ARGS__)\n    #else\n        #define MRLog(...) NSLog(@\"%s(%p) %@\", __PRETTY_FUNCTION__, self, [NSString stringWithFormat:__VA_ARGS__])\n    #endif\n#else\n    #define MRLog(...) ((void)0)\n#endif\n\n#ifdef NS_BLOCKS_AVAILABLE\n\n@class NSManagedObjectContext;\ntypedef void (^CoreDataBlock)(NSManagedObjectContext *context);\n\n#endif\n\n@interface MagicalRecord : NSObject\n\n+ (NSString *) currentStack;\n\n+ (void) cleanUp;\n\n+ (void) setDefaultModelFromClass:(Class)klass;\n+ (void) setDefaultModelNamed:(NSString *)modelName;\n+ (NSString *) defaultStoreName;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecord.m",
    "content": "//\n//  MagicalRecord.m\n//\n//  Created by Saul Mora on 3/11/10.\n//  Copyright 2010 Magical Panda Software, LLC All rights reserved.\n//\n\n#import \"CoreData+MagicalRecord.h\"\n\n@interface MagicalRecord (Internal)\n\n+ (void) cleanUpStack;\n+ (void) cleanUpErrorHanding;\n\n@end\n\n@interface NSManagedObjectContext (MagicalRecordInternal)\n\n+ (void) MR_cleanUp;\n\n@end\n\n\n@implementation MagicalRecord\n\n+ (void) cleanUp\n{\n    [self cleanUpErrorHanding];\n    [self cleanUpStack];\n}\n\n+ (void) cleanUpStack;\n{\n\t[NSManagedObjectContext MR_cleanUp];\n\t[NSManagedObjectModel MR_setDefaultManagedObjectModel:nil];\n\t[NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:nil];\n\t[NSPersistentStore MR_setDefaultPersistentStore:nil];\n}\n\n+ (NSString *) currentStack\n{\n    NSMutableString *status = [NSMutableString stringWithString:@\"Current Default Core Data Stack: ---- \\n\"];\n\n    [status appendFormat:@\"Model:           %@\\n\", [[NSManagedObjectModel MR_defaultManagedObjectModel] entityVersionHashesByName]];\n    [status appendFormat:@\"Coordinator:     %@\\n\", [NSPersistentStoreCoordinator MR_defaultStoreCoordinator]];\n    [status appendFormat:@\"Store:           %@\\n\", [NSPersistentStore MR_defaultPersistentStore]];\n    [status appendFormat:@\"Default Context: %@\\n\", [[NSManagedObjectContext MR_defaultContext] MR_description]];\n    [status appendFormat:@\"Context Chain:   \\n%@\\n\", [[NSManagedObjectContext MR_defaultContext] MR_parentChain]];\n\n    return status;\n}\n\n+ (void) setDefaultModelNamed:(NSString *)modelName;\n{\n    NSManagedObjectModel *model = [NSManagedObjectModel MR_managedObjectModelNamed:modelName];\n    [NSManagedObjectModel MR_setDefaultManagedObjectModel:model];\n}\n\n+ (void) setDefaultModelFromClass:(Class)klass;\n{\n    NSBundle *bundle = [NSBundle bundleForClass:klass];\n    NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:bundle]];\n    [NSManagedObjectModel MR_setDefaultManagedObjectModel:model];\n}\n\n+ (NSString *) defaultStoreName;\n{\n    NSString *defaultName = [[[NSBundle mainBundle] infoDictionary] valueForKey:(id)kCFBundleNameKey];\n    if (defaultName == nil)\n    {\n        defaultName = kMagicalRecordDefaultStoreFileName;\n    }\n    if (![defaultName hasSuffix:@\"sqlite\"]) \n    {\n        defaultName = [defaultName stringByAppendingPathExtension:@\"sqlite\"];\n    }\n\n    return defaultName;\n}\n\n\n#pragma mark - initialize\n\n+ (void) initialize;\n{\n    if (self == [MagicalRecord class]) \n    {\n#ifdef MR_SHORTHAND\n        [self swizzleShorthandMethods];\n#endif\n        [self setShouldAutoCreateManagedObjectModel:YES];\n        [self setShouldAutoCreateDefaultPersistentStoreCoordinator:NO];\n#ifdef DEBUG\n        [self setShouldDeleteStoreOnModelMismatch:YES];\n#else\n        [self setShouldDeleteStoreOnModelMismatch:NO];\n#endif\n    }\n}\n\n@end\n\n\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/Core/MagicalRecordShorthand.h",
    "content": "#ifdef MR_SHORTHAND\n\n\n\n\n\n\n\n@interface NSManagedObject (MagicalAggregationShortHand)\n+ (NSNumber *) numberOfEntities;\n+ (NSNumber *) numberOfEntitiesWithContext:(NSManagedObjectContext *)context;\n+ (NSNumber *) numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm;\n+ (NSNumber *) numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n+ (NSUInteger) countOfEntities;\n+ (NSUInteger) countOfEntitiesWithContext:(NSManagedObjectContext *)context;\n+ (NSUInteger) countOfEntitiesWithPredicate:(NSPredicate *)searchFilter;\n+ (NSUInteger) countOfEntitiesWithPredicate:(NSPredicate *)searchFilter inContext:(NSManagedObjectContext *)context;\n+ (BOOL) hasAtLeastOneEntity;\n+ (BOOL) hasAtLeastOneEntityInContext:(NSManagedObjectContext *)context;\n+ (NSNumber *)aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context;\n+ (NSNumber *)aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate;\n- (id) objectWithMinValueFor:(NSString *)property;\n- (id) objectWithMinValueFor:(NSString *)property inContext:(NSManagedObjectContext *)context;\n@end\n@interface NSManagedObject (MagicalRecord_DataImportShortHand)\n- (BOOL) importValuesForKeysWithObject:(id)objectData;\n+ (id) importFromObject:(id)data;\n+ (id) importFromObject:(id)data inContext:(NSManagedObjectContext *)context;\n+ (NSArray *) importFromArray:(NSArray *)listOfObjectData;\n+ (NSArray *) importFromArray:(NSArray *)listOfObjectData inContext:(NSManagedObjectContext *)context;\n@end\n@interface NSManagedObject (MagicalFindersShortHand)\n+ (NSArray *) findAll;\n+ (NSArray *) findAllInContext:(NSManagedObjectContext *)context;\n+ (NSArray *) findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending;\n+ (NSArray *) findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n+ (NSArray *) findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm;\n+ (NSArray *) findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n+ (NSArray *) findAllWithPredicate:(NSPredicate *)searchTerm;\n+ (NSArray *) findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n+ (id) findFirst;\n+ (id) findFirstInContext:(NSManagedObjectContext *)context;\n+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm;\n+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n+ (id) findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending;\n+ (id) findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes;\n+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes inContext:(NSManagedObjectContext *)context;\n+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(id)attributes, ...;\n+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context andRetrieveAttributes:(id)attributes, ...;\n+ (id) findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue;\n+ (id) findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context;\n+ (id) findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending;\n+ (id) findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n+ (NSArray *) findByAttribute:(NSString *)attribute withValue:(id)searchValue;\n+ (NSArray *) findByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context;\n+ (NSArray *) findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending;\n+ (NSArray *) findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR\n+ (NSFetchedResultsController *) fetchAllWithDelegate:(id<NSFetchedResultsControllerDelegate>)delegate;\n+ (NSFetchedResultsController *) fetchAllWithDelegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context;\n+ (NSFetchedResultsController *) fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id<NSFetchedResultsControllerDelegate>)delegate;\n+ (NSFetchedResultsController *) fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context;\n+ (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending;\n+ (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n+ (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id<NSFetchedResultsControllerDelegate>)delegate;\n+ (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context;\n#endif\n@end\n@interface NSManagedObject (MagicalRecordShortHand)\n+ (NSUInteger) defaultBatchSize;\n+ (void) setDefaultBatchSize:(NSUInteger)newBatchSize;\n+ (NSArray *) executeFetchRequest:(NSFetchRequest *)request;\n+ (NSArray *) executeFetchRequest:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context;\n+ (id) executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request;\n+ (id) executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context;\n#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR\n+ (void) performFetch:(NSFetchedResultsController *)controller;\n#endif\n+ (NSEntityDescription *) entityDescription;\n+ (NSEntityDescription *) entityDescriptionInContext:(NSManagedObjectContext *)context;\n+ (NSArray *) propertiesNamed:(NSArray *)properties;\n+ (id) createEntity;\n+ (id) createInContext:(NSManagedObjectContext *)context;\n- (BOOL) deleteEntity;\n- (BOOL) deleteInContext:(NSManagedObjectContext *)context;\n+ (BOOL) deleteAllMatchingPredicate:(NSPredicate *)predicate;\n+ (BOOL) deleteAllMatchingPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context;\n+ (BOOL) truncateAll;\n+ (BOOL) truncateAllInContext:(NSManagedObjectContext *)context;\n+ (NSArray *) ascendingSortDescriptors:(NSArray *)attributesToSortBy;\n+ (NSArray *) descendingSortDescriptors:(NSArray *)attributesToSortBy;\n- (id) inContext:(NSManagedObjectContext *)otherContext;\n- (id) inThreadContext;\n@end\n@interface NSManagedObject (MagicalRequestsShortHand)\n+ (NSFetchRequest *) createFetchRequest;\n+ (NSFetchRequest *) createFetchRequestInContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) requestAll;\n+ (NSFetchRequest *) requestAllInContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) requestAllWithPredicate:(NSPredicate *)searchTerm;\n+ (NSFetchRequest *) requestAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) requestAllWhere:(NSString *)property isEqualTo:(id)value;\n+ (NSFetchRequest *) requestAllWhere:(NSString *)property isEqualTo:(id)value inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) requestFirstWithPredicate:(NSPredicate *)searchTerm;\n+ (NSFetchRequest *) requestFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue;\n+ (NSFetchRequest *) requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending;\n+ (NSFetchRequest *) requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;\n+ (NSFetchRequest *) requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm;\n+ (NSFetchRequest *) requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;\n@end\n@interface NSManagedObjectContext (MagicalObservingShortHand)\n- (void) observeContext:(NSManagedObjectContext *)otherContext;\n- (void) stopObservingContext:(NSManagedObjectContext *)otherContext;\n- (void) observeContextOnMainThread:(NSManagedObjectContext *)otherContext;\n- (void) observeiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n- (void) stopObservingiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n@end\n@interface NSManagedObjectContext (MagicalRecordShortHand)\n+ (void) initializeDefaultContextWithCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n+ (NSManagedObjectContext *) context NS_RETURNS_RETAINED;\n+ (NSManagedObjectContext *) contextWithParent:(NSManagedObjectContext *)parentContext NS_RETURNS_RETAINED;\n+ (NSManagedObjectContext *) newMainQueueContext NS_RETURNS_RETAINED;\n+ (NSManagedObjectContext *) contextThatPushesChangesToDefaultContext NS_RETURNS_RETAINED;\n+ (NSManagedObjectContext *) contextWithStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator NS_RETURNS_RETAINED;\n+ (void) resetDefaultContext;\n+ (NSManagedObjectContext *) rootSavingContext;\n+ (NSManagedObjectContext *) defaultContext;\n+ (void) cleanUp;\n- (NSString *) description;\n@end\n#import \"NSManagedObjectContext+MagicalSaves.h\"\n@interface NSManagedObjectContext (MagicalSavesShortHand)\n- (void) saveOnlySelfWithCompletion:(MRSaveCompletionHandler)completion;\n- (void) saveToPersistentStoreWithCompletion:(MRSaveCompletionHandler)completion;\n- (void) saveOnlySelfAndWait;\n- (void) saveToPersistentStoreAndWait;\n- (void) saveWithOptions:(MRSaveContextOptions)mask completion:(MRSaveCompletionHandler)completion;\n- (void) save __attribute__((deprecated));\n- (void) saveWithErrorCallback:(void(^)(NSError *error))errorCallback __attribute__((deprecated));\n- (void) saveInBackgroundCompletion:(void (^)(void))completion __attribute__((deprecated));\n- (void) saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback __attribute__((deprecated));\n- (void) saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion __attribute__((deprecated));\n- (void) saveNestedContexts __attribute__((deprecated));\n- (void) saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback __attribute__((deprecated));\n- (void) saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion __attribute__((deprecated));\n@end\n@interface NSManagedObjectContext (MagicalThreadingShortHand)\n+ (NSManagedObjectContext *) contextForCurrentThread;\n+ (NSManagedObjectContext *) contextThatNotifiesDefaultContextOnMainThread;\n+ (NSManagedObjectContext *) contextThatNotifiesDefaultContextOnMainThreadWithCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n+ (void) resetContextForCurrentThread;\n@end\n@interface NSManagedObjectModel (MagicalRecordShortHand)\n+ (NSManagedObjectModel *) defaultManagedObjectModel;\n+ (void) setDefaultManagedObjectModel:(NSManagedObjectModel *)newDefaultModel;\n+ (NSManagedObjectModel *) mergedObjectModelFromMainBundle;\n+ (NSManagedObjectModel *) newManagedObjectModelNamed:(NSString *)modelFileName NS_RETURNS_RETAINED;\n+ (NSManagedObjectModel *) managedObjectModelNamed:(NSString *)modelFileName;\n+ (NSManagedObjectModel *) newModelNamed:(NSString *) modelName inBundleNamed:(NSString *) bundleName NS_RETURNS_RETAINED;\n@end\n@interface NSPersistentStore (MagicalRecordShortHand)\n+ (NSURL *) defaultLocalStoreUrl;\n+ (NSPersistentStore *) defaultPersistentStore;\n+ (void) setDefaultPersistentStore:(NSPersistentStore *) store;\n+ (NSURL *) urlForStoreName:(NSString *)storeFileName;\n+ (NSURL *) cloudURLForUbiqutiousContainer:(NSString *)bucketName;\n@end\n@interface NSPersistentStoreCoordinator (MagicalRecordShortHand)\n+ (NSPersistentStoreCoordinator *) defaultStoreCoordinator;\n+ (void) setDefaultStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator;\n+ (NSPersistentStoreCoordinator *) coordinatorWithInMemoryStore;\n+ (NSPersistentStoreCoordinator *) newPersistentStoreCoordinator NS_RETURNS_RETAINED;\n+ (NSPersistentStoreCoordinator *) coordinatorWithSqliteStoreNamed:(NSString *)storeFileName;\n+ (NSPersistentStoreCoordinator *) coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *)storeFileName;\n+ (NSPersistentStoreCoordinator *) coordinatorWithPersistentStore:(NSPersistentStore *)persistentStore;\n+ (NSPersistentStoreCoordinator *) coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent;\n+ (NSPersistentStoreCoordinator *) coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionHandler;\n- (NSPersistentStore *) addInMemoryStore;\n- (NSPersistentStore *) addAutoMigratingSqliteStoreNamed:(NSString *) storeFileName;\n- (NSPersistentStore *) addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options;\n- (void) addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent;\n- (void) addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock;\n@end\n\n\n\n\n\n\n#endif\n\n"
  },
  {
    "path": "shakefun/shakefun/MagicalRecord/CoreData+MagicalRecord.h",
    "content": "\n#ifndef NS_BLOCKS_AVAILABLE\n    #warning MagicalRecord requires blocks\n#endif\n\n#ifdef __OBJC__\n//    #if !( __has_feature(objc_arc) && __has_feature(objc_arc_weak) )\n//        #error MagicalRecord now requires ARC to be enabled\n//    #endif\n\n    #import <CoreFoundation/CoreFoundation.h>\n    #import <CoreData/CoreData.h>\n\n    #ifdef MR_SHORTHAND\n    #import \"MagicalRecordShorthand.h\"\n    #endif\n\n    #import \"MagicalRecord.h\"\n    #import \"MagicalRecord+Actions.h\"\n    #import \"MagicalRecord+ErrorHandling.h\"\n    #import \"MagicalRecord+Options.h\"\n    #import \"MagicalRecord+ShorthandSupport.h\"\n    #import \"MagicalRecord+Setup.h\"\n    #import \"MagicalRecord+iCloud.h\"\n\n    #import \"NSManagedObject+MagicalRecord.h\"\n    #import \"NSManagedObject+MagicalRequests.h\"\n    #import \"NSManagedObject+MagicalFinders.h\"\n    #import \"NSManagedObject+MagicalAggregation.h\"\n    #import \"NSManagedObjectContext+MagicalRecord.h\"\n    #import \"NSManagedObjectContext+MagicalObserving.h\"\n    #import \"NSManagedObjectContext+MagicalSaves.h\"\n    #import \"NSManagedObjectContext+MagicalThreading.h\"\n    #import \"NSPersistentStoreCoordinator+MagicalRecord.h\"\n    #import \"NSManagedObjectModel+MagicalRecord.h\"\n    #import \"NSPersistentStore+MagicalRecord.h\"\n\n    #import \"MagicalImportFunctions.h\"\n    #import \"NSManagedObject+MagicalDataImport.h\"\n    #import \"NSNumber+MagicalDataImport.h\"\n    #import \"NSObject+MagicalDataImport.h\"\n    #import \"NSString+MagicalDataImport.h\"\n    #import \"NSAttributeDescription+MagicalDataImport.h\"\n    #import \"NSRelationshipDescription+MagicalDataImport.h\"\n    #import \"NSEntityDescription+MagicalDataImport.h\"\n\n#endif\n\n// @see https://github.com/ccgus/fmdb/commit/aef763eeb64e6fa654e7d121f1df4c16a98d9f4f\n#define MRDispatchQueueRelease(q) (dispatch_release(q))\n\n#if TARGET_OS_IPHONE\n    #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000\n        #undef MRDispatchQueueRelease\n        #define MRDispatchQueueRelease(q)\n    #endif\n#else\n    #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080\n        #undef MRDispatchQueueRelease\n        #define MRDispatchQueueRelease(q)\n    #endif\n#endif\n"
  },
  {
    "path": "shakefun/shakefun/PrefixHeader.pch",
    "content": "//\n//  PrefixHeader.pch\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#ifndef shakefun_PrefixHeader_pch\n#define shakefun_PrefixHeader_pch\n\n// Include any system framework and library headers here that should be included in all compilation units.\n// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.\n\n#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#import <Foundation/Foundation.h>\n#import \"CoreData+MagicalRecord.h\"\n\n#endif\n\n#endif\n"
  },
  {
    "path": "shakefun/shakefun/SVProgressHUD/SVProgressHUD.h",
    "content": "//\n//  SVProgressHUD.h\n//\n//  Created by Sam Vermette on 27.03.11.\n//  Copyright 2011 Sam Vermette. All rights reserved.\n//\n//  https://github.com/samvermette/SVProgressHUD\n//\n\n#import <UIKit/UIKit.h>\n#import <AvailabilityMacros.h>\n\nenum {\n    SVProgressHUDMaskTypeNone = 1, // allow user interactions while HUD is displayed\n    SVProgressHUDMaskTypeClear, // don't allow\n    SVProgressHUDMaskTypeBlack, // don't allow and dim the UI in the back of the HUD\n    SVProgressHUDMaskTypeGradient // don't allow and dim the UI with a a-la-alert-view bg gradient\n};\n\ntypedef NSUInteger SVProgressHUDMaskType;\n\n@interface SVProgressHUD : UIView\n\n+ (void)show;\n+ (void)showWithStatus:(NSString*)status;\n+ (void)showWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType;\n+ (void)showWithMaskType:(SVProgressHUDMaskType)maskType;\n\n+ (void)showSuccessWithStatus:(NSString*)string;\n+ (void)showSuccessWithStatus:(NSString *)string duration:(NSTimeInterval)duration;\n+ (void)showErrorWithStatus:(NSString *)string;\n+ (void)showErrorWithStatus:(NSString *)string duration:(NSTimeInterval)duration;\n\n+ (void)setStatus:(NSString*)string; // change the HUD loading status while it's showing\n\n+ (void)dismiss; // simply dismiss the HUD with a fade+scale out animation\n+ (void)dismissWithSuccess:(NSString*)successString; // also displays the success icon image\n+ (void)dismissWithSuccess:(NSString*)successString afterDelay:(NSTimeInterval)seconds;\n+ (void)dismissWithError:(NSString*)errorString; // also displays the error icon image\n+ (void)dismissWithError:(NSString*)errorString afterDelay:(NSTimeInterval)seconds;\n\n+ (BOOL)isVisible;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/SVProgressHUD/SVProgressHUD.m",
    "content": "//\n//  SVProgressHUD.m\n//\n//  Created by Sam Vermette on 27.03.11.\n//  Copyright 2011 Sam Vermette. All rights reserved.\n//\n//  https://github.com/samvermette/SVProgressHUD\n//\n\n#import \"SVProgressHUD.h\"\n#import <QuartzCore/QuartzCore.h>\n\n@interface SVProgressHUD ()\n\n@property (nonatomic, readwrite) SVProgressHUDMaskType maskType;\n@property (nonatomic, strong, readonly) NSTimer *fadeOutTimer;\n\n@property (nonatomic, strong, readonly) UIWindow *overlayWindow;\n@property (nonatomic, strong, readonly) UIView *hudView;\n@property (nonatomic, strong, readonly) UILabel *stringLabel;\n@property (nonatomic, strong, readonly) UIImageView *imageView;\n@property (nonatomic, strong, readonly) UIActivityIndicatorView *spinnerView;\n\n@property (nonatomic, readonly) CGFloat visibleKeyboardHeight;\n\n- (void)showWithStatus:(NSString*)string maskType:(SVProgressHUDMaskType)hudMaskType networkIndicator:(BOOL)show;\n- (void)setStatus:(NSString*)string;\n- (void)registerNotifications;\n- (void)moveToPoint:(CGPoint)newCenter rotateAngle:(CGFloat)angle;\n- (void)positionHUD:(NSNotification*)notification;\n\n- (void)dismiss;\n- (void)dismissWithStatus:(NSString*)string error:(BOOL)error;\n- (void)dismissWithStatus:(NSString*)string error:(BOOL)error afterDelay:(NSTimeInterval)seconds;\n\n@end\n\n\n@implementation SVProgressHUD\n\n@synthesize overlayWindow, hudView, maskType, fadeOutTimer, stringLabel, imageView, spinnerView, visibleKeyboardHeight;\n\n- (void)dealloc {\n\tself.fadeOutTimer = nil;\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n\n+ (SVProgressHUD*)sharedView {\n    static dispatch_once_t once;\n    static SVProgressHUD *sharedView;\n    dispatch_once(&once, ^ { sharedView = [[SVProgressHUD alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; });\n    return sharedView;\n}\n\n\n+ (void)setStatus:(NSString *)string {\n\t[[SVProgressHUD sharedView] setStatus:string];\n}\n\n#pragma mark - Show Methods\n\n+ (void)show {\n    [[SVProgressHUD sharedView] showWithStatus:nil maskType:SVProgressHUDMaskTypeNone networkIndicator:NO];\n}\n\n+ (void)showWithStatus:(NSString *)status {\n    [[SVProgressHUD sharedView] showWithStatus:status maskType:SVProgressHUDMaskTypeNone networkIndicator:NO];\n}\n\n+ (void)showWithMaskType:(SVProgressHUDMaskType)maskType {\n    [[SVProgressHUD sharedView] showWithStatus:nil maskType:maskType networkIndicator:NO];\n}\n\n+ (void)showWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType {\n    [[SVProgressHUD sharedView] showWithStatus:status maskType:maskType networkIndicator:NO];\n}\n\n+ (void)showSuccessWithStatus:(NSString *)string {\n    [SVProgressHUD showSuccessWithStatus:string duration:1];\n}\n\n+ (void)showSuccessWithStatus:(NSString *)string duration:(NSTimeInterval)duration {\n    [SVProgressHUD show];\n    [SVProgressHUD dismissWithSuccess:string afterDelay:duration];\n}\n\n+ (void)showErrorWithStatus:(NSString *)string {\n    [SVProgressHUD showErrorWithStatus:string duration:1];\n}\n\n+ (void)showErrorWithStatus:(NSString *)string duration:(NSTimeInterval)duration {\n    [SVProgressHUD show];\n    [SVProgressHUD dismissWithError:string afterDelay:duration];\n}\n\n\n#pragma mark - Dismiss Methods\n\n+ (void)dismiss {\n\t[[SVProgressHUD sharedView] dismiss];\n}\n\n+ (void)dismissWithSuccess:(NSString*)successString {\n\t[[SVProgressHUD sharedView] dismissWithStatus:successString error:NO];\n}\n\n+ (void)dismissWithSuccess:(NSString *)successString afterDelay:(NSTimeInterval)seconds {\n    [[SVProgressHUD sharedView] dismissWithStatus:successString error:NO afterDelay:seconds];\n}\n\n+ (void)dismissWithError:(NSString*)errorString {\n\t[[SVProgressHUD sharedView] dismissWithStatus:errorString error:YES];\n}\n\n+ (void)dismissWithError:(NSString *)errorString afterDelay:(NSTimeInterval)seconds {\n    [[SVProgressHUD sharedView] dismissWithStatus:errorString error:YES afterDelay:seconds];\n}\n\n\n#pragma mark - Instance Methods\n\n- (id)initWithFrame:(CGRect)frame {\n\t\n    if ((self = [super initWithFrame:frame])) {\n\t\tself.userInteractionEnabled = NO;\n        self.backgroundColor = [UIColor clearColor];\n\t\tself.alpha = 0;\n        self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n    }\n\t\n    return self;\n}\n\n- (void)drawRect:(CGRect)rect {\n    \n    CGContextRef context = UIGraphicsGetCurrentContext();\n    \n    switch (self.maskType) {\n            \n        case SVProgressHUDMaskTypeBlack: {\n            [[UIColor colorWithWhite:0 alpha:0.5] set];\n            CGContextFillRect(context, self.bounds);\n            break;\n        }\n            \n        case SVProgressHUDMaskTypeGradient: {\n            \n            size_t locationsCount = 2;\n            CGFloat locations[2] = {0.0f, 1.0f};\n            CGFloat colors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.75f}; \n            CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();\n            CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, locationsCount);\n            CGColorSpaceRelease(colorSpace);\n            \n            CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);\n            float radius = MIN(self.bounds.size.width , self.bounds.size.height) ;\n            CGContextDrawRadialGradient (context, gradient, center, 0, center, radius, kCGGradientDrawsAfterEndLocation);\n            CGGradientRelease(gradient);\n            \n            break;\n        }\n    }\n}\n\n- (void)setStatus:(NSString *)string {\n\t\n    CGFloat hudWidth = 100;\n    CGFloat hudHeight = 100;\n    CGFloat stringWidth = 0;\n    CGFloat stringHeight = 0;\n    CGRect labelRect = CGRectZero;\n    \n    if(string) {\n        CGSize stringSize = [string sizeWithFont:self.stringLabel.font constrainedToSize:CGSizeMake(200, 300)];\n        stringWidth = stringSize.width;\n        stringHeight = stringSize.height;\n        hudHeight = 80+stringHeight;\n        \n        if(stringWidth > hudWidth)\n            hudWidth = ceil(stringWidth/2)*2;\n        \n        if(hudHeight > 100) {\n            labelRect = CGRectMake(12, 66, hudWidth, stringHeight);\n            hudWidth+=24;\n        } else {\n            hudWidth+=24;  \n            labelRect = CGRectMake(0, 66, hudWidth, stringHeight);   \n        }\n    }\n\t\n\tself.hudView.bounds = CGRectMake(0, 0, hudWidth, hudHeight);\n\t\n    if(string)\n        self.imageView.center = CGPointMake(CGRectGetWidth(self.hudView.bounds)/2, 36);\n\telse\n       \tself.imageView.center = CGPointMake(CGRectGetWidth(self.hudView.bounds)/2, CGRectGetHeight(self.hudView.bounds)/2);\n\t\n\tself.stringLabel.hidden = NO;\n\tself.stringLabel.text = string;\n\tself.stringLabel.frame = labelRect;\n\t\n\tif(string)\n\t\tself.spinnerView.center = CGPointMake(ceil(CGRectGetWidth(self.hudView.bounds)/2)+0.5, 40.5);\n\telse\n\t\tself.spinnerView.center = CGPointMake(ceil(CGRectGetWidth(self.hudView.bounds)/2)+0.5, ceil(self.hudView.bounds.size.height/2)+0.5);\n}\n\n- (void)setFadeOutTimer:(NSTimer *)newTimer {\n    \n    if(fadeOutTimer)\n        [fadeOutTimer invalidate], fadeOutTimer = nil;\n    \n    if(newTimer)\n        fadeOutTimer = newTimer;\n}\n\n\n- (void)registerNotifications {\n    [[NSNotificationCenter defaultCenter] addObserver:self \n                                             selector:@selector(positionHUD:) \n                                                 name:UIApplicationDidChangeStatusBarOrientationNotification \n                                               object:nil];  \n    \n    [[NSNotificationCenter defaultCenter] addObserver:self \n                                             selector:@selector(positionHUD:) \n                                                 name:UIKeyboardWillHideNotification\n                                               object:nil];\n    \n    [[NSNotificationCenter defaultCenter] addObserver:self \n                                             selector:@selector(positionHUD:) \n                                                 name:UIKeyboardDidHideNotification\n                                               object:nil];\n    \n    [[NSNotificationCenter defaultCenter] addObserver:self \n                                             selector:@selector(positionHUD:) \n                                                 name:UIKeyboardWillShowNotification\n                                               object:nil];\n    \n    [[NSNotificationCenter defaultCenter] addObserver:self \n                                             selector:@selector(positionHUD:) \n                                                 name:UIKeyboardDidShowNotification\n                                               object:nil];\n}\n\n\n- (void)positionHUD:(NSNotification*)notification {\n    \n    CGFloat keyboardHeight;\n    double animationDuration;\n    \n    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];\n    \n    if(notification) {\n        NSDictionary* keyboardInfo = [notification userInfo];\n        CGRect keyboardFrame = [[keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];\n        animationDuration = [[keyboardInfo valueForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];\n        \n        if(notification.name == UIKeyboardWillShowNotification || notification.name == UIKeyboardDidShowNotification) {\n            if(UIInterfaceOrientationIsPortrait(orientation))\n                keyboardHeight = keyboardFrame.size.height;\n            else\n                keyboardHeight = keyboardFrame.size.width;\n        } else\n            keyboardHeight = 0;\n    } else {\n        keyboardHeight = self.visibleKeyboardHeight;\n    }\n    \n    CGRect orientationFrame = [UIScreen mainScreen].bounds;\n    CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;\n    \n    if(UIInterfaceOrientationIsLandscape(orientation)) {\n        float temp = orientationFrame.size.width;\n        orientationFrame.size.width = orientationFrame.size.height;\n        orientationFrame.size.height = temp;\n        \n        temp = statusBarFrame.size.width;\n        statusBarFrame.size.width = statusBarFrame.size.height;\n        statusBarFrame.size.height = temp;\n    }\n    \n    CGFloat activeHeight = orientationFrame.size.height;\n    \n    if(keyboardHeight > 0)\n        activeHeight += statusBarFrame.size.height*2;\n    \n    activeHeight -= keyboardHeight;\n    CGFloat posY = floor(activeHeight*0.45);\n    CGFloat posX = orientationFrame.size.width/2;\n    \n    CGPoint newCenter;\n    CGFloat rotateAngle;\n    \n    switch (orientation) { \n        case UIInterfaceOrientationPortraitUpsideDown:\n            rotateAngle = M_PI; \n            newCenter = CGPointMake(posX, orientationFrame.size.height-posY);\n            break;\n        case UIInterfaceOrientationLandscapeLeft:\n            rotateAngle = -M_PI/2.0f;\n            newCenter = CGPointMake(posY, posX);\n            break;\n        case UIInterfaceOrientationLandscapeRight:\n            rotateAngle = M_PI/2.0f;\n            newCenter = CGPointMake(orientationFrame.size.height-posY, posX);\n            break;\n        default: // as UIInterfaceOrientationPortrait\n            rotateAngle = 0.0;\n            newCenter = CGPointMake(posX, posY);\n            break;\n    } \n    \n    if(notification) {\n        [UIView animateWithDuration:animationDuration \n                              delay:0 \n                            options:UIViewAnimationOptionAllowUserInteraction \n                         animations:^{\n                             [self moveToPoint:newCenter rotateAngle:rotateAngle];\n                         } completion:NULL];\n    } \n    \n    else {\n        [self moveToPoint:newCenter rotateAngle:rotateAngle];\n    }\n    \n}\n\n- (void)moveToPoint:(CGPoint)newCenter rotateAngle:(CGFloat)angle {\n    self.hudView.transform = CGAffineTransformMakeRotation(angle); \n    self.hudView.center = newCenter;\n}\n\n#pragma mark - Master show/dismiss methods\n\n- (void)showWithStatus:(NSString*)string maskType:(SVProgressHUDMaskType)hudMaskType networkIndicator:(BOOL)show {\n    dispatch_async(dispatch_get_main_queue(), ^{\n        if(!self.superview)\n            [self.overlayWindow addSubview:self];\n        \n        self.fadeOutTimer = nil;\n        self.imageView.hidden = YES;\n        self.maskType = hudMaskType;\n        \n        [self setStatus:string];\n        [self.spinnerView startAnimating];\n        \n        if(self.maskType != SVProgressHUDMaskTypeNone) {\n            self.overlayWindow.userInteractionEnabled = YES;\n        } else {\n            self.overlayWindow.userInteractionEnabled = NO;\n        }\n        \n        [self.overlayWindow makeKeyAndVisible];\n        [self positionHUD:nil];\n        \n        if(self.alpha != 1) {\n            [self registerNotifications];\n            self.hudView.transform = CGAffineTransformScale(self.hudView.transform, 1.3, 1.3);\n            \n            [UIView animateWithDuration:0.15\n                                  delay:0\n                                options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState\n                             animations:^{\t\n                                 self.hudView.transform = CGAffineTransformScale(self.hudView.transform, 1/1.3, 1/1.3);\n                                 self.alpha = 1;\n                             }\n                             completion:NULL];\n        }\n        \n        [self setNeedsDisplay];\n    });\n}\n\n\n- (void)dismissWithStatus:(NSString*)string error:(BOOL)error {\n\t[self dismissWithStatus:string error:error afterDelay:0.9];\n}\n\n\n- (void)dismissWithStatus:(NSString *)string error:(BOOL)error afterDelay:(NSTimeInterval)seconds {\n    dispatch_async(dispatch_get_main_queue(), ^{\n        if(self.alpha != 1)\n            return;\n        \n        if(error)\n            self.imageView.image = [UIImage imageNamed:@\"SVProgressHUD.bundle/error.png\"];\n        else\n            self.imageView.image = [UIImage imageNamed:@\"SVProgressHUD.bundle/success.png\"];\n        \n        self.imageView.hidden = NO;\n        [self setStatus:string];\n        [self.spinnerView stopAnimating];\n        \n        self.fadeOutTimer = [NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(dismiss) userInfo:nil repeats:NO];\n    });\n}\n\n- (void)dismiss {\n    dispatch_async(dispatch_get_main_queue(), ^{\n\n        [UIView animateWithDuration:0.15\n                              delay:0\n                            options:UIViewAnimationCurveEaseIn | UIViewAnimationOptionAllowUserInteraction\n                         animations:^{\t\n                             self.hudView.transform = CGAffineTransformScale(self.hudView.transform, 0.8, 0.8);\n                             self.alpha = 0;\n                         }\n                         completion:^(BOOL finished){ \n                             if(self.alpha == 0) {\n                                 [[NSNotificationCenter defaultCenter] removeObserver:self];\n                                 [hudView removeFromSuperview];\n                                 hudView = nil;\n                                 \n                                 // Make sure to remove the overlay window from the list of windows\n                                 // before trying to find the key window in that same list\n                                 NSMutableArray *windows = [[NSMutableArray alloc] initWithArray:[UIApplication sharedApplication].windows];\n                                 [windows removeObject:overlayWindow];\n                                 overlayWindow = nil;\n                                 \n                                 [windows enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(UIWindow *window, NSUInteger idx, BOOL *stop) {\n                                   if([window isKindOfClass:[UIWindow class]] && window.windowLevel == UIWindowLevelNormal) {\n                                     [window makeKeyWindow];\n                                     *stop = YES;\n                                   }\n                                 }];\n                                 \n                                 // uncomment to make sure UIWindow is gone from app.windows\n                                 //NSLog(@\"%@\", [UIApplication sharedApplication].windows);\n                                 //NSLog(@\"keyWindow = %@\", [UIApplication sharedApplication].keyWindow);\n                             }\n                         }];\n    });\n}\n\n#pragma mark - Utilities\n\n+ (BOOL)isVisible {\n    return ([SVProgressHUD sharedView].alpha == 1);\n}\n\n\n#pragma mark - Getters\n\n- (UIWindow *)overlayWindow {\n    if(!overlayWindow) {\n        overlayWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n        overlayWindow.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n        overlayWindow.backgroundColor = [UIColor clearColor];\n        overlayWindow.userInteractionEnabled = NO;\n    }\n    return overlayWindow;\n}\n\n- (UIView *)hudView {\n    if(!hudView) {\n        hudView = [[UIView alloc] initWithFrame:CGRectZero];\n        hudView.layer.cornerRadius = 10;\n\t\thudView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.8];\n        hudView.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin |\n                                    UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin);\n        \n        [self addSubview:hudView];\n    }\n    return hudView;\n}\n\n- (UILabel *)stringLabel {\n    if (stringLabel == nil) {\n        stringLabel = [[UILabel alloc] initWithFrame:CGRectZero];\n\t\tstringLabel.textColor = [UIColor whiteColor];\n\t\tstringLabel.backgroundColor = [UIColor clearColor];\n\t\tstringLabel.adjustsFontSizeToFitWidth = YES;\n\t\tstringLabel.textAlignment = UITextAlignmentCenter;\n\t\tstringLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters;\n\t\tstringLabel.font = [UIFont boldSystemFontOfSize:16];\n\t\tstringLabel.shadowColor = [UIColor blackColor];\n\t\tstringLabel.shadowOffset = CGSizeMake(0, -1);\n        stringLabel.numberOfLines = 0;\n    }\n    \n    if(!stringLabel.superview)\n        [self.hudView addSubview:stringLabel];\n    \n    return stringLabel;\n}\n\n- (UIImageView *)imageView {\n    if (imageView == nil)\n        imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 28, 28)];\n    \n    if(!imageView.superview)\n        [self.hudView addSubview:imageView];\n    \n    return imageView;\n}\n\n- (UIActivityIndicatorView *)spinnerView {\n    if (spinnerView == nil) {\n        spinnerView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];\n\t\tspinnerView.hidesWhenStopped = YES;\n\t\tspinnerView.bounds = CGRectMake(0, 0, 37, 37);\n    }\n    \n    if(!spinnerView.superview)\n        [self.hudView addSubview:spinnerView];\n    \n    return spinnerView;\n}\n\n- (CGFloat)visibleKeyboardHeight {\n        \n    UIWindow *keyboardWindow = nil;\n    for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) {\n        if(![[testWindow class] isEqual:[UIWindow class]]) {\n            keyboardWindow = testWindow;\n            break;\n        }\n    }\n\n    // Locate UIKeyboard.  \n    UIView *foundKeyboard = nil;\n    for (__strong UIView *possibleKeyboard in [keyboardWindow subviews]) {\n        \n        // iOS 4 sticks the UIKeyboard inside a UIPeripheralHostView.\n        if ([[possibleKeyboard description] hasPrefix:@\"<UIPeripheralHostView\"]) {\n            possibleKeyboard = [[possibleKeyboard subviews] objectAtIndex:0];\n        }                                                                                \n        \n        if ([[possibleKeyboard description] hasPrefix:@\"<UIKeyboard\"]) {\n            foundKeyboard = possibleKeyboard;\n            break;\n        }\n    }\n        \n    if(foundKeyboard && foundKeyboard.bounds.size.height > 100)\n        return foundKeyboard.bounds.size.height;\n    \n    return 0;\n}\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/URLEntity.h",
    "content": "//\n//  URLEntity.h\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <CoreData/CoreData.h>\n\n\n@interface URLEntity : NSManagedObject\n\n@property (nonatomic, retain) NSString * fullurl;\n@property (nonatomic, retain) NSString * filename;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/URLEntity.m",
    "content": "//\n//  URLEntity.m\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#import \"URLEntity.h\"\n\n\n@implementation URLEntity\n\n@dynamic fullurl;\n@dynamic filename;\n\n@end\n"
  },
  {
    "path": "shakefun/shakefun/ViewController.h",
    "content": "//\n//  ViewController.h\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n@property (weak, nonatomic) IBOutlet UIWebView *webViewBrowser;\n- (IBAction)buttonNextToggle:(id)sender;\n- (IBAction)buttonCollectToggle:(id)sender;\n\n@end\n\n@interface NSString (TMNSStringExtensionMethods)\n- (NSArray *)componentsSeparatedFromString:(NSString *)fromString toString:(NSString *)toString;\n@end\n"
  },
  {
    "path": "shakefun/shakefun/ViewController.m",
    "content": "//\n//  ViewController.m\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#import \"ViewController.h\"\n#import \"AFNetworking.h\"\n#import \"CollectViewController.h\"\n#import \"URLEntity.h\"\n#import \"SVProgressHUD.h\"\n\n@interface ViewController ()\n\n@end\n\n@implementation ViewController\n{\n    AFURLSessionManager *downloadManager;\n    NSURLSessionDownloadTask *downloadTask;\n    NSMutableArray *sources;\n    int currentIndex;\n}\n-(void)viewDidAppear:(BOOL)animated\n{\n    [self.navigationController setNavigationBarHidden:YES animated:YES];\n}\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    // Do any additional setup after loading the view, typically from a nib.\n    \n    sources = [[NSMutableArray alloc]init];\n    \n    [[UIApplication sharedApplication] setApplicationSupportsShakeToEdit:YES];\n    \n    [self becomeFirstResponder];\n    \n    if (!downloadManager) {\n        NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:[NSString stringWithFormat:@\"shakefun_downloadidentifier_%d\", 1]];\n        [configuration setAllowsCellularAccess:NO];//禁止使用蜂窝网络\n        downloadManager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];\n        [downloadManager.reachabilityManager startMonitoring];\n    }\n\n    [self reloadSources];\n    if (sources.count == 0) {\n        currentIndex = 0;\n    }\n    else\n    {\n        currentIndex =  arc4random() % sources.count;\n    }\n    \n    //[self.webViewBrowser setScalesPageToFit:YES];\n    self.automaticallyAdjustsScrollViewInsets = NO;//去除顶部20像素空白条\n    //self.webViewBrowser.opaque = NO;\n\n//    CGRect rt = self.webViewBrowser.frame;\n//    rt.size.width = self.view.frame.size.width;\n    [self.webViewBrowser loadHTMLString:@\"<div align=center><font color=#FF0000>Wellcom to ShakeFun! ^_! </font></div>\" baseURL:nil];\n    self.webViewBrowser.backgroundColor = [UIColor lightGrayColor];\n    \n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(processNofitications:) name:@\"shakefun_reload_urls\" object:nil];\n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(processNofitications:) name:UIDeviceOrientationDidChangeNotification object:nil];\n}\n-(void)dealloc\n{\n    [[NSNotificationCenter defaultCenter] removeObserver:self forKeyPath:@\"shakefun_reload_urls\"];\n    [[NSNotificationCenter defaultCenter] removeObserver:self forKeyPath:UIDeviceOrientationDidChangeNotification];\n}\n-(void)reloadSources\n{\n    [sources removeAllObjects];\n    NSArray* allurls = [URLEntity MR_findAll];\n    for (URLEntity *url in allurls) {\n        [sources addObject:url.fullurl];\n    }\n}\n-(void)processNofitications:(NSNotification *)notification\n{\n    NSLog(@\"receive notification:%@\", notification.name);\n    if ([notification.name isEqualToString:@\"shakefun_reload_urls\"]) {\n        [self reloadSources];\n    }\n    else if ([notification.name isEqualToString:UIDeviceOrientationDidChangeNotification])\n    {\n        [self buttonNextToggleWithIndex:currentIndex];\n    }\n}\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n- (IBAction)buttonNextToggle:(id)sender {\n    if (sources.count <= 0) {\n       UIAlertView *view = [[UIAlertView alloc] initWithTitle:@\"提示\" message:@\"请先采集数据->[Collect]\" delegate:self cancelButtonTitle:@\"确定\" otherButtonTitles:nil, nil];\n        [view show];\n    }\n    else\n    {\n        currentIndex = arc4random() % sources.count;\n        [self buttonNextToggleWithIndex:currentIndex];\n    }\n}\n\n- (IBAction)buttonCollectToggle:(id)sender {\n    \n    UIStoryboard *sb = [UIStoryboard storyboardWithName:@\"Main\" bundle:nil];\n    CollectViewController* view = [sb instantiateViewControllerWithIdentifier:@\"CollectViewController\"];\n    [self.navigationController pushViewController:view animated:YES];\n}\n\n\n\n- (void)buttonNextToggleWithIndex:(NSInteger)index {\n    \n    NSString* docPath =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];\n    NSString *fileUrl = [sources objectAtIndex:index];\n    NSString* file = [NSString stringWithFormat:@\"%@/%@\", docPath, [fileUrl lastPathComponent]];\n    NSURL* url = [NSURL fileURLWithPath:file];\n    \n    if ([[NSFileManager defaultManager] fileExistsAtPath:file]) {\n        fileUrl = [url absoluteString];\n        //获取宽高\n        UIImage *img = [UIImage imageWithContentsOfFile:file];\n        //按webview窗口比例缩放\n        CGRect rt = self.webViewBrowser.frame;\n        //取小的宽度\n        CGFloat w = rt.size.width > img.size.width ? img.size.width : rt.size.width;\n        w = w - 20;\n        CGFloat wh = w / img.size.width;\n        NSString *content = [NSString stringWithFormat:@\"<div align=center><img width=%f height=%f src=%@></div>\", img.size.width * wh, img.size.height * wh, fileUrl];\n        [self.webViewBrowser loadHTMLString:content baseURL:nil];\n        //self.webViewBrowser.\n    }\n    else\n    {\n        //显示正在更新\n        [self startDownload:index];\n    }\n   \n}\n#pragma shake action\n- (void) motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event\n{\n    //检测到摇动\n    NSLog(@\"Go:%s\", __FUNCTION__);\n}\n\n- (void) motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event\n{\n    //摇动取消\n    NSLog(@\"Go:%s\", __FUNCTION__);\n}\n\n- (void) motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event\n{\n    NSLog(@\"Go:%s\", __FUNCTION__);\n    //摇动结束\n    if (event.subtype == UIEventSubtypeMotionShake) {\n        //something happens\n        [self buttonNextToggle:nil];\n    }\n}\n\n#pragma network\n-(void)startDownload:(NSInteger)index\n{\n    static bool bFirst = YES;\n    if (bFirst) {\n        NSOperationQueue * operationQueue = downloadManager.operationQueue;//avoid retain cycle\n        [downloadManager.reachabilityManager setReachabilityStatusChangeBlock :^ (AFNetworkReachabilityStatus status)\n         {\n             switch (status) {\n                 case AFNetworkReachabilityStatusReachableViaWiFi:\n                     NSLog(@\"DownloadManager AFNetworkReachabilityStatusReachableViaWiFi\");\n                     [operationQueue setSuspended:NO];\n                     break ;\n                 case AFNetworkReachabilityStatusReachableViaWWAN:\n                 case AFNetworkReachabilityStatusNotReachable:\n                 default:\n                     //suspud\n                     [operationQueue setSuspended:YES];\n                     NSLog(@\"DownloadManager AFNetworkReachabilityStatusNotReachable\");\n                     break ;\n             }\n             \n         }];\n        bFirst = NO;\n    }\n\n    //下载文件保存位置\n    NSString* docPath =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];\n    NSString *fileUrl = [sources objectAtIndex:index];\n\n    NSString* file = [NSString stringWithFormat:@\"%@/%@\", docPath, [fileUrl lastPathComponent]];\n    NSLog(@\"download file name is %@\", file);\n    if ([[NSFileManager defaultManager] fileExistsAtPath:file]) {\n        return;\n     }\n    NSURL *downurl = [NSURL URLWithString:fileUrl];\n    NSURLRequest *request = [NSURLRequest requestWithURL:downurl];\n    \n    //监控下载进度，调试用\n    NSProgress* progress = [[NSProgress alloc]init];\n    //创建下载任务\n    [SVProgressHUD showWithStatus:@\"摇到一个大家伙，稍等片刻^_!\"];\n    downloadTask = [downloadManager downloadTaskWithRequest:request\n                                           progress:&progress\n                                        destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)\n                    {\n                        \n                        NSLog(@\"destination:path=%@ targetPath:%@\", file, targetPath);\n                        return [NSURL fileURLWithPath:file];\n                    }\n                                  completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)\n                    {\n                        NSLog(@\"File downloaded to: %@ error:%@\", filePath, error);\n                        if (!error) {\n                            \n                            downloadTask = nil;\n                        }\n                        [SVProgressHUD dismiss];\n                        dispatch_async(dispatch_get_main_queue(), ^{\n                            [self buttonNextToggleWithIndex:index];\n                        });\n                    }];\n    \n    //开始下载\n    [downloadTask resume];\n    // Observe fractionCompleted using KVO\n    [progress addObserver:self\n               forKeyPath:@\"fractionCompleted\"\n                  options:NSKeyValueObservingOptionNew\n                  context:nil];\n    \n}\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context\n{\n    if ([keyPath isEqualToString:@\"fractionCompleted\"] && [object isKindOfClass:[NSProgress class]]) {\n        NSProgress *progress = (NSProgress *)object;\n        NSLog(@\"download progress is %f\", progress.fractionCompleted);\n        if (progress.fractionCompleted >= 1.0f) {\n            //下载完成后，移除观察者\n            [progress removeObserver:self forKeyPath:@\"fractionCompleted\"];\n        }\n    }\n}\n\n\n@end\n\n\n@implementation NSString (TMNSStringExtensionMethods)\n\n- (NSArray *)componentsSeparatedFromString:(NSString *)fromString toString:(NSString *)toString\n{\n    if (!fromString || !toString || fromString.length == 0 || toString.length == 0) {\n        return nil;\n    }\n    NSMutableArray *subStringsArray = [[NSMutableArray alloc] init];\n    NSString *tempString = self;\n    NSRange range = [tempString rangeOfString:fromString];\n    while (range.location != NSNotFound) {\n        tempString = [tempString substringFromIndex:(range.location + range.length)];\n        range = [tempString rangeOfString:toString];\n        if (range.location != NSNotFound) {\n            [subStringsArray addObject:[tempString substringToIndex:range.location]];\n            range = [tempString rangeOfString:fromString];\n        }\n        else\n        {\n            break;\n        }\n    }\n    return subStringsArray;\n}\n\n@end"
  },
  {
    "path": "shakefun/shakefun/main.m",
    "content": "//\n//  main.m\n//  shakefun\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "shakefun/shakefun/shakefun.xcdatamodeld/.xccurrentversion",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>_XCCurrentVersionName</key>\n\t<string>shakefun.xcdatamodel</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "shakefun/shakefun/shakefun.xcdatamodeld/shakefun.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model userDefinedModelVersionIdentifier=\"\" type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"7701\" systemVersion=\"14F27\" minimumToolsVersion=\"Automatic\" macOSVersion=\"Automatic\" iOSVersion=\"Automatic\">\n    <entity name=\"URLEntity\" representedClassName=\"URLEntity\" syncable=\"YES\">\n        <attribute name=\"filename\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"fullurl\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n    </entity>\n    <elements>\n        <element name=\"URLEntity\" positionX=\"-63\" positionY=\"-18\" width=\"128\" height=\"75\"/>\n    </elements>\n</model>"
  },
  {
    "path": "shakefun/shakefun.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t985474351B9FD35F00A892C8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474341B9FD35F00A892C8 /* main.m */; };\n\t\t985474381B9FD35F00A892C8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474371B9FD35F00A892C8 /* AppDelegate.m */; };\n\t\t9854743B1B9FD35F00A892C8 /* shakefun.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 985474391B9FD35F00A892C8 /* shakefun.xcdatamodeld */; };\n\t\t9854743E1B9FD35F00A892C8 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854743D1B9FD35F00A892C8 /* ViewController.m */; };\n\t\t985474411B9FD35F00A892C8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9854743F1B9FD35F00A892C8 /* Main.storyboard */; };\n\t\t985474431B9FD35F00A892C8 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 985474421B9FD35F00A892C8 /* Images.xcassets */; };\n\t\t985474461B9FD35F00A892C8 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 985474441B9FD35F00A892C8 /* LaunchScreen.xib */; };\n\t\t985474521B9FD35F00A892C8 /* shakefunTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474511B9FD35F00A892C8 /* shakefunTests.m */; };\n\t\t9854746F1B9FF45300A892C8 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854745D1B9FF45300A892C8 /* AFHTTPRequestOperation.m */; };\n\t\t985474701B9FF45300A892C8 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854745F1B9FF45300A892C8 /* AFHTTPRequestOperationManager.m */; };\n\t\t985474711B9FF45300A892C8 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474611B9FF45300A892C8 /* AFHTTPSessionManager.m */; };\n\t\t985474721B9FF45300A892C8 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474641B9FF45300A892C8 /* AFNetworkReachabilityManager.m */; };\n\t\t985474731B9FF45300A892C8 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474661B9FF45300A892C8 /* AFSecurityPolicy.m */; };\n\t\t985474741B9FF45300A892C8 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474681B9FF45300A892C8 /* AFURLConnectionOperation.m */; };\n\t\t985474751B9FF45300A892C8 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854746A1B9FF45300A892C8 /* AFURLRequestSerialization.m */; };\n\t\t985474761B9FF45300A892C8 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854746C1B9FF45300A892C8 /* AFURLResponseSerialization.m */; };\n\t\t985474771B9FF45300A892C8 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854746E1B9FF45300A892C8 /* AFURLSessionManager.m */; };\n\t\t9854747A1BA00B5600A892C8 /* CollectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474791BA00B5600A892C8 /* CollectViewController.m */; };\n\t\t9854747D1BA01B5100A892C8 /* URLEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854747C1BA01B5100A892C8 /* URLEntity.m */; };\n\t\t985474BA1BA01C7500A892C8 /* MagicalImportFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474821BA01C7500A892C8 /* MagicalImportFunctions.m */; };\n\t\t985474BB1BA01C7500A892C8 /* NSAttributeDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474841BA01C7500A892C8 /* NSAttributeDescription+MagicalDataImport.m */; };\n\t\t985474BC1BA01C7500A892C8 /* NSEntityDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474861BA01C7500A892C8 /* NSEntityDescription+MagicalDataImport.m */; };\n\t\t985474BD1BA01C7500A892C8 /* NSNumber+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474881BA01C7500A892C8 /* NSNumber+MagicalDataImport.m */; };\n\t\t985474BE1BA01C7500A892C8 /* NSObject+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854748A1BA01C7500A892C8 /* NSObject+MagicalDataImport.m */; };\n\t\t985474BF1BA01C7500A892C8 /* NSRelationshipDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854748C1BA01C7500A892C8 /* NSRelationshipDescription+MagicalDataImport.m */; };\n\t\t985474C01BA01C7500A892C8 /* NSString+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854748E1BA01C7500A892C8 /* NSString+MagicalDataImport.m */; };\n\t\t985474C11BA01C7500A892C8 /* NSManagedObject+MagicalAggregation.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474911BA01C7500A892C8 /* NSManagedObject+MagicalAggregation.m */; };\n\t\t985474C21BA01C7500A892C8 /* NSManagedObject+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474931BA01C7500A892C8 /* NSManagedObject+MagicalDataImport.m */; };\n\t\t985474C31BA01C7500A892C8 /* NSManagedObject+MagicalFinders.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474951BA01C7500A892C8 /* NSManagedObject+MagicalFinders.m */; };\n\t\t985474C41BA01C7500A892C8 /* NSManagedObject+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474971BA01C7500A892C8 /* NSManagedObject+MagicalRecord.m */; };\n\t\t985474C51BA01C7500A892C8 /* NSManagedObject+MagicalRequests.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474991BA01C7500A892C8 /* NSManagedObject+MagicalRequests.m */; };\n\t\t985474C61BA01C7500A892C8 /* NSManagedObjectContext+MagicalObserving.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854749C1BA01C7500A892C8 /* NSManagedObjectContext+MagicalObserving.m */; };\n\t\t985474C71BA01C7500A892C8 /* NSManagedObjectContext+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 9854749E1BA01C7500A892C8 /* NSManagedObjectContext+MagicalRecord.m */; };\n\t\t985474C81BA01C7500A892C8 /* NSManagedObjectContext+MagicalSaves.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474A01BA01C7500A892C8 /* NSManagedObjectContext+MagicalSaves.m */; };\n\t\t985474C91BA01C7500A892C8 /* NSManagedObjectContext+MagicalThreading.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474A21BA01C7500A892C8 /* NSManagedObjectContext+MagicalThreading.m */; };\n\t\t985474CA1BA01C7500A892C8 /* NSManagedObjectModel+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474A41BA01C7500A892C8 /* NSManagedObjectModel+MagicalRecord.m */; };\n\t\t985474CB1BA01C7500A892C8 /* NSPersistentStore+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474A61BA01C7500A892C8 /* NSPersistentStore+MagicalRecord.m */; };\n\t\t985474CC1BA01C7500A892C8 /* NSPersistentStoreCoordinator+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474A81BA01C7500A892C8 /* NSPersistentStoreCoordinator+MagicalRecord.m */; };\n\t\t985474CD1BA01C7500A892C8 /* MagicalRecord+Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474AB1BA01C7500A892C8 /* MagicalRecord+Actions.m */; };\n\t\t985474CE1BA01C7500A892C8 /* MagicalRecord+ErrorHandling.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474AD1BA01C7500A892C8 /* MagicalRecord+ErrorHandling.m */; };\n\t\t985474CF1BA01C7500A892C8 /* MagicalRecord+iCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474AF1BA01C7500A892C8 /* MagicalRecord+iCloud.m */; };\n\t\t985474D01BA01C7500A892C8 /* MagicalRecord+Options.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474B11BA01C7500A892C8 /* MagicalRecord+Options.m */; };\n\t\t985474D11BA01C7500A892C8 /* MagicalRecord+Setup.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474B31BA01C7500A892C8 /* MagicalRecord+Setup.m */; };\n\t\t985474D21BA01C7500A892C8 /* MagicalRecord+ShorthandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474B51BA01C7500A892C8 /* MagicalRecord+ShorthandSupport.m */; };\n\t\t985474D31BA01C7500A892C8 /* MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474B71BA01C7500A892C8 /* MagicalRecord.m */; };\n\t\t985474D51BA01CF500A892C8 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 985474D41BA01CF500A892C8 /* CoreData.framework */; };\n\t\t985474DB1BA169CE00A892C8 /* SVProgressHUD.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 985474D81BA169CE00A892C8 /* SVProgressHUD.bundle */; };\n\t\t985474DC1BA169CE00A892C8 /* SVProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474DA1BA169CE00A892C8 /* SVProgressHUD.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t9854744C1B9FD35F00A892C8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 985474271B9FD35F00A892C8 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9854742E1B9FD35F00A892C8;\n\t\t\tremoteInfo = shakefun;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t9854742F1B9FD35F00A892C8 /* shakefun.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = shakefun.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t985474331B9FD35F00A892C8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t985474341B9FD35F00A892C8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t985474361B9FD35F00A892C8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t985474371B9FD35F00A892C8 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t9854743A1B9FD35F00A892C8 /* shakefun.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = shakefun.xcdatamodel; sourceTree = \"<group>\"; };\n\t\t9854743C1B9FD35F00A892C8 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\t9854743D1B9FD35F00A892C8 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\t985474401B9FD35F00A892C8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t985474421B9FD35F00A892C8 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t985474451B9FD35F00A892C8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = \"<group>\"; };\n\t\t9854744B1B9FD35F00A892C8 /* shakefunTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = shakefunTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t985474501B9FD35F00A892C8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t985474511B9FD35F00A892C8 /* shakefunTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = shakefunTests.m; sourceTree = \"<group>\"; };\n\t\t9854745C1B9FF45300A892C8 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperation.h; sourceTree = \"<group>\"; };\n\t\t9854745D1B9FF45300A892C8 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperation.m; sourceTree = \"<group>\"; };\n\t\t9854745E1B9FF45300A892C8 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperationManager.h; sourceTree = \"<group>\"; };\n\t\t9854745F1B9FF45300A892C8 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperationManager.m; sourceTree = \"<group>\"; };\n\t\t985474601B9FF45300A892C8 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPSessionManager.h; sourceTree = \"<group>\"; };\n\t\t985474611B9FF45300A892C8 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManager.m; sourceTree = \"<group>\"; };\n\t\t985474621B9FF45300A892C8 /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworking.h; sourceTree = \"<group>\"; };\n\t\t985474631B9FF45300A892C8 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkReachabilityManager.h; sourceTree = \"<group>\"; };\n\t\t985474641B9FF45300A892C8 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManager.m; sourceTree = \"<group>\"; };\n\t\t985474651B9FF45300A892C8 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSecurityPolicy.h; sourceTree = \"<group>\"; };\n\t\t985474661B9FF45300A892C8 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicy.m; sourceTree = \"<group>\"; };\n\t\t985474671B9FF45300A892C8 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = \"<group>\"; };\n\t\t985474681B9FF45300A892C8 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = \"<group>\"; };\n\t\t985474691B9FF45300A892C8 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLRequestSerialization.h; sourceTree = \"<group>\"; };\n\t\t9854746A1B9FF45300A892C8 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLRequestSerialization.m; sourceTree = \"<group>\"; };\n\t\t9854746B1B9FF45300A892C8 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLResponseSerialization.h; sourceTree = \"<group>\"; };\n\t\t9854746C1B9FF45300A892C8 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLResponseSerialization.m; sourceTree = \"<group>\"; };\n\t\t9854746D1B9FF45300A892C8 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = \"<group>\"; };\n\t\t9854746E1B9FF45300A892C8 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = \"<group>\"; };\n\t\t985474781BA00B4E00A892C8 /* CollectViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CollectViewController.h; sourceTree = \"<group>\"; };\n\t\t985474791BA00B5600A892C8 /* CollectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollectViewController.m; sourceTree = \"<group>\"; };\n\t\t9854747B1BA01B5100A892C8 /* URLEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = URLEntity.h; sourceTree = \"<group>\"; };\n\t\t9854747C1BA01B5100A892C8 /* URLEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = URLEntity.m; sourceTree = \"<group>\"; };\n\t\t985474811BA01C7500A892C8 /* MagicalImportFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MagicalImportFunctions.h; sourceTree = \"<group>\"; };\n\t\t985474821BA01C7500A892C8 /* MagicalImportFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MagicalImportFunctions.m; sourceTree = \"<group>\"; };\n\t\t985474831BA01C7500A892C8 /* NSAttributeDescription+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSAttributeDescription+MagicalDataImport.h\"; sourceTree = \"<group>\"; };\n\t\t985474841BA01C7500A892C8 /* NSAttributeDescription+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSAttributeDescription+MagicalDataImport.m\"; sourceTree = \"<group>\"; };\n\t\t985474851BA01C7500A892C8 /* NSEntityDescription+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSEntityDescription+MagicalDataImport.h\"; sourceTree = \"<group>\"; };\n\t\t985474861BA01C7500A892C8 /* NSEntityDescription+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSEntityDescription+MagicalDataImport.m\"; sourceTree = \"<group>\"; };\n\t\t985474871BA01C7500A892C8 /* NSNumber+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSNumber+MagicalDataImport.h\"; sourceTree = \"<group>\"; };\n\t\t985474881BA01C7500A892C8 /* NSNumber+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSNumber+MagicalDataImport.m\"; sourceTree = \"<group>\"; };\n\t\t985474891BA01C7500A892C8 /* NSObject+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSObject+MagicalDataImport.h\"; sourceTree = \"<group>\"; };\n\t\t9854748A1BA01C7500A892C8 /* NSObject+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSObject+MagicalDataImport.m\"; sourceTree = \"<group>\"; };\n\t\t9854748B1BA01C7500A892C8 /* NSRelationshipDescription+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSRelationshipDescription+MagicalDataImport.h\"; sourceTree = \"<group>\"; };\n\t\t9854748C1BA01C7500A892C8 /* NSRelationshipDescription+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSRelationshipDescription+MagicalDataImport.m\"; sourceTree = \"<group>\"; };\n\t\t9854748D1BA01C7500A892C8 /* NSString+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSString+MagicalDataImport.h\"; sourceTree = \"<group>\"; };\n\t\t9854748E1BA01C7500A892C8 /* NSString+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSString+MagicalDataImport.m\"; sourceTree = \"<group>\"; };\n\t\t985474901BA01C7500A892C8 /* NSManagedObject+MagicalAggregation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObject+MagicalAggregation.h\"; sourceTree = \"<group>\"; };\n\t\t985474911BA01C7500A892C8 /* NSManagedObject+MagicalAggregation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObject+MagicalAggregation.m\"; sourceTree = \"<group>\"; };\n\t\t985474921BA01C7500A892C8 /* NSManagedObject+MagicalDataImport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObject+MagicalDataImport.h\"; sourceTree = \"<group>\"; };\n\t\t985474931BA01C7500A892C8 /* NSManagedObject+MagicalDataImport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObject+MagicalDataImport.m\"; sourceTree = \"<group>\"; };\n\t\t985474941BA01C7500A892C8 /* NSManagedObject+MagicalFinders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObject+MagicalFinders.h\"; sourceTree = \"<group>\"; };\n\t\t985474951BA01C7500A892C8 /* NSManagedObject+MagicalFinders.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObject+MagicalFinders.m\"; sourceTree = \"<group>\"; };\n\t\t985474961BA01C7500A892C8 /* NSManagedObject+MagicalRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObject+MagicalRecord.h\"; sourceTree = \"<group>\"; };\n\t\t985474971BA01C7500A892C8 /* NSManagedObject+MagicalRecord.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObject+MagicalRecord.m\"; sourceTree = \"<group>\"; };\n\t\t985474981BA01C7500A892C8 /* NSManagedObject+MagicalRequests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObject+MagicalRequests.h\"; sourceTree = \"<group>\"; };\n\t\t985474991BA01C7500A892C8 /* NSManagedObject+MagicalRequests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObject+MagicalRequests.m\"; sourceTree = \"<group>\"; };\n\t\t9854749B1BA01C7500A892C8 /* NSManagedObjectContext+MagicalObserving.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObjectContext+MagicalObserving.h\"; sourceTree = \"<group>\"; };\n\t\t9854749C1BA01C7500A892C8 /* NSManagedObjectContext+MagicalObserving.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObjectContext+MagicalObserving.m\"; sourceTree = \"<group>\"; };\n\t\t9854749D1BA01C7500A892C8 /* NSManagedObjectContext+MagicalRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObjectContext+MagicalRecord.h\"; sourceTree = \"<group>\"; };\n\t\t9854749E1BA01C7500A892C8 /* NSManagedObjectContext+MagicalRecord.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObjectContext+MagicalRecord.m\"; sourceTree = \"<group>\"; };\n\t\t9854749F1BA01C7500A892C8 /* NSManagedObjectContext+MagicalSaves.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObjectContext+MagicalSaves.h\"; sourceTree = \"<group>\"; };\n\t\t985474A01BA01C7500A892C8 /* NSManagedObjectContext+MagicalSaves.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObjectContext+MagicalSaves.m\"; sourceTree = \"<group>\"; };\n\t\t985474A11BA01C7500A892C8 /* NSManagedObjectContext+MagicalThreading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObjectContext+MagicalThreading.h\"; sourceTree = \"<group>\"; };\n\t\t985474A21BA01C7500A892C8 /* NSManagedObjectContext+MagicalThreading.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObjectContext+MagicalThreading.m\"; sourceTree = \"<group>\"; };\n\t\t985474A31BA01C7500A892C8 /* NSManagedObjectModel+MagicalRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSManagedObjectModel+MagicalRecord.h\"; sourceTree = \"<group>\"; };\n\t\t985474A41BA01C7500A892C8 /* NSManagedObjectModel+MagicalRecord.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSManagedObjectModel+MagicalRecord.m\"; sourceTree = \"<group>\"; };\n\t\t985474A51BA01C7500A892C8 /* NSPersistentStore+MagicalRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSPersistentStore+MagicalRecord.h\"; sourceTree = \"<group>\"; };\n\t\t985474A61BA01C7500A892C8 /* NSPersistentStore+MagicalRecord.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSPersistentStore+MagicalRecord.m\"; sourceTree = \"<group>\"; };\n\t\t985474A71BA01C7500A892C8 /* NSPersistentStoreCoordinator+MagicalRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSPersistentStoreCoordinator+MagicalRecord.h\"; sourceTree = \"<group>\"; };\n\t\t985474A81BA01C7500A892C8 /* NSPersistentStoreCoordinator+MagicalRecord.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSPersistentStoreCoordinator+MagicalRecord.m\"; sourceTree = \"<group>\"; };\n\t\t985474AA1BA01C7500A892C8 /* MagicalRecord+Actions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MagicalRecord+Actions.h\"; sourceTree = \"<group>\"; };\n\t\t985474AB1BA01C7500A892C8 /* MagicalRecord+Actions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MagicalRecord+Actions.m\"; sourceTree = \"<group>\"; };\n\t\t985474AC1BA01C7500A892C8 /* MagicalRecord+ErrorHandling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MagicalRecord+ErrorHandling.h\"; sourceTree = \"<group>\"; };\n\t\t985474AD1BA01C7500A892C8 /* MagicalRecord+ErrorHandling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MagicalRecord+ErrorHandling.m\"; sourceTree = \"<group>\"; };\n\t\t985474AE1BA01C7500A892C8 /* MagicalRecord+iCloud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MagicalRecord+iCloud.h\"; sourceTree = \"<group>\"; };\n\t\t985474AF1BA01C7500A892C8 /* MagicalRecord+iCloud.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MagicalRecord+iCloud.m\"; sourceTree = \"<group>\"; };\n\t\t985474B01BA01C7500A892C8 /* MagicalRecord+Options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MagicalRecord+Options.h\"; sourceTree = \"<group>\"; };\n\t\t985474B11BA01C7500A892C8 /* MagicalRecord+Options.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MagicalRecord+Options.m\"; sourceTree = \"<group>\"; };\n\t\t985474B21BA01C7500A892C8 /* MagicalRecord+Setup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MagicalRecord+Setup.h\"; sourceTree = \"<group>\"; };\n\t\t985474B31BA01C7500A892C8 /* MagicalRecord+Setup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MagicalRecord+Setup.m\"; sourceTree = \"<group>\"; };\n\t\t985474B41BA01C7500A892C8 /* MagicalRecord+ShorthandSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MagicalRecord+ShorthandSupport.h\"; sourceTree = \"<group>\"; };\n\t\t985474B51BA01C7500A892C8 /* MagicalRecord+ShorthandSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MagicalRecord+ShorthandSupport.m\"; sourceTree = \"<group>\"; };\n\t\t985474B61BA01C7500A892C8 /* MagicalRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MagicalRecord.h; sourceTree = \"<group>\"; };\n\t\t985474B71BA01C7500A892C8 /* MagicalRecord.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MagicalRecord.m; sourceTree = \"<group>\"; };\n\t\t985474B81BA01C7500A892C8 /* MagicalRecordShorthand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MagicalRecordShorthand.h; sourceTree = \"<group>\"; };\n\t\t985474B91BA01C7500A892C8 /* CoreData+MagicalRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"CoreData+MagicalRecord.h\"; sourceTree = \"<group>\"; };\n\t\t985474D41BA01CF500A892C8 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\t985474D61BA0217100A892C8 /* PrefixHeader.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PrefixHeader.pch; path = shakefun/PrefixHeader.pch; sourceTree = \"<group>\"; };\n\t\t985474D81BA169CE00A892C8 /* SVProgressHUD.bundle */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.plug-in\"; path = SVProgressHUD.bundle; sourceTree = \"<group>\"; };\n\t\t985474D91BA169CE00A892C8 /* SVProgressHUD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVProgressHUD.h; sourceTree = \"<group>\"; };\n\t\t985474DA1BA169CE00A892C8 /* SVProgressHUD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SVProgressHUD.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t9854742C1B9FD35F00A892C8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t985474D51BA01CF500A892C8 /* CoreData.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t985474481B9FD35F00A892C8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t985474261B9FD35F00A892C8 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474D61BA0217100A892C8 /* PrefixHeader.pch */,\n\t\t\t\t985474D41BA01CF500A892C8 /* CoreData.framework */,\n\t\t\t\t985474311B9FD35F00A892C8 /* shakefun */,\n\t\t\t\t9854744E1B9FD35F00A892C8 /* shakefunTests */,\n\t\t\t\t985474301B9FD35F00A892C8 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t985474301B9FD35F00A892C8 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9854742F1B9FD35F00A892C8 /* shakefun.app */,\n\t\t\t\t9854744B1B9FD35F00A892C8 /* shakefunTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t985474311B9FD35F00A892C8 /* shakefun */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474D71BA169CE00A892C8 /* SVProgressHUD */,\n\t\t\t\t9854747E1BA01C7500A892C8 /* MagicalRecord */,\n\t\t\t\t9854745B1B9FF45300A892C8 /* AFNetworking */,\n\t\t\t\t985474361B9FD35F00A892C8 /* AppDelegate.h */,\n\t\t\t\t985474371B9FD35F00A892C8 /* AppDelegate.m */,\n\t\t\t\t9854743C1B9FD35F00A892C8 /* ViewController.h */,\n\t\t\t\t9854743D1B9FD35F00A892C8 /* ViewController.m */,\n\t\t\t\t985474781BA00B4E00A892C8 /* CollectViewController.h */,\n\t\t\t\t985474791BA00B5600A892C8 /* CollectViewController.m */,\n\t\t\t\t9854743F1B9FD35F00A892C8 /* Main.storyboard */,\n\t\t\t\t985474421B9FD35F00A892C8 /* Images.xcassets */,\n\t\t\t\t985474441B9FD35F00A892C8 /* LaunchScreen.xib */,\n\t\t\t\t985474391B9FD35F00A892C8 /* shakefun.xcdatamodeld */,\n\t\t\t\t985474321B9FD35F00A892C8 /* Supporting Files */,\n\t\t\t\t9854747B1BA01B5100A892C8 /* URLEntity.h */,\n\t\t\t\t9854747C1BA01B5100A892C8 /* URLEntity.m */,\n\t\t\t);\n\t\t\tpath = shakefun;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t985474321B9FD35F00A892C8 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474331B9FD35F00A892C8 /* Info.plist */,\n\t\t\t\t985474341B9FD35F00A892C8 /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9854744E1B9FD35F00A892C8 /* shakefunTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474511B9FD35F00A892C8 /* shakefunTests.m */,\n\t\t\t\t9854744F1B9FD35F00A892C8 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = shakefunTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9854744F1B9FD35F00A892C8 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474501B9FD35F00A892C8 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9854745B1B9FF45300A892C8 /* AFNetworking */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9854745C1B9FF45300A892C8 /* AFHTTPRequestOperation.h */,\n\t\t\t\t9854745D1B9FF45300A892C8 /* AFHTTPRequestOperation.m */,\n\t\t\t\t9854745E1B9FF45300A892C8 /* AFHTTPRequestOperationManager.h */,\n\t\t\t\t9854745F1B9FF45300A892C8 /* AFHTTPRequestOperationManager.m */,\n\t\t\t\t985474601B9FF45300A892C8 /* AFHTTPSessionManager.h */,\n\t\t\t\t985474611B9FF45300A892C8 /* AFHTTPSessionManager.m */,\n\t\t\t\t985474621B9FF45300A892C8 /* AFNetworking.h */,\n\t\t\t\t985474631B9FF45300A892C8 /* AFNetworkReachabilityManager.h */,\n\t\t\t\t985474641B9FF45300A892C8 /* AFNetworkReachabilityManager.m */,\n\t\t\t\t985474651B9FF45300A892C8 /* AFSecurityPolicy.h */,\n\t\t\t\t985474661B9FF45300A892C8 /* AFSecurityPolicy.m */,\n\t\t\t\t985474671B9FF45300A892C8 /* AFURLConnectionOperation.h */,\n\t\t\t\t985474681B9FF45300A892C8 /* AFURLConnectionOperation.m */,\n\t\t\t\t985474691B9FF45300A892C8 /* AFURLRequestSerialization.h */,\n\t\t\t\t9854746A1B9FF45300A892C8 /* AFURLRequestSerialization.m */,\n\t\t\t\t9854746B1B9FF45300A892C8 /* AFURLResponseSerialization.h */,\n\t\t\t\t9854746C1B9FF45300A892C8 /* AFURLResponseSerialization.m */,\n\t\t\t\t9854746D1B9FF45300A892C8 /* AFURLSessionManager.h */,\n\t\t\t\t9854746E1B9FF45300A892C8 /* AFURLSessionManager.m */,\n\t\t\t);\n\t\t\tpath = AFNetworking;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9854747E1BA01C7500A892C8 /* MagicalRecord */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9854747F1BA01C7500A892C8 /* Categories */,\n\t\t\t\t985474A91BA01C7500A892C8 /* Core */,\n\t\t\t\t985474B91BA01C7500A892C8 /* CoreData+MagicalRecord.h */,\n\t\t\t);\n\t\t\tpath = MagicalRecord;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9854747F1BA01C7500A892C8 /* Categories */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474801BA01C7500A892C8 /* DataImport */,\n\t\t\t\t9854748F1BA01C7500A892C8 /* NSManagedObject */,\n\t\t\t\t9854749A1BA01C7500A892C8 /* NSManagedObjectContext */,\n\t\t\t\t985474A31BA01C7500A892C8 /* NSManagedObjectModel+MagicalRecord.h */,\n\t\t\t\t985474A41BA01C7500A892C8 /* NSManagedObjectModel+MagicalRecord.m */,\n\t\t\t\t985474A51BA01C7500A892C8 /* NSPersistentStore+MagicalRecord.h */,\n\t\t\t\t985474A61BA01C7500A892C8 /* NSPersistentStore+MagicalRecord.m */,\n\t\t\t\t985474A71BA01C7500A892C8 /* NSPersistentStoreCoordinator+MagicalRecord.h */,\n\t\t\t\t985474A81BA01C7500A892C8 /* NSPersistentStoreCoordinator+MagicalRecord.m */,\n\t\t\t);\n\t\t\tpath = Categories;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t985474801BA01C7500A892C8 /* DataImport */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474811BA01C7500A892C8 /* MagicalImportFunctions.h */,\n\t\t\t\t985474821BA01C7500A892C8 /* MagicalImportFunctions.m */,\n\t\t\t\t985474831BA01C7500A892C8 /* NSAttributeDescription+MagicalDataImport.h */,\n\t\t\t\t985474841BA01C7500A892C8 /* NSAttributeDescription+MagicalDataImport.m */,\n\t\t\t\t985474851BA01C7500A892C8 /* NSEntityDescription+MagicalDataImport.h */,\n\t\t\t\t985474861BA01C7500A892C8 /* NSEntityDescription+MagicalDataImport.m */,\n\t\t\t\t985474871BA01C7500A892C8 /* NSNumber+MagicalDataImport.h */,\n\t\t\t\t985474881BA01C7500A892C8 /* NSNumber+MagicalDataImport.m */,\n\t\t\t\t985474891BA01C7500A892C8 /* NSObject+MagicalDataImport.h */,\n\t\t\t\t9854748A1BA01C7500A892C8 /* NSObject+MagicalDataImport.m */,\n\t\t\t\t9854748B1BA01C7500A892C8 /* NSRelationshipDescription+MagicalDataImport.h */,\n\t\t\t\t9854748C1BA01C7500A892C8 /* NSRelationshipDescription+MagicalDataImport.m */,\n\t\t\t\t9854748D1BA01C7500A892C8 /* NSString+MagicalDataImport.h */,\n\t\t\t\t9854748E1BA01C7500A892C8 /* NSString+MagicalDataImport.m */,\n\t\t\t);\n\t\t\tpath = DataImport;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9854748F1BA01C7500A892C8 /* NSManagedObject */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474901BA01C7500A892C8 /* NSManagedObject+MagicalAggregation.h */,\n\t\t\t\t985474911BA01C7500A892C8 /* NSManagedObject+MagicalAggregation.m */,\n\t\t\t\t985474921BA01C7500A892C8 /* NSManagedObject+MagicalDataImport.h */,\n\t\t\t\t985474931BA01C7500A892C8 /* NSManagedObject+MagicalDataImport.m */,\n\t\t\t\t985474941BA01C7500A892C8 /* NSManagedObject+MagicalFinders.h */,\n\t\t\t\t985474951BA01C7500A892C8 /* NSManagedObject+MagicalFinders.m */,\n\t\t\t\t985474961BA01C7500A892C8 /* NSManagedObject+MagicalRecord.h */,\n\t\t\t\t985474971BA01C7500A892C8 /* NSManagedObject+MagicalRecord.m */,\n\t\t\t\t985474981BA01C7500A892C8 /* NSManagedObject+MagicalRequests.h */,\n\t\t\t\t985474991BA01C7500A892C8 /* NSManagedObject+MagicalRequests.m */,\n\t\t\t);\n\t\t\tpath = NSManagedObject;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9854749A1BA01C7500A892C8 /* NSManagedObjectContext */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9854749B1BA01C7500A892C8 /* NSManagedObjectContext+MagicalObserving.h */,\n\t\t\t\t9854749C1BA01C7500A892C8 /* NSManagedObjectContext+MagicalObserving.m */,\n\t\t\t\t9854749D1BA01C7500A892C8 /* NSManagedObjectContext+MagicalRecord.h */,\n\t\t\t\t9854749E1BA01C7500A892C8 /* NSManagedObjectContext+MagicalRecord.m */,\n\t\t\t\t9854749F1BA01C7500A892C8 /* NSManagedObjectContext+MagicalSaves.h */,\n\t\t\t\t985474A01BA01C7500A892C8 /* NSManagedObjectContext+MagicalSaves.m */,\n\t\t\t\t985474A11BA01C7500A892C8 /* NSManagedObjectContext+MagicalThreading.h */,\n\t\t\t\t985474A21BA01C7500A892C8 /* NSManagedObjectContext+MagicalThreading.m */,\n\t\t\t);\n\t\t\tpath = NSManagedObjectContext;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t985474A91BA01C7500A892C8 /* Core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474AA1BA01C7500A892C8 /* MagicalRecord+Actions.h */,\n\t\t\t\t985474AB1BA01C7500A892C8 /* MagicalRecord+Actions.m */,\n\t\t\t\t985474AC1BA01C7500A892C8 /* MagicalRecord+ErrorHandling.h */,\n\t\t\t\t985474AD1BA01C7500A892C8 /* MagicalRecord+ErrorHandling.m */,\n\t\t\t\t985474AE1BA01C7500A892C8 /* MagicalRecord+iCloud.h */,\n\t\t\t\t985474AF1BA01C7500A892C8 /* MagicalRecord+iCloud.m */,\n\t\t\t\t985474B01BA01C7500A892C8 /* MagicalRecord+Options.h */,\n\t\t\t\t985474B11BA01C7500A892C8 /* MagicalRecord+Options.m */,\n\t\t\t\t985474B21BA01C7500A892C8 /* MagicalRecord+Setup.h */,\n\t\t\t\t985474B31BA01C7500A892C8 /* MagicalRecord+Setup.m */,\n\t\t\t\t985474B41BA01C7500A892C8 /* MagicalRecord+ShorthandSupport.h */,\n\t\t\t\t985474B51BA01C7500A892C8 /* MagicalRecord+ShorthandSupport.m */,\n\t\t\t\t985474B61BA01C7500A892C8 /* MagicalRecord.h */,\n\t\t\t\t985474B71BA01C7500A892C8 /* MagicalRecord.m */,\n\t\t\t\t985474B81BA01C7500A892C8 /* MagicalRecordShorthand.h */,\n\t\t\t);\n\t\t\tpath = Core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t985474D71BA169CE00A892C8 /* SVProgressHUD */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985474D81BA169CE00A892C8 /* SVProgressHUD.bundle */,\n\t\t\t\t985474D91BA169CE00A892C8 /* SVProgressHUD.h */,\n\t\t\t\t985474DA1BA169CE00A892C8 /* SVProgressHUD.m */,\n\t\t\t);\n\t\t\tpath = SVProgressHUD;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t9854742E1B9FD35F00A892C8 /* shakefun */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 985474551B9FD35F00A892C8 /* Build configuration list for PBXNativeTarget \"shakefun\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9854742B1B9FD35F00A892C8 /* Sources */,\n\t\t\t\t9854742C1B9FD35F00A892C8 /* Frameworks */,\n\t\t\t\t9854742D1B9FD35F00A892C8 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = shakefun;\n\t\t\tproductName = shakefun;\n\t\t\tproductReference = 9854742F1B9FD35F00A892C8 /* shakefun.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t9854744A1B9FD35F00A892C8 /* shakefunTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 985474581B9FD35F00A892C8 /* Build configuration list for PBXNativeTarget \"shakefunTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t985474471B9FD35F00A892C8 /* Sources */,\n\t\t\t\t985474481B9FD35F00A892C8 /* Frameworks */,\n\t\t\t\t985474491B9FD35F00A892C8 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t9854744D1B9FD35F00A892C8 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = shakefunTests;\n\t\t\tproductName = shakefunTests;\n\t\t\tproductReference = 9854744B1B9FD35F00A892C8 /* shakefunTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t985474271B9FD35F00A892C8 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0640;\n\t\t\t\tORGANIZATIONNAME = zhangmin;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t9854742E1B9FD35F00A892C8 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.4;\n\t\t\t\t\t};\n\t\t\t\t\t9854744A1B9FD35F00A892C8 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.4;\n\t\t\t\t\t\tTestTargetID = 9854742E1B9FD35F00A892C8;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 9854742A1B9FD35F00A892C8 /* Build configuration list for PBXProject \"shakefun\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 985474261B9FD35F00A892C8;\n\t\t\tproductRefGroup = 985474301B9FD35F00A892C8 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t9854742E1B9FD35F00A892C8 /* shakefun */,\n\t\t\t\t9854744A1B9FD35F00A892C8 /* shakefunTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t9854742D1B9FD35F00A892C8 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t985474411B9FD35F00A892C8 /* Main.storyboard in Resources */,\n\t\t\t\t985474461B9FD35F00A892C8 /* LaunchScreen.xib in Resources */,\n\t\t\t\t985474431B9FD35F00A892C8 /* Images.xcassets in Resources */,\n\t\t\t\t985474DB1BA169CE00A892C8 /* SVProgressHUD.bundle in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t985474491B9FD35F00A892C8 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t9854742B1B9FD35F00A892C8 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t985474C71BA01C7500A892C8 /* NSManagedObjectContext+MagicalRecord.m in Sources */,\n\t\t\t\t985474381B9FD35F00A892C8 /* AppDelegate.m in Sources */,\n\t\t\t\t985474731B9FF45300A892C8 /* AFSecurityPolicy.m in Sources */,\n\t\t\t\t985474D11BA01C7500A892C8 /* MagicalRecord+Setup.m in Sources */,\n\t\t\t\t985474C81BA01C7500A892C8 /* NSManagedObjectContext+MagicalSaves.m in Sources */,\n\t\t\t\t9854747D1BA01B5100A892C8 /* URLEntity.m in Sources */,\n\t\t\t\t985474C31BA01C7500A892C8 /* NSManagedObject+MagicalFinders.m in Sources */,\n\t\t\t\t985474BD1BA01C7500A892C8 /* NSNumber+MagicalDataImport.m in Sources */,\n\t\t\t\t9854743B1B9FD35F00A892C8 /* shakefun.xcdatamodeld in Sources */,\n\t\t\t\t985474701B9FF45300A892C8 /* AFHTTPRequestOperationManager.m in Sources */,\n\t\t\t\t985474C41BA01C7500A892C8 /* NSManagedObject+MagicalRecord.m in Sources */,\n\t\t\t\t985474BA1BA01C7500A892C8 /* MagicalImportFunctions.m in Sources */,\n\t\t\t\t985474CB1BA01C7500A892C8 /* NSPersistentStore+MagicalRecord.m in Sources */,\n\t\t\t\t985474C01BA01C7500A892C8 /* NSString+MagicalDataImport.m in Sources */,\n\t\t\t\t985474D21BA01C7500A892C8 /* MagicalRecord+ShorthandSupport.m in Sources */,\n\t\t\t\t985474BB1BA01C7500A892C8 /* NSAttributeDescription+MagicalDataImport.m in Sources */,\n\t\t\t\t985474C21BA01C7500A892C8 /* NSManagedObject+MagicalDataImport.m in Sources */,\n\t\t\t\t985474DC1BA169CE00A892C8 /* SVProgressHUD.m in Sources */,\n\t\t\t\t985474741B9FF45300A892C8 /* AFURLConnectionOperation.m in Sources */,\n\t\t\t\t985474BE1BA01C7500A892C8 /* NSObject+MagicalDataImport.m in Sources */,\n\t\t\t\t9854746F1B9FF45300A892C8 /* AFHTTPRequestOperation.m in Sources */,\n\t\t\t\t9854743E1B9FD35F00A892C8 /* ViewController.m in Sources */,\n\t\t\t\t985474BF1BA01C7500A892C8 /* NSRelationshipDescription+MagicalDataImport.m in Sources */,\n\t\t\t\t985474BC1BA01C7500A892C8 /* NSEntityDescription+MagicalDataImport.m in Sources */,\n\t\t\t\t985474751B9FF45300A892C8 /* AFURLRequestSerialization.m in Sources */,\n\t\t\t\t985474711B9FF45300A892C8 /* AFHTTPSessionManager.m in Sources */,\n\t\t\t\t985474721B9FF45300A892C8 /* AFNetworkReachabilityManager.m in Sources */,\n\t\t\t\t985474CD1BA01C7500A892C8 /* MagicalRecord+Actions.m in Sources */,\n\t\t\t\t985474761B9FF45300A892C8 /* AFURLResponseSerialization.m in Sources */,\n\t\t\t\t985474C11BA01C7500A892C8 /* NSManagedObject+MagicalAggregation.m in Sources */,\n\t\t\t\t9854747A1BA00B5600A892C8 /* CollectViewController.m in Sources */,\n\t\t\t\t985474771B9FF45300A892C8 /* AFURLSessionManager.m in Sources */,\n\t\t\t\t985474C51BA01C7500A892C8 /* NSManagedObject+MagicalRequests.m in Sources */,\n\t\t\t\t985474C91BA01C7500A892C8 /* NSManagedObjectContext+MagicalThreading.m in Sources */,\n\t\t\t\t985474CF1BA01C7500A892C8 /* MagicalRecord+iCloud.m in Sources */,\n\t\t\t\t985474CC1BA01C7500A892C8 /* NSPersistentStoreCoordinator+MagicalRecord.m in Sources */,\n\t\t\t\t985474CA1BA01C7500A892C8 /* NSManagedObjectModel+MagicalRecord.m in Sources */,\n\t\t\t\t985474D01BA01C7500A892C8 /* MagicalRecord+Options.m in Sources */,\n\t\t\t\t985474D31BA01C7500A892C8 /* MagicalRecord.m in Sources */,\n\t\t\t\t985474C61BA01C7500A892C8 /* NSManagedObjectContext+MagicalObserving.m in Sources */,\n\t\t\t\t985474351B9FD35F00A892C8 /* main.m in Sources */,\n\t\t\t\t985474CE1BA01C7500A892C8 /* MagicalRecord+ErrorHandling.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t985474471B9FD35F00A892C8 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t985474521B9FD35F00A892C8 /* shakefunTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t9854744D1B9FD35F00A892C8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9854742E1B9FD35F00A892C8 /* shakefun */;\n\t\t\ttargetProxy = 9854744C1B9FD35F00A892C8 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t9854743F1B9FD35F00A892C8 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t985474401B9FD35F00A892C8 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t985474441B9FD35F00A892C8 /* LaunchScreen.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t985474451B9FD35F00A892C8 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t985474531B9FD35F00A892C8 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIBC_FLATTEN_NIBS = YES;\n\t\t\t\tIBSC_FLATTEN_NIBS = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.4;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t985474541B9FD35F00A892C8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIBC_FLATTEN_NIBS = YES;\n\t\t\t\tIBSC_FLATTEN_NIBS = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.4;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t985474561B9FD35F00A892C8 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tGCC_PREFIX_HEADER = shakefun/PrefixHeader.pch;\n\t\t\t\tIBC_FLATTEN_NIBS = YES;\n\t\t\t\tIBSC_FLATTEN_NIBS = YES;\n\t\t\t\tINFOPLIST_FILE = shakefun/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t985474571B9FD35F00A892C8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tGCC_PREFIX_HEADER = shakefun/PrefixHeader.pch;\n\t\t\t\tIBC_FLATTEN_NIBS = YES;\n\t\t\t\tIBSC_FLATTEN_NIBS = YES;\n\t\t\t\tINFOPLIST_FILE = shakefun/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t985474591B9FD35F00A892C8 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = shakefunTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/shakefun.app/shakefun\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9854745A1B9FD35F00A892C8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = shakefunTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/shakefun.app/shakefun\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t9854742A1B9FD35F00A892C8 /* Build configuration list for PBXProject \"shakefun\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t985474531B9FD35F00A892C8 /* Debug */,\n\t\t\t\t985474541B9FD35F00A892C8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t985474551B9FD35F00A892C8 /* Build configuration list for PBXNativeTarget \"shakefun\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t985474561B9FD35F00A892C8 /* Debug */,\n\t\t\t\t985474571B9FD35F00A892C8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t985474581B9FD35F00A892C8 /* Build configuration list for PBXNativeTarget \"shakefunTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t985474591B9FD35F00A892C8 /* Debug */,\n\t\t\t\t9854745A1B9FD35F00A892C8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\n/* Begin XCVersionGroup section */\n\t\t985474391B9FD35F00A892C8 /* shakefun.xcdatamodeld */ = {\n\t\t\tisa = XCVersionGroup;\n\t\t\tchildren = (\n\t\t\t\t9854743A1B9FD35F00A892C8 /* shakefun.xcdatamodel */,\n\t\t\t);\n\t\t\tcurrentVersion = 9854743A1B9FD35F00A892C8 /* shakefun.xcdatamodel */;\n\t\t\tpath = shakefun.xcdatamodeld;\n\t\t\tsourceTree = \"<group>\";\n\t\t\tversionGroupType = wrapper.xcdatamodel;\n\t\t};\n/* End XCVersionGroup section */\n\t};\n\trootObject = 985474271B9FD35F00A892C8 /* Project object */;\n}\n"
  },
  {
    "path": "shakefun/shakefun.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:shakefun.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "shakefun/shakefunTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>zm.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "shakefun/shakefunTests/shakefunTests.m",
    "content": "//\n//  shakefunTests.m\n//  shakefunTests\n//\n//  Created by zm on 15/9/9.\n//  Copyright (c) 2015年 zm. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <XCTest/XCTest.h>\n\n@interface shakefunTests : XCTestCase\n\n@end\n\n@implementation shakefunTests\n\n- (void)setUp {\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n}\n\n- (void)tearDown {\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample {\n    // This is an example of a functional test case.\n    XCTAssert(YES, @\"Pass\");\n}\n\n- (void)testPerformanceExample {\n    // This is an example of a performance test case.\n    [self measureBlock:^{\n        // Put the code you want to measure the time of here.\n    }];\n}\n\n@end\n"
  },
  {
    "path": "zmconfuse.sh",
    "content": "#!/bin/bash\necho \"#########################################\"\necho  \"File Name:zmconfuse.sh\"\necho  \"Copyright (c) 2015 ZMConfuse\"\necho  \"Email:zm53373581@163.com\"\necho  \"QQGroup:175070221\"\necho  \"Create:2015.10.14\"\necho \"#######################################\"\necho \"用户修改区－开始\"\n#要替换的源代码所在的根目录,该脚本文件与根目录处于同级文件夹\nROOTFOLDER=\"shakefun\"\n#要排除的文件夹,例如demo中用到的第三方库AFNetworking等\nEXCLUDE_DIR=\"--exclude-dir=SVProgressHUD --exclude-dir=AFNetworking --exclude-dir=MagicalRecord --exclude-dir=Images.xcassets\"\necho \"用户修改区－结束\"\n\n#自定义的保留关键字,相当与白名单，添加到该文件中，一行一个，加入该文件的关键字将不被混淆;如工程中自定义的文件夹名称\nRESCUSTOM=\"resCustom.txt\"\n\n#保留关键字文件不可删除\nRESERVEDKEYWORDS=\"./reskeys.txt\"\n#最终的保留关键字＝保留关键字＋文件名\nRESKEYSALL=\"./reskeysall.txt\"\n#提取的所有关键字\nSOURCECODEKEYWORDS=\"./srckeys.txt\"\n#过滤后，最终要替换的关键字，混淆结束后，不删除，用于bug分析\nREPLACEKEYWORDS=\"./replacekeys.txt\"\n\n#删除已经存在的临时文件\nrm -f $SOURCECODEKEYWORDS\nrm -f $REPLACEKEYWORDS\nrm -f $RESKEYSALL\nrm -f temp.res\n\n#提取文件名列表\nrm -f f.list\nfind $ROOTFOLDER -type f | sed \"/\\/\\./d\" >f.list\n#根据要排除的文件目录，将文件列表分离\n#Exclude=$(echo $EXCLUDE_DIR | sed \"s/--exclude-dir\\=//g\" |sed \"s/ $//g\" | sed \"s/[*.]//g\" | sed \"s/ /\\\\\\|/g\")\nExclude=$(echo $EXCLUDE_DIR | sed \"s/--exclude-dir\\=//g\" |sed \"s/ $//g\" | sed \"s/ /\\\\\\|/g\")\n#保留文件列表\nrm -f f_res.list\ncat f.list | grep \"$Exclude\" >f_res.list\n#混淆文件列表\nrm -f f_rep.list\ncat f.list | grep -v \"$Exclude\" >f_rep.list\nrm -f f.list\n#提取文件名\nrm -f filter_file.txt\ncat f_rep.list | awk -F/ '{print $NF;}'| awk -F. '{print $1;}' | sed \"/^$/d\" | sort | uniq >filter_file.txt\n\n#从源代码目录中提取要过滤的函数关键字\nrm -f filter_fun.txt\ngrep -h -r -I  \"^[-+]\" $ROOTFOLDER $EXCLUDE_DIR --include '*.[mh]' |sed \"s/[+-]//g\"|sed \"s/[();,: *\\^\\/\\{]/ /g\"|sed \"s/[ ]*</</\"|awk '{split($0,b,\" \");print b[2];}'| sort|uniq |sed \"/^$/d\"|sed \"/^init/d\" >filter_fun.txt\n\n#从源代码目录中提取要过滤的属性关键字\nrm -f filter_property.txt\ngrep -r -h -I  ^@property $ROOTFOLDER  $EXCLUDE_DIR --include '*.[mh]' | sed \"s/(.*)/ /g\"  | sed \"s/<.*>//g\" |sed \"s/[,*;]/ /g\" | sed \"s/IBOutlet/ /g\" |awk '{split($0,s,\" \");print s[3];}'|sed \"/^$/d\" | sort |uniq >filter_property.txt\n\n#从源代码目录中提取要过滤的类关键字\nrm -f filter_class.txt\ngrep -h -r -I  \"^@interface\" $ROOTFOLDER  $EXCLUDE_DIR  --include '*.[mh]' | sed \"s/[:(]/ /\" |awk '{split($0,s,\" \");print s[2];}'|sort|uniq >filter_class.txt\n\n#从源代码目录中提取要过滤的协议关键字\ngrep -h -r -I  \"^@protocol\" $ROOTFOLDER  $EXCLUDE_DIR  --include '*.[mh]'| sed \"s/[\\<,;].*$//g\"|awk '{print $2;}' | sort | uniq >>filter_class.txt\n\n#合并要过滤的关键字，并重新排序过滤\nrm -f $SOURCECODEKEYWORDS\ncat filter_fun.txt filter_property.txt filter_class.txt filter_file.txt |sed \"/^$/d\" | sort | uniq >$SOURCECODEKEYWORDS\nrm -f filter_fun.txt\nrm -f filter_class.txt\nrm -f filter_file.txt\n\n#自动获取保留字，工程名等\nrm -f temp.res\ncat `cat f_rep.list | grep project.pbxproj` | grep -w productName | sed \"s/;//g\"|awk '{print $NF;}'>temp.res\n#提取要保留的文件名\ncat f_res.list | awk -F/ '{print $NF;}'| awk -F. '{print $1;}' | sed \"/^$/d\" | sort | uniq >>temp.res\nrm -f f_res.list\n#合并自定义保留字\n#判断自定义保留字文件是否存在，不存在即创建一个空的\nif [ ! -f \"$RESCUSTOM\" ]; then \ntouch \"$RESCUSTOM\" \nfi \ncat $RESERVEDKEYWORDS $RESCUSTOM temp.res | sort |uniq >$RESKEYSALL\nrm -f temp.res\n\n#过滤保留字，将需要混淆的关键字加密后写入文件\nrm -f $REPLACEKEYWORDS\ncat $SOURCECODEKEYWORDS | \nwhile read line\ndo\nif grep $line $RESKEYSALL\nthen\necho filter1: $line\nelse\n#使用md5对关键字进行加密\nmd5 -r -s $line  | sed s/\\\"//g >> $REPLACEKEYWORDS\nfi\ndone\nrm -f $SOURCECODEKEYWORDS\n\n#开始混淆，替换源代码中的关键字为加密后的,防止开头为数字的情况\ncat $REPLACEKEYWORDS |\nwhile read line\ndo\nvar1=$(echo \"$line\"|awk '{print \"z\"$1\"m\"}')\nvar2=$(echo \"$line\"|awk '{print $2}')\nrm -f rep.tmp\nif grep -r -n -I -w \"[_]\\{0,1\\}$var2\"  $ROOTFOLDER $EXCLUDE_DIR   --include=\"*.[mhc]\" --include=\"*.mm\" --include=\"*.pch\" --include=\"*.storyboard\" --include=\"*.xib\" --include=\"*.nib\" --include=\"contents\" --include=\"*.pbxproj\" >rep.tmp\nthen\ncat rep.tmp |\nwhile read -r l\ndo\n#获取文件路径\nv1=$(echo \"$l\"|cut -d: -f 1 )\n#获取行号\nv2=$(echo \"$l\"|cut -d: -f 2 )\n#获取指定行数据\nv3=$(sed -n \"$v2\"p \"$v1\")\n##sed自带文件文本替换功能，不符合我们的期望，故放弃使用；有无适合的脚本命令，还希望脚本高手予以指点～\n#sed -i '' ''\"$v2\"'s/'\"$var2\"'/'\"$var1\"'/g' $v1\n#特殊字符转义替换，echo中 输出的变量 一定要加双引号！！！\nv4=$(echo \"$v3\" | awk '{gsub(/\"/, \"\\\\\\\"\", $0);gsub(/</, \"\\\\\\<\", $0);gsub(/>/, \"\\\\\\>\", $0);gsub(/\\*/, \"\\\\\\*\", $0);gsub(/\\//, \"\\\\\\/\", $0);gsub(/\\[/, \"\\\\\\[\", $0);gsub(/\\]/, \"\\\\\\]\", $0);gsub(/\\{/, \"\\\\\\{\", $0);gsub(/\\}/, \"\\\\\\}\", $0);gsub(/\\&/, \"\\\\\\\\\\&\", $0); print $0;}')\n#单词替换\nvar3=$(./zmreplacewords.run \"$v4\" \"$var2\" \"$var1\")\n#整行替换\nsed -i '' \"$v2\"'s/.*/'\"$var3\"'/g' \"$v1\"\necho \"step2:$l\"\ndone\nelse\necho \"step2:do not find:$var2\"\nfi\ndone\nrm -f tmp.txt\n\n#过滤保留字，用于属性设置函数混淆，将需要混淆的关键字加密后写入文件\nrm -f repProperty.txt\ncat filter_property.txt | \nwhile read line\ndo\nif grep $line $RESKEYSALL\nthen\necho filter1: $line\nelse\nmd5 -r -s $line  | sed s/\\\"//g >> repProperty.txt\nfi\ndone\nrm -f filter_property.txt\n\n#开始混淆，替换属性前带下划线的地方\ncat repProperty.txt |\nwhile read line\ndo\nar=(`echo \"$line\"|cut -f 1-2 -d \" \"`)\nlastFind=`echo _${ar[1]}`\nlastRep=`echo _z${ar[0]}m`\nrm -f rep.tmp\nif grep -r -n -I -w \"$lastFind\"  $ROOTFOLDER $EXCLUDE_DIR   --include=\"*.[mhc]\" --include=\"*.mm\" --include=\"*.storyboard\" --include=\"*.xib\" >rep.tmp\nthen\ncat rep.tmp |\nwhile read l\ndo\nv1=$(echo \"$l\"|cut -d: -f 1 )\nv2=$(echo \"$l\"|cut -d: -f 2 )\nsed -i '' ''\"$v2\"'s/'\"$lastFind\"'/'\"$lastRep\"'/g' $v1\necho \"step3:\"$l\ndone\nelse\necho \"step3:do not find:\"$lastFind\nfi\ndone\nrm -f rep.tmp\n\n#开始混淆，替换属性设置函数\ncat repProperty.txt |\nwhile read line\ndo\nar=(`echo \"$line\"|cut -f 1-2 -d \" \"`)\nfirst=`echo ${ar[1]}|cut -c -1| sed \"y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/\"`\nsecond=`echo ${ar[1]}|cut -c 2-`\nlastFind=`echo set$first$second`\nlastRep=`echo setZ${ar[0]}m`\nrm -f rep.tmp\nif grep -r -n -I -w \"$lastFind\"  $ROOTFOLDER $EXCLUDE_DIR   --include=\"*.[mhc]\" --include=\"*.mm\" --include=\"*.storyboard\" --include=\"*.xib\" >rep.tmp\nthen\ncat rep.tmp |\nwhile read l\ndo\nv1=$(echo \"$l\"|cut -d: -f 1 )\nv2=$(echo \"$l\"|cut -d: -f 2 )\nsed -i '' ''\"$v2\"'s/'\"$lastFind\"'/'\"$lastRep\"'/g' $v1\necho \"step3:\"$l\ndone\nelse\necho \"step3:do not find:\"$lastFind\nfi\ndone\nrm -f rep.tmp\nrm -f repProperty.txt\n\ncat f_rep.list |\nwhile read line\ndo\necho \"old name:\"$line\n#获取文件名，带后缀\nv1=$(echo \"$line\" | sed \"s/\\// /g\" | awk '{print $NF}')\necho \"v1=\"$v1\n#获取文件名，不带后缀\nv2=$(echo $v1 | sed \"s/\\./ /g\" | awk '{print $1}')\necho \"v2=\"$v2\nif grep -w $v2 $RESKEYSALL\nthen\necho \"find.\"\nelse\n#获取后缀\nv3=$(echo $v1 | sed \"s/\\./ /g\" | awk '{print \".\"$2}')\necho \"v3=\"$v3\n#对不带后缀的文件名加密\nv4=$(md5 -q -s \"$v2\" | sed \"s/.*/z&m/g\")\necho \"v4=\"$v4\n#获取路径\nv5=$(echo \"$line\" | sed \"s/\"$v1\"//g\")\necho \"v5=\"$v5\n#修改文件名\nmv $line $v5$v4$v3\necho \"new name:\"$v5$v4$v3\nfi\ndone\nrm -f f_rep.list\n\nrm -f $RESKEYSALL\n\nexit\n"
  },
  {
    "path": "zmreplacewords/zmreplacewords/main.c",
    "content": "//\n//  main.c\n//  zmreplacewords\n//\n//  Created by zm on 16/2/15.\n//  Copyright © 2016年 zm. All rights reserved.\n//\n\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n\nchar *g_dictWords = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\";\n\n//单词替换\nchar *zmWordsReplace(char *src, char *old, char *new);\n//字符串替换\nchar *zmStringReplace(char *src, char *old, char *new);\n\nint main(int argc, const char * argv[]) {\n//    //打印参数信息\n//    for (int i = 0; i < argc; ++i) {\n//        printf(\"%d:%s\\n\", i + 1, argv[i]);\n//    }\n    if (argc != 4) {\n        printf(\"Arguments error.For example:./zmreplacewords \\\"This is test cases.\\\" is are\\n\");\n        return 0;\n    }\n\n#if 1\n    char *rawString = (char *)argv[1];\n    char *old = (char *)argv[2];\n    char *new = (char *)argv[3];\n#else\n    char *rawString = \"\t\t9854747A1BA00B5600A892C8 /* CollectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 985474791BA00B5600A892C8 /* CollectViewController.m */; };\";\n    char *old = \"CollectViewController\";\n    char *new = \"aaaaaaaaaaaa\";\n#endif\n    \n    //单词替换\n    char *newString = zmWordsReplace(rawString, old, new);\n    char *retString = newString;\n    \n//    //特殊字符转义\n//    //char *specialChar = \"<>/*\";\n//    char *specialChar = \"\";\n//    char spcialCharArrayOld[2] = {\"\"};\n//    char spcialCharArrayNew[3] = {\"\\\\*\"};\n//    for (int j = 0; j < strlen(specialChar); ++j) {\n//        spcialCharArrayOld[0] = specialChar[j];\n//        spcialCharArrayNew[1] = specialChar[j];\n//        retString = zmStringReplace(newString, spcialCharArrayOld, spcialCharArrayNew);\n//        if (retString != newString) {\n//            if (olds != newString) {\n//                free(newString);\n//            }\n//            newString = retString;\n//        }\n//    }\n    printf(\"%s\\n\", retString);\n    if (rawString != retString) {\n        free(retString);\n    }\n    return 0;\n}\n\n//单词替换，如:This is a good news.==>is -> are ==> This are a good news.\nchar *zmWordsReplace(char *src, char *old, char *new)\n{\n    int iReplaceCount = 0;\n    //char *olds = src;\n    char pre = '\\0';\n    char aft = '\\0';\n    char *pFindChar = NULL;\n    char *pStart = src;\n    \n    char *newString = src;\n    char *newStringTmp = NULL;\n    //step :首先统计要替换的单词数量\n    char *pFindWord = strstr(pStart, old);\n    while (pFindWord != NULL) {\n        //取出前后字符\n        if (pFindWord == pStart) {\n            pre = '\\0';\n        }\n        else\n        {\n            pre = *(pFindWord - 1);\n        }\n        aft = *(pFindWord + strlen(old));\n        \n        pFindChar = strchr(g_dictWords, pre);\n        if (!pFindChar || pre == '\\0') {\n            pFindChar = strchr(g_dictWords, aft);\n            if (!pFindChar || aft == '\\0') {\n                //printf(\"i am here: pPre=%c find=%s pAft=%c\\n\", pre, find, aft);\n                iReplaceCount++;\n            }\n        }\n        //查找位置向前移动\n        pFindWord = strstr(pFindWord + strlen(old), old);\n        pre = '\\0';\n        aft = '\\0';\n    }\n    \n    if (iReplaceCount > 0) {\n        //step :根据统计大小，为新的字符串申请空间\n        unsigned long iNewLenght = strlen(src) + (strlen(new) - strlen(old)) * iReplaceCount;\n        //printf(\"iReplaceCount is %d totol lenth = %lu\\n\", iReplaceCount, iNewLenght);\n        newString = (char *)calloc(iNewLenght, 1);\n        newStringTmp = newString;\n        \n        //step :根据原始字符串，填充新的字符串\n        pStart = src;\n        pFindWord = strstr(pStart, old);\n        while (pFindWord != NULL) {\n            //取出前后字符\n            if (pFindWord == pStart) {\n                pre = '\\0';\n            }\n            else\n            {\n                pre = *(pFindWord - 1);\n            }\n            aft = *(pFindWord + strlen(old));\n            \n            pFindChar = strchr(g_dictWords, pre);\n            if (!pFindChar || pre == '\\0') {\n                pFindChar = strchr(g_dictWords, aft);\n                if (!pFindChar || aft == '\\0') {\n                    //拷贝找到的字符串之前的字符串\n                    strncpy(newStringTmp, pStart, pFindWord - pStart);\n                    //向新自负串中追加替换后的字符串\n                    strcat(newStringTmp, new);\n                    //printf(\"i am here: pPre=%c find=%s pAft=%c newString=%s\\n\", pre, pFindWord, aft, newStringTmp);\n                    //开始位置向前移动\n                    pStart = pFindWord + strlen(old);\n                    newStringTmp = newString + strlen(newString);\n                }\n            }\n            //查找位置向前移动\n            pFindWord = strstr(pFindWord + strlen(old), old);\n            pre = '\\0';\n            aft = '\\0';\n        }\n        \n        //step :追加最后一部分字符串\n        if (pStart != src) {\n            strcat(newString, pStart);\n        }\n        \n        //printf(\"last string is :%s\\n\", newString);\n        //free(newString);\n    }\n    \n    return newString;\n}\n\n//字符串替换，如:This is a good news.==>is -> are ==> Thare are a good news.\nchar *zmStringReplace(char *src, char *old, char *new)\n{\n    int iReplaceCount = 0;\n    char *pStart = src;\n    \n    char *newString = src;\n    char *newStringTmp = NULL;\n    //step :首先统计要替换的字符串数量\n    char *pFindWord = strstr(pStart, old);\n    while (pFindWord != NULL) {\n        iReplaceCount++;\n        //查找位置向前移动\n        pFindWord = strstr(pFindWord + strlen(old), old);\n\n    }\n    \n    if (iReplaceCount > 0) {\n        //step :根据统计大小，为新的字符串申请空间\n        unsigned long iNewLenght = strlen(src) + (strlen(new) - strlen(old)) * iReplaceCount;\n        //printf(\"iReplaceCount is %d totol lenth = %lu\\n\", iReplaceCount, iNewLenght);\n        newString = (char *)calloc(iNewLenght, 1);\n        newStringTmp = newString;\n        \n        //step :根据原始字符串，填充新的字符串\n        pStart = src;\n        pFindWord = strstr(pStart, old);\n        while (pFindWord != NULL) {\n            //拷贝找到的字符串之前的字符串\n            strncpy(newStringTmp, pStart, pFindWord - pStart);\n            //向新自负串中追加替换后的字符串\n            strcat(newStringTmp, new);\n            //printf(\"i am here: pPre=%c find=%s pAft=%c newString=%s\\n\", pre, pFindWord, aft, newStringTmp);\n            //开始位置向前移动\n            pStart = pFindWord + strlen(old);\n            newStringTmp = newString + strlen(newString);\n\n            //查找位置向前移动\n            pFindWord = strstr(pFindWord + strlen(old), old);\n        }\n        \n        //step :追加最后一部分字符串\n        if (pStart != src) {\n            strcat(newString, pStart);\n        }\n        \n        //printf(\"last string is :%s\\n\", newString);\n        //free(newString);\n    }\n    \n    return newString;\n}\n"
  },
  {
    "path": "zmreplacewords/zmreplacewords.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t985347B81C71C33800AC6ECE /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 985347B71C71C33800AC6ECE /* main.c */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t985347B21C71C33800AC6ECE /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = /usr/share/man/man1/;\n\t\t\tdstSubfolderSpec = 0;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 1;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t985347B41C71C33800AC6ECE /* zmreplacewords */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = zmreplacewords; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t985347B71C71C33800AC6ECE /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t985347B11C71C33800AC6ECE /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t985347AB1C71C33800AC6ECE = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985347B61C71C33800AC6ECE /* zmreplacewords */,\n\t\t\t\t985347B51C71C33800AC6ECE /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t985347B51C71C33800AC6ECE /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985347B41C71C33800AC6ECE /* zmreplacewords */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t985347B61C71C33800AC6ECE /* zmreplacewords */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t985347B71C71C33800AC6ECE /* main.c */,\n\t\t\t);\n\t\t\tpath = zmreplacewords;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t985347B31C71C33800AC6ECE /* zmreplacewords */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 985347BB1C71C33800AC6ECE /* Build configuration list for PBXNativeTarget \"zmreplacewords\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t985347B01C71C33800AC6ECE /* Sources */,\n\t\t\t\t985347B11C71C33800AC6ECE /* Frameworks */,\n\t\t\t\t985347B21C71C33800AC6ECE /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = zmreplacewords;\n\t\t\tproductName = zmreplacewords;\n\t\t\tproductReference = 985347B41C71C33800AC6ECE /* zmreplacewords */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t985347AC1C71C33800AC6ECE /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0720;\n\t\t\t\tORGANIZATIONNAME = zm;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t985347B31C71C33800AC6ECE = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 985347AF1C71C33800AC6ECE /* Build configuration list for PBXProject \"zmreplacewords\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 985347AB1C71C33800AC6ECE;\n\t\t\tproductRefGroup = 985347B51C71C33800AC6ECE /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t985347B31C71C33800AC6ECE /* zmreplacewords */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t985347B01C71C33800AC6ECE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t985347B81C71C33800AC6ECE /* main.c in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t985347B91C71C33800AC6ECE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.10;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t985347BA1C71C33800AC6ECE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.10;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t985347BC1C71C33800AC6ECE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t985347BD1C71C33800AC6ECE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t985347AF1C71C33800AC6ECE /* Build configuration list for PBXProject \"zmreplacewords\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t985347B91C71C33800AC6ECE /* Debug */,\n\t\t\t\t985347BA1C71C33800AC6ECE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t985347BB1C71C33800AC6ECE /* Build configuration list for PBXNativeTarget \"zmreplacewords\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t985347BC1C71C33800AC6ECE /* Debug */,\n\t\t\t\t985347BD1C71C33800AC6ECE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 985347AC1C71C33800AC6ECE /* Project object */;\n}\n"
  },
  {
    "path": "zmreplacewords/zmreplacewords.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:zmreplacewords.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  }
]